diff --git a/composer.json b/composer.json index d640a66..5b26d51 100644 --- a/composer.json +++ b/composer.json @@ -20,7 +20,7 @@ "require": { "php": "^7.4 || ^8.0", "contao/core-bundle": "^4.9", - "con4gis/core": "^6.0.18", + "con4gis/core": "^6.0.21", "menatwork/contao-multicolumnwizard-bundle": "^3.5.8" }, "conflict": { diff --git a/package-lock.json b/package-lock.json index d5bdc11..cde9eb3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -53,15 +53,15 @@ }, "dependencies": { "@babel/compat-data": { - "version": "7.20.14", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.14.tgz", - "integrity": "sha512-0YpKHD6ImkWMEINCyDAD0HLLUH/lPCefG8ld9it8DJB2wnApraKuhgYTvTY1z7UFIfBTGy5LwncZ+5HWWGbhFw==", + "version": "7.20.10", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.10.tgz", + "integrity": "sha512-sEnuDPpOJR/fcafHMjpcpGN5M2jbUGUHwmuWKM/YdPzeEDJg8bgmbcWQFUfE32MQjti1koACvoPVsDe8Uq+idg==", "dev": true }, "@babel/generator": { - "version": "7.20.14", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.14.tgz", - "integrity": "sha512-AEmuXHdcD3A52HHXxaTmYlb8q/xMEhoRP67B3T4Oq7lbmSoqroMZzjnGj3+i1io3pdnF8iBYVu4Ilj+c4hBxYg==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.7.tgz", + "integrity": "sha512-7wqMOJq8doJMZmP4ApXTzLxSr7+oO2jroJURrVEp6XShrQUObV8Tq/D0NCcoYg2uHqUrjzO0zwBjoYzelxK+sw==", "dev": true, "requires": { "@babel/types": "^7.20.7", @@ -121,9 +121,9 @@ "dev": true }, "@babel/parser": { - "version": "7.20.15", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.15.tgz", - "integrity": "sha512-DI4a1oZuf8wC+oAJA9RW6ga3Zbe8RZFt7kD9i4qAspz3I/yHet1VvC3DiSy/fsUvv5pvJuNPh0LPOdCcqinDPg==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.7.tgz", + "integrity": "sha512-T3Z9oHybU+0vZlY9CiDSJQTD5ZapcW18ZctFMi0MOAl/4BjFF4ul7NVSARLdbGO5vDqy9eQiGTV0LtKfvCYvcg==", "dev": true }, "@babel/template": { @@ -138,9 +138,9 @@ } }, "@babel/traverse": { - "version": "7.20.13", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.13.tgz", - "integrity": "sha512-kMJXfF0T6DIS9E8cgdLCSAL+cuCK+YEZHWiLK0SXpTo8YRj5lpJu3CDNKiIBCne4m9hhTIqUg6SYTAI39tAiVQ==", + "version": "7.20.12", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.12.tgz", + "integrity": "sha512-MsIbFN0u+raeja38qboyF8TIT7K0BFzz/Yd/77ta4MsUsmP2RAnidIlwq7d5HFQrH/OZJecGV6B71C4zAgpoSQ==", "dev": true, "requires": { "@babel/code-frame": "^7.18.6", @@ -149,7 +149,7 @@ "@babel/helper-function-name": "^7.19.0", "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.20.13", + "@babel/parser": "^7.20.7", "@babel/types": "^7.20.7", "debug": "^4.1.0", "globals": "^11.1.0" @@ -178,50 +178,49 @@ } }, "browserslist": { - "version": "4.21.5", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", - "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", + "version": "4.21.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", + "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001449", - "electron-to-chromium": "^1.4.284", - "node-releases": "^2.0.8", - "update-browserslist-db": "^1.0.10" + "caniuse-lite": "^1.0.30001400", + "electron-to-chromium": "^1.4.251", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.9" } }, "caniuse-lite": { - "version": "1.0.30001451", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001451.tgz", - "integrity": "sha512-XY7UbUpGRatZzoRft//5xOa69/1iGJRBlrieH6QYrkKLIFn3m7OVEJ81dSrKoy2BnKsdbX5cLrOispZNYo9v2w==", + "version": "1.0.30001441", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001441.tgz", + "integrity": "sha512-OyxRR4Vof59I3yGWXws6i908EtGbMzVUi3ganaZQHmydk1iwDhRnvaPG2WaR0KcqrDFKrxVZHULT396LEPhXfg==", "dev": true }, "electron-to-chromium": { - "version": "1.4.289", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.289.tgz", - "integrity": "sha512-relLdMfPBxqGCxy7Gyfm1HcbRPcFUJdlgnCPVgQ23sr1TvUrRJz0/QPoGP0+x41wOVSTN/Wi3w6YDgHiHJGOzg==", + "version": "1.4.284", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", + "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==", "dev": true }, - "json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } }, "node-releases": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", - "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.8.tgz", + "integrity": "sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A==", "dev": true }, - "update-browserslist-db": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", - "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", - "dev": true, - "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - } + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true } } }, @@ -783,20 +782,20 @@ } }, "@babel/helpers": { - "version": "7.20.13", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.13.tgz", - "integrity": "sha512-nzJ0DWCL3gB5RCXbUO3KIMMsBY2Eqbx8mBpKGE/02PgyRQFcPQLbkQ1vyy596mZLaP+dAfD+R4ckASzNVmW3jg==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.7.tgz", + "integrity": "sha512-PBPjs5BppzsGaxHQCDKnZ6Gd9s6xl8bBCluz3vEInLGRJmnZan4F6BYCeqtyXqkk4W5IlPmjK4JlOuZkpJ3xZA==", "dev": true, "requires": { "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.13", + "@babel/traverse": "^7.20.7", "@babel/types": "^7.20.7" }, "dependencies": { "@babel/generator": { - "version": "7.20.14", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.14.tgz", - "integrity": "sha512-AEmuXHdcD3A52HHXxaTmYlb8q/xMEhoRP67B3T4Oq7lbmSoqroMZzjnGj3+i1io3pdnF8iBYVu4Ilj+c4hBxYg==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.7.tgz", + "integrity": "sha512-7wqMOJq8doJMZmP4ApXTzLxSr7+oO2jroJURrVEp6XShrQUObV8Tq/D0NCcoYg2uHqUrjzO0zwBjoYzelxK+sw==", "dev": true, "requires": { "@babel/types": "^7.20.7", @@ -827,9 +826,9 @@ "dev": true }, "@babel/parser": { - "version": "7.20.15", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.15.tgz", - "integrity": "sha512-DI4a1oZuf8wC+oAJA9RW6ga3Zbe8RZFt7kD9i4qAspz3I/yHet1VvC3DiSy/fsUvv5pvJuNPh0LPOdCcqinDPg==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.7.tgz", + "integrity": "sha512-T3Z9oHybU+0vZlY9CiDSJQTD5ZapcW18ZctFMi0MOAl/4BjFF4ul7NVSARLdbGO5vDqy9eQiGTV0LtKfvCYvcg==", "dev": true }, "@babel/template": { @@ -844,9 +843,9 @@ } }, "@babel/traverse": { - "version": "7.20.13", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.13.tgz", - "integrity": "sha512-kMJXfF0T6DIS9E8cgdLCSAL+cuCK+YEZHWiLK0SXpTo8YRj5lpJu3CDNKiIBCne4m9hhTIqUg6SYTAI39tAiVQ==", + "version": "7.20.12", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.12.tgz", + "integrity": "sha512-MsIbFN0u+raeja38qboyF8TIT7K0BFzz/Yd/77ta4MsUsmP2RAnidIlwq7d5HFQrH/OZJecGV6B71C4zAgpoSQ==", "dev": true, "requires": { "@babel/code-frame": "^7.18.6", @@ -855,7 +854,7 @@ "@babel/helper-function-name": "^7.19.0", "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.20.13", + "@babel/parser": "^7.20.7", "@babel/types": "^7.20.7", "debug": "^4.1.0", "globals": "^11.1.0" @@ -1756,9 +1755,9 @@ }, "dependencies": { "@babel/generator": { - "version": "7.20.14", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.14.tgz", - "integrity": "sha512-AEmuXHdcD3A52HHXxaTmYlb8q/xMEhoRP67B3T4Oq7lbmSoqroMZzjnGj3+i1io3pdnF8iBYVu4Ilj+c4hBxYg==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.7.tgz", + "integrity": "sha512-7wqMOJq8doJMZmP4ApXTzLxSr7+oO2jroJURrVEp6XShrQUObV8Tq/D0NCcoYg2uHqUrjzO0zwBjoYzelxK+sw==", "dev": true, "requires": { "@babel/types": "^7.20.7", @@ -1811,9 +1810,9 @@ "dev": true }, "@babel/parser": { - "version": "7.20.15", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.15.tgz", - "integrity": "sha512-DI4a1oZuf8wC+oAJA9RW6ga3Zbe8RZFt7kD9i4qAspz3I/yHet1VvC3DiSy/fsUvv5pvJuNPh0LPOdCcqinDPg==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.7.tgz", + "integrity": "sha512-T3Z9oHybU+0vZlY9CiDSJQTD5ZapcW18ZctFMi0MOAl/4BjFF4ul7NVSARLdbGO5vDqy9eQiGTV0LtKfvCYvcg==", "dev": true }, "@babel/template": { @@ -1828,9 +1827,9 @@ } }, "@babel/traverse": { - "version": "7.20.13", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.13.tgz", - "integrity": "sha512-kMJXfF0T6DIS9E8cgdLCSAL+cuCK+YEZHWiLK0SXpTo8YRj5lpJu3CDNKiIBCne4m9hhTIqUg6SYTAI39tAiVQ==", + "version": "7.20.10", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.10.tgz", + "integrity": "sha512-oSf1juCgymrSez8NI4A2sr4+uB/mFd9MXplYGPEBnfAuWmmyeVcHa6xLPiaRBcXkcb/28bgxmQLTVwFKE1yfsg==", "dev": true, "requires": { "@babel/code-frame": "^7.18.6", @@ -1839,7 +1838,7 @@ "@babel/helper-function-name": "^7.19.0", "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.20.13", + "@babel/parser": "^7.20.7", "@babel/types": "^7.20.7", "debug": "^4.1.0", "globals": "^11.1.0" @@ -3982,9 +3981,9 @@ "dev": true }, "decode-uri-component": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", - "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", "dev": true }, "default-compare": { @@ -5298,6 +5297,12 @@ "safer-buffer": ">= 2.1.2 < 3" } }, + "immutable": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.2.4.tgz", + "integrity": "sha512-WDxL3Hheb1JkRN3sQkyujNlL/xRjAo3rJtaU5xeufUauG66JdMr32bLj4gF+vWl84DIA3Zxw7tiAjneYzRRw+w==", + "dev": true + }, "import-local": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", @@ -5836,12 +5841,12 @@ } }, "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "requires": { - "yallist": "^3.0.2" + "yallist": "^4.0.0" } }, "lru-queue": { @@ -6051,9 +6056,9 @@ "dev": true }, "nan": { - "version": "2.14.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", - "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", + "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==", "dev": true, "optional": true }, @@ -6102,15 +6107,6 @@ "which": "^2.0.2" }, "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, "semver": { "version": "7.3.8", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", @@ -6119,12 +6115,6 @@ "requires": { "lru-cache": "^6.0.0" } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true } } }, @@ -6482,6 +6472,12 @@ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", "dev": true }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, "pify": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", @@ -6924,6 +6920,118 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, + "sass": { + "version": "1.58.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.58.0.tgz", + "integrity": "sha512-PiMJcP33DdKtZ/1jSjjqVIKihoDc6yWmYr9K/4r3fVVIEDAluD0q7XZiRKrNJcPK3qkLRF/79DND1H5q1LBjgg==", + "dev": true, + "requires": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "dependencies": { + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + } + } + }, "schema-utils": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", @@ -7146,6 +7254,12 @@ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true }, + "source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true + }, "source-map-resolve": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", @@ -7994,9 +8108,9 @@ "dev": true }, "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, "yargs": { diff --git a/src/Resources/public/build/c4g_visualization.js b/src/Resources/public/build/c4g_visualization.js index 0caddd0..7b800e9 100644 --- a/src/Resources/public/build/c4g_visualization.js +++ b/src/Resources/public/build/c4g_visualization.js @@ -1,41296 +1,2 @@ -/******/ (() => { // webpackBootstrap -/******/ var __webpack_modules__ = ({ - -/***/ "./node_modules/c3/c3.js": -/*!*******************************!*\ - !*** ./node_modules/c3/c3.js ***! - \*******************************/ -/***/ (function(module, __unused_webpack_exports, __webpack_require__) { - -/* @license C3.js v0.7.20 | (c) C3 Team and other contributors | http://c3js.org/ */ -(function (global, factory) { - true ? module.exports = factory() : - 0; -}(this, (function () { 'use strict'; - - function ChartInternal(api) { - var $$ = this; - // Note: This part will be replaced by rollup-plugin-modify - // When bundling esm output. Beware of changing this line. - // TODO: Maybe we should check that the modification by rollup-plugin-modify - // is valid during unit tests. - $$.d3 = window.d3 - ? window.d3 - : true - ? __webpack_require__(/*! d3 */ "./node_modules/d3/index.js") - : 0; - $$.api = api; - $$.config = $$.getDefaultConfig(); - $$.data = {}; - $$.cache = {}; - $$.axes = {}; - } - - /** - * The Chart class - * - * The methods of this class is the public APIs of the chart object. - */ - function Chart(config) { - this.internal = new ChartInternal(this); - this.internal.loadConfig(config); - this.internal.beforeInit(config); - this.internal.init(); - this.internal.afterInit(config); - (function bindThis(fn, target, argThis) { - Object.keys(fn).forEach(function (key) { - target[key] = fn[key].bind(argThis); - if (Object.keys(fn[key]).length > 0) { - bindThis(fn[key], target[key], argThis); - } - }); - })(Chart.prototype, this, this); - } - - var asHalfPixel = function (n) { - return Math.ceil(n) + 0.5; - }; - var ceil10 = function (v) { - return Math.ceil(v / 10) * 10; - }; - var diffDomain = function (d) { - return d[1] - d[0]; - }; - var getOption = function (options, key, defaultValue) { - return isDefined(options[key]) ? options[key] : defaultValue; - }; - var getPathBox = function (path) { - var box = getBBox(path), items = [path.pathSegList.getItem(0), path.pathSegList.getItem(1)], minX = items[0].x, minY = Math.min(items[0].y, items[1].y); - return { x: minX, y: minY, width: box.width, height: box.height }; - }; - var getBBox = function (element) { - try { - return element.getBBox(); - } - catch (ignore) { - // Firefox will throw an exception if getBBox() is called whereas the - // element is rendered with display:none - // See https://github.com/c3js/c3/issues/2692 - // The previous code was using `getBoundingClientRect` which was returning - // everything at 0 in this case so let's reproduce this behavior here. - return { x: 0, y: 0, width: 0, height: 0 }; - } - }; - var hasValue = function (dict, value) { - var found = false; - Object.keys(dict).forEach(function (key) { - if (dict[key] === value) { - found = true; - } - }); - return found; - }; - var isArray = function (o) { - return Array.isArray(o); - }; - var isDefined = function (v) { - return typeof v !== 'undefined'; - }; - var isEmpty = function (o) { - return (typeof o === 'undefined' || - o === null || - (isString(o) && o.length === 0) || - (typeof o === 'object' && Object.keys(o).length === 0)); - }; - var isFunction = function (o) { - return typeof o === 'function'; - }; - var isNumber = function (o) { - return typeof o === 'number'; - }; - var isString = function (o) { - return typeof o === 'string'; - }; - var isUndefined = function (v) { - return typeof v === 'undefined'; - }; - var isValue = function (v) { - return v || v === 0; - }; - var notEmpty = function (o) { - return !isEmpty(o); - }; - var sanitise = function (str) { - return typeof str === 'string' - ? str.replace(//g, '>') - : str; - }; - var flattenArray = function (arr) { - return Array.isArray(arr) ? [].concat.apply([], arr) : []; - }; - /** - * Returns whether the point is within the given box. - * - * @param {Array} point An [x,y] coordinate - * @param {Object} box An object with {x, y, width, height} keys - * @param {Number} sensitivity An offset to ease check on very small boxes - */ - var isWithinBox = function (point, box, sensitivity) { - if (sensitivity === void 0) { sensitivity = 0; } - var xStart = box.x - sensitivity; - var xEnd = box.x + box.width + sensitivity; - var yStart = box.y + box.height + sensitivity; - var yEnd = box.y - sensitivity; - return (xStart < point[0] && point[0] < xEnd && yEnd < point[1] && point[1] < yStart); - }; - /** - * Returns Internet Explorer version number (or false if no Internet Explorer used). - * - * @param string agent Optional parameter to specify user agent - */ - var getIEVersion = function (agent) { - // https://stackoverflow.com/questions/19999388/check-if-user-is-using-ie - if (typeof agent === 'undefined') { - agent = window.navigator.userAgent; - } - var pos = agent.indexOf('MSIE '); // up to IE10 - if (pos > 0) { - return parseInt(agent.substring(pos + 5, agent.indexOf('.', pos)), 10); - } - pos = agent.indexOf('Trident/'); // IE11 - if (pos > 0) { - pos = agent.indexOf('rv:'); - return parseInt(agent.substring(pos + 3, agent.indexOf('.', pos)), 10); - } - return false; - }; - /** - * Returns whether the used browser is Internet Explorer. - * - * @param version Optional parameter to specify IE version - */ - var isIE = function (version) { - var ver = getIEVersion(); - if (typeof version === 'undefined') { - return !!ver; - } - return version === ver; - }; - - function AxisInternal(component, params) { - var internal = this; - internal.component = component; - internal.params = params || {}; - internal.d3 = component.d3; - internal.scale = internal.d3.scaleLinear(); - internal.range; - internal.orient = 'bottom'; - internal.innerTickSize = 6; - internal.outerTickSize = this.params.withOuterTick ? 6 : 0; - internal.tickPadding = 3; - internal.tickValues = null; - internal.tickFormat; - internal.tickArguments; - internal.tickOffset = 0; - internal.tickCulling = true; - internal.tickCentered; - internal.tickTextCharSize; - internal.tickTextRotate = internal.params.tickTextRotate; - internal.tickLength; - internal.axis = internal.generateAxis(); - } - AxisInternal.prototype.axisX = function (selection, x, tickOffset) { - selection.attr('transform', function (d) { - return 'translate(' + Math.ceil(x(d) + tickOffset) + ', 0)'; - }); - }; - AxisInternal.prototype.axisY = function (selection, y) { - selection.attr('transform', function (d) { - return 'translate(0,' + Math.ceil(y(d)) + ')'; - }); - }; - AxisInternal.prototype.scaleExtent = function (domain) { - var start = domain[0], stop = domain[domain.length - 1]; - return start < stop ? [start, stop] : [stop, start]; - }; - AxisInternal.prototype.generateTicks = function (scale) { - var internal = this; - var i, domain, ticks = []; - if (scale.ticks) { - return scale.ticks.apply(scale, internal.tickArguments); - } - domain = scale.domain(); - for (i = Math.ceil(domain[0]); i < domain[1]; i++) { - ticks.push(i); - } - if (ticks.length > 0 && ticks[0] > 0) { - ticks.unshift(ticks[0] - (ticks[1] - ticks[0])); - } - return ticks; - }; - AxisInternal.prototype.copyScale = function () { - var internal = this; - var newScale = internal.scale.copy(), domain; - if (internal.params.isCategory) { - domain = internal.scale.domain(); - newScale.domain([domain[0], domain[1] - 1]); - } - return newScale; - }; - AxisInternal.prototype.textFormatted = function (v) { - var internal = this, formatted = internal.tickFormat ? internal.tickFormat(v) : v; - return typeof formatted !== 'undefined' ? formatted : ''; - }; - AxisInternal.prototype.updateRange = function () { - var internal = this; - internal.range = internal.scale.rangeExtent - ? internal.scale.rangeExtent() - : internal.scaleExtent(internal.scale.range()); - return internal.range; - }; - AxisInternal.prototype.updateTickTextCharSize = function (tick) { - var internal = this; - if (internal.tickTextCharSize) { - return internal.tickTextCharSize; - } - var size = { - h: 11.5, - w: 5.5 - }; - tick - .select('text') - .text(function (d) { - return internal.textFormatted(d); - }) - .each(function (d) { - var box = getBBox(this), text = internal.textFormatted(d), h = box.height, w = text ? box.width / text.length : undefined; - if (h && w) { - size.h = h; - size.w = w; - } - }) - .text(''); - internal.tickTextCharSize = size; - return size; - }; - AxisInternal.prototype.isVertical = function () { - return this.orient === 'left' || this.orient === 'right'; - }; - AxisInternal.prototype.tspanData = function (d, i, scale) { - var internal = this; - var splitted = internal.params.tickMultiline - ? internal.splitTickText(d, scale) - : [].concat(internal.textFormatted(d)); - if (internal.params.tickMultiline && internal.params.tickMultilineMax > 0) { - splitted = internal.ellipsify(splitted, internal.params.tickMultilineMax); - } - return splitted.map(function (s) { - return { index: i, splitted: s, length: splitted.length }; - }); - }; - AxisInternal.prototype.splitTickText = function (d, scale) { - var internal = this, tickText = internal.textFormatted(d), maxWidth = internal.params.tickWidth, subtext, spaceIndex, textWidth, splitted = []; - if (Object.prototype.toString.call(tickText) === '[object Array]') { - return tickText; - } - if (!maxWidth || maxWidth <= 0) { - maxWidth = internal.isVertical() - ? 95 - : internal.params.isCategory - ? Math.ceil(scale(1) - scale(0)) - 12 - : 110; - } - function split(splitted, text) { - spaceIndex = undefined; - for (var i = 1; i < text.length; i++) { - if (text.charAt(i) === ' ') { - spaceIndex = i; - } - subtext = text.substr(0, i + 1); - textWidth = internal.tickTextCharSize.w * subtext.length; - // if text width gets over tick width, split by space index or crrent index - if (maxWidth < textWidth) { - return split(splitted.concat(text.substr(0, spaceIndex ? spaceIndex : i)), text.slice(spaceIndex ? spaceIndex + 1 : i)); - } - } - return splitted.concat(text); - } - return split(splitted, tickText + ''); - }; - AxisInternal.prototype.ellipsify = function (splitted, max) { - if (splitted.length <= max) { - return splitted; - } - var ellipsified = splitted.slice(0, max); - var remaining = 3; - for (var i = max - 1; i >= 0; i--) { - var available = ellipsified[i].length; - ellipsified[i] = ellipsified[i] - .substr(0, available - remaining) - .padEnd(available, '.'); - remaining -= available; - if (remaining <= 0) { - break; - } - } - return ellipsified; - }; - AxisInternal.prototype.updateTickLength = function () { - var internal = this; - internal.tickLength = - Math.max(internal.innerTickSize, 0) + internal.tickPadding; - }; - AxisInternal.prototype.lineY2 = function (d) { - var internal = this, tickPosition = internal.scale(d) + (internal.tickCentered ? 0 : internal.tickOffset); - return internal.range[0] < tickPosition && tickPosition < internal.range[1] - ? internal.innerTickSize - : 0; - }; - AxisInternal.prototype.textY = function () { - var internal = this, rotate = internal.tickTextRotate; - return rotate - ? 11.5 - 2.5 * (rotate / 15) * (rotate > 0 ? 1 : -1) - : internal.tickLength; - }; - AxisInternal.prototype.textTransform = function () { - var internal = this, rotate = internal.tickTextRotate; - return rotate ? 'rotate(' + rotate + ')' : ''; - }; - AxisInternal.prototype.textTextAnchor = function () { - var internal = this, rotate = internal.tickTextRotate; - return rotate ? (rotate > 0 ? 'start' : 'end') : 'middle'; - }; - AxisInternal.prototype.tspanDx = function () { - var internal = this, rotate = internal.tickTextRotate; - return rotate ? 8 * Math.sin(Math.PI * (rotate / 180)) : 0; - }; - AxisInternal.prototype.tspanDy = function (d, i) { - var internal = this, dy = internal.tickTextCharSize.h; - if (i === 0) { - if (internal.isVertical()) { - dy = -((d.length - 1) * (internal.tickTextCharSize.h / 2) - 3); - } - else { - dy = '.71em'; - } - } - return dy; - }; - AxisInternal.prototype.generateAxis = function () { - var internal = this, d3 = internal.d3, params = internal.params; - function axis(g, transition) { - var self; - g.each(function () { - var g = (axis.g = d3.select(this)); - var scale0 = this.__chart__ || internal.scale, scale1 = (this.__chart__ = internal.copyScale()); - var ticksValues = internal.tickValues - ? internal.tickValues - : internal.generateTicks(scale1), ticks = g.selectAll('.tick').data(ticksValues, scale1), tickEnter = ticks - .enter() - .insert('g', '.domain') - .attr('class', 'tick') - .style('opacity', 1e-6), - // MEMO: No exit transition. The reason is this transition affects max tick width calculation because old tick will be included in the ticks. - tickExit = ticks.exit().remove(), tickUpdate = ticks.merge(tickEnter), tickTransform, tickX, tickY; - if (params.isCategory) { - internal.tickOffset = Math.ceil((scale1(1) - scale1(0)) / 2); - tickX = internal.tickCentered ? 0 : internal.tickOffset; - tickY = internal.tickCentered ? internal.tickOffset : 0; - } - else { - internal.tickOffset = tickX = 0; - } - internal.updateRange(); - internal.updateTickLength(); - internal.updateTickTextCharSize(g.select('.tick')); - var lineUpdate = tickUpdate - .select('line') - .merge(tickEnter.append('line')), textUpdate = tickUpdate.select('text').merge(tickEnter.append('text')); - var tspans = tickUpdate - .selectAll('text') - .selectAll('tspan') - .data(function (d, i) { - return internal.tspanData(d, i, scale1); - }), tspanEnter = tspans.enter().append('tspan'), tspanUpdate = tspanEnter.merge(tspans).text(function (d) { - return d.splitted; - }); - tspans.exit().remove(); - var path = g.selectAll('.domain').data([0]), pathUpdate = path - .enter() - .append('path') - .merge(path) - .attr('class', 'domain'); - // TODO: each attr should be one function and change its behavior by internal.orient, probably - switch (internal.orient) { - case 'bottom': { - tickTransform = internal.axisX; - lineUpdate - .attr('x1', tickX) - .attr('x2', tickX) - .attr('y2', function (d, i) { - return internal.lineY2(d, i); - }); - textUpdate - .attr('x', 0) - .attr('y', function (d, i) { - return internal.textY(d, i); - }) - .attr('transform', function (d, i) { - return internal.textTransform(d, i); - }) - .style('text-anchor', function (d, i) { - return internal.textTextAnchor(d, i); - }); - tspanUpdate - .attr('x', 0) - .attr('dy', function (d, i) { - return internal.tspanDy(d, i); - }) - .attr('dx', function (d, i) { - return internal.tspanDx(d, i); - }); - pathUpdate.attr('d', 'M' + - internal.range[0] + - ',' + - internal.outerTickSize + - 'V0H' + - internal.range[1] + - 'V' + - internal.outerTickSize); - break; - } - case 'top': { - // TODO: rotated tick text - tickTransform = internal.axisX; - lineUpdate - .attr('x1', tickX) - .attr('x2', tickX) - .attr('y2', function (d, i) { - return -1 * internal.lineY2(d, i); - }); - textUpdate - .attr('x', 0) - .attr('y', function (d, i) { - return (-1 * internal.textY(d, i) - - (params.isCategory ? 2 : internal.tickLength - 2)); - }) - .attr('transform', function (d, i) { - return internal.textTransform(d, i); - }) - .style('text-anchor', function (d, i) { - return internal.textTextAnchor(d, i); - }); - tspanUpdate - .attr('x', 0) - .attr('dy', function (d, i) { - return internal.tspanDy(d, i); - }) - .attr('dx', function (d, i) { - return internal.tspanDx(d, i); - }); - pathUpdate.attr('d', 'M' + - internal.range[0] + - ',' + - -internal.outerTickSize + - 'V0H' + - internal.range[1] + - 'V' + - -internal.outerTickSize); - break; - } - case 'left': { - tickTransform = internal.axisY; - lineUpdate - .attr('x2', -internal.innerTickSize) - .attr('y1', tickY) - .attr('y2', tickY); - textUpdate - .attr('x', -internal.tickLength) - .attr('y', internal.tickOffset) - .style('text-anchor', 'end'); - tspanUpdate - .attr('x', -internal.tickLength) - .attr('dy', function (d, i) { - return internal.tspanDy(d, i); - }); - pathUpdate.attr('d', 'M' + - -internal.outerTickSize + - ',' + - internal.range[0] + - 'H0V' + - internal.range[1] + - 'H' + - -internal.outerTickSize); - break; - } - case 'right': { - tickTransform = internal.axisY; - lineUpdate - .attr('x2', internal.innerTickSize) - .attr('y1', tickY) - .attr('y2', tickY); - textUpdate - .attr('x', internal.tickLength) - .attr('y', internal.tickOffset) - .style('text-anchor', 'start'); - tspanUpdate.attr('x', internal.tickLength).attr('dy', function (d, i) { - return internal.tspanDy(d, i); - }); - pathUpdate.attr('d', 'M' + - internal.outerTickSize + - ',' + - internal.range[0] + - 'H0V' + - internal.range[1] + - 'H' + - internal.outerTickSize); - break; - } - } - if (scale1.rangeBand) { - var x = scale1, dx = x.rangeBand() / 2; - scale0 = scale1 = function (d) { - return x(d) + dx; - }; - } - else if (scale0.rangeBand) { - scale0 = scale1; - } - else { - tickExit.call(tickTransform, scale1, internal.tickOffset); - } - tickEnter.call(tickTransform, scale0, internal.tickOffset); - self = (transition ? tickUpdate.transition(transition) : tickUpdate) - .style('opacity', 1) - .call(tickTransform, scale1, internal.tickOffset); - }); - return self; - } - axis.scale = function (x) { - if (!arguments.length) { - return internal.scale; - } - internal.scale = x; - return axis; - }; - axis.orient = function (x) { - if (!arguments.length) { - return internal.orient; - } - internal.orient = - x in { top: 1, right: 1, bottom: 1, left: 1 } ? x + '' : 'bottom'; - return axis; - }; - axis.tickFormat = function (format) { - if (!arguments.length) { - return internal.tickFormat; - } - internal.tickFormat = format; - return axis; - }; - axis.tickCentered = function (isCentered) { - if (!arguments.length) { - return internal.tickCentered; - } - internal.tickCentered = isCentered; - return axis; - }; - axis.tickOffset = function () { - return internal.tickOffset; - }; - axis.tickInterval = function () { - var interval, length; - if (params.isCategory) { - interval = internal.tickOffset * 2; - } - else { - length = - axis.g - .select('path.domain') - .node() - .getTotalLength() - - internal.outerTickSize * 2; - interval = length / axis.g.selectAll('line').size(); - } - return interval === Infinity ? 0 : interval; - }; - axis.ticks = function () { - if (!arguments.length) { - return internal.tickArguments; - } - internal.tickArguments = arguments; - return axis; - }; - axis.tickCulling = function (culling) { - if (!arguments.length) { - return internal.tickCulling; - } - internal.tickCulling = culling; - return axis; - }; - axis.tickValues = function (x) { - if (typeof x === 'function') { - internal.tickValues = function () { - return x(internal.scale.domain()); - }; - } - else { - if (!arguments.length) { - return internal.tickValues; - } - internal.tickValues = x; - } - return axis; - }; - return axis; - }; - - var CLASS = { - target: 'c3-target', - chart: 'c3-chart', - chartLine: 'c3-chart-line', - chartLines: 'c3-chart-lines', - chartBar: 'c3-chart-bar', - chartBars: 'c3-chart-bars', - chartText: 'c3-chart-text', - chartTexts: 'c3-chart-texts', - chartArc: 'c3-chart-arc', - chartArcs: 'c3-chart-arcs', - chartArcsTitle: 'c3-chart-arcs-title', - chartArcsBackground: 'c3-chart-arcs-background', - chartArcsGaugeUnit: 'c3-chart-arcs-gauge-unit', - chartArcsGaugeMax: 'c3-chart-arcs-gauge-max', - chartArcsGaugeMin: 'c3-chart-arcs-gauge-min', - selectedCircle: 'c3-selected-circle', - selectedCircles: 'c3-selected-circles', - eventRect: 'c3-event-rect', - eventRects: 'c3-event-rects', - eventRectsSingle: 'c3-event-rects-single', - eventRectsMultiple: 'c3-event-rects-multiple', - zoomRect: 'c3-zoom-rect', - brush: 'c3-brush', - dragZoom: 'c3-drag-zoom', - focused: 'c3-focused', - defocused: 'c3-defocused', - region: 'c3-region', - regions: 'c3-regions', - title: 'c3-title', - tooltipContainer: 'c3-tooltip-container', - tooltip: 'c3-tooltip', - tooltipName: 'c3-tooltip-name', - shape: 'c3-shape', - shapes: 'c3-shapes', - line: 'c3-line', - lines: 'c3-lines', - bar: 'c3-bar', - bars: 'c3-bars', - circle: 'c3-circle', - circles: 'c3-circles', - arc: 'c3-arc', - arcLabelLine: 'c3-arc-label-line', - arcs: 'c3-arcs', - area: 'c3-area', - areas: 'c3-areas', - empty: 'c3-empty', - text: 'c3-text', - texts: 'c3-texts', - gaugeValue: 'c3-gauge-value', - grid: 'c3-grid', - gridLines: 'c3-grid-lines', - xgrid: 'c3-xgrid', - xgrids: 'c3-xgrids', - xgridLine: 'c3-xgrid-line', - xgridLines: 'c3-xgrid-lines', - xgridFocus: 'c3-xgrid-focus', - ygrid: 'c3-ygrid', - ygrids: 'c3-ygrids', - ygridLine: 'c3-ygrid-line', - ygridLines: 'c3-ygrid-lines', - colorScale: 'c3-colorscale', - stanfordElements: 'c3-stanford-elements', - stanfordLine: 'c3-stanford-line', - stanfordLines: 'c3-stanford-lines', - stanfordRegion: 'c3-stanford-region', - stanfordRegions: 'c3-stanford-regions', - stanfordText: 'c3-stanford-text', - stanfordTexts: 'c3-stanford-texts', - axis: 'c3-axis', - axisX: 'c3-axis-x', - axisXLabel: 'c3-axis-x-label', - axisY: 'c3-axis-y', - axisYLabel: 'c3-axis-y-label', - axisY2: 'c3-axis-y2', - axisY2Label: 'c3-axis-y2-label', - legendBackground: 'c3-legend-background', - legendItem: 'c3-legend-item', - legendItemEvent: 'c3-legend-item-event', - legendItemTile: 'c3-legend-item-tile', - legendItemHidden: 'c3-legend-item-hidden', - legendItemFocused: 'c3-legend-item-focused', - dragarea: 'c3-dragarea', - EXPANDED: '_expanded_', - SELECTED: '_selected_', - INCLUDED: '_included_' - }; - - var AxisClass = /** @class */ (function () { - function AxisClass(owner) { - this.owner = owner; - this.d3 = owner.d3; - this.internal = AxisInternal; - } - return AxisClass; - }()); - var Axis = AxisClass; - Axis.prototype.init = function init() { - var $$ = this.owner, config = $$.config, main = $$.main; - $$.axes.x = main - .append('g') - .attr('class', CLASS.axis + ' ' + CLASS.axisX) - .attr('clip-path', config.axis_x_inner ? '' : $$.clipPathForXAxis) - .attr('transform', $$.getTranslate('x')) - .style('visibility', config.axis_x_show ? 'visible' : 'hidden'); - $$.axes.x - .append('text') - .attr('class', CLASS.axisXLabel) - .attr('transform', config.axis_rotated ? 'rotate(-90)' : '') - .style('text-anchor', this.textAnchorForXAxisLabel.bind(this)); - $$.axes.y = main - .append('g') - .attr('class', CLASS.axis + ' ' + CLASS.axisY) - .attr('clip-path', config.axis_y_inner ? '' : $$.clipPathForYAxis) - .attr('transform', $$.getTranslate('y')) - .style('visibility', config.axis_y_show ? 'visible' : 'hidden'); - $$.axes.y - .append('text') - .attr('class', CLASS.axisYLabel) - .attr('transform', config.axis_rotated ? '' : 'rotate(-90)') - .style('text-anchor', this.textAnchorForYAxisLabel.bind(this)); - $$.axes.y2 = main - .append('g') - .attr('class', CLASS.axis + ' ' + CLASS.axisY2) - // clip-path? - .attr('transform', $$.getTranslate('y2')) - .style('visibility', config.axis_y2_show ? 'visible' : 'hidden'); - $$.axes.y2 - .append('text') - .attr('class', CLASS.axisY2Label) - .attr('transform', config.axis_rotated ? '' : 'rotate(-90)') - .style('text-anchor', this.textAnchorForY2AxisLabel.bind(this)); - }; - Axis.prototype.getXAxis = function getXAxis(scale, orient, tickFormat, tickValues, withOuterTick, withoutTransition, withoutRotateTickText) { - var $$ = this.owner, config = $$.config, axisParams = { - isCategory: $$.isCategorized(), - withOuterTick: withOuterTick, - tickMultiline: config.axis_x_tick_multiline, - tickMultilineMax: config.axis_x_tick_multiline - ? Number(config.axis_x_tick_multilineMax) - : 0, - tickWidth: config.axis_x_tick_width, - tickTextRotate: withoutRotateTickText ? 0 : config.axis_x_tick_rotate, - withoutTransition: withoutTransition - }, axis = new this.internal(this, axisParams).axis.scale(scale).orient(orient); - if ($$.isTimeSeries() && tickValues && typeof tickValues !== 'function') { - tickValues = tickValues.map(function (v) { - return $$.parseDate(v); - }); - } - // Set tick - axis.tickFormat(tickFormat).tickValues(tickValues); - if ($$.isCategorized()) { - axis.tickCentered(config.axis_x_tick_centered); - if (isEmpty(config.axis_x_tick_culling)) { - config.axis_x_tick_culling = false; - } - } - return axis; - }; - Axis.prototype.updateXAxisTickValues = function updateXAxisTickValues(targets, axis) { - var $$ = this.owner, config = $$.config, tickValues; - if (config.axis_x_tick_fit || config.axis_x_tick_count) { - tickValues = this.generateTickValues($$.mapTargetsToUniqueXs(targets), config.axis_x_tick_count, $$.isTimeSeries()); - } - if (axis) { - axis.tickValues(tickValues); - } - else { - $$.xAxis.tickValues(tickValues); - $$.subXAxis.tickValues(tickValues); - } - return tickValues; - }; - Axis.prototype.getYAxis = function getYAxis(axisId, scale, orient, tickValues, withOuterTick, withoutTransition, withoutRotateTickText) { - var $$ = this.owner; - var config = $$.config; - var tickFormat = config["axis_" + axisId + "_tick_format"]; - if (!tickFormat && $$.isAxisNormalized(axisId)) { - tickFormat = function (x) { return x + "%"; }; - } - var axis = new this.internal(this, { - withOuterTick: withOuterTick, - withoutTransition: withoutTransition, - tickTextRotate: withoutRotateTickText ? 0 : config.axis_y_tick_rotate - }).axis - .scale(scale) - .orient(orient); - if (tickFormat) { - axis.tickFormat(tickFormat); - } - if ($$.isTimeSeriesY()) { - axis.ticks(config.axis_y_tick_time_type, config.axis_y_tick_time_interval); - } - else { - axis.tickValues(tickValues); - } - return axis; - }; - Axis.prototype.getId = function getId(id) { - var config = this.owner.config; - return id in config.data_axes ? config.data_axes[id] : 'y'; - }; - Axis.prototype.getXAxisTickFormat = function getXAxisTickFormat() { - // #2251 previously set any negative values to a whole number, - // however both should be truncated according to the users format specification - var $$ = this.owner, config = $$.config; - var format = $$.isTimeSeries() - ? $$.defaultAxisTimeFormat - : $$.isCategorized() - ? $$.categoryName - : function (v) { - return v; - }; - if (config.axis_x_tick_format) { - if (isFunction(config.axis_x_tick_format)) { - format = config.axis_x_tick_format; - } - else if ($$.isTimeSeries()) { - format = function (date) { - return date ? $$.axisTimeFormat(config.axis_x_tick_format)(date) : ''; - }; - } - } - return isFunction(format) - ? function (v) { - return format.call($$, v); - } - : format; - }; - Axis.prototype.getTickValues = function getTickValues(tickValues, axis) { - return tickValues ? tickValues : axis ? axis.tickValues() : undefined; - }; - Axis.prototype.getXAxisTickValues = function getXAxisTickValues() { - return this.getTickValues(this.owner.config.axis_x_tick_values, this.owner.xAxis); - }; - Axis.prototype.getYAxisTickValues = function getYAxisTickValues() { - return this.getTickValues(this.owner.config.axis_y_tick_values, this.owner.yAxis); - }; - Axis.prototype.getY2AxisTickValues = function getY2AxisTickValues() { - return this.getTickValues(this.owner.config.axis_y2_tick_values, this.owner.y2Axis); - }; - Axis.prototype.getLabelOptionByAxisId = function getLabelOptionByAxisId(axisId) { - var $$ = this.owner, config = $$.config, option; - if (axisId === 'y') { - option = config.axis_y_label; - } - else if (axisId === 'y2') { - option = config.axis_y2_label; - } - else if (axisId === 'x') { - option = config.axis_x_label; - } - return option; - }; - Axis.prototype.getLabelText = function getLabelText(axisId) { - var option = this.getLabelOptionByAxisId(axisId); - return isString(option) ? option : option ? option.text : null; - }; - Axis.prototype.setLabelText = function setLabelText(axisId, text) { - var $$ = this.owner, config = $$.config, option = this.getLabelOptionByAxisId(axisId); - if (isString(option)) { - if (axisId === 'y') { - config.axis_y_label = text; - } - else if (axisId === 'y2') { - config.axis_y2_label = text; - } - else if (axisId === 'x') { - config.axis_x_label = text; - } - } - else if (option) { - option.text = text; - } - }; - Axis.prototype.getLabelPosition = function getLabelPosition(axisId, defaultPosition) { - var option = this.getLabelOptionByAxisId(axisId), position = option && typeof option === 'object' && option.position - ? option.position - : defaultPosition; - return { - isInner: position.indexOf('inner') >= 0, - isOuter: position.indexOf('outer') >= 0, - isLeft: position.indexOf('left') >= 0, - isCenter: position.indexOf('center') >= 0, - isRight: position.indexOf('right') >= 0, - isTop: position.indexOf('top') >= 0, - isMiddle: position.indexOf('middle') >= 0, - isBottom: position.indexOf('bottom') >= 0 - }; - }; - Axis.prototype.getXAxisLabelPosition = function getXAxisLabelPosition() { - return this.getLabelPosition('x', this.owner.config.axis_rotated ? 'inner-top' : 'inner-right'); - }; - Axis.prototype.getYAxisLabelPosition = function getYAxisLabelPosition() { - return this.getLabelPosition('y', this.owner.config.axis_rotated ? 'inner-right' : 'inner-top'); - }; - Axis.prototype.getY2AxisLabelPosition = function getY2AxisLabelPosition() { - return this.getLabelPosition('y2', this.owner.config.axis_rotated ? 'inner-right' : 'inner-top'); - }; - Axis.prototype.getLabelPositionById = function getLabelPositionById(id) { - return id === 'y2' - ? this.getY2AxisLabelPosition() - : id === 'y' - ? this.getYAxisLabelPosition() - : this.getXAxisLabelPosition(); - }; - Axis.prototype.textForXAxisLabel = function textForXAxisLabel() { - return this.getLabelText('x'); - }; - Axis.prototype.textForYAxisLabel = function textForYAxisLabel() { - return this.getLabelText('y'); - }; - Axis.prototype.textForY2AxisLabel = function textForY2AxisLabel() { - return this.getLabelText('y2'); - }; - Axis.prototype.xForAxisLabel = function xForAxisLabel(forHorizontal, position) { - var $$ = this.owner; - if (forHorizontal) { - return position.isLeft ? 0 : position.isCenter ? $$.width / 2 : $$.width; - } - else { - return position.isBottom - ? -$$.height - : position.isMiddle - ? -$$.height / 2 - : 0; - } - }; - Axis.prototype.dxForAxisLabel = function dxForAxisLabel(forHorizontal, position) { - if (forHorizontal) { - return position.isLeft ? '0.5em' : position.isRight ? '-0.5em' : '0'; - } - else { - return position.isTop ? '-0.5em' : position.isBottom ? '0.5em' : '0'; - } - }; - Axis.prototype.textAnchorForAxisLabel = function textAnchorForAxisLabel(forHorizontal, position) { - if (forHorizontal) { - return position.isLeft ? 'start' : position.isCenter ? 'middle' : 'end'; - } - else { - return position.isBottom ? 'start' : position.isMiddle ? 'middle' : 'end'; - } - }; - Axis.prototype.xForXAxisLabel = function xForXAxisLabel() { - return this.xForAxisLabel(!this.owner.config.axis_rotated, this.getXAxisLabelPosition()); - }; - Axis.prototype.xForYAxisLabel = function xForYAxisLabel() { - return this.xForAxisLabel(this.owner.config.axis_rotated, this.getYAxisLabelPosition()); - }; - Axis.prototype.xForY2AxisLabel = function xForY2AxisLabel() { - return this.xForAxisLabel(this.owner.config.axis_rotated, this.getY2AxisLabelPosition()); - }; - Axis.prototype.dxForXAxisLabel = function dxForXAxisLabel() { - return this.dxForAxisLabel(!this.owner.config.axis_rotated, this.getXAxisLabelPosition()); - }; - Axis.prototype.dxForYAxisLabel = function dxForYAxisLabel() { - return this.dxForAxisLabel(this.owner.config.axis_rotated, this.getYAxisLabelPosition()); - }; - Axis.prototype.dxForY2AxisLabel = function dxForY2AxisLabel() { - return this.dxForAxisLabel(this.owner.config.axis_rotated, this.getY2AxisLabelPosition()); - }; - Axis.prototype.dyForXAxisLabel = function dyForXAxisLabel() { - var $$ = this.owner, config = $$.config, position = this.getXAxisLabelPosition(); - if (config.axis_rotated) { - return position.isInner - ? '1.2em' - : -25 - ($$.config.axis_x_inner ? 0 : this.getMaxTickWidth('x')); - } - else { - return position.isInner ? '-0.5em' : $$.getHorizontalAxisHeight('x') - 10; - } - }; - Axis.prototype.dyForYAxisLabel = function dyForYAxisLabel() { - var $$ = this.owner, position = this.getYAxisLabelPosition(); - if ($$.config.axis_rotated) { - return position.isInner ? '-0.5em' : '3em'; - } - else { - return position.isInner - ? '1.2em' - : -10 - ($$.config.axis_y_inner ? 0 : this.getMaxTickWidth('y') + 10); - } - }; - Axis.prototype.dyForY2AxisLabel = function dyForY2AxisLabel() { - var $$ = this.owner, position = this.getY2AxisLabelPosition(); - if ($$.config.axis_rotated) { - return position.isInner ? '1.2em' : '-2.2em'; - } - else { - return position.isInner - ? '-0.5em' - : 15 + ($$.config.axis_y2_inner ? 0 : this.getMaxTickWidth('y2') + 15); - } - }; - Axis.prototype.textAnchorForXAxisLabel = function textAnchorForXAxisLabel() { - var $$ = this.owner; - return this.textAnchorForAxisLabel(!$$.config.axis_rotated, this.getXAxisLabelPosition()); - }; - Axis.prototype.textAnchorForYAxisLabel = function textAnchorForYAxisLabel() { - var $$ = this.owner; - return this.textAnchorForAxisLabel($$.config.axis_rotated, this.getYAxisLabelPosition()); - }; - Axis.prototype.textAnchorForY2AxisLabel = function textAnchorForY2AxisLabel() { - var $$ = this.owner; - return this.textAnchorForAxisLabel($$.config.axis_rotated, this.getY2AxisLabelPosition()); - }; - Axis.prototype.getMaxTickWidth = function getMaxTickWidth(id, withoutRecompute) { - var $$ = this.owner, maxWidth = 0, targetsToShow, scale, axis, dummy, svg; - if (withoutRecompute && $$.currentMaxTickWidths[id]) { - return $$.currentMaxTickWidths[id]; - } - if ($$.svg) { - targetsToShow = $$.filterTargetsToShow($$.data.targets); - if (id === 'y') { - scale = $$.y.copy().domain($$.getYDomain(targetsToShow, 'y')); - axis = this.getYAxis(id, scale, $$.yOrient, $$.yAxisTickValues, false, true, true); - } - else if (id === 'y2') { - scale = $$.y2.copy().domain($$.getYDomain(targetsToShow, 'y2')); - axis = this.getYAxis(id, scale, $$.y2Orient, $$.y2AxisTickValues, false, true, true); - } - else { - scale = $$.x.copy().domain($$.getXDomain(targetsToShow)); - axis = this.getXAxis(scale, $$.xOrient, $$.xAxisTickFormat, $$.xAxisTickValues, false, true, true); - this.updateXAxisTickValues(targetsToShow, axis); - } - dummy = $$.d3 - .select('body') - .append('div') - .classed('c3', true); - (svg = dummy - .append('svg') - .style('visibility', 'hidden') - .style('position', 'fixed') - .style('top', 0) - .style('left', 0)), - svg - .append('g') - .call(axis) - .each(function () { - $$.d3 - .select(this) - .selectAll('text') - .each(function () { - var box = getBBox(this); - if (maxWidth < box.width) { - maxWidth = box.width; - } - }); - dummy.remove(); - }); - } - $$.currentMaxTickWidths[id] = - maxWidth <= 0 ? $$.currentMaxTickWidths[id] : maxWidth; - return $$.currentMaxTickWidths[id]; - }; - Axis.prototype.updateLabels = function updateLabels(withTransition) { - var $$ = this.owner; - var axisXLabel = $$.main.select('.' + CLASS.axisX + ' .' + CLASS.axisXLabel), axisYLabel = $$.main.select('.' + CLASS.axisY + ' .' + CLASS.axisYLabel), axisY2Label = $$.main.select('.' + CLASS.axisY2 + ' .' + CLASS.axisY2Label); - (withTransition ? axisXLabel.transition() : axisXLabel) - .attr('x', this.xForXAxisLabel.bind(this)) - .attr('dx', this.dxForXAxisLabel.bind(this)) - .attr('dy', this.dyForXAxisLabel.bind(this)) - .text(this.textForXAxisLabel.bind(this)); - (withTransition ? axisYLabel.transition() : axisYLabel) - .attr('x', this.xForYAxisLabel.bind(this)) - .attr('dx', this.dxForYAxisLabel.bind(this)) - .attr('dy', this.dyForYAxisLabel.bind(this)) - .text(this.textForYAxisLabel.bind(this)); - (withTransition ? axisY2Label.transition() : axisY2Label) - .attr('x', this.xForY2AxisLabel.bind(this)) - .attr('dx', this.dxForY2AxisLabel.bind(this)) - .attr('dy', this.dyForY2AxisLabel.bind(this)) - .text(this.textForY2AxisLabel.bind(this)); - }; - Axis.prototype.getPadding = function getPadding(padding, key, defaultValue, domainLength) { - var p = typeof padding === 'number' ? padding : padding[key]; - if (!isValue(p)) { - return defaultValue; - } - if (padding.unit === 'ratio') { - return padding[key] * domainLength; - } - // assume padding is pixels if unit is not specified - return this.convertPixelsToAxisPadding(p, domainLength); - }; - Axis.prototype.convertPixelsToAxisPadding = function convertPixelsToAxisPadding(pixels, domainLength) { - var $$ = this.owner, length = $$.config.axis_rotated ? $$.width : $$.height; - return domainLength * (pixels / length); - }; - Axis.prototype.generateTickValues = function generateTickValues(values, tickCount, forTimeSeries) { - var tickValues = values, targetCount, start, end, count, interval, i, tickValue; - if (tickCount) { - targetCount = isFunction(tickCount) ? tickCount() : tickCount; - // compute ticks according to tickCount - if (targetCount === 1) { - tickValues = [values[0]]; - } - else if (targetCount === 2) { - tickValues = [values[0], values[values.length - 1]]; - } - else if (targetCount > 2) { - count = targetCount - 2; - start = values[0]; - end = values[values.length - 1]; - interval = (end - start) / (count + 1); - // re-construct unique values - tickValues = [start]; - for (i = 0; i < count; i++) { - tickValue = +start + interval * (i + 1); - tickValues.push(forTimeSeries ? new Date(tickValue) : tickValue); - } - tickValues.push(end); - } - } - if (!forTimeSeries) { - tickValues = tickValues.sort(function (a, b) { - return a - b; - }); - } - return tickValues; - }; - Axis.prototype.generateTransitions = function generateTransitions(duration) { - var $$ = this.owner, axes = $$.axes; - return { - axisX: duration ? axes.x.transition().duration(duration) : axes.x, - axisY: duration ? axes.y.transition().duration(duration) : axes.y, - axisY2: duration ? axes.y2.transition().duration(duration) : axes.y2, - axisSubX: duration ? axes.subx.transition().duration(duration) : axes.subx - }; - }; - Axis.prototype.redraw = function redraw(duration, isHidden) { - var $$ = this.owner, transition = duration ? $$.d3.transition().duration(duration) : null; - $$.axes.x.style('opacity', isHidden ? 0 : 1).call($$.xAxis, transition); - $$.axes.y.style('opacity', isHidden ? 0 : 1).call($$.yAxis, transition); - $$.axes.y2.style('opacity', isHidden ? 0 : 1).call($$.y2Axis, transition); - $$.axes.subx.style('opacity', isHidden ? 0 : 1).call($$.subXAxis, transition); - }; - - var c3 = { - version: '0.7.20', - chart: { - fn: Chart.prototype, - internal: { - fn: ChartInternal.prototype, - axis: { - fn: AxisClass.prototype, - internal: { - fn: AxisInternal.prototype - } - } - } - }, - generate: function (config) { - return new Chart(config); - } - }; - ChartInternal.prototype.beforeInit = function () { - // can do something - }; - ChartInternal.prototype.afterInit = function () { - // can do something - }; - ChartInternal.prototype.init = function () { - var $$ = this, config = $$.config; - $$.initParams(); - if (config.data_url) { - $$.convertUrlToData(config.data_url, config.data_mimeType, config.data_headers, config.data_keys, $$.initWithData); - } - else if (config.data_json) { - $$.initWithData($$.convertJsonToData(config.data_json, config.data_keys)); - } - else if (config.data_rows) { - $$.initWithData($$.convertRowsToData(config.data_rows)); - } - else if (config.data_columns) { - $$.initWithData($$.convertColumnsToData(config.data_columns)); - } - else { - throw Error('url or json or rows or columns is required.'); - } - }; - ChartInternal.prototype.initParams = function () { - var $$ = this, d3 = $$.d3, config = $$.config; - // MEMO: clipId needs to be unique because it conflicts when multiple charts exist - $$.clipId = 'c3-' + new Date().valueOf() + '-clip'; - $$.clipIdForXAxis = $$.clipId + '-xaxis'; - $$.clipIdForYAxis = $$.clipId + '-yaxis'; - $$.clipIdForGrid = $$.clipId + '-grid'; - $$.clipIdForSubchart = $$.clipId + '-subchart'; - $$.clipPath = $$.getClipPath($$.clipId); - $$.clipPathForXAxis = $$.getClipPath($$.clipIdForXAxis); - $$.clipPathForYAxis = $$.getClipPath($$.clipIdForYAxis); - $$.clipPathForGrid = $$.getClipPath($$.clipIdForGrid); - $$.clipPathForSubchart = $$.getClipPath($$.clipIdForSubchart); - $$.dragStart = null; - $$.dragging = false; - $$.flowing = false; - $$.cancelClick = false; - $$.mouseover = undefined; - $$.transiting = false; - $$.color = $$.generateColor(); - $$.levelColor = $$.generateLevelColor(); - $$.dataTimeParse = (config.data_xLocaltime ? d3.timeParse : d3.utcParse)($$.config.data_xFormat); - $$.axisTimeFormat = config.axis_x_localtime ? d3.timeFormat : d3.utcFormat; - $$.defaultAxisTimeFormat = function (date) { - if (date.getMilliseconds()) { - return d3.timeFormat('.%L')(date); - } - if (date.getSeconds()) { - return d3.timeFormat(':%S')(date); - } - if (date.getMinutes()) { - return d3.timeFormat('%I:%M')(date); - } - if (date.getHours()) { - return d3.timeFormat('%I %p')(date); - } - if (date.getDay() && date.getDate() !== 1) { - return d3.timeFormat('%-m/%-d')(date); - } - if (date.getDate() !== 1) { - return d3.timeFormat('%-m/%-d')(date); - } - if (date.getMonth()) { - return d3.timeFormat('%-m/%-d')(date); - } - return d3.timeFormat('%Y/%-m/%-d')(date); - }; - $$.hiddenTargetIds = []; - $$.hiddenLegendIds = []; - $$.focusedTargetIds = []; - $$.defocusedTargetIds = []; - $$.xOrient = config.axis_rotated - ? config.axis_x_inner - ? 'right' - : 'left' - : config.axis_x_inner - ? 'top' - : 'bottom'; - $$.yOrient = config.axis_rotated - ? config.axis_y_inner - ? 'top' - : 'bottom' - : config.axis_y_inner - ? 'right' - : 'left'; - $$.y2Orient = config.axis_rotated - ? config.axis_y2_inner - ? 'bottom' - : 'top' - : config.axis_y2_inner - ? 'left' - : 'right'; - $$.subXOrient = config.axis_rotated ? 'left' : 'bottom'; - $$.isLegendRight = config.legend_position === 'right'; - $$.isLegendInset = config.legend_position === 'inset'; - $$.isLegendTop = - config.legend_inset_anchor === 'top-left' || - config.legend_inset_anchor === 'top-right'; - $$.isLegendLeft = - config.legend_inset_anchor === 'top-left' || - config.legend_inset_anchor === 'bottom-left'; - $$.legendStep = 0; - $$.legendItemWidth = 0; - $$.legendItemHeight = 0; - $$.currentMaxTickWidths = { - x: 0, - y: 0, - y2: 0 - }; - $$.rotated_padding_left = 30; - $$.rotated_padding_right = config.axis_rotated && !config.axis_x_show ? 0 : 30; - $$.rotated_padding_top = 5; - $$.withoutFadeIn = {}; - $$.intervalForObserveInserted = undefined; - $$.axes.subx = d3.selectAll([]); // needs when excluding subchart.js - }; - ChartInternal.prototype.initChartElements = function () { - if (this.initBar) { - this.initBar(); - } - if (this.initLine) { - this.initLine(); - } - if (this.initArc) { - this.initArc(); - } - if (this.initGauge) { - this.initGauge(); - } - if (this.initText) { - this.initText(); - } - }; - ChartInternal.prototype.initWithData = function (data) { - var $$ = this, d3 = $$.d3, config = $$.config; - var defs, main, binding = true; - $$.axis = new AxisClass($$); - if (!config.bindto) { - $$.selectChart = d3.selectAll([]); - } - else if (typeof config.bindto.node === 'function') { - $$.selectChart = config.bindto; - } - else { - $$.selectChart = d3.select(config.bindto); - } - if ($$.selectChart.empty()) { - $$.selectChart = d3 - .select(document.createElement('div')) - .style('opacity', 0); - $$.observeInserted($$.selectChart); - binding = false; - } - $$.selectChart.html('').classed('c3', true); - // Init data as targets - $$.data.xs = {}; - $$.data.targets = $$.convertDataToTargets(data); - if (config.data_filter) { - $$.data.targets = $$.data.targets.filter(config.data_filter); - } - // Set targets to hide if needed - if (config.data_hide) { - $$.addHiddenTargetIds(config.data_hide === true - ? $$.mapToIds($$.data.targets) - : config.data_hide); - } - if (config.legend_hide) { - $$.addHiddenLegendIds(config.legend_hide === true - ? $$.mapToIds($$.data.targets) - : config.legend_hide); - } - if ($$.isStanfordGraphType()) { - $$.initStanfordData(); - } - // Init sizes and scales - $$.updateSizes(); - $$.updateScales(); - // Set domains for each scale - $$.x.domain(d3.extent($$.getXDomain($$.data.targets))); - $$.y.domain($$.getYDomain($$.data.targets, 'y')); - $$.y2.domain($$.getYDomain($$.data.targets, 'y2')); - $$.subX.domain($$.x.domain()); - $$.subY.domain($$.y.domain()); - $$.subY2.domain($$.y2.domain()); - // Save original x domain for zoom update - $$.orgXDomain = $$.x.domain(); - /*-- Basic Elements --*/ - // Define svgs - $$.svg = $$.selectChart - .append('svg') - .style('overflow', 'hidden') - .on('mouseenter', function () { - return config.onmouseover.call($$); - }) - .on('mouseleave', function () { - return config.onmouseout.call($$); - }); - if ($$.config.svg_classname) { - $$.svg.attr('class', $$.config.svg_classname); - } - // Define defs - defs = $$.svg.append('defs'); - $$.clipChart = $$.appendClip(defs, $$.clipId); - $$.clipXAxis = $$.appendClip(defs, $$.clipIdForXAxis); - $$.clipYAxis = $$.appendClip(defs, $$.clipIdForYAxis); - $$.clipGrid = $$.appendClip(defs, $$.clipIdForGrid); - $$.clipSubchart = $$.appendClip(defs, $$.clipIdForSubchart); - $$.updateSvgSize(); - // Define regions - main = $$.main = $$.svg.append('g').attr('transform', $$.getTranslate('main')); - if ($$.initPie) { - $$.initPie(); - } - if ($$.initDragZoom) { - $$.initDragZoom(); - } - if (config.subchart_show && $$.initSubchart) { - $$.initSubchart(); - } - if ($$.initTooltip) { - $$.initTooltip(); - } - if ($$.initLegend) { - $$.initLegend(); - } - if ($$.initTitle) { - $$.initTitle(); - } - if ($$.initZoom) { - $$.initZoom(); - } - if ($$.isStanfordGraphType()) { - $$.drawColorScale(); - } - // Update selection based on size and scale - // TODO: currently this must be called after initLegend because of update of sizes, but it should be done in initSubchart. - if (config.subchart_show && $$.initSubchartBrush) { - $$.initSubchartBrush(); - } - /*-- Main Region --*/ - // text when empty - main - .append('text') - .attr('class', CLASS.text + ' ' + CLASS.empty) - .attr('text-anchor', 'middle') // horizontal centering of text at x position in all browsers. - .attr('dominant-baseline', 'middle'); // vertical centering of text at y position in all browsers, except IE. - // Regions - $$.initRegion(); - // Grids - $$.initGrid(); - // Define g for chart area - main - .append('g') - .attr('clip-path', $$.clipPath) - .attr('class', CLASS.chart); - // Grid lines - if (config.grid_lines_front) { - $$.initGridLines(); - } - $$.initStanfordElements(); - // Cover whole with rects for events - $$.initEventRect(); - // Define g for chart - $$.initChartElements(); - // Add Axis - $$.axis.init(); - // Set targets - $$.updateTargets($$.data.targets); - // Set default extent if defined - if (config.axis_x_selection) { - $$.brush.selectionAsValue($$.getDefaultSelection()); - } - // Draw with targets - if (binding) { - $$.updateDimension(); - $$.config.oninit.call($$); - $$.redraw({ - withTransition: false, - withTransform: true, - withUpdateXDomain: true, - withUpdateOrgXDomain: true, - withTransitionForAxis: false - }); - } - // Bind to resize event - $$.bindResize(); - // Bind to window focus event - $$.bindWindowFocus(); - // export element of the chart - $$.api.element = $$.selectChart.node(); - }; - ChartInternal.prototype.smoothLines = function (el, type) { - var $$ = this; - if (type === 'grid') { - el.each(function () { - var g = $$.d3.select(this), x1 = g.attr('x1'), x2 = g.attr('x2'), y1 = g.attr('y1'), y2 = g.attr('y2'); - g.attr({ - x1: Math.ceil(x1), - x2: Math.ceil(x2), - y1: Math.ceil(y1), - y2: Math.ceil(y2) - }); - }); - } - }; - ChartInternal.prototype.updateSizes = function () { - var $$ = this, config = $$.config; - var legendHeight = $$.legend ? $$.getLegendHeight() : 0, legendWidth = $$.legend ? $$.getLegendWidth() : 0, legendHeightForBottom = $$.isLegendRight || $$.isLegendInset ? 0 : legendHeight, hasArc = $$.hasArcType(), xAxisHeight = config.axis_rotated || hasArc ? 0 : $$.getHorizontalAxisHeight('x'), subchartXAxisHeight = config.axis_rotated || hasArc ? 0 : $$.getHorizontalAxisHeight('x', true), subchartHeight = config.subchart_show && !hasArc - ? config.subchart_size_height + subchartXAxisHeight - : 0; - $$.currentWidth = $$.getCurrentWidth(); - $$.currentHeight = $$.getCurrentHeight(); - // for main - $$.margin = config.axis_rotated - ? { - top: $$.getHorizontalAxisHeight('y2') + $$.getCurrentPaddingTop(), - right: hasArc ? 0 : $$.getCurrentPaddingRight(), - bottom: $$.getHorizontalAxisHeight('y') + - legendHeightForBottom + - $$.getCurrentPaddingBottom(), - left: subchartHeight + (hasArc ? 0 : $$.getCurrentPaddingLeft()) - } - : { - top: 4 + $$.getCurrentPaddingTop(), - right: hasArc ? 0 : $$.getCurrentPaddingRight(), - bottom: xAxisHeight + - subchartHeight + - legendHeightForBottom + - $$.getCurrentPaddingBottom(), - left: hasArc ? 0 : $$.getCurrentPaddingLeft() - }; - // for subchart - $$.margin2 = config.axis_rotated - ? { - top: $$.margin.top, - right: NaN, - bottom: 20 + legendHeightForBottom, - left: $$.rotated_padding_left - } - : { - top: $$.currentHeight - subchartHeight - legendHeightForBottom, - right: NaN, - bottom: subchartXAxisHeight + legendHeightForBottom, - left: $$.margin.left - }; - // for legend - $$.margin3 = { - top: 0, - right: NaN, - bottom: 0, - left: 0 - }; - if ($$.updateSizeForLegend) { - $$.updateSizeForLegend(legendHeight, legendWidth); - } - $$.width = $$.currentWidth - $$.margin.left - $$.margin.right; - $$.height = $$.currentHeight - $$.margin.top - $$.margin.bottom; - if ($$.width < 0) { - $$.width = 0; - } - if ($$.height < 0) { - $$.height = 0; - } - $$.width2 = config.axis_rotated - ? $$.margin.left - $$.rotated_padding_left - $$.rotated_padding_right - : $$.width; - $$.height2 = config.axis_rotated - ? $$.height - : $$.currentHeight - $$.margin2.top - $$.margin2.bottom; - if ($$.width2 < 0) { - $$.width2 = 0; - } - if ($$.height2 < 0) { - $$.height2 = 0; - } - // for arc - $$.arcWidth = $$.width - ($$.isLegendRight ? legendWidth + 10 : 0); - $$.arcHeight = $$.height - ($$.isLegendRight ? 0 : 10); - if ($$.hasType('gauge') && !config.gauge_fullCircle) { - $$.arcHeight += $$.height - $$.getGaugeLabelHeight(); - } - if ($$.updateRadius) { - $$.updateRadius(); - } - if ($$.isLegendRight && hasArc) { - $$.margin3.left = $$.arcWidth / 2 + $$.radiusExpanded * 1.1; - } - }; - ChartInternal.prototype.updateTargets = function (targets) { - var $$ = this, config = $$.config; - /*-- Main --*/ - //-- Text --// - $$.updateTargetsForText(targets); - //-- Bar --// - $$.updateTargetsForBar(targets); - //-- Line --// - $$.updateTargetsForLine(targets); - //-- Arc --// - if ($$.hasArcType() && $$.updateTargetsForArc) { - $$.updateTargetsForArc(targets); - } - /*-- Sub --*/ - if (config.subchart_show && $$.updateTargetsForSubchart) { - $$.updateTargetsForSubchart(targets); - } - // Fade-in each chart - $$.showTargets(); - }; - ChartInternal.prototype.showTargets = function () { - var $$ = this; - $$.svg - .selectAll('.' + CLASS.target) - .filter(function (d) { - return $$.isTargetToShow(d.id); - }) - .transition() - .duration($$.config.transition_duration) - .style('opacity', 1); - }; - ChartInternal.prototype.redraw = function (options, transitions) { - var $$ = this, main = $$.main, d3 = $$.d3, config = $$.config; - var areaIndices = $$.getShapeIndices($$.isAreaType), barIndices = $$.getShapeIndices($$.isBarType), lineIndices = $$.getShapeIndices($$.isLineType); - var withY, withSubchart, withTransition, withTransitionForExit, withTransitionForAxis, withTransform, withUpdateXDomain, withUpdateOrgXDomain, withTrimXDomain, withLegend, withEventRect, withDimension, withUpdateXAxis; - var hideAxis = $$.hasArcType(); - var drawArea, drawBar, drawLine, xForText, yForText; - var duration, durationForExit, durationForAxis; - var transitionsToWait, waitForDraw, flow, transition; - var targetsToShow = $$.filterTargetsToShow($$.data.targets), tickValues, i, intervalForCulling, xDomainForZoom; - var xv = $$.xv.bind($$), cx, cy; - options = options || {}; - withY = getOption(options, 'withY', true); - withSubchart = getOption(options, 'withSubchart', true); - withTransition = getOption(options, 'withTransition', true); - withTransform = getOption(options, 'withTransform', false); - withUpdateXDomain = getOption(options, 'withUpdateXDomain', false); - withUpdateOrgXDomain = getOption(options, 'withUpdateOrgXDomain', false); - withTrimXDomain = getOption(options, 'withTrimXDomain', true); - withUpdateXAxis = getOption(options, 'withUpdateXAxis', withUpdateXDomain); - withLegend = getOption(options, 'withLegend', false); - withEventRect = getOption(options, 'withEventRect', true); - withDimension = getOption(options, 'withDimension', true); - withTransitionForExit = getOption(options, 'withTransitionForExit', withTransition); - withTransitionForAxis = getOption(options, 'withTransitionForAxis', withTransition); - duration = withTransition ? config.transition_duration : 0; - durationForExit = withTransitionForExit ? duration : 0; - durationForAxis = withTransitionForAxis ? duration : 0; - transitions = transitions || $$.axis.generateTransitions(durationForAxis); - // update legend and transform each g - if (withLegend && config.legend_show) { - $$.updateLegend($$.mapToIds($$.data.targets), options, transitions); - } - else if (withDimension) { - // need to update dimension (e.g. axis.y.tick.values) because y tick values should change - // no need to update axis in it because they will be updated in redraw() - $$.updateDimension(true); - } - // MEMO: needed for grids calculation - if ($$.isCategorized() && targetsToShow.length === 0) { - $$.x.domain([0, $$.axes.x.selectAll('.tick').size()]); - } - if (targetsToShow.length) { - $$.updateXDomain(targetsToShow, withUpdateXDomain, withUpdateOrgXDomain, withTrimXDomain); - if (!config.axis_x_tick_values) { - tickValues = $$.axis.updateXAxisTickValues(targetsToShow); - } - } - else { - $$.xAxis.tickValues([]); - $$.subXAxis.tickValues([]); - } - if (config.zoom_rescale && !options.flow) { - xDomainForZoom = $$.x.orgDomain(); - } - $$.y.domain($$.getYDomain(targetsToShow, 'y', xDomainForZoom)); - $$.y2.domain($$.getYDomain(targetsToShow, 'y2', xDomainForZoom)); - if (!config.axis_y_tick_values && config.axis_y_tick_count) { - $$.yAxis.tickValues($$.axis.generateTickValues($$.y.domain(), config.axis_y_tick_count)); - } - if (!config.axis_y2_tick_values && config.axis_y2_tick_count) { - $$.y2Axis.tickValues($$.axis.generateTickValues($$.y2.domain(), config.axis_y2_tick_count)); - } - // axes - $$.axis.redraw(durationForAxis, hideAxis); - // Update axis label - $$.axis.updateLabels(withTransition); - // show/hide if manual culling needed - if ((withUpdateXDomain || withUpdateXAxis) && targetsToShow.length) { - if (config.axis_x_tick_culling && tickValues) { - for (i = 1; i < tickValues.length; i++) { - if (tickValues.length / i < config.axis_x_tick_culling_max) { - intervalForCulling = i; - break; - } - } - $$.svg.selectAll('.' + CLASS.axisX + ' .tick text').each(function (e) { - var index = tickValues.indexOf(e); - if (index >= 0) { - d3.select(this).style('display', index % intervalForCulling ? 'none' : 'block'); - } - }); - } - else { - $$.svg - .selectAll('.' + CLASS.axisX + ' .tick text') - .style('display', 'block'); - } - } - // setup drawer - MEMO: these must be called after axis updated - drawArea = $$.generateDrawArea - ? $$.generateDrawArea(areaIndices, false) - : undefined; - drawBar = $$.generateDrawBar ? $$.generateDrawBar(barIndices) : undefined; - drawLine = $$.generateDrawLine - ? $$.generateDrawLine(lineIndices, false) - : undefined; - xForText = $$.generateXYForText(areaIndices, barIndices, lineIndices, true); - yForText = $$.generateXYForText(areaIndices, barIndices, lineIndices, false); - // update circleY based on updated parameters - $$.updateCircleY(); - // generate circle x/y functions depending on updated params - cx = ($$.config.axis_rotated ? $$.circleY : $$.circleX).bind($$); - cy = ($$.config.axis_rotated ? $$.circleX : $$.circleY).bind($$); - // Update sub domain - if (withY) { - $$.subY.domain($$.getYDomain(targetsToShow, 'y')); - $$.subY2.domain($$.getYDomain(targetsToShow, 'y2')); - } - // xgrid focus - $$.updateXgridFocus(); - // Data empty label positioning and text. - main - .select('text.' + CLASS.text + '.' + CLASS.empty) - .attr('x', $$.width / 2) - .attr('y', $$.height / 2) - .text(config.data_empty_label_text) - .transition() - .style('opacity', targetsToShow.length ? 0 : 1); - // event rect - if (withEventRect) { - $$.redrawEventRect(); - } - // grid - $$.updateGrid(duration); - $$.updateStanfordElements(duration); - // rect for regions - $$.updateRegion(duration); - // bars - $$.updateBar(durationForExit); - // lines, areas and circles - $$.updateLine(durationForExit); - $$.updateArea(durationForExit); - $$.updateCircle(cx, cy); - // text - if ($$.hasDataLabel()) { - $$.updateText(xForText, yForText, durationForExit); - } - // title - if ($$.redrawTitle) { - $$.redrawTitle(); - } - // arc - if ($$.redrawArc) { - $$.redrawArc(duration, durationForExit, withTransform); - } - // subchart - if (config.subchart_show && $$.redrawSubchart) { - $$.redrawSubchart(withSubchart, transitions, duration, durationForExit, areaIndices, barIndices, lineIndices); - } - if ($$.isStanfordGraphType()) { - $$.drawColorScale(); - } - // circles for select - main - .selectAll('.' + CLASS.selectedCircles) - .filter($$.isBarType.bind($$)) - .selectAll('circle') - .remove(); - if (options.flow) { - flow = $$.generateFlow({ - targets: targetsToShow, - flow: options.flow, - duration: options.flow.duration, - drawBar: drawBar, - drawLine: drawLine, - drawArea: drawArea, - cx: cx, - cy: cy, - xv: xv, - xForText: xForText, - yForText: yForText - }); - } - if (duration && $$.isTabVisible()) { - // Only use transition if tab visible. See #938. - // transition should be derived from one transition - transition = d3.transition().duration(duration); - transitionsToWait = []; - [ - $$.redrawBar(drawBar, true, transition), - $$.redrawLine(drawLine, true, transition), - $$.redrawArea(drawArea, true, transition), - $$.redrawCircle(cx, cy, true, transition), - $$.redrawText(xForText, yForText, options.flow, true, transition), - $$.redrawRegion(true, transition), - $$.redrawGrid(true, transition) - ].forEach(function (transitions) { - transitions.forEach(function (transition) { - transitionsToWait.push(transition); - }); - }); - // Wait for end of transitions to call flow and onrendered callback - waitForDraw = $$.generateWait(); - transitionsToWait.forEach(function (t) { - waitForDraw.add(t); - }); - waitForDraw(function () { - if (flow) { - flow(); - } - if (config.onrendered) { - config.onrendered.call($$); - } - }); - } - else { - $$.redrawBar(drawBar); - $$.redrawLine(drawLine); - $$.redrawArea(drawArea); - $$.redrawCircle(cx, cy); - $$.redrawText(xForText, yForText, options.flow); - $$.redrawRegion(); - $$.redrawGrid(); - if (flow) { - flow(); - } - if (config.onrendered) { - config.onrendered.call($$); - } - } - // update fadein condition - $$.mapToIds($$.data.targets).forEach(function (id) { - $$.withoutFadeIn[id] = true; - }); - }; - ChartInternal.prototype.updateAndRedraw = function (options) { - var $$ = this, config = $$.config, transitions; - options = options || {}; - // same with redraw - options.withTransition = getOption(options, 'withTransition', true); - options.withTransform = getOption(options, 'withTransform', false); - options.withLegend = getOption(options, 'withLegend', false); - // NOT same with redraw - options.withUpdateXDomain = getOption(options, 'withUpdateXDomain', true); - options.withUpdateOrgXDomain = getOption(options, 'withUpdateOrgXDomain', true); - options.withTransitionForExit = false; - options.withTransitionForTransform = getOption(options, 'withTransitionForTransform', options.withTransition); - // MEMO: this needs to be called before updateLegend and it means this ALWAYS needs to be called) - $$.updateSizes(); - // MEMO: called in updateLegend in redraw if withLegend - if (!(options.withLegend && config.legend_show)) { - transitions = $$.axis.generateTransitions(options.withTransitionForAxis ? config.transition_duration : 0); - // Update scales - $$.updateScales(); - $$.updateSvgSize(); - // Update g positions - $$.transformAll(options.withTransitionForTransform, transitions); - } - // Draw with new sizes & scales - $$.redraw(options, transitions); - }; - ChartInternal.prototype.redrawWithoutRescale = function () { - this.redraw({ - withY: false, - withSubchart: false, - withEventRect: false, - withTransitionForAxis: false - }); - }; - ChartInternal.prototype.isTimeSeries = function () { - return this.config.axis_x_type === 'timeseries'; - }; - ChartInternal.prototype.isCategorized = function () { - return this.config.axis_x_type.indexOf('categor') >= 0; - }; - ChartInternal.prototype.isCustomX = function () { - var $$ = this, config = $$.config; - return !$$.isTimeSeries() && (config.data_x || notEmpty(config.data_xs)); - }; - ChartInternal.prototype.isTimeSeriesY = function () { - return this.config.axis_y_type === 'timeseries'; - }; - ChartInternal.prototype.getTranslate = function (target) { - var $$ = this, config = $$.config, x, y; - if (target === 'main') { - x = asHalfPixel($$.margin.left); - y = asHalfPixel($$.margin.top); - } - else if (target === 'context') { - x = asHalfPixel($$.margin2.left); - y = asHalfPixel($$.margin2.top); - } - else if (target === 'legend') { - x = $$.margin3.left; - y = $$.margin3.top; - } - else if (target === 'x') { - x = 0; - y = config.axis_rotated ? 0 : $$.height; - } - else if (target === 'y') { - x = 0; - y = config.axis_rotated ? $$.height : 0; - } - else if (target === 'y2') { - x = config.axis_rotated ? 0 : $$.width; - y = config.axis_rotated ? 1 : 0; - } - else if (target === 'subx') { - x = 0; - y = config.axis_rotated ? 0 : $$.height2; - } - else if (target === 'arc') { - x = $$.arcWidth / 2; - y = $$.arcHeight / 2 - ($$.hasType('gauge') ? 6 : 0); // to prevent wrong display of min and max label - } - return 'translate(' + x + ',' + y + ')'; - }; - ChartInternal.prototype.initialOpacity = function (d) { - return d.value !== null && this.withoutFadeIn[d.id] ? 1 : 0; - }; - ChartInternal.prototype.initialOpacityForCircle = function (d) { - return d.value !== null && this.withoutFadeIn[d.id] - ? this.opacityForCircle(d) - : 0; - }; - ChartInternal.prototype.opacityForCircle = function (d) { - var isPointShouldBeShown = isFunction(this.config.point_show) - ? this.config.point_show(d) - : this.config.point_show; - var opacity = isPointShouldBeShown || this.isStanfordType(d) ? 1 : 0; - return isValue(d.value) ? (this.isScatterType(d) ? 0.5 : opacity) : 0; - }; - ChartInternal.prototype.opacityForText = function () { - return this.hasDataLabel() ? 1 : 0; - }; - ChartInternal.prototype.xx = function (d) { - return d ? this.x(d.x) : null; - }; - ChartInternal.prototype.xvCustom = function (d, xyValue) { - var $$ = this, value = xyValue ? d[xyValue] : d.value; - if ($$.isTimeSeries()) { - value = $$.parseDate(d.value); - } - else if ($$.isCategorized() && typeof d.value === 'string') { - value = $$.config.axis_x_categories.indexOf(d.value); - } - return Math.ceil($$.x(value)); - }; - ChartInternal.prototype.yvCustom = function (d, xyValue) { - var $$ = this, yScale = d.axis && d.axis === 'y2' ? $$.y2 : $$.y, value = xyValue ? d[xyValue] : d.value; - return Math.ceil(yScale(value)); - }; - ChartInternal.prototype.xv = function (d) { - var $$ = this, value = d.value; - if ($$.isTimeSeries()) { - value = $$.parseDate(d.value); - } - else if ($$.isCategorized() && typeof d.value === 'string') { - value = $$.config.axis_x_categories.indexOf(d.value); - } - return Math.ceil($$.x(value)); - }; - ChartInternal.prototype.yv = function (d) { - var $$ = this, yScale = d.axis && d.axis === 'y2' ? $$.y2 : $$.y; - return Math.ceil(yScale(d.value)); - }; - ChartInternal.prototype.subxx = function (d) { - return d ? this.subX(d.x) : null; - }; - ChartInternal.prototype.transformMain = function (withTransition, transitions) { - var $$ = this, xAxis, yAxis, y2Axis; - if (transitions && transitions.axisX) { - xAxis = transitions.axisX; - } - else { - xAxis = $$.main.select('.' + CLASS.axisX); - if (withTransition) { - xAxis = xAxis.transition(); - } - } - if (transitions && transitions.axisY) { - yAxis = transitions.axisY; - } - else { - yAxis = $$.main.select('.' + CLASS.axisY); - if (withTransition) { - yAxis = yAxis.transition(); - } - } - if (transitions && transitions.axisY2) { - y2Axis = transitions.axisY2; - } - else { - y2Axis = $$.main.select('.' + CLASS.axisY2); - if (withTransition) { - y2Axis = y2Axis.transition(); - } - } - (withTransition ? $$.main.transition() : $$.main).attr('transform', $$.getTranslate('main')); - xAxis.attr('transform', $$.getTranslate('x')); - yAxis.attr('transform', $$.getTranslate('y')); - y2Axis.attr('transform', $$.getTranslate('y2')); - $$.main - .select('.' + CLASS.chartArcs) - .attr('transform', $$.getTranslate('arc')); - }; - ChartInternal.prototype.transformAll = function (withTransition, transitions) { - var $$ = this; - $$.transformMain(withTransition, transitions); - if ($$.config.subchart_show) { - $$.transformContext(withTransition, transitions); - } - if ($$.legend) { - $$.transformLegend(withTransition); - } - }; - ChartInternal.prototype.updateSvgSize = function () { - var $$ = this, brush = $$.svg.select("." + CLASS.brush + " .overlay"); - $$.svg.attr('width', $$.currentWidth).attr('height', $$.currentHeight); - $$.svg - .selectAll(['#' + $$.clipId, '#' + $$.clipIdForGrid]) - .select('rect') - .attr('width', $$.width) - .attr('height', $$.height); - $$.svg - .select('#' + $$.clipIdForXAxis) - .select('rect') - .attr('x', $$.getXAxisClipX.bind($$)) - .attr('y', $$.getXAxisClipY.bind($$)) - .attr('width', $$.getXAxisClipWidth.bind($$)) - .attr('height', $$.getXAxisClipHeight.bind($$)); - $$.svg - .select('#' + $$.clipIdForYAxis) - .select('rect') - .attr('x', $$.getYAxisClipX.bind($$)) - .attr('y', $$.getYAxisClipY.bind($$)) - .attr('width', $$.getYAxisClipWidth.bind($$)) - .attr('height', $$.getYAxisClipHeight.bind($$)); - $$.svg - .select('#' + $$.clipIdForSubchart) - .select('rect') - .attr('width', $$.width) - .attr('height', (brush.size() && brush.attr('height')) || 0); - // MEMO: parent div's height will be bigger than svg when - $$.selectChart.style('max-height', $$.currentHeight + 'px'); - }; - ChartInternal.prototype.updateDimension = function (withoutAxis) { - var $$ = this; - if (!withoutAxis) { - if ($$.config.axis_rotated) { - $$.axes.x.call($$.xAxis); - $$.axes.subx.call($$.subXAxis); - } - else { - $$.axes.y.call($$.yAxis); - $$.axes.y2.call($$.y2Axis); - } - } - $$.updateSizes(); - $$.updateScales(); - $$.updateSvgSize(); - $$.transformAll(false); - }; - ChartInternal.prototype.observeInserted = function (selection) { - var $$ = this, observer; - if (typeof MutationObserver === 'undefined') { - window.console.error('MutationObserver not defined.'); - return; - } - observer = new MutationObserver(function (mutations) { - mutations.forEach(function (mutation) { - if (mutation.type === 'childList' && mutation.previousSibling) { - observer.disconnect(); - // need to wait for completion of load because size calculation requires the actual sizes determined after that completion - $$.intervalForObserveInserted = window.setInterval(function () { - // parentNode will NOT be null when completed - if (selection.node().parentNode) { - window.clearInterval($$.intervalForObserveInserted); - $$.updateDimension(); - if ($$.brush) { - $$.brush.update(); - } - $$.config.oninit.call($$); - $$.redraw({ - withTransform: true, - withUpdateXDomain: true, - withUpdateOrgXDomain: true, - withTransition: false, - withTransitionForTransform: false, - withLegend: true - }); - selection.transition().style('opacity', 1); - } - }, 10); - } - }); - }); - observer.observe(selection.node(), { - attributes: true, - childList: true, - characterData: true - }); - }; - /** - * Binds handlers to the window resize event. - */ - ChartInternal.prototype.bindResize = function () { - var $$ = this, config = $$.config; - $$.resizeFunction = $$.generateResize(); // need to call .remove - $$.resizeFunction.add(function () { - config.onresize.call($$); - }); - if (config.resize_auto) { - $$.resizeFunction.add(function () { - if ($$.resizeTimeout !== undefined) { - window.clearTimeout($$.resizeTimeout); - } - $$.resizeTimeout = window.setTimeout(function () { - delete $$.resizeTimeout; - $$.updateAndRedraw({ - withUpdateXDomain: false, - withUpdateOrgXDomain: false, - withTransition: false, - withTransitionForTransform: false, - withLegend: true - }); - if ($$.brush) { - $$.brush.update(); - } - }, 100); - }); - } - $$.resizeFunction.add(function () { - config.onresized.call($$); - }); - $$.resizeIfElementDisplayed = function () { - // if element not displayed skip it - if ($$.api == null || !$$.api.element.offsetParent) { - return; - } - $$.resizeFunction(); - }; - window.addEventListener('resize', $$.resizeIfElementDisplayed, false); - }; - /** - * Binds handlers to the window focus event. - */ - ChartInternal.prototype.bindWindowFocus = function () { - var _this = this; - if (this.windowFocusHandler) { - // The handler is already set - return; - } - this.windowFocusHandler = function () { - _this.redraw(); - }; - window.addEventListener('focus', this.windowFocusHandler); - }; - /** - * Unbinds from the window focus event. - */ - ChartInternal.prototype.unbindWindowFocus = function () { - window.removeEventListener('focus', this.windowFocusHandler); - delete this.windowFocusHandler; - }; - ChartInternal.prototype.generateResize = function () { - var resizeFunctions = []; - function callResizeFunctions() { - resizeFunctions.forEach(function (f) { - f(); - }); - } - callResizeFunctions.add = function (f) { - resizeFunctions.push(f); - }; - callResizeFunctions.remove = function (f) { - for (var i = 0; i < resizeFunctions.length; i++) { - if (resizeFunctions[i] === f) { - resizeFunctions.splice(i, 1); - break; - } - } - }; - return callResizeFunctions; - }; - ChartInternal.prototype.endall = function (transition, callback) { - var n = 0; - transition - .each(function () { - ++n; - }) - .on('end', function () { - if (!--n) { - callback.apply(this, arguments); - } - }); - }; - ChartInternal.prototype.generateWait = function () { - var $$ = this; - var transitionsToWait = [], f = function (callback) { - var timer = setInterval(function () { - if (!$$.isTabVisible()) { - return; - } - var done = 0; - transitionsToWait.forEach(function (t) { - if (t.empty()) { - done += 1; - return; - } - try { - t.transition(); - } - catch (e) { - done += 1; - } - }); - if (done === transitionsToWait.length) { - clearInterval(timer); - if (callback) { - callback(); - } - } - }, 50); - }; - f.add = function (transition) { - transitionsToWait.push(transition); - }; - return f; - }; - ChartInternal.prototype.parseDate = function (date) { - var $$ = this, parsedDate; - if (date instanceof Date) { - parsedDate = date; - } - else if (typeof date === 'string') { - parsedDate = $$.dataTimeParse(date); - } - else if (typeof date === 'object') { - parsedDate = new Date(+date); - } - else if (typeof date === 'number' && !isNaN(date)) { - parsedDate = new Date(+date); - } - if (!parsedDate || isNaN(+parsedDate)) { - window.console.error("Failed to parse x '" + date + "' to Date object"); - } - return parsedDate; - }; - ChartInternal.prototype.isTabVisible = function () { - return !document.hidden; - }; - ChartInternal.prototype.getPathBox = getPathBox; - ChartInternal.prototype.CLASS = CLASS; - - /* jshint ignore:start */ - (function () { - if (!('SVGPathSeg' in window)) { - // Spec: http://www.w3.org/TR/SVG11/single-page.html#paths-InterfaceSVGPathSeg - window.SVGPathSeg = function (type, typeAsLetter, owningPathSegList) { - this.pathSegType = type; - this.pathSegTypeAsLetter = typeAsLetter; - this._owningPathSegList = owningPathSegList; - }; - window.SVGPathSeg.prototype.classname = 'SVGPathSeg'; - window.SVGPathSeg.PATHSEG_UNKNOWN = 0; - window.SVGPathSeg.PATHSEG_CLOSEPATH = 1; - window.SVGPathSeg.PATHSEG_MOVETO_ABS = 2; - window.SVGPathSeg.PATHSEG_MOVETO_REL = 3; - window.SVGPathSeg.PATHSEG_LINETO_ABS = 4; - window.SVGPathSeg.PATHSEG_LINETO_REL = 5; - window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_ABS = 6; - window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_REL = 7; - window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_ABS = 8; - window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_REL = 9; - window.SVGPathSeg.PATHSEG_ARC_ABS = 10; - window.SVGPathSeg.PATHSEG_ARC_REL = 11; - window.SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_ABS = 12; - window.SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_REL = 13; - window.SVGPathSeg.PATHSEG_LINETO_VERTICAL_ABS = 14; - window.SVGPathSeg.PATHSEG_LINETO_VERTICAL_REL = 15; - window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_ABS = 16; - window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_REL = 17; - window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS = 18; - window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL = 19; - // Notify owning PathSegList on any changes so they can be synchronized back to the path element. - window.SVGPathSeg.prototype._segmentChanged = function () { - if (this._owningPathSegList) - this._owningPathSegList.segmentChanged(this); - }; - window.SVGPathSegClosePath = function (owningPathSegList) { - window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_CLOSEPATH, 'z', owningPathSegList); - }; - window.SVGPathSegClosePath.prototype = Object.create(window.SVGPathSeg.prototype); - window.SVGPathSegClosePath.prototype.toString = function () { - return '[object SVGPathSegClosePath]'; - }; - window.SVGPathSegClosePath.prototype._asPathString = function () { - return this.pathSegTypeAsLetter; - }; - window.SVGPathSegClosePath.prototype.clone = function () { - return new window.SVGPathSegClosePath(undefined); - }; - window.SVGPathSegMovetoAbs = function (owningPathSegList, x, y) { - window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_MOVETO_ABS, 'M', owningPathSegList); - this._x = x; - this._y = y; - }; - window.SVGPathSegMovetoAbs.prototype = Object.create(window.SVGPathSeg.prototype); - window.SVGPathSegMovetoAbs.prototype.toString = function () { - return '[object SVGPathSegMovetoAbs]'; - }; - window.SVGPathSegMovetoAbs.prototype._asPathString = function () { - return this.pathSegTypeAsLetter + ' ' + this._x + ' ' + this._y; - }; - window.SVGPathSegMovetoAbs.prototype.clone = function () { - return new window.SVGPathSegMovetoAbs(undefined, this._x, this._y); - }; - Object.defineProperty(window.SVGPathSegMovetoAbs.prototype, 'x', { - get: function () { - return this._x; - }, - set: function (x) { - this._x = x; - this._segmentChanged(); - }, - enumerable: true - }); - Object.defineProperty(window.SVGPathSegMovetoAbs.prototype, 'y', { - get: function () { - return this._y; - }, - set: function (y) { - this._y = y; - this._segmentChanged(); - }, - enumerable: true - }); - window.SVGPathSegMovetoRel = function (owningPathSegList, x, y) { - window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_MOVETO_REL, 'm', owningPathSegList); - this._x = x; - this._y = y; - }; - window.SVGPathSegMovetoRel.prototype = Object.create(window.SVGPathSeg.prototype); - window.SVGPathSegMovetoRel.prototype.toString = function () { - return '[object SVGPathSegMovetoRel]'; - }; - window.SVGPathSegMovetoRel.prototype._asPathString = function () { - return this.pathSegTypeAsLetter + ' ' + this._x + ' ' + this._y; - }; - window.SVGPathSegMovetoRel.prototype.clone = function () { - return new window.SVGPathSegMovetoRel(undefined, this._x, this._y); - }; - Object.defineProperty(window.SVGPathSegMovetoRel.prototype, 'x', { - get: function () { - return this._x; - }, - set: function (x) { - this._x = x; - this._segmentChanged(); - }, - enumerable: true - }); - Object.defineProperty(window.SVGPathSegMovetoRel.prototype, 'y', { - get: function () { - return this._y; - }, - set: function (y) { - this._y = y; - this._segmentChanged(); - }, - enumerable: true - }); - window.SVGPathSegLinetoAbs = function (owningPathSegList, x, y) { - window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_LINETO_ABS, 'L', owningPathSegList); - this._x = x; - this._y = y; - }; - window.SVGPathSegLinetoAbs.prototype = Object.create(window.SVGPathSeg.prototype); - window.SVGPathSegLinetoAbs.prototype.toString = function () { - return '[object SVGPathSegLinetoAbs]'; - }; - window.SVGPathSegLinetoAbs.prototype._asPathString = function () { - return this.pathSegTypeAsLetter + ' ' + this._x + ' ' + this._y; - }; - window.SVGPathSegLinetoAbs.prototype.clone = function () { - return new window.SVGPathSegLinetoAbs(undefined, this._x, this._y); - }; - Object.defineProperty(window.SVGPathSegLinetoAbs.prototype, 'x', { - get: function () { - return this._x; - }, - set: function (x) { - this._x = x; - this._segmentChanged(); - }, - enumerable: true - }); - Object.defineProperty(window.SVGPathSegLinetoAbs.prototype, 'y', { - get: function () { - return this._y; - }, - set: function (y) { - this._y = y; - this._segmentChanged(); - }, - enumerable: true - }); - window.SVGPathSegLinetoRel = function (owningPathSegList, x, y) { - window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_LINETO_REL, 'l', owningPathSegList); - this._x = x; - this._y = y; - }; - window.SVGPathSegLinetoRel.prototype = Object.create(window.SVGPathSeg.prototype); - window.SVGPathSegLinetoRel.prototype.toString = function () { - return '[object SVGPathSegLinetoRel]'; - }; - window.SVGPathSegLinetoRel.prototype._asPathString = function () { - return this.pathSegTypeAsLetter + ' ' + this._x + ' ' + this._y; - }; - window.SVGPathSegLinetoRel.prototype.clone = function () { - return new window.SVGPathSegLinetoRel(undefined, this._x, this._y); - }; - Object.defineProperty(window.SVGPathSegLinetoRel.prototype, 'x', { - get: function () { - return this._x; - }, - set: function (x) { - this._x = x; - this._segmentChanged(); - }, - enumerable: true - }); - Object.defineProperty(window.SVGPathSegLinetoRel.prototype, 'y', { - get: function () { - return this._y; - }, - set: function (y) { - this._y = y; - this._segmentChanged(); - }, - enumerable: true - }); - window.SVGPathSegCurvetoCubicAbs = function (owningPathSegList, x, y, x1, y1, x2, y2) { - window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_ABS, 'C', owningPathSegList); - this._x = x; - this._y = y; - this._x1 = x1; - this._y1 = y1; - this._x2 = x2; - this._y2 = y2; - }; - window.SVGPathSegCurvetoCubicAbs.prototype = Object.create(window.SVGPathSeg.prototype); - window.SVGPathSegCurvetoCubicAbs.prototype.toString = function () { - return '[object SVGPathSegCurvetoCubicAbs]'; - }; - window.SVGPathSegCurvetoCubicAbs.prototype._asPathString = function () { - return (this.pathSegTypeAsLetter + - ' ' + - this._x1 + - ' ' + - this._y1 + - ' ' + - this._x2 + - ' ' + - this._y2 + - ' ' + - this._x + - ' ' + - this._y); - }; - window.SVGPathSegCurvetoCubicAbs.prototype.clone = function () { - return new window.SVGPathSegCurvetoCubicAbs(undefined, this._x, this._y, this._x1, this._y1, this._x2, this._y2); - }; - Object.defineProperty(window.SVGPathSegCurvetoCubicAbs.prototype, 'x', { - get: function () { - return this._x; - }, - set: function (x) { - this._x = x; - this._segmentChanged(); - }, - enumerable: true - }); - Object.defineProperty(window.SVGPathSegCurvetoCubicAbs.prototype, 'y', { - get: function () { - return this._y; - }, - set: function (y) { - this._y = y; - this._segmentChanged(); - }, - enumerable: true - }); - Object.defineProperty(window.SVGPathSegCurvetoCubicAbs.prototype, 'x1', { - get: function () { - return this._x1; - }, - set: function (x1) { - this._x1 = x1; - this._segmentChanged(); - }, - enumerable: true - }); - Object.defineProperty(window.SVGPathSegCurvetoCubicAbs.prototype, 'y1', { - get: function () { - return this._y1; - }, - set: function (y1) { - this._y1 = y1; - this._segmentChanged(); - }, - enumerable: true - }); - Object.defineProperty(window.SVGPathSegCurvetoCubicAbs.prototype, 'x2', { - get: function () { - return this._x2; - }, - set: function (x2) { - this._x2 = x2; - this._segmentChanged(); - }, - enumerable: true - }); - Object.defineProperty(window.SVGPathSegCurvetoCubicAbs.prototype, 'y2', { - get: function () { - return this._y2; - }, - set: function (y2) { - this._y2 = y2; - this._segmentChanged(); - }, - enumerable: true - }); - window.SVGPathSegCurvetoCubicRel = function (owningPathSegList, x, y, x1, y1, x2, y2) { - window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_REL, 'c', owningPathSegList); - this._x = x; - this._y = y; - this._x1 = x1; - this._y1 = y1; - this._x2 = x2; - this._y2 = y2; - }; - window.SVGPathSegCurvetoCubicRel.prototype = Object.create(window.SVGPathSeg.prototype); - window.SVGPathSegCurvetoCubicRel.prototype.toString = function () { - return '[object SVGPathSegCurvetoCubicRel]'; - }; - window.SVGPathSegCurvetoCubicRel.prototype._asPathString = function () { - return (this.pathSegTypeAsLetter + - ' ' + - this._x1 + - ' ' + - this._y1 + - ' ' + - this._x2 + - ' ' + - this._y2 + - ' ' + - this._x + - ' ' + - this._y); - }; - window.SVGPathSegCurvetoCubicRel.prototype.clone = function () { - return new window.SVGPathSegCurvetoCubicRel(undefined, this._x, this._y, this._x1, this._y1, this._x2, this._y2); - }; - Object.defineProperty(window.SVGPathSegCurvetoCubicRel.prototype, 'x', { - get: function () { - return this._x; - }, - set: function (x) { - this._x = x; - this._segmentChanged(); - }, - enumerable: true - }); - Object.defineProperty(window.SVGPathSegCurvetoCubicRel.prototype, 'y', { - get: function () { - return this._y; - }, - set: function (y) { - this._y = y; - this._segmentChanged(); - }, - enumerable: true - }); - Object.defineProperty(window.SVGPathSegCurvetoCubicRel.prototype, 'x1', { - get: function () { - return this._x1; - }, - set: function (x1) { - this._x1 = x1; - this._segmentChanged(); - }, - enumerable: true - }); - Object.defineProperty(window.SVGPathSegCurvetoCubicRel.prototype, 'y1', { - get: function () { - return this._y1; - }, - set: function (y1) { - this._y1 = y1; - this._segmentChanged(); - }, - enumerable: true - }); - Object.defineProperty(window.SVGPathSegCurvetoCubicRel.prototype, 'x2', { - get: function () { - return this._x2; - }, - set: function (x2) { - this._x2 = x2; - this._segmentChanged(); - }, - enumerable: true - }); - Object.defineProperty(window.SVGPathSegCurvetoCubicRel.prototype, 'y2', { - get: function () { - return this._y2; - }, - set: function (y2) { - this._y2 = y2; - this._segmentChanged(); - }, - enumerable: true - }); - window.SVGPathSegCurvetoQuadraticAbs = function (owningPathSegList, x, y, x1, y1) { - window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_ABS, 'Q', owningPathSegList); - this._x = x; - this._y = y; - this._x1 = x1; - this._y1 = y1; - }; - window.SVGPathSegCurvetoQuadraticAbs.prototype = Object.create(window.SVGPathSeg.prototype); - window.SVGPathSegCurvetoQuadraticAbs.prototype.toString = function () { - return '[object SVGPathSegCurvetoQuadraticAbs]'; - }; - window.SVGPathSegCurvetoQuadraticAbs.prototype._asPathString = function () { - return (this.pathSegTypeAsLetter + - ' ' + - this._x1 + - ' ' + - this._y1 + - ' ' + - this._x + - ' ' + - this._y); - }; - window.SVGPathSegCurvetoQuadraticAbs.prototype.clone = function () { - return new window.SVGPathSegCurvetoQuadraticAbs(undefined, this._x, this._y, this._x1, this._y1); - }; - Object.defineProperty(window.SVGPathSegCurvetoQuadraticAbs.prototype, 'x', { - get: function () { - return this._x; - }, - set: function (x) { - this._x = x; - this._segmentChanged(); - }, - enumerable: true - }); - Object.defineProperty(window.SVGPathSegCurvetoQuadraticAbs.prototype, 'y', { - get: function () { - return this._y; - }, - set: function (y) { - this._y = y; - this._segmentChanged(); - }, - enumerable: true - }); - Object.defineProperty(window.SVGPathSegCurvetoQuadraticAbs.prototype, 'x1', { - get: function () { - return this._x1; - }, - set: function (x1) { - this._x1 = x1; - this._segmentChanged(); - }, - enumerable: true - }); - Object.defineProperty(window.SVGPathSegCurvetoQuadraticAbs.prototype, 'y1', { - get: function () { - return this._y1; - }, - set: function (y1) { - this._y1 = y1; - this._segmentChanged(); - }, - enumerable: true - }); - window.SVGPathSegCurvetoQuadraticRel = function (owningPathSegList, x, y, x1, y1) { - window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_REL, 'q', owningPathSegList); - this._x = x; - this._y = y; - this._x1 = x1; - this._y1 = y1; - }; - window.SVGPathSegCurvetoQuadraticRel.prototype = Object.create(window.SVGPathSeg.prototype); - window.SVGPathSegCurvetoQuadraticRel.prototype.toString = function () { - return '[object SVGPathSegCurvetoQuadraticRel]'; - }; - window.SVGPathSegCurvetoQuadraticRel.prototype._asPathString = function () { - return (this.pathSegTypeAsLetter + - ' ' + - this._x1 + - ' ' + - this._y1 + - ' ' + - this._x + - ' ' + - this._y); - }; - window.SVGPathSegCurvetoQuadraticRel.prototype.clone = function () { - return new window.SVGPathSegCurvetoQuadraticRel(undefined, this._x, this._y, this._x1, this._y1); - }; - Object.defineProperty(window.SVGPathSegCurvetoQuadraticRel.prototype, 'x', { - get: function () { - return this._x; - }, - set: function (x) { - this._x = x; - this._segmentChanged(); - }, - enumerable: true - }); - Object.defineProperty(window.SVGPathSegCurvetoQuadraticRel.prototype, 'y', { - get: function () { - return this._y; - }, - set: function (y) { - this._y = y; - this._segmentChanged(); - }, - enumerable: true - }); - Object.defineProperty(window.SVGPathSegCurvetoQuadraticRel.prototype, 'x1', { - get: function () { - return this._x1; - }, - set: function (x1) { - this._x1 = x1; - this._segmentChanged(); - }, - enumerable: true - }); - Object.defineProperty(window.SVGPathSegCurvetoQuadraticRel.prototype, 'y1', { - get: function () { - return this._y1; - }, - set: function (y1) { - this._y1 = y1; - this._segmentChanged(); - }, - enumerable: true - }); - window.SVGPathSegArcAbs = function (owningPathSegList, x, y, r1, r2, angle, largeArcFlag, sweepFlag) { - window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_ARC_ABS, 'A', owningPathSegList); - this._x = x; - this._y = y; - this._r1 = r1; - this._r2 = r2; - this._angle = angle; - this._largeArcFlag = largeArcFlag; - this._sweepFlag = sweepFlag; - }; - window.SVGPathSegArcAbs.prototype = Object.create(window.SVGPathSeg.prototype); - window.SVGPathSegArcAbs.prototype.toString = function () { - return '[object SVGPathSegArcAbs]'; - }; - window.SVGPathSegArcAbs.prototype._asPathString = function () { - return (this.pathSegTypeAsLetter + - ' ' + - this._r1 + - ' ' + - this._r2 + - ' ' + - this._angle + - ' ' + - (this._largeArcFlag ? '1' : '0') + - ' ' + - (this._sweepFlag ? '1' : '0') + - ' ' + - this._x + - ' ' + - this._y); - }; - window.SVGPathSegArcAbs.prototype.clone = function () { - return new window.SVGPathSegArcAbs(undefined, this._x, this._y, this._r1, this._r2, this._angle, this._largeArcFlag, this._sweepFlag); - }; - Object.defineProperty(window.SVGPathSegArcAbs.prototype, 'x', { - get: function () { - return this._x; - }, - set: function (x) { - this._x = x; - this._segmentChanged(); - }, - enumerable: true - }); - Object.defineProperty(window.SVGPathSegArcAbs.prototype, 'y', { - get: function () { - return this._y; - }, - set: function (y) { - this._y = y; - this._segmentChanged(); - }, - enumerable: true - }); - Object.defineProperty(window.SVGPathSegArcAbs.prototype, 'r1', { - get: function () { - return this._r1; - }, - set: function (r1) { - this._r1 = r1; - this._segmentChanged(); - }, - enumerable: true - }); - Object.defineProperty(window.SVGPathSegArcAbs.prototype, 'r2', { - get: function () { - return this._r2; - }, - set: function (r2) { - this._r2 = r2; - this._segmentChanged(); - }, - enumerable: true - }); - Object.defineProperty(window.SVGPathSegArcAbs.prototype, 'angle', { - get: function () { - return this._angle; - }, - set: function (angle) { - this._angle = angle; - this._segmentChanged(); - }, - enumerable: true - }); - Object.defineProperty(window.SVGPathSegArcAbs.prototype, 'largeArcFlag', { - get: function () { - return this._largeArcFlag; - }, - set: function (largeArcFlag) { - this._largeArcFlag = largeArcFlag; - this._segmentChanged(); - }, - enumerable: true - }); - Object.defineProperty(window.SVGPathSegArcAbs.prototype, 'sweepFlag', { - get: function () { - return this._sweepFlag; - }, - set: function (sweepFlag) { - this._sweepFlag = sweepFlag; - this._segmentChanged(); - }, - enumerable: true - }); - window.SVGPathSegArcRel = function (owningPathSegList, x, y, r1, r2, angle, largeArcFlag, sweepFlag) { - window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_ARC_REL, 'a', owningPathSegList); - this._x = x; - this._y = y; - this._r1 = r1; - this._r2 = r2; - this._angle = angle; - this._largeArcFlag = largeArcFlag; - this._sweepFlag = sweepFlag; - }; - window.SVGPathSegArcRel.prototype = Object.create(window.SVGPathSeg.prototype); - window.SVGPathSegArcRel.prototype.toString = function () { - return '[object SVGPathSegArcRel]'; - }; - window.SVGPathSegArcRel.prototype._asPathString = function () { - return (this.pathSegTypeAsLetter + - ' ' + - this._r1 + - ' ' + - this._r2 + - ' ' + - this._angle + - ' ' + - (this._largeArcFlag ? '1' : '0') + - ' ' + - (this._sweepFlag ? '1' : '0') + - ' ' + - this._x + - ' ' + - this._y); - }; - window.SVGPathSegArcRel.prototype.clone = function () { - return new window.SVGPathSegArcRel(undefined, this._x, this._y, this._r1, this._r2, this._angle, this._largeArcFlag, this._sweepFlag); - }; - Object.defineProperty(window.SVGPathSegArcRel.prototype, 'x', { - get: function () { - return this._x; - }, - set: function (x) { - this._x = x; - this._segmentChanged(); - }, - enumerable: true - }); - Object.defineProperty(window.SVGPathSegArcRel.prototype, 'y', { - get: function () { - return this._y; - }, - set: function (y) { - this._y = y; - this._segmentChanged(); - }, - enumerable: true - }); - Object.defineProperty(window.SVGPathSegArcRel.prototype, 'r1', { - get: function () { - return this._r1; - }, - set: function (r1) { - this._r1 = r1; - this._segmentChanged(); - }, - enumerable: true - }); - Object.defineProperty(window.SVGPathSegArcRel.prototype, 'r2', { - get: function () { - return this._r2; - }, - set: function (r2) { - this._r2 = r2; - this._segmentChanged(); - }, - enumerable: true - }); - Object.defineProperty(window.SVGPathSegArcRel.prototype, 'angle', { - get: function () { - return this._angle; - }, - set: function (angle) { - this._angle = angle; - this._segmentChanged(); - }, - enumerable: true - }); - Object.defineProperty(window.SVGPathSegArcRel.prototype, 'largeArcFlag', { - get: function () { - return this._largeArcFlag; - }, - set: function (largeArcFlag) { - this._largeArcFlag = largeArcFlag; - this._segmentChanged(); - }, - enumerable: true - }); - Object.defineProperty(window.SVGPathSegArcRel.prototype, 'sweepFlag', { - get: function () { - return this._sweepFlag; - }, - set: function (sweepFlag) { - this._sweepFlag = sweepFlag; - this._segmentChanged(); - }, - enumerable: true - }); - window.SVGPathSegLinetoHorizontalAbs = function (owningPathSegList, x) { - window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_ABS, 'H', owningPathSegList); - this._x = x; - }; - window.SVGPathSegLinetoHorizontalAbs.prototype = Object.create(window.SVGPathSeg.prototype); - window.SVGPathSegLinetoHorizontalAbs.prototype.toString = function () { - return '[object SVGPathSegLinetoHorizontalAbs]'; - }; - window.SVGPathSegLinetoHorizontalAbs.prototype._asPathString = function () { - return this.pathSegTypeAsLetter + ' ' + this._x; - }; - window.SVGPathSegLinetoHorizontalAbs.prototype.clone = function () { - return new window.SVGPathSegLinetoHorizontalAbs(undefined, this._x); - }; - Object.defineProperty(window.SVGPathSegLinetoHorizontalAbs.prototype, 'x', { - get: function () { - return this._x; - }, - set: function (x) { - this._x = x; - this._segmentChanged(); - }, - enumerable: true - }); - window.SVGPathSegLinetoHorizontalRel = function (owningPathSegList, x) { - window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_REL, 'h', owningPathSegList); - this._x = x; - }; - window.SVGPathSegLinetoHorizontalRel.prototype = Object.create(window.SVGPathSeg.prototype); - window.SVGPathSegLinetoHorizontalRel.prototype.toString = function () { - return '[object SVGPathSegLinetoHorizontalRel]'; - }; - window.SVGPathSegLinetoHorizontalRel.prototype._asPathString = function () { - return this.pathSegTypeAsLetter + ' ' + this._x; - }; - window.SVGPathSegLinetoHorizontalRel.prototype.clone = function () { - return new window.SVGPathSegLinetoHorizontalRel(undefined, this._x); - }; - Object.defineProperty(window.SVGPathSegLinetoHorizontalRel.prototype, 'x', { - get: function () { - return this._x; - }, - set: function (x) { - this._x = x; - this._segmentChanged(); - }, - enumerable: true - }); - window.SVGPathSegLinetoVerticalAbs = function (owningPathSegList, y) { - window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_LINETO_VERTICAL_ABS, 'V', owningPathSegList); - this._y = y; - }; - window.SVGPathSegLinetoVerticalAbs.prototype = Object.create(window.SVGPathSeg.prototype); - window.SVGPathSegLinetoVerticalAbs.prototype.toString = function () { - return '[object SVGPathSegLinetoVerticalAbs]'; - }; - window.SVGPathSegLinetoVerticalAbs.prototype._asPathString = function () { - return this.pathSegTypeAsLetter + ' ' + this._y; - }; - window.SVGPathSegLinetoVerticalAbs.prototype.clone = function () { - return new window.SVGPathSegLinetoVerticalAbs(undefined, this._y); - }; - Object.defineProperty(window.SVGPathSegLinetoVerticalAbs.prototype, 'y', { - get: function () { - return this._y; - }, - set: function (y) { - this._y = y; - this._segmentChanged(); - }, - enumerable: true - }); - window.SVGPathSegLinetoVerticalRel = function (owningPathSegList, y) { - window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_LINETO_VERTICAL_REL, 'v', owningPathSegList); - this._y = y; - }; - window.SVGPathSegLinetoVerticalRel.prototype = Object.create(window.SVGPathSeg.prototype); - window.SVGPathSegLinetoVerticalRel.prototype.toString = function () { - return '[object SVGPathSegLinetoVerticalRel]'; - }; - window.SVGPathSegLinetoVerticalRel.prototype._asPathString = function () { - return this.pathSegTypeAsLetter + ' ' + this._y; - }; - window.SVGPathSegLinetoVerticalRel.prototype.clone = function () { - return new window.SVGPathSegLinetoVerticalRel(undefined, this._y); - }; - Object.defineProperty(window.SVGPathSegLinetoVerticalRel.prototype, 'y', { - get: function () { - return this._y; - }, - set: function (y) { - this._y = y; - this._segmentChanged(); - }, - enumerable: true - }); - window.SVGPathSegCurvetoCubicSmoothAbs = function (owningPathSegList, x, y, x2, y2) { - window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_ABS, 'S', owningPathSegList); - this._x = x; - this._y = y; - this._x2 = x2; - this._y2 = y2; - }; - window.SVGPathSegCurvetoCubicSmoothAbs.prototype = Object.create(window.SVGPathSeg.prototype); - window.SVGPathSegCurvetoCubicSmoothAbs.prototype.toString = function () { - return '[object SVGPathSegCurvetoCubicSmoothAbs]'; - }; - window.SVGPathSegCurvetoCubicSmoothAbs.prototype._asPathString = function () { - return (this.pathSegTypeAsLetter + - ' ' + - this._x2 + - ' ' + - this._y2 + - ' ' + - this._x + - ' ' + - this._y); - }; - window.SVGPathSegCurvetoCubicSmoothAbs.prototype.clone = function () { - return new window.SVGPathSegCurvetoCubicSmoothAbs(undefined, this._x, this._y, this._x2, this._y2); - }; - Object.defineProperty(window.SVGPathSegCurvetoCubicSmoothAbs.prototype, 'x', { - get: function () { - return this._x; - }, - set: function (x) { - this._x = x; - this._segmentChanged(); - }, - enumerable: true - }); - Object.defineProperty(window.SVGPathSegCurvetoCubicSmoothAbs.prototype, 'y', { - get: function () { - return this._y; - }, - set: function (y) { - this._y = y; - this._segmentChanged(); - }, - enumerable: true - }); - Object.defineProperty(window.SVGPathSegCurvetoCubicSmoothAbs.prototype, 'x2', { - get: function () { - return this._x2; - }, - set: function (x2) { - this._x2 = x2; - this._segmentChanged(); - }, - enumerable: true - }); - Object.defineProperty(window.SVGPathSegCurvetoCubicSmoothAbs.prototype, 'y2', { - get: function () { - return this._y2; - }, - set: function (y2) { - this._y2 = y2; - this._segmentChanged(); - }, - enumerable: true - }); - window.SVGPathSegCurvetoCubicSmoothRel = function (owningPathSegList, x, y, x2, y2) { - window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_REL, 's', owningPathSegList); - this._x = x; - this._y = y; - this._x2 = x2; - this._y2 = y2; - }; - window.SVGPathSegCurvetoCubicSmoothRel.prototype = Object.create(window.SVGPathSeg.prototype); - window.SVGPathSegCurvetoCubicSmoothRel.prototype.toString = function () { - return '[object SVGPathSegCurvetoCubicSmoothRel]'; - }; - window.SVGPathSegCurvetoCubicSmoothRel.prototype._asPathString = function () { - return (this.pathSegTypeAsLetter + - ' ' + - this._x2 + - ' ' + - this._y2 + - ' ' + - this._x + - ' ' + - this._y); - }; - window.SVGPathSegCurvetoCubicSmoothRel.prototype.clone = function () { - return new window.SVGPathSegCurvetoCubicSmoothRel(undefined, this._x, this._y, this._x2, this._y2); - }; - Object.defineProperty(window.SVGPathSegCurvetoCubicSmoothRel.prototype, 'x', { - get: function () { - return this._x; - }, - set: function (x) { - this._x = x; - this._segmentChanged(); - }, - enumerable: true - }); - Object.defineProperty(window.SVGPathSegCurvetoCubicSmoothRel.prototype, 'y', { - get: function () { - return this._y; - }, - set: function (y) { - this._y = y; - this._segmentChanged(); - }, - enumerable: true - }); - Object.defineProperty(window.SVGPathSegCurvetoCubicSmoothRel.prototype, 'x2', { - get: function () { - return this._x2; - }, - set: function (x2) { - this._x2 = x2; - this._segmentChanged(); - }, - enumerable: true - }); - Object.defineProperty(window.SVGPathSegCurvetoCubicSmoothRel.prototype, 'y2', { - get: function () { - return this._y2; - }, - set: function (y2) { - this._y2 = y2; - this._segmentChanged(); - }, - enumerable: true - }); - window.SVGPathSegCurvetoQuadraticSmoothAbs = function (owningPathSegList, x, y) { - window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS, 'T', owningPathSegList); - this._x = x; - this._y = y; - }; - window.SVGPathSegCurvetoQuadraticSmoothAbs.prototype = Object.create(window.SVGPathSeg.prototype); - window.SVGPathSegCurvetoQuadraticSmoothAbs.prototype.toString = function () { - return '[object SVGPathSegCurvetoQuadraticSmoothAbs]'; - }; - window.SVGPathSegCurvetoQuadraticSmoothAbs.prototype._asPathString = function () { - return this.pathSegTypeAsLetter + ' ' + this._x + ' ' + this._y; - }; - window.SVGPathSegCurvetoQuadraticSmoothAbs.prototype.clone = function () { - return new window.SVGPathSegCurvetoQuadraticSmoothAbs(undefined, this._x, this._y); - }; - Object.defineProperty(window.SVGPathSegCurvetoQuadraticSmoothAbs.prototype, 'x', { - get: function () { - return this._x; - }, - set: function (x) { - this._x = x; - this._segmentChanged(); - }, - enumerable: true - }); - Object.defineProperty(window.SVGPathSegCurvetoQuadraticSmoothAbs.prototype, 'y', { - get: function () { - return this._y; - }, - set: function (y) { - this._y = y; - this._segmentChanged(); - }, - enumerable: true - }); - window.SVGPathSegCurvetoQuadraticSmoothRel = function (owningPathSegList, x, y) { - window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL, 't', owningPathSegList); - this._x = x; - this._y = y; - }; - window.SVGPathSegCurvetoQuadraticSmoothRel.prototype = Object.create(window.SVGPathSeg.prototype); - window.SVGPathSegCurvetoQuadraticSmoothRel.prototype.toString = function () { - return '[object SVGPathSegCurvetoQuadraticSmoothRel]'; - }; - window.SVGPathSegCurvetoQuadraticSmoothRel.prototype._asPathString = function () { - return this.pathSegTypeAsLetter + ' ' + this._x + ' ' + this._y; - }; - window.SVGPathSegCurvetoQuadraticSmoothRel.prototype.clone = function () { - return new window.SVGPathSegCurvetoQuadraticSmoothRel(undefined, this._x, this._y); - }; - Object.defineProperty(window.SVGPathSegCurvetoQuadraticSmoothRel.prototype, 'x', { - get: function () { - return this._x; - }, - set: function (x) { - this._x = x; - this._segmentChanged(); - }, - enumerable: true - }); - Object.defineProperty(window.SVGPathSegCurvetoQuadraticSmoothRel.prototype, 'y', { - get: function () { - return this._y; - }, - set: function (y) { - this._y = y; - this._segmentChanged(); - }, - enumerable: true - }); - // Add createSVGPathSeg* functions to window.SVGPathElement. - // Spec: http://www.w3.org/TR/SVG11/single-page.html#paths-Interfacewindow.SVGPathElement. - window.SVGPathElement.prototype.createSVGPathSegClosePath = function () { - return new window.SVGPathSegClosePath(undefined); - }; - window.SVGPathElement.prototype.createSVGPathSegMovetoAbs = function (x, y) { - return new window.SVGPathSegMovetoAbs(undefined, x, y); - }; - window.SVGPathElement.prototype.createSVGPathSegMovetoRel = function (x, y) { - return new window.SVGPathSegMovetoRel(undefined, x, y); - }; - window.SVGPathElement.prototype.createSVGPathSegLinetoAbs = function (x, y) { - return new window.SVGPathSegLinetoAbs(undefined, x, y); - }; - window.SVGPathElement.prototype.createSVGPathSegLinetoRel = function (x, y) { - return new window.SVGPathSegLinetoRel(undefined, x, y); - }; - window.SVGPathElement.prototype.createSVGPathSegCurvetoCubicAbs = function (x, y, x1, y1, x2, y2) { - return new window.SVGPathSegCurvetoCubicAbs(undefined, x, y, x1, y1, x2, y2); - }; - window.SVGPathElement.prototype.createSVGPathSegCurvetoCubicRel = function (x, y, x1, y1, x2, y2) { - return new window.SVGPathSegCurvetoCubicRel(undefined, x, y, x1, y1, x2, y2); - }; - window.SVGPathElement.prototype.createSVGPathSegCurvetoQuadraticAbs = function (x, y, x1, y1) { - return new window.SVGPathSegCurvetoQuadraticAbs(undefined, x, y, x1, y1); - }; - window.SVGPathElement.prototype.createSVGPathSegCurvetoQuadraticRel = function (x, y, x1, y1) { - return new window.SVGPathSegCurvetoQuadraticRel(undefined, x, y, x1, y1); - }; - window.SVGPathElement.prototype.createSVGPathSegArcAbs = function (x, y, r1, r2, angle, largeArcFlag, sweepFlag) { - return new window.SVGPathSegArcAbs(undefined, x, y, r1, r2, angle, largeArcFlag, sweepFlag); - }; - window.SVGPathElement.prototype.createSVGPathSegArcRel = function (x, y, r1, r2, angle, largeArcFlag, sweepFlag) { - return new window.SVGPathSegArcRel(undefined, x, y, r1, r2, angle, largeArcFlag, sweepFlag); - }; - window.SVGPathElement.prototype.createSVGPathSegLinetoHorizontalAbs = function (x) { - return new window.SVGPathSegLinetoHorizontalAbs(undefined, x); - }; - window.SVGPathElement.prototype.createSVGPathSegLinetoHorizontalRel = function (x) { - return new window.SVGPathSegLinetoHorizontalRel(undefined, x); - }; - window.SVGPathElement.prototype.createSVGPathSegLinetoVerticalAbs = function (y) { - return new window.SVGPathSegLinetoVerticalAbs(undefined, y); - }; - window.SVGPathElement.prototype.createSVGPathSegLinetoVerticalRel = function (y) { - return new window.SVGPathSegLinetoVerticalRel(undefined, y); - }; - window.SVGPathElement.prototype.createSVGPathSegCurvetoCubicSmoothAbs = function (x, y, x2, y2) { - return new window.SVGPathSegCurvetoCubicSmoothAbs(undefined, x, y, x2, y2); - }; - window.SVGPathElement.prototype.createSVGPathSegCurvetoCubicSmoothRel = function (x, y, x2, y2) { - return new window.SVGPathSegCurvetoCubicSmoothRel(undefined, x, y, x2, y2); - }; - window.SVGPathElement.prototype.createSVGPathSegCurvetoQuadraticSmoothAbs = function (x, y) { - return new window.SVGPathSegCurvetoQuadraticSmoothAbs(undefined, x, y); - }; - window.SVGPathElement.prototype.createSVGPathSegCurvetoQuadraticSmoothRel = function (x, y) { - return new window.SVGPathSegCurvetoQuadraticSmoothRel(undefined, x, y); - }; - if (!('getPathSegAtLength' in window.SVGPathElement.prototype)) { - // Add getPathSegAtLength to SVGPathElement. - // Spec: https://www.w3.org/TR/SVG11/single-page.html#paths-__svg__SVGPathElement__getPathSegAtLength - // This polyfill requires SVGPathElement.getTotalLength to implement the distance-along-a-path algorithm. - window.SVGPathElement.prototype.getPathSegAtLength = function (distance) { - if (distance === undefined || !isFinite(distance)) - throw 'Invalid arguments.'; - var measurementElement = document.createElementNS('http://www.w3.org/2000/svg', 'path'); - measurementElement.setAttribute('d', this.getAttribute('d')); - var lastPathSegment = measurementElement.pathSegList.numberOfItems - 1; - // If the path is empty, return 0. - if (lastPathSegment <= 0) - return 0; - do { - measurementElement.pathSegList.removeItem(lastPathSegment); - if (distance > measurementElement.getTotalLength()) - break; - lastPathSegment--; - } while (lastPathSegment > 0); - return lastPathSegment; - }; - } - } - if (!('SVGPathSegList' in window)) { - // Spec: http://www.w3.org/TR/SVG11/single-page.html#paths-InterfaceSVGPathSegList - window.SVGPathSegList = function (pathElement) { - this._pathElement = pathElement; - this._list = this._parsePath(this._pathElement.getAttribute('d')); - // Use a MutationObserver to catch changes to the path's "d" attribute. - this._mutationObserverConfig = { - attributes: true, - attributeFilter: ['d'] - }; - this._pathElementMutationObserver = new MutationObserver(this._updateListFromPathMutations.bind(this)); - this._pathElementMutationObserver.observe(this._pathElement, this._mutationObserverConfig); - }; - window.SVGPathSegList.prototype.classname = 'SVGPathSegList'; - Object.defineProperty(window.SVGPathSegList.prototype, 'numberOfItems', { - get: function () { - this._checkPathSynchronizedToList(); - return this._list.length; - }, - enumerable: true - }); - // Add the pathSegList accessors to window.SVGPathElement. - // Spec: http://www.w3.org/TR/SVG11/single-page.html#paths-InterfaceSVGAnimatedPathData - Object.defineProperty(window.SVGPathElement.prototype, 'pathSegList', { - get: function () { - if (!this._pathSegList) - this._pathSegList = new window.SVGPathSegList(this); - return this._pathSegList; - }, - enumerable: true - }); - // FIXME: The following are not implemented and simply return window.SVGPathElement.pathSegList. - Object.defineProperty(window.SVGPathElement.prototype, 'normalizedPathSegList', { - get: function () { - return this.pathSegList; - }, - enumerable: true - }); - Object.defineProperty(window.SVGPathElement.prototype, 'animatedPathSegList', { - get: function () { - return this.pathSegList; - }, - enumerable: true - }); - Object.defineProperty(window.SVGPathElement.prototype, 'animatedNormalizedPathSegList', { - get: function () { - return this.pathSegList; - }, - enumerable: true - }); - // Process any pending mutations to the path element and update the list as needed. - // This should be the first call of all public functions and is needed because - // MutationObservers are not synchronous so we can have pending asynchronous mutations. - window.SVGPathSegList.prototype._checkPathSynchronizedToList = function () { - this._updateListFromPathMutations(this._pathElementMutationObserver.takeRecords()); - }; - window.SVGPathSegList.prototype._updateListFromPathMutations = function (mutationRecords) { - if (!this._pathElement) - return; - var hasPathMutations = false; - mutationRecords.forEach(function (record) { - if (record.attributeName == 'd') - hasPathMutations = true; - }); - if (hasPathMutations) - this._list = this._parsePath(this._pathElement.getAttribute('d')); - }; - // Serialize the list and update the path's 'd' attribute. - window.SVGPathSegList.prototype._writeListToPath = function () { - this._pathElementMutationObserver.disconnect(); - this._pathElement.setAttribute('d', window.SVGPathSegList._pathSegArrayAsString(this._list)); - this._pathElementMutationObserver.observe(this._pathElement, this._mutationObserverConfig); - }; - // When a path segment changes the list needs to be synchronized back to the path element. - window.SVGPathSegList.prototype.segmentChanged = function (pathSeg) { - this._writeListToPath(); - }; - window.SVGPathSegList.prototype.clear = function () { - this._checkPathSynchronizedToList(); - this._list.forEach(function (pathSeg) { - pathSeg._owningPathSegList = null; - }); - this._list = []; - this._writeListToPath(); - }; - window.SVGPathSegList.prototype.initialize = function (newItem) { - this._checkPathSynchronizedToList(); - this._list = [newItem]; - newItem._owningPathSegList = this; - this._writeListToPath(); - return newItem; - }; - window.SVGPathSegList.prototype._checkValidIndex = function (index) { - if (isNaN(index) || index < 0 || index >= this.numberOfItems) - throw 'INDEX_SIZE_ERR'; - }; - window.SVGPathSegList.prototype.getItem = function (index) { - this._checkPathSynchronizedToList(); - this._checkValidIndex(index); - return this._list[index]; - }; - window.SVGPathSegList.prototype.insertItemBefore = function (newItem, index) { - this._checkPathSynchronizedToList(); - // Spec: If the index is greater than or equal to numberOfItems, then the new item is appended to the end of the list. - if (index > this.numberOfItems) - index = this.numberOfItems; - if (newItem._owningPathSegList) { - // SVG2 spec says to make a copy. - newItem = newItem.clone(); - } - this._list.splice(index, 0, newItem); - newItem._owningPathSegList = this; - this._writeListToPath(); - return newItem; - }; - window.SVGPathSegList.prototype.replaceItem = function (newItem, index) { - this._checkPathSynchronizedToList(); - if (newItem._owningPathSegList) { - // SVG2 spec says to make a copy. - newItem = newItem.clone(); - } - this._checkValidIndex(index); - this._list[index] = newItem; - newItem._owningPathSegList = this; - this._writeListToPath(); - return newItem; - }; - window.SVGPathSegList.prototype.removeItem = function (index) { - this._checkPathSynchronizedToList(); - this._checkValidIndex(index); - var item = this._list[index]; - this._list.splice(index, 1); - this._writeListToPath(); - return item; - }; - window.SVGPathSegList.prototype.appendItem = function (newItem) { - this._checkPathSynchronizedToList(); - if (newItem._owningPathSegList) { - // SVG2 spec says to make a copy. - newItem = newItem.clone(); - } - this._list.push(newItem); - newItem._owningPathSegList = this; - // TODO: Optimize this to just append to the existing attribute. - this._writeListToPath(); - return newItem; - }; - window.SVGPathSegList._pathSegArrayAsString = function (pathSegArray) { - var string = ''; - var first = true; - pathSegArray.forEach(function (pathSeg) { - if (first) { - first = false; - string += pathSeg._asPathString(); - } - else { - string += ' ' + pathSeg._asPathString(); - } - }); - return string; - }; - // This closely follows SVGPathParser::parsePath from Source/core/svg/SVGPathParser.cpp. - window.SVGPathSegList.prototype._parsePath = function (string) { - if (!string || string.length == 0) - return []; - var owningPathSegList = this; - var Builder = function () { - this.pathSegList = []; - }; - Builder.prototype.appendSegment = function (pathSeg) { - this.pathSegList.push(pathSeg); - }; - var Source = function (string) { - this._string = string; - this._currentIndex = 0; - this._endIndex = this._string.length; - this._previousCommand = window.SVGPathSeg.PATHSEG_UNKNOWN; - this._skipOptionalSpaces(); - }; - Source.prototype._isCurrentSpace = function () { - var character = this._string[this._currentIndex]; - return (character <= ' ' && - (character == ' ' || - character == '\n' || - character == '\t' || - character == '\r' || - character == '\f')); - }; - Source.prototype._skipOptionalSpaces = function () { - while (this._currentIndex < this._endIndex && this._isCurrentSpace()) - this._currentIndex++; - return this._currentIndex < this._endIndex; - }; - Source.prototype._skipOptionalSpacesOrDelimiter = function () { - if (this._currentIndex < this._endIndex && - !this._isCurrentSpace() && - this._string.charAt(this._currentIndex) != ',') - return false; - if (this._skipOptionalSpaces()) { - if (this._currentIndex < this._endIndex && - this._string.charAt(this._currentIndex) == ',') { - this._currentIndex++; - this._skipOptionalSpaces(); - } - } - return this._currentIndex < this._endIndex; - }; - Source.prototype.hasMoreData = function () { - return this._currentIndex < this._endIndex; - }; - Source.prototype.peekSegmentType = function () { - var lookahead = this._string[this._currentIndex]; - return this._pathSegTypeFromChar(lookahead); - }; - Source.prototype._pathSegTypeFromChar = function (lookahead) { - switch (lookahead) { - case 'Z': - case 'z': - return window.SVGPathSeg.PATHSEG_CLOSEPATH; - case 'M': - return window.SVGPathSeg.PATHSEG_MOVETO_ABS; - case 'm': - return window.SVGPathSeg.PATHSEG_MOVETO_REL; - case 'L': - return window.SVGPathSeg.PATHSEG_LINETO_ABS; - case 'l': - return window.SVGPathSeg.PATHSEG_LINETO_REL; - case 'C': - return window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_ABS; - case 'c': - return window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_REL; - case 'Q': - return window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_ABS; - case 'q': - return window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_REL; - case 'A': - return window.SVGPathSeg.PATHSEG_ARC_ABS; - case 'a': - return window.SVGPathSeg.PATHSEG_ARC_REL; - case 'H': - return window.SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_ABS; - case 'h': - return window.SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_REL; - case 'V': - return window.SVGPathSeg.PATHSEG_LINETO_VERTICAL_ABS; - case 'v': - return window.SVGPathSeg.PATHSEG_LINETO_VERTICAL_REL; - case 'S': - return window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_ABS; - case 's': - return window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_REL; - case 'T': - return window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS; - case 't': - return window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL; - default: - return window.SVGPathSeg.PATHSEG_UNKNOWN; - } - }; - Source.prototype._nextCommandHelper = function (lookahead, previousCommand) { - // Check for remaining coordinates in the current command. - if ((lookahead == '+' || - lookahead == '-' || - lookahead == '.' || - (lookahead >= '0' && lookahead <= '9')) && - previousCommand != window.SVGPathSeg.PATHSEG_CLOSEPATH) { - if (previousCommand == window.SVGPathSeg.PATHSEG_MOVETO_ABS) - return window.SVGPathSeg.PATHSEG_LINETO_ABS; - if (previousCommand == window.SVGPathSeg.PATHSEG_MOVETO_REL) - return window.SVGPathSeg.PATHSEG_LINETO_REL; - return previousCommand; - } - return window.SVGPathSeg.PATHSEG_UNKNOWN; - }; - Source.prototype.initialCommandIsMoveTo = function () { - // If the path is empty it is still valid, so return true. - if (!this.hasMoreData()) - return true; - var command = this.peekSegmentType(); - // Path must start with moveTo. - return (command == window.SVGPathSeg.PATHSEG_MOVETO_ABS || - command == window.SVGPathSeg.PATHSEG_MOVETO_REL); - }; - // Parse a number from an SVG path. This very closely follows genericParseNumber(...) from Source/core/svg/SVGParserUtilities.cpp. - // Spec: http://www.w3.org/TR/SVG11/single-page.html#paths-PathDataBNF - Source.prototype._parseNumber = function () { - var exponent = 0; - var integer = 0; - var frac = 1; - var decimal = 0; - var sign = 1; - var expsign = 1; - var startIndex = this._currentIndex; - this._skipOptionalSpaces(); - // Read the sign. - if (this._currentIndex < this._endIndex && - this._string.charAt(this._currentIndex) == '+') - this._currentIndex++; - else if (this._currentIndex < this._endIndex && - this._string.charAt(this._currentIndex) == '-') { - this._currentIndex++; - sign = -1; - } - if (this._currentIndex == this._endIndex || - ((this._string.charAt(this._currentIndex) < '0' || - this._string.charAt(this._currentIndex) > '9') && - this._string.charAt(this._currentIndex) != '.')) - // The first character of a number must be one of [0-9+-.]. - return undefined; - // Read the integer part, build right-to-left. - var startIntPartIndex = this._currentIndex; - while (this._currentIndex < this._endIndex && - this._string.charAt(this._currentIndex) >= '0' && - this._string.charAt(this._currentIndex) <= '9') - this._currentIndex++; // Advance to first non-digit. - if (this._currentIndex != startIntPartIndex) { - var scanIntPartIndex = this._currentIndex - 1; - var multiplier = 1; - while (scanIntPartIndex >= startIntPartIndex) { - integer += - multiplier * (this._string.charAt(scanIntPartIndex--) - '0'); - multiplier *= 10; - } - } - // Read the decimals. - if (this._currentIndex < this._endIndex && - this._string.charAt(this._currentIndex) == '.') { - this._currentIndex++; - // There must be a least one digit following the . - if (this._currentIndex >= this._endIndex || - this._string.charAt(this._currentIndex) < '0' || - this._string.charAt(this._currentIndex) > '9') - return undefined; - while (this._currentIndex < this._endIndex && - this._string.charAt(this._currentIndex) >= '0' && - this._string.charAt(this._currentIndex) <= '9') { - frac *= 10; - decimal += (this._string.charAt(this._currentIndex) - '0') / frac; - this._currentIndex += 1; - } - } - // Read the exponent part. - if (this._currentIndex != startIndex && - this._currentIndex + 1 < this._endIndex && - (this._string.charAt(this._currentIndex) == 'e' || - this._string.charAt(this._currentIndex) == 'E') && - this._string.charAt(this._currentIndex + 1) != 'x' && - this._string.charAt(this._currentIndex + 1) != 'm') { - this._currentIndex++; - // Read the sign of the exponent. - if (this._string.charAt(this._currentIndex) == '+') { - this._currentIndex++; - } - else if (this._string.charAt(this._currentIndex) == '-') { - this._currentIndex++; - expsign = -1; - } - // There must be an exponent. - if (this._currentIndex >= this._endIndex || - this._string.charAt(this._currentIndex) < '0' || - this._string.charAt(this._currentIndex) > '9') - return undefined; - while (this._currentIndex < this._endIndex && - this._string.charAt(this._currentIndex) >= '0' && - this._string.charAt(this._currentIndex) <= '9') { - exponent *= 10; - exponent += this._string.charAt(this._currentIndex) - '0'; - this._currentIndex++; - } - } - var number = integer + decimal; - number *= sign; - if (exponent) - number *= Math.pow(10, expsign * exponent); - if (startIndex == this._currentIndex) - return undefined; - this._skipOptionalSpacesOrDelimiter(); - return number; - }; - Source.prototype._parseArcFlag = function () { - if (this._currentIndex >= this._endIndex) - return undefined; - var flag = false; - var flagChar = this._string.charAt(this._currentIndex++); - if (flagChar == '0') - flag = false; - else if (flagChar == '1') - flag = true; - else - return undefined; - this._skipOptionalSpacesOrDelimiter(); - return flag; - }; - Source.prototype.parseSegment = function () { - var lookahead = this._string[this._currentIndex]; - var command = this._pathSegTypeFromChar(lookahead); - if (command == window.SVGPathSeg.PATHSEG_UNKNOWN) { - // Possibly an implicit command. Not allowed if this is the first command. - if (this._previousCommand == window.SVGPathSeg.PATHSEG_UNKNOWN) - return null; - command = this._nextCommandHelper(lookahead, this._previousCommand); - if (command == window.SVGPathSeg.PATHSEG_UNKNOWN) - return null; - } - else { - this._currentIndex++; - } - this._previousCommand = command; - switch (command) { - case window.SVGPathSeg.PATHSEG_MOVETO_REL: - return new window.SVGPathSegMovetoRel(owningPathSegList, this._parseNumber(), this._parseNumber()); - case window.SVGPathSeg.PATHSEG_MOVETO_ABS: - return new window.SVGPathSegMovetoAbs(owningPathSegList, this._parseNumber(), this._parseNumber()); - case window.SVGPathSeg.PATHSEG_LINETO_REL: - return new window.SVGPathSegLinetoRel(owningPathSegList, this._parseNumber(), this._parseNumber()); - case window.SVGPathSeg.PATHSEG_LINETO_ABS: - return new window.SVGPathSegLinetoAbs(owningPathSegList, this._parseNumber(), this._parseNumber()); - case window.SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_REL: - return new window.SVGPathSegLinetoHorizontalRel(owningPathSegList, this._parseNumber()); - case window.SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_ABS: - return new window.SVGPathSegLinetoHorizontalAbs(owningPathSegList, this._parseNumber()); - case window.SVGPathSeg.PATHSEG_LINETO_VERTICAL_REL: - return new window.SVGPathSegLinetoVerticalRel(owningPathSegList, this._parseNumber()); - case window.SVGPathSeg.PATHSEG_LINETO_VERTICAL_ABS: - return new window.SVGPathSegLinetoVerticalAbs(owningPathSegList, this._parseNumber()); - case window.SVGPathSeg.PATHSEG_CLOSEPATH: - this._skipOptionalSpaces(); - return new window.SVGPathSegClosePath(owningPathSegList); - case window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_REL: - var points = { - x1: this._parseNumber(), - y1: this._parseNumber(), - x2: this._parseNumber(), - y2: this._parseNumber(), - x: this._parseNumber(), - y: this._parseNumber() - }; - return new window.SVGPathSegCurvetoCubicRel(owningPathSegList, points.x, points.y, points.x1, points.y1, points.x2, points.y2); - case window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_ABS: - var points = { - x1: this._parseNumber(), - y1: this._parseNumber(), - x2: this._parseNumber(), - y2: this._parseNumber(), - x: this._parseNumber(), - y: this._parseNumber() - }; - return new window.SVGPathSegCurvetoCubicAbs(owningPathSegList, points.x, points.y, points.x1, points.y1, points.x2, points.y2); - case window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_REL: - var points = { - x2: this._parseNumber(), - y2: this._parseNumber(), - x: this._parseNumber(), - y: this._parseNumber() - }; - return new window.SVGPathSegCurvetoCubicSmoothRel(owningPathSegList, points.x, points.y, points.x2, points.y2); - case window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_ABS: - var points = { - x2: this._parseNumber(), - y2: this._parseNumber(), - x: this._parseNumber(), - y: this._parseNumber() - }; - return new window.SVGPathSegCurvetoCubicSmoothAbs(owningPathSegList, points.x, points.y, points.x2, points.y2); - case window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_REL: - var points = { - x1: this._parseNumber(), - y1: this._parseNumber(), - x: this._parseNumber(), - y: this._parseNumber() - }; - return new window.SVGPathSegCurvetoQuadraticRel(owningPathSegList, points.x, points.y, points.x1, points.y1); - case window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_ABS: - var points = { - x1: this._parseNumber(), - y1: this._parseNumber(), - x: this._parseNumber(), - y: this._parseNumber() - }; - return new window.SVGPathSegCurvetoQuadraticAbs(owningPathSegList, points.x, points.y, points.x1, points.y1); - case window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL: - return new window.SVGPathSegCurvetoQuadraticSmoothRel(owningPathSegList, this._parseNumber(), this._parseNumber()); - case window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS: - return new window.SVGPathSegCurvetoQuadraticSmoothAbs(owningPathSegList, this._parseNumber(), this._parseNumber()); - case window.SVGPathSeg.PATHSEG_ARC_REL: - var points = { - x1: this._parseNumber(), - y1: this._parseNumber(), - arcAngle: this._parseNumber(), - arcLarge: this._parseArcFlag(), - arcSweep: this._parseArcFlag(), - x: this._parseNumber(), - y: this._parseNumber() - }; - return new window.SVGPathSegArcRel(owningPathSegList, points.x, points.y, points.x1, points.y1, points.arcAngle, points.arcLarge, points.arcSweep); - case window.SVGPathSeg.PATHSEG_ARC_ABS: - var points = { - x1: this._parseNumber(), - y1: this._parseNumber(), - arcAngle: this._parseNumber(), - arcLarge: this._parseArcFlag(), - arcSweep: this._parseArcFlag(), - x: this._parseNumber(), - y: this._parseNumber() - }; - return new window.SVGPathSegArcAbs(owningPathSegList, points.x, points.y, points.x1, points.y1, points.arcAngle, points.arcLarge, points.arcSweep); - default: - throw 'Unknown path seg type.'; - } - }; - var builder = new Builder(); - var source = new Source(string); - if (!source.initialCommandIsMoveTo()) - return []; - while (source.hasMoreData()) { - var pathSeg = source.parseSegment(); - if (!pathSeg) - return []; - builder.appendSegment(pathSeg); - } - return builder.pathSegList; - }; - } - })(); - // String.padEnd polyfill for IE11 - // - // https://github.com/uxitten/polyfill/blob/master/string.polyfill.js - // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padEnd - if (!String.prototype.padEnd) { - String.prototype.padEnd = function padEnd(targetLength, padString) { - targetLength = targetLength >> 0; //floor if number or convert non-number to 0; - padString = String(typeof padString !== 'undefined' ? padString : ' '); - if (this.length > targetLength) { - return String(this); - } - else { - targetLength = targetLength - this.length; - if (targetLength > padString.length) { - padString += padString.repeat(targetLength / padString.length); //append to original to ensure we are longer than needed - } - return String(this) + padString.slice(0, targetLength); - } - }; - } - // Object.assign polyfill for IE11 - // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign#Polyfill - if (typeof Object.assign !== 'function') { - // Must be writable: true, enumerable: false, configurable: true - Object.defineProperty(Object, 'assign', { - value: function assign(target, varArgs) { - if (target === null || target === undefined) { - throw new TypeError('Cannot convert undefined or null to object'); - } - var to = Object(target); - for (var index = 1; index < arguments.length; index++) { - var nextSource = arguments[index]; - if (nextSource !== null && nextSource !== undefined) { - for (var nextKey in nextSource) { - // Avoid bugs when hasOwnProperty is shadowed - if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) { - to[nextKey] = nextSource[nextKey]; - } - } - } - } - return to; - }, - writable: true, - configurable: true - }); - } - /* jshint ignore:end */ - - Chart.prototype.axis = function () { }; - Chart.prototype.axis.labels = function (labels) { - var $$ = this.internal; - if (arguments.length) { - Object.keys(labels).forEach(function (axisId) { - $$.axis.setLabelText(axisId, labels[axisId]); - }); - $$.axis.updateLabels(); - } - // TODO: return some values? - }; - Chart.prototype.axis.max = function (max) { - var $$ = this.internal, config = $$.config; - if (arguments.length) { - if (typeof max === 'object') { - if (isValue(max.x)) { - config.axis_x_max = max.x; - } - if (isValue(max.y)) { - config.axis_y_max = max.y; - } - if (isValue(max.y2)) { - config.axis_y2_max = max.y2; - } - } - else { - config.axis_y_max = config.axis_y2_max = max; - } - $$.redraw({ withUpdateOrgXDomain: true, withUpdateXDomain: true }); - } - else { - return { - x: config.axis_x_max, - y: config.axis_y_max, - y2: config.axis_y2_max - }; - } - }; - Chart.prototype.axis.min = function (min) { - var $$ = this.internal, config = $$.config; - if (arguments.length) { - if (typeof min === 'object') { - if (isValue(min.x)) { - config.axis_x_min = min.x; - } - if (isValue(min.y)) { - config.axis_y_min = min.y; - } - if (isValue(min.y2)) { - config.axis_y2_min = min.y2; - } - } - else { - config.axis_y_min = config.axis_y2_min = min; - } - $$.redraw({ withUpdateOrgXDomain: true, withUpdateXDomain: true }); - } - else { - return { - x: config.axis_x_min, - y: config.axis_y_min, - y2: config.axis_y2_min - }; - } - }; - Chart.prototype.axis.range = function (range) { - if (arguments.length) { - if (isDefined(range.max)) { - this.axis.max(range.max); - } - if (isDefined(range.min)) { - this.axis.min(range.min); - } - } - else { - return { - max: this.axis.max(), - min: this.axis.min() - }; - } - }; - Chart.prototype.axis.types = function (types) { - var $$ = this.internal; - if (types === undefined) { - return { - y: $$.config.axis_y_type, - y2: $$.config.axis_y2_type - }; - } - else { - if (isDefined(types.y)) { - $$.config.axis_y_type = types.y; - } - if (isDefined(types.y2)) { - $$.config.axis_y2_type = types.y2; - } - $$.updateScales(); - $$.redraw(); - } - }; - - Chart.prototype.category = function (i, category) { - var $$ = this.internal, config = $$.config; - if (arguments.length > 1) { - config.axis_x_categories[i] = category; - $$.redraw(); - } - return config.axis_x_categories[i]; - }; - Chart.prototype.categories = function (categories) { - var $$ = this.internal, config = $$.config; - if (!arguments.length) { - return config.axis_x_categories; - } - config.axis_x_categories = categories; - $$.redraw(); - return config.axis_x_categories; - }; - - Chart.prototype.resize = function (size) { - var $$ = this.internal, config = $$.config; - config.size_width = size ? size.width : null; - config.size_height = size ? size.height : null; - this.flush(); - }; - Chart.prototype.flush = function () { - var $$ = this.internal; - $$.updateAndRedraw({ - withLegend: true, - withTransition: false, - withTransitionForTransform: false - }); - }; - Chart.prototype.destroy = function () { - var $$ = this.internal; - window.clearInterval($$.intervalForObserveInserted); - if ($$.resizeTimeout !== undefined) { - window.clearTimeout($$.resizeTimeout); - } - window.removeEventListener('resize', $$.resizeIfElementDisplayed); - // Removes the inner resize functions - $$.resizeFunction.remove(); - // Unbinds from the window focus event - $$.unbindWindowFocus(); - $$.selectChart.classed('c3', false).html(''); - // MEMO: this is needed because the reference of some elements will not be released, then memory leak will happen. - Object.keys($$).forEach(function (key) { - $$[key] = null; - }); - return null; - }; - - // TODO: fix - Chart.prototype.color = function (id) { - var $$ = this.internal; - return $$.color(id); // more patterns - }; - - Chart.prototype.data = function (targetIds) { - var targets = this.internal.data.targets; - return typeof targetIds === 'undefined' - ? targets - : targets.filter(function (t) { - return [].concat(targetIds).indexOf(t.id) >= 0; - }); - }; - Chart.prototype.data.shown = function (targetIds) { - return this.internal.filterTargetsToShow(this.data(targetIds)); - }; - /** - * Get values of the data loaded in the chart. - * - * @param {String|Array} targetId This API returns the value of specified target. - * @param flat - * @return {Array} Data values - */ - Chart.prototype.data.values = function (targetId, flat) { - if (flat === void 0) { flat = true; } - var values = null; - if (targetId) { - var targets = this.data(targetId); - if (targets && isArray(targets)) { - values = targets.reduce(function (ret, v) { - var dataValue = v.values.map(function (d) { return d.value; }); - if (flat) { - ret = ret.concat(dataValue); - } - else { - ret.push(dataValue); - } - return ret; - }, []); - } - } - return values; - }; - Chart.prototype.data.names = function (names) { - this.internal.clearLegendItemTextBoxCache(); - return this.internal.updateDataAttributes('names', names); - }; - Chart.prototype.data.colors = function (colors) { - return this.internal.updateDataAttributes('colors', colors); - }; - Chart.prototype.data.axes = function (axes) { - return this.internal.updateDataAttributes('axes', axes); - }; - Chart.prototype.data.stackNormalized = function (normalized) { - if (normalized === undefined) { - return this.internal.isStackNormalized(); - } - this.internal.config.data_stack_normalize = !!normalized; - this.internal.redraw(); - }; - - Chart.prototype.donut = function () { }; - Chart.prototype.donut.padAngle = function (padAngle) { - if (padAngle === undefined) { - return this.internal.config.donut_padAngle; - } - this.internal.config.donut_padAngle = padAngle; - this.flush(); - }; - - Chart.prototype.flow = function (args) { - var $$ = this.internal, targets, data, notfoundIds = [], orgDataCount = $$.getMaxDataCount(), dataCount, domain, baseTarget, baseValue, length = 0, tail = 0, diff, to; - if (args.json) { - data = $$.convertJsonToData(args.json, args.keys); - } - else if (args.rows) { - data = $$.convertRowsToData(args.rows); - } - else if (args.columns) { - data = $$.convertColumnsToData(args.columns); - } - else { - return; - } - targets = $$.convertDataToTargets(data, true); - // Update/Add data - $$.data.targets.forEach(function (t) { - var found = false, i, j; - for (i = 0; i < targets.length; i++) { - if (t.id === targets[i].id) { - found = true; - if (t.values[t.values.length - 1]) { - tail = t.values[t.values.length - 1].index + 1; - } - length = targets[i].values.length; - for (j = 0; j < length; j++) { - targets[i].values[j].index = tail + j; - if (!$$.isTimeSeries()) { - targets[i].values[j].x = tail + j; - } - } - t.values = t.values.concat(targets[i].values); - targets.splice(i, 1); - break; - } - } - if (!found) { - notfoundIds.push(t.id); - } - }); - // Append null for not found targets - $$.data.targets.forEach(function (t) { - var i, j; - for (i = 0; i < notfoundIds.length; i++) { - if (t.id === notfoundIds[i]) { - tail = t.values[t.values.length - 1].index + 1; - for (j = 0; j < length; j++) { - t.values.push({ - id: t.id, - index: tail + j, - x: $$.isTimeSeries() ? $$.getOtherTargetX(tail + j) : tail + j, - value: null - }); - } - } - } - }); - // Generate null values for new target - if ($$.data.targets.length) { - targets.forEach(function (t) { - var i, missing = []; - for (i = $$.data.targets[0].values[0].index; i < tail; i++) { - missing.push({ - id: t.id, - index: i, - x: $$.isTimeSeries() ? $$.getOtherTargetX(i) : i, - value: null - }); - } - t.values.forEach(function (v) { - v.index += tail; - if (!$$.isTimeSeries()) { - v.x += tail; - } - }); - t.values = missing.concat(t.values); - }); - } - $$.data.targets = $$.data.targets.concat(targets); // add remained - // check data count because behavior needs to change when it's only one - dataCount = $$.getMaxDataCount(); - baseTarget = $$.data.targets[0]; - baseValue = baseTarget.values[0]; - // Update length to flow if needed - if (isDefined(args.to)) { - length = 0; - to = $$.isTimeSeries() ? $$.parseDate(args.to) : args.to; - baseTarget.values.forEach(function (v) { - if (v.x < to) { - length++; - } - }); - } - else if (isDefined(args.length)) { - length = args.length; - } - // If only one data, update the domain to flow from left edge of the chart - if (!orgDataCount) { - if ($$.isTimeSeries()) { - if (baseTarget.values.length > 1) { - diff = baseTarget.values[baseTarget.values.length - 1].x - baseValue.x; - } - else { - diff = baseValue.x - $$.getXDomain($$.data.targets)[0]; - } - } - else { - diff = 1; - } - domain = [baseValue.x - diff, baseValue.x]; - $$.updateXDomain(null, true, true, false, domain); - } - else if (orgDataCount === 1) { - if ($$.isTimeSeries()) { - diff = - (baseTarget.values[baseTarget.values.length - 1].x - baseValue.x) / 2; - domain = [new Date(+baseValue.x - diff), new Date(+baseValue.x + diff)]; - $$.updateXDomain(null, true, true, false, domain); - } - } - // Set targets - $$.updateTargets($$.data.targets); - // Redraw with new targets - $$.redraw({ - flow: { - index: baseValue.index, - length: length, - duration: isValue(args.duration) - ? args.duration - : $$.config.transition_duration, - done: args.done, - orgDataCount: orgDataCount - }, - withLegend: true, - withTransition: orgDataCount > 1, - withTrimXDomain: false, - withUpdateXAxis: true - }); - }; - ChartInternal.prototype.generateFlow = function (args) { - var $$ = this, config = $$.config, d3 = $$.d3; - return function () { - var targets = args.targets, flow = args.flow, drawBar = args.drawBar, drawLine = args.drawLine, drawArea = args.drawArea, cx = args.cx, cy = args.cy, xv = args.xv, xForText = args.xForText, yForText = args.yForText, duration = args.duration; - var translateX, scaleX = 1, transform, flowIndex = flow.index, flowLength = flow.length, flowStart = $$.getValueOnIndex($$.data.targets[0].values, flowIndex), flowEnd = $$.getValueOnIndex($$.data.targets[0].values, flowIndex + flowLength), orgDomain = $$.x.domain(), domain, durationForFlow = flow.duration || duration, done = flow.done || function () { }, wait = $$.generateWait(); - var xgrid, xgridLines, mainRegion, mainText, mainBar, mainLine, mainArea, mainCircle; - // set flag - $$.flowing = true; - // remove head data after rendered - $$.data.targets.forEach(function (d) { - d.values.splice(0, flowLength); - }); - // update x domain to generate axis elements for flow - domain = $$.updateXDomain(targets, true, true); - // update elements related to x scale - if ($$.updateXGrid) { - $$.updateXGrid(true); - } - xgrid = $$.xgrid || d3.selectAll([]); // xgrid needs to be obtained after updateXGrid - xgridLines = $$.xgridLines || d3.selectAll([]); - mainRegion = $$.mainRegion || d3.selectAll([]); - mainText = $$.mainText || d3.selectAll([]); - mainBar = $$.mainBar || d3.selectAll([]); - mainLine = $$.mainLine || d3.selectAll([]); - mainArea = $$.mainArea || d3.selectAll([]); - mainCircle = $$.mainCircle || d3.selectAll([]); - // generate transform to flow - if (!flow.orgDataCount) { - // if empty - if ($$.data.targets[0].values.length !== 1) { - translateX = $$.x(orgDomain[0]) - $$.x(domain[0]); - } - else { - if ($$.isTimeSeries()) { - flowStart = $$.getValueOnIndex($$.data.targets[0].values, 0); - flowEnd = $$.getValueOnIndex($$.data.targets[0].values, $$.data.targets[0].values.length - 1); - translateX = $$.x(flowStart.x) - $$.x(flowEnd.x); - } - else { - translateX = diffDomain(domain) / 2; - } - } - } - else if (flow.orgDataCount === 1 || - (flowStart && flowStart.x) === (flowEnd && flowEnd.x)) { - translateX = $$.x(orgDomain[0]) - $$.x(domain[0]); - } - else { - if ($$.isTimeSeries()) { - translateX = $$.x(orgDomain[0]) - $$.x(domain[0]); - } - else { - translateX = $$.x(flowStart.x) - $$.x(flowEnd.x); - } - } - scaleX = diffDomain(orgDomain) / diffDomain(domain); - transform = 'translate(' + translateX + ',0) scale(' + scaleX + ',1)'; - $$.hideXGridFocus(); - var flowTransition = d3 - .transition() - .ease(d3.easeLinear) - .duration(durationForFlow); - wait.add($$.xAxis($$.axes.x, flowTransition)); - wait.add(mainBar.transition(flowTransition).attr('transform', transform)); - wait.add(mainLine.transition(flowTransition).attr('transform', transform)); - wait.add(mainArea.transition(flowTransition).attr('transform', transform)); - wait.add(mainCircle.transition(flowTransition).attr('transform', transform)); - wait.add(mainText.transition(flowTransition).attr('transform', transform)); - wait.add(mainRegion - .filter($$.isRegionOnX) - .transition(flowTransition) - .attr('transform', transform)); - wait.add(xgrid.transition(flowTransition).attr('transform', transform)); - wait.add(xgridLines.transition(flowTransition).attr('transform', transform)); - wait(function () { - var i, shapes = [], texts = []; - // remove flowed elements - if (flowLength) { - for (i = 0; i < flowLength; i++) { - shapes.push('.' + CLASS.shape + '-' + (flowIndex + i)); - texts.push('.' + CLASS.text + '-' + (flowIndex + i)); - } - $$.svg - .selectAll('.' + CLASS.shapes) - .selectAll(shapes) - .remove(); - $$.svg - .selectAll('.' + CLASS.texts) - .selectAll(texts) - .remove(); - $$.svg.select('.' + CLASS.xgrid).remove(); - } - // draw again for removing flowed elements and reverting attr - xgrid - .attr('transform', null) - .attr('x1', $$.xgridAttr.x1) - .attr('x2', $$.xgridAttr.x2) - .attr('y1', $$.xgridAttr.y1) - .attr('y2', $$.xgridAttr.y2) - .style('opacity', $$.xgridAttr.opacity); - xgridLines.attr('transform', null); - xgridLines - .select('line') - .attr('x1', config.axis_rotated ? 0 : xv) - .attr('x2', config.axis_rotated ? $$.width : xv); - xgridLines - .select('text') - .attr('x', config.axis_rotated ? $$.width : 0) - .attr('y', xv); - mainBar.attr('transform', null).attr('d', drawBar); - mainLine.attr('transform', null).attr('d', drawLine); - mainArea.attr('transform', null).attr('d', drawArea); - mainCircle - .attr('transform', null) - .attr('cx', cx) - .attr('cy', cy); - mainText - .attr('transform', null) - .attr('x', xForText) - .attr('y', yForText) - .style('fill-opacity', $$.opacityForText.bind($$)); - mainRegion.attr('transform', null); - mainRegion - .filter($$.isRegionOnX) - .attr('x', $$.regionX.bind($$)) - .attr('width', $$.regionWidth.bind($$)); - // callback for end of flow - done(); - $$.flowing = false; - }); - }; - }; - - Chart.prototype.focus = function (targetIds) { - var $$ = this.internal, candidates; - targetIds = $$.mapToTargetIds(targetIds); - (candidates = $$.svg.selectAll($$.selectorTargets(targetIds.filter($$.isTargetToShow, $$)))), - this.revert(); - this.defocus(); - candidates.classed(CLASS.focused, true).classed(CLASS.defocused, false); - if ($$.hasArcType()) { - $$.expandArc(targetIds); - } - $$.toggleFocusLegend(targetIds, true); - $$.focusedTargetIds = targetIds; - $$.defocusedTargetIds = $$.defocusedTargetIds.filter(function (id) { - return targetIds.indexOf(id) < 0; - }); - }; - Chart.prototype.defocus = function (targetIds) { - var $$ = this.internal, candidates; - targetIds = $$.mapToTargetIds(targetIds); - (candidates = $$.svg.selectAll($$.selectorTargets(targetIds.filter($$.isTargetToShow, $$)))), - candidates.classed(CLASS.focused, false).classed(CLASS.defocused, true); - if ($$.hasArcType()) { - $$.unexpandArc(targetIds); - } - $$.toggleFocusLegend(targetIds, false); - $$.focusedTargetIds = $$.focusedTargetIds.filter(function (id) { - return targetIds.indexOf(id) < 0; - }); - $$.defocusedTargetIds = targetIds; - }; - Chart.prototype.revert = function (targetIds) { - var $$ = this.internal, candidates; - targetIds = $$.mapToTargetIds(targetIds); - candidates = $$.svg.selectAll($$.selectorTargets(targetIds)); // should be for all targets - candidates.classed(CLASS.focused, false).classed(CLASS.defocused, false); - if ($$.hasArcType()) { - $$.unexpandArc(targetIds); - } - if ($$.config.legend_show) { - $$.showLegend(targetIds.filter($$.isLegendToShow.bind($$))); - $$.legend - .selectAll($$.selectorLegends(targetIds)) - .filter(function () { - return $$.d3.select(this).classed(CLASS.legendItemFocused); - }) - .classed(CLASS.legendItemFocused, false); - } - $$.focusedTargetIds = []; - $$.defocusedTargetIds = []; - }; - - Chart.prototype.xgrids = function (grids) { - var $$ = this.internal, config = $$.config; - if (!grids) { - return config.grid_x_lines; - } - config.grid_x_lines = grids; - $$.redrawWithoutRescale(); - return config.grid_x_lines; - }; - Chart.prototype.xgrids.add = function (grids) { - var $$ = this.internal; - return this.xgrids($$.config.grid_x_lines.concat(grids ? grids : [])); - }; - Chart.prototype.xgrids.remove = function (params) { - // TODO: multiple - var $$ = this.internal; - $$.removeGridLines(params, true); - }; - Chart.prototype.ygrids = function (grids) { - var $$ = this.internal, config = $$.config; - if (!grids) { - return config.grid_y_lines; - } - config.grid_y_lines = grids; - $$.redrawWithoutRescale(); - return config.grid_y_lines; - }; - Chart.prototype.ygrids.add = function (grids) { - var $$ = this.internal; - return this.ygrids($$.config.grid_y_lines.concat(grids ? grids : [])); - }; - Chart.prototype.ygrids.remove = function (params) { - // TODO: multiple - var $$ = this.internal; - $$.removeGridLines(params, false); - }; - - Chart.prototype.groups = function (groups) { - var $$ = this.internal, config = $$.config; - if (isUndefined(groups)) { - return config.data_groups; - } - config.data_groups = groups; - $$.redraw(); - return config.data_groups; - }; - - Chart.prototype.legend = function () { }; - Chart.prototype.legend.show = function (targetIds) { - var $$ = this.internal; - $$.showLegend($$.mapToTargetIds(targetIds)); - $$.updateAndRedraw({ withLegend: true }); - }; - Chart.prototype.legend.hide = function (targetIds) { - var $$ = this.internal; - $$.hideLegend($$.mapToTargetIds(targetIds)); - $$.updateAndRedraw({ withLegend: false }); - }; - - Chart.prototype.load = function (args) { - var $$ = this.internal, config = $$.config; - // update xs if specified - if (args.xs) { - $$.addXs(args.xs); - } - // update names if exists - if ('names' in args) { - Chart.prototype.data.names.bind(this)(args.names); - } - // update classes if exists - if ('classes' in args) { - Object.keys(args.classes).forEach(function (id) { - config.data_classes[id] = args.classes[id]; - }); - } - // update categories if exists - if ('categories' in args && $$.isCategorized()) { - config.axis_x_categories = args.categories; - } - // update axes if exists - if ('axes' in args) { - Object.keys(args.axes).forEach(function (id) { - config.data_axes[id] = args.axes[id]; - }); - } - // update colors if exists - if ('colors' in args) { - Object.keys(args.colors).forEach(function (id) { - config.data_colors[id] = args.colors[id]; - }); - } - // use cache if exists - if ('cacheIds' in args && $$.hasCaches(args.cacheIds)) { - $$.load($$.getCaches(args.cacheIds), args.done); - return; - } - // unload if needed - if (args.unload) { - // TODO: do not unload if target will load (included in url/rows/columns) - $$.unload($$.mapToTargetIds(args.unload === true ? null : args.unload), function () { - $$.loadFromArgs(args); - }); - } - else { - $$.loadFromArgs(args); - } - }; - Chart.prototype.unload = function (args) { - var $$ = this.internal; - args = args || {}; - if (args instanceof Array) { - args = { ids: args }; - } - else if (typeof args === 'string') { - args = { ids: [args] }; - } - $$.unload($$.mapToTargetIds(args.ids), function () { - $$.redraw({ - withUpdateOrgXDomain: true, - withUpdateXDomain: true, - withLegend: true - }); - if (args.done) { - args.done(); - } - }); - }; - - Chart.prototype.pie = function () { }; - Chart.prototype.pie.padAngle = function (padAngle) { - if (padAngle === undefined) { - return this.internal.config.pie_padAngle; - } - this.internal.config.pie_padAngle = padAngle; - this.flush(); - }; - - Chart.prototype.regions = function (regions) { - var $$ = this.internal, config = $$.config; - if (!regions) { - return config.regions; - } - config.regions = regions; - $$.redrawWithoutRescale(); - return config.regions; - }; - Chart.prototype.regions.add = function (regions) { - var $$ = this.internal, config = $$.config; - if (!regions) { - return config.regions; - } - config.regions = config.regions.concat(regions); - $$.redrawWithoutRescale(); - return config.regions; - }; - Chart.prototype.regions.remove = function (options) { - var $$ = this.internal, config = $$.config, duration, classes, regions; - options = options || {}; - duration = getOption(options, 'duration', config.transition_duration); - classes = getOption(options, 'classes', [CLASS.region]); - regions = $$.main.select('.' + CLASS.regions).selectAll(classes.map(function (c) { - return '.' + c; - })); - (duration ? regions.transition().duration(duration) : regions) - .style('opacity', 0) - .remove(); - config.regions = config.regions.filter(function (region) { - var found = false; - if (!region['class']) { - return true; - } - region['class'].split(' ').forEach(function (c) { - if (classes.indexOf(c) >= 0) { - found = true; - } - }); - return !found; - }); - return config.regions; - }; - - Chart.prototype.selected = function (targetId) { - var $$ = this.internal, d3 = $$.d3; - return $$.main - .selectAll('.' + CLASS.shapes + $$.getTargetSelectorSuffix(targetId)) - .selectAll('.' + CLASS.shape) - .filter(function () { - return d3.select(this).classed(CLASS.SELECTED); - }) - .nodes() - .map(function (d) { - var data = d.__data__; - return data.data ? data.data : data; - }); - }; - Chart.prototype.select = function (ids, indices, resetOther) { - var $$ = this.internal, d3 = $$.d3, config = $$.config; - if (!config.data_selection_enabled) { - return; - } - $$.main - .selectAll('.' + CLASS.shapes) - .selectAll('.' + CLASS.shape) - .each(function (d, i) { - var shape = d3.select(this), id = d.data ? d.data.id : d.id, toggle = $$.getToggle(this, d).bind($$), isTargetId = config.data_selection_grouped || !ids || ids.indexOf(id) >= 0, isTargetIndex = !indices || indices.indexOf(i) >= 0, isSelected = shape.classed(CLASS.SELECTED); - // line/area selection not supported yet - if (shape.classed(CLASS.line) || shape.classed(CLASS.area)) { - return; - } - if (isTargetId && isTargetIndex) { - if (config.data_selection_isselectable(d) && !isSelected) { - toggle(true, shape.classed(CLASS.SELECTED, true), d, i); - } - } - else if (isDefined(resetOther) && resetOther) { - if (isSelected) { - toggle(false, shape.classed(CLASS.SELECTED, false), d, i); - } - } - }); - }; - Chart.prototype.unselect = function (ids, indices) { - var $$ = this.internal, d3 = $$.d3, config = $$.config; - if (!config.data_selection_enabled) { - return; - } - $$.main - .selectAll('.' + CLASS.shapes) - .selectAll('.' + CLASS.shape) - .each(function (d, i) { - var shape = d3.select(this), id = d.data ? d.data.id : d.id, toggle = $$.getToggle(this, d).bind($$), isTargetId = config.data_selection_grouped || !ids || ids.indexOf(id) >= 0, isTargetIndex = !indices || indices.indexOf(i) >= 0, isSelected = shape.classed(CLASS.SELECTED); - // line/area selection not supported yet - if (shape.classed(CLASS.line) || shape.classed(CLASS.area)) { - return; - } - if (isTargetId && isTargetIndex) { - if (config.data_selection_isselectable(d)) { - if (isSelected) { - toggle(false, shape.classed(CLASS.SELECTED, false), d, i); - } - } - } - }); - }; - - Chart.prototype.show = function (targetIds, options) { - var $$ = this.internal, targets; - targetIds = $$.mapToTargetIds(targetIds); - options = options || {}; - $$.removeHiddenTargetIds(targetIds); - targets = $$.svg.selectAll($$.selectorTargets(targetIds)); - targets - .transition() - .style('display', isIE() ? 'block' : 'initial', 'important') - .style('opacity', 1, 'important') - .call($$.endall, function () { - targets.style('opacity', null).style('opacity', 1); - }); - if (options.withLegend) { - $$.showLegend(targetIds); - } - $$.redraw({ - withUpdateOrgXDomain: true, - withUpdateXDomain: true, - withLegend: true - }); - }; - Chart.prototype.hide = function (targetIds, options) { - var $$ = this.internal, targets; - targetIds = $$.mapToTargetIds(targetIds); - options = options || {}; - $$.addHiddenTargetIds(targetIds); - targets = $$.svg.selectAll($$.selectorTargets(targetIds)); - targets - .transition() - .style('opacity', 0, 'important') - .call($$.endall, function () { - targets.style('opacity', null).style('opacity', 0); - targets.style('display', 'none'); - }); - if (options.withLegend) { - $$.hideLegend(targetIds); - } - $$.redraw({ - withUpdateOrgXDomain: true, - withUpdateXDomain: true, - withLegend: true - }); - }; - Chart.prototype.toggle = function (targetIds, options) { - var that = this, $$ = this.internal; - $$.mapToTargetIds(targetIds).forEach(function (targetId) { - $$.isTargetToShow(targetId) - ? that.hide(targetId, options) - : that.show(targetId, options); - }); - }; - - Chart.prototype.subchart = function () { }; - Chart.prototype.subchart.isShown = function () { - var $$ = this.internal; - return $$.config.subchart_show; - }; - Chart.prototype.subchart.show = function () { - var $$ = this.internal; - if ($$.config.subchart_show) { - return; - } - $$.config.subchart_show = true; - // insert DOM - $$.initSubchart(); - // update dimensions with sub chart now visible - $$.updateDimension(); - // insert brush (depends on sizes previously updated) - $$.initSubchartBrush(); - // attach data - $$.updateTargetsForSubchart($$.getTargets()); - // reset fade-in state - $$.mapToIds($$.data.targets).forEach(function (id) { - $$.withoutFadeIn[id] = false; - }); - // redraw chart ! - $$.updateAndRedraw(); - // update visible targets ! - $$.showTargets(); - }; - Chart.prototype.subchart.hide = function () { - var $$ = this.internal; - if (!$$.config.subchart_show) { - return; - } - $$.config.subchart_show = false; - // remove DOM - $$.removeSubchart(); - // re-render chart - $$.redraw(); - }; - - Chart.prototype.tooltip = function () { }; - Chart.prototype.tooltip.show = function (args) { - var $$ = this.internal, targets, data, mouse = {}; - // determine mouse position on the chart - if (args.mouse) { - mouse = args.mouse; - } - else { - // determine focus data - if (args.data) { - data = args.data; - } - else if (typeof args.x !== 'undefined') { - if (args.id) { - targets = $$.data.targets.filter(function (t) { - return t.id === args.id; - }); - } - else { - targets = $$.data.targets; - } - data = $$.filterByX(targets, args.x).slice(0, 1)[0]; - } - mouse = data ? $$.getMousePosition(data) : null; - } - // emulate mouse events to show - $$.dispatchEvent('mousemove', mouse); - $$.config.tooltip_onshow.call($$, data); - }; - Chart.prototype.tooltip.hide = function () { - // TODO: get target data by checking the state of focus - this.internal.dispatchEvent('mouseout', 0); - this.internal.config.tooltip_onhide.call(this); - }; - - Chart.prototype.transform = function (type, targetIds) { - var $$ = this.internal, options = ['pie', 'donut'].indexOf(type) >= 0 ? { withTransform: true } : null; - $$.transformTo(targetIds, type, options); - }; - ChartInternal.prototype.transformTo = function (targetIds, type, optionsForRedraw) { - var $$ = this, withTransitionForAxis = !$$.hasArcType(), options = optionsForRedraw || { - withTransitionForAxis: withTransitionForAxis - }; - options.withTransitionForTransform = false; - $$.transiting = false; - $$.setTargetType(targetIds, type); - $$.updateTargets($$.data.targets); // this is needed when transforming to arc - $$.updateAndRedraw(options); - }; - - Chart.prototype.x = function (x) { - var $$ = this.internal; - if (arguments.length) { - $$.updateTargetX($$.data.targets, x); - $$.redraw({ withUpdateOrgXDomain: true, withUpdateXDomain: true }); - } - return $$.data.xs; - }; - Chart.prototype.xs = function (xs) { - var $$ = this.internal; - if (arguments.length) { - $$.updateTargetXs($$.data.targets, xs); - $$.redraw({ withUpdateOrgXDomain: true, withUpdateXDomain: true }); - } - return $$.data.xs; - }; - - Chart.prototype.zoom = function (domain) { - var $$ = this.internal; - if (domain) { - if ($$.isTimeSeries()) { - domain = domain.map(function (x) { - return $$.parseDate(x); - }); - } - if ($$.config.subchart_show) { - $$.brush.selectionAsValue(domain, true); - } - else { - $$.updateXDomain(null, true, false, false, domain); - $$.redraw({ withY: $$.config.zoom_rescale, withSubchart: false }); - } - $$.config.zoom_onzoom.call(this, $$.x.orgDomain()); - return domain; - } - else { - return $$.x.domain(); - } - }; - Chart.prototype.zoom.enable = function (enabled) { - var $$ = this.internal; - $$.config.zoom_enabled = enabled; - $$.updateAndRedraw(); - }; - Chart.prototype.unzoom = function () { - var $$ = this.internal; - if ($$.config.subchart_show) { - $$.brush.clear(); - } - else { - $$.updateXDomain(null, true, false, false, $$.subX.domain()); - $$.redraw({ withY: $$.config.zoom_rescale, withSubchart: false }); - } - }; - Chart.prototype.zoom.max = function (max) { - var $$ = this.internal, config = $$.config, d3 = $$.d3; - if (max === 0 || max) { - config.zoom_x_max = d3.max([$$.orgXDomain[1], max]); - } - else { - return config.zoom_x_max; - } - }; - Chart.prototype.zoom.min = function (min) { - var $$ = this.internal, config = $$.config, d3 = $$.d3; - if (min === 0 || min) { - config.zoom_x_min = d3.min([$$.orgXDomain[0], min]); - } - else { - return config.zoom_x_min; - } - }; - Chart.prototype.zoom.range = function (range) { - if (arguments.length) { - if (isDefined(range.max)) { - this.domain.max(range.max); - } - if (isDefined(range.min)) { - this.domain.min(range.min); - } - } - else { - return { - max: this.domain.max(), - min: this.domain.min() - }; - } - }; - - ChartInternal.prototype.initPie = function () { - var $$ = this, d3 = $$.d3; - $$.pie = d3 - .pie() - .padAngle(this.getPadAngle.bind(this)) - .value(function (d) { - return d.values.reduce(function (a, b) { - return a + b.value; - }, 0); - }); - var orderFct = $$.getOrderFunction(); - // we need to reverse the returned order if asc or desc to have the slice in expected order. - if (orderFct && ($$.isOrderAsc() || $$.isOrderDesc())) { - var defaultSort_1 = orderFct; - orderFct = function (t1, t2) { return defaultSort_1(t1, t2) * -1; }; - } - $$.pie.sort(orderFct || null); - }; - ChartInternal.prototype.updateRadius = function () { - var $$ = this, config = $$.config, w = config.gauge_width || config.donut_width, gaugeArcWidth = $$.filterTargetsToShow($$.data.targets).length * - $$.config.gauge_arcs_minWidth; - $$.radiusExpanded = - (Math.min($$.arcWidth, $$.arcHeight) / 2) * ($$.hasType('gauge') ? 0.85 : 1); - $$.radius = $$.radiusExpanded * 0.95; - $$.innerRadiusRatio = w ? ($$.radius - w) / $$.radius : 0.6; - $$.innerRadius = - $$.hasType('donut') || $$.hasType('gauge') - ? $$.radius * $$.innerRadiusRatio - : 0; - $$.gaugeArcWidth = w - ? w - : gaugeArcWidth <= $$.radius - $$.innerRadius - ? $$.radius - $$.innerRadius - : gaugeArcWidth <= $$.radius - ? gaugeArcWidth - : $$.radius; - }; - ChartInternal.prototype.getPadAngle = function () { - if (this.hasType('pie')) { - return this.config.pie_padAngle || 0; - } - else if (this.hasType('donut')) { - return this.config.donut_padAngle || 0; - } - else { - return 0; - } - }; - ChartInternal.prototype.updateArc = function () { - var $$ = this; - $$.svgArc = $$.getSvgArc(); - $$.svgArcExpanded = $$.getSvgArcExpanded(); - $$.svgArcExpandedSub = $$.getSvgArcExpanded(0.98); - }; - ChartInternal.prototype.updateAngle = function (d) { - var $$ = this, config = $$.config, found = false, index = 0, gMin, gMax, gTic, gValue; - if (!config) { - return null; - } - $$.pie($$.filterTargetsToShow($$.data.targets)).forEach(function (t) { - if (!found && t.data.id === d.data.id) { - found = true; - d = t; - d.index = index; - } - index++; - }); - if (isNaN(d.startAngle)) { - d.startAngle = 0; - } - if (isNaN(d.endAngle)) { - d.endAngle = d.startAngle; - } - if ($$.isGaugeType(d.data)) { - gMin = config.gauge_min; - gMax = config.gauge_max; - gTic = (Math.PI * (config.gauge_fullCircle ? 2 : 1)) / (gMax - gMin); - gValue = d.value < gMin ? 0 : d.value < gMax ? d.value - gMin : gMax - gMin; - d.startAngle = config.gauge_startingAngle; - d.endAngle = d.startAngle + gTic * gValue; - } - return found ? d : null; - }; - ChartInternal.prototype.getSvgArc = function () { - var $$ = this, hasGaugeType = $$.hasType('gauge'), singleArcWidth = $$.gaugeArcWidth / $$.filterTargetsToShow($$.data.targets).length, arc = $$.d3 - .arc() - .outerRadius(function (d) { - return hasGaugeType ? $$.radius - singleArcWidth * d.index : $$.radius; - }) - .innerRadius(function (d) { - return hasGaugeType - ? $$.radius - singleArcWidth * (d.index + 1) - : $$.innerRadius; - }), newArc = function (d, withoutUpdate) { - var updated; - if (withoutUpdate) { - return arc(d); - } // for interpolate - updated = $$.updateAngle(d); - return updated ? arc(updated) : 'M 0 0'; - }; - newArc.centroid = arc.centroid; - return newArc; - }; - ChartInternal.prototype.getSvgArcExpanded = function (rate) { - rate = rate || 1; - var $$ = this, hasGaugeType = $$.hasType('gauge'), singleArcWidth = $$.gaugeArcWidth / $$.filterTargetsToShow($$.data.targets).length, expandWidth = Math.min($$.radiusExpanded * rate - $$.radius, singleArcWidth * 0.8 - (1 - rate) * 100), arc = $$.d3 - .arc() - .outerRadius(function (d) { - return hasGaugeType - ? $$.radius - singleArcWidth * d.index + expandWidth - : $$.radiusExpanded * rate; - }) - .innerRadius(function (d) { - return hasGaugeType - ? $$.radius - singleArcWidth * (d.index + 1) - : $$.innerRadius; - }); - return function (d) { - var updated = $$.updateAngle(d); - return updated ? arc(updated) : 'M 0 0'; - }; - }; - ChartInternal.prototype.getArc = function (d, withoutUpdate, force) { - return force || this.isArcType(d.data) - ? this.svgArc(d, withoutUpdate) - : 'M 0 0'; - }; - ChartInternal.prototype.transformForArcLabel = function (d) { - var $$ = this, config = $$.config, updated = $$.updateAngle(d), c, x, y, h, ratio, translate = '', hasGauge = $$.hasType('gauge'); - if (updated && !hasGauge) { - c = this.svgArc.centroid(updated); - x = isNaN(c[0]) ? 0 : c[0]; - y = isNaN(c[1]) ? 0 : c[1]; - h = Math.sqrt(x * x + y * y); - if ($$.hasType('donut') && config.donut_label_ratio) { - ratio = isFunction(config.donut_label_ratio) - ? config.donut_label_ratio(d, $$.radius, h) - : config.donut_label_ratio; - } - else if ($$.hasType('pie') && config.pie_label_ratio) { - ratio = isFunction(config.pie_label_ratio) - ? config.pie_label_ratio(d, $$.radius, h) - : config.pie_label_ratio; - } - else { - ratio = - $$.radius && h - ? ((36 / $$.radius > 0.375 ? 1.175 - 36 / $$.radius : 0.8) * - $$.radius) / - h - : 0; - } - translate = 'translate(' + x * ratio + ',' + y * ratio + ')'; - } - else if (updated && - hasGauge && - $$.filterTargetsToShow($$.data.targets).length > 1) { - var y1 = Math.sin(updated.endAngle - Math.PI / 2); - x = Math.cos(updated.endAngle - Math.PI / 2) * ($$.radiusExpanded + 25); - y = y1 * ($$.radiusExpanded + 15 - Math.abs(y1 * 10)) + 3; - translate = 'translate(' + x + ',' + y + ')'; - } - return translate; - }; - /** - * @deprecated Use `getRatio('arc', d)` instead. - */ - ChartInternal.prototype.getArcRatio = function (d) { - return this.getRatio('arc', d); - }; - ChartInternal.prototype.convertToArcData = function (d) { - return this.addName({ - id: d.data.id, - value: d.value, - ratio: this.getRatio('arc', d), - index: d.index - }); - }; - ChartInternal.prototype.textForArcLabel = function (d) { - var $$ = this, updated, value, ratio, id, format; - if (!$$.shouldShowArcLabel()) { - return ''; - } - updated = $$.updateAngle(d); - value = updated ? updated.value : null; - ratio = $$.getRatio('arc', updated); - id = d.data.id; - if (!$$.hasType('gauge') && !$$.meetsArcLabelThreshold(ratio)) { - return ''; - } - format = $$.getArcLabelFormat(); - return format - ? format(value, ratio, id) - : $$.defaultArcValueFormat(value, ratio); - }; - ChartInternal.prototype.textForGaugeMinMax = function (value, isMax) { - var $$ = this, format = $$.getGaugeLabelExtents(); - return format ? format(value, isMax) : value; - }; - ChartInternal.prototype.expandArc = function (targetIds) { - var $$ = this, interval; - // MEMO: avoid to cancel transition - if ($$.transiting) { - interval = window.setInterval(function () { - if (!$$.transiting) { - window.clearInterval(interval); - if ($$.legend.selectAll('.c3-legend-item-focused').size() > 0) { - $$.expandArc(targetIds); - } - } - }, 10); - return; - } - targetIds = $$.mapToTargetIds(targetIds); - $$.svg - .selectAll($$.selectorTargets(targetIds, '.' + CLASS.chartArc)) - .each(function (d) { - if (!$$.shouldExpand(d.data.id)) { - return; - } - $$.d3 - .select(this) - .selectAll('path') - .transition() - .duration($$.expandDuration(d.data.id)) - .attr('d', $$.svgArcExpanded) - .transition() - .duration($$.expandDuration(d.data.id) * 2) - .attr('d', $$.svgArcExpandedSub) - .each(function (d) { - if ($$.isDonutType(d.data)) ; - }); - }); - }; - ChartInternal.prototype.unexpandArc = function (targetIds) { - var $$ = this; - if ($$.transiting) { - return; - } - targetIds = $$.mapToTargetIds(targetIds); - $$.svg - .selectAll($$.selectorTargets(targetIds, '.' + CLASS.chartArc)) - .selectAll('path') - .transition() - .duration(function (d) { - return $$.expandDuration(d.data.id); - }) - .attr('d', $$.svgArc); - $$.svg.selectAll('.' + CLASS.arc); - }; - ChartInternal.prototype.expandDuration = function (id) { - var $$ = this, config = $$.config; - if ($$.isDonutType(id)) { - return config.donut_expand_duration; - } - else if ($$.isGaugeType(id)) { - return config.gauge_expand_duration; - } - else if ($$.isPieType(id)) { - return config.pie_expand_duration; - } - else { - return 50; - } - }; - ChartInternal.prototype.shouldExpand = function (id) { - var $$ = this, config = $$.config; - return (($$.isDonutType(id) && config.donut_expand) || - ($$.isGaugeType(id) && config.gauge_expand) || - ($$.isPieType(id) && config.pie_expand)); - }; - ChartInternal.prototype.shouldShowArcLabel = function () { - var $$ = this, config = $$.config, shouldShow = true; - if ($$.hasType('donut')) { - shouldShow = config.donut_label_show; - } - else if ($$.hasType('pie')) { - shouldShow = config.pie_label_show; - } - // when gauge, always true - return shouldShow; - }; - ChartInternal.prototype.meetsArcLabelThreshold = function (ratio) { - var $$ = this, config = $$.config, threshold = $$.hasType('donut') - ? config.donut_label_threshold - : config.pie_label_threshold; - return ratio >= threshold; - }; - ChartInternal.prototype.getArcLabelFormat = function () { - var $$ = this, config = $$.config, format = config.pie_label_format; - if ($$.hasType('gauge')) { - format = config.gauge_label_format; - } - else if ($$.hasType('donut')) { - format = config.donut_label_format; - } - return format; - }; - ChartInternal.prototype.getGaugeLabelExtents = function () { - var $$ = this, config = $$.config; - return config.gauge_label_extents; - }; - ChartInternal.prototype.getArcTitle = function () { - var $$ = this; - return $$.hasType('donut') ? $$.config.donut_title : ''; - }; - ChartInternal.prototype.updateTargetsForArc = function (targets) { - var $$ = this, main = $$.main, mainPies, mainPieEnter, classChartArc = $$.classChartArc.bind($$), classArcs = $$.classArcs.bind($$), classFocus = $$.classFocus.bind($$); - mainPies = main - .select('.' + CLASS.chartArcs) - .selectAll('.' + CLASS.chartArc) - .data($$.pie(targets)) - .attr('class', function (d) { - return classChartArc(d) + classFocus(d.data); - }); - mainPieEnter = mainPies - .enter() - .append('g') - .attr('class', classChartArc); - mainPieEnter.append('g').attr('class', classArcs); - mainPieEnter - .append('text') - .attr('dy', $$.hasType('gauge') ? '-.1em' : '.35em') - .style('opacity', 0) - .style('text-anchor', 'middle') - .style('pointer-events', 'none'); - // MEMO: can not keep same color..., but not bad to update color in redraw - //mainPieUpdate.exit().remove(); - }; - ChartInternal.prototype.initArc = function () { - var $$ = this; - $$.arcs = $$.main - .select('.' + CLASS.chart) - .append('g') - .attr('class', CLASS.chartArcs) - .attr('transform', $$.getTranslate('arc')); - $$.arcs - .append('text') - .attr('class', CLASS.chartArcsTitle) - .style('text-anchor', 'middle') - .text($$.getArcTitle()); - }; - ChartInternal.prototype.redrawArc = function (duration, durationForExit, withTransform) { - var $$ = this, d3 = $$.d3, config = $$.config, main = $$.main, arcs, mainArc, arcLabelLines, mainArcLabelLine, hasGaugeType = $$.hasType('gauge'); - arcs = main - .selectAll('.' + CLASS.arcs) - .selectAll('.' + CLASS.arc) - .data($$.arcData.bind($$)); - mainArc = arcs - .enter() - .append('path') - .attr('class', $$.classArc.bind($$)) - .style('fill', function (d) { - return $$.color(d.data); - }) - .style('cursor', function (d) { - return config.interaction_enabled && config.data_selection_isselectable(d) - ? 'pointer' - : null; - }) - .each(function (d) { - if ($$.isGaugeType(d.data)) { - d.startAngle = d.endAngle = config.gauge_startingAngle; - } - this._current = d; - }) - .merge(arcs); - if (hasGaugeType) { - arcLabelLines = main - .selectAll('.' + CLASS.arcs) - .selectAll('.' + CLASS.arcLabelLine) - .data($$.arcData.bind($$)); - mainArcLabelLine = arcLabelLines - .enter() - .append('rect') - .attr('class', function (d) { - return (CLASS.arcLabelLine + - ' ' + - CLASS.target + - ' ' + - CLASS.target + - '-' + - d.data.id); - }) - .merge(arcLabelLines); - if ($$.filterTargetsToShow($$.data.targets).length === 1) { - mainArcLabelLine.style('display', 'none'); - } - else { - mainArcLabelLine - .style('fill', function (d) { - return $$.levelColor - ? $$.levelColor(d.data.values.reduce(function (total, item) { - return total + item.value; - }, 0)) - : $$.color(d.data); - }) - .style('display', config.gauge_labelLine_show ? '' : 'none') - .each(function (d) { - var lineLength = 0, lineThickness = 2, x = 0, y = 0, transform = ''; - if ($$.hiddenTargetIds.indexOf(d.data.id) < 0) { - var updated = $$.updateAngle(d), innerLineLength = ($$.gaugeArcWidth / - $$.filterTargetsToShow($$.data.targets).length) * - (updated.index + 1), lineAngle = updated.endAngle - Math.PI / 2, arcInnerRadius = $$.radius - innerLineLength, linePositioningAngle = lineAngle - (arcInnerRadius === 0 ? 0 : 1 / arcInnerRadius); - lineLength = $$.radiusExpanded - $$.radius + innerLineLength; - x = Math.cos(linePositioningAngle) * arcInnerRadius; - y = Math.sin(linePositioningAngle) * arcInnerRadius; - transform = - 'rotate(' + - (lineAngle * 180) / Math.PI + - ', ' + - x + - ', ' + - y + - ')'; - } - d3.select(this) - .attr('x', x) - .attr('y', y) - .attr('width', lineLength) - .attr('height', lineThickness) - .attr('transform', transform) - .style('stroke-dasharray', '0, ' + (lineLength + lineThickness) + ', 0'); - }); - } - } - mainArc - .attr('transform', function (d) { - return !$$.isGaugeType(d.data) && withTransform ? 'scale(0)' : ''; - }) - .on('mouseover', config.interaction_enabled - ? function (d) { - var updated, arcData; - if ($$.transiting) { - // skip while transiting - return; - } - updated = $$.updateAngle(d); - if (updated) { - arcData = $$.convertToArcData(updated); - // transitions - $$.expandArc(updated.data.id); - $$.api.focus(updated.data.id); - $$.toggleFocusLegend(updated.data.id, true); - $$.config.data_onmouseover(arcData, this); - } - } - : null) - .on('mousemove', config.interaction_enabled - ? function (d) { - var updated = $$.updateAngle(d), arcData, selectedData; - if (updated) { - (arcData = $$.convertToArcData(updated)), - (selectedData = [arcData]); - $$.showTooltip(selectedData, this); - } - } - : null) - .on('mouseout', config.interaction_enabled - ? function (d) { - var updated, arcData; - if ($$.transiting) { - // skip while transiting - return; - } - updated = $$.updateAngle(d); - if (updated) { - arcData = $$.convertToArcData(updated); - // transitions - $$.unexpandArc(updated.data.id); - $$.api.revert(); - $$.revertLegend(); - $$.hideTooltip(); - $$.config.data_onmouseout(arcData, this); - } - } - : null) - .on('click', config.interaction_enabled - ? function (d, i) { - var updated = $$.updateAngle(d), arcData; - if (updated) { - arcData = $$.convertToArcData(updated); - if ($$.toggleShape) { - $$.toggleShape(this, arcData, i); - } - $$.config.data_onclick.call($$.api, arcData, this); - } - } - : null) - .each(function () { - $$.transiting = true; - }) - .transition() - .duration(duration) - .attrTween('d', function (d) { - var updated = $$.updateAngle(d), interpolate; - if (!updated) { - return function () { - return 'M 0 0'; - }; - } - // if (this._current === d) { - // this._current = { - // startAngle: Math.PI*2, - // endAngle: Math.PI*2, - // }; - // } - if (isNaN(this._current.startAngle)) { - this._current.startAngle = 0; - } - if (isNaN(this._current.endAngle)) { - this._current.endAngle = this._current.startAngle; - } - interpolate = d3.interpolate(this._current, updated); - this._current = interpolate(0); - return function (t) { - // prevents crashing the charts once in transition and chart.destroy() has been called - if ($$.config === null) { - return 'M 0 0'; - } - var interpolated = interpolate(t); - interpolated.data = d.data; // data.id will be updated by interporator - return $$.getArc(interpolated, true); - }; - }) - .attr('transform', withTransform ? 'scale(1)' : '') - .style('fill', function (d) { - return $$.levelColor - ? $$.levelColor(d.data.values.reduce(function (total, item) { - return total + item.value; - }, 0)) - : $$.color(d.data.id); - }) // Where gauge reading color would receive customization. - .call($$.endall, function () { - $$.transiting = false; - }); - arcs - .exit() - .transition() - .duration(durationForExit) - .style('opacity', 0) - .remove(); - main - .selectAll('.' + CLASS.chartArc) - .select('text') - .style('opacity', 0) - .attr('class', function (d) { - return $$.isGaugeType(d.data) ? CLASS.gaugeValue : ''; - }) - .text($$.textForArcLabel.bind($$)) - .attr('transform', $$.transformForArcLabel.bind($$)) - .style('font-size', function (d) { - return $$.isGaugeType(d.data) && - $$.filterTargetsToShow($$.data.targets).length === 1 - ? Math.round($$.radius / 5) + 'px' - : ''; - }) - .transition() - .duration(duration) - .style('opacity', function (d) { - return $$.isTargetToShow(d.data.id) && $$.isArcType(d.data) ? 1 : 0; - }); - main - .select('.' + CLASS.chartArcsTitle) - .style('opacity', $$.hasType('donut') || hasGaugeType ? 1 : 0); - if (hasGaugeType) { - var index_1 = 0; - var backgroundArc = $$.arcs - .select('g.' + CLASS.chartArcsBackground) - .selectAll('path.' + CLASS.chartArcsBackground) - .data($$.data.targets); - backgroundArc - .enter() - .append('path') - .attr('class', function (d, i) { - return CLASS.chartArcsBackground + ' ' + CLASS.chartArcsBackground + '-' + i; - }) - .merge(backgroundArc) - .attr('d', function (d1) { - if ($$.hiddenTargetIds.indexOf(d1.id) >= 0) { - return 'M 0 0'; - } - var d = { - data: [{ value: config.gauge_max }], - startAngle: config.gauge_startingAngle, - endAngle: -1 * - config.gauge_startingAngle * - (config.gauge_fullCircle ? Math.PI : 1), - index: index_1++ - }; - return $$.getArc(d, true, true); - }); - backgroundArc.exit().remove(); - $$.arcs - .select('.' + CLASS.chartArcsGaugeUnit) - .attr('dy', '.75em') - .text(config.gauge_label_show ? config.gauge_units : ''); - $$.arcs - .select('.' + CLASS.chartArcsGaugeMin) - .attr('dx', -1 * - ($$.innerRadius + - ($$.radius - $$.innerRadius) / (config.gauge_fullCircle ? 1 : 2)) + - 'px') - .attr('dy', '1.2em') - .text(config.gauge_label_show - ? $$.textForGaugeMinMax(config.gauge_min, false) - : ''); - $$.arcs - .select('.' + CLASS.chartArcsGaugeMax) - .attr('dx', $$.innerRadius + - ($$.radius - $$.innerRadius) / (config.gauge_fullCircle ? 1 : 2) + - 'px') - .attr('dy', '1.2em') - .text(config.gauge_label_show - ? $$.textForGaugeMinMax(config.gauge_max, true) - : ''); - } - }; - ChartInternal.prototype.initGauge = function () { - var arcs = this.arcs; - if (this.hasType('gauge')) { - arcs.append('g').attr('class', CLASS.chartArcsBackground); - arcs - .append('text') - .attr('class', CLASS.chartArcsGaugeUnit) - .style('text-anchor', 'middle') - .style('pointer-events', 'none'); - arcs - .append('text') - .attr('class', CLASS.chartArcsGaugeMin) - .style('text-anchor', 'middle') - .style('pointer-events', 'none'); - arcs - .append('text') - .attr('class', CLASS.chartArcsGaugeMax) - .style('text-anchor', 'middle') - .style('pointer-events', 'none'); - } - }; - ChartInternal.prototype.getGaugeLabelHeight = function () { - return this.config.gauge_label_show ? 20 : 0; - }; - - /** - * Store value into cache - * - * @param key - * @param value - */ - ChartInternal.prototype.addToCache = function (key, value) { - this.cache["$" + key] = value; - }; - /** - * Returns a cached value or undefined - * - * @param key - * @return {*} - */ - ChartInternal.prototype.getFromCache = function (key) { - return this.cache["$" + key]; - }; - /** - * Reset cached data - */ - ChartInternal.prototype.resetCache = function () { - var _this = this; - Object.keys(this.cache) - .filter(function (key) { return /^\$/.test(key); }) - .forEach(function (key) { - delete _this.cache[key]; - }); - }; - // Old API that stores Targets - ChartInternal.prototype.hasCaches = function (ids) { - for (var i = 0; i < ids.length; i++) { - if (!(ids[i] in this.cache)) { - return false; - } - } - return true; - }; - ChartInternal.prototype.addCache = function (id, target) { - this.cache[id] = this.cloneTarget(target); - }; - ChartInternal.prototype.getCaches = function (ids) { - var targets = [], i; - for (i = 0; i < ids.length; i++) { - if (ids[i] in this.cache) { - targets.push(this.cloneTarget(this.cache[ids[i]])); - } - } - return targets; - }; - - ChartInternal.prototype.categoryName = function (i) { - var config = this.config; - return i < config.axis_x_categories.length ? config.axis_x_categories[i] : i; - }; - - ChartInternal.prototype.generateTargetClass = function (targetId) { - return targetId || targetId === 0 ? ('-' + targetId).replace(/\s/g, '-') : ''; - }; - ChartInternal.prototype.generateClass = function (prefix, targetId) { - return ' ' + prefix + ' ' + prefix + this.generateTargetClass(targetId); - }; - ChartInternal.prototype.classText = function (d) { - return this.generateClass(CLASS.text, d.index); - }; - ChartInternal.prototype.classTexts = function (d) { - return this.generateClass(CLASS.texts, d.id); - }; - ChartInternal.prototype.classShape = function (d) { - return this.generateClass(CLASS.shape, d.index); - }; - ChartInternal.prototype.classShapes = function (d) { - return this.generateClass(CLASS.shapes, d.id); - }; - ChartInternal.prototype.classLine = function (d) { - return this.classShape(d) + this.generateClass(CLASS.line, d.id); - }; - ChartInternal.prototype.classLines = function (d) { - return this.classShapes(d) + this.generateClass(CLASS.lines, d.id); - }; - ChartInternal.prototype.classCircle = function (d) { - return this.classShape(d) + this.generateClass(CLASS.circle, d.index); - }; - ChartInternal.prototype.classCircles = function (d) { - return this.classShapes(d) + this.generateClass(CLASS.circles, d.id); - }; - ChartInternal.prototype.classBar = function (d) { - return this.classShape(d) + this.generateClass(CLASS.bar, d.index); - }; - ChartInternal.prototype.classBars = function (d) { - return this.classShapes(d) + this.generateClass(CLASS.bars, d.id); - }; - ChartInternal.prototype.classArc = function (d) { - return this.classShape(d.data) + this.generateClass(CLASS.arc, d.data.id); - }; - ChartInternal.prototype.classArcs = function (d) { - return this.classShapes(d.data) + this.generateClass(CLASS.arcs, d.data.id); - }; - ChartInternal.prototype.classArea = function (d) { - return this.classShape(d) + this.generateClass(CLASS.area, d.id); - }; - ChartInternal.prototype.classAreas = function (d) { - return this.classShapes(d) + this.generateClass(CLASS.areas, d.id); - }; - ChartInternal.prototype.classRegion = function (d, i) { - return (this.generateClass(CLASS.region, i) + ' ' + ('class' in d ? d['class'] : '')); - }; - ChartInternal.prototype.classEvent = function (d) { - return this.generateClass(CLASS.eventRect, d.index); - }; - ChartInternal.prototype.classTarget = function (id) { - var $$ = this; - var additionalClassSuffix = $$.config.data_classes[id], additionalClass = ''; - if (additionalClassSuffix) { - additionalClass = ' ' + CLASS.target + '-' + additionalClassSuffix; - } - return $$.generateClass(CLASS.target, id) + additionalClass; - }; - ChartInternal.prototype.classFocus = function (d) { - return this.classFocused(d) + this.classDefocused(d); - }; - ChartInternal.prototype.classFocused = function (d) { - return ' ' + (this.focusedTargetIds.indexOf(d.id) >= 0 ? CLASS.focused : ''); - }; - ChartInternal.prototype.classDefocused = function (d) { - return (' ' + (this.defocusedTargetIds.indexOf(d.id) >= 0 ? CLASS.defocused : '')); - }; - ChartInternal.prototype.classChartText = function (d) { - return CLASS.chartText + this.classTarget(d.id); - }; - ChartInternal.prototype.classChartLine = function (d) { - return CLASS.chartLine + this.classTarget(d.id); - }; - ChartInternal.prototype.classChartBar = function (d) { - return CLASS.chartBar + this.classTarget(d.id); - }; - ChartInternal.prototype.classChartArc = function (d) { - return CLASS.chartArc + this.classTarget(d.data.id); - }; - ChartInternal.prototype.getTargetSelectorSuffix = function (targetId) { - var targetClass = this.generateTargetClass(targetId); - if (window.CSS && window.CSS.escape) { - return window.CSS.escape(targetClass); - } - // fallback on imperfect method for old browsers (does not handles unicode) - return targetClass.replace(/([?!@#$%^&*()=+,.<>'":;\[\]\/|~`{}\\])/g, '\\$1'); - }; - ChartInternal.prototype.selectorTarget = function (id, prefix) { - return (prefix || '') + '.' + CLASS.target + this.getTargetSelectorSuffix(id); - }; - ChartInternal.prototype.selectorTargets = function (ids, prefix) { - var $$ = this; - ids = ids || []; - return ids.length - ? ids.map(function (id) { - return $$.selectorTarget(id, prefix); - }) - : null; - }; - ChartInternal.prototype.selectorLegend = function (id) { - return '.' + CLASS.legendItem + this.getTargetSelectorSuffix(id); - }; - ChartInternal.prototype.selectorLegends = function (ids) { - var $$ = this; - return ids && ids.length - ? ids.map(function (id) { - return $$.selectorLegend(id); - }) - : null; - }; - - ChartInternal.prototype.getClipPath = function (id) { - return 'url(' + (isIE(9) ? '' : document.URL.split('#')[0]) + '#' + id + ')'; - }; - ChartInternal.prototype.appendClip = function (parent, id) { - return parent - .append('clipPath') - .attr('id', id) - .append('rect'); - }; - ChartInternal.prototype.getAxisClipX = function (forHorizontal) { - // axis line width + padding for left - var left = Math.max(30, this.margin.left); - return forHorizontal ? -(1 + left) : -(left - 1); - }; - ChartInternal.prototype.getAxisClipY = function (forHorizontal) { - return forHorizontal ? -20 : -this.margin.top; - }; - ChartInternal.prototype.getXAxisClipX = function () { - var $$ = this; - return $$.getAxisClipX(!$$.config.axis_rotated); - }; - ChartInternal.prototype.getXAxisClipY = function () { - var $$ = this; - return $$.getAxisClipY(!$$.config.axis_rotated); - }; - ChartInternal.prototype.getYAxisClipX = function () { - var $$ = this; - return $$.config.axis_y_inner ? -1 : $$.getAxisClipX($$.config.axis_rotated); - }; - ChartInternal.prototype.getYAxisClipY = function () { - var $$ = this; - return $$.getAxisClipY($$.config.axis_rotated); - }; - ChartInternal.prototype.getAxisClipWidth = function (forHorizontal) { - var $$ = this, left = Math.max(30, $$.margin.left), right = Math.max(30, $$.margin.right); - // width + axis line width + padding for left/right - return forHorizontal ? $$.width + 2 + left + right : $$.margin.left + 20; - }; - ChartInternal.prototype.getAxisClipHeight = function (forHorizontal) { - // less than 20 is not enough to show the axis label 'outer' without legend - return ((forHorizontal ? this.margin.bottom : this.margin.top + this.height) + 20); - }; - ChartInternal.prototype.getXAxisClipWidth = function () { - var $$ = this; - return $$.getAxisClipWidth(!$$.config.axis_rotated); - }; - ChartInternal.prototype.getXAxisClipHeight = function () { - var $$ = this; - return $$.getAxisClipHeight(!$$.config.axis_rotated); - }; - ChartInternal.prototype.getYAxisClipWidth = function () { - var $$ = this; - return ($$.getAxisClipWidth($$.config.axis_rotated) + - ($$.config.axis_y_inner ? 20 : 0)); - }; - ChartInternal.prototype.getYAxisClipHeight = function () { - var $$ = this; - return $$.getAxisClipHeight($$.config.axis_rotated); - }; - - ChartInternal.prototype.generateColor = function () { - var $$ = this, config = $$.config, d3 = $$.d3, colors = config.data_colors, pattern = notEmpty(config.color_pattern) - ? config.color_pattern - : d3.schemeCategory10, callback = config.data_color, ids = []; - return function (d) { - var id = d.id || (d.data && d.data.id) || d, color; - // if callback function is provided - if (colors[id] instanceof Function) { - color = colors[id](d); - } - // if specified, choose that color - else if (colors[id]) { - color = colors[id]; - } - // if not specified, choose from pattern - else { - if (ids.indexOf(id) < 0) { - ids.push(id); - } - color = pattern[ids.indexOf(id) % pattern.length]; - colors[id] = color; - } - return callback instanceof Function ? callback(color, d) : color; - }; - }; - ChartInternal.prototype.generateLevelColor = function () { - var $$ = this, config = $$.config, colors = config.color_pattern, threshold = config.color_threshold, asValue = threshold.unit === 'value', values = threshold.values && threshold.values.length ? threshold.values : [], max = threshold.max || 100; - return notEmpty(threshold) && notEmpty(colors) - ? function (value) { - var i, v, color = colors[colors.length - 1]; - for (i = 0; i < values.length; i++) { - v = asValue ? value : (value * 100) / max; - if (v < values[i]) { - color = colors[i]; - break; - } - } - return color; - } - : null; - }; - - ChartInternal.prototype.getDefaultConfig = function () { - var config = { - bindto: '#chart', - svg_classname: undefined, - size_width: undefined, - size_height: undefined, - padding_left: undefined, - padding_right: undefined, - padding_top: undefined, - padding_bottom: undefined, - resize_auto: true, - zoom_enabled: false, - zoom_initialRange: undefined, - zoom_type: 'scroll', - zoom_disableDefaultBehavior: false, - zoom_privileged: false, - zoom_rescale: false, - zoom_onzoom: function () { }, - zoom_onzoomstart: function () { }, - zoom_onzoomend: function () { }, - zoom_x_min: undefined, - zoom_x_max: undefined, - interaction_brighten: true, - interaction_enabled: true, - onmouseover: function () { }, - onmouseout: function () { }, - onresize: function () { }, - onresized: function () { }, - oninit: function () { }, - onrendered: function () { }, - transition_duration: 350, - data_epochs: 'epochs', - data_x: undefined, - data_xs: {}, - data_xFormat: '%Y-%m-%d', - data_xLocaltime: true, - data_xSort: true, - data_idConverter: function (id) { - return id; - }, - data_names: {}, - data_classes: {}, - data_groups: [], - data_axes: {}, - data_type: undefined, - data_types: {}, - data_labels: {}, - data_order: 'desc', - data_regions: {}, - data_color: undefined, - data_colors: {}, - data_hide: false, - data_filter: undefined, - data_selection_enabled: false, - data_selection_grouped: false, - data_selection_isselectable: function () { - return true; - }, - data_selection_multiple: true, - data_selection_draggable: false, - data_stack_normalize: false, - data_onclick: function () { }, - data_onmouseover: function () { }, - data_onmouseout: function () { }, - data_onselected: function () { }, - data_onunselected: function () { }, - data_url: undefined, - data_headers: undefined, - data_json: undefined, - data_rows: undefined, - data_columns: undefined, - data_mimeType: undefined, - data_keys: undefined, - // configuration for no plot-able data supplied. - data_empty_label_text: '', - // subchart - subchart_show: false, - subchart_size_height: 60, - subchart_axis_x_show: true, - subchart_onbrush: function () { }, - // color - color_pattern: [], - color_threshold: {}, - // legend - legend_show: true, - legend_hide: false, - legend_position: 'bottom', - legend_inset_anchor: 'top-left', - legend_inset_x: 10, - legend_inset_y: 0, - legend_inset_step: undefined, - legend_item_onclick: undefined, - legend_item_onmouseover: undefined, - legend_item_onmouseout: undefined, - legend_equally: false, - legend_padding: 0, - legend_item_tile_width: 10, - legend_item_tile_height: 10, - // axis - axis_rotated: false, - axis_x_show: true, - axis_x_type: 'indexed', - axis_x_localtime: true, - axis_x_categories: [], - axis_x_tick_centered: false, - axis_x_tick_format: undefined, - axis_x_tick_culling: {}, - axis_x_tick_culling_max: 10, - axis_x_tick_count: undefined, - axis_x_tick_fit: true, - axis_x_tick_values: null, - axis_x_tick_rotate: 0, - axis_x_tick_outer: true, - axis_x_tick_multiline: true, - axis_x_tick_multilineMax: 0, - axis_x_tick_width: null, - axis_x_max: undefined, - axis_x_min: undefined, - axis_x_padding: {}, - axis_x_height: undefined, - axis_x_selection: undefined, - axis_x_label: {}, - axis_x_inner: undefined, - axis_y_show: true, - axis_y_type: 'linear', - axis_y_max: undefined, - axis_y_min: undefined, - axis_y_inverted: false, - axis_y_center: undefined, - axis_y_inner: undefined, - axis_y_label: {}, - axis_y_tick_format: undefined, - axis_y_tick_outer: true, - axis_y_tick_values: null, - axis_y_tick_rotate: 0, - axis_y_tick_count: undefined, - axis_y_tick_time_type: undefined, - axis_y_tick_time_interval: undefined, - axis_y_padding: {}, - axis_y_default: undefined, - axis_y2_show: false, - axis_y2_type: 'linear', - axis_y2_max: undefined, - axis_y2_min: undefined, - axis_y2_inverted: false, - axis_y2_center: undefined, - axis_y2_inner: undefined, - axis_y2_label: {}, - axis_y2_tick_format: undefined, - axis_y2_tick_outer: true, - axis_y2_tick_values: null, - axis_y2_tick_count: undefined, - axis_y2_padding: {}, - axis_y2_default: undefined, - // grid - grid_x_show: false, - grid_x_type: 'tick', - grid_x_lines: [], - grid_y_show: false, - // not used - // grid_y_type: 'tick', - grid_y_lines: [], - grid_y_ticks: 10, - grid_focus_show: true, - grid_lines_front: true, - // point - point of each data - point_show: true, - point_r: 2.5, - point_sensitivity: 10, - point_focus_expand_enabled: true, - point_focus_expand_r: undefined, - point_select_r: undefined, - // line - line_connectNull: false, - line_step_type: 'step', - // bar - bar_width: undefined, - bar_width_ratio: 0.6, - bar_width_max: undefined, - bar_zerobased: true, - bar_space: 0, - // area - area_zerobased: true, - area_above: false, - // pie - pie_label_show: true, - pie_label_format: undefined, - pie_label_threshold: 0.05, - pie_label_ratio: undefined, - pie_expand: {}, - pie_expand_duration: 50, - pie_padAngle: 0, - // gauge - gauge_fullCircle: false, - gauge_label_show: true, - gauge_labelLine_show: true, - gauge_label_format: undefined, - gauge_min: 0, - gauge_max: 100, - gauge_startingAngle: (-1 * Math.PI) / 2, - gauge_label_extents: undefined, - gauge_units: undefined, - gauge_width: undefined, - gauge_arcs_minWidth: 5, - gauge_expand: {}, - gauge_expand_duration: 50, - // donut - donut_label_show: true, - donut_label_format: undefined, - donut_label_threshold: 0.05, - donut_label_ratio: undefined, - donut_width: undefined, - donut_title: '', - donut_expand: {}, - donut_expand_duration: 50, - donut_padAngle: 0, - // spline - spline_interpolation_type: 'cardinal', - // stanford - stanford_lines: [], - stanford_regions: [], - stanford_texts: [], - stanford_scaleMin: undefined, - stanford_scaleMax: undefined, - stanford_scaleWidth: undefined, - stanford_scaleFormat: undefined, - stanford_scaleValues: undefined, - stanford_colors: undefined, - stanford_padding: { - top: 0, - right: 0, - bottom: 0, - left: 0 - }, - // region - region to change style - regions: [], - // tooltip - show when mouseover on each data - tooltip_show: true, - tooltip_grouped: true, - tooltip_order: undefined, - tooltip_format_title: undefined, - tooltip_format_name: undefined, - tooltip_format_value: undefined, - tooltip_horizontal: undefined, - tooltip_position: undefined, - tooltip_contents: function (d, defaultTitleFormat, defaultValueFormat, color) { - return this.getTooltipContent - ? this.getTooltipContent(d, defaultTitleFormat, defaultValueFormat, color) - : ''; - }, - tooltip_init_show: false, - tooltip_init_x: 0, - tooltip_init_position: { top: '0px', left: '50px' }, - tooltip_onshow: function () { }, - tooltip_onhide: function () { }, - // title - title_text: undefined, - title_padding: { - top: 0, - right: 0, - bottom: 0, - left: 0 - }, - title_position: 'top-center' - }; - Object.keys(this.additionalConfig).forEach(function (key) { - config[key] = this.additionalConfig[key]; - }, this); - return config; - }; - ChartInternal.prototype.additionalConfig = {}; - ChartInternal.prototype.loadConfig = function (config) { - var this_config = this.config, target, keys, read; - function find() { - var key = keys.shift(); - // console.log("key =>", key, ", target =>", target); - if (key && target && typeof target === 'object' && key in target) { - target = target[key]; - return find(); - } - else if (!key) { - return target; - } - else { - return undefined; - } - } - Object.keys(this_config).forEach(function (key) { - target = config; - keys = key.split('_'); - read = find(); - // console.log("CONFIG : ", key, read); - if (isDefined(read)) { - this_config[key] = read; - } - }); - }; - - ChartInternal.prototype.convertUrlToData = function (url, mimeType, headers, keys, done) { - var $$ = this, type = mimeType ? mimeType : 'csv', f, converter; - if (type === 'json') { - f = $$.d3.json; - converter = $$.convertJsonToData; - } - else if (type === 'tsv') { - f = $$.d3.tsv; - converter = $$.convertXsvToData; - } - else { - f = $$.d3.csv; - converter = $$.convertXsvToData; - } - f(url, headers) - .then(function (data) { - done.call($$, converter.call($$, data, keys)); - }) - .catch(function (error) { - throw error; - }); - }; - ChartInternal.prototype.convertXsvToData = function (xsv) { - var keys = xsv.columns, rows = xsv; - if (rows.length === 0) { - return { - keys: keys, - rows: [keys.reduce(function (row, key) { - var _a; - return Object.assign(row, (_a = {}, _a[key] = null, _a)); - }, {})] - }; - } - else { - // [].concat() is to convert result into a plain array otherwise - // test is not happy because rows have properties. - return { keys: keys, rows: [].concat(xsv) }; - } - }; - ChartInternal.prototype.convertJsonToData = function (json, keys) { - var $$ = this, new_rows = [], targetKeys, data; - if (keys) { - // when keys specified, json would be an array that includes objects - if (keys.x) { - targetKeys = keys.value.concat(keys.x); - $$.config.data_x = keys.x; - } - else { - targetKeys = keys.value; - } - new_rows.push(targetKeys); - json.forEach(function (o) { - var new_row = []; - targetKeys.forEach(function (key) { - // convert undefined to null because undefined data will be removed in convertDataToTargets() - var v = $$.findValueInJson(o, key); - if (isUndefined(v)) { - v = null; - } - new_row.push(v); - }); - new_rows.push(new_row); - }); - data = $$.convertRowsToData(new_rows); - } - else { - Object.keys(json).forEach(function (key) { - new_rows.push([key].concat(json[key])); - }); - data = $$.convertColumnsToData(new_rows); - } - return data; - }; - /** - * Finds value from the given nested object by the given path. - * If it's not found, then this returns undefined. - * @param {Object} object the object - * @param {string} path the path - */ - ChartInternal.prototype.findValueInJson = function (object, path) { - if (path in object) { - // If object has a key that contains . or [], return the key's value - // instead of searching for an inner object. - // See https://github.com/c3js/c3/issues/1691 for details. - return object[path]; - } - path = path.replace(/\[(\w+)\]/g, '.$1'); // convert indexes to properties (replace [] with .) - path = path.replace(/^\./, ''); // strip a leading dot - var pathArray = path.split('.'); - for (var i = 0; i < pathArray.length; ++i) { - var k = pathArray[i]; - if (k in object) { - object = object[k]; - } - else { - return; - } - } - return object; - }; - /** - * Converts the rows to normalized data. - * @param {any[][]} rows The row data - * @return {Object} - */ - ChartInternal.prototype.convertRowsToData = function (rows) { - var newRows = []; - var keys = rows[0]; - for (var i = 1; i < rows.length; i++) { - var newRow = {}; - for (var j = 0; j < rows[i].length; j++) { - if (isUndefined(rows[i][j])) { - throw new Error('Source data is missing a component at (' + i + ',' + j + ')!'); - } - newRow[keys[j]] = rows[i][j]; - } - newRows.push(newRow); - } - return { keys: keys, rows: newRows }; - }; - /** - * Converts the columns to normalized data. - * @param {any[][]} columns The column data - * @return {Object} - */ - ChartInternal.prototype.convertColumnsToData = function (columns) { - var newRows = []; - var keys = []; - for (var i = 0; i < columns.length; i++) { - var key = columns[i][0]; - for (var j = 1; j < columns[i].length; j++) { - if (isUndefined(newRows[j - 1])) { - newRows[j - 1] = {}; - } - if (isUndefined(columns[i][j])) { - throw new Error('Source data is missing a component at (' + i + ',' + j + ')!'); - } - newRows[j - 1][key] = columns[i][j]; - } - keys.push(key); - } - return { keys: keys, rows: newRows }; - }; - /** - * Converts the data format into the target format. - * @param {!Object} data - * @param {!Array} data.keys Ordered list of target IDs. - * @param {!Array} data.rows Rows of data to convert. - * @param {boolean} appendXs True to append to $$.data.xs, False to replace. - * @return {!Array} - */ - ChartInternal.prototype.convertDataToTargets = function (data, appendXs) { - var $$ = this, config = $$.config, targets, ids, xs, keys, epochs; - // handles format where keys are not orderly provided - if (isArray(data)) { - keys = Object.keys(data[0]); - } - else { - keys = data.keys; - data = data.rows; - } - xs = keys.filter($$.isX, $$); - if (!$$.isStanfordGraphType()) { - ids = keys.filter($$.isNotX, $$); - } - else { - epochs = keys.filter($$.isEpochs, $$); - ids = keys.filter($$.isNotXAndNotEpochs, $$); - if (xs.length !== 1 || epochs.length !== 1 || ids.length !== 1) { - throw new Error("You must define the 'x' key name and the 'epochs' for Stanford Diagrams"); - } - } - // save x for update data by load when custom x and c3.x API - ids.forEach(function (id) { - var xKey = $$.getXKey(id); - if ($$.isCustomX() || $$.isTimeSeries()) { - // if included in input data - if (xs.indexOf(xKey) >= 0) { - $$.data.xs[id] = (appendXs && $$.data.xs[id] - ? $$.data.xs[id] - : []).concat(data - .map(function (d) { - return d[xKey]; - }) - .filter(isValue) - .map(function (rawX, i) { - return $$.generateTargetX(rawX, id, i); - })); - } - // if not included in input data, find from preloaded data of other id's x - else if (config.data_x) { - $$.data.xs[id] = $$.getOtherTargetXs(); - } - // if not included in input data, find from preloaded data - else if (notEmpty(config.data_xs)) { - $$.data.xs[id] = $$.getXValuesOfXKey(xKey, $$.data.targets); - } - // MEMO: if no x included, use same x of current will be used - } - else { - $$.data.xs[id] = data.map(function (d, i) { - return i; - }); - } - }); - // check x is defined - ids.forEach(function (id) { - if (!$$.data.xs[id]) { - throw new Error('x is not defined for id = "' + id + '".'); - } - }); - // convert to target - targets = ids.map(function (id, index) { - var convertedId = config.data_idConverter(id); - return { - id: convertedId, - id_org: id, - values: data - .map(function (d, i) { - var xKey = $$.getXKey(id), rawX = d[xKey], value = d[id] !== null && !isNaN(d[id]) ? +d[id] : null, x, returnData; - // use x as categories if custom x and categorized - if ($$.isCustomX() && $$.isCategorized() && !isUndefined(rawX)) { - if (index === 0 && i === 0) { - config.axis_x_categories = []; - } - x = config.axis_x_categories.indexOf(rawX); - if (x === -1) { - x = config.axis_x_categories.length; - config.axis_x_categories.push(rawX); - } - } - else { - x = $$.generateTargetX(rawX, id, i); - } - // mark as x = undefined if value is undefined and filter to remove after mapped - if (isUndefined(d[id]) || $$.data.xs[id].length <= i) { - x = undefined; - } - returnData = { x: x, value: value, id: convertedId }; - if ($$.isStanfordGraphType()) { - returnData.epochs = d[epochs]; - } - return returnData; - }) - .filter(function (v) { - return isDefined(v.x); - }) - }; - }); - // finish targets - targets.forEach(function (t) { - var i; - // sort values by its x - if (config.data_xSort) { - t.values = t.values.sort(function (v1, v2) { - var x1 = v1.x || v1.x === 0 ? v1.x : Infinity, x2 = v2.x || v2.x === 0 ? v2.x : Infinity; - return x1 - x2; - }); - } - // indexing each value - i = 0; - t.values.forEach(function (v) { - v.index = i++; - }); - // this needs to be sorted because its index and value.index is identical - $$.data.xs[t.id].sort(function (v1, v2) { - return v1 - v2; - }); - }); - // cache information about values - $$.hasNegativeValue = $$.hasNegativeValueInTargets(targets); - $$.hasPositiveValue = $$.hasPositiveValueInTargets(targets); - // set target types - if (config.data_type) { - $$.setTargetType($$.mapToIds(targets).filter(function (id) { - return !(id in config.data_types); - }), config.data_type); - } - // cache as original id keyed - targets.forEach(function (d) { - $$.addCache(d.id_org, d); - }); - return targets; - }; - - ChartInternal.prototype.isEpochs = function (key) { - var $$ = this, config = $$.config; - return config.data_epochs && key === config.data_epochs; - }; - ChartInternal.prototype.isX = function (key) { - var $$ = this, config = $$.config; - return ((config.data_x && key === config.data_x) || - (notEmpty(config.data_xs) && hasValue(config.data_xs, key))); - }; - ChartInternal.prototype.isNotX = function (key) { - return !this.isX(key); - }; - ChartInternal.prototype.isNotXAndNotEpochs = function (key) { - return !this.isX(key) && !this.isEpochs(key); - }; - /** - * Returns whether the normalized stack option is enabled or not. - * - * To be enabled it must also have data.groups defined. - * - * @return {boolean} - */ - ChartInternal.prototype.isStackNormalized = function () { - return this.config.data_stack_normalize && this.config.data_groups.length > 0; - }; - /** - * Returns whether the axis is normalized or not. - * - * An axis is normalized as long as one of its associated target - * is normalized. - * - * @param axisId Axis ID (y or y2) - * @return {Boolean} - */ - ChartInternal.prototype.isAxisNormalized = function (axisId) { - var $$ = this; - if (!$$.isStackNormalized()) { - // shortcut - return false; - } - return $$.data.targets - .filter(function (target) { return $$.axis.getId(target.id) === axisId; }) - .some(function (target) { return $$.isTargetNormalized(target.id); }); - }; - /** - * Returns whether the values for this target ID is normalized or not. - * - * To be normalized the option needs to be enabled and target needs - * to be defined in `data.groups`. - * - * @param targetId ID of the target - * @return {Boolean} True if the target is normalized, false otherwise. - */ - ChartInternal.prototype.isTargetNormalized = function (targetId) { - var $$ = this; - return ($$.isStackNormalized() && - $$.config.data_groups.some(function (group) { return group.includes(targetId); })); - }; - ChartInternal.prototype.getXKey = function (id) { - var $$ = this, config = $$.config; - return config.data_x - ? config.data_x - : notEmpty(config.data_xs) - ? config.data_xs[id] - : null; - }; - /** - * Get sum of visible data per index for given axis. - * - * Expect axisId to be either 'y' or 'y2'. - * - * @private - * @param axisId Compute sum for data associated to given axis. - * @return {Array} - */ - ChartInternal.prototype.getTotalPerIndex = function (axisId) { - var $$ = this; - if (!$$.isStackNormalized()) { - return null; - } - var cached = $$.getFromCache('getTotalPerIndex'); - if (cached !== undefined) { - return cached[axisId]; - } - var sum = { y: [], y2: [] }; - $$.data.targets - // keep only target that are normalized - .filter(function (target) { return $$.isTargetNormalized(target.id); }) - // keep only target that are visible - .filter(function (target) { return $$.isTargetToShow(target.id); }) - // compute sum per axis - .forEach(function (target) { - var sumByAxis = sum[$$.axis.getId(target.id)]; - target.values.forEach(function (v, i) { - if (!sumByAxis[i]) { - sumByAxis[i] = 0; - } - sumByAxis[i] += isNumber(v.value) ? v.value : 0; - }); - }); - $$.addToCache('getTotalPerIndex', sum); - return sum[axisId]; - }; - /** - * Get sum of visible data. - * - * Should be used for normalised data only since all values - * are expected to be positive. - * - * @private - * @return {Number} - */ - ChartInternal.prototype.getTotalDataSum = function () { - var $$ = this; - var cached = $$.getFromCache('getTotalDataSum'); - if (cached !== undefined) { - return cached; - } - var totalDataSum = flattenArray($$.data.targets - .filter(function (target) { return $$.isTargetToShow(target.id); }) - .map(function (target) { return target.values; })) - .map(function (d) { return d.value; }) - .reduce(function (p, c) { return p + c; }, 0); - $$.addToCache('getTotalDataSum', totalDataSum); - return totalDataSum; - }; - ChartInternal.prototype.getXValuesOfXKey = function (key, targets) { - var $$ = this, xValues, ids = targets && notEmpty(targets) ? $$.mapToIds(targets) : []; - ids.forEach(function (id) { - if ($$.getXKey(id) === key) { - xValues = $$.data.xs[id]; - } - }); - return xValues; - }; - ChartInternal.prototype.getXValue = function (id, i) { - var $$ = this; - return id in $$.data.xs && $$.data.xs[id] && isValue($$.data.xs[id][i]) - ? $$.data.xs[id][i] - : i; - }; - ChartInternal.prototype.getOtherTargetXs = function () { - var $$ = this, idsForX = Object.keys($$.data.xs); - return idsForX.length ? $$.data.xs[idsForX[0]] : null; - }; - ChartInternal.prototype.getOtherTargetX = function (index) { - var xs = this.getOtherTargetXs(); - return xs && index < xs.length ? xs[index] : null; - }; - ChartInternal.prototype.addXs = function (xs) { - var $$ = this; - Object.keys(xs).forEach(function (id) { - $$.config.data_xs[id] = xs[id]; - }); - }; - ChartInternal.prototype.addName = function (data) { - var $$ = this, name; - if (data) { - name = $$.config.data_names[data.id]; - data.name = name !== undefined ? name : data.id; - } - return data; - }; - ChartInternal.prototype.getValueOnIndex = function (values, index) { - var valueOnIndex = values.filter(function (v) { - return v.index === index; - }); - return valueOnIndex.length ? valueOnIndex[0] : null; - }; - ChartInternal.prototype.updateTargetX = function (targets, x) { - var $$ = this; - targets.forEach(function (t) { - t.values.forEach(function (v, i) { - v.x = $$.generateTargetX(x[i], t.id, i); - }); - $$.data.xs[t.id] = x; - }); - }; - ChartInternal.prototype.updateTargetXs = function (targets, xs) { - var $$ = this; - targets.forEach(function (t) { - if (xs[t.id]) { - $$.updateTargetX([t], xs[t.id]); - } - }); - }; - ChartInternal.prototype.generateTargetX = function (rawX, id, index) { - var $$ = this, x; - if ($$.isTimeSeries()) { - x = rawX ? $$.parseDate(rawX) : $$.parseDate($$.getXValue(id, index)); - } - else if ($$.isCustomX() && !$$.isCategorized()) { - x = isValue(rawX) ? +rawX : $$.getXValue(id, index); - } - else { - x = index; - } - return x; - }; - ChartInternal.prototype.cloneTarget = function (target) { - return { - id: target.id, - id_org: target.id_org, - values: target.values.map(function (d) { - return { - x: d.x, - value: d.value, - id: d.id - }; - }) - }; - }; - ChartInternal.prototype.getMaxDataCount = function () { - var $$ = this; - return $$.d3.max($$.data.targets, function (t) { - return t.values.length; - }); - }; - ChartInternal.prototype.mapToIds = function (targets) { - return targets.map(function (d) { - return d.id; - }); - }; - ChartInternal.prototype.mapToTargetIds = function (ids) { - var $$ = this; - return ids ? [].concat(ids) : $$.mapToIds($$.data.targets); - }; - ChartInternal.prototype.hasTarget = function (targets, id) { - var ids = this.mapToIds(targets), i; - for (i = 0; i < ids.length; i++) { - if (ids[i] === id) { - return true; - } - } - return false; - }; - ChartInternal.prototype.isTargetToShow = function (targetId) { - return this.hiddenTargetIds.indexOf(targetId) < 0; - }; - ChartInternal.prototype.isLegendToShow = function (targetId) { - return this.hiddenLegendIds.indexOf(targetId) < 0; - }; - /** - * Returns only visible targets. - * - * This is the same as calling {@link filterTargetsToShow} on $$.data.targets. - * - * @return {Array} - */ - ChartInternal.prototype.getTargetsToShow = function () { - var $$ = this; - return $$.filterTargetsToShow($$.data.targets); - }; - ChartInternal.prototype.filterTargetsToShow = function (targets) { - var $$ = this; - return targets.filter(function (t) { - return $$.isTargetToShow(t.id); - }); - }; - /** - * @return {Array} Returns all the targets attached to the chart, visible or not - */ - ChartInternal.prototype.getTargets = function () { - var $$ = this; - return $$.data.targets; - }; - ChartInternal.prototype.mapTargetsToUniqueXs = function (targets) { - var $$ = this; - var xs = $$.d3 - .set($$.d3.merge(targets.map(function (t) { - return t.values.map(function (v) { - return +v.x; - }); - }))) - .values(); - xs = $$.isTimeSeries() - ? xs.map(function (x) { - return new Date(+x); - }) - : xs.map(function (x) { - return +x; - }); - return xs.sort(function (a, b) { - return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN; - }); - }; - ChartInternal.prototype.addHiddenTargetIds = function (targetIds) { - targetIds = targetIds instanceof Array ? targetIds : new Array(targetIds); - for (var i = 0; i < targetIds.length; i++) { - if (this.hiddenTargetIds.indexOf(targetIds[i]) < 0) { - this.hiddenTargetIds = this.hiddenTargetIds.concat(targetIds[i]); - } - } - this.resetCache(); - }; - ChartInternal.prototype.removeHiddenTargetIds = function (targetIds) { - this.hiddenTargetIds = this.hiddenTargetIds.filter(function (id) { - return targetIds.indexOf(id) < 0; - }); - this.resetCache(); - }; - ChartInternal.prototype.addHiddenLegendIds = function (targetIds) { - targetIds = targetIds instanceof Array ? targetIds : new Array(targetIds); - for (var i = 0; i < targetIds.length; i++) { - if (this.hiddenLegendIds.indexOf(targetIds[i]) < 0) { - this.hiddenLegendIds = this.hiddenLegendIds.concat(targetIds[i]); - } - } - }; - ChartInternal.prototype.removeHiddenLegendIds = function (targetIds) { - this.hiddenLegendIds = this.hiddenLegendIds.filter(function (id) { - return targetIds.indexOf(id) < 0; - }); - }; - ChartInternal.prototype.getValuesAsIdKeyed = function (targets) { - var ys = {}; - targets.forEach(function (t) { - ys[t.id] = []; - t.values.forEach(function (v) { - ys[t.id].push(v.value); - }); - }); - return ys; - }; - ChartInternal.prototype.checkValueInTargets = function (targets, checker) { - var ids = Object.keys(targets), i, j, values; - for (i = 0; i < ids.length; i++) { - values = targets[ids[i]].values; - for (j = 0; j < values.length; j++) { - if (checker(values[j].value)) { - return true; - } - } - } - return false; - }; - ChartInternal.prototype.hasNegativeValueInTargets = function (targets) { - return this.checkValueInTargets(targets, function (v) { - return v < 0; - }); - }; - ChartInternal.prototype.hasPositiveValueInTargets = function (targets) { - return this.checkValueInTargets(targets, function (v) { - return v > 0; - }); - }; - ChartInternal.prototype.isOrderDesc = function () { - var config = this.config; - return (typeof config.data_order === 'string' && - config.data_order.toLowerCase() === 'desc'); - }; - ChartInternal.prototype.isOrderAsc = function () { - var config = this.config; - return (typeof config.data_order === 'string' && - config.data_order.toLowerCase() === 'asc'); - }; - ChartInternal.prototype.getOrderFunction = function () { - var $$ = this, config = $$.config, orderAsc = $$.isOrderAsc(), orderDesc = $$.isOrderDesc(); - if (orderAsc || orderDesc) { - var reducer = function (p, c) { - return p + Math.abs(c.value); - }; - return function (t1, t2) { - var t1Sum = t1.values.reduce(reducer, 0), t2Sum = t2.values.reduce(reducer, 0); - return orderAsc ? t2Sum - t1Sum : t1Sum - t2Sum; - }; - } - else if (isFunction(config.data_order)) { - return config.data_order; - } - else if (isArray(config.data_order)) { - var order = config.data_order; - return function (t1, t2) { - return order.indexOf(t1.id) - order.indexOf(t2.id); - }; - } - }; - ChartInternal.prototype.orderTargets = function (targets) { - var fct = this.getOrderFunction(); - if (fct) { - targets.sort(fct); - } - return targets; - }; - /** - * Returns all the values from the given targets at the given index. - * - * @param {Array} targets - * @param {Number} index - * @return {Array} - */ - ChartInternal.prototype.filterByIndex = function (targets, index) { - return this.d3.merge(targets.map(function (t) { return t.values.filter(function (v) { return v.index === index; }); })); - }; - ChartInternal.prototype.filterByX = function (targets, x) { - return this.d3 - .merge(targets.map(function (t) { - return t.values; - })) - .filter(function (v) { - return v.x - x === 0; - }); - }; - ChartInternal.prototype.filterRemoveNull = function (data) { - return data.filter(function (d) { - return isValue(d.value); - }); - }; - ChartInternal.prototype.filterByXDomain = function (targets, xDomain) { - return targets.map(function (t) { - return { - id: t.id, - id_org: t.id_org, - values: t.values.filter(function (v) { - return xDomain[0] <= v.x && v.x <= xDomain[1]; - }) - }; - }); - }; - ChartInternal.prototype.hasDataLabel = function () { - var config = this.config; - if (typeof config.data_labels === 'boolean' && config.data_labels) { - return true; - } - else if (typeof config.data_labels === 'object' && - notEmpty(config.data_labels)) { - return true; - } - return false; - }; - ChartInternal.prototype.getDataLabelLength = function (min, max, key) { - var $$ = this, lengths = [0, 0], paddingCoef = 1.3; - $$.selectChart - .select('svg') - .selectAll('.dummy') - .data([min, max]) - .enter() - .append('text') - .text(function (d) { - return $$.dataLabelFormat(d.id)(d); - }) - .each(function (d, i) { - lengths[i] = getBBox(this)[key] * paddingCoef; - }) - .remove(); - return lengths; - }; - /** - * Returns true if the given data point is not arc type, otherwise false. - * @param {Object} d The data point - * @return {boolean} - */ - ChartInternal.prototype.isNoneArc = function (d) { - return this.hasTarget(this.data.targets, d.id); - }; - /** - * Returns true if the given data point is arc type, otherwise false. - * @param {Object} d The data point - * @return {boolean} - */ - ChartInternal.prototype.isArc = function (d) { - return 'data' in d && this.hasTarget(this.data.targets, d.data.id); - }; - /** - * Find the closest point from the given pos among the given targets or - * undefined if none satisfies conditions. - * - * @param {Array} targets - * @param {Array} pos An [x,y] coordinate - * @return {Object|undefined} - */ - ChartInternal.prototype.findClosestFromTargets = function (targets, pos) { - var $$ = this; - // for each target, find the closest point - var candidates = targets - .map(function (t) { - return $$.findClosest(t.values, pos, $$.config.tooltip_horizontal - ? $$.horizontalDistance.bind($$) - : $$.dist.bind($$), $$.config.point_sensitivity); - }) - .filter(function (v) { return v; }); - // returns the closest of candidates - if (candidates.length === 0) { - return undefined; - } - else if (candidates.length === 1) { - return candidates[0]; - } - else { - return $$.findClosest(candidates, pos, $$.dist.bind($$)); - } - }; - /** - * Find the closest point from the x value or undefined if none satisfies conditions. - * - * @param {Array} targets - * @param {Array} x A value on X axis - * @return {Object|undefined} - */ - ChartInternal.prototype.findClosestFromTargetsByX = function (targets, x) { - var closest; - var diff; - targets.forEach(function (t) { - t.values.forEach(function (d) { - var newDiff = Math.abs(x - d.x); - if (diff === undefined || newDiff < diff) { - closest = d; - diff = newDiff; - } - }); - }); - return closest; - }; - /** - * Using given compute distance method, returns the closest data point from the - * given position. - * - * Giving optionally a minimum distance to satisfy. - * - * @param {Array} dataPoints List of DataPoints - * @param {Array} pos An [x,y] coordinate - * @param {Function} computeDist Function to compute distance between 2 points - * @param {Number} minDist Minimal distance to satisfy - * @return {Object|undefined} Closest data point - */ - ChartInternal.prototype.findClosest = function (dataPoints, pos, computeDist, minDist) { - if (minDist === void 0) { minDist = Infinity; } - var $$ = this; - var closest; - // find closest bar - dataPoints - .filter(function (v) { return v && $$.isBarType(v.id); }) - .forEach(function (v) { - if (!closest) { - var shape = $$.main - .select('.' + - CLASS.bars + - $$.getTargetSelectorSuffix(v.id) + - ' .' + - CLASS.bar + - '-' + - v.index) - .node(); - if ($$.isWithinBar(pos, shape)) { - closest = v; - } - } - }); - // find closest point from non-bar - dataPoints - .filter(function (v) { return v && !$$.isBarType(v.id); }) - .forEach(function (v) { - var d = computeDist(v, pos); - if (d < minDist) { - minDist = d; - closest = v; - } - }); - return closest; - }; - ChartInternal.prototype.dist = function (data, pos) { - var $$ = this, config = $$.config, xIndex = config.axis_rotated ? 1 : 0, yIndex = config.axis_rotated ? 0 : 1, y = $$.circleY(data, data.index), x = $$.x(data.x); - return Math.sqrt(Math.pow(x - pos[xIndex], 2) + Math.pow(y - pos[yIndex], 2)); - }; - ChartInternal.prototype.horizontalDistance = function (data, pos) { - var $$ = this, config = $$.config, xIndex = config.axis_rotated ? 1 : 0, x = $$.x(data.x); - return Math.abs(x - pos[xIndex]); - }; - ChartInternal.prototype.convertValuesToStep = function (values) { - var converted = [].concat(values), i; - if (!this.isCategorized()) { - return values; - } - for (i = values.length + 1; 0 < i; i--) { - converted[i] = converted[i - 1]; - } - converted[0] = { - x: converted[0].x - 1, - value: converted[0].value, - id: converted[0].id - }; - converted[values.length + 1] = { - x: converted[values.length].x + 1, - value: converted[values.length].value, - id: converted[values.length].id - }; - return converted; - }; - /** - * Get ratio value - * - * @param {String} type Ratio for given type - * @param {Object} d Data value object - * @param {Boolean} asPercent Convert the return as percent or not - * @return {Number} Ratio value - * @private - */ - ChartInternal.prototype.getRatio = function (type, d, asPercent) { - if (asPercent === void 0) { asPercent = false; } - var $$ = this; - var api = $$.api; - var ratio = 0; - if (d && api.data.shown.call(api).length) { - ratio = d.ratio || d.value; - if (type === 'arc') { - if ($$.hasType('gauge')) { - ratio = - (d.endAngle - d.startAngle) / - (Math.PI * ($$.config.gauge_fullCircle ? 2 : 1)); - } - else { - var total = $$.getTotalDataSum(); - ratio = d.value / total; - } - } - else if (type === 'index') { - var total = $$.getTotalPerIndex($$.axis.getId(d.id)); - d.ratio = - isNumber(d.value) && total && total[d.index] > 0 - ? d.value / total[d.index] - : 0; - ratio = d.ratio; - } - } - return asPercent && ratio ? ratio * 100 : ratio; - }; - ChartInternal.prototype.updateDataAttributes = function (name, attrs) { - var $$ = this, config = $$.config, current = config['data_' + name]; - if (typeof attrs === 'undefined') { - return current; - } - Object.keys(attrs).forEach(function (id) { - current[id] = attrs[id]; - }); - $$.redraw({ - withLegend: true - }); - return current; - }; - - ChartInternal.prototype.load = function (targets, args) { - var $$ = this; - if (targets) { - // filter loading targets if needed - if (args.filter) { - targets = targets.filter(args.filter); - } - // set type if args.types || args.type specified - if (args.type || args.types) { - targets.forEach(function (t) { - var type = args.types && args.types[t.id] ? args.types[t.id] : args.type; - $$.setTargetType(t.id, type); - }); - } - // Update/Add data - $$.data.targets.forEach(function (d) { - for (var i = 0; i < targets.length; i++) { - if (d.id === targets[i].id) { - d.values = targets[i].values; - targets.splice(i, 1); - break; - } - } - }); - $$.data.targets = $$.data.targets.concat(targets); // add remained - } - // Set targets - $$.updateTargets($$.data.targets); - // Redraw with new targets - $$.redraw({ - withUpdateOrgXDomain: true, - withUpdateXDomain: true, - withLegend: true - }); - if (args.done) { - args.done(); - } - }; - ChartInternal.prototype.loadFromArgs = function (args) { - var $$ = this; - $$.resetCache(); - if (args.data) { - $$.load($$.convertDataToTargets(args.data), args); - } - else if (args.url) { - $$.convertUrlToData(args.url, args.mimeType, args.headers, args.keys, function (data) { - $$.load($$.convertDataToTargets(data), args); - }); - } - else if (args.json) { - $$.load($$.convertDataToTargets($$.convertJsonToData(args.json, args.keys)), args); - } - else if (args.rows) { - $$.load($$.convertDataToTargets($$.convertRowsToData(args.rows)), args); - } - else if (args.columns) { - $$.load($$.convertDataToTargets($$.convertColumnsToData(args.columns)), args); - } - else { - $$.load(null, args); - } - }; - ChartInternal.prototype.unload = function (targetIds, done) { - var $$ = this; - $$.resetCache(); - if (!done) { - done = function () { }; - } - // filter existing target - targetIds = targetIds.filter(function (id) { - return $$.hasTarget($$.data.targets, id); - }); - // If no target, call done and return - if (!targetIds || targetIds.length === 0) { - done(); - return; - } - $$.svg - .selectAll(targetIds.map(function (id) { - return $$.selectorTarget(id); - })) - .transition() - .style('opacity', 0) - .remove() - .call($$.endall, done); - targetIds.forEach(function (id) { - // Reset fadein for future load - $$.withoutFadeIn[id] = false; - // Remove target's elements - if ($$.legend) { - $$.legend - .selectAll('.' + CLASS.legendItem + $$.getTargetSelectorSuffix(id)) - .remove(); - } - // Remove target - $$.data.targets = $$.data.targets.filter(function (t) { - return t.id !== id; - }); - }); - }; - - ChartInternal.prototype.getYDomainMin = function (targets) { - var $$ = this, config = $$.config, ids = $$.mapToIds(targets), ys = $$.getValuesAsIdKeyed(targets), j, k, baseId, idsInGroup, id, hasNegativeValue; - if (config.data_groups.length > 0) { - hasNegativeValue = $$.hasNegativeValueInTargets(targets); - for (j = 0; j < config.data_groups.length; j++) { - // Determine baseId - idsInGroup = config.data_groups[j].filter(function (id) { - return ids.indexOf(id) >= 0; - }); - if (idsInGroup.length === 0) { - continue; - } - baseId = idsInGroup[0]; - // Consider negative values - if (hasNegativeValue && ys[baseId]) { - ys[baseId].forEach(function (v, i) { - ys[baseId][i] = v < 0 ? v : 0; - }); - } - // Compute min - for (k = 1; k < idsInGroup.length; k++) { - id = idsInGroup[k]; - if (!ys[id]) { - continue; - } - ys[id].forEach(function (v, i) { - if ($$.axis.getId(id) === $$.axis.getId(baseId) && - ys[baseId] && - !(hasNegativeValue && +v > 0)) { - ys[baseId][i] += +v; - } - }); - } - } - } - return $$.d3.min(Object.keys(ys).map(function (key) { - return $$.d3.min(ys[key]); - })); - }; - ChartInternal.prototype.getYDomainMax = function (targets) { - var $$ = this, config = $$.config, ids = $$.mapToIds(targets), ys = $$.getValuesAsIdKeyed(targets), j, k, baseId, idsInGroup, id, hasPositiveValue; - if (config.data_groups.length > 0) { - hasPositiveValue = $$.hasPositiveValueInTargets(targets); - for (j = 0; j < config.data_groups.length; j++) { - // Determine baseId - idsInGroup = config.data_groups[j].filter(function (id) { - return ids.indexOf(id) >= 0; - }); - if (idsInGroup.length === 0) { - continue; - } - baseId = idsInGroup[0]; - // Consider positive values - if (hasPositiveValue && ys[baseId]) { - ys[baseId].forEach(function (v, i) { - ys[baseId][i] = v > 0 ? v : 0; - }); - } - // Compute max - for (k = 1; k < idsInGroup.length; k++) { - id = idsInGroup[k]; - if (!ys[id]) { - continue; - } - ys[id].forEach(function (v, i) { - if ($$.axis.getId(id) === $$.axis.getId(baseId) && - ys[baseId] && - !(hasPositiveValue && +v < 0)) { - ys[baseId][i] += +v; - } - }); - } - } - } - return $$.d3.max(Object.keys(ys).map(function (key) { - return $$.d3.max(ys[key]); - })); - }; - ChartInternal.prototype.getYDomain = function (targets, axisId, xDomain) { - var $$ = this, config = $$.config; - if ($$.isAxisNormalized(axisId)) { - return [0, 100]; - } - var targetsByAxisId = targets.filter(function (t) { - return $$.axis.getId(t.id) === axisId; - }), yTargets = xDomain - ? $$.filterByXDomain(targetsByAxisId, xDomain) - : targetsByAxisId, yMin = axisId === 'y2' ? config.axis_y2_min : config.axis_y_min, yMax = axisId === 'y2' ? config.axis_y2_max : config.axis_y_max, yDomainMin = $$.getYDomainMin(yTargets), yDomainMax = $$.getYDomainMax(yTargets), domain, domainLength, padding_top, padding_bottom, center = axisId === 'y2' ? config.axis_y2_center : config.axis_y_center, yDomainAbs, lengths, diff, ratio, isAllPositive, isAllNegative, isZeroBased = ($$.hasType('bar', yTargets) && config.bar_zerobased) || - ($$.hasType('area', yTargets) && config.area_zerobased), isInverted = axisId === 'y2' ? config.axis_y2_inverted : config.axis_y_inverted, showHorizontalDataLabel = $$.hasDataLabel() && config.axis_rotated, showVerticalDataLabel = $$.hasDataLabel() && !config.axis_rotated; - // MEMO: avoid inverting domain unexpectedly - yDomainMin = isValue(yMin) - ? yMin - : isValue(yMax) - ? yDomainMin < yMax - ? yDomainMin - : yMax - 10 - : yDomainMin; - yDomainMax = isValue(yMax) - ? yMax - : isValue(yMin) - ? yMin < yDomainMax - ? yDomainMax - : yMin + 10 - : yDomainMax; - if (yTargets.length === 0) { - // use current domain if target of axisId is none - return axisId === 'y2' ? $$.y2.domain() : $$.y.domain(); - } - if (isNaN(yDomainMin)) { - // set minimum to zero when not number - yDomainMin = 0; - } - if (isNaN(yDomainMax)) { - // set maximum to have same value as yDomainMin - yDomainMax = yDomainMin; - } - if (yDomainMin === yDomainMax) { - yDomainMin < 0 ? (yDomainMax = 0) : (yDomainMin = 0); - } - isAllPositive = yDomainMin >= 0 && yDomainMax >= 0; - isAllNegative = yDomainMin <= 0 && yDomainMax <= 0; - // Cancel zerobased if axis_*_min / axis_*_max specified - if ((isValue(yMin) && isAllPositive) || (isValue(yMax) && isAllNegative)) { - isZeroBased = false; - } - // Bar/Area chart should be 0-based if all positive|negative - if (isZeroBased) { - if (isAllPositive) { - yDomainMin = 0; - } - if (isAllNegative) { - yDomainMax = 0; - } - } - domainLength = Math.abs(yDomainMax - yDomainMin); - padding_top = padding_bottom = domainLength * 0.1; - if (typeof center !== 'undefined') { - yDomainAbs = Math.max(Math.abs(yDomainMin), Math.abs(yDomainMax)); - yDomainMax = center + yDomainAbs; - yDomainMin = center - yDomainAbs; - } - // add padding for data label - if (showHorizontalDataLabel) { - lengths = $$.getDataLabelLength(yDomainMin, yDomainMax, 'width'); - diff = diffDomain($$.y.range()); - ratio = [lengths[0] / diff, lengths[1] / diff]; - padding_top += domainLength * (ratio[1] / (1 - ratio[0] - ratio[1])); - padding_bottom += domainLength * (ratio[0] / (1 - ratio[0] - ratio[1])); - } - else if (showVerticalDataLabel) { - lengths = $$.getDataLabelLength(yDomainMin, yDomainMax, 'height'); - var pixelsToAxisPadding = $$.getY(config["axis_" + axisId + "_type"], - // input domain as pixels - [0, config.axis_rotated ? $$.width : $$.height], - // output range as axis padding - [0, domainLength]); - padding_top += pixelsToAxisPadding(lengths[1]); - padding_bottom += pixelsToAxisPadding(lengths[0]); - } - if (axisId === 'y' && notEmpty(config.axis_y_padding)) { - padding_top = $$.axis.getPadding(config.axis_y_padding, 'top', padding_top, domainLength); - padding_bottom = $$.axis.getPadding(config.axis_y_padding, 'bottom', padding_bottom, domainLength); - } - if (axisId === 'y2' && notEmpty(config.axis_y2_padding)) { - padding_top = $$.axis.getPadding(config.axis_y2_padding, 'top', padding_top, domainLength); - padding_bottom = $$.axis.getPadding(config.axis_y2_padding, 'bottom', padding_bottom, domainLength); - } - // Bar/Area chart should be 0-based if all positive|negative - if (isZeroBased) { - if (isAllPositive) { - padding_bottom = yDomainMin; - } - if (isAllNegative) { - padding_top = -yDomainMax; - } - } - domain = [yDomainMin - padding_bottom, yDomainMax + padding_top]; - return isInverted ? domain.reverse() : domain; - }; - ChartInternal.prototype.getXDomainMin = function (targets) { - var $$ = this, config = $$.config; - return isDefined(config.axis_x_min) - ? $$.isTimeSeries() - ? this.parseDate(config.axis_x_min) - : config.axis_x_min - : $$.d3.min(targets, function (t) { - return $$.d3.min(t.values, function (v) { - return v.x; - }); - }); - }; - ChartInternal.prototype.getXDomainMax = function (targets) { - var $$ = this, config = $$.config; - return isDefined(config.axis_x_max) - ? $$.isTimeSeries() - ? this.parseDate(config.axis_x_max) - : config.axis_x_max - : $$.d3.max(targets, function (t) { - return $$.d3.max(t.values, function (v) { - return v.x; - }); - }); - }; - ChartInternal.prototype.getXDomainPadding = function (domain) { - var $$ = this, config = $$.config, diff = domain[1] - domain[0], maxDataCount, padding, paddingLeft, paddingRight; - if ($$.isCategorized()) { - padding = 0; - } - else if ($$.hasType('bar')) { - maxDataCount = $$.getMaxDataCount(); - padding = maxDataCount > 1 ? diff / (maxDataCount - 1) / 2 : 0.5; - } - else { - padding = diff * 0.01; - } - if (typeof config.axis_x_padding === 'object' && - notEmpty(config.axis_x_padding)) { - paddingLeft = isValue(config.axis_x_padding.left) - ? config.axis_x_padding.left - : padding; - paddingRight = isValue(config.axis_x_padding.right) - ? config.axis_x_padding.right - : padding; - } - else if (typeof config.axis_x_padding === 'number') { - paddingLeft = paddingRight = config.axis_x_padding; - } - else { - paddingLeft = paddingRight = padding; - } - return { left: paddingLeft, right: paddingRight }; - }; - ChartInternal.prototype.getXDomain = function (targets) { - var $$ = this, xDomain = [$$.getXDomainMin(targets), $$.getXDomainMax(targets)], firstX = xDomain[0], lastX = xDomain[1], padding = $$.getXDomainPadding(xDomain), min = 0, max = 0; - // show center of x domain if min and max are the same - if (firstX - lastX === 0 && !$$.isCategorized()) { - if ($$.isTimeSeries()) { - firstX = new Date(firstX.getTime() * 0.5); - lastX = new Date(lastX.getTime() * 1.5); - } - else { - firstX = firstX === 0 ? 1 : firstX * 0.5; - lastX = lastX === 0 ? -1 : lastX * 1.5; - } - } - if (firstX || firstX === 0) { - min = $$.isTimeSeries() - ? new Date(firstX.getTime() - padding.left) - : firstX - padding.left; - } - if (lastX || lastX === 0) { - max = $$.isTimeSeries() - ? new Date(lastX.getTime() + padding.right) - : lastX + padding.right; - } - return [min, max]; - }; - ChartInternal.prototype.updateXDomain = function (targets, withUpdateXDomain, withUpdateOrgXDomain, withTrim, domain) { - var $$ = this, config = $$.config; - if (withUpdateOrgXDomain) { - $$.x.domain(domain ? domain : $$.d3.extent($$.getXDomain(targets))); - $$.orgXDomain = $$.x.domain(); - if (config.zoom_enabled) { - $$.zoom.update(); - } - $$.subX.domain($$.x.domain()); - if ($$.brush) { - $$.brush.updateScale($$.subX); - } - } - if (withUpdateXDomain) { - $$.x.domain(domain - ? domain - : !$$.brush || $$.brush.empty() - ? $$.orgXDomain - : $$.brush.selectionAsValue()); - } - // Trim domain when too big by zoom mousemove event - if (withTrim) { - $$.x.domain($$.trimXDomain($$.x.orgDomain())); - } - return $$.x.domain(); - }; - ChartInternal.prototype.trimXDomain = function (domain) { - var zoomDomain = this.getZoomDomain(), min = zoomDomain[0], max = zoomDomain[1]; - if (domain[0] <= min) { - domain[1] = +domain[1] + (min - domain[0]); - domain[0] = min; - } - if (max <= domain[1]) { - domain[0] = +domain[0] - (domain[1] - max); - domain[1] = max; - } - return domain; - }; - - ChartInternal.prototype.drag = function (mouse) { - var $$ = this, config = $$.config, main = $$.main, d3 = $$.d3; - var sx, sy, mx, my, minX, maxX, minY, maxY; - if ($$.hasArcType()) { - return; - } - if (!config.data_selection_enabled) { - return; - } // do nothing if not selectable - if (!config.data_selection_multiple) { - return; - } // skip when single selection because drag is used for multiple selection - sx = $$.dragStart[0]; - sy = $$.dragStart[1]; - mx = mouse[0]; - my = mouse[1]; - minX = Math.min(sx, mx); - maxX = Math.max(sx, mx); - minY = config.data_selection_grouped ? $$.margin.top : Math.min(sy, my); - maxY = config.data_selection_grouped ? $$.height : Math.max(sy, my); - main - .select('.' + CLASS.dragarea) - .attr('x', minX) - .attr('y', minY) - .attr('width', maxX - minX) - .attr('height', maxY - minY); - // TODO: binary search when multiple xs - main - .selectAll('.' + CLASS.shapes) - .selectAll('.' + CLASS.shape) - .each(function (d, i) { - if (!config.data_selection_isselectable(d)) { - return; - } - var shape = d3.select(this), isSelected = shape.classed(CLASS.SELECTED), isIncluded = shape.classed(CLASS.INCLUDED), _x, _y, _w, _h, toggle, isWithin = false, box; - if (shape.classed(CLASS.circle)) { - _x = shape.attr('cx') * 1; - _y = shape.attr('cy') * 1; - toggle = $$.togglePoint; - isWithin = minX < _x && _x < maxX && minY < _y && _y < maxY; - } - else if (shape.classed(CLASS.bar)) { - box = getPathBox(this); - _x = box.x; - _y = box.y; - _w = box.width; - _h = box.height; - toggle = $$.togglePath; - isWithin = - !(maxX < _x || _x + _w < minX) && !(maxY < _y || _y + _h < minY); - } - else { - // line/area selection not supported yet - return; - } - if (isWithin ^ isIncluded) { - shape.classed(CLASS.INCLUDED, !isIncluded); - // TODO: included/unincluded callback here - shape.classed(CLASS.SELECTED, !isSelected); - toggle.call($$, !isSelected, shape, d, i); - } - }); - }; - ChartInternal.prototype.dragstart = function (mouse) { - var $$ = this, config = $$.config; - if ($$.hasArcType()) { - return; - } - if (!config.data_selection_enabled) { - return; - } // do nothing if not selectable - $$.dragStart = mouse; - $$.main - .select('.' + CLASS.chart) - .append('rect') - .attr('class', CLASS.dragarea) - .style('opacity', 0.1); - $$.dragging = true; - }; - ChartInternal.prototype.dragend = function () { - var $$ = this, config = $$.config; - if ($$.hasArcType()) { - return; - } - if (!config.data_selection_enabled) { - return; - } // do nothing if not selectable - $$.main - .select('.' + CLASS.dragarea) - .transition() - .duration(100) - .style('opacity', 0) - .remove(); - $$.main.selectAll('.' + CLASS.shape).classed(CLASS.INCLUDED, false); - $$.dragging = false; - }; - - ChartInternal.prototype.getYFormat = function (forArc) { - var $$ = this, formatForY = forArc && !$$.hasType('gauge') ? $$.defaultArcValueFormat : $$.yFormat, formatForY2 = forArc && !$$.hasType('gauge') ? $$.defaultArcValueFormat : $$.y2Format; - return function (v, ratio, id) { - var format = $$.axis.getId(id) === 'y2' ? formatForY2 : formatForY; - return format.call($$, v, ratio); - }; - }; - ChartInternal.prototype.yFormat = function (v) { - var $$ = this, config = $$.config, format = config.axis_y_tick_format - ? config.axis_y_tick_format - : $$.defaultValueFormat; - return format(v); - }; - ChartInternal.prototype.y2Format = function (v) { - var $$ = this, config = $$.config, format = config.axis_y2_tick_format - ? config.axis_y2_tick_format - : $$.defaultValueFormat; - return format(v); - }; - ChartInternal.prototype.defaultValueFormat = function (v) { - return isValue(v) ? +v : ''; - }; - ChartInternal.prototype.defaultArcValueFormat = function (v, ratio) { - return (ratio * 100).toFixed(1) + '%'; - }; - ChartInternal.prototype.dataLabelFormat = function (targetId) { - var $$ = this, data_labels = $$.config.data_labels, format, defaultFormat = function (v) { - return isValue(v) ? +v : ''; - }; - // find format according to axis id - if (typeof data_labels.format === 'function') { - format = data_labels.format; - } - else if (typeof data_labels.format === 'object') { - if (data_labels.format[targetId]) { - format = - data_labels.format[targetId] === true - ? defaultFormat - : data_labels.format[targetId]; - } - else { - format = function () { - return ''; - }; - } - } - else { - format = defaultFormat; - } - return format; - }; - - ChartInternal.prototype.initGrid = function () { - var $$ = this, config = $$.config, d3 = $$.d3; - $$.grid = $$.main - .append('g') - .attr('clip-path', $$.clipPathForGrid) - .attr('class', CLASS.grid); - if (config.grid_x_show) { - $$.grid.append('g').attr('class', CLASS.xgrids); - } - if (config.grid_y_show) { - $$.grid.append('g').attr('class', CLASS.ygrids); - } - if (config.grid_focus_show) { - $$.grid - .append('g') - .attr('class', CLASS.xgridFocus) - .append('line') - .attr('class', CLASS.xgridFocus); - } - $$.xgrid = d3.selectAll([]); - if (!config.grid_lines_front) { - $$.initGridLines(); - } - }; - ChartInternal.prototype.initGridLines = function () { - var $$ = this, d3 = $$.d3; - $$.gridLines = $$.main - .append('g') - .attr('clip-path', $$.clipPathForGrid) - .attr('class', CLASS.grid + ' ' + CLASS.gridLines); - $$.gridLines.append('g').attr('class', CLASS.xgridLines); - $$.gridLines.append('g').attr('class', CLASS.ygridLines); - $$.xgridLines = d3.selectAll([]); - }; - ChartInternal.prototype.updateXGrid = function (withoutUpdate) { - var $$ = this, config = $$.config, d3 = $$.d3, xgridData = $$.generateGridData(config.grid_x_type, $$.x), tickOffset = $$.isCategorized() ? $$.xAxis.tickOffset() : 0; - $$.xgridAttr = config.axis_rotated - ? { - x1: 0, - x2: $$.width, - y1: function (d) { - return $$.x(d) - tickOffset; - }, - y2: function (d) { - return $$.x(d) - tickOffset; - } - } - : { - x1: function (d) { - return $$.x(d) + tickOffset; - }, - x2: function (d) { - return $$.x(d) + tickOffset; - }, - y1: 0, - y2: $$.height - }; - $$.xgridAttr.opacity = function () { - var pos = +d3.select(this).attr(config.axis_rotated ? 'y1' : 'x1'); - return pos === (config.axis_rotated ? $$.height : 0) ? 0 : 1; - }; - var xgrid = $$.main - .select('.' + CLASS.xgrids) - .selectAll('.' + CLASS.xgrid) - .data(xgridData); - var xgridEnter = xgrid - .enter() - .append('line') - .attr('class', CLASS.xgrid) - .attr('x1', $$.xgridAttr.x1) - .attr('x2', $$.xgridAttr.x2) - .attr('y1', $$.xgridAttr.y1) - .attr('y2', $$.xgridAttr.y2) - .style('opacity', 0); - $$.xgrid = xgridEnter.merge(xgrid); - if (!withoutUpdate) { - $$.xgrid - .attr('x1', $$.xgridAttr.x1) - .attr('x2', $$.xgridAttr.x2) - .attr('y1', $$.xgridAttr.y1) - .attr('y2', $$.xgridAttr.y2) - .style('opacity', $$.xgridAttr.opacity); - } - xgrid.exit().remove(); - }; - ChartInternal.prototype.updateYGrid = function () { - var $$ = this, config = $$.config, gridValues = $$.yAxis.tickValues() || $$.y.ticks(config.grid_y_ticks); - var ygrid = $$.main - .select('.' + CLASS.ygrids) - .selectAll('.' + CLASS.ygrid) - .data(gridValues); - var ygridEnter = ygrid - .enter() - .append('line') - // TODO: x1, x2, y1, y2, opacity need to be set here maybe - .attr('class', CLASS.ygrid); - $$.ygrid = ygridEnter.merge(ygrid); - $$.ygrid - .attr('x1', config.axis_rotated ? $$.y : 0) - .attr('x2', config.axis_rotated ? $$.y : $$.width) - .attr('y1', config.axis_rotated ? 0 : $$.y) - .attr('y2', config.axis_rotated ? $$.height : $$.y); - ygrid.exit().remove(); - $$.smoothLines($$.ygrid, 'grid'); - }; - ChartInternal.prototype.gridTextAnchor = function (d) { - return d.position ? d.position : 'end'; - }; - ChartInternal.prototype.gridTextDx = function (d) { - return d.position === 'start' ? 4 : d.position === 'middle' ? 0 : -4; - }; - ChartInternal.prototype.xGridTextX = function (d) { - return d.position === 'start' - ? -this.height - : d.position === 'middle' - ? -this.height / 2 - : 0; - }; - ChartInternal.prototype.yGridTextX = function (d) { - return d.position === 'start' - ? 0 - : d.position === 'middle' - ? this.width / 2 - : this.width; - }; - ChartInternal.prototype.updateGrid = function (duration) { - var $$ = this, main = $$.main, config = $$.config, xgridLine, xgridLineEnter, ygridLine, ygridLineEnter, xv = $$.xv.bind($$), yv = $$.yv.bind($$), xGridTextX = $$.xGridTextX.bind($$), yGridTextX = $$.yGridTextX.bind($$); - // hide if arc type - $$.grid.style('visibility', $$.hasArcType() ? 'hidden' : 'visible'); - main.select('line.' + CLASS.xgridFocus).style('visibility', 'hidden'); - if (config.grid_x_show) { - $$.updateXGrid(); - } - xgridLine = main - .select('.' + CLASS.xgridLines) - .selectAll('.' + CLASS.xgridLine) - .data(config.grid_x_lines); - // enter - xgridLineEnter = xgridLine - .enter() - .append('g') - .attr('class', function (d) { - return CLASS.xgridLine + (d['class'] ? ' ' + d['class'] : ''); - }); - xgridLineEnter - .append('line') - .attr('x1', config.axis_rotated ? 0 : xv) - .attr('x2', config.axis_rotated ? $$.width : xv) - .attr('y1', config.axis_rotated ? xv : 0) - .attr('y2', config.axis_rotated ? xv : $$.height) - .style('opacity', 0); - xgridLineEnter - .append('text') - .attr('text-anchor', $$.gridTextAnchor) - .attr('transform', config.axis_rotated ? '' : 'rotate(-90)') - .attr('x', config.axis_rotated ? yGridTextX : xGridTextX) - .attr('y', xv) - .attr('dx', $$.gridTextDx) - .attr('dy', -5) - .style('opacity', 0); - // udpate - $$.xgridLines = xgridLineEnter.merge(xgridLine); - // done in d3.transition() of the end of this function - // exit - xgridLine - .exit() - .transition() - .duration(duration) - .style('opacity', 0) - .remove(); - // Y-Grid - if (config.grid_y_show) { - $$.updateYGrid(); - } - ygridLine = main - .select('.' + CLASS.ygridLines) - .selectAll('.' + CLASS.ygridLine) - .data(config.grid_y_lines); - // enter - ygridLineEnter = ygridLine - .enter() - .append('g') - .attr('class', function (d) { - return CLASS.ygridLine + (d['class'] ? ' ' + d['class'] : ''); - }); - ygridLineEnter - .append('line') - .attr('x1', config.axis_rotated ? yv : 0) - .attr('x2', config.axis_rotated ? yv : $$.width) - .attr('y1', config.axis_rotated ? 0 : yv) - .attr('y2', config.axis_rotated ? $$.height : yv) - .style('opacity', 0); - ygridLineEnter - .append('text') - .attr('text-anchor', $$.gridTextAnchor) - .attr('transform', config.axis_rotated ? 'rotate(-90)' : '') - .attr('x', config.axis_rotated ? xGridTextX : yGridTextX) - .attr('y', yv) - .attr('dx', $$.gridTextDx) - .attr('dy', -5) - .style('opacity', 0); - // update - $$.ygridLines = ygridLineEnter.merge(ygridLine); - $$.ygridLines - .select('line') - .transition() - .duration(duration) - .attr('x1', config.axis_rotated ? yv : 0) - .attr('x2', config.axis_rotated ? yv : $$.width) - .attr('y1', config.axis_rotated ? 0 : yv) - .attr('y2', config.axis_rotated ? $$.height : yv) - .style('opacity', 1); - $$.ygridLines - .select('text') - .transition() - .duration(duration) - .attr('x', config.axis_rotated ? $$.xGridTextX.bind($$) : $$.yGridTextX.bind($$)) - .attr('y', yv) - .text(function (d) { - return d.text; - }) - .style('opacity', 1); - // exit - ygridLine - .exit() - .transition() - .duration(duration) - .style('opacity', 0) - .remove(); - }; - ChartInternal.prototype.redrawGrid = function (withTransition, transition) { - var $$ = this, config = $$.config, xv = $$.xv.bind($$), lines = $$.xgridLines.select('line'), texts = $$.xgridLines.select('text'); - return [ - (withTransition ? lines.transition(transition) : lines) - .attr('x1', config.axis_rotated ? 0 : xv) - .attr('x2', config.axis_rotated ? $$.width : xv) - .attr('y1', config.axis_rotated ? xv : 0) - .attr('y2', config.axis_rotated ? xv : $$.height) - .style('opacity', 1), - (withTransition ? texts.transition(transition) : texts) - .attr('x', config.axis_rotated ? $$.yGridTextX.bind($$) : $$.xGridTextX.bind($$)) - .attr('y', xv) - .text(function (d) { - return d.text; - }) - .style('opacity', 1) - ]; - }; - ChartInternal.prototype.showXGridFocus = function (selectedData) { - var $$ = this, config = $$.config, dataToShow = selectedData.filter(function (d) { - return d && isValue(d.value); - }), focusEl = $$.main.selectAll('line.' + CLASS.xgridFocus), xx = $$.xx.bind($$); - if (!config.tooltip_show) { - return; - } - // Hide when stanford plot exists - if ($$.hasType('stanford') || $$.hasArcType()) { - return; - } - focusEl - .style('visibility', 'visible') - .data([dataToShow[0]]) - .attr(config.axis_rotated ? 'y1' : 'x1', xx) - .attr(config.axis_rotated ? 'y2' : 'x2', xx); - $$.smoothLines(focusEl, 'grid'); - }; - ChartInternal.prototype.hideXGridFocus = function () { - this.main.select('line.' + CLASS.xgridFocus).style('visibility', 'hidden'); - }; - ChartInternal.prototype.updateXgridFocus = function () { - var $$ = this, config = $$.config; - $$.main - .select('line.' + CLASS.xgridFocus) - .attr('x1', config.axis_rotated ? 0 : -10) - .attr('x2', config.axis_rotated ? $$.width : -10) - .attr('y1', config.axis_rotated ? -10 : 0) - .attr('y2', config.axis_rotated ? -10 : $$.height); - }; - ChartInternal.prototype.generateGridData = function (type, scale) { - var $$ = this, gridData = [], xDomain, firstYear, lastYear, i, tickNum = $$.main - .select('.' + CLASS.axisX) - .selectAll('.tick') - .size(); - if (type === 'year') { - xDomain = $$.getXDomain(); - firstYear = xDomain[0].getFullYear(); - lastYear = xDomain[1].getFullYear(); - for (i = firstYear; i <= lastYear; i++) { - gridData.push(new Date(i + '-01-01 00:00:00')); - } - } - else { - gridData = scale.ticks(10); - if (gridData.length > tickNum) { - // use only int - gridData = gridData.filter(function (d) { - return ('' + d).indexOf('.') < 0; - }); - } - } - return gridData; - }; - ChartInternal.prototype.getGridFilterToRemove = function (params) { - return params - ? function (line) { - var found = false; - [].concat(params).forEach(function (param) { - if (('value' in param && line.value === param.value) || - ('class' in param && line['class'] === param['class'])) { - found = true; - } - }); - return found; - } - : function () { - return true; - }; - }; - ChartInternal.prototype.removeGridLines = function (params, forX) { - var $$ = this, config = $$.config, toRemove = $$.getGridFilterToRemove(params), toShow = function (line) { - return !toRemove(line); - }, classLines = forX ? CLASS.xgridLines : CLASS.ygridLines, classLine = forX ? CLASS.xgridLine : CLASS.ygridLine; - $$.main - .select('.' + classLines) - .selectAll('.' + classLine) - .filter(toRemove) - .transition() - .duration(config.transition_duration) - .style('opacity', 0) - .remove(); - if (forX) { - config.grid_x_lines = config.grid_x_lines.filter(toShow); - } - else { - config.grid_y_lines = config.grid_y_lines.filter(toShow); - } - }; - - ChartInternal.prototype.initEventRect = function () { - var $$ = this, config = $$.config; - $$.main - .select('.' + CLASS.chart) - .append('g') - .attr('class', CLASS.eventRects) - .style('fill-opacity', 0); - $$.eventRect = $$.main - .select('.' + CLASS.eventRects) - .append('rect') - .attr('class', CLASS.eventRect); - // event rect handle zoom event as well - if (config.zoom_enabled && $$.zoom) { - $$.eventRect.call($$.zoom).on('dblclick.zoom', null); - if (config.zoom_initialRange) { - // WORKAROUND: Add transition to apply transform immediately when no subchart - $$.eventRect - .transition() - .duration(0) - .call($$.zoom.transform, $$.zoomTransform(config.zoom_initialRange)); - } - } - }; - ChartInternal.prototype.redrawEventRect = function () { - var $$ = this, d3 = $$.d3, config = $$.config; - function mouseout() { - $$.svg.select('.' + CLASS.eventRect).style('cursor', null); - $$.hideXGridFocus(); - $$.hideTooltip(); - $$.unexpandCircles(); - $$.unexpandBars(); - } - var isHoveringDataPoint = function (mouse, closest) { - return closest && - ($$.isBarType(closest.id) || - $$.dist(closest, mouse) < config.point_sensitivity); - }; - var withName = function (d) { return (d ? $$.addName(Object.assign({}, d)) : null); }; - // rects for mouseover - $$.main - .select('.' + CLASS.eventRects) - .style('cursor', config.zoom_enabled - ? config.axis_rotated - ? 'ns-resize' - : 'ew-resize' - : null); - $$.eventRect - .attr('x', 0) - .attr('y', 0) - .attr('width', $$.width) - .attr('height', $$.height) - .on('mouseout', config.interaction_enabled - ? function () { - if (!config) { - return; - } // chart is destroyed - if ($$.hasArcType()) { - return; - } - if ($$.mouseover) { - config.data_onmouseout.call($$.api, $$.mouseover); - $$.mouseover = undefined; - } - mouseout(); - } - : null) - .on('mousemove', config.interaction_enabled - ? function () { - // do nothing when dragging - if ($$.dragging) { - return; - } - var targetsToShow = $$.getTargetsToShow(); - // do nothing if arc type - if ($$.hasArcType(targetsToShow)) { - return; - } - var mouse = d3.mouse(this); - var closest = withName($$.findClosestFromTargets(targetsToShow, mouse)); - var isMouseCloseToDataPoint = isHoveringDataPoint(mouse, closest); - // ensure onmouseout is always called if mousemove switch between 2 targets - if ($$.mouseover && - (!closest || - closest.id !== $$.mouseover.id || - closest.index !== $$.mouseover.index)) { - config.data_onmouseout.call($$.api, $$.mouseover); - $$.mouseover = undefined; - } - if (closest && !$$.mouseover) { - config.data_onmouseover.call($$.api, closest); - $$.mouseover = closest; - } - // show cursor as pointer if we're hovering a data point close enough - $$.svg - .select('.' + CLASS.eventRect) - .style('cursor', isMouseCloseToDataPoint ? 'pointer' : null); - // if tooltip not grouped, we want to display only data from closest data point - var showSingleDataPoint = !config.tooltip_grouped || $$.hasType('stanford', targetsToShow); - // find data to highlight - var selectedData; - if (showSingleDataPoint) { - if (closest) { - selectedData = [closest]; - } - } - else { - var closestByX = void 0; - if (closest) { - // reuse closest value - closestByX = closest; - } - else { - // try to find the closest value by X values from the mouse position - var mouseX = config.axis_rotated ? mouse[1] : mouse[0]; - closestByX = $$.findClosestFromTargetsByX(targetsToShow, $$.x.invert(mouseX)); - } - // highlight all data for this 'x' value - if (closestByX) { - selectedData = $$.filterByX(targetsToShow, closestByX.x); - } - } - // ensure we have data to show - if (!selectedData || selectedData.length === 0) { - return mouseout(); - } - // inject names for each point - selectedData = selectedData.map(withName); - // show tooltip - $$.showTooltip(selectedData, this); - // expand points - if (config.point_focus_expand_enabled) { - $$.unexpandCircles(); - selectedData.forEach(function (d) { - $$.expandCircles(d.index, d.id, false); - }); - } - // expand bars - $$.unexpandBars(); - selectedData.forEach(function (d) { - $$.expandBars(d.index, d.id, false); - }); - // Show xgrid focus line - $$.showXGridFocus(selectedData); - } - : null) - .on('click', config.interaction_enabled - ? function () { - var targetsToShow = $$.getTargetsToShow(); - if ($$.hasArcType(targetsToShow)) { - return; - } - var mouse = d3.mouse(this); - var closest = withName($$.findClosestFromTargets(targetsToShow, mouse)); - if (!isHoveringDataPoint(mouse, closest)) { - return; - } - // select if selection enabled - var sameXData; - if (!config.data_selection_grouped || $$.isStanfordType(closest)) { - sameXData = [closest]; - } - else { - sameXData = $$.filterByX(targetsToShow, closest.x); - } - // toggle selected state - sameXData.forEach(function (d) { - $$.main - .selectAll('.' + CLASS.shapes + $$.getTargetSelectorSuffix(d.id)) - .selectAll('.' + CLASS.shape + '-' + d.index) - .each(function () { - if (config.data_selection_grouped || - $$.isWithinShape(this, d)) { - $$.toggleShape(this, d, d.index); - } - }); - }); - // call data_onclick on the closest data point - if (closest) { - var shape = $$.main - .selectAll('.' + CLASS.shapes + $$.getTargetSelectorSuffix(closest.id)) - .select('.' + CLASS.shape + '-' + closest.index); - config.data_onclick.call($$.api, closest, shape.node()); - } - } - : null) - .call(config.interaction_enabled && config.data_selection_draggable && $$.drag - ? d3 - .drag() - .on('drag', function () { - $$.drag(d3.mouse(this)); - }) - .on('start', function () { - $$.dragstart(d3.mouse(this)); - }) - .on('end', function () { - $$.dragend(); - }) - : function () { }); - }; - ChartInternal.prototype.getMousePosition = function (data) { - var $$ = this; - return [$$.x(data.x), $$.getYScale(data.id)(data.value)]; - }; - ChartInternal.prototype.dispatchEvent = function (type, mouse) { - var $$ = this, selector = '.' + CLASS.eventRect, eventRect = $$.main.select(selector).node(), box = eventRect.getBoundingClientRect(), x = box.left + (mouse ? mouse[0] : 0), y = box.top + (mouse ? mouse[1] : 0), event = document.createEvent('MouseEvents'); - event.initMouseEvent(type, true, true, window, 0, x, y, x, y, false, false, false, false, 0, null); - eventRect.dispatchEvent(event); - }; - - ChartInternal.prototype.initLegend = function () { - var $$ = this; - $$.legendItemTextBox = {}; - $$.legendHasRendered = false; - $$.legend = $$.svg.append('g').attr('transform', $$.getTranslate('legend')); - if (!$$.config.legend_show) { - $$.legend.style('visibility', 'hidden'); - $$.hiddenLegendIds = $$.mapToIds($$.data.targets); - return; - } - // MEMO: call here to update legend box and tranlate for all - // MEMO: translate will be updated by this, so transform not needed in updateLegend() - $$.updateLegendWithDefaults(); - }; - ChartInternal.prototype.updateLegendWithDefaults = function () { - var $$ = this; - $$.updateLegend($$.mapToIds($$.data.targets), { - withTransform: false, - withTransitionForTransform: false, - withTransition: false - }); - }; - ChartInternal.prototype.updateSizeForLegend = function (legendHeight, legendWidth) { - var $$ = this, config = $$.config, insetLegendPosition = { - top: $$.isLegendTop - ? $$.getCurrentPaddingTop() + config.legend_inset_y + 5.5 - : $$.currentHeight - - legendHeight - - $$.getCurrentPaddingBottom() - - config.legend_inset_y, - left: $$.isLegendLeft - ? $$.getCurrentPaddingLeft() + config.legend_inset_x + 0.5 - : $$.currentWidth - - legendWidth - - $$.getCurrentPaddingRight() - - config.legend_inset_x + - 0.5 - }; - $$.margin3 = { - top: $$.isLegendRight - ? 0 - : $$.isLegendInset - ? insetLegendPosition.top - : $$.currentHeight - legendHeight, - right: NaN, - bottom: 0, - left: $$.isLegendRight - ? $$.currentWidth - legendWidth - : $$.isLegendInset - ? insetLegendPosition.left - : 0 - }; - }; - ChartInternal.prototype.transformLegend = function (withTransition) { - var $$ = this; - (withTransition ? $$.legend.transition() : $$.legend).attr('transform', $$.getTranslate('legend')); - }; - ChartInternal.prototype.updateLegendStep = function (step) { - this.legendStep = step; - }; - ChartInternal.prototype.updateLegendItemWidth = function (w) { - this.legendItemWidth = w; - }; - ChartInternal.prototype.updateLegendItemHeight = function (h) { - this.legendItemHeight = h; - }; - ChartInternal.prototype.getLegendWidth = function () { - var $$ = this; - return $$.config.legend_show - ? $$.isLegendRight || $$.isLegendInset - ? $$.legendItemWidth * ($$.legendStep + 1) - : $$.currentWidth - : 0; - }; - ChartInternal.prototype.getLegendHeight = function () { - var $$ = this, h = 0; - if ($$.config.legend_show) { - if ($$.isLegendRight) { - h = $$.currentHeight; - } - else { - h = Math.max(20, $$.legendItemHeight) * ($$.legendStep + 1); - } - } - return h; - }; - ChartInternal.prototype.opacityForLegend = function (legendItem) { - return legendItem.classed(CLASS.legendItemHidden) ? null : 1; - }; - ChartInternal.prototype.opacityForUnfocusedLegend = function (legendItem) { - return legendItem.classed(CLASS.legendItemHidden) ? null : 0.3; - }; - ChartInternal.prototype.toggleFocusLegend = function (targetIds, focus) { - var $$ = this; - targetIds = $$.mapToTargetIds(targetIds); - $$.legend - .selectAll('.' + CLASS.legendItem) - .filter(function (id) { - return targetIds.indexOf(id) >= 0; - }) - .classed(CLASS.legendItemFocused, focus) - .transition() - .duration(100) - .style('opacity', function () { - var opacity = focus ? $$.opacityForLegend : $$.opacityForUnfocusedLegend; - return opacity.call($$, $$.d3.select(this)); - }); - }; - ChartInternal.prototype.revertLegend = function () { - var $$ = this, d3 = $$.d3; - $$.legend - .selectAll('.' + CLASS.legendItem) - .classed(CLASS.legendItemFocused, false) - .transition() - .duration(100) - .style('opacity', function () { - return $$.opacityForLegend(d3.select(this)); - }); - }; - ChartInternal.prototype.showLegend = function (targetIds) { - var $$ = this, config = $$.config; - if (!config.legend_show) { - config.legend_show = true; - $$.legend.style('visibility', 'visible'); - if (!$$.legendHasRendered) { - $$.updateLegendWithDefaults(); - } - } - $$.removeHiddenLegendIds(targetIds); - $$.legend - .selectAll($$.selectorLegends(targetIds)) - .style('visibility', 'visible') - .transition() - .style('opacity', function () { - return $$.opacityForLegend($$.d3.select(this)); - }); - }; - ChartInternal.prototype.hideLegend = function (targetIds) { - var $$ = this, config = $$.config; - if (config.legend_show && isEmpty(targetIds)) { - config.legend_show = false; - $$.legend.style('visibility', 'hidden'); - } - $$.addHiddenLegendIds(targetIds); - $$.legend - .selectAll($$.selectorLegends(targetIds)) - .style('opacity', 0) - .style('visibility', 'hidden'); - }; - ChartInternal.prototype.clearLegendItemTextBoxCache = function () { - this.legendItemTextBox = {}; - }; - ChartInternal.prototype.updateLegend = function (targetIds, options, transitions) { - var $$ = this, config = $$.config; - var xForLegend, xForLegendText, xForLegendRect, yForLegend, yForLegendText, yForLegendRect, x1ForLegendTile, x2ForLegendTile, yForLegendTile; - var paddingTop = 4, paddingRight = 10, maxWidth = 0, maxHeight = 0, posMin = 10, tileWidth = config.legend_item_tile_width + 5; - var l, totalLength = 0, offsets = {}, widths = {}, heights = {}, margins = [0], steps = {}, step = 0; - var withTransition, withTransitionForTransform; - var texts, rects, tiles, background; - // Skip elements when their name is set to null - targetIds = targetIds.filter(function (id) { - return !isDefined(config.data_names[id]) || config.data_names[id] !== null; - }); - options = options || {}; - withTransition = getOption(options, 'withTransition', true); - withTransitionForTransform = getOption(options, 'withTransitionForTransform', true); - function getTextBox(textElement, id) { - if (!$$.legendItemTextBox[id]) { - $$.legendItemTextBox[id] = $$.getTextRect(textElement.textContent, CLASS.legendItem, textElement); - } - return $$.legendItemTextBox[id]; - } - function updatePositions(textElement, id, index) { - var reset = index === 0, isLast = index === targetIds.length - 1, box = getTextBox(textElement, id), itemWidth = box.width + - tileWidth + - (isLast && !($$.isLegendRight || $$.isLegendInset) ? 0 : paddingRight) + - config.legend_padding, itemHeight = box.height + paddingTop, itemLength = $$.isLegendRight || $$.isLegendInset ? itemHeight : itemWidth, areaLength = $$.isLegendRight || $$.isLegendInset - ? $$.getLegendHeight() - : $$.getLegendWidth(), margin, maxLength; - // MEMO: care about condifion of step, totalLength - function updateValues(id, withoutStep) { - if (!withoutStep) { - margin = (areaLength - totalLength - itemLength) / 2; - if (margin < posMin) { - margin = (areaLength - itemLength) / 2; - totalLength = 0; - step++; - } - } - steps[id] = step; - margins[step] = $$.isLegendInset ? 10 : margin; - offsets[id] = totalLength; - totalLength += itemLength; - } - if (reset) { - totalLength = 0; - step = 0; - maxWidth = 0; - maxHeight = 0; - } - if (config.legend_show && !$$.isLegendToShow(id)) { - widths[id] = heights[id] = steps[id] = offsets[id] = 0; - return; - } - widths[id] = itemWidth; - heights[id] = itemHeight; - if (!maxWidth || itemWidth >= maxWidth) { - maxWidth = itemWidth; - } - if (!maxHeight || itemHeight >= maxHeight) { - maxHeight = itemHeight; - } - maxLength = $$.isLegendRight || $$.isLegendInset ? maxHeight : maxWidth; - if (config.legend_equally) { - Object.keys(widths).forEach(function (id) { - widths[id] = maxWidth; - }); - Object.keys(heights).forEach(function (id) { - heights[id] = maxHeight; - }); - margin = (areaLength - maxLength * targetIds.length) / 2; - if (margin < posMin) { - totalLength = 0; - step = 0; - targetIds.forEach(function (id) { - updateValues(id); - }); - } - else { - updateValues(id, true); - } - } - else { - updateValues(id); - } - } - if ($$.isLegendInset) { - step = config.legend_inset_step - ? config.legend_inset_step - : targetIds.length; - $$.updateLegendStep(step); - } - if ($$.isLegendRight) { - xForLegend = function (id) { - return maxWidth * steps[id]; - }; - yForLegend = function (id) { - return margins[steps[id]] + offsets[id]; - }; - } - else if ($$.isLegendInset) { - xForLegend = function (id) { - return maxWidth * steps[id] + 10; - }; - yForLegend = function (id) { - return margins[steps[id]] + offsets[id]; - }; - } - else { - xForLegend = function (id) { - return margins[steps[id]] + offsets[id]; - }; - yForLegend = function (id) { - return maxHeight * steps[id]; - }; - } - xForLegendText = function (id, i) { - return xForLegend(id, i) + 4 + config.legend_item_tile_width; - }; - yForLegendText = function (id, i) { - return yForLegend(id, i) + 9; - }; - xForLegendRect = function (id, i) { - return xForLegend(id, i); - }; - yForLegendRect = function (id, i) { - return yForLegend(id, i) - 5; - }; - x1ForLegendTile = function (id, i) { - return xForLegend(id, i) - 2; - }; - x2ForLegendTile = function (id, i) { - return xForLegend(id, i) - 2 + config.legend_item_tile_width; - }; - yForLegendTile = function (id, i) { - return yForLegend(id, i) + 4; - }; - // Define g for legend area - l = $$.legend - .selectAll('.' + CLASS.legendItem) - .data(targetIds) - .enter() - .append('g') - .attr('class', function (id) { - return $$.generateClass(CLASS.legendItem, id); - }) - .style('visibility', function (id) { - return $$.isLegendToShow(id) ? 'visible' : 'hidden'; - }) - .style('cursor', function () { - return config.interaction_enabled ? 'pointer' : 'auto'; - }) - .on('click', config.interaction_enabled - ? function (id) { - if (config.legend_item_onclick) { - config.legend_item_onclick.call($$, id); - } - else { - if ($$.d3.event.altKey) { - $$.api.hide(); - $$.api.show(id); - } - else { - $$.api.toggle(id); - $$.isTargetToShow(id) ? $$.api.focus(id) : $$.api.revert(); - } - } - } - : null) - .on('mouseover', config.interaction_enabled - ? function (id) { - if (config.legend_item_onmouseover) { - config.legend_item_onmouseover.call($$, id); - } - else { - $$.d3.select(this).classed(CLASS.legendItemFocused, true); - if (!$$.transiting && $$.isTargetToShow(id)) { - $$.api.focus(id); - } - } - } - : null) - .on('mouseout', config.interaction_enabled - ? function (id) { - if (config.legend_item_onmouseout) { - config.legend_item_onmouseout.call($$, id); - } - else { - $$.d3.select(this).classed(CLASS.legendItemFocused, false); - $$.api.revert(); - } - } - : null); - l.append('text') - .text(function (id) { - return isDefined(config.data_names[id]) ? config.data_names[id] : id; - }) - .each(function (id, i) { - updatePositions(this, id, i); - }) - .style('pointer-events', 'none') - .attr('x', $$.isLegendRight || $$.isLegendInset ? xForLegendText : -200) - .attr('y', $$.isLegendRight || $$.isLegendInset ? -200 : yForLegendText); - l.append('rect') - .attr('class', CLASS.legendItemEvent) - .style('fill-opacity', 0) - .attr('x', $$.isLegendRight || $$.isLegendInset ? xForLegendRect : -200) - .attr('y', $$.isLegendRight || $$.isLegendInset ? -200 : yForLegendRect); - l.append('line') - .attr('class', CLASS.legendItemTile) - .style('stroke', $$.color) - .style('pointer-events', 'none') - .attr('x1', $$.isLegendRight || $$.isLegendInset ? x1ForLegendTile : -200) - .attr('y1', $$.isLegendRight || $$.isLegendInset ? -200 : yForLegendTile) - .attr('x2', $$.isLegendRight || $$.isLegendInset ? x2ForLegendTile : -200) - .attr('y2', $$.isLegendRight || $$.isLegendInset ? -200 : yForLegendTile) - .attr('stroke-width', config.legend_item_tile_height); - // Set background for inset legend - background = $$.legend.select('.' + CLASS.legendBackground + ' rect'); - if ($$.isLegendInset && maxWidth > 0 && background.size() === 0) { - background = $$.legend - .insert('g', '.' + CLASS.legendItem) - .attr('class', CLASS.legendBackground) - .append('rect'); - } - texts = $$.legend - .selectAll('text') - .data(targetIds) - .text(function (id) { - return isDefined(config.data_names[id]) ? config.data_names[id] : id; - }) // MEMO: needed for update - .each(function (id, i) { - updatePositions(this, id, i); - }); - (withTransition ? texts.transition() : texts) - .attr('x', xForLegendText) - .attr('y', yForLegendText); - rects = $$.legend.selectAll('rect.' + CLASS.legendItemEvent).data(targetIds); - (withTransition ? rects.transition() : rects) - .attr('width', function (id) { - return widths[id]; - }) - .attr('height', function (id) { - return heights[id]; - }) - .attr('x', xForLegendRect) - .attr('y', yForLegendRect); - tiles = $$.legend.selectAll('line.' + CLASS.legendItemTile).data(targetIds); - (withTransition ? tiles.transition() : tiles) - .style('stroke', $$.levelColor - ? function (id) { - return $$.levelColor($$.cache[id].values.reduce(function (total, item) { - return total + item.value; - }, 0)); - } - : $$.color) - .attr('x1', x1ForLegendTile) - .attr('y1', yForLegendTile) - .attr('x2', x2ForLegendTile) - .attr('y2', yForLegendTile); - if (background) { - (withTransition ? background.transition() : background) - .attr('height', $$.getLegendHeight() - 12) - .attr('width', maxWidth * (step + 1) + 10); - } - // toggle legend state - $$.legend - .selectAll('.' + CLASS.legendItem) - .classed(CLASS.legendItemHidden, function (id) { - return !$$.isTargetToShow(id); - }); - // Update all to reflect change of legend - $$.updateLegendItemWidth(maxWidth); - $$.updateLegendItemHeight(maxHeight); - $$.updateLegendStep(step); - // Update size and scale - $$.updateSizes(); - $$.updateScales(); - $$.updateSvgSize(); - // Update g positions - $$.transformAll(withTransitionForTransform, transitions); - $$.legendHasRendered = true; - }; - - ChartInternal.prototype.initRegion = function () { - var $$ = this; - $$.region = $$.main - .append('g') - .attr('clip-path', $$.clipPath) - .attr('class', CLASS.regions); - }; - ChartInternal.prototype.updateRegion = function (duration) { - var $$ = this, config = $$.config; - // hide if arc type - $$.region.style('visibility', $$.hasArcType() ? 'hidden' : 'visible'); - var mainRegion = $$.main - .select('.' + CLASS.regions) - .selectAll('.' + CLASS.region) - .data(config.regions); - var g = mainRegion.enter().append('g'); - g.append('rect') - .attr('x', $$.regionX.bind($$)) - .attr('y', $$.regionY.bind($$)) - .attr('width', $$.regionWidth.bind($$)) - .attr('height', $$.regionHeight.bind($$)) - .style('fill-opacity', function (d) { - return isValue(d.opacity) ? d.opacity : 0.1; - }); - g.append('text').text($$.labelRegion.bind($$)); - $$.mainRegion = g.merge(mainRegion).attr('class', $$.classRegion.bind($$)); - mainRegion - .exit() - .transition() - .duration(duration) - .style('opacity', 0) - .remove(); - }; - ChartInternal.prototype.redrawRegion = function (withTransition, transition) { - var $$ = this, regions = $$.mainRegion, regionLabels = $$.mainRegion.selectAll('text'); - return [ - (withTransition ? regions.transition(transition) : regions) - .attr('x', $$.regionX.bind($$)) - .attr('y', $$.regionY.bind($$)) - .attr('width', $$.regionWidth.bind($$)) - .attr('height', $$.regionHeight.bind($$)) - .style('fill-opacity', function (d) { - return isValue(d.opacity) ? d.opacity : 0.1; - }), - (withTransition ? regionLabels.transition(transition) : regionLabels) - .attr('x', $$.labelOffsetX.bind($$)) - .attr('y', $$.labelOffsetY.bind($$)) - .attr('transform', $$.labelTransform.bind($$)) - .attr('style', 'text-anchor: left;') - ]; - }; - ChartInternal.prototype.regionX = function (d) { - var $$ = this, config = $$.config, xPos, yScale = d.axis === 'y' ? $$.y : $$.y2; - if (d.axis === 'y' || d.axis === 'y2') { - xPos = config.axis_rotated ? ('start' in d ? yScale(d.start) : 0) : 0; - } - else { - xPos = config.axis_rotated - ? 0 - : 'start' in d - ? $$.x($$.isTimeSeries() ? $$.parseDate(d.start) : d.start) - : 0; - } - return xPos; - }; - ChartInternal.prototype.regionY = function (d) { - var $$ = this, config = $$.config, yPos, yScale = d.axis === 'y' ? $$.y : $$.y2; - if (d.axis === 'y' || d.axis === 'y2') { - yPos = config.axis_rotated ? 0 : 'end' in d ? yScale(d.end) : 0; - } - else { - yPos = config.axis_rotated - ? 'start' in d - ? $$.x($$.isTimeSeries() ? $$.parseDate(d.start) : d.start) - : 0 - : 0; - } - return yPos; - }; - ChartInternal.prototype.regionWidth = function (d) { - var $$ = this, config = $$.config, start = $$.regionX(d), end, yScale = d.axis === 'y' ? $$.y : $$.y2; - if (d.axis === 'y' || d.axis === 'y2') { - end = config.axis_rotated - ? 'end' in d - ? yScale(d.end) - : $$.width - : $$.width; - } - else { - end = config.axis_rotated - ? $$.width - : 'end' in d - ? $$.x($$.isTimeSeries() ? $$.parseDate(d.end) : d.end) - : $$.width; - } - return end < start ? 0 : end - start; - }; - ChartInternal.prototype.regionHeight = function (d) { - var $$ = this, config = $$.config, start = this.regionY(d), end, yScale = d.axis === 'y' ? $$.y : $$.y2; - if (d.axis === 'y' || d.axis === 'y2') { - end = config.axis_rotated - ? $$.height - : 'start' in d - ? yScale(d.start) - : $$.height; - } - else { - end = config.axis_rotated - ? 'end' in d - ? $$.x($$.isTimeSeries() ? $$.parseDate(d.end) : d.end) - : $$.height - : $$.height; - } - return end < start ? 0 : end - start; - }; - ChartInternal.prototype.isRegionOnX = function (d) { - return !d.axis || d.axis === 'x'; - }; - ChartInternal.prototype.labelRegion = function (d) { - return 'label' in d ? d.label : ''; - }; - ChartInternal.prototype.labelTransform = function (d) { - return 'vertical' in d && d.vertical ? 'rotate(90)' : ''; - }; - ChartInternal.prototype.labelOffsetX = function (d) { - var paddingX = 'paddingX' in d ? d.paddingX : 3; - var paddingY = 'paddingY' in d ? d.paddingY : 3; - return 'vertical' in d && d.vertical - ? this.regionY(d) + paddingY - : this.regionX(d) + paddingX; - }; - ChartInternal.prototype.labelOffsetY = function (d) { - var paddingX = 'paddingX' in d ? d.paddingX : 3; - var paddingY = 'paddingY' in d ? d.paddingY : 3; - return 'vertical' in d && d.vertical - ? -(this.regionX(d) + paddingX) - : this.regionY(d) + 10 + paddingY; - }; - - function c3LogScale(d3, linearScale, logScale) { - var PROJECTION = [0.01, 10]; - if (!linearScale) { - linearScale = d3.scaleLinear(); - linearScale.range(PROJECTION); - } - if (!logScale) { - logScale = d3.scaleLog(); - logScale.domain(PROJECTION); - logScale.nice(); - } - // copied from https://github.com/compute-io/logspace - function logspace(a, b, len) { - var arr, end, tmp, d; - if (arguments.length < 3) { - len = 10; - } - else { - if (len === 0) { - return []; - } - } - // Calculate the increment: - end = len - 1; - d = (b - a) / end; - // Build the output array... - arr = new Array(len); - tmp = a; - arr[0] = Math.pow(10, tmp); - for (var i = 1; i < end; i++) { - tmp += d; - arr[i] = Math.pow(10, tmp); - } - arr[end] = Math.pow(10, b); - return arr; - } - function scale(x) { - return logScale(linearScale(x)); - } - scale.domain = function (x) { - if (!arguments.length) { - return linearScale.domain(); - } - linearScale.domain(x); - return scale; - }; - scale.range = function (x) { - if (!arguments.length) { - return logScale.range(); - } - logScale.range(x); - return scale; - }; - scale.ticks = function (m) { - return logspace(-2, 1, m || 10).map(function (v) { - return linearScale.invert(v); - }); - }; - scale.copy = function () { - return c3LogScale(d3, linearScale.copy(), logScale.copy()); - }; - return scale; - } - ChartInternal.prototype.getScale = function (min, max, forTimeseries) { - return (forTimeseries ? this.d3.scaleTime() : this.d3.scaleLinear()).range([ - min, - max - ]); - }; - ChartInternal.prototype.getX = function (min, max, domain, offset) { - var $$ = this, scale = $$.getScale(min, max, $$.isTimeSeries()), _scale = domain ? scale.domain(domain) : scale, key; - // Define customized scale if categorized axis - if ($$.isCategorized()) { - offset = - offset || - function () { - return 0; - }; - scale = function (d, raw) { - var v = _scale(d) + offset(d); - return raw ? v : Math.ceil(v); - }; - } - else { - scale = function (d, raw) { - var v = _scale(d); - return raw ? v : Math.ceil(v); - }; - } - // define functions - for (key in _scale) { - scale[key] = _scale[key]; - } - scale.orgDomain = function () { - return _scale.domain(); - }; - // define custom domain() for categorized axis - if ($$.isCategorized()) { - scale.domain = function (domain) { - if (!arguments.length) { - domain = this.orgDomain(); - return [domain[0], domain[1] + 1]; - } - _scale.domain(domain); - return scale; - }; - } - return scale; - }; - /** - * Creates and configures a D3 scale instance for the given type. - * - * By defaults it returns a Linear scale. - * - * @param {String} type Type of d3-scale to create. Type can be 'linear', 'time', 'timeseries' or 'log'. - * @param {Array} domain The scale domain such as [from, to] - * @param {Array} range The scale's range such as [from, to] - * - * @return A d3-scale instance - */ - ChartInternal.prototype.getY = function (type, domain, range) { - var scale; - if (type === 'timeseries' || type === 'time') { - scale = this.d3.scaleTime(); - } - else if (type === 'log') { - scale = c3LogScale(this.d3); - } - else if (type === 'linear' || type === undefined) { - scale = this.d3.scaleLinear(); - } - else { - throw new Error("Invalid Y axis type: \"" + type + "\""); - } - if (domain) { - scale.domain(domain); - } - if (range) { - scale.range(range); - } - return scale; - }; - ChartInternal.prototype.getYScale = function (id) { - return this.axis.getId(id) === 'y2' ? this.y2 : this.y; - }; - ChartInternal.prototype.getSubYScale = function (id) { - return this.axis.getId(id) === 'y2' ? this.subY2 : this.subY; - }; - ChartInternal.prototype.updateScales = function () { - var $$ = this, config = $$.config, forInit = !$$.x; - // update edges - $$.xMin = config.axis_rotated ? 1 : 0; - $$.xMax = config.axis_rotated ? $$.height : $$.width; - $$.yMin = config.axis_rotated ? 0 : $$.height; - $$.yMax = config.axis_rotated ? $$.width : 1; - $$.subXMin = $$.xMin; - $$.subXMax = $$.xMax; - $$.subYMin = config.axis_rotated ? 0 : $$.height2; - $$.subYMax = config.axis_rotated ? $$.width2 : 1; - // update scales - $$.x = $$.getX($$.xMin, $$.xMax, forInit ? undefined : $$.x.orgDomain(), function () { - return $$.xAxis.tickOffset(); - }); - $$.y = $$.getY(config.axis_y_type, forInit ? config.axis_y_default : $$.y.domain(), [$$.yMin, $$.yMax]); - $$.y2 = $$.getY(config.axis_y2_type, forInit ? config.axis_y2_default : $$.y2.domain(), [$$.yMin, $$.yMax]); - $$.subX = $$.getX($$.xMin, $$.xMax, $$.orgXDomain, function (d) { - return d % 1 ? 0 : $$.subXAxis.tickOffset(); - }); - $$.subY = $$.getY(config.axis_y_type, forInit ? config.axis_y_default : $$.subY.domain(), [$$.subYMin, $$.subYMax]); - $$.subY2 = $$.getY(config.axis_y2_type, forInit ? config.axis_y2_default : $$.subY2.domain(), [$$.subYMin, $$.subYMax]); - // update axes - $$.xAxisTickFormat = $$.axis.getXAxisTickFormat(); - $$.xAxisTickValues = $$.axis.getXAxisTickValues(); - $$.yAxisTickValues = $$.axis.getYAxisTickValues(); - $$.y2AxisTickValues = $$.axis.getY2AxisTickValues(); - $$.xAxis = $$.axis.getXAxis($$.x, $$.xOrient, $$.xAxisTickFormat, $$.xAxisTickValues, config.axis_x_tick_outer); - $$.subXAxis = $$.axis.getXAxis($$.subX, $$.subXOrient, $$.xAxisTickFormat, $$.xAxisTickValues, config.axis_x_tick_outer); - $$.yAxis = $$.axis.getYAxis('y', $$.y, $$.yOrient, $$.yAxisTickValues, config.axis_y_tick_outer); - $$.y2Axis = $$.axis.getYAxis('y2', $$.y2, $$.y2Orient, $$.y2AxisTickValues, config.axis_y2_tick_outer); - // Set initialized scales to brush and zoom - if (!forInit) { - if ($$.brush) { - $$.brush.updateScale($$.subX); - } - } - // update for arc - if ($$.updateArc) { - $$.updateArc(); - } - }; - - ChartInternal.prototype.selectPoint = function (target, d, i) { - var $$ = this, config = $$.config, cx = (config.axis_rotated ? $$.circleY : $$.circleX).bind($$), cy = (config.axis_rotated ? $$.circleX : $$.circleY).bind($$), r = $$.pointSelectR.bind($$); - config.data_onselected.call($$.api, d, target.node()); - // add selected-circle on low layer g - $$.main - .select('.' + CLASS.selectedCircles + $$.getTargetSelectorSuffix(d.id)) - .selectAll('.' + CLASS.selectedCircle + '-' + i) - .data([d]) - .enter() - .append('circle') - .attr('class', function () { - return $$.generateClass(CLASS.selectedCircle, i); - }) - .attr('cx', cx) - .attr('cy', cy) - .attr('stroke', function () { - return $$.color(d); - }) - .attr('r', function (d) { - return $$.pointSelectR(d) * 1.4; - }) - .transition() - .duration(100) - .attr('r', r); - }; - ChartInternal.prototype.unselectPoint = function (target, d, i) { - var $$ = this; - $$.config.data_onunselected.call($$.api, d, target.node()); - // remove selected-circle from low layer g - $$.main - .select('.' + CLASS.selectedCircles + $$.getTargetSelectorSuffix(d.id)) - .selectAll('.' + CLASS.selectedCircle + '-' + i) - .transition() - .duration(100) - .attr('r', 0) - .remove(); - }; - ChartInternal.prototype.togglePoint = function (selected, target, d, i) { - selected ? this.selectPoint(target, d, i) : this.unselectPoint(target, d, i); - }; - ChartInternal.prototype.selectPath = function (target, d) { - var $$ = this; - $$.config.data_onselected.call($$, d, target.node()); - if ($$.config.interaction_brighten) { - target - .transition() - .duration(100) - .style('fill', function () { - return $$.d3.rgb($$.color(d)).brighter(0.75); - }); - } - }; - ChartInternal.prototype.unselectPath = function (target, d) { - var $$ = this; - $$.config.data_onunselected.call($$, d, target.node()); - if ($$.config.interaction_brighten) { - target - .transition() - .duration(100) - .style('fill', function () { - return $$.color(d); - }); - } - }; - ChartInternal.prototype.togglePath = function (selected, target, d, i) { - selected ? this.selectPath(target, d, i) : this.unselectPath(target, d, i); - }; - ChartInternal.prototype.getToggle = function (that, d) { - var $$ = this, toggle; - if (that.nodeName === 'circle') { - if ($$.isStepType(d)) { - // circle is hidden in step chart, so treat as within the click area - toggle = function () { }; // TODO: how to select step chart? - } - else { - toggle = $$.togglePoint; - } - } - else if (that.nodeName === 'path') { - toggle = $$.togglePath; - } - return toggle; - }; - ChartInternal.prototype.toggleShape = function (that, d, i) { - var $$ = this, d3 = $$.d3, config = $$.config, shape = d3.select(that), isSelected = shape.classed(CLASS.SELECTED), toggle = $$.getToggle(that, d).bind($$); - if (config.data_selection_enabled && config.data_selection_isselectable(d)) { - if (!config.data_selection_multiple) { - $$.main - .selectAll('.' + - CLASS.shapes + - (config.data_selection_grouped - ? $$.getTargetSelectorSuffix(d.id) - : '')) - .selectAll('.' + CLASS.shape) - .each(function (d, i) { - var shape = d3.select(this); - if (shape.classed(CLASS.SELECTED)) { - toggle(false, shape.classed(CLASS.SELECTED, false), d, i); - } - }); - } - shape.classed(CLASS.SELECTED, !isSelected); - toggle(!isSelected, shape, d, i); - } - }; - - ChartInternal.prototype.initBar = function () { - var $$ = this; - $$.main - .select('.' + CLASS.chart) - .append('g') - .attr('class', CLASS.chartBars); - }; - ChartInternal.prototype.updateTargetsForBar = function (targets) { - var $$ = this, config = $$.config, mainBars, mainBarEnter, classChartBar = $$.classChartBar.bind($$), classBars = $$.classBars.bind($$), classFocus = $$.classFocus.bind($$); - mainBars = $$.main - .select('.' + CLASS.chartBars) - .selectAll('.' + CLASS.chartBar) - .data(targets) - .attr('class', function (d) { - return classChartBar(d) + classFocus(d); - }); - mainBarEnter = mainBars - .enter() - .append('g') - .attr('class', classChartBar) - .style('pointer-events', 'none'); - // Bars for each data - mainBarEnter - .append('g') - .attr('class', classBars) - .style('cursor', function (d) { - return config.data_selection_isselectable(d) ? 'pointer' : null; - }); - }; - ChartInternal.prototype.updateBar = function (durationForExit) { - var $$ = this, barData = $$.barData.bind($$), classBar = $$.classBar.bind($$), initialOpacity = $$.initialOpacity.bind($$), color = function (d) { - return $$.color(d.id); - }; - var mainBar = $$.main - .selectAll('.' + CLASS.bars) - .selectAll('.' + CLASS.bar) - .data(barData); - var mainBarEnter = mainBar - .enter() - .append('path') - .attr('class', classBar) - .style('stroke', color) - .style('fill', color); - $$.mainBar = mainBarEnter.merge(mainBar).style('opacity', initialOpacity); - mainBar - .exit() - .transition() - .duration(durationForExit) - .style('opacity', 0); - }; - ChartInternal.prototype.redrawBar = function (drawBar, withTransition, transition) { - var $$ = this; - return [ - (withTransition ? this.mainBar.transition(transition) : this.mainBar) - .attr('d', drawBar) - .style('stroke', this.color) - .style('fill', this.color) - .style('opacity', function (d) { return ($$.isTargetToShow(d.id) ? 1 : 0); }) - ]; - }; - ChartInternal.prototype.getBarW = function (axis, barTargetsNum) { - var $$ = this, config = $$.config, w = typeof config.bar_width === 'number' - ? config.bar_width - : barTargetsNum - ? (axis.tickInterval() * config.bar_width_ratio) / barTargetsNum - : 0; - return config.bar_width_max && w > config.bar_width_max - ? config.bar_width_max - : w; - }; - ChartInternal.prototype.getBars = function (i, id) { - var $$ = this; - return (id - ? $$.main.selectAll('.' + CLASS.bars + $$.getTargetSelectorSuffix(id)) - : $$.main).selectAll('.' + CLASS.bar + (isValue(i) ? '-' + i : '')); - }; - ChartInternal.prototype.expandBars = function (i, id, reset) { - var $$ = this; - if (reset) { - $$.unexpandBars(); - } - $$.getBars(i, id).classed(CLASS.EXPANDED, true); - }; - ChartInternal.prototype.unexpandBars = function (i) { - var $$ = this; - $$.getBars(i).classed(CLASS.EXPANDED, false); - }; - ChartInternal.prototype.generateDrawBar = function (barIndices, isSub) { - var $$ = this, config = $$.config, getPoints = $$.generateGetBarPoints(barIndices, isSub); - return function (d, i) { - // 4 points that make a bar - var points = getPoints(d, i); - // switch points if axis is rotated, not applicable for sub chart - var indexX = config.axis_rotated ? 1 : 0; - var indexY = config.axis_rotated ? 0 : 1; - var path = 'M ' + - points[0][indexX] + - ',' + - points[0][indexY] + - ' ' + - 'L' + - points[1][indexX] + - ',' + - points[1][indexY] + - ' ' + - 'L' + - points[2][indexX] + - ',' + - points[2][indexY] + - ' ' + - 'L' + - points[3][indexX] + - ',' + - points[3][indexY] + - ' ' + - 'z'; - return path; - }; - }; - ChartInternal.prototype.generateGetBarPoints = function (barIndices, isSub) { - var $$ = this, axis = isSub ? $$.subXAxis : $$.xAxis, barTargetsNum = barIndices.__max__ + 1, barW = $$.getBarW(axis, barTargetsNum), barX = $$.getShapeX(barW, barTargetsNum, barIndices, !!isSub), barY = $$.getShapeY(!!isSub), barOffset = $$.getShapeOffset($$.isBarType, barIndices, !!isSub), barSpaceOffset = barW * ($$.config.bar_space / 2), yScale = isSub ? $$.getSubYScale : $$.getYScale; - return function (d, i) { - var y0 = yScale.call($$, d.id)(0), offset = barOffset(d, i) || y0, // offset is for stacked bar chart - posX = barX(d), posY = barY(d); - // fix posY not to overflow opposite quadrant - if ($$.config.axis_rotated) { - if ((0 < d.value && posY < y0) || (d.value < 0 && y0 < posY)) { - posY = y0; - } - } - posY -= y0 - offset; - // 4 points that make a bar - return [ - [posX + barSpaceOffset, offset], - [posX + barSpaceOffset, posY], - [posX + barW - barSpaceOffset, posY], - [posX + barW - barSpaceOffset, offset] - ]; - }; - }; - /** - * Returns whether the data point is within the given bar shape. - * - * @param mouse - * @param barShape - * @return {boolean} - */ - ChartInternal.prototype.isWithinBar = function (mouse, barShape) { - return isWithinBox(mouse, getBBox(barShape), 2); - }; - - ChartInternal.prototype.getShapeIndices = function (typeFilter) { - var $$ = this, config = $$.config, indices = {}, i = 0, j, k; - $$.filterTargetsToShow($$.data.targets.filter(typeFilter, $$)).forEach(function (d) { - for (j = 0; j < config.data_groups.length; j++) { - if (config.data_groups[j].indexOf(d.id) < 0) { - continue; - } - for (k = 0; k < config.data_groups[j].length; k++) { - if (config.data_groups[j][k] in indices) { - indices[d.id] = indices[config.data_groups[j][k]]; - break; - } - } - } - if (isUndefined(indices[d.id])) { - indices[d.id] = i++; - } - }); - indices.__max__ = i - 1; - return indices; - }; - ChartInternal.prototype.getShapeX = function (offset, targetsNum, indices, isSub) { - var $$ = this, scale = isSub ? $$.subX : $$.x; - return function (d) { - var index = d.id in indices ? indices[d.id] : 0; - return d.x || d.x === 0 ? scale(d.x) - offset * (targetsNum / 2 - index) : 0; - }; - }; - ChartInternal.prototype.getShapeY = function (isSub) { - var $$ = this; - return function (d) { - var scale = isSub ? $$.getSubYScale(d.id) : $$.getYScale(d.id); - return scale($$.isTargetNormalized(d.id) ? $$.getRatio('index', d, true) : d.value); - }; - }; - ChartInternal.prototype.getShapeOffset = function (typeFilter, indices, isSub) { - var $$ = this, targets = $$.orderTargets($$.filterTargetsToShow($$.data.targets.filter(typeFilter, $$))), targetIds = targets.map(function (t) { - return t.id; - }); - return function (d, i) { - var scale = isSub ? $$.getSubYScale(d.id) : $$.getYScale(d.id), y0 = scale(0), offset = y0; - targets.forEach(function (t) { - var rowValues = $$.isStepType(d) - ? $$.convertValuesToStep(t.values) - : t.values; - var isTargetNormalized = $$.isTargetNormalized(d.id); - var values = rowValues.map(function (v) { - return isTargetNormalized ? $$.getRatio('index', v, true) : v.value; - }); - if (t.id === d.id || indices[t.id] !== indices[d.id]) { - return; - } - if (targetIds.indexOf(t.id) < targetIds.indexOf(d.id)) { - // check if the x values line up - if (isUndefined(rowValues[i]) || +rowValues[i].x !== +d.x) { - // "+" for timeseries - // if not, try to find the value that does line up - i = -1; - rowValues.forEach(function (v, j) { - var x1 = v.x.constructor === Date ? +v.x : v.x; - var x2 = d.x.constructor === Date ? +d.x : d.x; - if (x1 === x2) { - i = j; - } - }); - } - if (i in rowValues && rowValues[i].value * d.value >= 0) { - offset += scale(values[i]) - y0; - } - } - }); - return offset; - }; - }; - ChartInternal.prototype.isWithinShape = function (that, d) { - var $$ = this, shape = $$.d3.select(that), isWithin; - if (!$$.isTargetToShow(d.id)) { - isWithin = false; - } - else if (that.nodeName === 'circle') { - isWithin = $$.isStepType(d) - ? $$.isWithinStep(that, $$.getYScale(d.id)(d.value)) - : $$.isWithinCircle(that, $$.pointSelectR(d) * 1.5); - } - else if (that.nodeName === 'path') { - isWithin = shape.classed(CLASS.bar) - ? $$.isWithinBar($$.d3.mouse(that), that) - : true; - } - return isWithin; - }; - ChartInternal.prototype.getInterpolate = function (d) { - var $$ = this, d3 = $$.d3, types = { - linear: d3.curveLinear, - 'linear-closed': d3.curveLinearClosed, - basis: d3.curveBasis, - 'basis-open': d3.curveBasisOpen, - 'basis-closed': d3.curveBasisClosed, - bundle: d3.curveBundle, - cardinal: d3.curveCardinal, - 'cardinal-open': d3.curveCardinalOpen, - 'cardinal-closed': d3.curveCardinalClosed, - monotone: d3.curveMonotoneX, - step: d3.curveStep, - 'step-before': d3.curveStepBefore, - 'step-after': d3.curveStepAfter - }, type; - if ($$.isSplineType(d)) { - type = types[$$.config.spline_interpolation_type] || types.cardinal; - } - else if ($$.isStepType(d)) { - type = types[$$.config.line_step_type]; - } - else { - type = types.linear; - } - return type; - }; - - ChartInternal.prototype.initLine = function () { - var $$ = this; - $$.main - .select('.' + CLASS.chart) - .append('g') - .attr('class', CLASS.chartLines); - }; - ChartInternal.prototype.updateTargetsForLine = function (targets) { - var $$ = this, config = $$.config, mainLines, mainLineEnter, classChartLine = $$.classChartLine.bind($$), classLines = $$.classLines.bind($$), classAreas = $$.classAreas.bind($$), classCircles = $$.classCircles.bind($$), classFocus = $$.classFocus.bind($$); - mainLines = $$.main - .select('.' + CLASS.chartLines) - .selectAll('.' + CLASS.chartLine) - .data(targets) - .attr('class', function (d) { - return classChartLine(d) + classFocus(d); - }); - mainLineEnter = mainLines - .enter() - .append('g') - .attr('class', classChartLine) - .style('opacity', 0) - .style('pointer-events', 'none'); - // Lines for each data - mainLineEnter.append('g').attr('class', classLines); - // Areas - mainLineEnter.append('g').attr('class', classAreas); - // Circles for each data point on lines - mainLineEnter.append('g').attr('class', function (d) { - return $$.generateClass(CLASS.selectedCircles, d.id); - }); - mainLineEnter - .append('g') - .attr('class', classCircles) - .style('cursor', function (d) { - return config.data_selection_isselectable(d) ? 'pointer' : null; - }); - // Update date for selected circles - targets.forEach(function (t) { - $$.main - .selectAll('.' + CLASS.selectedCircles + $$.getTargetSelectorSuffix(t.id)) - .selectAll('.' + CLASS.selectedCircle) - .each(function (d) { - d.value = t.values[d.index].value; - }); - }); - // MEMO: can not keep same color... - //mainLineUpdate.exit().remove(); - }; - ChartInternal.prototype.updateLine = function (durationForExit) { - var $$ = this; - var mainLine = $$.main - .selectAll('.' + CLASS.lines) - .selectAll('.' + CLASS.line) - .data($$.lineData.bind($$)); - var mainLineEnter = mainLine - .enter() - .append('path') - .attr('class', $$.classLine.bind($$)) - .style('stroke', $$.color); - $$.mainLine = mainLineEnter - .merge(mainLine) - .style('opacity', $$.initialOpacity.bind($$)) - .style('shape-rendering', function (d) { - return $$.isStepType(d) ? 'crispEdges' : ''; - }) - .attr('transform', null); - mainLine - .exit() - .transition() - .duration(durationForExit) - .style('opacity', 0); - }; - ChartInternal.prototype.redrawLine = function (drawLine, withTransition, transition) { - return [ - (withTransition ? this.mainLine.transition(transition) : this.mainLine) - .attr('d', drawLine) - .style('stroke', this.color) - .style('opacity', 1) - ]; - }; - ChartInternal.prototype.generateDrawLine = function (lineIndices, isSub) { - var $$ = this, config = $$.config, line = $$.d3.line(), getPoints = $$.generateGetLinePoints(lineIndices, isSub), yScaleGetter = isSub ? $$.getSubYScale : $$.getYScale, xValue = function (d) { - return (isSub ? $$.subxx : $$.xx).call($$, d); - }, yValue = function (d, i) { - return config.data_groups.length > 0 - ? getPoints(d, i)[0][1] - : yScaleGetter.call($$, d.id)(d.value); - }; - line = config.axis_rotated - ? line.x(yValue).y(xValue) - : line.x(xValue).y(yValue); - if (!config.line_connectNull) { - line = line.defined(function (d) { - return d.value != null; - }); - } - return function (d) { - var values = config.line_connectNull - ? $$.filterRemoveNull(d.values) - : d.values, x = isSub ? $$.subX : $$.x, y = yScaleGetter.call($$, d.id), x0 = 0, y0 = 0, path; - if ($$.isLineType(d)) { - if (config.data_regions[d.id]) { - path = $$.lineWithRegions(values, x, y, config.data_regions[d.id]); - } - else { - if ($$.isStepType(d)) { - values = $$.convertValuesToStep(values); - } - path = line.curve($$.getInterpolate(d))(values); - } - } - else { - if (values[0]) { - x0 = x(values[0].x); - y0 = y(values[0].value); - } - path = config.axis_rotated ? 'M ' + y0 + ' ' + x0 : 'M ' + x0 + ' ' + y0; - } - return path ? path : 'M 0 0'; - }; - }; - ChartInternal.prototype.generateGetLinePoints = function (lineIndices, isSub) { - // partial duplication of generateGetBarPoints - var $$ = this, config = $$.config, lineTargetsNum = lineIndices.__max__ + 1, x = $$.getShapeX(0, lineTargetsNum, lineIndices, !!isSub), y = $$.getShapeY(!!isSub), lineOffset = $$.getShapeOffset($$.isLineType, lineIndices, !!isSub), yScale = isSub ? $$.getSubYScale : $$.getYScale; - return function (d, i) { - var y0 = yScale.call($$, d.id)(0), offset = lineOffset(d, i) || y0, // offset is for stacked area chart - posX = x(d), posY = y(d); - // fix posY not to overflow opposite quadrant - if (config.axis_rotated) { - if ((0 < d.value && posY < y0) || (d.value < 0 && y0 < posY)) { - posY = y0; - } - } - // 1 point that marks the line position - return [ - [posX, posY - (y0 - offset)], - [posX, posY - (y0 - offset)], - [posX, posY - (y0 - offset)], - [posX, posY - (y0 - offset)] // needed for compatibility - ]; - }; - }; - ChartInternal.prototype.lineWithRegions = function (d, x, y, _regions) { - var $$ = this, config = $$.config, prev = -1, i, j, s = 'M', sWithRegion, xp, yp, dx, dy, dd, diff, diffx2, xOffset = $$.isCategorized() ? 0.5 : 0, xValue, yValue, regions = []; - function isWithinRegions(x, regions) { - var i; - for (i = 0; i < regions.length; i++) { - if (regions[i].start < x && x <= regions[i].end) { - return true; - } - } - return false; - } - // Check start/end of regions - if (isDefined(_regions)) { - for (i = 0; i < _regions.length; i++) { - regions[i] = {}; - if (isUndefined(_regions[i].start)) { - regions[i].start = d[0].x; - } - else { - regions[i].start = $$.isTimeSeries() - ? $$.parseDate(_regions[i].start) - : _regions[i].start; - } - if (isUndefined(_regions[i].end)) { - regions[i].end = d[d.length - 1].x; - } - else { - regions[i].end = $$.isTimeSeries() - ? $$.parseDate(_regions[i].end) - : _regions[i].end; - } - } - } - // Set scales - xValue = config.axis_rotated - ? function (d) { - return y(d.value); - } - : function (d) { - return x(d.x); - }; - yValue = config.axis_rotated - ? function (d) { - return x(d.x); - } - : function (d) { - return y(d.value); - }; - // Define svg generator function for region - function generateM(points) { - return ('M' + - points[0][0] + - ' ' + - points[0][1] + - ' ' + - points[1][0] + - ' ' + - points[1][1]); - } - if ($$.isTimeSeries()) { - sWithRegion = function (d0, d1, j, diff) { - var x0 = d0.x.getTime(), x_diff = d1.x - d0.x, xv0 = new Date(x0 + x_diff * j), xv1 = new Date(x0 + x_diff * (j + diff)), points; - if (config.axis_rotated) { - points = [ - [y(yp(j)), x(xv0)], - [y(yp(j + diff)), x(xv1)] - ]; - } - else { - points = [ - [x(xv0), y(yp(j))], - [x(xv1), y(yp(j + diff))] - ]; - } - return generateM(points); - }; - } - else { - sWithRegion = function (d0, d1, j, diff) { - var points; - if (config.axis_rotated) { - points = [ - [y(yp(j), true), x(xp(j))], - [y(yp(j + diff), true), x(xp(j + diff))] - ]; - } - else { - points = [ - [x(xp(j), true), y(yp(j))], - [x(xp(j + diff), true), y(yp(j + diff))] - ]; - } - return generateM(points); - }; - } - // Generate - for (i = 0; i < d.length; i++) { - // Draw as normal - if (isUndefined(regions) || !isWithinRegions(d[i].x, regions)) { - s += ' ' + xValue(d[i]) + ' ' + yValue(d[i]); - } - // Draw with region // TODO: Fix for horizotal charts - else { - xp = $$.getScale(d[i - 1].x + xOffset, d[i].x + xOffset, $$.isTimeSeries()); - yp = $$.getScale(d[i - 1].value, d[i].value); - dx = x(d[i].x) - x(d[i - 1].x); - dy = y(d[i].value) - y(d[i - 1].value); - dd = Math.sqrt(Math.pow(dx, 2) + Math.pow(dy, 2)); - diff = 2 / dd; - diffx2 = diff * 2; - for (j = diff; j <= 1; j += diffx2) { - s += sWithRegion(d[i - 1], d[i], j, diff); - } - } - prev = d[i].x; - } - return s; - }; - ChartInternal.prototype.updateArea = function (durationForExit) { - var $$ = this, d3 = $$.d3; - var mainArea = $$.main - .selectAll('.' + CLASS.areas) - .selectAll('.' + CLASS.area) - .data($$.lineData.bind($$)); - var mainAreaEnter = mainArea - .enter() - .append('path') - .attr('class', $$.classArea.bind($$)) - .style('fill', $$.color) - .style('opacity', function () { - $$.orgAreaOpacity = +d3.select(this).style('opacity'); - return 0; - }); - $$.mainArea = mainAreaEnter - .merge(mainArea) - .style('opacity', $$.orgAreaOpacity); - mainArea - .exit() - .transition() - .duration(durationForExit) - .style('opacity', 0); - }; - ChartInternal.prototype.redrawArea = function (drawArea, withTransition, transition) { - return [ - (withTransition ? this.mainArea.transition(transition) : this.mainArea) - .attr('d', drawArea) - .style('fill', this.color) - .style('opacity', this.orgAreaOpacity) - ]; - }; - ChartInternal.prototype.generateDrawArea = function (areaIndices, isSub) { - var $$ = this, config = $$.config, area = $$.d3.area(), getPoints = $$.generateGetAreaPoints(areaIndices, isSub), yScaleGetter = isSub ? $$.getSubYScale : $$.getYScale, xValue = function (d) { - return (isSub ? $$.subxx : $$.xx).call($$, d); - }, value0 = function (d, i) { - return config.data_groups.length > 0 - ? getPoints(d, i)[0][1] - : yScaleGetter.call($$, d.id)($$.getAreaBaseValue(d.id)); - }, value1 = function (d, i) { - return config.data_groups.length > 0 - ? getPoints(d, i)[1][1] - : yScaleGetter.call($$, d.id)(d.value); - }; - area = config.axis_rotated - ? area - .x0(value0) - .x1(value1) - .y(xValue) - : area - .x(xValue) - .y0(config.area_above ? 0 : value0) - .y1(value1); - if (!config.line_connectNull) { - area = area.defined(function (d) { - return d.value !== null; - }); - } - return function (d) { - var values = config.line_connectNull - ? $$.filterRemoveNull(d.values) - : d.values, x0 = 0, y0 = 0, path; - if ($$.isAreaType(d)) { - if ($$.isStepType(d)) { - values = $$.convertValuesToStep(values); - } - path = area.curve($$.getInterpolate(d))(values); - } - else { - if (values[0]) { - x0 = $$.x(values[0].x); - y0 = $$.getYScale(d.id)(values[0].value); - } - path = config.axis_rotated ? 'M ' + y0 + ' ' + x0 : 'M ' + x0 + ' ' + y0; - } - return path ? path : 'M 0 0'; - }; - }; - ChartInternal.prototype.getAreaBaseValue = function () { - return 0; - }; - ChartInternal.prototype.generateGetAreaPoints = function (areaIndices, isSub) { - // partial duplication of generateGetBarPoints - var $$ = this, config = $$.config, areaTargetsNum = areaIndices.__max__ + 1, x = $$.getShapeX(0, areaTargetsNum, areaIndices, !!isSub), y = $$.getShapeY(!!isSub), areaOffset = $$.getShapeOffset($$.isAreaType, areaIndices, !!isSub), yScale = isSub ? $$.getSubYScale : $$.getYScale; - return function (d, i) { - var y0 = yScale.call($$, d.id)(0), offset = areaOffset(d, i) || y0, // offset is for stacked area chart - posX = x(d), posY = y(d); - // fix posY not to overflow opposite quadrant - if (config.axis_rotated) { - if ((0 < d.value && posY < y0) || (d.value < 0 && y0 < posY)) { - posY = y0; - } - } - // 1 point that marks the area position - return [ - [posX, offset], - [posX, posY - (y0 - offset)], - [posX, posY - (y0 - offset)], - [posX, offset] // needed for compatibility - ]; - }; - }; - ChartInternal.prototype.updateCircle = function (cx, cy) { - var $$ = this; - var mainCircle = $$.main - .selectAll('.' + CLASS.circles) - .selectAll('.' + CLASS.circle) - .data($$.lineOrScatterOrStanfordData.bind($$)); - var mainCircleEnter = mainCircle - .enter() - .append('circle') - .attr('shape-rendering', $$.isStanfordGraphType() ? 'crispEdges' : '') - .attr('class', $$.classCircle.bind($$)) - .attr('cx', cx) - .attr('cy', cy) - .attr('r', $$.pointR.bind($$)) - .style('color', $$.isStanfordGraphType() ? $$.getStanfordPointColor.bind($$) : $$.color); - $$.mainCircle = mainCircleEnter - .merge(mainCircle) - .style('opacity', $$.isStanfordGraphType() ? 1 : $$.initialOpacityForCircle.bind($$)); - mainCircle.exit().style('opacity', 0); - }; - ChartInternal.prototype.redrawCircle = function (cx, cy, withTransition, transition) { - var $$ = this, selectedCircles = $$.main.selectAll('.' + CLASS.selectedCircle); - return [ - (withTransition ? $$.mainCircle.transition(transition) : $$.mainCircle) - .style('opacity', this.opacityForCircle.bind($$)) - .style('color', $$.isStanfordGraphType() ? $$.getStanfordPointColor.bind($$) : $$.color) - .attr('cx', cx) - .attr('cy', cy), - (withTransition ? selectedCircles.transition(transition) : selectedCircles) - .attr('cx', cx) - .attr('cy', cy) - ]; - }; - ChartInternal.prototype.circleX = function (d) { - return d.x || d.x === 0 ? this.x(d.x) : null; - }; - ChartInternal.prototype.updateCircleY = function () { - var $$ = this, lineIndices, getPoints; - if ($$.config.data_groups.length > 0) { - (lineIndices = $$.getShapeIndices($$.isLineType)), - (getPoints = $$.generateGetLinePoints(lineIndices)); - $$.circleY = function (d, i) { - return getPoints(d, i)[0][1]; - }; - } - else { - $$.circleY = function (d) { - return $$.getYScale(d.id)(d.value); - }; - } - }; - ChartInternal.prototype.getCircles = function (i, id) { - var $$ = this; - return (id - ? $$.main.selectAll('.' + CLASS.circles + $$.getTargetSelectorSuffix(id)) - : $$.main).selectAll('.' + CLASS.circle + (isValue(i) ? '-' + i : '')); - }; - ChartInternal.prototype.expandCircles = function (i, id, reset) { - var $$ = this, r = $$.pointExpandedR.bind($$); - if (reset) { - $$.unexpandCircles(); - } - $$.getCircles(i, id) - .classed(CLASS.EXPANDED, true) - .attr('r', r); - }; - ChartInternal.prototype.unexpandCircles = function (i) { - var $$ = this, r = $$.pointR.bind($$); - $$.getCircles(i) - .filter(function () { - return $$.d3.select(this).classed(CLASS.EXPANDED); - }) - .classed(CLASS.EXPANDED, false) - .attr('r', r); - }; - ChartInternal.prototype.pointR = function (d) { - var $$ = this, config = $$.config; - return $$.isStepType(d) - ? 0 - : isFunction(config.point_r) - ? config.point_r(d) - : config.point_r; - }; - ChartInternal.prototype.pointExpandedR = function (d) { - var $$ = this, config = $$.config; - if (config.point_focus_expand_enabled) { - return isFunction(config.point_focus_expand_r) - ? config.point_focus_expand_r(d) - : config.point_focus_expand_r - ? config.point_focus_expand_r - : $$.pointR(d) * 1.75; - } - else { - return $$.pointR(d); - } - }; - ChartInternal.prototype.pointSelectR = function (d) { - var $$ = this, config = $$.config; - return isFunction(config.point_select_r) - ? config.point_select_r(d) - : config.point_select_r - ? config.point_select_r - : $$.pointR(d) * 4; - }; - ChartInternal.prototype.isWithinCircle = function (that, r) { - var d3 = this.d3, mouse = d3.mouse(that), d3_this = d3.select(that), cx = +d3_this.attr('cx'), cy = +d3_this.attr('cy'); - return Math.sqrt(Math.pow(cx - mouse[0], 2) + Math.pow(cy - mouse[1], 2)) < r; - }; - ChartInternal.prototype.isWithinStep = function (that, y) { - return Math.abs(y - this.d3.mouse(that)[1]) < 30; - }; - - ChartInternal.prototype.getCurrentWidth = function () { - var $$ = this, config = $$.config; - return config.size_width ? config.size_width : $$.getParentWidth(); - }; - ChartInternal.prototype.getCurrentHeight = function () { - var $$ = this, config = $$.config, h = config.size_height ? config.size_height : $$.getParentHeight(); - return h > 0 - ? h - : 320 / ($$.hasType('gauge') && !config.gauge_fullCircle ? 2 : 1); - }; - ChartInternal.prototype.getCurrentPaddingTop = function () { - var $$ = this, config = $$.config, padding = isValue(config.padding_top) ? config.padding_top : 0; - if ($$.title && $$.title.node()) { - padding += $$.getTitlePadding(); - } - return padding; - }; - ChartInternal.prototype.getCurrentPaddingBottom = function () { - var config = this.config; - return isValue(config.padding_bottom) ? config.padding_bottom : 0; - }; - ChartInternal.prototype.getCurrentPaddingLeft = function (withoutRecompute) { - var $$ = this, config = $$.config; - if (isValue(config.padding_left)) { - return config.padding_left; - } - else if (config.axis_rotated) { - return !config.axis_x_show || config.axis_x_inner - ? 1 - : Math.max(ceil10($$.getAxisWidthByAxisId('x', withoutRecompute)), 40); - } - else if (!config.axis_y_show || config.axis_y_inner) { - // && !config.axis_rotated - return $$.axis.getYAxisLabelPosition().isOuter ? 30 : 1; - } - else { - return ceil10($$.getAxisWidthByAxisId('y', withoutRecompute)); - } - }; - ChartInternal.prototype.getCurrentPaddingRight = function () { - var $$ = this, config = $$.config, padding = 0, defaultPadding = 10, legendWidthOnRight = $$.isLegendRight ? $$.getLegendWidth() + 20 : 0; - if (isValue(config.padding_right)) { - padding = config.padding_right + 1; // 1 is needed not to hide tick line - } - else if (config.axis_rotated) { - padding = defaultPadding + legendWidthOnRight; - } - else if (!config.axis_y2_show || config.axis_y2_inner) { - // && !config.axis_rotated - padding = - 2 + - legendWidthOnRight + - ($$.axis.getY2AxisLabelPosition().isOuter ? 20 : 0); - } - else { - padding = ceil10($$.getAxisWidthByAxisId('y2')) + legendWidthOnRight; - } - if ($$.colorScale && $$.colorScale.node()) { - padding += $$.getColorScalePadding(); - } - return padding; - }; - ChartInternal.prototype.getParentRectValue = function (key) { - var parent = this.selectChart.node(), v; - while (parent && parent.tagName !== 'BODY') { - try { - v = parent.getBoundingClientRect()[key]; - } - catch (e) { - if (key === 'width') { - // In IE in certain cases getBoundingClientRect - // will cause an "unspecified error" - v = parent.offsetWidth; - } - } - if (v) { - break; - } - parent = parent.parentNode; - } - return v; - }; - ChartInternal.prototype.getParentWidth = function () { - return this.getParentRectValue('width'); - }; - ChartInternal.prototype.getParentHeight = function () { - var h = this.selectChart.style('height'); - return h.indexOf('px') > 0 ? +h.replace('px', '') : 0; - }; - ChartInternal.prototype.getSvgLeft = function (withoutRecompute) { - var $$ = this, config = $$.config, hasLeftAxisRect = config.axis_rotated || (!config.axis_rotated && !config.axis_y_inner), leftAxisClass = config.axis_rotated ? CLASS.axisX : CLASS.axisY, leftAxis = $$.main.select('.' + leftAxisClass).node(), svgRect = leftAxis && hasLeftAxisRect - ? leftAxis.getBoundingClientRect() - : { right: 0 }, chartRect = $$.selectChart.node().getBoundingClientRect(), hasArc = $$.hasArcType(), svgLeft = svgRect.right - - chartRect.left - - (hasArc ? 0 : $$.getCurrentPaddingLeft(withoutRecompute)); - return svgLeft > 0 ? svgLeft : 0; - }; - ChartInternal.prototype.getAxisWidthByAxisId = function (id, withoutRecompute) { - var $$ = this, position = $$.axis.getLabelPositionById(id); - return ($$.axis.getMaxTickWidth(id, withoutRecompute) + (position.isInner ? 20 : 40)); - }; - ChartInternal.prototype.getHorizontalAxisHeight = function (axisId, isSubchart) { - var $$ = this, config = $$.config, h = 30; - if (axisId === 'x' && !(isDefined(isSubchart) && isSubchart ? config.subchart_axis_x_show : config.axis_x_show)) { - return 8; - } - if (axisId === 'x' && config.axis_x_height) { - return config.axis_x_height; - } - if (axisId === 'y' && !config.axis_y_show) { - return config.legend_show && !$$.isLegendRight && !$$.isLegendInset ? 10 : 1; - } - if (axisId === 'y2' && !config.axis_y2_show) { - return $$.rotated_padding_top; - } - // Calculate x axis height when tick rotated - if (axisId === 'x' && !config.axis_rotated && config.axis_x_tick_rotate) { - h = - 30 + - $$.axis.getMaxTickWidth(axisId) * - Math.cos((Math.PI * (90 - Math.abs(config.axis_x_tick_rotate))) / 180); - } - // Calculate y axis height when tick rotated - if (axisId === 'y' && config.axis_rotated && config.axis_y_tick_rotate) { - h = - 30 + - $$.axis.getMaxTickWidth(axisId) * - Math.cos((Math.PI * (90 - Math.abs(config.axis_y_tick_rotate))) / 180); - } - return (h + - ($$.axis.getLabelPositionById(axisId).isInner ? 0 : 10) + - (axisId === 'y2' ? -10 : 0)); - }; - - ChartInternal.prototype.initBrush = function (scale) { - var $$ = this, d3 = $$.d3; - // TODO: dynamically change brushY/brushX according to axis_rotated. - $$.brush = ($$.config.axis_rotated ? d3.brushY() : d3.brushX()) - .on('brush', function () { - var event = d3.event.sourceEvent; - if (event && event.type === 'zoom') { - return; - } - $$.redrawForBrush(); - }) - .on('end', function () { - var event = d3.event.sourceEvent; - if (event && event.type === 'zoom') { - return; - } - if ($$.brush.empty() && event && event.type !== 'end') { - $$.brush.clear(); - } - }); - $$.brush.updateExtent = function () { - var range = this.scale.range(), extent; - if ($$.config.axis_rotated) { - extent = [ - [0, range[0]], - [$$.width2, range[1]] - ]; - } - else { - extent = [ - [range[0], 0], - [range[1], $$.height2] - ]; - } - this.extent(extent); - return this; - }; - $$.brush.updateScale = function (scale) { - this.scale = scale; - return this; - }; - $$.brush.update = function (scale) { - this.updateScale(scale || $$.subX).updateExtent(); - $$.context.select('.' + CLASS.brush).call(this); - }; - $$.brush.clear = function () { - $$.context.select('.' + CLASS.brush).call($$.brush.move, null); - }; - $$.brush.selection = function () { - return d3.brushSelection($$.context.select('.' + CLASS.brush).node()); - }; - $$.brush.selectionAsValue = function (selectionAsValue, withTransition) { - var selection, brush; - if (selectionAsValue) { - if ($$.context) { - selection = [ - this.scale(selectionAsValue[0]), - this.scale(selectionAsValue[1]) - ]; - brush = $$.context.select('.' + CLASS.brush); - if (withTransition) { - brush = brush.transition(); - } - $$.brush.move(brush, selection); - } - return []; - } - selection = $$.brush.selection() || [0, 0]; - return [this.scale.invert(selection[0]), this.scale.invert(selection[1])]; - }; - $$.brush.empty = function () { - var selection = $$.brush.selection(); - return !selection || selection[0] === selection[1]; - }; - return $$.brush.updateScale(scale); - }; - ChartInternal.prototype.initSubchart = function () { - var $$ = this, config = $$.config, context = ($$.context = $$.svg - .append('g') - .attr('transform', $$.getTranslate('context'))); - // set style - context.style('visibility', 'visible'); - // Define g for chart area - context - .append('g') - .attr('clip-path', $$.clipPathForSubchart) - .attr('class', CLASS.chart); - // Define g for bar chart area - context - .select('.' + CLASS.chart) - .append('g') - .attr('class', CLASS.chartBars); - // Define g for line chart area - context - .select('.' + CLASS.chart) - .append('g') - .attr('class', CLASS.chartLines); - // Add extent rect for Brush - context - .append('g') - .attr('clip-path', $$.clipPath) - .attr('class', CLASS.brush); - // ATTENTION: This must be called AFTER chart added - // Add Axis - $$.axes.subx = context - .append('g') - .attr('class', CLASS.axisX) - .attr('transform', $$.getTranslate('subx')) - .attr('clip-path', config.axis_rotated ? '' : $$.clipPathForXAxis) - .style('visibility', config.subchart_axis_x_show ? 'visible' : 'hidden'); - }; - ChartInternal.prototype.initSubchartBrush = function () { - var $$ = this; - // Add extent rect for Brush - $$.initBrush($$.subX).updateExtent(); - $$.context.select('.' + CLASS.brush).call($$.brush); - }; - ChartInternal.prototype.updateTargetsForSubchart = function (targets) { - var $$ = this, context = $$.context, config = $$.config, contextLineEnter, contextLine, contextBarEnter, contextBar, classChartBar = $$.classChartBar.bind($$), classBars = $$.classBars.bind($$), classChartLine = $$.classChartLine.bind($$), classLines = $$.classLines.bind($$), classAreas = $$.classAreas.bind($$); - //-- Bar --// - contextBar = context - .select('.' + CLASS.chartBars) - .selectAll('.' + CLASS.chartBar) - .data(targets); - contextBarEnter = contextBar - .enter() - .append('g') - .style('opacity', 0); - contextBarEnter.merge(contextBar).attr('class', classChartBar); - // Bars for each data - contextBarEnter.append('g').attr('class', classBars); - //-- Line --// - contextLine = context - .select('.' + CLASS.chartLines) - .selectAll('.' + CLASS.chartLine) - .data(targets); - contextLineEnter = contextLine - .enter() - .append('g') - .style('opacity', 0); - contextLineEnter.merge(contextLine).attr('class', classChartLine); - // Lines for each data - contextLineEnter.append('g').attr('class', classLines); - // Area - contextLineEnter.append('g').attr('class', classAreas); - //-- Brush --// - context - .selectAll('.' + CLASS.brush + ' rect') - .attr(config.axis_rotated ? 'width' : 'height', config.axis_rotated ? $$.width2 : $$.height2); - }; - ChartInternal.prototype.updateBarForSubchart = function (durationForExit) { - var $$ = this; - var contextBar = $$.context - .selectAll('.' + CLASS.bars) - .selectAll('.' + CLASS.bar) - .data($$.barData.bind($$)); - var contextBarEnter = contextBar - .enter() - .append('path') - .attr('class', $$.classBar.bind($$)) - .style('stroke', 'none') - .style('fill', $$.color); - contextBar - .exit() - .transition() - .duration(durationForExit) - .style('opacity', 0) - .remove(); - $$.contextBar = contextBarEnter - .merge(contextBar) - .style('opacity', $$.initialOpacity.bind($$)); - }; - ChartInternal.prototype.redrawBarForSubchart = function (drawBarOnSub, withTransition, duration) { - (withTransition - ? this.contextBar.transition(Math.random().toString()).duration(duration) - : this.contextBar) - .attr('d', drawBarOnSub) - .style('opacity', 1); - }; - ChartInternal.prototype.updateLineForSubchart = function (durationForExit) { - var $$ = this; - var contextLine = $$.context - .selectAll('.' + CLASS.lines) - .selectAll('.' + CLASS.line) - .data($$.lineData.bind($$)); - var contextLineEnter = contextLine - .enter() - .append('path') - .attr('class', $$.classLine.bind($$)) - .style('stroke', $$.color); - contextLine - .exit() - .transition() - .duration(durationForExit) - .style('opacity', 0) - .remove(); - $$.contextLine = contextLineEnter - .merge(contextLine) - .style('opacity', $$.initialOpacity.bind($$)); - }; - ChartInternal.prototype.redrawLineForSubchart = function (drawLineOnSub, withTransition, duration) { - (withTransition - ? this.contextLine.transition(Math.random().toString()).duration(duration) - : this.contextLine) - .attr('d', drawLineOnSub) - .style('opacity', 1); - }; - ChartInternal.prototype.updateAreaForSubchart = function (durationForExit) { - var $$ = this, d3 = $$.d3; - var contextArea = $$.context - .selectAll('.' + CLASS.areas) - .selectAll('.' + CLASS.area) - .data($$.lineData.bind($$)); - var contextAreaEnter = contextArea - .enter() - .append('path') - .attr('class', $$.classArea.bind($$)) - .style('fill', $$.color) - .style('opacity', function () { - $$.orgAreaOpacity = +d3.select(this).style('opacity'); - return 0; - }); - contextArea - .exit() - .transition() - .duration(durationForExit) - .style('opacity', 0) - .remove(); - $$.contextArea = contextAreaEnter.merge(contextArea).style('opacity', 0); - }; - ChartInternal.prototype.redrawAreaForSubchart = function (drawAreaOnSub, withTransition, duration) { - (withTransition - ? this.contextArea.transition(Math.random().toString()).duration(duration) - : this.contextArea) - .attr('d', drawAreaOnSub) - .style('fill', this.color) - .style('opacity', this.orgAreaOpacity); - }; - ChartInternal.prototype.redrawSubchart = function (withSubchart, transitions, duration, durationForExit, areaIndices, barIndices, lineIndices) { - var $$ = this, d3 = $$.d3, drawAreaOnSub, drawBarOnSub, drawLineOnSub; - // reflect main chart to extent on subchart if zoomed - if (d3.event && d3.event.type === 'zoom') { - $$.brush.selectionAsValue($$.x.orgDomain()); - } - // update subchart elements if needed - if (withSubchart) { - // extent rect - if (!$$.brush.empty()) { - $$.brush.selectionAsValue($$.x.orgDomain()); - } - // setup drawer - MEMO: this must be called after axis updated - drawAreaOnSub = $$.generateDrawArea(areaIndices, true); - drawBarOnSub = $$.generateDrawBar(barIndices, true); - drawLineOnSub = $$.generateDrawLine(lineIndices, true); - $$.updateBarForSubchart(duration); - $$.updateLineForSubchart(duration); - $$.updateAreaForSubchart(duration); - $$.redrawBarForSubchart(drawBarOnSub, duration, duration); - $$.redrawLineForSubchart(drawLineOnSub, duration, duration); - $$.redrawAreaForSubchart(drawAreaOnSub, duration, duration); - } - }; - ChartInternal.prototype.redrawForBrush = function () { - var $$ = this, x = $$.x, d3 = $$.d3, s; - $$.redraw({ - withTransition: false, - withY: $$.config.zoom_rescale, - withSubchart: false, - withUpdateXDomain: true, - withEventRect: false, - withDimension: false - }); - // update zoom transation binded to event rect - s = d3.event.selection || $$.brush.scale.range(); - $$.main - .select('.' + CLASS.eventRect) - .call($$.zoom.transform, d3.zoomIdentity.scale($$.width / (s[1] - s[0])).translate(-s[0], 0)); - $$.config.subchart_onbrush.call($$.api, x.orgDomain()); - }; - ChartInternal.prototype.transformContext = function (withTransition, transitions) { - var $$ = this, subXAxis; - if (transitions && transitions.axisSubX) { - subXAxis = transitions.axisSubX; - } - else { - subXAxis = $$.context.select('.' + CLASS.axisX); - if (withTransition) { - subXAxis = subXAxis.transition(); - } - } - $$.context.attr('transform', $$.getTranslate('context')); - subXAxis.attr('transform', $$.getTranslate('subx')); - }; - ChartInternal.prototype.getDefaultSelection = function () { - var $$ = this, config = $$.config, selection = isFunction(config.axis_x_selection) - ? config.axis_x_selection($$.getXDomain($$.data.targets)) - : config.axis_x_selection; - if ($$.isTimeSeries()) { - selection = [$$.parseDate(selection[0]), $$.parseDate(selection[1])]; - } - return selection; - }; - ChartInternal.prototype.removeSubchart = function () { - var $$ = this; - $$.brush = null; - $$.context.remove(); - $$.context = null; - }; - - ChartInternal.prototype.initText = function () { - var $$ = this; - $$.main - .select('.' + CLASS.chart) - .append('g') - .attr('class', CLASS.chartTexts); - $$.mainText = $$.d3.selectAll([]); - }; - ChartInternal.prototype.updateTargetsForText = function (targets) { - var $$ = this, classChartText = $$.classChartText.bind($$), classTexts = $$.classTexts.bind($$), classFocus = $$.classFocus.bind($$); - var mainText = $$.main - .select('.' + CLASS.chartTexts) - .selectAll('.' + CLASS.chartText) - .data(targets); - var mainTextEnter = mainText - .enter() - .append('g') - .attr('class', classChartText) - .style('opacity', 0) - .style('pointer-events', 'none'); - mainTextEnter.append('g').attr('class', classTexts); - mainTextEnter.merge(mainText).attr('class', function (d) { - return classChartText(d) + classFocus(d); - }); - }; - ChartInternal.prototype.updateText = function (xForText, yForText, durationForExit) { - var $$ = this, config = $$.config, barOrLineData = $$.barOrLineData.bind($$), classText = $$.classText.bind($$); - var mainText = $$.main - .selectAll('.' + CLASS.texts) - .selectAll('.' + CLASS.text) - .data(barOrLineData); - var mainTextEnter = mainText - .enter() - .append('text') - .attr('class', classText) - .attr('text-anchor', function (d) { - return config.axis_rotated ? (d.value < 0 ? 'end' : 'start') : 'middle'; - }) - .style('stroke', 'none') - .attr('x', xForText) - .attr('y', yForText) - .style('fill', function (d) { - return $$.color(d); - }) - .style('fill-opacity', 0); - $$.mainText = mainTextEnter.merge(mainText).text(function (d, i, j) { - return $$.dataLabelFormat(d.id)(d.value, d.id, i, j); - }); - mainText - .exit() - .transition() - .duration(durationForExit) - .style('fill-opacity', 0) - .remove(); - }; - ChartInternal.prototype.redrawText = function (xForText, yForText, forFlow, withTransition, transition) { - return [ - (withTransition ? this.mainText.transition(transition) : this.mainText) - .attr('x', xForText) - .attr('y', yForText) - .style('fill', this.color) - .style('fill-opacity', forFlow ? 0 : this.opacityForText.bind(this)) - ]; - }; - ChartInternal.prototype.getTextRect = function (text, cls, element) { - var dummy = this.d3 - .select('body') - .append('div') - .classed('c3', true), svg = dummy - .append('svg') - .style('visibility', 'hidden') - .style('position', 'fixed') - .style('top', 0) - .style('left', 0), font = this.d3.select(element).style('font'), rect; - svg - .selectAll('.dummy') - .data([text]) - .enter() - .append('text') - .classed(cls ? cls : '', true) - .style('font', font) - .text(text) - .each(function () { - rect = getBBox(this); - }); - dummy.remove(); - return rect; - }; - ChartInternal.prototype.generateXYForText = function (areaIndices, barIndices, lineIndices, forX) { - var $$ = this, getAreaPoints = $$.generateGetAreaPoints(areaIndices, false), getBarPoints = $$.generateGetBarPoints(barIndices, false), getLinePoints = $$.generateGetLinePoints(lineIndices, false), getter = forX ? $$.getXForText : $$.getYForText; - return function (d, i) { - var getPoints = $$.isAreaType(d) - ? getAreaPoints - : $$.isBarType(d) - ? getBarPoints - : getLinePoints; - return getter.call($$, getPoints(d, i), d, this); - }; - }; - ChartInternal.prototype.getXForText = function (points, d, textElement) { - var $$ = this, box = getBBox(textElement), xPos, padding; - if ($$.config.axis_rotated) { - padding = $$.isBarType(d) ? 4 : 6; - xPos = points[2][1] + padding * (d.value < 0 ? -1 : 1); - } - else { - xPos = $$.hasType('bar') ? (points[2][0] + points[0][0]) / 2 : points[0][0]; - } - // show labels regardless of the domain if value is null - if (d.value === null) { - if (xPos > $$.width) { - xPos = $$.width - box.width; - } - else if (xPos < 0) { - xPos = 4; - } - } - return xPos; - }; - ChartInternal.prototype.getYForText = function (points, d, textElement) { - var $$ = this, box = getBBox(textElement), yPos; - if ($$.config.axis_rotated) { - yPos = (points[0][0] + points[2][0] + box.height * 0.6) / 2; - } - else { - yPos = points[2][1]; - if (d.value < 0 || (d.value === 0 && !$$.hasPositiveValue)) { - yPos += box.height; - if ($$.isBarType(d) && $$.isSafari()) { - yPos -= 3; - } - else if (!$$.isBarType(d) && $$.isChrome()) { - yPos += 3; - } - } - else { - yPos += $$.isBarType(d) ? -3 : -6; - } - } - // show labels regardless of the domain if value is null - if (d.value === null && !$$.config.axis_rotated) { - if (yPos < box.height) { - yPos = box.height; - } - else if (yPos > this.height) { - yPos = this.height - 4; - } - } - return yPos; - }; - - ChartInternal.prototype.initTitle = function () { - var $$ = this; - $$.title = $$.svg - .append('text') - .text($$.config.title_text) - .attr('class', $$.CLASS.title); - }; - ChartInternal.prototype.redrawTitle = function () { - var $$ = this; - $$.title.attr('x', $$.xForTitle.bind($$)).attr('y', $$.yForTitle.bind($$)); - }; - ChartInternal.prototype.xForTitle = function () { - var $$ = this, config = $$.config, position = config.title_position || 'left', x; - if (position.indexOf('right') >= 0) { - x = - $$.currentWidth - - $$.getTextRect($$.title.node().textContent, $$.CLASS.title, $$.title.node()).width - - config.title_padding.right; - } - else if (position.indexOf('center') >= 0) { - x = Math.max(($$.currentWidth - - $$.getTextRect($$.title.node().textContent, $$.CLASS.title, $$.title.node()).width) / - 2, 0); - } - else { - // left - x = config.title_padding.left; - } - return x; - }; - ChartInternal.prototype.yForTitle = function () { - var $$ = this; - return ($$.config.title_padding.top + - $$.getTextRect($$.title.node().textContent, $$.CLASS.title, $$.title.node()) - .height); - }; - ChartInternal.prototype.getTitlePadding = function () { - var $$ = this; - return $$.yForTitle() + $$.config.title_padding.bottom; - }; - - function powerOfTen(d) { - return d / Math.pow(10, Math.ceil(Math.log(d) / Math.LN10 - 1e-12)) === 1; - } - ChartInternal.prototype.drawColorScale = function () { - var $$ = this, d3 = $$.d3, config = $$.config, target = $$.data.targets[0], barWidth, barHeight, axis, points, legendAxis, axisScale, inverseScale, height; - barWidth = !isNaN(config.stanford_scaleWidth) - ? config.stanford_scaleWidth - : 20; - barHeight = 5; - if (barHeight < 0 || barWidth < 0) { - throw Error("Colorscale's barheight and barwidth must be greater than 0."); - } - height = - $$.height - config.stanford_padding.bottom - config.stanford_padding.top; - points = d3.range(config.stanford_padding.bottom, height, barHeight); - inverseScale = d3 - .scaleSequential(target.colors) - .domain([points[points.length - 1], points[0]]); - if ($$.colorScale) { - $$.colorScale.remove(); - } - $$.colorScale = $$.svg - .append('g') - .attr('width', 50) - .attr('height', height) - .attr('class', CLASS.colorScale); - $$.colorScale - .append('g') - .attr('transform', "translate(0, " + config.stanford_padding.top + ")") - .selectAll('bars') - .data(points) - .enter() - .append('rect') - .attr('y', function (d, i) { return i * barHeight; }) - .attr('x', 0) - .attr('width', barWidth) - .attr('height', barHeight) - .attr('fill', function (d) { - return inverseScale(d); - }); - // Legend Axis - axisScale = d3 - .scaleLog() - .domain([target.minEpochs, target.maxEpochs]) - .range([ - points[0] + - config.stanford_padding.top + - points[points.length - 1] + - barHeight - - 1, - points[0] + config.stanford_padding.top - ]); - legendAxis = d3.axisRight(axisScale); - if (config.stanford_scaleFormat === 'pow10') { - legendAxis.tickValues([1, 10, 100, 1000, 10000, 100000, 1000000, 10000000]); - } - else if (isFunction(config.stanford_scaleFormat)) { - legendAxis.tickFormat(config.stanford_scaleFormat); - } - else { - legendAxis.tickFormat(d3.format('d')); - } - if (isFunction(config.stanford_scaleValues)) { - legendAxis.tickValues(config.stanford_scaleValues(target.minEpochs, target.maxEpochs)); - } - // Draw Axis - axis = $$.colorScale - .append('g') - .attr('class', 'legend axis') - .attr('transform', "translate(" + barWidth + ",0)") - .call(legendAxis); - if (config.stanford_scaleFormat === 'pow10') { - axis - .selectAll('.tick text') - .text(null) - .filter(powerOfTen) - .text(10) - .append('tspan') - .attr('dy', '-.7em') // https://bl.ocks.org/mbostock/6738229 - .text(function (d) { - return Math.round(Math.log(d) / Math.LN10); - }); - } - $$.colorScale.attr('transform', "translate(" + ($$.currentWidth - $$.xForColorScale()) + ", 0)"); - }; - ChartInternal.prototype.xForColorScale = function () { - var $$ = this; - return $$.config.stanford_padding.right + getBBox($$.colorScale.node()).width; - }; - ChartInternal.prototype.getColorScalePadding = function () { - var $$ = this; - return $$.xForColorScale() + $$.config.stanford_padding.left + 20; - }; - - ChartInternal.prototype.isStanfordGraphType = function () { - var $$ = this; - return $$.config.data_type === 'stanford'; - }; - ChartInternal.prototype.initStanfordData = function () { - var $$ = this, d3 = $$.d3, config = $$.config, target = $$.data.targets[0], epochs, maxEpochs, minEpochs; - // Make larger values appear on top - target.values.sort(compareEpochs); - // Get array of epochs - epochs = target.values.map(function (a) { return a.epochs; }); - minEpochs = !isNaN(config.stanford_scaleMin) - ? config.stanford_scaleMin - : d3.min(epochs); - maxEpochs = !isNaN(config.stanford_scaleMax) - ? config.stanford_scaleMax - : d3.max(epochs); - if (minEpochs > maxEpochs) { - throw Error('Number of minEpochs has to be smaller than maxEpochs'); - } - target.colors = isFunction(config.stanford_colors) - ? config.stanford_colors - : d3.interpolateHslLong(d3.hsl(250, 1, 0.5), d3.hsl(0, 1, 0.5)); - target.colorscale = d3 - .scaleSequentialLog(target.colors) - .domain([minEpochs, maxEpochs]); - target.minEpochs = minEpochs; - target.maxEpochs = maxEpochs; - }; - ChartInternal.prototype.getStanfordPointColor = function (d) { - var $$ = this, target = $$.data.targets[0]; - return target.colorscale(d.epochs); - }; - // http://jsfiddle.net/Xotic750/KtzLq/ - ChartInternal.prototype.getCentroid = function (points) { - var area = getRegionArea(points); - var x = 0, y = 0, i, j, f, point1, point2; - for (i = 0, j = points.length - 1; i < points.length; j = i, i += 1) { - point1 = points[i]; - point2 = points[j]; - f = point1.x * point2.y - point2.x * point1.y; - x += (point1.x + point2.x) * f; - y += (point1.y + point2.y) * f; - } - f = area * 6; - return { - x: x / f, - y: y / f - }; - }; - ChartInternal.prototype.getStanfordTooltipTitle = function (d) { - var $$ = this, labelX = $$.axis.getLabelText('x'), labelY = $$.axis.getLabelText('y'); - return "\n " + (labelX ? sanitise(labelX) : 'x') + "" + d.x + "\n " + (labelY ? sanitise(labelY) : 'y') + "" + d.value + "\n "; - }; - ChartInternal.prototype.countEpochsInRegion = function (region) { - var $$ = this, target = $$.data.targets[0], total, count; - total = target.values.reduce(function (accumulator, currentValue) { return accumulator + Number(currentValue.epochs); }, 0); - count = target.values.reduce(function (accumulator, currentValue) { - if (pointInRegion(currentValue, region)) { - return accumulator + Number(currentValue.epochs); - } - return accumulator; - }, 0); - return { - value: count, - percentage: count !== 0 ? ((count / total) * 100).toFixed(1) : 0 - }; - }; - var getRegionArea = function (points) { - // thanks to: https://stackoverflow.com/questions/16282330/find-centerpoint-of-polygon-in-javascript - var area = 0, i, j, point1, point2; - for (i = 0, j = points.length - 1; i < points.length; j = i, i += 1) { - point1 = points[i]; - point2 = points[j]; - area += point1.x * point2.y; - area -= point1.y * point2.x; - } - area /= 2; - return area; - }; - var pointInRegion = function (point, region) { - // thanks to: http://bl.ocks.org/bycoffe/5575904 - // ray-casting algorithm based on - // http://www.ecse.rpi.edu/Homepages/wrf/Research/Short_Notes/pnpoly.html - var xi, yi, yj, xj, intersect, x = point.x, y = point.value, inside = false; - for (var i = 0, j = region.length - 1; i < region.length; j = i++) { - xi = region[i].x; - yi = region[i].y; - xj = region[j].x; - yj = region[j].y; - intersect = yi > y !== yj > y && x < ((xj - xi) * (y - yi)) / (yj - yi) + xi; - if (intersect) { - inside = !inside; - } - } - return inside; - }; - var compareEpochs = function (a, b) { - if (a.epochs < b.epochs) { - return -1; - } - if (a.epochs > b.epochs) { - return 1; - } - return 0; - }; - - ChartInternal.prototype.initStanfordElements = function () { - var $$ = this; - // Avoid blocking eventRect - $$.stanfordElements = $$.main - .select('.' + CLASS.chart) - .append('g') - .attr('class', CLASS.stanfordElements); - $$.stanfordElements.append('g').attr('class', CLASS.stanfordLines); - $$.stanfordElements.append('g').attr('class', CLASS.stanfordTexts); - $$.stanfordElements.append('g').attr('class', CLASS.stanfordRegions); - }; - ChartInternal.prototype.updateStanfordElements = function (duration) { - var $$ = this, main = $$.main, config = $$.config, stanfordLine, stanfordLineEnter, stanfordRegion, stanfordRegionEnter, stanfordText, stanfordTextEnter, xvCustom = $$.xvCustom.bind($$), yvCustom = $$.yvCustom.bind($$), countPointsInRegion = $$.countEpochsInRegion.bind($$); - // Stanford-Lines - stanfordLine = main - .select('.' + CLASS.stanfordLines) - .style('shape-rendering', 'geometricprecision') - .selectAll('.' + CLASS.stanfordLine) - .data(config.stanford_lines); - // enter - stanfordLineEnter = stanfordLine - .enter() - .append('g') - .attr('class', function (d) { - return CLASS.stanfordLine + (d['class'] ? ' ' + d['class'] : ''); - }); - stanfordLineEnter - .append('line') - .attr('x1', function (d) { - return config.axis_rotated ? yvCustom(d, 'value_y1') : xvCustom(d, 'value_x1'); - }) - .attr('x2', function (d) { - return config.axis_rotated ? yvCustom(d, 'value_y2') : xvCustom(d, 'value_x2'); - }) - .attr('y1', function (d) { - return config.axis_rotated ? xvCustom(d, 'value_x1') : yvCustom(d, 'value_y1'); - }) - .attr('y2', function (d) { - return config.axis_rotated ? xvCustom(d, 'value_x2') : yvCustom(d, 'value_y2'); - }) - .style('opacity', 0); - // update - $$.stanfordLines = stanfordLineEnter.merge(stanfordLine); - $$.stanfordLines - .select('line') - .transition() - .duration(duration) - .attr('x1', function (d) { - return config.axis_rotated ? yvCustom(d, 'value_y1') : xvCustom(d, 'value_x1'); - }) - .attr('x2', function (d) { - return config.axis_rotated ? yvCustom(d, 'value_y2') : xvCustom(d, 'value_x2'); - }) - .attr('y1', function (d) { - return config.axis_rotated ? xvCustom(d, 'value_x1') : yvCustom(d, 'value_y1'); - }) - .attr('y2', function (d) { - return config.axis_rotated ? xvCustom(d, 'value_x2') : yvCustom(d, 'value_y2'); - }) - .style('opacity', 1); - // exit - stanfordLine - .exit() - .transition() - .duration(duration) - .style('opacity', 0) - .remove(); - // Stanford-Text - stanfordText = main - .select('.' + CLASS.stanfordTexts) - .selectAll('.' + CLASS.stanfordText) - .data(config.stanford_texts); - // enter - stanfordTextEnter = stanfordText - .enter() - .append('g') - .attr('class', function (d) { - return CLASS.stanfordText + (d['class'] ? ' ' + d['class'] : ''); - }); - stanfordTextEnter - .append('text') - .attr('x', function (d) { return (config.axis_rotated ? yvCustom(d, 'y') : xvCustom(d, 'x')); }) - .attr('y', function (d) { return (config.axis_rotated ? xvCustom(d, 'x') : yvCustom(d, 'y')); }) - .style('opacity', 0); - // update - $$.stanfordTexts = stanfordTextEnter.merge(stanfordText); - $$.stanfordTexts - .select('text') - .transition() - .duration(duration) - .attr('x', function (d) { return (config.axis_rotated ? yvCustom(d, 'y') : xvCustom(d, 'x')); }) - .attr('y', function (d) { return (config.axis_rotated ? xvCustom(d, 'x') : yvCustom(d, 'y')); }) - .text(function (d) { - return d.content; - }) - .style('opacity', 1); - // exit - stanfordText - .exit() - .transition() - .duration(duration) - .style('opacity', 0) - .remove(); - // Stanford-Regions - stanfordRegion = main - .select('.' + CLASS.stanfordRegions) - .selectAll('.' + CLASS.stanfordRegion) - .data(config.stanford_regions); - // enter - stanfordRegionEnter = stanfordRegion - .enter() - .append('g') - .attr('class', function (d) { - return CLASS.stanfordRegion + (d['class'] ? ' ' + d['class'] : ''); - }); - stanfordRegionEnter - .append('polygon') - .attr('points', function (d) { - return d.points - .map(function (value) { - return [ - config.axis_rotated ? yvCustom(value, 'y') : xvCustom(value, 'x'), - config.axis_rotated ? xvCustom(value, 'x') : yvCustom(value, 'y') - ].join(','); - }) - .join(' '); - }) - .style('opacity', 0); - stanfordRegionEnter - .append('text') - .attr('x', function (d) { return $$.getCentroid(d.points).x; }) - .attr('y', function (d) { return $$.getCentroid(d.points).y; }) - .style('opacity', 0); - // update - $$.stanfordRegions = stanfordRegionEnter.merge(stanfordRegion); - $$.stanfordRegions - .select('polygon') - .transition() - .duration(duration) - .attr('points', function (d) { - return d.points - .map(function (value) { - return [ - config.axis_rotated ? yvCustom(value, 'y') : xvCustom(value, 'x'), - config.axis_rotated ? xvCustom(value, 'x') : yvCustom(value, 'y') - ].join(','); - }) - .join(' '); - }) - .style('opacity', function (d) { - return d.opacity ? d.opacity : 0.2; - }); - $$.stanfordRegions - .select('text') - .transition() - .duration(duration) - .attr('x', function (d) { - return config.axis_rotated - ? yvCustom($$.getCentroid(d.points), 'y') - : xvCustom($$.getCentroid(d.points), 'x'); - }) - .attr('y', function (d) { - return config.axis_rotated - ? xvCustom($$.getCentroid(d.points), 'x') - : yvCustom($$.getCentroid(d.points), 'y'); - }) - .text(function (d) { - if (d.text) { - var value, percentage, temp; - if ($$.isStanfordGraphType()) { - temp = countPointsInRegion(d.points); - value = temp.value; - percentage = temp.percentage; - } - return d.text(value, percentage); - } - return ''; - }) - .attr('text-anchor', 'middle') - .attr('dominant-baseline', 'middle') - .style('opacity', 1); - // exit - stanfordRegion - .exit() - .transition() - .duration(duration) - .style('opacity', 0) - .remove(); - }; - - ChartInternal.prototype.initTooltip = function () { - var $$ = this, config = $$.config, i; - $$.tooltip = $$.selectChart - .style('position', 'relative') - .append('div') - .attr('class', CLASS.tooltipContainer) - .style('position', 'absolute') - .style('pointer-events', 'none') - .style('display', 'none'); - // Show tooltip if needed - if (config.tooltip_init_show) { - if ($$.isTimeSeries() && isString(config.tooltip_init_x)) { - config.tooltip_init_x = $$.parseDate(config.tooltip_init_x); - for (i = 0; i < $$.data.targets[0].values.length; i++) { - if ($$.data.targets[0].values[i].x - config.tooltip_init_x === 0) { - break; - } - } - config.tooltip_init_x = i; - } - $$.tooltip.html(config.tooltip_contents.call($$, $$.data.targets.map(function (d) { - return $$.addName(d.values[config.tooltip_init_x]); - }), $$.axis.getXAxisTickFormat(), $$.getYFormat($$.hasArcType()), $$.color)); - $$.tooltip - .style('top', config.tooltip_init_position.top) - .style('left', config.tooltip_init_position.left) - .style('display', 'block'); - } - }; - ChartInternal.prototype.getTooltipSortFunction = function () { - var $$ = this, config = $$.config; - if (config.data_groups.length === 0 || config.tooltip_order !== undefined) { - // if data are not grouped or if an order is specified - // for the tooltip values we sort them by their values - var order = config.tooltip_order; - if (order === undefined) { - order = config.data_order; - } - var valueOf = function (obj) { - return obj ? obj.value : null; - }; - // if data are not grouped, we sort them by their value - if (isString(order) && order.toLowerCase() === 'asc') { - return function (a, b) { - return valueOf(a) - valueOf(b); - }; - } - else if (isString(order) && order.toLowerCase() === 'desc') { - return function (a, b) { - return valueOf(b) - valueOf(a); - }; - } - else if (isFunction(order)) { - // if the function is from data_order we need - // to wrap the returned function in order to format - // the sorted value to the expected format - var sortFunction = order; - if (config.tooltip_order === undefined) { - sortFunction = function (a, b) { - return order(a - ? { - id: a.id, - values: [a] - } - : null, b - ? { - id: b.id, - values: [b] - } - : null); - }; - } - return sortFunction; - } - else if (isArray(order)) { - return function (a, b) { - return order.indexOf(a.id) - order.indexOf(b.id); - }; - } - } - else { - // if data are grouped, we follow the order of grouped targets - var ids = $$.orderTargets($$.data.targets).map(function (i) { - return i.id; - }); - // if it was either asc or desc we need to invert the order - // returned by orderTargets - if ($$.isOrderAsc() || $$.isOrderDesc()) { - ids = ids.reverse(); - } - return function (a, b) { - return ids.indexOf(a.id) - ids.indexOf(b.id); - }; - } - }; - ChartInternal.prototype.getTooltipContent = function (d, defaultTitleFormat, defaultValueFormat, color) { - var $$ = this, config = $$.config, titleFormat = config.tooltip_format_title || defaultTitleFormat, nameFormat = config.tooltip_format_name || - function (name) { - return name; - }, text, i, title, value, name, bgcolor; - var valueFormat = config.tooltip_format_value; - if (!valueFormat) { - valueFormat = $$.isTargetNormalized(d.id) - ? function (v, ratio) { return (ratio * 100).toFixed(2) + "%"; } - : defaultValueFormat; - } - var tooltipSortFunction = this.getTooltipSortFunction(); - if (tooltipSortFunction) { - d.sort(tooltipSortFunction); - } - for (i = 0; i < d.length; i++) { - if (!(d[i] && (d[i].value || d[i].value === 0))) { - continue; - } - if ($$.isStanfordGraphType()) { - // Custom tooltip for stanford plots - if (!text) { - title = $$.getStanfordTooltipTitle(d[i]); - text = "" + title; - } - bgcolor = $$.getStanfordPointColor(d[i]); - name = sanitise(config.data_epochs); // Epochs key name - value = d[i].epochs; - } - else { - // Regular tooltip - if (!text) { - title = sanitise(titleFormat ? titleFormat(d[i].x, d[i].index) : d[i].x); - text = - "
" + - (title || title === 0 - ? "' - : ''); - } - value = sanitise(valueFormat(d[i].value, d[i].ratio, d[i].id, d[i].index, d)); - if (value !== undefined) { - // Skip elements when their name is set to null - if (d[i].name === null) { - continue; - } - name = sanitise(nameFormat(d[i].name, d[i].ratio, d[i].id, d[i].index)); - bgcolor = $$.levelColor ? $$.levelColor(d[i].value) : color(d[i].id); - } - } - if (value !== undefined) { - text += - ""; - text += - "'; - text += "'; - text += ''; - } - } - return text + '
" + title + '
" + - name + - '" + value + '
'; - }; - ChartInternal.prototype.tooltipPosition = function (dataToShow, tWidth, tHeight, element) { - var $$ = this, config = $$.config, d3 = $$.d3; - var svgLeft, tooltipLeft, tooltipRight, tooltipTop, chartRight; - var forArc = $$.hasArcType(), mouse = d3.mouse(element); - // Determin tooltip position - if (forArc) { - tooltipLeft = - ($$.width - ($$.isLegendRight ? $$.getLegendWidth() : 0)) / 2 + mouse[0]; - tooltipTop = - ($$.hasType('gauge') ? $$.height : $$.height / 2) + mouse[1] + 20; - } - else { - svgLeft = $$.getSvgLeft(true); - if (config.axis_rotated) { - tooltipLeft = svgLeft + mouse[0] + 100; - tooltipRight = tooltipLeft + tWidth; - chartRight = $$.currentWidth - $$.getCurrentPaddingRight(); - tooltipTop = $$.x(dataToShow[0].x) + 20; - } - else { - tooltipLeft = - svgLeft + $$.getCurrentPaddingLeft(true) + $$.x(dataToShow[0].x) + 20; - tooltipRight = tooltipLeft + tWidth; - chartRight = svgLeft + $$.currentWidth - $$.getCurrentPaddingRight(); - tooltipTop = mouse[1] + 15; - } - if (tooltipRight > chartRight) { - // 20 is needed for Firefox to keep tooltip width - tooltipLeft -= tooltipRight - chartRight + 20; - } - if (tooltipTop + tHeight > $$.currentHeight) { - tooltipTop -= tHeight + 30; - } - } - if (tooltipTop < 0) { - tooltipTop = 0; - } - return { - top: tooltipTop, - left: tooltipLeft - }; - }; - ChartInternal.prototype.showTooltip = function (selectedData, element) { - var $$ = this, config = $$.config; - var tWidth, tHeight, position; - var forArc = $$.hasArcType(), dataToShow = selectedData.filter(function (d) { - return d && isValue(d.value); - }), positionFunction = config.tooltip_position || ChartInternal.prototype.tooltipPosition; - if (dataToShow.length === 0 || !config.tooltip_show) { - $$.hideTooltip(); - return; - } - $$.tooltip - .html(config.tooltip_contents.call($$, selectedData, $$.axis.getXAxisTickFormat(), $$.getYFormat(forArc), $$.color)) - .style('display', 'block'); - // Get tooltip dimensions - tWidth = $$.tooltip.property('offsetWidth'); - tHeight = $$.tooltip.property('offsetHeight'); - position = positionFunction.call(this, dataToShow, tWidth, tHeight, element); - // Set tooltip - $$.tooltip - .style('top', position.top + 'px') - .style('left', position.left + 'px'); - }; - ChartInternal.prototype.hideTooltip = function () { - this.tooltip.style('display', 'none'); - }; - - ChartInternal.prototype.setTargetType = function (targetIds, type) { - var $$ = this, config = $$.config; - $$.mapToTargetIds(targetIds).forEach(function (id) { - $$.withoutFadeIn[id] = type === config.data_types[id]; - config.data_types[id] = type; - }); - if (!targetIds) { - config.data_type = type; - } - }; - ChartInternal.prototype.hasType = function (type, targets) { - var $$ = this, types = $$.config.data_types, has = false; - targets = targets || $$.data.targets; - if (targets && targets.length) { - targets.forEach(function (target) { - var t = types[target.id]; - if ((t && t.indexOf(type) >= 0) || (!t && type === 'line')) { - has = true; - } - }); - } - else if (Object.keys(types).length) { - Object.keys(types).forEach(function (id) { - if (types[id] === type) { - has = true; - } - }); - } - else { - has = $$.config.data_type === type; - } - return has; - }; - ChartInternal.prototype.hasArcType = function (targets) { - return (this.hasType('pie', targets) || - this.hasType('donut', targets) || - this.hasType('gauge', targets)); - }; - ChartInternal.prototype.isLineType = function (d) { - var config = this.config, id = isString(d) ? d : d.id; - return (!config.data_types[id] || - ['line', 'spline', 'area', 'area-spline', 'step', 'area-step'].indexOf(config.data_types[id]) >= 0); - }; - ChartInternal.prototype.isStepType = function (d) { - var id = isString(d) ? d : d.id; - return ['step', 'area-step'].indexOf(this.config.data_types[id]) >= 0; - }; - ChartInternal.prototype.isSplineType = function (d) { - var id = isString(d) ? d : d.id; - return ['spline', 'area-spline'].indexOf(this.config.data_types[id]) >= 0; - }; - ChartInternal.prototype.isAreaType = function (d) { - var id = isString(d) ? d : d.id; - return (['area', 'area-spline', 'area-step'].indexOf(this.config.data_types[id]) >= - 0); - }; - ChartInternal.prototype.isBarType = function (d) { - var id = isString(d) ? d : d.id; - return this.config.data_types[id] === 'bar'; - }; - ChartInternal.prototype.isScatterType = function (d) { - var id = isString(d) ? d : d.id; - return this.config.data_types[id] === 'scatter'; - }; - ChartInternal.prototype.isStanfordType = function (d) { - var id = isString(d) ? d : d.id; - return this.config.data_types[id] === 'stanford'; - }; - ChartInternal.prototype.isPieType = function (d) { - var id = isString(d) ? d : d.id; - return this.config.data_types[id] === 'pie'; - }; - ChartInternal.prototype.isGaugeType = function (d) { - var id = isString(d) ? d : d.id; - return this.config.data_types[id] === 'gauge'; - }; - ChartInternal.prototype.isDonutType = function (d) { - var id = isString(d) ? d : d.id; - return this.config.data_types[id] === 'donut'; - }; - ChartInternal.prototype.isArcType = function (d) { - return this.isPieType(d) || this.isDonutType(d) || this.isGaugeType(d); - }; - ChartInternal.prototype.lineData = function (d) { - return this.isLineType(d) ? [d] : []; - }; - ChartInternal.prototype.arcData = function (d) { - return this.isArcType(d.data) ? [d] : []; - }; - /* not used - function scatterData(d) { - return isScatterType(d) ? d.values : []; - } - */ - ChartInternal.prototype.barData = function (d) { - return this.isBarType(d) ? d.values : []; - }; - ChartInternal.prototype.lineOrScatterOrStanfordData = function (d) { - return this.isLineType(d) || this.isScatterType(d) || this.isStanfordType(d) - ? d.values - : []; - }; - ChartInternal.prototype.barOrLineData = function (d) { - return this.isBarType(d) || this.isLineType(d) ? d.values : []; - }; - - ChartInternal.prototype.isSafari = function () { - var ua = window.navigator.userAgent; - return ua.indexOf('Safari') >= 0 && ua.indexOf('Chrome') < 0; - }; - ChartInternal.prototype.isChrome = function () { - var ua = window.navigator.userAgent; - return ua.indexOf('Chrome') >= 0; - }; - - ChartInternal.prototype.initZoom = function () { - var $$ = this, d3 = $$.d3, config = $$.config, startEvent; - $$.zoom = d3 - .zoom() - .on('start', function () { - if (config.zoom_type !== 'scroll') { - return; - } - var e = d3.event.sourceEvent; - if (e && e.type === 'brush') { - return; - } - startEvent = e; - config.zoom_onzoomstart.call($$.api, e); - }) - .on('zoom', function () { - if (config.zoom_type !== 'scroll') { - return; - } - var e = d3.event.sourceEvent; - if (e && e.type === 'brush') { - return; - } - $$.redrawForZoom(); - config.zoom_onzoom.call($$.api, $$.x.orgDomain()); - }) - .on('end', function () { - if (config.zoom_type !== 'scroll') { - return; - } - var e = d3.event.sourceEvent; - if (e && e.type === 'brush') { - return; - } - // if click, do nothing. otherwise, click interaction will be canceled. - if (e && - startEvent.clientX === e.clientX && - startEvent.clientY === e.clientY) { - return; - } - config.zoom_onzoomend.call($$.api, $$.x.orgDomain()); - }); - $$.zoom.updateDomain = function () { - if (d3.event && d3.event.transform) { - if (config.axis_rotated && config.zoom_type === 'scroll' && d3.event.sourceEvent.type === 'mousemove') { - // we're moving the mouse in a rotated chart with zoom = "scroll", so we need rescaleY (i.e. vertical) - $$.x.domain(d3.event.transform.rescaleY($$.subX).domain()); - } - else { - $$.x.domain(d3.event.transform.rescaleX($$.subX).domain()); - } - } - return this; - }; - $$.zoom.updateExtent = function () { - this.scaleExtent([1, Infinity]) - .translateExtent([ - [0, 0], - [$$.width, $$.height] - ]) - .extent([ - [0, 0], - [$$.width, $$.height] - ]); - return this; - }; - $$.zoom.update = function () { - return this.updateExtent().updateDomain(); - }; - return $$.zoom.updateExtent(); - }; - ChartInternal.prototype.zoomTransform = function (range) { - var $$ = this, s = [$$.x(range[0]), $$.x(range[1])]; - return $$.d3.zoomIdentity.scale($$.width / (s[1] - s[0])).translate(-s[0], 0); - }; - ChartInternal.prototype.initDragZoom = function () { - var $$ = this; - var d3 = $$.d3; - var config = $$.config; - var context = ($$.context = $$.svg); - var brushXPos = $$.margin.left + 20.5; - var brushYPos = $$.margin.top + 0.5; - if (!(config.zoom_type === 'drag' && config.zoom_enabled)) { - return; - } - var getZoomedDomain = function (selection) { - return selection && selection.map(function (x) { return $$.x.invert(x); }); - }; - var brush = ($$.dragZoomBrush = d3 - .brushX() - .on('start', function () { - $$.api.unzoom(); - $$.svg.select('.' + CLASS.dragZoom).classed('disabled', false); - config.zoom_onzoomstart.call($$.api, d3.event.sourceEvent); - }) - .on('brush', function () { - config.zoom_onzoom.call($$.api, getZoomedDomain(d3.event.selection)); - }) - .on('end', function () { - if (d3.event.selection == null) { - return; - } - var zoomedDomain = getZoomedDomain(d3.event.selection); - if (!config.zoom_disableDefaultBehavior) { - $$.api.zoom(zoomedDomain); - } - $$.svg.select('.' + CLASS.dragZoom).classed('disabled', true); - config.zoom_onzoomend.call($$.api, zoomedDomain); - })); - context - .append('g') - .classed(CLASS.dragZoom, true) - .attr('clip-path', $$.clipPath) - .attr('transform', 'translate(' + brushXPos + ',' + brushYPos + ')') - .call(brush); - }; - ChartInternal.prototype.getZoomDomain = function () { - var $$ = this, config = $$.config, d3 = $$.d3, min = d3.min([$$.orgXDomain[0], config.zoom_x_min]), max = d3.max([$$.orgXDomain[1], config.zoom_x_max]); - return [min, max]; - }; - ChartInternal.prototype.redrawForZoom = function () { - var $$ = this, d3 = $$.d3, config = $$.config, zoom = $$.zoom, x = $$.x; - if (!config.zoom_enabled) { - return; - } - if ($$.filterTargetsToShow($$.data.targets).length === 0) { - return; - } - zoom.update(); - if (config.zoom_disableDefaultBehavior) { - return; - } - if ($$.isCategorized() && x.orgDomain()[0] === $$.orgXDomain[0]) { - x.domain([$$.orgXDomain[0] - 1e-10, x.orgDomain()[1]]); - } - $$.redraw({ - withTransition: false, - withY: config.zoom_rescale, - withSubchart: false, - withEventRect: false, - withDimension: false - }); - if (d3.event.sourceEvent && d3.event.sourceEvent.type === 'mousemove') { - $$.cancelClick = true; - } - }; - - return c3; - -}))); - - -/***/ }), - -/***/ "./node_modules/d3-array/src/array.js": -/*!********************************************!*\ - !*** ./node_modules/d3-array/src/array.js ***! - \********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "map": () => (/* binding */ map), -/* harmony export */ "slice": () => (/* binding */ slice) -/* harmony export */ }); -var array = Array.prototype; - -var slice = array.slice; -var map = array.map; - - -/***/ }), - -/***/ "./node_modules/d3-array/src/ascending.js": -/*!************************************************!*\ - !*** ./node_modules/d3-array/src/ascending.js ***! - \************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(a, b) { - return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN; -} - - -/***/ }), - -/***/ "./node_modules/d3-array/src/bisect.js": -/*!*********************************************!*\ - !*** ./node_modules/d3-array/src/bisect.js ***! - \*********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "bisectLeft": () => (/* binding */ bisectLeft), -/* harmony export */ "bisectRight": () => (/* binding */ bisectRight), -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _ascending__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ascending */ "./node_modules/d3-array/src/ascending.js"); -/* harmony import */ var _bisector__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./bisector */ "./node_modules/d3-array/src/bisector.js"); - - - -var ascendingBisect = (0,_bisector__WEBPACK_IMPORTED_MODULE_1__["default"])(_ascending__WEBPACK_IMPORTED_MODULE_0__["default"]); -var bisectRight = ascendingBisect.right; -var bisectLeft = ascendingBisect.left; -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (bisectRight); - - -/***/ }), - -/***/ "./node_modules/d3-array/src/bisector.js": -/*!***********************************************!*\ - !*** ./node_modules/d3-array/src/bisector.js ***! - \***********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _ascending__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ascending */ "./node_modules/d3-array/src/ascending.js"); - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(compare) { - if (compare.length === 1) compare = ascendingComparator(compare); - return { - left: function(a, x, lo, hi) { - if (lo == null) lo = 0; - if (hi == null) hi = a.length; - while (lo < hi) { - var mid = lo + hi >>> 1; - if (compare(a[mid], x) < 0) lo = mid + 1; - else hi = mid; - } - return lo; - }, - right: function(a, x, lo, hi) { - if (lo == null) lo = 0; - if (hi == null) hi = a.length; - while (lo < hi) { - var mid = lo + hi >>> 1; - if (compare(a[mid], x) > 0) hi = mid; - else lo = mid + 1; - } - return lo; - } - }; -} - -function ascendingComparator(f) { - return function(d, x) { - return (0,_ascending__WEBPACK_IMPORTED_MODULE_0__["default"])(f(d), x); - }; -} - - -/***/ }), - -/***/ "./node_modules/d3-array/src/constant.js": -/*!***********************************************!*\ - !*** ./node_modules/d3-array/src/constant.js ***! - \***********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(x) { - return function() { - return x; - }; -} - - -/***/ }), - -/***/ "./node_modules/d3-array/src/cross.js": -/*!********************************************!*\ - !*** ./node_modules/d3-array/src/cross.js ***! - \********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _pairs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./pairs */ "./node_modules/d3-array/src/pairs.js"); - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(values0, values1, reduce) { - var n0 = values0.length, - n1 = values1.length, - values = new Array(n0 * n1), - i0, - i1, - i, - value0; - - if (reduce == null) reduce = _pairs__WEBPACK_IMPORTED_MODULE_0__.pair; - - for (i0 = i = 0; i0 < n0; ++i0) { - for (value0 = values0[i0], i1 = 0; i1 < n1; ++i1, ++i) { - values[i] = reduce(value0, values1[i1]); - } - } - - return values; -} - - -/***/ }), - -/***/ "./node_modules/d3-array/src/descending.js": -/*!*************************************************!*\ - !*** ./node_modules/d3-array/src/descending.js ***! - \*************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(a, b) { - return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN; -} - - -/***/ }), - -/***/ "./node_modules/d3-array/src/deviation.js": -/*!************************************************!*\ - !*** ./node_modules/d3-array/src/deviation.js ***! - \************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _variance__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./variance */ "./node_modules/d3-array/src/variance.js"); - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(array, f) { - var v = (0,_variance__WEBPACK_IMPORTED_MODULE_0__["default"])(array, f); - return v ? Math.sqrt(v) : v; -} - - -/***/ }), - -/***/ "./node_modules/d3-array/src/extent.js": -/*!*********************************************!*\ - !*** ./node_modules/d3-array/src/extent.js ***! - \*********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(values, valueof) { - var n = values.length, - i = -1, - value, - min, - max; - - if (valueof == null) { - while (++i < n) { // Find the first comparable value. - if ((value = values[i]) != null && value >= value) { - min = max = value; - while (++i < n) { // Compare the remaining values. - if ((value = values[i]) != null) { - if (min > value) min = value; - if (max < value) max = value; - } - } - } - } - } - - else { - while (++i < n) { // Find the first comparable value. - if ((value = valueof(values[i], i, values)) != null && value >= value) { - min = max = value; - while (++i < n) { // Compare the remaining values. - if ((value = valueof(values[i], i, values)) != null) { - if (min > value) min = value; - if (max < value) max = value; - } - } - } - } - } - - return [min, max]; -} - - -/***/ }), - -/***/ "./node_modules/d3-array/src/histogram.js": -/*!************************************************!*\ - !*** ./node_modules/d3-array/src/histogram.js ***! - \************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./array */ "./node_modules/d3-array/src/array.js"); -/* harmony import */ var _bisect__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./bisect */ "./node_modules/d3-array/src/bisect.js"); -/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./constant */ "./node_modules/d3-array/src/constant.js"); -/* harmony import */ var _extent__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./extent */ "./node_modules/d3-array/src/extent.js"); -/* harmony import */ var _identity__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./identity */ "./node_modules/d3-array/src/identity.js"); -/* harmony import */ var _range__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./range */ "./node_modules/d3-array/src/range.js"); -/* harmony import */ var _ticks__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./ticks */ "./node_modules/d3-array/src/ticks.js"); -/* harmony import */ var _threshold_sturges__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./threshold/sturges */ "./node_modules/d3-array/src/threshold/sturges.js"); - - - - - - - - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() { - var value = _identity__WEBPACK_IMPORTED_MODULE_4__["default"], - domain = _extent__WEBPACK_IMPORTED_MODULE_3__["default"], - threshold = _threshold_sturges__WEBPACK_IMPORTED_MODULE_7__["default"]; - - function histogram(data) { - var i, - n = data.length, - x, - values = new Array(n); - - for (i = 0; i < n; ++i) { - values[i] = value(data[i], i, data); - } - - var xz = domain(values), - x0 = xz[0], - x1 = xz[1], - tz = threshold(values, x0, x1); - - // Convert number of thresholds into uniform thresholds. - if (!Array.isArray(tz)) { - tz = (0,_ticks__WEBPACK_IMPORTED_MODULE_6__.tickStep)(x0, x1, tz); - tz = (0,_range__WEBPACK_IMPORTED_MODULE_5__["default"])(Math.ceil(x0 / tz) * tz, x1, tz); // exclusive - } - - // Remove any thresholds outside the domain. - var m = tz.length; - while (tz[0] <= x0) tz.shift(), --m; - while (tz[m - 1] > x1) tz.pop(), --m; - - var bins = new Array(m + 1), - bin; - - // Initialize bins. - for (i = 0; i <= m; ++i) { - bin = bins[i] = []; - bin.x0 = i > 0 ? tz[i - 1] : x0; - bin.x1 = i < m ? tz[i] : x1; - } - - // Assign data to bins by value, ignoring any outside the domain. - for (i = 0; i < n; ++i) { - x = values[i]; - if (x0 <= x && x <= x1) { - bins[(0,_bisect__WEBPACK_IMPORTED_MODULE_1__["default"])(tz, x, 0, m)].push(data[i]); - } - } - - return bins; - } - - histogram.value = function(_) { - return arguments.length ? (value = typeof _ === "function" ? _ : (0,_constant__WEBPACK_IMPORTED_MODULE_2__["default"])(_), histogram) : value; - }; - - histogram.domain = function(_) { - return arguments.length ? (domain = typeof _ === "function" ? _ : (0,_constant__WEBPACK_IMPORTED_MODULE_2__["default"])([_[0], _[1]]), histogram) : domain; - }; - - histogram.thresholds = function(_) { - return arguments.length ? (threshold = typeof _ === "function" ? _ : Array.isArray(_) ? (0,_constant__WEBPACK_IMPORTED_MODULE_2__["default"])(_array__WEBPACK_IMPORTED_MODULE_0__.slice.call(_)) : (0,_constant__WEBPACK_IMPORTED_MODULE_2__["default"])(_), histogram) : threshold; - }; - - return histogram; -} - - -/***/ }), - -/***/ "./node_modules/d3-array/src/identity.js": -/*!***********************************************!*\ - !*** ./node_modules/d3-array/src/identity.js ***! - \***********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(x) { - return x; -} - - -/***/ }), - -/***/ "./node_modules/d3-array/src/index.js": -/*!********************************************!*\ - !*** ./node_modules/d3-array/src/index.js ***! - \********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "ascending": () => (/* reexport safe */ _ascending__WEBPACK_IMPORTED_MODULE_1__["default"]), -/* harmony export */ "bisect": () => (/* reexport safe */ _bisect__WEBPACK_IMPORTED_MODULE_0__["default"]), -/* harmony export */ "bisectLeft": () => (/* reexport safe */ _bisect__WEBPACK_IMPORTED_MODULE_0__.bisectLeft), -/* harmony export */ "bisectRight": () => (/* reexport safe */ _bisect__WEBPACK_IMPORTED_MODULE_0__.bisectRight), -/* harmony export */ "bisector": () => (/* reexport safe */ _bisector__WEBPACK_IMPORTED_MODULE_2__["default"]), -/* harmony export */ "cross": () => (/* reexport safe */ _cross__WEBPACK_IMPORTED_MODULE_3__["default"]), -/* harmony export */ "descending": () => (/* reexport safe */ _descending__WEBPACK_IMPORTED_MODULE_4__["default"]), -/* harmony export */ "deviation": () => (/* reexport safe */ _deviation__WEBPACK_IMPORTED_MODULE_5__["default"]), -/* harmony export */ "extent": () => (/* reexport safe */ _extent__WEBPACK_IMPORTED_MODULE_6__["default"]), -/* harmony export */ "histogram": () => (/* reexport safe */ _histogram__WEBPACK_IMPORTED_MODULE_7__["default"]), -/* harmony export */ "max": () => (/* reexport safe */ _max__WEBPACK_IMPORTED_MODULE_11__["default"]), -/* harmony export */ "mean": () => (/* reexport safe */ _mean__WEBPACK_IMPORTED_MODULE_12__["default"]), -/* harmony export */ "median": () => (/* reexport safe */ _median__WEBPACK_IMPORTED_MODULE_13__["default"]), -/* harmony export */ "merge": () => (/* reexport safe */ _merge__WEBPACK_IMPORTED_MODULE_14__["default"]), -/* harmony export */ "min": () => (/* reexport safe */ _min__WEBPACK_IMPORTED_MODULE_15__["default"]), -/* harmony export */ "pairs": () => (/* reexport safe */ _pairs__WEBPACK_IMPORTED_MODULE_16__["default"]), -/* harmony export */ "permute": () => (/* reexport safe */ _permute__WEBPACK_IMPORTED_MODULE_17__["default"]), -/* harmony export */ "quantile": () => (/* reexport safe */ _quantile__WEBPACK_IMPORTED_MODULE_18__["default"]), -/* harmony export */ "range": () => (/* reexport safe */ _range__WEBPACK_IMPORTED_MODULE_19__["default"]), -/* harmony export */ "scan": () => (/* reexport safe */ _scan__WEBPACK_IMPORTED_MODULE_20__["default"]), -/* harmony export */ "shuffle": () => (/* reexport safe */ _shuffle__WEBPACK_IMPORTED_MODULE_21__["default"]), -/* harmony export */ "sum": () => (/* reexport safe */ _sum__WEBPACK_IMPORTED_MODULE_22__["default"]), -/* harmony export */ "thresholdFreedmanDiaconis": () => (/* reexport safe */ _threshold_freedmanDiaconis__WEBPACK_IMPORTED_MODULE_8__["default"]), -/* harmony export */ "thresholdScott": () => (/* reexport safe */ _threshold_scott__WEBPACK_IMPORTED_MODULE_9__["default"]), -/* harmony export */ "thresholdSturges": () => (/* reexport safe */ _threshold_sturges__WEBPACK_IMPORTED_MODULE_10__["default"]), -/* harmony export */ "tickIncrement": () => (/* reexport safe */ _ticks__WEBPACK_IMPORTED_MODULE_23__.tickIncrement), -/* harmony export */ "tickStep": () => (/* reexport safe */ _ticks__WEBPACK_IMPORTED_MODULE_23__.tickStep), -/* harmony export */ "ticks": () => (/* reexport safe */ _ticks__WEBPACK_IMPORTED_MODULE_23__["default"]), -/* harmony export */ "transpose": () => (/* reexport safe */ _transpose__WEBPACK_IMPORTED_MODULE_24__["default"]), -/* harmony export */ "variance": () => (/* reexport safe */ _variance__WEBPACK_IMPORTED_MODULE_25__["default"]), -/* harmony export */ "zip": () => (/* reexport safe */ _zip__WEBPACK_IMPORTED_MODULE_26__["default"]) -/* harmony export */ }); -/* harmony import */ var _bisect__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./bisect */ "./node_modules/d3-array/src/bisect.js"); -/* harmony import */ var _ascending__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ascending */ "./node_modules/d3-array/src/ascending.js"); -/* harmony import */ var _bisector__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./bisector */ "./node_modules/d3-array/src/bisector.js"); -/* harmony import */ var _cross__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./cross */ "./node_modules/d3-array/src/cross.js"); -/* harmony import */ var _descending__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./descending */ "./node_modules/d3-array/src/descending.js"); -/* harmony import */ var _deviation__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./deviation */ "./node_modules/d3-array/src/deviation.js"); -/* harmony import */ var _extent__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./extent */ "./node_modules/d3-array/src/extent.js"); -/* harmony import */ var _histogram__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./histogram */ "./node_modules/d3-array/src/histogram.js"); -/* harmony import */ var _threshold_freedmanDiaconis__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./threshold/freedmanDiaconis */ "./node_modules/d3-array/src/threshold/freedmanDiaconis.js"); -/* harmony import */ var _threshold_scott__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./threshold/scott */ "./node_modules/d3-array/src/threshold/scott.js"); -/* harmony import */ var _threshold_sturges__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./threshold/sturges */ "./node_modules/d3-array/src/threshold/sturges.js"); -/* harmony import */ var _max__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./max */ "./node_modules/d3-array/src/max.js"); -/* harmony import */ var _mean__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./mean */ "./node_modules/d3-array/src/mean.js"); -/* harmony import */ var _median__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./median */ "./node_modules/d3-array/src/median.js"); -/* harmony import */ var _merge__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./merge */ "./node_modules/d3-array/src/merge.js"); -/* harmony import */ var _min__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./min */ "./node_modules/d3-array/src/min.js"); -/* harmony import */ var _pairs__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./pairs */ "./node_modules/d3-array/src/pairs.js"); -/* harmony import */ var _permute__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./permute */ "./node_modules/d3-array/src/permute.js"); -/* harmony import */ var _quantile__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./quantile */ "./node_modules/d3-array/src/quantile.js"); -/* harmony import */ var _range__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./range */ "./node_modules/d3-array/src/range.js"); -/* harmony import */ var _scan__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./scan */ "./node_modules/d3-array/src/scan.js"); -/* harmony import */ var _shuffle__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./shuffle */ "./node_modules/d3-array/src/shuffle.js"); -/* harmony import */ var _sum__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./sum */ "./node_modules/d3-array/src/sum.js"); -/* harmony import */ var _ticks__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./ticks */ "./node_modules/d3-array/src/ticks.js"); -/* harmony import */ var _transpose__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./transpose */ "./node_modules/d3-array/src/transpose.js"); -/* harmony import */ var _variance__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./variance */ "./node_modules/d3-array/src/variance.js"); -/* harmony import */ var _zip__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./zip */ "./node_modules/d3-array/src/zip.js"); - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -/***/ }), - -/***/ "./node_modules/d3-array/src/max.js": -/*!******************************************!*\ - !*** ./node_modules/d3-array/src/max.js ***! - \******************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(values, valueof) { - var n = values.length, - i = -1, - value, - max; - - if (valueof == null) { - while (++i < n) { // Find the first comparable value. - if ((value = values[i]) != null && value >= value) { - max = value; - while (++i < n) { // Compare the remaining values. - if ((value = values[i]) != null && value > max) { - max = value; - } - } - } - } - } - - else { - while (++i < n) { // Find the first comparable value. - if ((value = valueof(values[i], i, values)) != null && value >= value) { - max = value; - while (++i < n) { // Compare the remaining values. - if ((value = valueof(values[i], i, values)) != null && value > max) { - max = value; - } - } - } - } - } - - return max; -} - - -/***/ }), - -/***/ "./node_modules/d3-array/src/mean.js": -/*!*******************************************!*\ - !*** ./node_modules/d3-array/src/mean.js ***! - \*******************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _number__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./number */ "./node_modules/d3-array/src/number.js"); - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(values, valueof) { - var n = values.length, - m = n, - i = -1, - value, - sum = 0; - - if (valueof == null) { - while (++i < n) { - if (!isNaN(value = (0,_number__WEBPACK_IMPORTED_MODULE_0__["default"])(values[i]))) sum += value; - else --m; - } - } - - else { - while (++i < n) { - if (!isNaN(value = (0,_number__WEBPACK_IMPORTED_MODULE_0__["default"])(valueof(values[i], i, values)))) sum += value; - else --m; - } - } - - if (m) return sum / m; -} - - -/***/ }), - -/***/ "./node_modules/d3-array/src/median.js": -/*!*********************************************!*\ - !*** ./node_modules/d3-array/src/median.js ***! - \*********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _ascending__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ascending */ "./node_modules/d3-array/src/ascending.js"); -/* harmony import */ var _number__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./number */ "./node_modules/d3-array/src/number.js"); -/* harmony import */ var _quantile__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./quantile */ "./node_modules/d3-array/src/quantile.js"); - - - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(values, valueof) { - var n = values.length, - i = -1, - value, - numbers = []; - - if (valueof == null) { - while (++i < n) { - if (!isNaN(value = (0,_number__WEBPACK_IMPORTED_MODULE_1__["default"])(values[i]))) { - numbers.push(value); - } - } - } - - else { - while (++i < n) { - if (!isNaN(value = (0,_number__WEBPACK_IMPORTED_MODULE_1__["default"])(valueof(values[i], i, values)))) { - numbers.push(value); - } - } - } - - return (0,_quantile__WEBPACK_IMPORTED_MODULE_2__["default"])(numbers.sort(_ascending__WEBPACK_IMPORTED_MODULE_0__["default"]), 0.5); -} - - -/***/ }), - -/***/ "./node_modules/d3-array/src/merge.js": -/*!********************************************!*\ - !*** ./node_modules/d3-array/src/merge.js ***! - \********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(arrays) { - var n = arrays.length, - m, - i = -1, - j = 0, - merged, - array; - - while (++i < n) j += arrays[i].length; - merged = new Array(j); - - while (--n >= 0) { - array = arrays[n]; - m = array.length; - while (--m >= 0) { - merged[--j] = array[m]; - } - } - - return merged; -} - - -/***/ }), - -/***/ "./node_modules/d3-array/src/min.js": -/*!******************************************!*\ - !*** ./node_modules/d3-array/src/min.js ***! - \******************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(values, valueof) { - var n = values.length, - i = -1, - value, - min; - - if (valueof == null) { - while (++i < n) { // Find the first comparable value. - if ((value = values[i]) != null && value >= value) { - min = value; - while (++i < n) { // Compare the remaining values. - if ((value = values[i]) != null && min > value) { - min = value; - } - } - } - } - } - - else { - while (++i < n) { // Find the first comparable value. - if ((value = valueof(values[i], i, values)) != null && value >= value) { - min = value; - while (++i < n) { // Compare the remaining values. - if ((value = valueof(values[i], i, values)) != null && min > value) { - min = value; - } - } - } - } - } - - return min; -} - - -/***/ }), - -/***/ "./node_modules/d3-array/src/number.js": -/*!*********************************************!*\ - !*** ./node_modules/d3-array/src/number.js ***! - \*********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(x) { - return x === null ? NaN : +x; -} - - -/***/ }), - -/***/ "./node_modules/d3-array/src/pairs.js": -/*!********************************************!*\ - !*** ./node_modules/d3-array/src/pairs.js ***! - \********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "pair": () => (/* binding */ pair) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(array, f) { - if (f == null) f = pair; - var i = 0, n = array.length - 1, p = array[0], pairs = new Array(n < 0 ? 0 : n); - while (i < n) pairs[i] = f(p, p = array[++i]); - return pairs; -} - -function pair(a, b) { - return [a, b]; -} - - -/***/ }), - -/***/ "./node_modules/d3-array/src/permute.js": -/*!**********************************************!*\ - !*** ./node_modules/d3-array/src/permute.js ***! - \**********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(array, indexes) { - var i = indexes.length, permutes = new Array(i); - while (i--) permutes[i] = array[indexes[i]]; - return permutes; -} - - -/***/ }), - -/***/ "./node_modules/d3-array/src/quantile.js": -/*!***********************************************!*\ - !*** ./node_modules/d3-array/src/quantile.js ***! - \***********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _number__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./number */ "./node_modules/d3-array/src/number.js"); - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(values, p, valueof) { - if (valueof == null) valueof = _number__WEBPACK_IMPORTED_MODULE_0__["default"]; - if (!(n = values.length)) return; - if ((p = +p) <= 0 || n < 2) return +valueof(values[0], 0, values); - if (p >= 1) return +valueof(values[n - 1], n - 1, values); - var n, - i = (n - 1) * p, - i0 = Math.floor(i), - value0 = +valueof(values[i0], i0, values), - value1 = +valueof(values[i0 + 1], i0 + 1, values); - return value0 + (value1 - value0) * (i - i0); -} - - -/***/ }), - -/***/ "./node_modules/d3-array/src/range.js": -/*!********************************************!*\ - !*** ./node_modules/d3-array/src/range.js ***! - \********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(start, stop, step) { - start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step; - - var i = -1, - n = Math.max(0, Math.ceil((stop - start) / step)) | 0, - range = new Array(n); - - while (++i < n) { - range[i] = start + i * step; - } - - return range; -} - - -/***/ }), - -/***/ "./node_modules/d3-array/src/scan.js": -/*!*******************************************!*\ - !*** ./node_modules/d3-array/src/scan.js ***! - \*******************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _ascending__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ascending */ "./node_modules/d3-array/src/ascending.js"); - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(values, compare) { - if (!(n = values.length)) return; - var n, - i = 0, - j = 0, - xi, - xj = values[j]; - - if (compare == null) compare = _ascending__WEBPACK_IMPORTED_MODULE_0__["default"]; - - while (++i < n) { - if (compare(xi = values[i], xj) < 0 || compare(xj, xj) !== 0) { - xj = xi, j = i; - } - } - - if (compare(xj, xj) === 0) return j; -} - - -/***/ }), - -/***/ "./node_modules/d3-array/src/shuffle.js": -/*!**********************************************!*\ - !*** ./node_modules/d3-array/src/shuffle.js ***! - \**********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(array, i0, i1) { - var m = (i1 == null ? array.length : i1) - (i0 = i0 == null ? 0 : +i0), - t, - i; - - while (m) { - i = Math.random() * m-- | 0; - t = array[m + i0]; - array[m + i0] = array[i + i0]; - array[i + i0] = t; - } - - return array; -} - - -/***/ }), - -/***/ "./node_modules/d3-array/src/sum.js": -/*!******************************************!*\ - !*** ./node_modules/d3-array/src/sum.js ***! - \******************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(values, valueof) { - var n = values.length, - i = -1, - value, - sum = 0; - - if (valueof == null) { - while (++i < n) { - if (value = +values[i]) sum += value; // Note: zero and null are equivalent. - } - } - - else { - while (++i < n) { - if (value = +valueof(values[i], i, values)) sum += value; - } - } - - return sum; -} - - -/***/ }), - -/***/ "./node_modules/d3-array/src/threshold/freedmanDiaconis.js": -/*!*****************************************************************!*\ - !*** ./node_modules/d3-array/src/threshold/freedmanDiaconis.js ***! - \*****************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../array */ "./node_modules/d3-array/src/array.js"); -/* harmony import */ var _ascending__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ascending */ "./node_modules/d3-array/src/ascending.js"); -/* harmony import */ var _number__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../number */ "./node_modules/d3-array/src/number.js"); -/* harmony import */ var _quantile__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../quantile */ "./node_modules/d3-array/src/quantile.js"); - - - - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(values, min, max) { - values = _array__WEBPACK_IMPORTED_MODULE_0__.map.call(values, _number__WEBPACK_IMPORTED_MODULE_2__["default"]).sort(_ascending__WEBPACK_IMPORTED_MODULE_1__["default"]); - return Math.ceil((max - min) / (2 * ((0,_quantile__WEBPACK_IMPORTED_MODULE_3__["default"])(values, 0.75) - (0,_quantile__WEBPACK_IMPORTED_MODULE_3__["default"])(values, 0.25)) * Math.pow(values.length, -1 / 3))); -} - - -/***/ }), - -/***/ "./node_modules/d3-array/src/threshold/scott.js": -/*!******************************************************!*\ - !*** ./node_modules/d3-array/src/threshold/scott.js ***! - \******************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _deviation__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../deviation */ "./node_modules/d3-array/src/deviation.js"); - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(values, min, max) { - return Math.ceil((max - min) / (3.5 * (0,_deviation__WEBPACK_IMPORTED_MODULE_0__["default"])(values) * Math.pow(values.length, -1 / 3))); -} - - -/***/ }), - -/***/ "./node_modules/d3-array/src/threshold/sturges.js": -/*!********************************************************!*\ - !*** ./node_modules/d3-array/src/threshold/sturges.js ***! - \********************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(values) { - return Math.ceil(Math.log(values.length) / Math.LN2) + 1; -} - - -/***/ }), - -/***/ "./node_modules/d3-array/src/ticks.js": -/*!********************************************!*\ - !*** ./node_modules/d3-array/src/ticks.js ***! - \********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "tickIncrement": () => (/* binding */ tickIncrement), -/* harmony export */ "tickStep": () => (/* binding */ tickStep) -/* harmony export */ }); -var e10 = Math.sqrt(50), - e5 = Math.sqrt(10), - e2 = Math.sqrt(2); - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(start, stop, count) { - var reverse, - i = -1, - n, - ticks, - step; - - stop = +stop, start = +start, count = +count; - if (start === stop && count > 0) return [start]; - if (reverse = stop < start) n = start, start = stop, stop = n; - if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return []; - - if (step > 0) { - start = Math.ceil(start / step); - stop = Math.floor(stop / step); - ticks = new Array(n = Math.ceil(stop - start + 1)); - while (++i < n) ticks[i] = (start + i) * step; - } else { - start = Math.floor(start * step); - stop = Math.ceil(stop * step); - ticks = new Array(n = Math.ceil(start - stop + 1)); - while (++i < n) ticks[i] = (start - i) / step; - } - - if (reverse) ticks.reverse(); - - return ticks; -} - -function tickIncrement(start, stop, count) { - var step = (stop - start) / Math.max(0, count), - power = Math.floor(Math.log(step) / Math.LN10), - error = step / Math.pow(10, power); - return power >= 0 - ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power) - : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1); -} - -function tickStep(start, stop, count) { - var step0 = Math.abs(stop - start) / Math.max(0, count), - step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)), - error = step0 / step1; - if (error >= e10) step1 *= 10; - else if (error >= e5) step1 *= 5; - else if (error >= e2) step1 *= 2; - return stop < start ? -step1 : step1; -} - - -/***/ }), - -/***/ "./node_modules/d3-array/src/transpose.js": -/*!************************************************!*\ - !*** ./node_modules/d3-array/src/transpose.js ***! - \************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _min__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./min */ "./node_modules/d3-array/src/min.js"); - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(matrix) { - if (!(n = matrix.length)) return []; - for (var i = -1, m = (0,_min__WEBPACK_IMPORTED_MODULE_0__["default"])(matrix, length), transpose = new Array(m); ++i < m;) { - for (var j = -1, n, row = transpose[i] = new Array(n); ++j < n;) { - row[j] = matrix[j][i]; - } - } - return transpose; -} - -function length(d) { - return d.length; -} - - -/***/ }), - -/***/ "./node_modules/d3-array/src/variance.js": -/*!***********************************************!*\ - !*** ./node_modules/d3-array/src/variance.js ***! - \***********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _number__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./number */ "./node_modules/d3-array/src/number.js"); - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(values, valueof) { - var n = values.length, - m = 0, - i = -1, - mean = 0, - value, - delta, - sum = 0; - - if (valueof == null) { - while (++i < n) { - if (!isNaN(value = (0,_number__WEBPACK_IMPORTED_MODULE_0__["default"])(values[i]))) { - delta = value - mean; - mean += delta / ++m; - sum += delta * (value - mean); - } - } - } - - else { - while (++i < n) { - if (!isNaN(value = (0,_number__WEBPACK_IMPORTED_MODULE_0__["default"])(valueof(values[i], i, values)))) { - delta = value - mean; - mean += delta / ++m; - sum += delta * (value - mean); - } - } - } - - if (m > 1) return sum / (m - 1); -} - - -/***/ }), - -/***/ "./node_modules/d3-array/src/zip.js": -/*!******************************************!*\ - !*** ./node_modules/d3-array/src/zip.js ***! - \******************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _transpose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./transpose */ "./node_modules/d3-array/src/transpose.js"); - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() { - return (0,_transpose__WEBPACK_IMPORTED_MODULE_0__["default"])(arguments); -} - - -/***/ }), - -/***/ "./node_modules/d3-axis/src/array.js": -/*!*******************************************!*\ - !*** ./node_modules/d3-axis/src/array.js ***! - \*******************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "slice": () => (/* binding */ slice) -/* harmony export */ }); -var slice = Array.prototype.slice; - - -/***/ }), - -/***/ "./node_modules/d3-axis/src/axis.js": -/*!******************************************!*\ - !*** ./node_modules/d3-axis/src/axis.js ***! - \******************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "axisBottom": () => (/* binding */ axisBottom), -/* harmony export */ "axisLeft": () => (/* binding */ axisLeft), -/* harmony export */ "axisRight": () => (/* binding */ axisRight), -/* harmony export */ "axisTop": () => (/* binding */ axisTop) -/* harmony export */ }); -/* harmony import */ var _array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./array */ "./node_modules/d3-axis/src/array.js"); -/* harmony import */ var _identity__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./identity */ "./node_modules/d3-axis/src/identity.js"); - - - -var top = 1, - right = 2, - bottom = 3, - left = 4, - epsilon = 1e-6; - -function translateX(x) { - return "translate(" + (x + 0.5) + ",0)"; -} - -function translateY(y) { - return "translate(0," + (y + 0.5) + ")"; -} - -function number(scale) { - return function(d) { - return +scale(d); - }; -} - -function center(scale) { - var offset = Math.max(0, scale.bandwidth() - 1) / 2; // Adjust for 0.5px offset. - if (scale.round()) offset = Math.round(offset); - return function(d) { - return +scale(d) + offset; - }; -} - -function entering() { - return !this.__axis; -} - -function axis(orient, scale) { - var tickArguments = [], - tickValues = null, - tickFormat = null, - tickSizeInner = 6, - tickSizeOuter = 6, - tickPadding = 3, - k = orient === top || orient === left ? -1 : 1, - x = orient === left || orient === right ? "x" : "y", - transform = orient === top || orient === bottom ? translateX : translateY; - - function axis(context) { - var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues, - format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : _identity__WEBPACK_IMPORTED_MODULE_1__["default"]) : tickFormat, - spacing = Math.max(tickSizeInner, 0) + tickPadding, - range = scale.range(), - range0 = +range[0] + 0.5, - range1 = +range[range.length - 1] + 0.5, - position = (scale.bandwidth ? center : number)(scale.copy()), - selection = context.selection ? context.selection() : context, - path = selection.selectAll(".domain").data([null]), - tick = selection.selectAll(".tick").data(values, scale).order(), - tickExit = tick.exit(), - tickEnter = tick.enter().append("g").attr("class", "tick"), - line = tick.select("line"), - text = tick.select("text"); - - path = path.merge(path.enter().insert("path", ".tick") - .attr("class", "domain") - .attr("stroke", "currentColor")); - - tick = tick.merge(tickEnter); - - line = line.merge(tickEnter.append("line") - .attr("stroke", "currentColor") - .attr(x + "2", k * tickSizeInner)); - - text = text.merge(tickEnter.append("text") - .attr("fill", "currentColor") - .attr(x, k * spacing) - .attr("dy", orient === top ? "0em" : orient === bottom ? "0.71em" : "0.32em")); - - if (context !== selection) { - path = path.transition(context); - tick = tick.transition(context); - line = line.transition(context); - text = text.transition(context); - - tickExit = tickExit.transition(context) - .attr("opacity", epsilon) - .attr("transform", function(d) { return isFinite(d = position(d)) ? transform(d) : this.getAttribute("transform"); }); - - tickEnter - .attr("opacity", epsilon) - .attr("transform", function(d) { var p = this.parentNode.__axis; return transform(p && isFinite(p = p(d)) ? p : position(d)); }); - } - - tickExit.remove(); - - path - .attr("d", orient === left || orient == right - ? (tickSizeOuter ? "M" + k * tickSizeOuter + "," + range0 + "H0.5V" + range1 + "H" + k * tickSizeOuter : "M0.5," + range0 + "V" + range1) - : (tickSizeOuter ? "M" + range0 + "," + k * tickSizeOuter + "V0.5H" + range1 + "V" + k * tickSizeOuter : "M" + range0 + ",0.5H" + range1)); - - tick - .attr("opacity", 1) - .attr("transform", function(d) { return transform(position(d)); }); - - line - .attr(x + "2", k * tickSizeInner); - - text - .attr(x, k * spacing) - .text(format); - - selection.filter(entering) - .attr("fill", "none") - .attr("font-size", 10) - .attr("font-family", "sans-serif") - .attr("text-anchor", orient === right ? "start" : orient === left ? "end" : "middle"); - - selection - .each(function() { this.__axis = position; }); - } - - axis.scale = function(_) { - return arguments.length ? (scale = _, axis) : scale; - }; - - axis.ticks = function() { - return tickArguments = _array__WEBPACK_IMPORTED_MODULE_0__.slice.call(arguments), axis; - }; - - axis.tickArguments = function(_) { - return arguments.length ? (tickArguments = _ == null ? [] : _array__WEBPACK_IMPORTED_MODULE_0__.slice.call(_), axis) : tickArguments.slice(); - }; - - axis.tickValues = function(_) { - return arguments.length ? (tickValues = _ == null ? null : _array__WEBPACK_IMPORTED_MODULE_0__.slice.call(_), axis) : tickValues && tickValues.slice(); - }; - - axis.tickFormat = function(_) { - return arguments.length ? (tickFormat = _, axis) : tickFormat; - }; - - axis.tickSize = function(_) { - return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner; - }; - - axis.tickSizeInner = function(_) { - return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner; - }; - - axis.tickSizeOuter = function(_) { - return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter; - }; - - axis.tickPadding = function(_) { - return arguments.length ? (tickPadding = +_, axis) : tickPadding; - }; - - return axis; -} - -function axisTop(scale) { - return axis(top, scale); -} - -function axisRight(scale) { - return axis(right, scale); -} - -function axisBottom(scale) { - return axis(bottom, scale); -} - -function axisLeft(scale) { - return axis(left, scale); -} - - -/***/ }), - -/***/ "./node_modules/d3-axis/src/identity.js": -/*!**********************************************!*\ - !*** ./node_modules/d3-axis/src/identity.js ***! - \**********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(x) { - return x; -} - - -/***/ }), - -/***/ "./node_modules/d3-axis/src/index.js": -/*!*******************************************!*\ - !*** ./node_modules/d3-axis/src/index.js ***! - \*******************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "axisBottom": () => (/* reexport safe */ _axis__WEBPACK_IMPORTED_MODULE_0__.axisBottom), -/* harmony export */ "axisLeft": () => (/* reexport safe */ _axis__WEBPACK_IMPORTED_MODULE_0__.axisLeft), -/* harmony export */ "axisRight": () => (/* reexport safe */ _axis__WEBPACK_IMPORTED_MODULE_0__.axisRight), -/* harmony export */ "axisTop": () => (/* reexport safe */ _axis__WEBPACK_IMPORTED_MODULE_0__.axisTop) -/* harmony export */ }); -/* harmony import */ var _axis__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./axis */ "./node_modules/d3-axis/src/axis.js"); - - - -/***/ }), - -/***/ "./node_modules/d3-brush/src/brush.js": -/*!********************************************!*\ - !*** ./node_modules/d3-brush/src/brush.js ***! - \********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "brushSelection": () => (/* binding */ brushSelection), -/* harmony export */ "brushX": () => (/* binding */ brushX), -/* harmony export */ "brushY": () => (/* binding */ brushY), -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var d3_dispatch__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! d3-dispatch */ "./node_modules/d3-dispatch/src/dispatch.js"); -/* harmony import */ var d3_drag__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! d3-drag */ "./node_modules/d3-drag/src/nodrag.js"); -/* harmony import */ var d3_interpolate__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! d3-interpolate */ "./node_modules/d3-interpolate/src/value.js"); -/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! d3-selection */ "./node_modules/d3-selection/src/touch.js"); -/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! d3-selection */ "./node_modules/d3-selection/src/selection/on.js"); -/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! d3-selection */ "./node_modules/d3-selection/src/select.js"); -/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! d3-selection */ "./node_modules/d3-selection/src/mouse.js"); -/* harmony import */ var d3_transition__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-transition */ "./node_modules/d3-transition/src/index.js"); -/* harmony import */ var _constant_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./constant.js */ "./node_modules/d3-brush/src/constant.js"); -/* harmony import */ var _event_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./event.js */ "./node_modules/d3-brush/src/event.js"); -/* harmony import */ var _noevent_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./noevent.js */ "./node_modules/d3-brush/src/noevent.js"); - - - - - - - - - -var MODE_DRAG = {name: "drag"}, - MODE_SPACE = {name: "space"}, - MODE_HANDLE = {name: "handle"}, - MODE_CENTER = {name: "center"}; - -function number1(e) { - return [+e[0], +e[1]]; -} - -function number2(e) { - return [number1(e[0]), number1(e[1])]; -} - -function toucher(identifier) { - return function(target) { - return (0,d3_selection__WEBPACK_IMPORTED_MODULE_4__["default"])(target, d3_selection__WEBPACK_IMPORTED_MODULE_5__.event.touches, identifier); - }; -} - -var X = { - name: "x", - handles: ["w", "e"].map(type), - input: function(x, e) { return x == null ? null : [[+x[0], e[0][1]], [+x[1], e[1][1]]]; }, - output: function(xy) { return xy && [xy[0][0], xy[1][0]]; } -}; - -var Y = { - name: "y", - handles: ["n", "s"].map(type), - input: function(y, e) { return y == null ? null : [[e[0][0], +y[0]], [e[1][0], +y[1]]]; }, - output: function(xy) { return xy && [xy[0][1], xy[1][1]]; } -}; - -var XY = { - name: "xy", - handles: ["n", "w", "e", "s", "nw", "ne", "sw", "se"].map(type), - input: function(xy) { return xy == null ? null : number2(xy); }, - output: function(xy) { return xy; } -}; - -var cursors = { - overlay: "crosshair", - selection: "move", - n: "ns-resize", - e: "ew-resize", - s: "ns-resize", - w: "ew-resize", - nw: "nwse-resize", - ne: "nesw-resize", - se: "nwse-resize", - sw: "nesw-resize" -}; - -var flipX = { - e: "w", - w: "e", - nw: "ne", - ne: "nw", - se: "sw", - sw: "se" -}; - -var flipY = { - n: "s", - s: "n", - nw: "sw", - ne: "se", - se: "ne", - sw: "nw" -}; - -var signsX = { - overlay: +1, - selection: +1, - n: null, - e: +1, - s: null, - w: -1, - nw: -1, - ne: +1, - se: +1, - sw: -1 -}; - -var signsY = { - overlay: +1, - selection: +1, - n: -1, - e: null, - s: +1, - w: null, - nw: -1, - ne: -1, - se: +1, - sw: +1 -}; - -function type(t) { - return {type: t}; -} - -// Ignore right-click, since that should open the context menu. -function defaultFilter() { - return !d3_selection__WEBPACK_IMPORTED_MODULE_5__.event.ctrlKey && !d3_selection__WEBPACK_IMPORTED_MODULE_5__.event.button; -} - -function defaultExtent() { - var svg = this.ownerSVGElement || this; - if (svg.hasAttribute("viewBox")) { - svg = svg.viewBox.baseVal; - return [[svg.x, svg.y], [svg.x + svg.width, svg.y + svg.height]]; - } - return [[0, 0], [svg.width.baseVal.value, svg.height.baseVal.value]]; -} - -function defaultTouchable() { - return navigator.maxTouchPoints || ("ontouchstart" in this); -} - -// Like d3.local, but with the name “__brush” rather than auto-generated. -function local(node) { - while (!node.__brush) if (!(node = node.parentNode)) return; - return node.__brush; -} - -function empty(extent) { - return extent[0][0] === extent[1][0] - || extent[0][1] === extent[1][1]; -} - -function brushSelection(node) { - var state = node.__brush; - return state ? state.dim.output(state.selection) : null; -} - -function brushX() { - return brush(X); -} - -function brushY() { - return brush(Y); -} - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() { - return brush(XY); -} - -function brush(dim) { - var extent = defaultExtent, - filter = defaultFilter, - touchable = defaultTouchable, - keys = true, - listeners = (0,d3_dispatch__WEBPACK_IMPORTED_MODULE_6__["default"])("start", "brush", "end"), - handleSize = 6, - touchending; - - function brush(group) { - var overlay = group - .property("__brush", initialize) - .selectAll(".overlay") - .data([type("overlay")]); - - overlay.enter().append("rect") - .attr("class", "overlay") - .attr("pointer-events", "all") - .attr("cursor", cursors.overlay) - .merge(overlay) - .each(function() { - var extent = local(this).extent; - (0,d3_selection__WEBPACK_IMPORTED_MODULE_7__["default"])(this) - .attr("x", extent[0][0]) - .attr("y", extent[0][1]) - .attr("width", extent[1][0] - extent[0][0]) - .attr("height", extent[1][1] - extent[0][1]); - }); - - group.selectAll(".selection") - .data([type("selection")]) - .enter().append("rect") - .attr("class", "selection") - .attr("cursor", cursors.selection) - .attr("fill", "#777") - .attr("fill-opacity", 0.3) - .attr("stroke", "#fff") - .attr("shape-rendering", "crispEdges"); - - var handle = group.selectAll(".handle") - .data(dim.handles, function(d) { return d.type; }); - - handle.exit().remove(); - - handle.enter().append("rect") - .attr("class", function(d) { return "handle handle--" + d.type; }) - .attr("cursor", function(d) { return cursors[d.type]; }); - - group - .each(redraw) - .attr("fill", "none") - .attr("pointer-events", "all") - .on("mousedown.brush", started) - .filter(touchable) - .on("touchstart.brush", started) - .on("touchmove.brush", touchmoved) - .on("touchend.brush touchcancel.brush", touchended) - .style("touch-action", "none") - .style("-webkit-tap-highlight-color", "rgba(0,0,0,0)"); - } - - brush.move = function(group, selection) { - if (group.selection) { - group - .on("start.brush", function() { emitter(this, arguments).beforestart().start(); }) - .on("interrupt.brush end.brush", function() { emitter(this, arguments).end(); }) - .tween("brush", function() { - var that = this, - state = that.__brush, - emit = emitter(that, arguments), - selection0 = state.selection, - selection1 = dim.input(typeof selection === "function" ? selection.apply(this, arguments) : selection, state.extent), - i = (0,d3_interpolate__WEBPACK_IMPORTED_MODULE_8__["default"])(selection0, selection1); - - function tween(t) { - state.selection = t === 1 && selection1 === null ? null : i(t); - redraw.call(that); - emit.brush(); - } - - return selection0 !== null && selection1 !== null ? tween : tween(1); - }); - } else { - group - .each(function() { - var that = this, - args = arguments, - state = that.__brush, - selection1 = dim.input(typeof selection === "function" ? selection.apply(that, args) : selection, state.extent), - emit = emitter(that, args).beforestart(); - - (0,d3_transition__WEBPACK_IMPORTED_MODULE_0__.interrupt)(that); - state.selection = selection1 === null ? null : selection1; - redraw.call(that); - emit.start().brush().end(); - }); - } - }; - - brush.clear = function(group) { - brush.move(group, null); - }; - - function redraw() { - var group = (0,d3_selection__WEBPACK_IMPORTED_MODULE_7__["default"])(this), - selection = local(this).selection; - - if (selection) { - group.selectAll(".selection") - .style("display", null) - .attr("x", selection[0][0]) - .attr("y", selection[0][1]) - .attr("width", selection[1][0] - selection[0][0]) - .attr("height", selection[1][1] - selection[0][1]); - - group.selectAll(".handle") - .style("display", null) - .attr("x", function(d) { return d.type[d.type.length - 1] === "e" ? selection[1][0] - handleSize / 2 : selection[0][0] - handleSize / 2; }) - .attr("y", function(d) { return d.type[0] === "s" ? selection[1][1] - handleSize / 2 : selection[0][1] - handleSize / 2; }) - .attr("width", function(d) { return d.type === "n" || d.type === "s" ? selection[1][0] - selection[0][0] + handleSize : handleSize; }) - .attr("height", function(d) { return d.type === "e" || d.type === "w" ? selection[1][1] - selection[0][1] + handleSize : handleSize; }); - } - - else { - group.selectAll(".selection,.handle") - .style("display", "none") - .attr("x", null) - .attr("y", null) - .attr("width", null) - .attr("height", null); - } - } - - function emitter(that, args, clean) { - var emit = that.__brush.emitter; - return emit && (!clean || !emit.clean) ? emit : new Emitter(that, args, clean); - } - - function Emitter(that, args, clean) { - this.that = that; - this.args = args; - this.state = that.__brush; - this.active = 0; - this.clean = clean; - } - - Emitter.prototype = { - beforestart: function() { - if (++this.active === 1) this.state.emitter = this, this.starting = true; - return this; - }, - start: function() { - if (this.starting) this.starting = false, this.emit("start"); - else this.emit("brush"); - return this; - }, - brush: function() { - this.emit("brush"); - return this; - }, - end: function() { - if (--this.active === 0) delete this.state.emitter, this.emit("end"); - return this; - }, - emit: function(type) { - (0,d3_selection__WEBPACK_IMPORTED_MODULE_5__.customEvent)(new _event_js__WEBPACK_IMPORTED_MODULE_2__["default"](brush, type, dim.output(this.state.selection)), listeners.apply, listeners, [type, this.that, this.args]); - } - }; - - function started() { - if (touchending && !d3_selection__WEBPACK_IMPORTED_MODULE_5__.event.touches) return; - if (!filter.apply(this, arguments)) return; - - var that = this, - type = d3_selection__WEBPACK_IMPORTED_MODULE_5__.event.target.__data__.type, - mode = (keys && d3_selection__WEBPACK_IMPORTED_MODULE_5__.event.metaKey ? type = "overlay" : type) === "selection" ? MODE_DRAG : (keys && d3_selection__WEBPACK_IMPORTED_MODULE_5__.event.altKey ? MODE_CENTER : MODE_HANDLE), - signX = dim === Y ? null : signsX[type], - signY = dim === X ? null : signsY[type], - state = local(that), - extent = state.extent, - selection = state.selection, - W = extent[0][0], w0, w1, - N = extent[0][1], n0, n1, - E = extent[1][0], e0, e1, - S = extent[1][1], s0, s1, - dx = 0, - dy = 0, - moving, - shifting = signX && signY && keys && d3_selection__WEBPACK_IMPORTED_MODULE_5__.event.shiftKey, - lockX, - lockY, - pointer = d3_selection__WEBPACK_IMPORTED_MODULE_5__.event.touches ? toucher(d3_selection__WEBPACK_IMPORTED_MODULE_5__.event.changedTouches[0].identifier) : d3_selection__WEBPACK_IMPORTED_MODULE_9__["default"], - point0 = pointer(that), - point = point0, - emit = emitter(that, arguments, true).beforestart(); - - if (type === "overlay") { - if (selection) moving = true; - state.selection = selection = [ - [w0 = dim === Y ? W : point0[0], n0 = dim === X ? N : point0[1]], - [e0 = dim === Y ? E : w0, s0 = dim === X ? S : n0] - ]; - } else { - w0 = selection[0][0]; - n0 = selection[0][1]; - e0 = selection[1][0]; - s0 = selection[1][1]; - } - - w1 = w0; - n1 = n0; - e1 = e0; - s1 = s0; - - var group = (0,d3_selection__WEBPACK_IMPORTED_MODULE_7__["default"])(that) - .attr("pointer-events", "none"); - - var overlay = group.selectAll(".overlay") - .attr("cursor", cursors[type]); - - if (d3_selection__WEBPACK_IMPORTED_MODULE_5__.event.touches) { - emit.moved = moved; - emit.ended = ended; - } else { - var view = (0,d3_selection__WEBPACK_IMPORTED_MODULE_7__["default"])(d3_selection__WEBPACK_IMPORTED_MODULE_5__.event.view) - .on("mousemove.brush", moved, true) - .on("mouseup.brush", ended, true); - if (keys) view - .on("keydown.brush", keydowned, true) - .on("keyup.brush", keyupped, true) - - ;(0,d3_drag__WEBPACK_IMPORTED_MODULE_10__["default"])(d3_selection__WEBPACK_IMPORTED_MODULE_5__.event.view); - } - - (0,_noevent_js__WEBPACK_IMPORTED_MODULE_3__.nopropagation)(); - (0,d3_transition__WEBPACK_IMPORTED_MODULE_0__.interrupt)(that); - redraw.call(that); - emit.start(); - - function moved() { - var point1 = pointer(that); - if (shifting && !lockX && !lockY) { - if (Math.abs(point1[0] - point[0]) > Math.abs(point1[1] - point[1])) lockY = true; - else lockX = true; - } - point = point1; - moving = true; - (0,_noevent_js__WEBPACK_IMPORTED_MODULE_3__["default"])(); - move(); - } - - function move() { - var t; - - dx = point[0] - point0[0]; - dy = point[1] - point0[1]; - - switch (mode) { - case MODE_SPACE: - case MODE_DRAG: { - if (signX) dx = Math.max(W - w0, Math.min(E - e0, dx)), w1 = w0 + dx, e1 = e0 + dx; - if (signY) dy = Math.max(N - n0, Math.min(S - s0, dy)), n1 = n0 + dy, s1 = s0 + dy; - break; - } - case MODE_HANDLE: { - if (signX < 0) dx = Math.max(W - w0, Math.min(E - w0, dx)), w1 = w0 + dx, e1 = e0; - else if (signX > 0) dx = Math.max(W - e0, Math.min(E - e0, dx)), w1 = w0, e1 = e0 + dx; - if (signY < 0) dy = Math.max(N - n0, Math.min(S - n0, dy)), n1 = n0 + dy, s1 = s0; - else if (signY > 0) dy = Math.max(N - s0, Math.min(S - s0, dy)), n1 = n0, s1 = s0 + dy; - break; - } - case MODE_CENTER: { - if (signX) w1 = Math.max(W, Math.min(E, w0 - dx * signX)), e1 = Math.max(W, Math.min(E, e0 + dx * signX)); - if (signY) n1 = Math.max(N, Math.min(S, n0 - dy * signY)), s1 = Math.max(N, Math.min(S, s0 + dy * signY)); - break; - } - } - - if (e1 < w1) { - signX *= -1; - t = w0, w0 = e0, e0 = t; - t = w1, w1 = e1, e1 = t; - if (type in flipX) overlay.attr("cursor", cursors[type = flipX[type]]); - } - - if (s1 < n1) { - signY *= -1; - t = n0, n0 = s0, s0 = t; - t = n1, n1 = s1, s1 = t; - if (type in flipY) overlay.attr("cursor", cursors[type = flipY[type]]); - } - - if (state.selection) selection = state.selection; // May be set by brush.move! - if (lockX) w1 = selection[0][0], e1 = selection[1][0]; - if (lockY) n1 = selection[0][1], s1 = selection[1][1]; - - if (selection[0][0] !== w1 - || selection[0][1] !== n1 - || selection[1][0] !== e1 - || selection[1][1] !== s1) { - state.selection = [[w1, n1], [e1, s1]]; - redraw.call(that); - emit.brush(); - } - } - - function ended() { - (0,_noevent_js__WEBPACK_IMPORTED_MODULE_3__.nopropagation)(); - if (d3_selection__WEBPACK_IMPORTED_MODULE_5__.event.touches) { - if (d3_selection__WEBPACK_IMPORTED_MODULE_5__.event.touches.length) return; - if (touchending) clearTimeout(touchending); - touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed! - } else { - (0,d3_drag__WEBPACK_IMPORTED_MODULE_10__.yesdrag)(d3_selection__WEBPACK_IMPORTED_MODULE_5__.event.view, moving); - view.on("keydown.brush keyup.brush mousemove.brush mouseup.brush", null); - } - group.attr("pointer-events", "all"); - overlay.attr("cursor", cursors.overlay); - if (state.selection) selection = state.selection; // May be set by brush.move (on start)! - if (empty(selection)) state.selection = null, redraw.call(that); - emit.end(); - } - - function keydowned() { - switch (d3_selection__WEBPACK_IMPORTED_MODULE_5__.event.keyCode) { - case 16: { // SHIFT - shifting = signX && signY; - break; - } - case 18: { // ALT - if (mode === MODE_HANDLE) { - if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX; - if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY; - mode = MODE_CENTER; - move(); - } - break; - } - case 32: { // SPACE; takes priority over ALT - if (mode === MODE_HANDLE || mode === MODE_CENTER) { - if (signX < 0) e0 = e1 - dx; else if (signX > 0) w0 = w1 - dx; - if (signY < 0) s0 = s1 - dy; else if (signY > 0) n0 = n1 - dy; - mode = MODE_SPACE; - overlay.attr("cursor", cursors.selection); - move(); - } - break; - } - default: return; - } - (0,_noevent_js__WEBPACK_IMPORTED_MODULE_3__["default"])(); - } - - function keyupped() { - switch (d3_selection__WEBPACK_IMPORTED_MODULE_5__.event.keyCode) { - case 16: { // SHIFT - if (shifting) { - lockX = lockY = shifting = false; - move(); - } - break; - } - case 18: { // ALT - if (mode === MODE_CENTER) { - if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1; - if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1; - mode = MODE_HANDLE; - move(); - } - break; - } - case 32: { // SPACE - if (mode === MODE_SPACE) { - if (d3_selection__WEBPACK_IMPORTED_MODULE_5__.event.altKey) { - if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX; - if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY; - mode = MODE_CENTER; - } else { - if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1; - if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1; - mode = MODE_HANDLE; - } - overlay.attr("cursor", cursors[type]); - move(); - } - break; - } - default: return; - } - (0,_noevent_js__WEBPACK_IMPORTED_MODULE_3__["default"])(); - } - } - - function touchmoved() { - emitter(this, arguments).moved(); - } - - function touchended() { - emitter(this, arguments).ended(); - } - - function initialize() { - var state = this.__brush || {selection: null}; - state.extent = number2(extent.apply(this, arguments)); - state.dim = dim; - return state; - } - - brush.extent = function(_) { - return arguments.length ? (extent = typeof _ === "function" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_1__["default"])(number2(_)), brush) : extent; - }; - - brush.filter = function(_) { - return arguments.length ? (filter = typeof _ === "function" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_1__["default"])(!!_), brush) : filter; - }; - - brush.touchable = function(_) { - return arguments.length ? (touchable = typeof _ === "function" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_1__["default"])(!!_), brush) : touchable; - }; - - brush.handleSize = function(_) { - return arguments.length ? (handleSize = +_, brush) : handleSize; - }; - - brush.keyModifiers = function(_) { - return arguments.length ? (keys = !!_, brush) : keys; - }; - - brush.on = function() { - var value = listeners.on.apply(listeners, arguments); - return value === listeners ? brush : value; - }; - - return brush; -} - - -/***/ }), - -/***/ "./node_modules/d3-brush/src/constant.js": -/*!***********************************************!*\ - !*** ./node_modules/d3-brush/src/constant.js ***! - \***********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(x) { - return function() { - return x; - }; -} - - -/***/ }), - -/***/ "./node_modules/d3-brush/src/event.js": -/*!********************************************!*\ - !*** ./node_modules/d3-brush/src/event.js ***! - \********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(target, type, selection) { - this.target = target; - this.type = type; - this.selection = selection; -} - - -/***/ }), - -/***/ "./node_modules/d3-brush/src/index.js": -/*!********************************************!*\ - !*** ./node_modules/d3-brush/src/index.js ***! - \********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "brush": () => (/* reexport safe */ _brush_js__WEBPACK_IMPORTED_MODULE_0__["default"]), -/* harmony export */ "brushSelection": () => (/* reexport safe */ _brush_js__WEBPACK_IMPORTED_MODULE_0__.brushSelection), -/* harmony export */ "brushX": () => (/* reexport safe */ _brush_js__WEBPACK_IMPORTED_MODULE_0__.brushX), -/* harmony export */ "brushY": () => (/* reexport safe */ _brush_js__WEBPACK_IMPORTED_MODULE_0__.brushY) -/* harmony export */ }); -/* harmony import */ var _brush_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./brush.js */ "./node_modules/d3-brush/src/brush.js"); - - - -/***/ }), - -/***/ "./node_modules/d3-brush/src/noevent.js": -/*!**********************************************!*\ - !*** ./node_modules/d3-brush/src/noevent.js ***! - \**********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "nopropagation": () => (/* binding */ nopropagation) -/* harmony export */ }); -/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-selection */ "./node_modules/d3-selection/src/selection/on.js"); - - -function nopropagation() { - d3_selection__WEBPACK_IMPORTED_MODULE_0__.event.stopImmediatePropagation(); -} - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() { - d3_selection__WEBPACK_IMPORTED_MODULE_0__.event.preventDefault(); - d3_selection__WEBPACK_IMPORTED_MODULE_0__.event.stopImmediatePropagation(); -} - - -/***/ }), - -/***/ "./node_modules/d3-chord/src/array.js": -/*!********************************************!*\ - !*** ./node_modules/d3-chord/src/array.js ***! - \********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "slice": () => (/* binding */ slice) -/* harmony export */ }); -var slice = Array.prototype.slice; - - -/***/ }), - -/***/ "./node_modules/d3-chord/src/chord.js": -/*!********************************************!*\ - !*** ./node_modules/d3-chord/src/chord.js ***! - \********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-array */ "./node_modules/d3-array/src/index.js"); -/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./math */ "./node_modules/d3-chord/src/math.js"); - - - -function compareValue(compare) { - return function(a, b) { - return compare( - a.source.value + a.target.value, - b.source.value + b.target.value - ); - }; -} - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() { - var padAngle = 0, - sortGroups = null, - sortSubgroups = null, - sortChords = null; - - function chord(matrix) { - var n = matrix.length, - groupSums = [], - groupIndex = (0,d3_array__WEBPACK_IMPORTED_MODULE_0__.range)(n), - subgroupIndex = [], - chords = [], - groups = chords.groups = new Array(n), - subgroups = new Array(n * n), - k, - x, - x0, - dx, - i, - j; - - // Compute the sum. - k = 0, i = -1; while (++i < n) { - x = 0, j = -1; while (++j < n) { - x += matrix[i][j]; - } - groupSums.push(x); - subgroupIndex.push((0,d3_array__WEBPACK_IMPORTED_MODULE_0__.range)(n)); - k += x; - } - - // Sort groups… - if (sortGroups) groupIndex.sort(function(a, b) { - return sortGroups(groupSums[a], groupSums[b]); - }); - - // Sort subgroups… - if (sortSubgroups) subgroupIndex.forEach(function(d, i) { - d.sort(function(a, b) { - return sortSubgroups(matrix[i][a], matrix[i][b]); - }); - }); - - // Convert the sum to scaling factor for [0, 2pi]. - // TODO Allow start and end angle to be specified? - // TODO Allow padding to be specified as percentage? - k = (0,_math__WEBPACK_IMPORTED_MODULE_1__.max)(0, _math__WEBPACK_IMPORTED_MODULE_1__.tau - padAngle * n) / k; - dx = k ? padAngle : _math__WEBPACK_IMPORTED_MODULE_1__.tau / n; - - // Compute the start and end angle for each group and subgroup. - // Note: Opera has a bug reordering object literal properties! - x = 0, i = -1; while (++i < n) { - x0 = x, j = -1; while (++j < n) { - var di = groupIndex[i], - dj = subgroupIndex[di][j], - v = matrix[di][dj], - a0 = x, - a1 = x += v * k; - subgroups[dj * n + di] = { - index: di, - subindex: dj, - startAngle: a0, - endAngle: a1, - value: v - }; - } - groups[di] = { - index: di, - startAngle: x0, - endAngle: x, - value: groupSums[di] - }; - x += dx; - } - - // Generate chords for each (non-empty) subgroup-subgroup link. - i = -1; while (++i < n) { - j = i - 1; while (++j < n) { - var source = subgroups[j * n + i], - target = subgroups[i * n + j]; - if (source.value || target.value) { - chords.push(source.value < target.value - ? {source: target, target: source} - : {source: source, target: target}); - } - } - } - - return sortChords ? chords.sort(sortChords) : chords; - } - - chord.padAngle = function(_) { - return arguments.length ? (padAngle = (0,_math__WEBPACK_IMPORTED_MODULE_1__.max)(0, _), chord) : padAngle; - }; - - chord.sortGroups = function(_) { - return arguments.length ? (sortGroups = _, chord) : sortGroups; - }; - - chord.sortSubgroups = function(_) { - return arguments.length ? (sortSubgroups = _, chord) : sortSubgroups; - }; - - chord.sortChords = function(_) { - return arguments.length ? (_ == null ? sortChords = null : (sortChords = compareValue(_))._ = _, chord) : sortChords && sortChords._; - }; - - return chord; -} - - -/***/ }), - -/***/ "./node_modules/d3-chord/src/constant.js": -/*!***********************************************!*\ - !*** ./node_modules/d3-chord/src/constant.js ***! - \***********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(x) { - return function() { - return x; - }; -} - - -/***/ }), - -/***/ "./node_modules/d3-chord/src/index.js": -/*!********************************************!*\ - !*** ./node_modules/d3-chord/src/index.js ***! - \********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "chord": () => (/* reexport safe */ _chord__WEBPACK_IMPORTED_MODULE_0__["default"]), -/* harmony export */ "ribbon": () => (/* reexport safe */ _ribbon__WEBPACK_IMPORTED_MODULE_1__["default"]) -/* harmony export */ }); -/* harmony import */ var _chord__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chord */ "./node_modules/d3-chord/src/chord.js"); -/* harmony import */ var _ribbon__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ribbon */ "./node_modules/d3-chord/src/ribbon.js"); - - - - -/***/ }), - -/***/ "./node_modules/d3-chord/src/math.js": -/*!*******************************************!*\ - !*** ./node_modules/d3-chord/src/math.js ***! - \*******************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "cos": () => (/* binding */ cos), -/* harmony export */ "halfPi": () => (/* binding */ halfPi), -/* harmony export */ "max": () => (/* binding */ max), -/* harmony export */ "pi": () => (/* binding */ pi), -/* harmony export */ "sin": () => (/* binding */ sin), -/* harmony export */ "tau": () => (/* binding */ tau) -/* harmony export */ }); -var cos = Math.cos; -var sin = Math.sin; -var pi = Math.PI; -var halfPi = pi / 2; -var tau = pi * 2; -var max = Math.max; - - -/***/ }), - -/***/ "./node_modules/d3-chord/src/ribbon.js": -/*!*********************************************!*\ - !*** ./node_modules/d3-chord/src/ribbon.js ***! - \*********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./array */ "./node_modules/d3-chord/src/array.js"); -/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./constant */ "./node_modules/d3-chord/src/constant.js"); -/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./math */ "./node_modules/d3-chord/src/math.js"); -/* harmony import */ var d3_path__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! d3-path */ "./node_modules/d3-path/src/path.js"); - - - - - -function defaultSource(d) { - return d.source; -} - -function defaultTarget(d) { - return d.target; -} - -function defaultRadius(d) { - return d.radius; -} - -function defaultStartAngle(d) { - return d.startAngle; -} - -function defaultEndAngle(d) { - return d.endAngle; -} - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() { - var source = defaultSource, - target = defaultTarget, - radius = defaultRadius, - startAngle = defaultStartAngle, - endAngle = defaultEndAngle, - context = null; - - function ribbon() { - var buffer, - argv = _array__WEBPACK_IMPORTED_MODULE_0__.slice.call(arguments), - s = source.apply(this, argv), - t = target.apply(this, argv), - sr = +radius.apply(this, (argv[0] = s, argv)), - sa0 = startAngle.apply(this, argv) - _math__WEBPACK_IMPORTED_MODULE_2__.halfPi, - sa1 = endAngle.apply(this, argv) - _math__WEBPACK_IMPORTED_MODULE_2__.halfPi, - sx0 = sr * (0,_math__WEBPACK_IMPORTED_MODULE_2__.cos)(sa0), - sy0 = sr * (0,_math__WEBPACK_IMPORTED_MODULE_2__.sin)(sa0), - tr = +radius.apply(this, (argv[0] = t, argv)), - ta0 = startAngle.apply(this, argv) - _math__WEBPACK_IMPORTED_MODULE_2__.halfPi, - ta1 = endAngle.apply(this, argv) - _math__WEBPACK_IMPORTED_MODULE_2__.halfPi; - - if (!context) context = buffer = (0,d3_path__WEBPACK_IMPORTED_MODULE_3__["default"])(); - - context.moveTo(sx0, sy0); - context.arc(0, 0, sr, sa0, sa1); - if (sa0 !== ta0 || sa1 !== ta1) { // TODO sr !== tr? - context.quadraticCurveTo(0, 0, tr * (0,_math__WEBPACK_IMPORTED_MODULE_2__.cos)(ta0), tr * (0,_math__WEBPACK_IMPORTED_MODULE_2__.sin)(ta0)); - context.arc(0, 0, tr, ta0, ta1); - } - context.quadraticCurveTo(0, 0, sx0, sy0); - context.closePath(); - - if (buffer) return context = null, buffer + "" || null; - } - - ribbon.radius = function(_) { - return arguments.length ? (radius = typeof _ === "function" ? _ : (0,_constant__WEBPACK_IMPORTED_MODULE_1__["default"])(+_), ribbon) : radius; - }; - - ribbon.startAngle = function(_) { - return arguments.length ? (startAngle = typeof _ === "function" ? _ : (0,_constant__WEBPACK_IMPORTED_MODULE_1__["default"])(+_), ribbon) : startAngle; - }; - - ribbon.endAngle = function(_) { - return arguments.length ? (endAngle = typeof _ === "function" ? _ : (0,_constant__WEBPACK_IMPORTED_MODULE_1__["default"])(+_), ribbon) : endAngle; - }; - - ribbon.source = function(_) { - return arguments.length ? (source = _, ribbon) : source; - }; - - ribbon.target = function(_) { - return arguments.length ? (target = _, ribbon) : target; - }; - - ribbon.context = function(_) { - return arguments.length ? ((context = _ == null ? null : _), ribbon) : context; - }; - - return ribbon; -} - - -/***/ }), - -/***/ "./node_modules/d3-collection/src/entries.js": -/*!***************************************************!*\ - !*** ./node_modules/d3-collection/src/entries.js ***! - \***************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(map) { - var entries = []; - for (var key in map) entries.push({key: key, value: map[key]}); - return entries; -} - - -/***/ }), - -/***/ "./node_modules/d3-collection/src/index.js": -/*!*************************************************!*\ - !*** ./node_modules/d3-collection/src/index.js ***! - \*************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "entries": () => (/* reexport safe */ _entries__WEBPACK_IMPORTED_MODULE_5__["default"]), -/* harmony export */ "keys": () => (/* reexport safe */ _keys__WEBPACK_IMPORTED_MODULE_3__["default"]), -/* harmony export */ "map": () => (/* reexport safe */ _map__WEBPACK_IMPORTED_MODULE_2__["default"]), -/* harmony export */ "nest": () => (/* reexport safe */ _nest__WEBPACK_IMPORTED_MODULE_0__["default"]), -/* harmony export */ "set": () => (/* reexport safe */ _set__WEBPACK_IMPORTED_MODULE_1__["default"]), -/* harmony export */ "values": () => (/* reexport safe */ _values__WEBPACK_IMPORTED_MODULE_4__["default"]) -/* harmony export */ }); -/* harmony import */ var _nest__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./nest */ "./node_modules/d3-collection/src/nest.js"); -/* harmony import */ var _set__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./set */ "./node_modules/d3-collection/src/set.js"); -/* harmony import */ var _map__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./map */ "./node_modules/d3-collection/src/map.js"); -/* harmony import */ var _keys__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./keys */ "./node_modules/d3-collection/src/keys.js"); -/* harmony import */ var _values__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./values */ "./node_modules/d3-collection/src/values.js"); -/* harmony import */ var _entries__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./entries */ "./node_modules/d3-collection/src/entries.js"); - - - - - - - - -/***/ }), - -/***/ "./node_modules/d3-collection/src/keys.js": -/*!************************************************!*\ - !*** ./node_modules/d3-collection/src/keys.js ***! - \************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(map) { - var keys = []; - for (var key in map) keys.push(key); - return keys; -} - - -/***/ }), - -/***/ "./node_modules/d3-collection/src/map.js": -/*!***********************************************!*\ - !*** ./node_modules/d3-collection/src/map.js ***! - \***********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "prefix": () => (/* binding */ prefix) -/* harmony export */ }); -var prefix = "$"; - -function Map() {} - -Map.prototype = map.prototype = { - constructor: Map, - has: function(key) { - return (prefix + key) in this; - }, - get: function(key) { - return this[prefix + key]; - }, - set: function(key, value) { - this[prefix + key] = value; - return this; - }, - remove: function(key) { - var property = prefix + key; - return property in this && delete this[property]; - }, - clear: function() { - for (var property in this) if (property[0] === prefix) delete this[property]; - }, - keys: function() { - var keys = []; - for (var property in this) if (property[0] === prefix) keys.push(property.slice(1)); - return keys; - }, - values: function() { - var values = []; - for (var property in this) if (property[0] === prefix) values.push(this[property]); - return values; - }, - entries: function() { - var entries = []; - for (var property in this) if (property[0] === prefix) entries.push({key: property.slice(1), value: this[property]}); - return entries; - }, - size: function() { - var size = 0; - for (var property in this) if (property[0] === prefix) ++size; - return size; - }, - empty: function() { - for (var property in this) if (property[0] === prefix) return false; - return true; - }, - each: function(f) { - for (var property in this) if (property[0] === prefix) f(this[property], property.slice(1), this); - } -}; - -function map(object, f) { - var map = new Map; - - // Copy constructor. - if (object instanceof Map) object.each(function(value, key) { map.set(key, value); }); - - // Index array by numeric index or specified key function. - else if (Array.isArray(object)) { - var i = -1, - n = object.length, - o; - - if (f == null) while (++i < n) map.set(i, object[i]); - else while (++i < n) map.set(f(o = object[i], i, object), o); - } - - // Convert object to map. - else if (object) for (var key in object) map.set(key, object[key]); - - return map; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (map); - - -/***/ }), - -/***/ "./node_modules/d3-collection/src/nest.js": -/*!************************************************!*\ - !*** ./node_modules/d3-collection/src/nest.js ***! - \************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _map__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./map */ "./node_modules/d3-collection/src/map.js"); - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() { - var keys = [], - sortKeys = [], - sortValues, - rollup, - nest; - - function apply(array, depth, createResult, setResult) { - if (depth >= keys.length) { - if (sortValues != null) array.sort(sortValues); - return rollup != null ? rollup(array) : array; - } - - var i = -1, - n = array.length, - key = keys[depth++], - keyValue, - value, - valuesByKey = (0,_map__WEBPACK_IMPORTED_MODULE_0__["default"])(), - values, - result = createResult(); - - while (++i < n) { - if (values = valuesByKey.get(keyValue = key(value = array[i]) + "")) { - values.push(value); - } else { - valuesByKey.set(keyValue, [value]); - } - } - - valuesByKey.each(function(values, key) { - setResult(result, key, apply(values, depth, createResult, setResult)); - }); - - return result; - } - - function entries(map, depth) { - if (++depth > keys.length) return map; - var array, sortKey = sortKeys[depth - 1]; - if (rollup != null && depth >= keys.length) array = map.entries(); - else array = [], map.each(function(v, k) { array.push({key: k, values: entries(v, depth)}); }); - return sortKey != null ? array.sort(function(a, b) { return sortKey(a.key, b.key); }) : array; - } - - return nest = { - object: function(array) { return apply(array, 0, createObject, setObject); }, - map: function(array) { return apply(array, 0, createMap, setMap); }, - entries: function(array) { return entries(apply(array, 0, createMap, setMap), 0); }, - key: function(d) { keys.push(d); return nest; }, - sortKeys: function(order) { sortKeys[keys.length - 1] = order; return nest; }, - sortValues: function(order) { sortValues = order; return nest; }, - rollup: function(f) { rollup = f; return nest; } - }; -} - -function createObject() { - return {}; -} - -function setObject(object, key, value) { - object[key] = value; -} - -function createMap() { - return (0,_map__WEBPACK_IMPORTED_MODULE_0__["default"])(); -} - -function setMap(map, key, value) { - map.set(key, value); -} - - -/***/ }), - -/***/ "./node_modules/d3-collection/src/set.js": -/*!***********************************************!*\ - !*** ./node_modules/d3-collection/src/set.js ***! - \***********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _map__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./map */ "./node_modules/d3-collection/src/map.js"); - - -function Set() {} - -var proto = _map__WEBPACK_IMPORTED_MODULE_0__["default"].prototype; - -Set.prototype = set.prototype = { - constructor: Set, - has: proto.has, - add: function(value) { - value += ""; - this[_map__WEBPACK_IMPORTED_MODULE_0__.prefix + value] = value; - return this; - }, - remove: proto.remove, - clear: proto.clear, - values: proto.keys, - size: proto.size, - empty: proto.empty, - each: proto.each -}; - -function set(object, f) { - var set = new Set; - - // Copy constructor. - if (object instanceof Set) object.each(function(value) { set.add(value); }); - - // Otherwise, assume it’s an array. - else if (object) { - var i = -1, n = object.length; - if (f == null) while (++i < n) set.add(object[i]); - else while (++i < n) set.add(f(object[i], i, object)); - } - - return set; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (set); - - -/***/ }), - -/***/ "./node_modules/d3-collection/src/values.js": -/*!**************************************************!*\ - !*** ./node_modules/d3-collection/src/values.js ***! - \**************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(map) { - var values = []; - for (var key in map) values.push(map[key]); - return values; -} - - -/***/ }), - -/***/ "./node_modules/d3-color/src/color.js": -/*!********************************************!*\ - !*** ./node_modules/d3-color/src/color.js ***! - \********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Color": () => (/* binding */ Color), -/* harmony export */ "Rgb": () => (/* binding */ Rgb), -/* harmony export */ "brighter": () => (/* binding */ brighter), -/* harmony export */ "darker": () => (/* binding */ darker), -/* harmony export */ "default": () => (/* binding */ color), -/* harmony export */ "hsl": () => (/* binding */ hsl), -/* harmony export */ "hslConvert": () => (/* binding */ hslConvert), -/* harmony export */ "rgb": () => (/* binding */ rgb), -/* harmony export */ "rgbConvert": () => (/* binding */ rgbConvert) -/* harmony export */ }); -/* harmony import */ var _define_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./define.js */ "./node_modules/d3-color/src/define.js"); - - -function Color() {} - -var darker = 0.7; -var brighter = 1 / darker; - -var reI = "\\s*([+-]?\\d+)\\s*", - reN = "\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*", - reP = "\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*", - reHex = /^#([0-9a-f]{3,8})$/, - reRgbInteger = new RegExp("^rgb\\(" + [reI, reI, reI] + "\\)$"), - reRgbPercent = new RegExp("^rgb\\(" + [reP, reP, reP] + "\\)$"), - reRgbaInteger = new RegExp("^rgba\\(" + [reI, reI, reI, reN] + "\\)$"), - reRgbaPercent = new RegExp("^rgba\\(" + [reP, reP, reP, reN] + "\\)$"), - reHslPercent = new RegExp("^hsl\\(" + [reN, reP, reP] + "\\)$"), - reHslaPercent = new RegExp("^hsla\\(" + [reN, reP, reP, reN] + "\\)$"); - -var named = { - aliceblue: 0xf0f8ff, - antiquewhite: 0xfaebd7, - aqua: 0x00ffff, - aquamarine: 0x7fffd4, - azure: 0xf0ffff, - beige: 0xf5f5dc, - bisque: 0xffe4c4, - black: 0x000000, - blanchedalmond: 0xffebcd, - blue: 0x0000ff, - blueviolet: 0x8a2be2, - brown: 0xa52a2a, - burlywood: 0xdeb887, - cadetblue: 0x5f9ea0, - chartreuse: 0x7fff00, - chocolate: 0xd2691e, - coral: 0xff7f50, - cornflowerblue: 0x6495ed, - cornsilk: 0xfff8dc, - crimson: 0xdc143c, - cyan: 0x00ffff, - darkblue: 0x00008b, - darkcyan: 0x008b8b, - darkgoldenrod: 0xb8860b, - darkgray: 0xa9a9a9, - darkgreen: 0x006400, - darkgrey: 0xa9a9a9, - darkkhaki: 0xbdb76b, - darkmagenta: 0x8b008b, - darkolivegreen: 0x556b2f, - darkorange: 0xff8c00, - darkorchid: 0x9932cc, - darkred: 0x8b0000, - darksalmon: 0xe9967a, - darkseagreen: 0x8fbc8f, - darkslateblue: 0x483d8b, - darkslategray: 0x2f4f4f, - darkslategrey: 0x2f4f4f, - darkturquoise: 0x00ced1, - darkviolet: 0x9400d3, - deeppink: 0xff1493, - deepskyblue: 0x00bfff, - dimgray: 0x696969, - dimgrey: 0x696969, - dodgerblue: 0x1e90ff, - firebrick: 0xb22222, - floralwhite: 0xfffaf0, - forestgreen: 0x228b22, - fuchsia: 0xff00ff, - gainsboro: 0xdcdcdc, - ghostwhite: 0xf8f8ff, - gold: 0xffd700, - goldenrod: 0xdaa520, - gray: 0x808080, - green: 0x008000, - greenyellow: 0xadff2f, - grey: 0x808080, - honeydew: 0xf0fff0, - hotpink: 0xff69b4, - indianred: 0xcd5c5c, - indigo: 0x4b0082, - ivory: 0xfffff0, - khaki: 0xf0e68c, - lavender: 0xe6e6fa, - lavenderblush: 0xfff0f5, - lawngreen: 0x7cfc00, - lemonchiffon: 0xfffacd, - lightblue: 0xadd8e6, - lightcoral: 0xf08080, - lightcyan: 0xe0ffff, - lightgoldenrodyellow: 0xfafad2, - lightgray: 0xd3d3d3, - lightgreen: 0x90ee90, - lightgrey: 0xd3d3d3, - lightpink: 0xffb6c1, - lightsalmon: 0xffa07a, - lightseagreen: 0x20b2aa, - lightskyblue: 0x87cefa, - lightslategray: 0x778899, - lightslategrey: 0x778899, - lightsteelblue: 0xb0c4de, - lightyellow: 0xffffe0, - lime: 0x00ff00, - limegreen: 0x32cd32, - linen: 0xfaf0e6, - magenta: 0xff00ff, - maroon: 0x800000, - mediumaquamarine: 0x66cdaa, - mediumblue: 0x0000cd, - mediumorchid: 0xba55d3, - mediumpurple: 0x9370db, - mediumseagreen: 0x3cb371, - mediumslateblue: 0x7b68ee, - mediumspringgreen: 0x00fa9a, - mediumturquoise: 0x48d1cc, - mediumvioletred: 0xc71585, - midnightblue: 0x191970, - mintcream: 0xf5fffa, - mistyrose: 0xffe4e1, - moccasin: 0xffe4b5, - navajowhite: 0xffdead, - navy: 0x000080, - oldlace: 0xfdf5e6, - olive: 0x808000, - olivedrab: 0x6b8e23, - orange: 0xffa500, - orangered: 0xff4500, - orchid: 0xda70d6, - palegoldenrod: 0xeee8aa, - palegreen: 0x98fb98, - paleturquoise: 0xafeeee, - palevioletred: 0xdb7093, - papayawhip: 0xffefd5, - peachpuff: 0xffdab9, - peru: 0xcd853f, - pink: 0xffc0cb, - plum: 0xdda0dd, - powderblue: 0xb0e0e6, - purple: 0x800080, - rebeccapurple: 0x663399, - red: 0xff0000, - rosybrown: 0xbc8f8f, - royalblue: 0x4169e1, - saddlebrown: 0x8b4513, - salmon: 0xfa8072, - sandybrown: 0xf4a460, - seagreen: 0x2e8b57, - seashell: 0xfff5ee, - sienna: 0xa0522d, - silver: 0xc0c0c0, - skyblue: 0x87ceeb, - slateblue: 0x6a5acd, - slategray: 0x708090, - slategrey: 0x708090, - snow: 0xfffafa, - springgreen: 0x00ff7f, - steelblue: 0x4682b4, - tan: 0xd2b48c, - teal: 0x008080, - thistle: 0xd8bfd8, - tomato: 0xff6347, - turquoise: 0x40e0d0, - violet: 0xee82ee, - wheat: 0xf5deb3, - white: 0xffffff, - whitesmoke: 0xf5f5f5, - yellow: 0xffff00, - yellowgreen: 0x9acd32 -}; - -(0,_define_js__WEBPACK_IMPORTED_MODULE_0__["default"])(Color, color, { - copy: function(channels) { - return Object.assign(new this.constructor, this, channels); - }, - displayable: function() { - return this.rgb().displayable(); - }, - hex: color_formatHex, // Deprecated! Use color.formatHex. - formatHex: color_formatHex, - formatHsl: color_formatHsl, - formatRgb: color_formatRgb, - toString: color_formatRgb -}); - -function color_formatHex() { - return this.rgb().formatHex(); -} - -function color_formatHsl() { - return hslConvert(this).formatHsl(); -} - -function color_formatRgb() { - return this.rgb().formatRgb(); -} - -function color(format) { - var m, l; - format = (format + "").trim().toLowerCase(); - return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000 - : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00 - : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000 - : 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 - : null) // invalid hex - : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0) - : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%) - : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1) - : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1) - : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%) - : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1) - : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins - : format === "transparent" ? new Rgb(NaN, NaN, NaN, 0) - : null; -} - -function rgbn(n) { - return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1); -} - -function rgba(r, g, b, a) { - if (a <= 0) r = g = b = NaN; - return new Rgb(r, g, b, a); -} - -function rgbConvert(o) { - if (!(o instanceof Color)) o = color(o); - if (!o) return new Rgb; - o = o.rgb(); - return new Rgb(o.r, o.g, o.b, o.opacity); -} - -function rgb(r, g, b, opacity) { - return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity); -} - -function Rgb(r, g, b, opacity) { - this.r = +r; - this.g = +g; - this.b = +b; - this.opacity = +opacity; -} - -(0,_define_js__WEBPACK_IMPORTED_MODULE_0__["default"])(Rgb, rgb, (0,_define_js__WEBPACK_IMPORTED_MODULE_0__.extend)(Color, { - brighter: function(k) { - k = k == null ? brighter : Math.pow(brighter, k); - return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity); - }, - darker: function(k) { - k = k == null ? darker : Math.pow(darker, k); - return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity); - }, - rgb: function() { - return this; - }, - displayable: function() { - return (-0.5 <= this.r && this.r < 255.5) - && (-0.5 <= this.g && this.g < 255.5) - && (-0.5 <= this.b && this.b < 255.5) - && (0 <= this.opacity && this.opacity <= 1); - }, - hex: rgb_formatHex, // Deprecated! Use color.formatHex. - formatHex: rgb_formatHex, - formatRgb: rgb_formatRgb, - toString: rgb_formatRgb -})); - -function rgb_formatHex() { - return "#" + hex(this.r) + hex(this.g) + hex(this.b); -} - -function rgb_formatRgb() { - var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a)); - return (a === 1 ? "rgb(" : "rgba(") - + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + ", " - + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + ", " - + Math.max(0, Math.min(255, Math.round(this.b) || 0)) - + (a === 1 ? ")" : ", " + a + ")"); -} - -function hex(value) { - value = Math.max(0, Math.min(255, Math.round(value) || 0)); - return (value < 16 ? "0" : "") + value.toString(16); -} - -function hsla(h, s, l, a) { - if (a <= 0) h = s = l = NaN; - else if (l <= 0 || l >= 1) h = s = NaN; - else if (s <= 0) h = NaN; - return new Hsl(h, s, l, a); -} - -function hslConvert(o) { - if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity); - if (!(o instanceof Color)) o = color(o); - if (!o) return new Hsl; - if (o instanceof Hsl) return o; - o = o.rgb(); - var r = o.r / 255, - g = o.g / 255, - b = o.b / 255, - min = Math.min(r, g, b), - max = Math.max(r, g, b), - h = NaN, - s = max - min, - l = (max + min) / 2; - if (s) { - if (r === max) h = (g - b) / s + (g < b) * 6; - else if (g === max) h = (b - r) / s + 2; - else h = (r - g) / s + 4; - s /= l < 0.5 ? max + min : 2 - max - min; - h *= 60; - } else { - s = l > 0 && l < 1 ? 0 : h; - } - return new Hsl(h, s, l, o.opacity); -} - -function hsl(h, s, l, opacity) { - return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity); -} - -function Hsl(h, s, l, opacity) { - this.h = +h; - this.s = +s; - this.l = +l; - this.opacity = +opacity; -} - -(0,_define_js__WEBPACK_IMPORTED_MODULE_0__["default"])(Hsl, hsl, (0,_define_js__WEBPACK_IMPORTED_MODULE_0__.extend)(Color, { - brighter: function(k) { - k = k == null ? brighter : Math.pow(brighter, k); - return new Hsl(this.h, this.s, this.l * k, this.opacity); - }, - darker: function(k) { - k = k == null ? darker : Math.pow(darker, k); - return new Hsl(this.h, this.s, this.l * k, this.opacity); - }, - rgb: function() { - var h = this.h % 360 + (this.h < 0) * 360, - s = isNaN(h) || isNaN(this.s) ? 0 : this.s, - l = this.l, - m2 = l + (l < 0.5 ? l : 1 - l) * s, - m1 = 2 * l - m2; - return new Rgb( - hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2), - hsl2rgb(h, m1, m2), - hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2), - this.opacity - ); - }, - displayable: function() { - return (0 <= this.s && this.s <= 1 || isNaN(this.s)) - && (0 <= this.l && this.l <= 1) - && (0 <= this.opacity && this.opacity <= 1); - }, - formatHsl: function() { - var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a)); - return (a === 1 ? "hsl(" : "hsla(") - + (this.h || 0) + ", " - + (this.s || 0) * 100 + "%, " - + (this.l || 0) * 100 + "%" - + (a === 1 ? ")" : ", " + a + ")"); - } -})); - -/* From FvD 13.37, CSS Color Module Level 3 */ -function hsl2rgb(h, m1, m2) { - return (h < 60 ? m1 + (m2 - m1) * h / 60 - : h < 180 ? m2 - : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60 - : m1) * 255; -} - - -/***/ }), - -/***/ "./node_modules/d3-color/src/cubehelix.js": -/*!************************************************!*\ - !*** ./node_modules/d3-color/src/cubehelix.js ***! - \************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Cubehelix": () => (/* binding */ Cubehelix), -/* harmony export */ "default": () => (/* binding */ cubehelix) -/* harmony export */ }); -/* harmony import */ var _define_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./define.js */ "./node_modules/d3-color/src/define.js"); -/* harmony import */ var _color_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./color.js */ "./node_modules/d3-color/src/color.js"); -/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./math.js */ "./node_modules/d3-color/src/math.js"); - - - - -var A = -0.14861, - B = +1.78277, - C = -0.29227, - D = -0.90649, - E = +1.97294, - ED = E * D, - EB = E * B, - BC_DA = B * C - D * A; - -function cubehelixConvert(o) { - if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity); - if (!(o instanceof _color_js__WEBPACK_IMPORTED_MODULE_0__.Rgb)) o = (0,_color_js__WEBPACK_IMPORTED_MODULE_0__.rgbConvert)(o); - var r = o.r / 255, - g = o.g / 255, - b = o.b / 255, - l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB), - bl = b - l, - k = (E * (g - l) - C * bl) / D, - s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1 - h = s ? Math.atan2(k, bl) * _math_js__WEBPACK_IMPORTED_MODULE_1__.rad2deg - 120 : NaN; - return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity); -} - -function cubehelix(h, s, l, opacity) { - return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity); -} - -function Cubehelix(h, s, l, opacity) { - this.h = +h; - this.s = +s; - this.l = +l; - this.opacity = +opacity; -} - -(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, { - brighter: function(k) { - k = k == null ? _color_js__WEBPACK_IMPORTED_MODULE_0__.brighter : Math.pow(_color_js__WEBPACK_IMPORTED_MODULE_0__.brighter, k); - return new Cubehelix(this.h, this.s, this.l * k, this.opacity); - }, - darker: function(k) { - k = k == null ? _color_js__WEBPACK_IMPORTED_MODULE_0__.darker : Math.pow(_color_js__WEBPACK_IMPORTED_MODULE_0__.darker, k); - return new Cubehelix(this.h, this.s, this.l * k, this.opacity); - }, - rgb: function() { - var h = isNaN(this.h) ? 0 : (this.h + 120) * _math_js__WEBPACK_IMPORTED_MODULE_1__.deg2rad, - l = +this.l, - a = isNaN(this.s) ? 0 : this.s * l * (1 - l), - cosh = Math.cos(h), - sinh = Math.sin(h); - return new _color_js__WEBPACK_IMPORTED_MODULE_0__.Rgb( - 255 * (l + a * (A * cosh + B * sinh)), - 255 * (l + a * (C * cosh + D * sinh)), - 255 * (l + a * (E * cosh)), - this.opacity - ); - } -})); - - -/***/ }), - -/***/ "./node_modules/d3-color/src/define.js": -/*!*********************************************!*\ - !*** ./node_modules/d3-color/src/define.js ***! - \*********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "extend": () => (/* binding */ extend) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(constructor, factory, prototype) { - constructor.prototype = factory.prototype = prototype; - prototype.constructor = constructor; -} - -function extend(parent, definition) { - var prototype = Object.create(parent.prototype); - for (var key in definition) prototype[key] = definition[key]; - return prototype; -} - - -/***/ }), - -/***/ "./node_modules/d3-color/src/index.js": -/*!********************************************!*\ - !*** ./node_modules/d3-color/src/index.js ***! - \********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "color": () => (/* reexport safe */ _color_js__WEBPACK_IMPORTED_MODULE_0__["default"]), -/* harmony export */ "cubehelix": () => (/* reexport safe */ _cubehelix_js__WEBPACK_IMPORTED_MODULE_2__["default"]), -/* harmony export */ "gray": () => (/* reexport safe */ _lab_js__WEBPACK_IMPORTED_MODULE_1__.gray), -/* harmony export */ "hcl": () => (/* reexport safe */ _lab_js__WEBPACK_IMPORTED_MODULE_1__.hcl), -/* harmony export */ "hsl": () => (/* reexport safe */ _color_js__WEBPACK_IMPORTED_MODULE_0__.hsl), -/* harmony export */ "lab": () => (/* reexport safe */ _lab_js__WEBPACK_IMPORTED_MODULE_1__["default"]), -/* harmony export */ "lch": () => (/* reexport safe */ _lab_js__WEBPACK_IMPORTED_MODULE_1__.lch), -/* harmony export */ "rgb": () => (/* reexport safe */ _color_js__WEBPACK_IMPORTED_MODULE_0__.rgb) -/* harmony export */ }); -/* harmony import */ var _color_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./color.js */ "./node_modules/d3-color/src/color.js"); -/* harmony import */ var _lab_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./lab.js */ "./node_modules/d3-color/src/lab.js"); -/* harmony import */ var _cubehelix_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./cubehelix.js */ "./node_modules/d3-color/src/cubehelix.js"); - - - - - -/***/ }), - -/***/ "./node_modules/d3-color/src/lab.js": -/*!******************************************!*\ - !*** ./node_modules/d3-color/src/lab.js ***! - \******************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Hcl": () => (/* binding */ Hcl), -/* harmony export */ "Lab": () => (/* binding */ Lab), -/* harmony export */ "default": () => (/* binding */ lab), -/* harmony export */ "gray": () => (/* binding */ gray), -/* harmony export */ "hcl": () => (/* binding */ hcl), -/* harmony export */ "lch": () => (/* binding */ lch) -/* harmony export */ }); -/* harmony import */ var _define_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./define.js */ "./node_modules/d3-color/src/define.js"); -/* harmony import */ var _color_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./color.js */ "./node_modules/d3-color/src/color.js"); -/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./math.js */ "./node_modules/d3-color/src/math.js"); - - - - -// https://observablehq.com/@mbostock/lab-and-rgb -var K = 18, - Xn = 0.96422, - Yn = 1, - Zn = 0.82521, - t0 = 4 / 29, - t1 = 6 / 29, - t2 = 3 * t1 * t1, - t3 = t1 * t1 * t1; - -function labConvert(o) { - if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity); - if (o instanceof Hcl) return hcl2lab(o); - if (!(o instanceof _color_js__WEBPACK_IMPORTED_MODULE_0__.Rgb)) o = (0,_color_js__WEBPACK_IMPORTED_MODULE_0__.rgbConvert)(o); - var r = rgb2lrgb(o.r), - g = rgb2lrgb(o.g), - b = rgb2lrgb(o.b), - y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z; - if (r === g && g === b) x = z = y; else { - x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn); - z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn); - } - return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity); -} - -function gray(l, opacity) { - return new Lab(l, 0, 0, opacity == null ? 1 : opacity); -} - -function lab(l, a, b, opacity) { - return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity); -} - -function Lab(l, a, b, opacity) { - this.l = +l; - this.a = +a; - this.b = +b; - this.opacity = +opacity; -} - -(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, { - brighter: function(k) { - return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity); - }, - darker: function(k) { - return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity); - }, - rgb: function() { - var y = (this.l + 16) / 116, - x = isNaN(this.a) ? y : y + this.a / 500, - z = isNaN(this.b) ? y : y - this.b / 200; - x = Xn * lab2xyz(x); - y = Yn * lab2xyz(y); - z = Zn * lab2xyz(z); - return new _color_js__WEBPACK_IMPORTED_MODULE_0__.Rgb( - lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z), - lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z), - lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z), - this.opacity - ); - } -})); - -function xyz2lab(t) { - return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0; -} - -function lab2xyz(t) { - return t > t1 ? t * t * t : t2 * (t - t0); -} - -function lrgb2rgb(x) { - return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055); -} - -function rgb2lrgb(x) { - return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4); -} - -function hclConvert(o) { - if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity); - if (!(o instanceof Lab)) o = labConvert(o); - if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0 < o.l && o.l < 100 ? 0 : NaN, o.l, o.opacity); - var h = Math.atan2(o.b, o.a) * _math_js__WEBPACK_IMPORTED_MODULE_2__.rad2deg; - return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity); -} - -function lch(l, c, h, opacity) { - return arguments.length === 1 ? hclConvert(l) : new Hcl(h, c, l, opacity == null ? 1 : opacity); -} - -function hcl(h, c, l, opacity) { - return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity); -} - -function Hcl(h, c, l, opacity) { - this.h = +h; - this.c = +c; - this.l = +l; - this.opacity = +opacity; -} - -function hcl2lab(o) { - if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity); - var h = o.h * _math_js__WEBPACK_IMPORTED_MODULE_2__.deg2rad; - return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity); -} - -(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, { - brighter: function(k) { - return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity); - }, - darker: function(k) { - return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity); - }, - rgb: function() { - return hcl2lab(this).rgb(); - } -})); - - -/***/ }), - -/***/ "./node_modules/d3-color/src/math.js": -/*!*******************************************!*\ - !*** ./node_modules/d3-color/src/math.js ***! - \*******************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "deg2rad": () => (/* binding */ deg2rad), -/* harmony export */ "rad2deg": () => (/* binding */ rad2deg) -/* harmony export */ }); -var deg2rad = Math.PI / 180; -var rad2deg = 180 / Math.PI; - - -/***/ }), - -/***/ "./node_modules/d3-contour/src/area.js": -/*!*********************************************!*\ - !*** ./node_modules/d3-contour/src/area.js ***! - \*********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(ring) { - var i = 0, n = ring.length, area = ring[n - 1][1] * ring[0][0] - ring[n - 1][0] * ring[0][1]; - while (++i < n) area += ring[i - 1][1] * ring[i][0] - ring[i - 1][0] * ring[i][1]; - return area; -} - - -/***/ }), - -/***/ "./node_modules/d3-contour/src/array.js": -/*!**********************************************!*\ - !*** ./node_modules/d3-contour/src/array.js ***! - \**********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "slice": () => (/* binding */ slice) -/* harmony export */ }); -var array = Array.prototype; - -var slice = array.slice; - - -/***/ }), - -/***/ "./node_modules/d3-contour/src/ascending.js": -/*!**************************************************!*\ - !*** ./node_modules/d3-contour/src/ascending.js ***! - \**************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(a, b) { - return a - b; -} - - -/***/ }), - -/***/ "./node_modules/d3-contour/src/blur.js": -/*!*********************************************!*\ - !*** ./node_modules/d3-contour/src/blur.js ***! - \*********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "blurX": () => (/* binding */ blurX), -/* harmony export */ "blurY": () => (/* binding */ blurY) -/* harmony export */ }); -// TODO Optimize edge cases. -// TODO Optimize index calculation. -// TODO Optimize arguments. -function blurX(source, target, r) { - var n = source.width, - m = source.height, - w = (r << 1) + 1; - for (var j = 0; j < m; ++j) { - for (var i = 0, sr = 0; i < n + r; ++i) { - if (i < n) { - sr += source.data[i + j * n]; - } - if (i >= r) { - if (i >= w) { - sr -= source.data[i - w + j * n]; - } - target.data[i - r + j * n] = sr / Math.min(i + 1, n - 1 + w - i, w); - } - } - } -} - -// TODO Optimize edge cases. -// TODO Optimize index calculation. -// TODO Optimize arguments. -function blurY(source, target, r) { - var n = source.width, - m = source.height, - w = (r << 1) + 1; - for (var i = 0; i < n; ++i) { - for (var j = 0, sr = 0; j < m + r; ++j) { - if (j < m) { - sr += source.data[i + j * n]; - } - if (j >= r) { - if (j >= w) { - sr -= source.data[i + (j - w) * n]; - } - target.data[i + (j - r) * n] = sr / Math.min(j + 1, m - 1 + w - j, w); - } - } - } -} - - -/***/ }), - -/***/ "./node_modules/d3-contour/src/constant.js": -/*!*************************************************!*\ - !*** ./node_modules/d3-contour/src/constant.js ***! - \*************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(x) { - return function() { - return x; - }; -} - - -/***/ }), - -/***/ "./node_modules/d3-contour/src/contains.js": -/*!*************************************************!*\ - !*** ./node_modules/d3-contour/src/contains.js ***! - \*************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(ring, hole) { - var i = -1, n = hole.length, c; - while (++i < n) if (c = ringContains(ring, hole[i])) return c; - return 0; -} - -function ringContains(ring, point) { - var x = point[0], y = point[1], contains = -1; - for (var i = 0, n = ring.length, j = n - 1; i < n; j = i++) { - var pi = ring[i], xi = pi[0], yi = pi[1], pj = ring[j], xj = pj[0], yj = pj[1]; - if (segmentContains(pi, pj, point)) return 0; - if (((yi > y) !== (yj > y)) && ((x < (xj - xi) * (y - yi) / (yj - yi) + xi))) contains = -contains; - } - return contains; -} - -function segmentContains(a, b, c) { - var i; return collinear(a, b, c) && within(a[i = +(a[0] === b[0])], c[i], b[i]); -} - -function collinear(a, b, c) { - return (b[0] - a[0]) * (c[1] - a[1]) === (c[0] - a[0]) * (b[1] - a[1]); -} - -function within(p, q, r) { - return p <= q && q <= r || r <= q && q <= p; -} - - -/***/ }), - -/***/ "./node_modules/d3-contour/src/contours.js": -/*!*************************************************!*\ - !*** ./node_modules/d3-contour/src/contours.js ***! - \*************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-array */ "./node_modules/d3-array/src/index.js"); -/* harmony import */ var _array__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./array */ "./node_modules/d3-contour/src/array.js"); -/* harmony import */ var _ascending__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./ascending */ "./node_modules/d3-contour/src/ascending.js"); -/* harmony import */ var _area__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./area */ "./node_modules/d3-contour/src/area.js"); -/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./constant */ "./node_modules/d3-contour/src/constant.js"); -/* harmony import */ var _contains__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./contains */ "./node_modules/d3-contour/src/contains.js"); -/* harmony import */ var _noop__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./noop */ "./node_modules/d3-contour/src/noop.js"); - - - - - - - - -var cases = [ - [], - [[[1.0, 1.5], [0.5, 1.0]]], - [[[1.5, 1.0], [1.0, 1.5]]], - [[[1.5, 1.0], [0.5, 1.0]]], - [[[1.0, 0.5], [1.5, 1.0]]], - [[[1.0, 1.5], [0.5, 1.0]], [[1.0, 0.5], [1.5, 1.0]]], - [[[1.0, 0.5], [1.0, 1.5]]], - [[[1.0, 0.5], [0.5, 1.0]]], - [[[0.5, 1.0], [1.0, 0.5]]], - [[[1.0, 1.5], [1.0, 0.5]]], - [[[0.5, 1.0], [1.0, 0.5]], [[1.5, 1.0], [1.0, 1.5]]], - [[[1.5, 1.0], [1.0, 0.5]]], - [[[0.5, 1.0], [1.5, 1.0]]], - [[[1.0, 1.5], [1.5, 1.0]]], - [[[0.5, 1.0], [1.0, 1.5]]], - [] -]; - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() { - var dx = 1, - dy = 1, - threshold = d3_array__WEBPACK_IMPORTED_MODULE_0__.thresholdSturges, - smooth = smoothLinear; - - function contours(values) { - var tz = threshold(values); - - // Convert number of thresholds into uniform thresholds. - if (!Array.isArray(tz)) { - var domain = (0,d3_array__WEBPACK_IMPORTED_MODULE_0__.extent)(values), start = domain[0], stop = domain[1]; - tz = (0,d3_array__WEBPACK_IMPORTED_MODULE_0__.tickStep)(start, stop, tz); - tz = (0,d3_array__WEBPACK_IMPORTED_MODULE_0__.range)(Math.floor(start / tz) * tz, Math.floor(stop / tz) * tz, tz); - } else { - tz = tz.slice().sort(_ascending__WEBPACK_IMPORTED_MODULE_2__["default"]); - } - - return tz.map(function(value) { - return contour(values, value); - }); - } - - // Accumulate, smooth contour rings, assign holes to exterior rings. - // Based on https://github.com/mbostock/shapefile/blob/v0.6.2/shp/polygon.js - function contour(values, value) { - var polygons = [], - holes = []; - - isorings(values, value, function(ring) { - smooth(ring, values, value); - if ((0,_area__WEBPACK_IMPORTED_MODULE_3__["default"])(ring) > 0) polygons.push([ring]); - else holes.push(ring); - }); - - holes.forEach(function(hole) { - for (var i = 0, n = polygons.length, polygon; i < n; ++i) { - if ((0,_contains__WEBPACK_IMPORTED_MODULE_5__["default"])((polygon = polygons[i])[0], hole) !== -1) { - polygon.push(hole); - return; - } - } - }); - - return { - type: "MultiPolygon", - value: value, - coordinates: polygons - }; - } - - // Marching squares with isolines stitched into rings. - // Based on https://github.com/topojson/topojson-client/blob/v3.0.0/src/stitch.js - function isorings(values, value, callback) { - var fragmentByStart = new Array, - fragmentByEnd = new Array, - x, y, t0, t1, t2, t3; - - // Special case for the first row (y = -1, t2 = t3 = 0). - x = y = -1; - t1 = values[0] >= value; - cases[t1 << 1].forEach(stitch); - while (++x < dx - 1) { - t0 = t1, t1 = values[x + 1] >= value; - cases[t0 | t1 << 1].forEach(stitch); - } - cases[t1 << 0].forEach(stitch); - - // General case for the intermediate rows. - while (++y < dy - 1) { - x = -1; - t1 = values[y * dx + dx] >= value; - t2 = values[y * dx] >= value; - cases[t1 << 1 | t2 << 2].forEach(stitch); - while (++x < dx - 1) { - t0 = t1, t1 = values[y * dx + dx + x + 1] >= value; - t3 = t2, t2 = values[y * dx + x + 1] >= value; - cases[t0 | t1 << 1 | t2 << 2 | t3 << 3].forEach(stitch); - } - cases[t1 | t2 << 3].forEach(stitch); - } - - // Special case for the last row (y = dy - 1, t0 = t1 = 0). - x = -1; - t2 = values[y * dx] >= value; - cases[t2 << 2].forEach(stitch); - while (++x < dx - 1) { - t3 = t2, t2 = values[y * dx + x + 1] >= value; - cases[t2 << 2 | t3 << 3].forEach(stitch); - } - cases[t2 << 3].forEach(stitch); - - function stitch(line) { - var start = [line[0][0] + x, line[0][1] + y], - end = [line[1][0] + x, line[1][1] + y], - startIndex = index(start), - endIndex = index(end), - f, g; - if (f = fragmentByEnd[startIndex]) { - if (g = fragmentByStart[endIndex]) { - delete fragmentByEnd[f.end]; - delete fragmentByStart[g.start]; - if (f === g) { - f.ring.push(end); - callback(f.ring); - } else { - fragmentByStart[f.start] = fragmentByEnd[g.end] = {start: f.start, end: g.end, ring: f.ring.concat(g.ring)}; - } - } else { - delete fragmentByEnd[f.end]; - f.ring.push(end); - fragmentByEnd[f.end = endIndex] = f; - } - } else if (f = fragmentByStart[endIndex]) { - if (g = fragmentByEnd[startIndex]) { - delete fragmentByStart[f.start]; - delete fragmentByEnd[g.end]; - if (f === g) { - f.ring.push(end); - callback(f.ring); - } else { - fragmentByStart[g.start] = fragmentByEnd[f.end] = {start: g.start, end: f.end, ring: g.ring.concat(f.ring)}; - } - } else { - delete fragmentByStart[f.start]; - f.ring.unshift(start); - fragmentByStart[f.start = startIndex] = f; - } - } else { - fragmentByStart[startIndex] = fragmentByEnd[endIndex] = {start: startIndex, end: endIndex, ring: [start, end]}; - } - } - } - - function index(point) { - return point[0] * 2 + point[1] * (dx + 1) * 4; - } - - function smoothLinear(ring, values, value) { - ring.forEach(function(point) { - var x = point[0], - y = point[1], - xt = x | 0, - yt = y | 0, - v0, - v1 = values[yt * dx + xt]; - if (x > 0 && x < dx && xt === x) { - v0 = values[yt * dx + xt - 1]; - point[0] = x + (value - v0) / (v1 - v0) - 0.5; - } - if (y > 0 && y < dy && yt === y) { - v0 = values[(yt - 1) * dx + xt]; - point[1] = y + (value - v0) / (v1 - v0) - 0.5; - } - }); - } - - contours.contour = contour; - - contours.size = function(_) { - if (!arguments.length) return [dx, dy]; - var _0 = Math.ceil(_[0]), _1 = Math.ceil(_[1]); - if (!(_0 > 0) || !(_1 > 0)) throw new Error("invalid size"); - return dx = _0, dy = _1, contours; - }; - - contours.thresholds = function(_) { - return arguments.length ? (threshold = typeof _ === "function" ? _ : Array.isArray(_) ? (0,_constant__WEBPACK_IMPORTED_MODULE_4__["default"])(_array__WEBPACK_IMPORTED_MODULE_1__.slice.call(_)) : (0,_constant__WEBPACK_IMPORTED_MODULE_4__["default"])(_), contours) : threshold; - }; - - contours.smooth = function(_) { - return arguments.length ? (smooth = _ ? smoothLinear : _noop__WEBPACK_IMPORTED_MODULE_6__["default"], contours) : smooth === smoothLinear; - }; - - return contours; -} - - -/***/ }), - -/***/ "./node_modules/d3-contour/src/density.js": -/*!************************************************!*\ - !*** ./node_modules/d3-contour/src/density.js ***! - \************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-array */ "./node_modules/d3-array/src/index.js"); -/* harmony import */ var _array__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./array */ "./node_modules/d3-contour/src/array.js"); -/* harmony import */ var _blur__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./blur */ "./node_modules/d3-contour/src/blur.js"); -/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./constant */ "./node_modules/d3-contour/src/constant.js"); -/* harmony import */ var _contours__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./contours */ "./node_modules/d3-contour/src/contours.js"); - - - - - - -function defaultX(d) { - return d[0]; -} - -function defaultY(d) { - return d[1]; -} - -function defaultWeight() { - return 1; -} - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() { - var x = defaultX, - y = defaultY, - weight = defaultWeight, - dx = 960, - dy = 500, - r = 20, // blur radius - k = 2, // log2(grid cell size) - o = r * 3, // grid offset, to pad for blur - n = (dx + o * 2) >> k, // grid width - m = (dy + o * 2) >> k, // grid height - threshold = (0,_constant__WEBPACK_IMPORTED_MODULE_3__["default"])(20); - - function density(data) { - var values0 = new Float32Array(n * m), - values1 = new Float32Array(n * m); - - data.forEach(function(d, i, data) { - var xi = (+x(d, i, data) + o) >> k, - yi = (+y(d, i, data) + o) >> k, - wi = +weight(d, i, data); - if (xi >= 0 && xi < n && yi >= 0 && yi < m) { - values0[xi + yi * n] += wi; - } - }); - - // TODO Optimize. - (0,_blur__WEBPACK_IMPORTED_MODULE_2__.blurX)({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k); - (0,_blur__WEBPACK_IMPORTED_MODULE_2__.blurY)({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k); - (0,_blur__WEBPACK_IMPORTED_MODULE_2__.blurX)({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k); - (0,_blur__WEBPACK_IMPORTED_MODULE_2__.blurY)({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k); - (0,_blur__WEBPACK_IMPORTED_MODULE_2__.blurX)({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k); - (0,_blur__WEBPACK_IMPORTED_MODULE_2__.blurY)({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k); - - var tz = threshold(values0); - - // Convert number of thresholds into uniform thresholds. - if (!Array.isArray(tz)) { - var stop = (0,d3_array__WEBPACK_IMPORTED_MODULE_0__.max)(values0); - tz = (0,d3_array__WEBPACK_IMPORTED_MODULE_0__.tickStep)(0, stop, tz); - tz = (0,d3_array__WEBPACK_IMPORTED_MODULE_0__.range)(0, Math.floor(stop / tz) * tz, tz); - tz.shift(); - } - - return (0,_contours__WEBPACK_IMPORTED_MODULE_4__["default"])() - .thresholds(tz) - .size([n, m]) - (values0) - .map(transform); - } - - function transform(geometry) { - geometry.value *= Math.pow(2, -2 * k); // Density in points per square pixel. - geometry.coordinates.forEach(transformPolygon); - return geometry; - } - - function transformPolygon(coordinates) { - coordinates.forEach(transformRing); - } - - function transformRing(coordinates) { - coordinates.forEach(transformPoint); - } - - // TODO Optimize. - function transformPoint(coordinates) { - coordinates[0] = coordinates[0] * Math.pow(2, k) - o; - coordinates[1] = coordinates[1] * Math.pow(2, k) - o; - } - - function resize() { - o = r * 3; - n = (dx + o * 2) >> k; - m = (dy + o * 2) >> k; - return density; - } - - density.x = function(_) { - return arguments.length ? (x = typeof _ === "function" ? _ : (0,_constant__WEBPACK_IMPORTED_MODULE_3__["default"])(+_), density) : x; - }; - - density.y = function(_) { - return arguments.length ? (y = typeof _ === "function" ? _ : (0,_constant__WEBPACK_IMPORTED_MODULE_3__["default"])(+_), density) : y; - }; - - density.weight = function(_) { - return arguments.length ? (weight = typeof _ === "function" ? _ : (0,_constant__WEBPACK_IMPORTED_MODULE_3__["default"])(+_), density) : weight; - }; - - density.size = function(_) { - if (!arguments.length) return [dx, dy]; - var _0 = Math.ceil(_[0]), _1 = Math.ceil(_[1]); - if (!(_0 >= 0) && !(_0 >= 0)) throw new Error("invalid size"); - return dx = _0, dy = _1, resize(); - }; - - density.cellSize = function(_) { - if (!arguments.length) return 1 << k; - if (!((_ = +_) >= 1)) throw new Error("invalid cell size"); - return k = Math.floor(Math.log(_) / Math.LN2), resize(); - }; - - density.thresholds = function(_) { - return arguments.length ? (threshold = typeof _ === "function" ? _ : Array.isArray(_) ? (0,_constant__WEBPACK_IMPORTED_MODULE_3__["default"])(_array__WEBPACK_IMPORTED_MODULE_1__.slice.call(_)) : (0,_constant__WEBPACK_IMPORTED_MODULE_3__["default"])(_), density) : threshold; - }; - - density.bandwidth = function(_) { - if (!arguments.length) return Math.sqrt(r * (r + 1)); - if (!((_ = +_) >= 0)) throw new Error("invalid bandwidth"); - return r = Math.round((Math.sqrt(4 * _ * _ + 1) - 1) / 2), resize(); - }; - - return density; -} - - -/***/ }), - -/***/ "./node_modules/d3-contour/src/index.js": -/*!**********************************************!*\ - !*** ./node_modules/d3-contour/src/index.js ***! - \**********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "contourDensity": () => (/* reexport safe */ _density__WEBPACK_IMPORTED_MODULE_1__["default"]), -/* harmony export */ "contours": () => (/* reexport safe */ _contours__WEBPACK_IMPORTED_MODULE_0__["default"]) -/* harmony export */ }); -/* harmony import */ var _contours__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./contours */ "./node_modules/d3-contour/src/contours.js"); -/* harmony import */ var _density__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./density */ "./node_modules/d3-contour/src/density.js"); - - - - -/***/ }), - -/***/ "./node_modules/d3-contour/src/noop.js": -/*!*********************************************!*\ - !*** ./node_modules/d3-contour/src/noop.js ***! - \*********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {} - - -/***/ }), - -/***/ "./node_modules/d3-dispatch/src/dispatch.js": -/*!**************************************************!*\ - !*** ./node_modules/d3-dispatch/src/dispatch.js ***! - \**************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -var noop = {value: function() {}}; - -function dispatch() { - for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) { - if (!(t = arguments[i] + "") || (t in _) || /[\s.]/.test(t)) throw new Error("illegal type: " + t); - _[t] = []; - } - return new Dispatch(_); -} - -function Dispatch(_) { - this._ = _; -} - -function parseTypenames(typenames, types) { - return typenames.trim().split(/^|\s+/).map(function(t) { - var name = "", i = t.indexOf("."); - if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i); - if (t && !types.hasOwnProperty(t)) throw new Error("unknown type: " + t); - return {type: t, name: name}; - }); -} - -Dispatch.prototype = dispatch.prototype = { - constructor: Dispatch, - on: function(typename, callback) { - var _ = this._, - T = parseTypenames(typename + "", _), - t, - i = -1, - n = T.length; - - // If no callback was specified, return the callback of the given type and name. - if (arguments.length < 2) { - while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t; - return; - } - - // If a type was specified, set the callback for the given type and name. - // Otherwise, if a null callback was specified, remove callbacks of the given name. - if (callback != null && typeof callback !== "function") throw new Error("invalid callback: " + callback); - while (++i < n) { - if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback); - else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null); - } - - return this; - }, - copy: function() { - var copy = {}, _ = this._; - for (var t in _) copy[t] = _[t].slice(); - return new Dispatch(copy); - }, - call: function(type, that) { - if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2]; - if (!this._.hasOwnProperty(type)) throw new Error("unknown type: " + type); - for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args); - }, - apply: function(type, that, args) { - if (!this._.hasOwnProperty(type)) throw new Error("unknown type: " + type); - for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args); - } -}; - -function get(type, name) { - for (var i = 0, n = type.length, c; i < n; ++i) { - if ((c = type[i]).name === name) { - return c.value; - } - } -} - -function set(type, name, callback) { - for (var i = 0, n = type.length; i < n; ++i) { - if (type[i].name === name) { - type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1)); - break; - } - } - if (callback != null) type.push({name: name, value: callback}); - return type; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (dispatch); - - -/***/ }), - -/***/ "./node_modules/d3-dispatch/src/index.js": -/*!***********************************************!*\ - !*** ./node_modules/d3-dispatch/src/index.js ***! - \***********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "dispatch": () => (/* reexport safe */ _dispatch_js__WEBPACK_IMPORTED_MODULE_0__["default"]) -/* harmony export */ }); -/* harmony import */ var _dispatch_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./dispatch.js */ "./node_modules/d3-dispatch/src/dispatch.js"); - - - -/***/ }), - -/***/ "./node_modules/d3-drag/src/constant.js": -/*!**********************************************!*\ - !*** ./node_modules/d3-drag/src/constant.js ***! - \**********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(x) { - return function() { - return x; - }; -} - - -/***/ }), - -/***/ "./node_modules/d3-drag/src/drag.js": -/*!******************************************!*\ - !*** ./node_modules/d3-drag/src/drag.js ***! - \******************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var d3_dispatch__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-dispatch */ "./node_modules/d3-dispatch/src/dispatch.js"); -/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-selection */ "./node_modules/d3-selection/src/selection/on.js"); -/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-selection */ "./node_modules/d3-selection/src/mouse.js"); -/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! d3-selection */ "./node_modules/d3-selection/src/select.js"); -/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! d3-selection */ "./node_modules/d3-selection/src/touch.js"); -/* harmony import */ var _nodrag_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./nodrag.js */ "./node_modules/d3-drag/src/nodrag.js"); -/* harmony import */ var _noevent_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./noevent.js */ "./node_modules/d3-drag/src/noevent.js"); -/* harmony import */ var _constant_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./constant.js */ "./node_modules/d3-drag/src/constant.js"); -/* harmony import */ var _event_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./event.js */ "./node_modules/d3-drag/src/event.js"); - - - - - - - -// Ignore right-click, since that should open the context menu. -function defaultFilter() { - return !d3_selection__WEBPACK_IMPORTED_MODULE_0__.event.ctrlKey && !d3_selection__WEBPACK_IMPORTED_MODULE_0__.event.button; -} - -function defaultContainer() { - return this.parentNode; -} - -function defaultSubject(d) { - return d == null ? {x: d3_selection__WEBPACK_IMPORTED_MODULE_0__.event.x, y: d3_selection__WEBPACK_IMPORTED_MODULE_0__.event.y} : d; -} - -function defaultTouchable() { - return navigator.maxTouchPoints || ("ontouchstart" in this); -} - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() { - var filter = defaultFilter, - container = defaultContainer, - subject = defaultSubject, - touchable = defaultTouchable, - gestures = {}, - listeners = (0,d3_dispatch__WEBPACK_IMPORTED_MODULE_1__["default"])("start", "drag", "end"), - active = 0, - mousedownx, - mousedowny, - mousemoving, - touchending, - clickDistance2 = 0; - - function drag(selection) { - selection - .on("mousedown.drag", mousedowned) - .filter(touchable) - .on("touchstart.drag", touchstarted) - .on("touchmove.drag", touchmoved) - .on("touchend.drag touchcancel.drag", touchended) - .style("touch-action", "none") - .style("-webkit-tap-highlight-color", "rgba(0,0,0,0)"); - } - - function mousedowned() { - if (touchending || !filter.apply(this, arguments)) return; - var gesture = beforestart("mouse", container.apply(this, arguments), d3_selection__WEBPACK_IMPORTED_MODULE_2__["default"], this, arguments); - if (!gesture) return; - (0,d3_selection__WEBPACK_IMPORTED_MODULE_3__["default"])(d3_selection__WEBPACK_IMPORTED_MODULE_0__.event.view).on("mousemove.drag", mousemoved, true).on("mouseup.drag", mouseupped, true); - (0,_nodrag_js__WEBPACK_IMPORTED_MODULE_4__["default"])(d3_selection__WEBPACK_IMPORTED_MODULE_0__.event.view); - (0,_noevent_js__WEBPACK_IMPORTED_MODULE_5__.nopropagation)(); - mousemoving = false; - mousedownx = d3_selection__WEBPACK_IMPORTED_MODULE_0__.event.clientX; - mousedowny = d3_selection__WEBPACK_IMPORTED_MODULE_0__.event.clientY; - gesture("start"); - } - - function mousemoved() { - (0,_noevent_js__WEBPACK_IMPORTED_MODULE_5__["default"])(); - if (!mousemoving) { - var dx = d3_selection__WEBPACK_IMPORTED_MODULE_0__.event.clientX - mousedownx, dy = d3_selection__WEBPACK_IMPORTED_MODULE_0__.event.clientY - mousedowny; - mousemoving = dx * dx + dy * dy > clickDistance2; - } - gestures.mouse("drag"); - } - - function mouseupped() { - (0,d3_selection__WEBPACK_IMPORTED_MODULE_3__["default"])(d3_selection__WEBPACK_IMPORTED_MODULE_0__.event.view).on("mousemove.drag mouseup.drag", null); - (0,_nodrag_js__WEBPACK_IMPORTED_MODULE_4__.yesdrag)(d3_selection__WEBPACK_IMPORTED_MODULE_0__.event.view, mousemoving); - (0,_noevent_js__WEBPACK_IMPORTED_MODULE_5__["default"])(); - gestures.mouse("end"); - } - - function touchstarted() { - if (!filter.apply(this, arguments)) return; - var touches = d3_selection__WEBPACK_IMPORTED_MODULE_0__.event.changedTouches, - c = container.apply(this, arguments), - n = touches.length, i, gesture; - - for (i = 0; i < n; ++i) { - if (gesture = beforestart(touches[i].identifier, c, d3_selection__WEBPACK_IMPORTED_MODULE_6__["default"], this, arguments)) { - (0,_noevent_js__WEBPACK_IMPORTED_MODULE_5__.nopropagation)(); - gesture("start"); - } - } - } - - function touchmoved() { - var touches = d3_selection__WEBPACK_IMPORTED_MODULE_0__.event.changedTouches, - n = touches.length, i, gesture; - - for (i = 0; i < n; ++i) { - if (gesture = gestures[touches[i].identifier]) { - (0,_noevent_js__WEBPACK_IMPORTED_MODULE_5__["default"])(); - gesture("drag"); - } - } - } - - function touchended() { - var touches = d3_selection__WEBPACK_IMPORTED_MODULE_0__.event.changedTouches, - n = touches.length, i, gesture; - - if (touchending) clearTimeout(touchending); - touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed! - for (i = 0; i < n; ++i) { - if (gesture = gestures[touches[i].identifier]) { - (0,_noevent_js__WEBPACK_IMPORTED_MODULE_5__.nopropagation)(); - gesture("end"); - } - } - } - - function beforestart(id, container, point, that, args) { - var p = point(container, id), s, dx, dy, - sublisteners = listeners.copy(); - - if (!(0,d3_selection__WEBPACK_IMPORTED_MODULE_0__.customEvent)(new _event_js__WEBPACK_IMPORTED_MODULE_7__["default"](drag, "beforestart", s, id, active, p[0], p[1], 0, 0, sublisteners), function() { - if ((d3_selection__WEBPACK_IMPORTED_MODULE_0__.event.subject = s = subject.apply(that, args)) == null) return false; - dx = s.x - p[0] || 0; - dy = s.y - p[1] || 0; - return true; - })) return; - - return function gesture(type) { - var p0 = p, n; - switch (type) { - case "start": gestures[id] = gesture, n = active++; break; - case "end": delete gestures[id], --active; // nobreak - case "drag": p = point(container, id), n = active; break; - } - (0,d3_selection__WEBPACK_IMPORTED_MODULE_0__.customEvent)(new _event_js__WEBPACK_IMPORTED_MODULE_7__["default"](drag, type, s, id, n, p[0] + dx, p[1] + dy, p[0] - p0[0], p[1] - p0[1], sublisteners), sublisteners.apply, sublisteners, [type, that, args]); - }; - } - - drag.filter = function(_) { - return arguments.length ? (filter = typeof _ === "function" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_8__["default"])(!!_), drag) : filter; - }; - - drag.container = function(_) { - return arguments.length ? (container = typeof _ === "function" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_8__["default"])(_), drag) : container; - }; - - drag.subject = function(_) { - return arguments.length ? (subject = typeof _ === "function" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_8__["default"])(_), drag) : subject; - }; - - drag.touchable = function(_) { - return arguments.length ? (touchable = typeof _ === "function" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_8__["default"])(!!_), drag) : touchable; - }; - - drag.on = function() { - var value = listeners.on.apply(listeners, arguments); - return value === listeners ? drag : value; - }; - - drag.clickDistance = function(_) { - return arguments.length ? (clickDistance2 = (_ = +_) * _, drag) : Math.sqrt(clickDistance2); - }; - - return drag; -} - - -/***/ }), - -/***/ "./node_modules/d3-drag/src/event.js": -/*!*******************************************!*\ - !*** ./node_modules/d3-drag/src/event.js ***! - \*******************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ DragEvent) -/* harmony export */ }); -function DragEvent(target, type, subject, id, active, x, y, dx, dy, dispatch) { - this.target = target; - this.type = type; - this.subject = subject; - this.identifier = id; - this.active = active; - this.x = x; - this.y = y; - this.dx = dx; - this.dy = dy; - this._ = dispatch; -} - -DragEvent.prototype.on = function() { - var value = this._.on.apply(this._, arguments); - return value === this._ ? this : value; -}; - - -/***/ }), - -/***/ "./node_modules/d3-drag/src/index.js": -/*!*******************************************!*\ - !*** ./node_modules/d3-drag/src/index.js ***! - \*******************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "drag": () => (/* reexport safe */ _drag_js__WEBPACK_IMPORTED_MODULE_0__["default"]), -/* harmony export */ "dragDisable": () => (/* reexport safe */ _nodrag_js__WEBPACK_IMPORTED_MODULE_1__["default"]), -/* harmony export */ "dragEnable": () => (/* reexport safe */ _nodrag_js__WEBPACK_IMPORTED_MODULE_1__.yesdrag) -/* harmony export */ }); -/* harmony import */ var _drag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./drag.js */ "./node_modules/d3-drag/src/drag.js"); -/* harmony import */ var _nodrag_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./nodrag.js */ "./node_modules/d3-drag/src/nodrag.js"); - - - - -/***/ }), - -/***/ "./node_modules/d3-drag/src/nodrag.js": -/*!********************************************!*\ - !*** ./node_modules/d3-drag/src/nodrag.js ***! - \********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "yesdrag": () => (/* binding */ yesdrag) -/* harmony export */ }); -/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-selection */ "./node_modules/d3-selection/src/select.js"); -/* harmony import */ var _noevent_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./noevent.js */ "./node_modules/d3-drag/src/noevent.js"); - - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(view) { - var root = view.document.documentElement, - selection = (0,d3_selection__WEBPACK_IMPORTED_MODULE_0__["default"])(view).on("dragstart.drag", _noevent_js__WEBPACK_IMPORTED_MODULE_1__["default"], true); - if ("onselectstart" in root) { - selection.on("selectstart.drag", _noevent_js__WEBPACK_IMPORTED_MODULE_1__["default"], true); - } else { - root.__noselect = root.style.MozUserSelect; - root.style.MozUserSelect = "none"; - } -} - -function yesdrag(view, noclick) { - var root = view.document.documentElement, - selection = (0,d3_selection__WEBPACK_IMPORTED_MODULE_0__["default"])(view).on("dragstart.drag", null); - if (noclick) { - selection.on("click.drag", _noevent_js__WEBPACK_IMPORTED_MODULE_1__["default"], true); - setTimeout(function() { selection.on("click.drag", null); }, 0); - } - if ("onselectstart" in root) { - selection.on("selectstart.drag", null); - } else { - root.style.MozUserSelect = root.__noselect; - delete root.__noselect; - } -} - - -/***/ }), - -/***/ "./node_modules/d3-drag/src/noevent.js": -/*!*********************************************!*\ - !*** ./node_modules/d3-drag/src/noevent.js ***! - \*********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "nopropagation": () => (/* binding */ nopropagation) -/* harmony export */ }); -/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-selection */ "./node_modules/d3-selection/src/selection/on.js"); - - -function nopropagation() { - d3_selection__WEBPACK_IMPORTED_MODULE_0__.event.stopImmediatePropagation(); -} - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() { - d3_selection__WEBPACK_IMPORTED_MODULE_0__.event.preventDefault(); - d3_selection__WEBPACK_IMPORTED_MODULE_0__.event.stopImmediatePropagation(); -} - - -/***/ }), - -/***/ "./node_modules/d3-dsv/src/autoType.js": -/*!*********************************************!*\ - !*** ./node_modules/d3-dsv/src/autoType.js ***! - \*********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ autoType) -/* harmony export */ }); -function autoType(object) { - for (var key in object) { - var value = object[key].trim(), number, m; - if (!value) value = null; - else if (value === "true") value = true; - else if (value === "false") value = false; - else if (value === "NaN") value = NaN; - else if (!isNaN(number = +value)) value = number; - 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})?)?$/)) { - if (fixtz && !!m[4] && !m[7]) value = value.replace(/-/g, "/").replace(/T/, " "); - value = new Date(value); - } - else continue; - object[key] = value; - } - return object; -} - -// https://github.com/d3/d3-dsv/issues/45 -var fixtz = new Date("2019-01-01T00:00").getHours() || new Date("2019-07-01T00:00").getHours(); - -/***/ }), - -/***/ "./node_modules/d3-dsv/src/csv.js": -/*!****************************************!*\ - !*** ./node_modules/d3-dsv/src/csv.js ***! - \****************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "csvFormat": () => (/* binding */ csvFormat), -/* harmony export */ "csvFormatBody": () => (/* binding */ csvFormatBody), -/* harmony export */ "csvFormatRow": () => (/* binding */ csvFormatRow), -/* harmony export */ "csvFormatRows": () => (/* binding */ csvFormatRows), -/* harmony export */ "csvFormatValue": () => (/* binding */ csvFormatValue), -/* harmony export */ "csvParse": () => (/* binding */ csvParse), -/* harmony export */ "csvParseRows": () => (/* binding */ csvParseRows) -/* harmony export */ }); -/* harmony import */ var _dsv_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./dsv.js */ "./node_modules/d3-dsv/src/dsv.js"); - - -var csv = (0,_dsv_js__WEBPACK_IMPORTED_MODULE_0__["default"])(","); - -var csvParse = csv.parse; -var csvParseRows = csv.parseRows; -var csvFormat = csv.format; -var csvFormatBody = csv.formatBody; -var csvFormatRows = csv.formatRows; -var csvFormatRow = csv.formatRow; -var csvFormatValue = csv.formatValue; - - -/***/ }), - -/***/ "./node_modules/d3-dsv/src/dsv.js": -/*!****************************************!*\ - !*** ./node_modules/d3-dsv/src/dsv.js ***! - \****************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -var EOL = {}, - EOF = {}, - QUOTE = 34, - NEWLINE = 10, - RETURN = 13; - -function objectConverter(columns) { - return new Function("d", "return {" + columns.map(function(name, i) { - return JSON.stringify(name) + ": d[" + i + "] || \"\""; - }).join(",") + "}"); -} - -function customConverter(columns, f) { - var object = objectConverter(columns); - return function(row, i) { - return f(object(row), i, columns); - }; -} - -// Compute unique columns in order of discovery. -function inferColumns(rows) { - var columnSet = Object.create(null), - columns = []; - - rows.forEach(function(row) { - for (var column in row) { - if (!(column in columnSet)) { - columns.push(columnSet[column] = column); - } - } - }); - - return columns; -} - -function pad(value, width) { - var s = value + "", length = s.length; - return length < width ? new Array(width - length + 1).join(0) + s : s; -} - -function formatYear(year) { - return year < 0 ? "-" + pad(-year, 6) - : year > 9999 ? "+" + pad(year, 6) - : pad(year, 4); -} - -function formatDate(date) { - var hours = date.getUTCHours(), - minutes = date.getUTCMinutes(), - seconds = date.getUTCSeconds(), - milliseconds = date.getUTCMilliseconds(); - return isNaN(date) ? "Invalid Date" - : formatYear(date.getUTCFullYear(), 4) + "-" + pad(date.getUTCMonth() + 1, 2) + "-" + pad(date.getUTCDate(), 2) - + (milliseconds ? "T" + pad(hours, 2) + ":" + pad(minutes, 2) + ":" + pad(seconds, 2) + "." + pad(milliseconds, 3) + "Z" - : seconds ? "T" + pad(hours, 2) + ":" + pad(minutes, 2) + ":" + pad(seconds, 2) + "Z" - : minutes || hours ? "T" + pad(hours, 2) + ":" + pad(minutes, 2) + "Z" - : ""); -} - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(delimiter) { - var reFormat = new RegExp("[\"" + delimiter + "\n\r]"), - DELIMITER = delimiter.charCodeAt(0); - - function parse(text, f) { - var convert, columns, rows = parseRows(text, function(row, i) { - if (convert) return convert(row, i - 1); - columns = row, convert = f ? customConverter(row, f) : objectConverter(row); - }); - rows.columns = columns || []; - return rows; - } - - function parseRows(text, f) { - var rows = [], // output rows - N = text.length, - I = 0, // current character index - n = 0, // current line number - t, // current token - eof = N <= 0, // current token followed by EOF? - eol = false; // current token followed by EOL? - - // Strip the trailing newline. - if (text.charCodeAt(N - 1) === NEWLINE) --N; - if (text.charCodeAt(N - 1) === RETURN) --N; - - function token() { - if (eof) return EOF; - if (eol) return eol = false, EOL; - - // Unescape quotes. - var i, j = I, c; - if (text.charCodeAt(j) === QUOTE) { - while (I++ < N && text.charCodeAt(I) !== QUOTE || text.charCodeAt(++I) === QUOTE); - if ((i = I) >= N) eof = true; - else if ((c = text.charCodeAt(I++)) === NEWLINE) eol = true; - else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; } - return text.slice(j + 1, i - 1).replace(/""/g, "\""); - } - - // Find next delimiter or newline. - while (I < N) { - if ((c = text.charCodeAt(i = I++)) === NEWLINE) eol = true; - else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; } - else if (c !== DELIMITER) continue; - return text.slice(j, i); - } - - // Return last token before EOF. - return eof = true, text.slice(j, N); - } - - while ((t = token()) !== EOF) { - var row = []; - while (t !== EOL && t !== EOF) row.push(t), t = token(); - if (f && (row = f(row, n++)) == null) continue; - rows.push(row); - } - - return rows; - } - - function preformatBody(rows, columns) { - return rows.map(function(row) { - return columns.map(function(column) { - return formatValue(row[column]); - }).join(delimiter); - }); - } - - function format(rows, columns) { - if (columns == null) columns = inferColumns(rows); - return [columns.map(formatValue).join(delimiter)].concat(preformatBody(rows, columns)).join("\n"); - } - - function formatBody(rows, columns) { - if (columns == null) columns = inferColumns(rows); - return preformatBody(rows, columns).join("\n"); - } - - function formatRows(rows) { - return rows.map(formatRow).join("\n"); - } - - function formatRow(row) { - return row.map(formatValue).join(delimiter); - } - - function formatValue(value) { - return value == null ? "" - : value instanceof Date ? formatDate(value) - : reFormat.test(value += "") ? "\"" + value.replace(/"/g, "\"\"") + "\"" - : value; - } - - return { - parse: parse, - parseRows: parseRows, - format: format, - formatBody: formatBody, - formatRows: formatRows, - formatRow: formatRow, - formatValue: formatValue - }; -} - - -/***/ }), - -/***/ "./node_modules/d3-dsv/src/index.js": -/*!******************************************!*\ - !*** ./node_modules/d3-dsv/src/index.js ***! - \******************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "autoType": () => (/* reexport safe */ _autoType_js__WEBPACK_IMPORTED_MODULE_3__["default"]), -/* harmony export */ "csvFormat": () => (/* reexport safe */ _csv_js__WEBPACK_IMPORTED_MODULE_1__.csvFormat), -/* harmony export */ "csvFormatBody": () => (/* reexport safe */ _csv_js__WEBPACK_IMPORTED_MODULE_1__.csvFormatBody), -/* harmony export */ "csvFormatRow": () => (/* reexport safe */ _csv_js__WEBPACK_IMPORTED_MODULE_1__.csvFormatRow), -/* harmony export */ "csvFormatRows": () => (/* reexport safe */ _csv_js__WEBPACK_IMPORTED_MODULE_1__.csvFormatRows), -/* harmony export */ "csvFormatValue": () => (/* reexport safe */ _csv_js__WEBPACK_IMPORTED_MODULE_1__.csvFormatValue), -/* harmony export */ "csvParse": () => (/* reexport safe */ _csv_js__WEBPACK_IMPORTED_MODULE_1__.csvParse), -/* harmony export */ "csvParseRows": () => (/* reexport safe */ _csv_js__WEBPACK_IMPORTED_MODULE_1__.csvParseRows), -/* harmony export */ "dsvFormat": () => (/* reexport safe */ _dsv_js__WEBPACK_IMPORTED_MODULE_0__["default"]), -/* harmony export */ "tsvFormat": () => (/* reexport safe */ _tsv_js__WEBPACK_IMPORTED_MODULE_2__.tsvFormat), -/* harmony export */ "tsvFormatBody": () => (/* reexport safe */ _tsv_js__WEBPACK_IMPORTED_MODULE_2__.tsvFormatBody), -/* harmony export */ "tsvFormatRow": () => (/* reexport safe */ _tsv_js__WEBPACK_IMPORTED_MODULE_2__.tsvFormatRow), -/* harmony export */ "tsvFormatRows": () => (/* reexport safe */ _tsv_js__WEBPACK_IMPORTED_MODULE_2__.tsvFormatRows), -/* harmony export */ "tsvFormatValue": () => (/* reexport safe */ _tsv_js__WEBPACK_IMPORTED_MODULE_2__.tsvFormatValue), -/* harmony export */ "tsvParse": () => (/* reexport safe */ _tsv_js__WEBPACK_IMPORTED_MODULE_2__.tsvParse), -/* harmony export */ "tsvParseRows": () => (/* reexport safe */ _tsv_js__WEBPACK_IMPORTED_MODULE_2__.tsvParseRows) -/* harmony export */ }); -/* harmony import */ var _dsv_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./dsv.js */ "./node_modules/d3-dsv/src/dsv.js"); -/* harmony import */ var _csv_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./csv.js */ "./node_modules/d3-dsv/src/csv.js"); -/* harmony import */ var _tsv_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tsv.js */ "./node_modules/d3-dsv/src/tsv.js"); -/* harmony import */ var _autoType_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./autoType.js */ "./node_modules/d3-dsv/src/autoType.js"); - - - - - - -/***/ }), - -/***/ "./node_modules/d3-dsv/src/tsv.js": -/*!****************************************!*\ - !*** ./node_modules/d3-dsv/src/tsv.js ***! - \****************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "tsvFormat": () => (/* binding */ tsvFormat), -/* harmony export */ "tsvFormatBody": () => (/* binding */ tsvFormatBody), -/* harmony export */ "tsvFormatRow": () => (/* binding */ tsvFormatRow), -/* harmony export */ "tsvFormatRows": () => (/* binding */ tsvFormatRows), -/* harmony export */ "tsvFormatValue": () => (/* binding */ tsvFormatValue), -/* harmony export */ "tsvParse": () => (/* binding */ tsvParse), -/* harmony export */ "tsvParseRows": () => (/* binding */ tsvParseRows) -/* harmony export */ }); -/* harmony import */ var _dsv_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./dsv.js */ "./node_modules/d3-dsv/src/dsv.js"); - - -var tsv = (0,_dsv_js__WEBPACK_IMPORTED_MODULE_0__["default"])("\t"); - -var tsvParse = tsv.parse; -var tsvParseRows = tsv.parseRows; -var tsvFormat = tsv.format; -var tsvFormatBody = tsv.formatBody; -var tsvFormatRows = tsv.formatRows; -var tsvFormatRow = tsv.formatRow; -var tsvFormatValue = tsv.formatValue; - - -/***/ }), - -/***/ "./node_modules/d3-ease/src/back.js": -/*!******************************************!*\ - !*** ./node_modules/d3-ease/src/back.js ***! - \******************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "backIn": () => (/* binding */ backIn), -/* harmony export */ "backInOut": () => (/* binding */ backInOut), -/* harmony export */ "backOut": () => (/* binding */ backOut) -/* harmony export */ }); -var overshoot = 1.70158; - -var backIn = (function custom(s) { - s = +s; - - function backIn(t) { - return (t = +t) * t * (s * (t - 1) + t); - } - - backIn.overshoot = custom; - - return backIn; -})(overshoot); - -var backOut = (function custom(s) { - s = +s; - - function backOut(t) { - return --t * t * ((t + 1) * s + t) + 1; - } - - backOut.overshoot = custom; - - return backOut; -})(overshoot); - -var backInOut = (function custom(s) { - s = +s; - - function backInOut(t) { - return ((t *= 2) < 1 ? t * t * ((s + 1) * t - s) : (t -= 2) * t * ((s + 1) * t + s) + 2) / 2; - } - - backInOut.overshoot = custom; - - return backInOut; -})(overshoot); - - -/***/ }), - -/***/ "./node_modules/d3-ease/src/bounce.js": -/*!********************************************!*\ - !*** ./node_modules/d3-ease/src/bounce.js ***! - \********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "bounceIn": () => (/* binding */ bounceIn), -/* harmony export */ "bounceInOut": () => (/* binding */ bounceInOut), -/* harmony export */ "bounceOut": () => (/* binding */ bounceOut) -/* harmony export */ }); -var b1 = 4 / 11, - b2 = 6 / 11, - b3 = 8 / 11, - b4 = 3 / 4, - b5 = 9 / 11, - b6 = 10 / 11, - b7 = 15 / 16, - b8 = 21 / 22, - b9 = 63 / 64, - b0 = 1 / b1 / b1; - -function bounceIn(t) { - return 1 - bounceOut(1 - t); -} - -function bounceOut(t) { - 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; -} - -function bounceInOut(t) { - return ((t *= 2) <= 1 ? 1 - bounceOut(1 - t) : bounceOut(t - 1) + 1) / 2; -} - - -/***/ }), - -/***/ "./node_modules/d3-ease/src/circle.js": -/*!********************************************!*\ - !*** ./node_modules/d3-ease/src/circle.js ***! - \********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "circleIn": () => (/* binding */ circleIn), -/* harmony export */ "circleInOut": () => (/* binding */ circleInOut), -/* harmony export */ "circleOut": () => (/* binding */ circleOut) -/* harmony export */ }); -function circleIn(t) { - return 1 - Math.sqrt(1 - t * t); -} - -function circleOut(t) { - return Math.sqrt(1 - --t * t); -} - -function circleInOut(t) { - return ((t *= 2) <= 1 ? 1 - Math.sqrt(1 - t * t) : Math.sqrt(1 - (t -= 2) * t) + 1) / 2; -} - - -/***/ }), - -/***/ "./node_modules/d3-ease/src/cubic.js": -/*!*******************************************!*\ - !*** ./node_modules/d3-ease/src/cubic.js ***! - \*******************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "cubicIn": () => (/* binding */ cubicIn), -/* harmony export */ "cubicInOut": () => (/* binding */ cubicInOut), -/* harmony export */ "cubicOut": () => (/* binding */ cubicOut) -/* harmony export */ }); -function cubicIn(t) { - return t * t * t; -} - -function cubicOut(t) { - return --t * t * t + 1; -} - -function cubicInOut(t) { - return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2; -} - - -/***/ }), - -/***/ "./node_modules/d3-ease/src/elastic.js": -/*!*********************************************!*\ - !*** ./node_modules/d3-ease/src/elastic.js ***! - \*********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "elasticIn": () => (/* binding */ elasticIn), -/* harmony export */ "elasticInOut": () => (/* binding */ elasticInOut), -/* harmony export */ "elasticOut": () => (/* binding */ elasticOut) -/* harmony export */ }); -/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./math.js */ "./node_modules/d3-ease/src/math.js"); - - -var tau = 2 * Math.PI, - amplitude = 1, - period = 0.3; - -var elasticIn = (function custom(a, p) { - var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau); - - function elasticIn(t) { - return a * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.tpmt)(-(--t)) * Math.sin((s - t) / p); - } - - elasticIn.amplitude = function(a) { return custom(a, p * tau); }; - elasticIn.period = function(p) { return custom(a, p); }; - - return elasticIn; -})(amplitude, period); - -var elasticOut = (function custom(a, p) { - var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau); - - function elasticOut(t) { - return 1 - a * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.tpmt)(t = +t) * Math.sin((t + s) / p); - } - - elasticOut.amplitude = function(a) { return custom(a, p * tau); }; - elasticOut.period = function(p) { return custom(a, p); }; - - return elasticOut; -})(amplitude, period); - -var elasticInOut = (function custom(a, p) { - var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau); - - function elasticInOut(t) { - return ((t = t * 2 - 1) < 0 - ? a * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.tpmt)(-t) * Math.sin((s - t) / p) - : 2 - a * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.tpmt)(t) * Math.sin((s + t) / p)) / 2; - } - - elasticInOut.amplitude = function(a) { return custom(a, p * tau); }; - elasticInOut.period = function(p) { return custom(a, p); }; - - return elasticInOut; -})(amplitude, period); - - -/***/ }), - -/***/ "./node_modules/d3-ease/src/exp.js": -/*!*****************************************!*\ - !*** ./node_modules/d3-ease/src/exp.js ***! - \*****************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "expIn": () => (/* binding */ expIn), -/* harmony export */ "expInOut": () => (/* binding */ expInOut), -/* harmony export */ "expOut": () => (/* binding */ expOut) -/* harmony export */ }); -/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./math.js */ "./node_modules/d3-ease/src/math.js"); - - -function expIn(t) { - return (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.tpmt)(1 - +t); -} - -function expOut(t) { - return 1 - (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.tpmt)(t); -} - -function expInOut(t) { - 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; -} - - -/***/ }), - -/***/ "./node_modules/d3-ease/src/index.js": -/*!*******************************************!*\ - !*** ./node_modules/d3-ease/src/index.js ***! - \*******************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "easeBack": () => (/* reexport safe */ _back_js__WEBPACK_IMPORTED_MODULE_8__.backInOut), -/* harmony export */ "easeBackIn": () => (/* reexport safe */ _back_js__WEBPACK_IMPORTED_MODULE_8__.backIn), -/* harmony export */ "easeBackInOut": () => (/* reexport safe */ _back_js__WEBPACK_IMPORTED_MODULE_8__.backInOut), -/* harmony export */ "easeBackOut": () => (/* reexport safe */ _back_js__WEBPACK_IMPORTED_MODULE_8__.backOut), -/* harmony export */ "easeBounce": () => (/* reexport safe */ _bounce_js__WEBPACK_IMPORTED_MODULE_7__.bounceOut), -/* harmony export */ "easeBounceIn": () => (/* reexport safe */ _bounce_js__WEBPACK_IMPORTED_MODULE_7__.bounceIn), -/* harmony export */ "easeBounceInOut": () => (/* reexport safe */ _bounce_js__WEBPACK_IMPORTED_MODULE_7__.bounceInOut), -/* harmony export */ "easeBounceOut": () => (/* reexport safe */ _bounce_js__WEBPACK_IMPORTED_MODULE_7__.bounceOut), -/* harmony export */ "easeCircle": () => (/* reexport safe */ _circle_js__WEBPACK_IMPORTED_MODULE_6__.circleInOut), -/* harmony export */ "easeCircleIn": () => (/* reexport safe */ _circle_js__WEBPACK_IMPORTED_MODULE_6__.circleIn), -/* harmony export */ "easeCircleInOut": () => (/* reexport safe */ _circle_js__WEBPACK_IMPORTED_MODULE_6__.circleInOut), -/* harmony export */ "easeCircleOut": () => (/* reexport safe */ _circle_js__WEBPACK_IMPORTED_MODULE_6__.circleOut), -/* harmony export */ "easeCubic": () => (/* reexport safe */ _cubic_js__WEBPACK_IMPORTED_MODULE_2__.cubicInOut), -/* harmony export */ "easeCubicIn": () => (/* reexport safe */ _cubic_js__WEBPACK_IMPORTED_MODULE_2__.cubicIn), -/* harmony export */ "easeCubicInOut": () => (/* reexport safe */ _cubic_js__WEBPACK_IMPORTED_MODULE_2__.cubicInOut), -/* harmony export */ "easeCubicOut": () => (/* reexport safe */ _cubic_js__WEBPACK_IMPORTED_MODULE_2__.cubicOut), -/* harmony export */ "easeElastic": () => (/* reexport safe */ _elastic_js__WEBPACK_IMPORTED_MODULE_9__.elasticOut), -/* harmony export */ "easeElasticIn": () => (/* reexport safe */ _elastic_js__WEBPACK_IMPORTED_MODULE_9__.elasticIn), -/* harmony export */ "easeElasticInOut": () => (/* reexport safe */ _elastic_js__WEBPACK_IMPORTED_MODULE_9__.elasticInOut), -/* harmony export */ "easeElasticOut": () => (/* reexport safe */ _elastic_js__WEBPACK_IMPORTED_MODULE_9__.elasticOut), -/* harmony export */ "easeExp": () => (/* reexport safe */ _exp_js__WEBPACK_IMPORTED_MODULE_5__.expInOut), -/* harmony export */ "easeExpIn": () => (/* reexport safe */ _exp_js__WEBPACK_IMPORTED_MODULE_5__.expIn), -/* harmony export */ "easeExpInOut": () => (/* reexport safe */ _exp_js__WEBPACK_IMPORTED_MODULE_5__.expInOut), -/* harmony export */ "easeExpOut": () => (/* reexport safe */ _exp_js__WEBPACK_IMPORTED_MODULE_5__.expOut), -/* harmony export */ "easeLinear": () => (/* reexport safe */ _linear_js__WEBPACK_IMPORTED_MODULE_0__.linear), -/* harmony export */ "easePoly": () => (/* reexport safe */ _poly_js__WEBPACK_IMPORTED_MODULE_3__.polyInOut), -/* harmony export */ "easePolyIn": () => (/* reexport safe */ _poly_js__WEBPACK_IMPORTED_MODULE_3__.polyIn), -/* harmony export */ "easePolyInOut": () => (/* reexport safe */ _poly_js__WEBPACK_IMPORTED_MODULE_3__.polyInOut), -/* harmony export */ "easePolyOut": () => (/* reexport safe */ _poly_js__WEBPACK_IMPORTED_MODULE_3__.polyOut), -/* harmony export */ "easeQuad": () => (/* reexport safe */ _quad_js__WEBPACK_IMPORTED_MODULE_1__.quadInOut), -/* harmony export */ "easeQuadIn": () => (/* reexport safe */ _quad_js__WEBPACK_IMPORTED_MODULE_1__.quadIn), -/* harmony export */ "easeQuadInOut": () => (/* reexport safe */ _quad_js__WEBPACK_IMPORTED_MODULE_1__.quadInOut), -/* harmony export */ "easeQuadOut": () => (/* reexport safe */ _quad_js__WEBPACK_IMPORTED_MODULE_1__.quadOut), -/* harmony export */ "easeSin": () => (/* reexport safe */ _sin_js__WEBPACK_IMPORTED_MODULE_4__.sinInOut), -/* harmony export */ "easeSinIn": () => (/* reexport safe */ _sin_js__WEBPACK_IMPORTED_MODULE_4__.sinIn), -/* harmony export */ "easeSinInOut": () => (/* reexport safe */ _sin_js__WEBPACK_IMPORTED_MODULE_4__.sinInOut), -/* harmony export */ "easeSinOut": () => (/* reexport safe */ _sin_js__WEBPACK_IMPORTED_MODULE_4__.sinOut) -/* harmony export */ }); -/* harmony import */ var _linear_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./linear.js */ "./node_modules/d3-ease/src/linear.js"); -/* harmony import */ var _quad_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./quad.js */ "./node_modules/d3-ease/src/quad.js"); -/* harmony import */ var _cubic_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./cubic.js */ "./node_modules/d3-ease/src/cubic.js"); -/* harmony import */ var _poly_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./poly.js */ "./node_modules/d3-ease/src/poly.js"); -/* harmony import */ var _sin_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./sin.js */ "./node_modules/d3-ease/src/sin.js"); -/* harmony import */ var _exp_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./exp.js */ "./node_modules/d3-ease/src/exp.js"); -/* harmony import */ var _circle_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./circle.js */ "./node_modules/d3-ease/src/circle.js"); -/* harmony import */ var _bounce_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./bounce.js */ "./node_modules/d3-ease/src/bounce.js"); -/* harmony import */ var _back_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./back.js */ "./node_modules/d3-ease/src/back.js"); -/* harmony import */ var _elastic_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./elastic.js */ "./node_modules/d3-ease/src/elastic.js"); - - - - - - - - - - - - - - - - - - - - - -/***/ }), - -/***/ "./node_modules/d3-ease/src/linear.js": -/*!********************************************!*\ - !*** ./node_modules/d3-ease/src/linear.js ***! - \********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "linear": () => (/* binding */ linear) -/* harmony export */ }); -function linear(t) { - return +t; -} - - -/***/ }), - -/***/ "./node_modules/d3-ease/src/math.js": -/*!******************************************!*\ - !*** ./node_modules/d3-ease/src/math.js ***! - \******************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "tpmt": () => (/* binding */ tpmt) -/* harmony export */ }); -// tpmt is two power minus ten times t scaled to [0,1] -function tpmt(x) { - return (Math.pow(2, -10 * x) - 0.0009765625) * 1.0009775171065494; -} - - -/***/ }), - -/***/ "./node_modules/d3-ease/src/poly.js": -/*!******************************************!*\ - !*** ./node_modules/d3-ease/src/poly.js ***! - \******************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "polyIn": () => (/* binding */ polyIn), -/* harmony export */ "polyInOut": () => (/* binding */ polyInOut), -/* harmony export */ "polyOut": () => (/* binding */ polyOut) -/* harmony export */ }); -var exponent = 3; - -var polyIn = (function custom(e) { - e = +e; - - function polyIn(t) { - return Math.pow(t, e); - } - - polyIn.exponent = custom; - - return polyIn; -})(exponent); - -var polyOut = (function custom(e) { - e = +e; - - function polyOut(t) { - return 1 - Math.pow(1 - t, e); - } - - polyOut.exponent = custom; - - return polyOut; -})(exponent); - -var polyInOut = (function custom(e) { - e = +e; - - function polyInOut(t) { - return ((t *= 2) <= 1 ? Math.pow(t, e) : 2 - Math.pow(2 - t, e)) / 2; - } - - polyInOut.exponent = custom; - - return polyInOut; -})(exponent); - - -/***/ }), - -/***/ "./node_modules/d3-ease/src/quad.js": -/*!******************************************!*\ - !*** ./node_modules/d3-ease/src/quad.js ***! - \******************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "quadIn": () => (/* binding */ quadIn), -/* harmony export */ "quadInOut": () => (/* binding */ quadInOut), -/* harmony export */ "quadOut": () => (/* binding */ quadOut) -/* harmony export */ }); -function quadIn(t) { - return t * t; -} - -function quadOut(t) { - return t * (2 - t); -} - -function quadInOut(t) { - return ((t *= 2) <= 1 ? t * t : --t * (2 - t) + 1) / 2; -} - - -/***/ }), - -/***/ "./node_modules/d3-ease/src/sin.js": -/*!*****************************************!*\ - !*** ./node_modules/d3-ease/src/sin.js ***! - \*****************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "sinIn": () => (/* binding */ sinIn), -/* harmony export */ "sinInOut": () => (/* binding */ sinInOut), -/* harmony export */ "sinOut": () => (/* binding */ sinOut) -/* harmony export */ }); -var pi = Math.PI, - halfPi = pi / 2; - -function sinIn(t) { - return (+t === 1) ? 1 : 1 - Math.cos(t * halfPi); -} - -function sinOut(t) { - return Math.sin(t * halfPi); -} - -function sinInOut(t) { - return (1 - Math.cos(pi * t)) / 2; -} - - -/***/ }), - -/***/ "./node_modules/d3-fetch/src/blob.js": -/*!*******************************************!*\ - !*** ./node_modules/d3-fetch/src/blob.js ***! - \*******************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -function responseBlob(response) { - if (!response.ok) throw new Error(response.status + " " + response.statusText); - return response.blob(); -} - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(input, init) { - return fetch(input, init).then(responseBlob); -} - - -/***/ }), - -/***/ "./node_modules/d3-fetch/src/buffer.js": -/*!*********************************************!*\ - !*** ./node_modules/d3-fetch/src/buffer.js ***! - \*********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -function responseArrayBuffer(response) { - if (!response.ok) throw new Error(response.status + " " + response.statusText); - return response.arrayBuffer(); -} - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(input, init) { - return fetch(input, init).then(responseArrayBuffer); -} - - -/***/ }), - -/***/ "./node_modules/d3-fetch/src/dsv.js": -/*!******************************************!*\ - !*** ./node_modules/d3-fetch/src/dsv.js ***! - \******************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "csv": () => (/* binding */ csv), -/* harmony export */ "default": () => (/* binding */ dsv), -/* harmony export */ "tsv": () => (/* binding */ tsv) -/* harmony export */ }); -/* harmony import */ var d3_dsv__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-dsv */ "./node_modules/d3-dsv/src/dsv.js"); -/* harmony import */ var d3_dsv__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-dsv */ "./node_modules/d3-dsv/src/csv.js"); -/* harmony import */ var d3_dsv__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! d3-dsv */ "./node_modules/d3-dsv/src/tsv.js"); -/* harmony import */ var _text_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./text.js */ "./node_modules/d3-fetch/src/text.js"); - - - -function dsvParse(parse) { - return function(input, init, row) { - if (arguments.length === 2 && typeof init === "function") row = init, init = undefined; - return (0,_text_js__WEBPACK_IMPORTED_MODULE_0__["default"])(input, init).then(function(response) { - return parse(response, row); - }); - }; -} - -function dsv(delimiter, input, init, row) { - if (arguments.length === 3 && typeof init === "function") row = init, init = undefined; - var format = (0,d3_dsv__WEBPACK_IMPORTED_MODULE_1__["default"])(delimiter); - return (0,_text_js__WEBPACK_IMPORTED_MODULE_0__["default"])(input, init).then(function(response) { - return format.parse(response, row); - }); -} - -var csv = dsvParse(d3_dsv__WEBPACK_IMPORTED_MODULE_2__.csvParse); -var tsv = dsvParse(d3_dsv__WEBPACK_IMPORTED_MODULE_3__.tsvParse); - - -/***/ }), - -/***/ "./node_modules/d3-fetch/src/image.js": -/*!********************************************!*\ - !*** ./node_modules/d3-fetch/src/image.js ***! - \********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(input, init) { - return new Promise(function(resolve, reject) { - var image = new Image; - for (var key in init) image[key] = init[key]; - image.onerror = reject; - image.onload = function() { resolve(image); }; - image.src = input; - }); -} - - -/***/ }), - -/***/ "./node_modules/d3-fetch/src/index.js": -/*!********************************************!*\ - !*** ./node_modules/d3-fetch/src/index.js ***! - \********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "blob": () => (/* reexport safe */ _blob_js__WEBPACK_IMPORTED_MODULE_0__["default"]), -/* harmony export */ "buffer": () => (/* reexport safe */ _buffer_js__WEBPACK_IMPORTED_MODULE_1__["default"]), -/* harmony export */ "csv": () => (/* reexport safe */ _dsv_js__WEBPACK_IMPORTED_MODULE_2__.csv), -/* harmony export */ "dsv": () => (/* reexport safe */ _dsv_js__WEBPACK_IMPORTED_MODULE_2__["default"]), -/* harmony export */ "html": () => (/* reexport safe */ _xml_js__WEBPACK_IMPORTED_MODULE_6__.html), -/* harmony export */ "image": () => (/* reexport safe */ _image_js__WEBPACK_IMPORTED_MODULE_3__["default"]), -/* harmony export */ "json": () => (/* reexport safe */ _json_js__WEBPACK_IMPORTED_MODULE_4__["default"]), -/* harmony export */ "svg": () => (/* reexport safe */ _xml_js__WEBPACK_IMPORTED_MODULE_6__.svg), -/* harmony export */ "text": () => (/* reexport safe */ _text_js__WEBPACK_IMPORTED_MODULE_5__["default"]), -/* harmony export */ "tsv": () => (/* reexport safe */ _dsv_js__WEBPACK_IMPORTED_MODULE_2__.tsv), -/* harmony export */ "xml": () => (/* reexport safe */ _xml_js__WEBPACK_IMPORTED_MODULE_6__["default"]) -/* harmony export */ }); -/* harmony import */ var _blob_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./blob.js */ "./node_modules/d3-fetch/src/blob.js"); -/* harmony import */ var _buffer_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./buffer.js */ "./node_modules/d3-fetch/src/buffer.js"); -/* harmony import */ var _dsv_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./dsv.js */ "./node_modules/d3-fetch/src/dsv.js"); -/* harmony import */ var _image_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./image.js */ "./node_modules/d3-fetch/src/image.js"); -/* harmony import */ var _json_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./json.js */ "./node_modules/d3-fetch/src/json.js"); -/* harmony import */ var _text_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./text.js */ "./node_modules/d3-fetch/src/text.js"); -/* harmony import */ var _xml_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./xml.js */ "./node_modules/d3-fetch/src/xml.js"); - - - - - - - - - -/***/ }), - -/***/ "./node_modules/d3-fetch/src/json.js": -/*!*******************************************!*\ - !*** ./node_modules/d3-fetch/src/json.js ***! - \*******************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -function responseJson(response) { - if (!response.ok) throw new Error(response.status + " " + response.statusText); - if (response.status === 204 || response.status === 205) return; - return response.json(); -} - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(input, init) { - return fetch(input, init).then(responseJson); -} - - -/***/ }), - -/***/ "./node_modules/d3-fetch/src/text.js": -/*!*******************************************!*\ - !*** ./node_modules/d3-fetch/src/text.js ***! - \*******************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -function responseText(response) { - if (!response.ok) throw new Error(response.status + " " + response.statusText); - return response.text(); -} - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(input, init) { - return fetch(input, init).then(responseText); -} - - -/***/ }), - -/***/ "./node_modules/d3-fetch/src/xml.js": -/*!******************************************!*\ - !*** ./node_modules/d3-fetch/src/xml.js ***! - \******************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "html": () => (/* binding */ html), -/* harmony export */ "svg": () => (/* binding */ svg) -/* harmony export */ }); -/* harmony import */ var _text_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./text.js */ "./node_modules/d3-fetch/src/text.js"); - - -function parser(type) { - return function(input, init) { - return (0,_text_js__WEBPACK_IMPORTED_MODULE_0__["default"])(input, init).then(function(text) { - return (new DOMParser).parseFromString(text, type); - }); - }; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (parser("application/xml")); - -var html = parser("text/html"); - -var svg = parser("image/svg+xml"); - - -/***/ }), - -/***/ "./node_modules/d3-force/src/center.js": -/*!*********************************************!*\ - !*** ./node_modules/d3-force/src/center.js ***! - \*********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(x, y) { - var nodes; - - if (x == null) x = 0; - if (y == null) y = 0; - - function force() { - var i, - n = nodes.length, - node, - sx = 0, - sy = 0; - - for (i = 0; i < n; ++i) { - node = nodes[i], sx += node.x, sy += node.y; - } - - for (sx = sx / n - x, sy = sy / n - y, i = 0; i < n; ++i) { - node = nodes[i], node.x -= sx, node.y -= sy; - } - } - - force.initialize = function(_) { - nodes = _; - }; - - force.x = function(_) { - return arguments.length ? (x = +_, force) : x; - }; - - force.y = function(_) { - return arguments.length ? (y = +_, force) : y; - }; - - return force; -} - - -/***/ }), - -/***/ "./node_modules/d3-force/src/collide.js": -/*!**********************************************!*\ - !*** ./node_modules/d3-force/src/collide.js ***! - \**********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./constant */ "./node_modules/d3-force/src/constant.js"); -/* harmony import */ var _jiggle__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./jiggle */ "./node_modules/d3-force/src/jiggle.js"); -/* harmony import */ var d3_quadtree__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-quadtree */ "./node_modules/d3-quadtree/src/quadtree.js"); - - - - -function x(d) { - return d.x + d.vx; -} - -function y(d) { - return d.y + d.vy; -} - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(radius) { - var nodes, - radii, - strength = 1, - iterations = 1; - - if (typeof radius !== "function") radius = (0,_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(radius == null ? 1 : +radius); - - function force() { - var i, n = nodes.length, - tree, - node, - xi, - yi, - ri, - ri2; - - for (var k = 0; k < iterations; ++k) { - tree = (0,d3_quadtree__WEBPACK_IMPORTED_MODULE_2__["default"])(nodes, x, y).visitAfter(prepare); - for (i = 0; i < n; ++i) { - node = nodes[i]; - ri = radii[node.index], ri2 = ri * ri; - xi = node.x + node.vx; - yi = node.y + node.vy; - tree.visit(apply); - } - } - - function apply(quad, x0, y0, x1, y1) { - var data = quad.data, rj = quad.r, r = ri + rj; - if (data) { - if (data.index > node.index) { - var x = xi - data.x - data.vx, - y = yi - data.y - data.vy, - l = x * x + y * y; - if (l < r * r) { - if (x === 0) x = (0,_jiggle__WEBPACK_IMPORTED_MODULE_1__["default"])(), l += x * x; - if (y === 0) y = (0,_jiggle__WEBPACK_IMPORTED_MODULE_1__["default"])(), l += y * y; - l = (r - (l = Math.sqrt(l))) / l * strength; - node.vx += (x *= l) * (r = (rj *= rj) / (ri2 + rj)); - node.vy += (y *= l) * r; - data.vx -= x * (r = 1 - r); - data.vy -= y * r; - } - } - return; - } - return x0 > xi + r || x1 < xi - r || y0 > yi + r || y1 < yi - r; - } - } - - function prepare(quad) { - if (quad.data) return quad.r = radii[quad.data.index]; - for (var i = quad.r = 0; i < 4; ++i) { - if (quad[i] && quad[i].r > quad.r) { - quad.r = quad[i].r; - } - } - } - - function initialize() { - if (!nodes) return; - var i, n = nodes.length, node; - radii = new Array(n); - for (i = 0; i < n; ++i) node = nodes[i], radii[node.index] = +radius(node, i, nodes); - } - - force.initialize = function(_) { - nodes = _; - initialize(); - }; - - force.iterations = function(_) { - return arguments.length ? (iterations = +_, force) : iterations; - }; - - force.strength = function(_) { - return arguments.length ? (strength = +_, force) : strength; - }; - - force.radius = function(_) { - return arguments.length ? (radius = typeof _ === "function" ? _ : (0,_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(+_), initialize(), force) : radius; - }; - - return force; -} - - -/***/ }), - -/***/ "./node_modules/d3-force/src/constant.js": -/*!***********************************************!*\ - !*** ./node_modules/d3-force/src/constant.js ***! - \***********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(x) { - return function() { - return x; - }; -} - - -/***/ }), - -/***/ "./node_modules/d3-force/src/index.js": -/*!********************************************!*\ - !*** ./node_modules/d3-force/src/index.js ***! - \********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "forceCenter": () => (/* reexport safe */ _center__WEBPACK_IMPORTED_MODULE_0__["default"]), -/* harmony export */ "forceCollide": () => (/* reexport safe */ _collide__WEBPACK_IMPORTED_MODULE_1__["default"]), -/* harmony export */ "forceLink": () => (/* reexport safe */ _link__WEBPACK_IMPORTED_MODULE_2__["default"]), -/* harmony export */ "forceManyBody": () => (/* reexport safe */ _manyBody__WEBPACK_IMPORTED_MODULE_3__["default"]), -/* harmony export */ "forceRadial": () => (/* reexport safe */ _radial__WEBPACK_IMPORTED_MODULE_4__["default"]), -/* harmony export */ "forceSimulation": () => (/* reexport safe */ _simulation__WEBPACK_IMPORTED_MODULE_5__["default"]), -/* harmony export */ "forceX": () => (/* reexport safe */ _x__WEBPACK_IMPORTED_MODULE_6__["default"]), -/* harmony export */ "forceY": () => (/* reexport safe */ _y__WEBPACK_IMPORTED_MODULE_7__["default"]) -/* harmony export */ }); -/* harmony import */ var _center__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./center */ "./node_modules/d3-force/src/center.js"); -/* harmony import */ var _collide__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./collide */ "./node_modules/d3-force/src/collide.js"); -/* harmony import */ var _link__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./link */ "./node_modules/d3-force/src/link.js"); -/* harmony import */ var _manyBody__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./manyBody */ "./node_modules/d3-force/src/manyBody.js"); -/* harmony import */ var _radial__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./radial */ "./node_modules/d3-force/src/radial.js"); -/* harmony import */ var _simulation__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./simulation */ "./node_modules/d3-force/src/simulation.js"); -/* harmony import */ var _x__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./x */ "./node_modules/d3-force/src/x.js"); -/* harmony import */ var _y__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./y */ "./node_modules/d3-force/src/y.js"); - - - - - - - - - - -/***/ }), - -/***/ "./node_modules/d3-force/src/jiggle.js": -/*!*********************************************!*\ - !*** ./node_modules/d3-force/src/jiggle.js ***! - \*********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() { - return (Math.random() - 0.5) * 1e-6; -} - - -/***/ }), - -/***/ "./node_modules/d3-force/src/link.js": -/*!*******************************************!*\ - !*** ./node_modules/d3-force/src/link.js ***! - \*******************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./constant */ "./node_modules/d3-force/src/constant.js"); -/* harmony import */ var _jiggle__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./jiggle */ "./node_modules/d3-force/src/jiggle.js"); -/* harmony import */ var d3_collection__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-collection */ "./node_modules/d3-collection/src/index.js"); - - - - -function index(d) { - return d.index; -} - -function find(nodeById, nodeId) { - var node = nodeById.get(nodeId); - if (!node) throw new Error("missing: " + nodeId); - return node; -} - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(links) { - var id = index, - strength = defaultStrength, - strengths, - distance = (0,_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(30), - distances, - nodes, - count, - bias, - iterations = 1; - - if (links == null) links = []; - - function defaultStrength(link) { - return 1 / Math.min(count[link.source.index], count[link.target.index]); - } - - function force(alpha) { - for (var k = 0, n = links.length; k < iterations; ++k) { - for (var i = 0, link, source, target, x, y, l, b; i < n; ++i) { - link = links[i], source = link.source, target = link.target; - x = target.x + target.vx - source.x - source.vx || (0,_jiggle__WEBPACK_IMPORTED_MODULE_1__["default"])(); - y = target.y + target.vy - source.y - source.vy || (0,_jiggle__WEBPACK_IMPORTED_MODULE_1__["default"])(); - l = Math.sqrt(x * x + y * y); - l = (l - distances[i]) / l * alpha * strengths[i]; - x *= l, y *= l; - target.vx -= x * (b = bias[i]); - target.vy -= y * b; - source.vx += x * (b = 1 - b); - source.vy += y * b; - } - } - } - - function initialize() { - if (!nodes) return; - - var i, - n = nodes.length, - m = links.length, - nodeById = (0,d3_collection__WEBPACK_IMPORTED_MODULE_2__.map)(nodes, id), - link; - - for (i = 0, count = new Array(n); i < m; ++i) { - link = links[i], link.index = i; - if (typeof link.source !== "object") link.source = find(nodeById, link.source); - if (typeof link.target !== "object") link.target = find(nodeById, link.target); - count[link.source.index] = (count[link.source.index] || 0) + 1; - count[link.target.index] = (count[link.target.index] || 0) + 1; - } - - for (i = 0, bias = new Array(m); i < m; ++i) { - link = links[i], bias[i] = count[link.source.index] / (count[link.source.index] + count[link.target.index]); - } - - strengths = new Array(m), initializeStrength(); - distances = new Array(m), initializeDistance(); - } - - function initializeStrength() { - if (!nodes) return; - - for (var i = 0, n = links.length; i < n; ++i) { - strengths[i] = +strength(links[i], i, links); - } - } - - function initializeDistance() { - if (!nodes) return; - - for (var i = 0, n = links.length; i < n; ++i) { - distances[i] = +distance(links[i], i, links); - } - } - - force.initialize = function(_) { - nodes = _; - initialize(); - }; - - force.links = function(_) { - return arguments.length ? (links = _, initialize(), force) : links; - }; - - force.id = function(_) { - return arguments.length ? (id = _, force) : id; - }; - - force.iterations = function(_) { - return arguments.length ? (iterations = +_, force) : iterations; - }; - - force.strength = function(_) { - return arguments.length ? (strength = typeof _ === "function" ? _ : (0,_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(+_), initializeStrength(), force) : strength; - }; - - force.distance = function(_) { - return arguments.length ? (distance = typeof _ === "function" ? _ : (0,_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(+_), initializeDistance(), force) : distance; - }; - - return force; -} - - -/***/ }), - -/***/ "./node_modules/d3-force/src/manyBody.js": -/*!***********************************************!*\ - !*** ./node_modules/d3-force/src/manyBody.js ***! - \***********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./constant */ "./node_modules/d3-force/src/constant.js"); -/* harmony import */ var _jiggle__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./jiggle */ "./node_modules/d3-force/src/jiggle.js"); -/* harmony import */ var d3_quadtree__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! d3-quadtree */ "./node_modules/d3-quadtree/src/quadtree.js"); -/* harmony import */ var _simulation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./simulation */ "./node_modules/d3-force/src/simulation.js"); - - - - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() { - var nodes, - node, - alpha, - strength = (0,_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(-30), - strengths, - distanceMin2 = 1, - distanceMax2 = Infinity, - theta2 = 0.81; - - function force(_) { - var i, n = nodes.length, tree = (0,d3_quadtree__WEBPACK_IMPORTED_MODULE_3__["default"])(nodes, _simulation__WEBPACK_IMPORTED_MODULE_2__.x, _simulation__WEBPACK_IMPORTED_MODULE_2__.y).visitAfter(accumulate); - for (alpha = _, i = 0; i < n; ++i) node = nodes[i], tree.visit(apply); - } - - function initialize() { - if (!nodes) return; - var i, n = nodes.length, node; - strengths = new Array(n); - for (i = 0; i < n; ++i) node = nodes[i], strengths[node.index] = +strength(node, i, nodes); - } - - function accumulate(quad) { - var strength = 0, q, c, weight = 0, x, y, i; - - // For internal nodes, accumulate forces from child quadrants. - if (quad.length) { - for (x = y = i = 0; i < 4; ++i) { - if ((q = quad[i]) && (c = Math.abs(q.value))) { - strength += q.value, weight += c, x += c * q.x, y += c * q.y; - } - } - quad.x = x / weight; - quad.y = y / weight; - } - - // For leaf nodes, accumulate forces from coincident quadrants. - else { - q = quad; - q.x = q.data.x; - q.y = q.data.y; - do strength += strengths[q.data.index]; - while (q = q.next); - } - - quad.value = strength; - } - - function apply(quad, x1, _, x2) { - if (!quad.value) return true; - - var x = quad.x - node.x, - y = quad.y - node.y, - w = x2 - x1, - l = x * x + y * y; - - // Apply the Barnes-Hut approximation if possible. - // Limit forces for very close nodes; randomize direction if coincident. - if (w * w / theta2 < l) { - if (l < distanceMax2) { - if (x === 0) x = (0,_jiggle__WEBPACK_IMPORTED_MODULE_1__["default"])(), l += x * x; - if (y === 0) y = (0,_jiggle__WEBPACK_IMPORTED_MODULE_1__["default"])(), l += y * y; - if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l); - node.vx += x * quad.value * alpha / l; - node.vy += y * quad.value * alpha / l; - } - return true; - } - - // Otherwise, process points directly. - else if (quad.length || l >= distanceMax2) return; - - // Limit forces for very close nodes; randomize direction if coincident. - if (quad.data !== node || quad.next) { - if (x === 0) x = (0,_jiggle__WEBPACK_IMPORTED_MODULE_1__["default"])(), l += x * x; - if (y === 0) y = (0,_jiggle__WEBPACK_IMPORTED_MODULE_1__["default"])(), l += y * y; - if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l); - } - - do if (quad.data !== node) { - w = strengths[quad.data.index] * alpha / l; - node.vx += x * w; - node.vy += y * w; - } while (quad = quad.next); - } - - force.initialize = function(_) { - nodes = _; - initialize(); - }; - - force.strength = function(_) { - return arguments.length ? (strength = typeof _ === "function" ? _ : (0,_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(+_), initialize(), force) : strength; - }; - - force.distanceMin = function(_) { - return arguments.length ? (distanceMin2 = _ * _, force) : Math.sqrt(distanceMin2); - }; - - force.distanceMax = function(_) { - return arguments.length ? (distanceMax2 = _ * _, force) : Math.sqrt(distanceMax2); - }; - - force.theta = function(_) { - return arguments.length ? (theta2 = _ * _, force) : Math.sqrt(theta2); - }; - - return force; -} - - -/***/ }), - -/***/ "./node_modules/d3-force/src/radial.js": -/*!*********************************************!*\ - !*** ./node_modules/d3-force/src/radial.js ***! - \*********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./constant */ "./node_modules/d3-force/src/constant.js"); - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(radius, x, y) { - var nodes, - strength = (0,_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(0.1), - strengths, - radiuses; - - if (typeof radius !== "function") radius = (0,_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(+radius); - if (x == null) x = 0; - if (y == null) y = 0; - - function force(alpha) { - for (var i = 0, n = nodes.length; i < n; ++i) { - var node = nodes[i], - dx = node.x - x || 1e-6, - dy = node.y - y || 1e-6, - r = Math.sqrt(dx * dx + dy * dy), - k = (radiuses[i] - r) * strengths[i] * alpha / r; - node.vx += dx * k; - node.vy += dy * k; - } - } - - function initialize() { - if (!nodes) return; - var i, n = nodes.length; - strengths = new Array(n); - radiuses = new Array(n); - for (i = 0; i < n; ++i) { - radiuses[i] = +radius(nodes[i], i, nodes); - strengths[i] = isNaN(radiuses[i]) ? 0 : +strength(nodes[i], i, nodes); - } - } - - force.initialize = function(_) { - nodes = _, initialize(); - }; - - force.strength = function(_) { - return arguments.length ? (strength = typeof _ === "function" ? _ : (0,_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(+_), initialize(), force) : strength; - }; - - force.radius = function(_) { - return arguments.length ? (radius = typeof _ === "function" ? _ : (0,_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(+_), initialize(), force) : radius; - }; - - force.x = function(_) { - return arguments.length ? (x = +_, force) : x; - }; - - force.y = function(_) { - return arguments.length ? (y = +_, force) : y; - }; - - return force; -} - - -/***/ }), - -/***/ "./node_modules/d3-force/src/simulation.js": -/*!*************************************************!*\ - !*** ./node_modules/d3-force/src/simulation.js ***! - \*************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "x": () => (/* binding */ x), -/* harmony export */ "y": () => (/* binding */ y) -/* harmony export */ }); -/* harmony import */ var d3_dispatch__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-dispatch */ "./node_modules/d3-dispatch/src/dispatch.js"); -/* harmony import */ var d3_collection__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-collection */ "./node_modules/d3-collection/src/index.js"); -/* harmony import */ var d3_timer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-timer */ "./node_modules/d3-timer/src/timer.js"); - - - - -function x(d) { - return d.x; -} - -function y(d) { - return d.y; -} - -var initialRadius = 10, - initialAngle = Math.PI * (3 - Math.sqrt(5)); - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(nodes) { - var simulation, - alpha = 1, - alphaMin = 0.001, - alphaDecay = 1 - Math.pow(alphaMin, 1 / 300), - alphaTarget = 0, - velocityDecay = 0.6, - forces = (0,d3_collection__WEBPACK_IMPORTED_MODULE_0__.map)(), - stepper = (0,d3_timer__WEBPACK_IMPORTED_MODULE_1__.timer)(step), - event = (0,d3_dispatch__WEBPACK_IMPORTED_MODULE_2__["default"])("tick", "end"); - - if (nodes == null) nodes = []; - - function step() { - tick(); - event.call("tick", simulation); - if (alpha < alphaMin) { - stepper.stop(); - event.call("end", simulation); - } - } - - function tick(iterations) { - var i, n = nodes.length, node; - - if (iterations === undefined) iterations = 1; - - for (var k = 0; k < iterations; ++k) { - alpha += (alphaTarget - alpha) * alphaDecay; - - forces.each(function (force) { - force(alpha); - }); - - for (i = 0; i < n; ++i) { - node = nodes[i]; - if (node.fx == null) node.x += node.vx *= velocityDecay; - else node.x = node.fx, node.vx = 0; - if (node.fy == null) node.y += node.vy *= velocityDecay; - else node.y = node.fy, node.vy = 0; - } - } - - return simulation; - } - - function initializeNodes() { - for (var i = 0, n = nodes.length, node; i < n; ++i) { - node = nodes[i], node.index = i; - if (node.fx != null) node.x = node.fx; - if (node.fy != null) node.y = node.fy; - if (isNaN(node.x) || isNaN(node.y)) { - var radius = initialRadius * Math.sqrt(i), angle = i * initialAngle; - node.x = radius * Math.cos(angle); - node.y = radius * Math.sin(angle); - } - if (isNaN(node.vx) || isNaN(node.vy)) { - node.vx = node.vy = 0; - } - } - } - - function initializeForce(force) { - if (force.initialize) force.initialize(nodes); - return force; - } - - initializeNodes(); - - return simulation = { - tick: tick, - - restart: function() { - return stepper.restart(step), simulation; - }, - - stop: function() { - return stepper.stop(), simulation; - }, - - nodes: function(_) { - return arguments.length ? (nodes = _, initializeNodes(), forces.each(initializeForce), simulation) : nodes; - }, - - alpha: function(_) { - return arguments.length ? (alpha = +_, simulation) : alpha; - }, - - alphaMin: function(_) { - return arguments.length ? (alphaMin = +_, simulation) : alphaMin; - }, - - alphaDecay: function(_) { - return arguments.length ? (alphaDecay = +_, simulation) : +alphaDecay; - }, - - alphaTarget: function(_) { - return arguments.length ? (alphaTarget = +_, simulation) : alphaTarget; - }, - - velocityDecay: function(_) { - return arguments.length ? (velocityDecay = 1 - _, simulation) : 1 - velocityDecay; - }, - - force: function(name, _) { - return arguments.length > 1 ? ((_ == null ? forces.remove(name) : forces.set(name, initializeForce(_))), simulation) : forces.get(name); - }, - - find: function(x, y, radius) { - var i = 0, - n = nodes.length, - dx, - dy, - d2, - node, - closest; - - if (radius == null) radius = Infinity; - else radius *= radius; - - for (i = 0; i < n; ++i) { - node = nodes[i]; - dx = x - node.x; - dy = y - node.y; - d2 = dx * dx + dy * dy; - if (d2 < radius) closest = node, radius = d2; - } - - return closest; - }, - - on: function(name, _) { - return arguments.length > 1 ? (event.on(name, _), simulation) : event.on(name); - } - }; -} - - -/***/ }), - -/***/ "./node_modules/d3-force/src/x.js": -/*!****************************************!*\ - !*** ./node_modules/d3-force/src/x.js ***! - \****************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./constant */ "./node_modules/d3-force/src/constant.js"); - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(x) { - var strength = (0,_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(0.1), - nodes, - strengths, - xz; - - if (typeof x !== "function") x = (0,_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(x == null ? 0 : +x); - - function force(alpha) { - for (var i = 0, n = nodes.length, node; i < n; ++i) { - node = nodes[i], node.vx += (xz[i] - node.x) * strengths[i] * alpha; - } - } - - function initialize() { - if (!nodes) return; - var i, n = nodes.length; - strengths = new Array(n); - xz = new Array(n); - for (i = 0; i < n; ++i) { - strengths[i] = isNaN(xz[i] = +x(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes); - } - } - - force.initialize = function(_) { - nodes = _; - initialize(); - }; - - force.strength = function(_) { - return arguments.length ? (strength = typeof _ === "function" ? _ : (0,_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(+_), initialize(), force) : strength; - }; - - force.x = function(_) { - return arguments.length ? (x = typeof _ === "function" ? _ : (0,_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(+_), initialize(), force) : x; - }; - - return force; -} - - -/***/ }), - -/***/ "./node_modules/d3-force/src/y.js": -/*!****************************************!*\ - !*** ./node_modules/d3-force/src/y.js ***! - \****************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./constant */ "./node_modules/d3-force/src/constant.js"); - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(y) { - var strength = (0,_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(0.1), - nodes, - strengths, - yz; - - if (typeof y !== "function") y = (0,_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(y == null ? 0 : +y); - - function force(alpha) { - for (var i = 0, n = nodes.length, node; i < n; ++i) { - node = nodes[i], node.vy += (yz[i] - node.y) * strengths[i] * alpha; - } - } - - function initialize() { - if (!nodes) return; - var i, n = nodes.length; - strengths = new Array(n); - yz = new Array(n); - for (i = 0; i < n; ++i) { - strengths[i] = isNaN(yz[i] = +y(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes); - } - } - - force.initialize = function(_) { - nodes = _; - initialize(); - }; - - force.strength = function(_) { - return arguments.length ? (strength = typeof _ === "function" ? _ : (0,_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(+_), initialize(), force) : strength; - }; - - force.y = function(_) { - return arguments.length ? (y = typeof _ === "function" ? _ : (0,_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(+_), initialize(), force) : y; - }; - - return force; -} - - -/***/ }), - -/***/ "./node_modules/d3-format/src/defaultLocale.js": -/*!*****************************************************!*\ - !*** ./node_modules/d3-format/src/defaultLocale.js ***! - \*****************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ defaultLocale), -/* harmony export */ "format": () => (/* binding */ format), -/* harmony export */ "formatPrefix": () => (/* binding */ formatPrefix) -/* harmony export */ }); -/* harmony import */ var _locale_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./locale.js */ "./node_modules/d3-format/src/locale.js"); - - -var locale; -var format; -var formatPrefix; - -defaultLocale({ - decimal: ".", - thousands: ",", - grouping: [3], - currency: ["$", ""], - minus: "-" -}); - -function defaultLocale(definition) { - locale = (0,_locale_js__WEBPACK_IMPORTED_MODULE_0__["default"])(definition); - format = locale.format; - formatPrefix = locale.formatPrefix; - return locale; -} - - -/***/ }), - -/***/ "./node_modules/d3-format/src/exponent.js": -/*!************************************************!*\ - !*** ./node_modules/d3-format/src/exponent.js ***! - \************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _formatDecimal_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./formatDecimal.js */ "./node_modules/d3-format/src/formatDecimal.js"); - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(x) { - return x = (0,_formatDecimal_js__WEBPACK_IMPORTED_MODULE_0__.formatDecimalParts)(Math.abs(x)), x ? x[1] : NaN; -} - - -/***/ }), - -/***/ "./node_modules/d3-format/src/formatDecimal.js": -/*!*****************************************************!*\ - !*** ./node_modules/d3-format/src/formatDecimal.js ***! - \*****************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "formatDecimalParts": () => (/* binding */ formatDecimalParts) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(x) { - return Math.abs(x = Math.round(x)) >= 1e21 - ? x.toLocaleString("en").replace(/,/g, "") - : x.toString(10); -} - -// Computes the decimal coefficient and exponent of the specified number x with -// significant digits p, where x is positive and p is in [1, 21] or undefined. -// For example, formatDecimalParts(1.23) returns ["123", 0]. -function formatDecimalParts(x, p) { - if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf("e")) < 0) return null; // NaN, ±Infinity - var i, coefficient = x.slice(0, i); - - // The string returned by toExponential either has the form \d\.\d+e[-+]\d+ - // (e.g., 1.2e+3) or the form \de[-+]\d+ (e.g., 1e+3). - return [ - coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient, - +x.slice(i + 1) - ]; -} - - -/***/ }), - -/***/ "./node_modules/d3-format/src/formatGroup.js": -/*!***************************************************!*\ - !*** ./node_modules/d3-format/src/formatGroup.js ***! - \***************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(grouping, thousands) { - return function(value, width) { - var i = value.length, - t = [], - j = 0, - g = grouping[0], - length = 0; - - while (i > 0 && g > 0) { - if (length + g + 1 > width) g = Math.max(1, width - length); - t.push(value.substring(i -= g, i + g)); - if ((length += g + 1) > width) break; - g = grouping[j = (j + 1) % grouping.length]; - } - - return t.reverse().join(thousands); - }; -} - - -/***/ }), - -/***/ "./node_modules/d3-format/src/formatNumerals.js": -/*!******************************************************!*\ - !*** ./node_modules/d3-format/src/formatNumerals.js ***! - \******************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(numerals) { - return function(value) { - return value.replace(/[0-9]/g, function(i) { - return numerals[+i]; - }); - }; -} - - -/***/ }), - -/***/ "./node_modules/d3-format/src/formatPrefixAuto.js": -/*!********************************************************!*\ - !*** ./node_modules/d3-format/src/formatPrefixAuto.js ***! - \********************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "prefixExponent": () => (/* binding */ prefixExponent) -/* harmony export */ }); -/* harmony import */ var _formatDecimal_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./formatDecimal.js */ "./node_modules/d3-format/src/formatDecimal.js"); - - -var prefixExponent; - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(x, p) { - var d = (0,_formatDecimal_js__WEBPACK_IMPORTED_MODULE_0__.formatDecimalParts)(x, p); - if (!d) return x + ""; - var coefficient = d[0], - exponent = d[1], - i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1, - n = coefficient.length; - return i === n ? coefficient - : i > n ? coefficient + new Array(i - n + 1).join("0") - : i > 0 ? coefficient.slice(0, i) + "." + coefficient.slice(i) - : "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! -} - - -/***/ }), - -/***/ "./node_modules/d3-format/src/formatRounded.js": -/*!*****************************************************!*\ - !*** ./node_modules/d3-format/src/formatRounded.js ***! - \*****************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _formatDecimal_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./formatDecimal.js */ "./node_modules/d3-format/src/formatDecimal.js"); - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(x, p) { - var d = (0,_formatDecimal_js__WEBPACK_IMPORTED_MODULE_0__.formatDecimalParts)(x, p); - if (!d) return x + ""; - var coefficient = d[0], - exponent = d[1]; - return exponent < 0 ? "0." + new Array(-exponent).join("0") + coefficient - : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + "." + coefficient.slice(exponent + 1) - : coefficient + new Array(exponent - coefficient.length + 2).join("0"); -} - - -/***/ }), - -/***/ "./node_modules/d3-format/src/formatSpecifier.js": -/*!*******************************************************!*\ - !*** ./node_modules/d3-format/src/formatSpecifier.js ***! - \*******************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "FormatSpecifier": () => (/* binding */ FormatSpecifier), -/* harmony export */ "default": () => (/* binding */ formatSpecifier) -/* harmony export */ }); -// [[fill]align][sign][symbol][0][width][,][.precision][~][type] -var re = /^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i; - -function formatSpecifier(specifier) { - if (!(match = re.exec(specifier))) throw new Error("invalid format: " + specifier); - var match; - return new FormatSpecifier({ - fill: match[1], - align: match[2], - sign: match[3], - symbol: match[4], - zero: match[5], - width: match[6], - comma: match[7], - precision: match[8] && match[8].slice(1), - trim: match[9], - type: match[10] - }); -} - -formatSpecifier.prototype = FormatSpecifier.prototype; // instanceof - -function FormatSpecifier(specifier) { - this.fill = specifier.fill === undefined ? " " : specifier.fill + ""; - this.align = specifier.align === undefined ? ">" : specifier.align + ""; - this.sign = specifier.sign === undefined ? "-" : specifier.sign + ""; - this.symbol = specifier.symbol === undefined ? "" : specifier.symbol + ""; - this.zero = !!specifier.zero; - this.width = specifier.width === undefined ? undefined : +specifier.width; - this.comma = !!specifier.comma; - this.precision = specifier.precision === undefined ? undefined : +specifier.precision; - this.trim = !!specifier.trim; - this.type = specifier.type === undefined ? "" : specifier.type + ""; -} - -FormatSpecifier.prototype.toString = function() { - return this.fill - + this.align - + this.sign - + this.symbol - + (this.zero ? "0" : "") - + (this.width === undefined ? "" : Math.max(1, this.width | 0)) - + (this.comma ? "," : "") - + (this.precision === undefined ? "" : "." + Math.max(0, this.precision | 0)) - + (this.trim ? "~" : "") - + this.type; -}; - - -/***/ }), - -/***/ "./node_modules/d3-format/src/formatTrim.js": -/*!**************************************************!*\ - !*** ./node_modules/d3-format/src/formatTrim.js ***! - \**************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k. -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(s) { - out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) { - switch (s[i]) { - case ".": i0 = i1 = i; break; - case "0": if (i0 === 0) i0 = i; i1 = i; break; - default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break; - } - } - return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s; -} - - -/***/ }), - -/***/ "./node_modules/d3-format/src/formatTypes.js": -/*!***************************************************!*\ - !*** ./node_modules/d3-format/src/formatTypes.js ***! - \***************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _formatDecimal_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./formatDecimal.js */ "./node_modules/d3-format/src/formatDecimal.js"); -/* harmony import */ var _formatPrefixAuto_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./formatPrefixAuto.js */ "./node_modules/d3-format/src/formatPrefixAuto.js"); -/* harmony import */ var _formatRounded_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./formatRounded.js */ "./node_modules/d3-format/src/formatRounded.js"); - - - - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ - "%": function(x, p) { return (x * 100).toFixed(p); }, - "b": function(x) { return Math.round(x).toString(2); }, - "c": function(x) { return x + ""; }, - "d": _formatDecimal_js__WEBPACK_IMPORTED_MODULE_0__["default"], - "e": function(x, p) { return x.toExponential(p); }, - "f": function(x, p) { return x.toFixed(p); }, - "g": function(x, p) { return x.toPrecision(p); }, - "o": function(x) { return Math.round(x).toString(8); }, - "p": function(x, p) { return (0,_formatRounded_js__WEBPACK_IMPORTED_MODULE_1__["default"])(x * 100, p); }, - "r": _formatRounded_js__WEBPACK_IMPORTED_MODULE_1__["default"], - "s": _formatPrefixAuto_js__WEBPACK_IMPORTED_MODULE_2__["default"], - "X": function(x) { return Math.round(x).toString(16).toUpperCase(); }, - "x": function(x) { return Math.round(x).toString(16); } -}); - - -/***/ }), - -/***/ "./node_modules/d3-format/src/identity.js": -/*!************************************************!*\ - !*** ./node_modules/d3-format/src/identity.js ***! - \************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(x) { - return x; -} - - -/***/ }), - -/***/ "./node_modules/d3-format/src/index.js": -/*!*********************************************!*\ - !*** ./node_modules/d3-format/src/index.js ***! - \*********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "FormatSpecifier": () => (/* reexport safe */ _formatSpecifier_js__WEBPACK_IMPORTED_MODULE_2__.FormatSpecifier), -/* harmony export */ "format": () => (/* reexport safe */ _defaultLocale_js__WEBPACK_IMPORTED_MODULE_0__.format), -/* harmony export */ "formatDefaultLocale": () => (/* reexport safe */ _defaultLocale_js__WEBPACK_IMPORTED_MODULE_0__["default"]), -/* harmony export */ "formatLocale": () => (/* reexport safe */ _locale_js__WEBPACK_IMPORTED_MODULE_1__["default"]), -/* harmony export */ "formatPrefix": () => (/* reexport safe */ _defaultLocale_js__WEBPACK_IMPORTED_MODULE_0__.formatPrefix), -/* harmony export */ "formatSpecifier": () => (/* reexport safe */ _formatSpecifier_js__WEBPACK_IMPORTED_MODULE_2__["default"]), -/* harmony export */ "precisionFixed": () => (/* reexport safe */ _precisionFixed_js__WEBPACK_IMPORTED_MODULE_3__["default"]), -/* harmony export */ "precisionPrefix": () => (/* reexport safe */ _precisionPrefix_js__WEBPACK_IMPORTED_MODULE_4__["default"]), -/* harmony export */ "precisionRound": () => (/* reexport safe */ _precisionRound_js__WEBPACK_IMPORTED_MODULE_5__["default"]) -/* harmony export */ }); -/* harmony import */ var _defaultLocale_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./defaultLocale.js */ "./node_modules/d3-format/src/defaultLocale.js"); -/* harmony import */ var _locale_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./locale.js */ "./node_modules/d3-format/src/locale.js"); -/* harmony import */ var _formatSpecifier_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./formatSpecifier.js */ "./node_modules/d3-format/src/formatSpecifier.js"); -/* harmony import */ var _precisionFixed_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./precisionFixed.js */ "./node_modules/d3-format/src/precisionFixed.js"); -/* harmony import */ var _precisionPrefix_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./precisionPrefix.js */ "./node_modules/d3-format/src/precisionPrefix.js"); -/* harmony import */ var _precisionRound_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./precisionRound.js */ "./node_modules/d3-format/src/precisionRound.js"); - - - - - - - - -/***/ }), - -/***/ "./node_modules/d3-format/src/locale.js": -/*!**********************************************!*\ - !*** ./node_modules/d3-format/src/locale.js ***! - \**********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _exponent_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./exponent.js */ "./node_modules/d3-format/src/exponent.js"); -/* harmony import */ var _formatGroup_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./formatGroup.js */ "./node_modules/d3-format/src/formatGroup.js"); -/* harmony import */ var _formatNumerals_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./formatNumerals.js */ "./node_modules/d3-format/src/formatNumerals.js"); -/* harmony import */ var _formatSpecifier_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./formatSpecifier.js */ "./node_modules/d3-format/src/formatSpecifier.js"); -/* harmony import */ var _formatTrim_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./formatTrim.js */ "./node_modules/d3-format/src/formatTrim.js"); -/* harmony import */ var _formatTypes_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./formatTypes.js */ "./node_modules/d3-format/src/formatTypes.js"); -/* harmony import */ var _formatPrefixAuto_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./formatPrefixAuto.js */ "./node_modules/d3-format/src/formatPrefixAuto.js"); -/* harmony import */ var _identity_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./identity.js */ "./node_modules/d3-format/src/identity.js"); - - - - - - - - - -var map = Array.prototype.map, - prefixes = ["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"]; - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(locale) { - 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 + ""), - currencyPrefix = locale.currency === undefined ? "" : locale.currency[0] + "", - currencySuffix = locale.currency === undefined ? "" : locale.currency[1] + "", - decimal = locale.decimal === undefined ? "." : locale.decimal + "", - numerals = locale.numerals === undefined ? _identity_js__WEBPACK_IMPORTED_MODULE_0__["default"] : (0,_formatNumerals_js__WEBPACK_IMPORTED_MODULE_2__["default"])(map.call(locale.numerals, String)), - percent = locale.percent === undefined ? "%" : locale.percent + "", - minus = locale.minus === undefined ? "-" : locale.minus + "", - nan = locale.nan === undefined ? "NaN" : locale.nan + ""; - - function newFormat(specifier) { - specifier = (0,_formatSpecifier_js__WEBPACK_IMPORTED_MODULE_3__["default"])(specifier); - - var fill = specifier.fill, - align = specifier.align, - sign = specifier.sign, - symbol = specifier.symbol, - zero = specifier.zero, - width = specifier.width, - comma = specifier.comma, - precision = specifier.precision, - trim = specifier.trim, - type = specifier.type; - - // The "n" type is an alias for ",g". - if (type === "n") comma = true, type = "g"; - - // The "" type, and any invalid type, is an alias for ".12~g". - else if (!_formatTypes_js__WEBPACK_IMPORTED_MODULE_4__["default"][type]) precision === undefined && (precision = 12), trim = true, type = "g"; - - // If zero fill is specified, padding goes after sign and before digits. - if (zero || (fill === "0" && align === "=")) zero = true, fill = "0", align = "="; - - // Compute the prefix and suffix. - // For SI-prefix, the suffix is lazily computed. - var prefix = symbol === "$" ? currencyPrefix : symbol === "#" && /[boxX]/.test(type) ? "0" + type.toLowerCase() : "", - suffix = symbol === "$" ? currencySuffix : /[%p]/.test(type) ? percent : ""; - - // What format function should we use? - // Is this an integer type? - // Can this type generate exponential notation? - var formatType = _formatTypes_js__WEBPACK_IMPORTED_MODULE_4__["default"][type], - maybeSuffix = /[defgprs%]/.test(type); - - // Set the default precision if not specified, - // or clamp the specified precision to the supported range. - // For significant precision, it must be in [1, 21]. - // For fixed precision, it must be in [0, 20]. - precision = precision === undefined ? 6 - : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision)) - : Math.max(0, Math.min(20, precision)); - - function format(value) { - var valuePrefix = prefix, - valueSuffix = suffix, - i, n, c; - - if (type === "c") { - valueSuffix = formatType(value) + valueSuffix; - value = ""; - } else { - value = +value; - - // Determine the sign. -0 is not less than 0, but 1 / -0 is! - var valueNegative = value < 0 || 1 / value < 0; - - // Perform the initial formatting. - value = isNaN(value) ? nan : formatType(Math.abs(value), precision); - - // Trim insignificant zeros. - if (trim) value = (0,_formatTrim_js__WEBPACK_IMPORTED_MODULE_5__["default"])(value); - - // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign. - if (valueNegative && +value === 0 && sign !== "+") valueNegative = false; - - // Compute the prefix and suffix. - valuePrefix = (valueNegative ? (sign === "(" ? sign : minus) : sign === "-" || sign === "(" ? "" : sign) + valuePrefix; - valueSuffix = (type === "s" ? prefixes[8 + _formatPrefixAuto_js__WEBPACK_IMPORTED_MODULE_6__.prefixExponent / 3] : "") + valueSuffix + (valueNegative && sign === "(" ? ")" : ""); - - // Break the formatted value into the integer “value” part that can be - // grouped, and fractional or exponential “suffix” part that is not. - if (maybeSuffix) { - i = -1, n = value.length; - while (++i < n) { - if (c = value.charCodeAt(i), 48 > c || c > 57) { - valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix; - value = value.slice(0, i); - break; - } - } - } - } - - // If the fill character is not "0", grouping is applied before padding. - if (comma && !zero) value = group(value, Infinity); - - // Compute the padding. - var length = valuePrefix.length + value.length + valueSuffix.length, - padding = length < width ? new Array(width - length + 1).join(fill) : ""; - - // If the fill character is "0", grouping is applied after padding. - if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = ""; - - // Reconstruct the final output based on the desired alignment. - switch (align) { - case "<": value = valuePrefix + value + valueSuffix + padding; break; - case "=": value = valuePrefix + padding + value + valueSuffix; break; - case "^": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break; - default: value = padding + valuePrefix + value + valueSuffix; break; - } - - return numerals(value); - } - - format.toString = function() { - return specifier + ""; - }; - - return format; - } - - function formatPrefix(specifier, value) { - var f = newFormat((specifier = (0,_formatSpecifier_js__WEBPACK_IMPORTED_MODULE_3__["default"])(specifier), specifier.type = "f", specifier)), - e = Math.max(-8, Math.min(8, Math.floor((0,_exponent_js__WEBPACK_IMPORTED_MODULE_7__["default"])(value) / 3))) * 3, - k = Math.pow(10, -e), - prefix = prefixes[8 + e / 3]; - return function(value) { - return f(k * value) + prefix; - }; - } - - return { - format: newFormat, - formatPrefix: formatPrefix - }; -} - - -/***/ }), - -/***/ "./node_modules/d3-format/src/precisionFixed.js": -/*!******************************************************!*\ - !*** ./node_modules/d3-format/src/precisionFixed.js ***! - \******************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _exponent_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./exponent.js */ "./node_modules/d3-format/src/exponent.js"); - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(step) { - return Math.max(0, -(0,_exponent_js__WEBPACK_IMPORTED_MODULE_0__["default"])(Math.abs(step))); -} - - -/***/ }), - -/***/ "./node_modules/d3-format/src/precisionPrefix.js": -/*!*******************************************************!*\ - !*** ./node_modules/d3-format/src/precisionPrefix.js ***! - \*******************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _exponent_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./exponent.js */ "./node_modules/d3-format/src/exponent.js"); - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(step, value) { - 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))); -} - - -/***/ }), - -/***/ "./node_modules/d3-format/src/precisionRound.js": -/*!******************************************************!*\ - !*** ./node_modules/d3-format/src/precisionRound.js ***! - \******************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _exponent_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./exponent.js */ "./node_modules/d3-format/src/exponent.js"); - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(step, max) { - step = Math.abs(step), max = Math.abs(max) - step; - return Math.max(0, (0,_exponent_js__WEBPACK_IMPORTED_MODULE_0__["default"])(max) - (0,_exponent_js__WEBPACK_IMPORTED_MODULE_0__["default"])(step)) + 1; -} - - -/***/ }), - -/***/ "./node_modules/d3-geo/src/adder.js": -/*!******************************************!*\ - !*** ./node_modules/d3-geo/src/adder.js ***! - \******************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -// Adds floating point numbers with twice the normal precision. -// Reference: J. R. Shewchuk, Adaptive Precision Floating-Point Arithmetic and -// Fast Robust Geometric Predicates, Discrete & Computational Geometry 18(3) -// 305–363 (1997). -// Code adapted from GeographicLib by Charles F. F. Karney, -// http://geographiclib.sourceforge.net/ - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() { - return new Adder; -} - -function Adder() { - this.reset(); -} - -Adder.prototype = { - constructor: Adder, - reset: function() { - this.s = // rounded value - this.t = 0; // exact error - }, - add: function(y) { - add(temp, y, this.t); - add(this, temp.s, this.s); - if (this.s) this.t += temp.t; - else this.s = temp.t; - }, - valueOf: function() { - return this.s; - } -}; - -var temp = new Adder; - -function add(adder, a, b) { - var x = adder.s = a + b, - bv = x - a, - av = x - bv; - adder.t = (a - av) + (b - bv); -} - - -/***/ }), - -/***/ "./node_modules/d3-geo/src/area.js": -/*!*****************************************!*\ - !*** ./node_modules/d3-geo/src/area.js ***! - \*****************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "areaRingSum": () => (/* binding */ areaRingSum), -/* harmony export */ "areaStream": () => (/* binding */ areaStream), -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _adder_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./adder.js */ "./node_modules/d3-geo/src/adder.js"); -/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./math.js */ "./node_modules/d3-geo/src/math.js"); -/* harmony import */ var _noop_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./noop.js */ "./node_modules/d3-geo/src/noop.js"); -/* harmony import */ var _stream_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stream.js */ "./node_modules/d3-geo/src/stream.js"); - - - - - -var areaRingSum = (0,_adder_js__WEBPACK_IMPORTED_MODULE_0__["default"])(); - -var areaSum = (0,_adder_js__WEBPACK_IMPORTED_MODULE_0__["default"])(), - lambda00, - phi00, - lambda0, - cosPhi0, - sinPhi0; - -var areaStream = { - point: _noop_js__WEBPACK_IMPORTED_MODULE_1__["default"], - lineStart: _noop_js__WEBPACK_IMPORTED_MODULE_1__["default"], - lineEnd: _noop_js__WEBPACK_IMPORTED_MODULE_1__["default"], - polygonStart: function() { - areaRingSum.reset(); - areaStream.lineStart = areaRingStart; - areaStream.lineEnd = areaRingEnd; - }, - polygonEnd: function() { - var areaRing = +areaRingSum; - areaSum.add(areaRing < 0 ? _math_js__WEBPACK_IMPORTED_MODULE_2__.tau + areaRing : areaRing); - this.lineStart = this.lineEnd = this.point = _noop_js__WEBPACK_IMPORTED_MODULE_1__["default"]; - }, - sphere: function() { - areaSum.add(_math_js__WEBPACK_IMPORTED_MODULE_2__.tau); - } -}; - -function areaRingStart() { - areaStream.point = areaPointFirst; -} - -function areaRingEnd() { - areaPoint(lambda00, phi00); -} - -function areaPointFirst(lambda, phi) { - areaStream.point = areaPoint; - lambda00 = lambda, phi00 = phi; - lambda *= _math_js__WEBPACK_IMPORTED_MODULE_2__.radians, phi *= _math_js__WEBPACK_IMPORTED_MODULE_2__.radians; - 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); -} - -function areaPoint(lambda, phi) { - lambda *= _math_js__WEBPACK_IMPORTED_MODULE_2__.radians, phi *= _math_js__WEBPACK_IMPORTED_MODULE_2__.radians; - phi = phi / 2 + _math_js__WEBPACK_IMPORTED_MODULE_2__.quarterPi; // half the angular distance from south pole - - // Spherical excess E for a spherical triangle with vertices: south pole, - // previous point, current point. Uses a formula derived from Cagnoli’s - // theorem. See Todhunter, Spherical Trig. (1871), Sec. 103, Eq. (2). - var dLambda = lambda - lambda0, - sdLambda = dLambda >= 0 ? 1 : -1, - adLambda = sdLambda * dLambda, - cosPhi = (0,_math_js__WEBPACK_IMPORTED_MODULE_2__.cos)(phi), - sinPhi = (0,_math_js__WEBPACK_IMPORTED_MODULE_2__.sin)(phi), - k = sinPhi0 * sinPhi, - u = cosPhi0 * cosPhi + k * (0,_math_js__WEBPACK_IMPORTED_MODULE_2__.cos)(adLambda), - v = k * sdLambda * (0,_math_js__WEBPACK_IMPORTED_MODULE_2__.sin)(adLambda); - areaRingSum.add((0,_math_js__WEBPACK_IMPORTED_MODULE_2__.atan2)(v, u)); - - // Advance the previous points. - lambda0 = lambda, cosPhi0 = cosPhi, sinPhi0 = sinPhi; -} - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(object) { - areaSum.reset(); - (0,_stream_js__WEBPACK_IMPORTED_MODULE_3__["default"])(object, areaStream); - return areaSum * 2; -} - - -/***/ }), - -/***/ "./node_modules/d3-geo/src/bounds.js": -/*!*******************************************!*\ - !*** ./node_modules/d3-geo/src/bounds.js ***! - \*******************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _adder_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./adder.js */ "./node_modules/d3-geo/src/adder.js"); -/* harmony import */ var _area_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./area.js */ "./node_modules/d3-geo/src/area.js"); -/* harmony import */ var _cartesian_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./cartesian.js */ "./node_modules/d3-geo/src/cartesian.js"); -/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./math.js */ "./node_modules/d3-geo/src/math.js"); -/* harmony import */ var _stream_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./stream.js */ "./node_modules/d3-geo/src/stream.js"); - - - - - - -var lambda0, phi0, lambda1, phi1, // bounds - lambda2, // previous lambda-coordinate - lambda00, phi00, // first point - p0, // previous 3D point - deltaSum = (0,_adder_js__WEBPACK_IMPORTED_MODULE_0__["default"])(), - ranges, - range; - -var boundsStream = { - point: boundsPoint, - lineStart: boundsLineStart, - lineEnd: boundsLineEnd, - polygonStart: function() { - boundsStream.point = boundsRingPoint; - boundsStream.lineStart = boundsRingStart; - boundsStream.lineEnd = boundsRingEnd; - deltaSum.reset(); - _area_js__WEBPACK_IMPORTED_MODULE_1__.areaStream.polygonStart(); - }, - polygonEnd: function() { - _area_js__WEBPACK_IMPORTED_MODULE_1__.areaStream.polygonEnd(); - boundsStream.point = boundsPoint; - boundsStream.lineStart = boundsLineStart; - boundsStream.lineEnd = boundsLineEnd; - if (_area_js__WEBPACK_IMPORTED_MODULE_1__.areaRingSum < 0) lambda0 = -(lambda1 = 180), phi0 = -(phi1 = 90); - else if (deltaSum > _math_js__WEBPACK_IMPORTED_MODULE_2__.epsilon) phi1 = 90; - else if (deltaSum < -_math_js__WEBPACK_IMPORTED_MODULE_2__.epsilon) phi0 = -90; - range[0] = lambda0, range[1] = lambda1; - }, - sphere: function() { - lambda0 = -(lambda1 = 180), phi0 = -(phi1 = 90); - } -}; - -function boundsPoint(lambda, phi) { - ranges.push(range = [lambda0 = lambda, lambda1 = lambda]); - if (phi < phi0) phi0 = phi; - if (phi > phi1) phi1 = phi; -} - -function linePoint(lambda, phi) { - 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]); - if (p0) { - var normal = (0,_cartesian_js__WEBPACK_IMPORTED_MODULE_3__.cartesianCross)(p0, p), - equatorial = [normal[1], -normal[0], 0], - inflection = (0,_cartesian_js__WEBPACK_IMPORTED_MODULE_3__.cartesianCross)(equatorial, normal); - (0,_cartesian_js__WEBPACK_IMPORTED_MODULE_3__.cartesianNormalizeInPlace)(inflection); - inflection = (0,_cartesian_js__WEBPACK_IMPORTED_MODULE_3__.spherical)(inflection); - var delta = lambda - lambda2, - sign = delta > 0 ? 1 : -1, - lambdai = inflection[0] * _math_js__WEBPACK_IMPORTED_MODULE_2__.degrees * sign, - phii, - antimeridian = (0,_math_js__WEBPACK_IMPORTED_MODULE_2__.abs)(delta) > 180; - if (antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) { - phii = inflection[1] * _math_js__WEBPACK_IMPORTED_MODULE_2__.degrees; - if (phii > phi1) phi1 = phii; - } else if (lambdai = (lambdai + 360) % 360 - 180, antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) { - phii = -inflection[1] * _math_js__WEBPACK_IMPORTED_MODULE_2__.degrees; - if (phii < phi0) phi0 = phii; - } else { - if (phi < phi0) phi0 = phi; - if (phi > phi1) phi1 = phi; - } - if (antimeridian) { - if (lambda < lambda2) { - if (angle(lambda0, lambda) > angle(lambda0, lambda1)) lambda1 = lambda; - } else { - if (angle(lambda, lambda1) > angle(lambda0, lambda1)) lambda0 = lambda; - } - } else { - if (lambda1 >= lambda0) { - if (lambda < lambda0) lambda0 = lambda; - if (lambda > lambda1) lambda1 = lambda; - } else { - if (lambda > lambda2) { - if (angle(lambda0, lambda) > angle(lambda0, lambda1)) lambda1 = lambda; - } else { - if (angle(lambda, lambda1) > angle(lambda0, lambda1)) lambda0 = lambda; - } - } - } - } else { - ranges.push(range = [lambda0 = lambda, lambda1 = lambda]); - } - if (phi < phi0) phi0 = phi; - if (phi > phi1) phi1 = phi; - p0 = p, lambda2 = lambda; -} - -function boundsLineStart() { - boundsStream.point = linePoint; -} - -function boundsLineEnd() { - range[0] = lambda0, range[1] = lambda1; - boundsStream.point = boundsPoint; - p0 = null; -} - -function boundsRingPoint(lambda, phi) { - if (p0) { - var delta = lambda - lambda2; - deltaSum.add((0,_math_js__WEBPACK_IMPORTED_MODULE_2__.abs)(delta) > 180 ? delta + (delta > 0 ? 360 : -360) : delta); - } else { - lambda00 = lambda, phi00 = phi; - } - _area_js__WEBPACK_IMPORTED_MODULE_1__.areaStream.point(lambda, phi); - linePoint(lambda, phi); -} - -function boundsRingStart() { - _area_js__WEBPACK_IMPORTED_MODULE_1__.areaStream.lineStart(); -} - -function boundsRingEnd() { - boundsRingPoint(lambda00, phi00); - _area_js__WEBPACK_IMPORTED_MODULE_1__.areaStream.lineEnd(); - if ((0,_math_js__WEBPACK_IMPORTED_MODULE_2__.abs)(deltaSum) > _math_js__WEBPACK_IMPORTED_MODULE_2__.epsilon) lambda0 = -(lambda1 = 180); - range[0] = lambda0, range[1] = lambda1; - p0 = null; -} - -// Finds the left-right distance between two longitudes. -// This is almost the same as (lambda1 - lambda0 + 360°) % 360°, except that we want -// the distance between ±180° to be 360°. -function angle(lambda0, lambda1) { - return (lambda1 -= lambda0) < 0 ? lambda1 + 360 : lambda1; -} - -function rangeCompare(a, b) { - return a[0] - b[0]; -} - -function rangeContains(range, x) { - return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x; -} - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(feature) { - var i, n, a, b, merged, deltaMax, delta; - - phi1 = lambda1 = -(lambda0 = phi0 = Infinity); - ranges = []; - (0,_stream_js__WEBPACK_IMPORTED_MODULE_4__["default"])(feature, boundsStream); - - // First, sort ranges by their minimum longitudes. - if (n = ranges.length) { - ranges.sort(rangeCompare); - - // Then, merge any ranges that overlap. - for (i = 1, a = ranges[0], merged = [a]; i < n; ++i) { - b = ranges[i]; - if (rangeContains(a, b[0]) || rangeContains(a, b[1])) { - if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1]; - if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0]; - } else { - merged.push(a = b); - } - } - - // Finally, find the largest gap between the merged ranges. - // The final bounding box will be the inverse of this gap. - for (deltaMax = -Infinity, n = merged.length - 1, i = 0, a = merged[n]; i <= n; a = b, ++i) { - b = merged[i]; - if ((delta = angle(a[1], b[0])) > deltaMax) deltaMax = delta, lambda0 = b[0], lambda1 = a[1]; - } - } - - ranges = range = null; - - return lambda0 === Infinity || phi0 === Infinity - ? [[NaN, NaN], [NaN, NaN]] - : [[lambda0, phi0], [lambda1, phi1]]; -} - - -/***/ }), - -/***/ "./node_modules/d3-geo/src/cartesian.js": -/*!**********************************************!*\ - !*** ./node_modules/d3-geo/src/cartesian.js ***! - \**********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "cartesian": () => (/* binding */ cartesian), -/* harmony export */ "cartesianAddInPlace": () => (/* binding */ cartesianAddInPlace), -/* harmony export */ "cartesianCross": () => (/* binding */ cartesianCross), -/* harmony export */ "cartesianDot": () => (/* binding */ cartesianDot), -/* harmony export */ "cartesianNormalizeInPlace": () => (/* binding */ cartesianNormalizeInPlace), -/* harmony export */ "cartesianScale": () => (/* binding */ cartesianScale), -/* harmony export */ "spherical": () => (/* binding */ spherical) -/* harmony export */ }); -/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./math.js */ "./node_modules/d3-geo/src/math.js"); - - -function spherical(cartesian) { - return [(0,_math_js__WEBPACK_IMPORTED_MODULE_0__.atan2)(cartesian[1], cartesian[0]), (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.asin)(cartesian[2])]; -} - -function cartesian(spherical) { - var lambda = spherical[0], phi = spherical[1], cosPhi = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(phi); - 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)]; -} - -function cartesianDot(a, b) { - return a[0] * b[0] + a[1] * b[1] + a[2] * b[2]; -} - -function cartesianCross(a, b) { - 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]]; -} - -// TODO return a -function cartesianAddInPlace(a, b) { - a[0] += b[0], a[1] += b[1], a[2] += b[2]; -} - -function cartesianScale(vector, k) { - return [vector[0] * k, vector[1] * k, vector[2] * k]; -} - -// TODO return d -function cartesianNormalizeInPlace(d) { - var l = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sqrt)(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]); - d[0] /= l, d[1] /= l, d[2] /= l; -} - - -/***/ }), - -/***/ "./node_modules/d3-geo/src/centroid.js": -/*!*********************************************!*\ - !*** ./node_modules/d3-geo/src/centroid.js ***! - \*********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./math.js */ "./node_modules/d3-geo/src/math.js"); -/* harmony import */ var _noop_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./noop.js */ "./node_modules/d3-geo/src/noop.js"); -/* harmony import */ var _stream_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stream.js */ "./node_modules/d3-geo/src/stream.js"); - - - - -var W0, W1, - X0, Y0, Z0, - X1, Y1, Z1, - X2, Y2, Z2, - lambda00, phi00, // first point - x0, y0, z0; // previous point - -var centroidStream = { - sphere: _noop_js__WEBPACK_IMPORTED_MODULE_0__["default"], - point: centroidPoint, - lineStart: centroidLineStart, - lineEnd: centroidLineEnd, - polygonStart: function() { - centroidStream.lineStart = centroidRingStart; - centroidStream.lineEnd = centroidRingEnd; - }, - polygonEnd: function() { - centroidStream.lineStart = centroidLineStart; - centroidStream.lineEnd = centroidLineEnd; - } -}; - -// Arithmetic mean of Cartesian vectors. -function centroidPoint(lambda, phi) { - lambda *= _math_js__WEBPACK_IMPORTED_MODULE_1__.radians, phi *= _math_js__WEBPACK_IMPORTED_MODULE_1__.radians; - var cosPhi = (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.cos)(phi); - 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)); -} - -function centroidPointCartesian(x, y, z) { - ++W0; - X0 += (x - X0) / W0; - Y0 += (y - Y0) / W0; - Z0 += (z - Z0) / W0; -} - -function centroidLineStart() { - centroidStream.point = centroidLinePointFirst; -} - -function centroidLinePointFirst(lambda, phi) { - lambda *= _math_js__WEBPACK_IMPORTED_MODULE_1__.radians, phi *= _math_js__WEBPACK_IMPORTED_MODULE_1__.radians; - var cosPhi = (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.cos)(phi); - x0 = cosPhi * (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.cos)(lambda); - y0 = cosPhi * (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.sin)(lambda); - z0 = (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.sin)(phi); - centroidStream.point = centroidLinePoint; - centroidPointCartesian(x0, y0, z0); -} - -function centroidLinePoint(lambda, phi) { - lambda *= _math_js__WEBPACK_IMPORTED_MODULE_1__.radians, phi *= _math_js__WEBPACK_IMPORTED_MODULE_1__.radians; - var cosPhi = (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.cos)(phi), - x = cosPhi * (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.cos)(lambda), - y = cosPhi * (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.sin)(lambda), - z = (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.sin)(phi), - 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); - W1 += w; - X1 += w * (x0 + (x0 = x)); - Y1 += w * (y0 + (y0 = y)); - Z1 += w * (z0 + (z0 = z)); - centroidPointCartesian(x0, y0, z0); -} - -function centroidLineEnd() { - centroidStream.point = centroidPoint; -} - -// See J. E. Brock, The Inertia Tensor for a Spherical Triangle, -// J. Applied Mechanics 42, 239 (1975). -function centroidRingStart() { - centroidStream.point = centroidRingPointFirst; -} - -function centroidRingEnd() { - centroidRingPoint(lambda00, phi00); - centroidStream.point = centroidPoint; -} - -function centroidRingPointFirst(lambda, phi) { - lambda00 = lambda, phi00 = phi; - lambda *= _math_js__WEBPACK_IMPORTED_MODULE_1__.radians, phi *= _math_js__WEBPACK_IMPORTED_MODULE_1__.radians; - centroidStream.point = centroidRingPoint; - var cosPhi = (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.cos)(phi); - x0 = cosPhi * (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.cos)(lambda); - y0 = cosPhi * (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.sin)(lambda); - z0 = (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.sin)(phi); - centroidPointCartesian(x0, y0, z0); -} - -function centroidRingPoint(lambda, phi) { - lambda *= _math_js__WEBPACK_IMPORTED_MODULE_1__.radians, phi *= _math_js__WEBPACK_IMPORTED_MODULE_1__.radians; - var cosPhi = (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.cos)(phi), - x = cosPhi * (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.cos)(lambda), - y = cosPhi * (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.sin)(lambda), - z = (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.sin)(phi), - cx = y0 * z - z0 * y, - cy = z0 * x - x0 * z, - cz = x0 * y - y0 * x, - m = (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.sqrt)(cx * cx + cy * cy + cz * cz), - w = (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.asin)(m), // line weight = angle - v = m && -w / m; // area weight multiplier - X2 += v * cx; - Y2 += v * cy; - Z2 += v * cz; - W1 += w; - X1 += w * (x0 + (x0 = x)); - Y1 += w * (y0 + (y0 = y)); - Z1 += w * (z0 + (z0 = z)); - centroidPointCartesian(x0, y0, z0); -} - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(object) { - W0 = W1 = - X0 = Y0 = Z0 = - X1 = Y1 = Z1 = - X2 = Y2 = Z2 = 0; - (0,_stream_js__WEBPACK_IMPORTED_MODULE_2__["default"])(object, centroidStream); - - var x = X2, - y = Y2, - z = Z2, - m = x * x + y * y + z * z; - - // If the area-weighted ccentroid is undefined, fall back to length-weighted ccentroid. - if (m < _math_js__WEBPACK_IMPORTED_MODULE_1__.epsilon2) { - x = X1, y = Y1, z = Z1; - // If the feature has zero length, fall back to arithmetic mean of point vectors. - if (W1 < _math_js__WEBPACK_IMPORTED_MODULE_1__.epsilon) x = X0, y = Y0, z = Z0; - m = x * x + y * y + z * z; - // If the feature still has an undefined ccentroid, then return. - if (m < _math_js__WEBPACK_IMPORTED_MODULE_1__.epsilon2) return [NaN, NaN]; - } - - 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 / (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.sqrt)(m)) * _math_js__WEBPACK_IMPORTED_MODULE_1__.degrees]; -} - - -/***/ }), - -/***/ "./node_modules/d3-geo/src/circle.js": -/*!*******************************************!*\ - !*** ./node_modules/d3-geo/src/circle.js ***! - \*******************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "circleStream": () => (/* binding */ circleStream), -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _cartesian_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./cartesian.js */ "./node_modules/d3-geo/src/cartesian.js"); -/* harmony import */ var _constant_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./constant.js */ "./node_modules/d3-geo/src/constant.js"); -/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./math.js */ "./node_modules/d3-geo/src/math.js"); -/* harmony import */ var _rotation_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./rotation.js */ "./node_modules/d3-geo/src/rotation.js"); - - - - - -// Generates a circle centered at [0°, 0°], with a given radius and precision. -function circleStream(stream, radius, delta, direction, t0, t1) { - if (!delta) return; - var cosRadius = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(radius), - sinRadius = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(radius), - step = direction * delta; - if (t0 == null) { - t0 = radius + direction * _math_js__WEBPACK_IMPORTED_MODULE_0__.tau; - t1 = radius - step / 2; - } else { - t0 = circleRadius(cosRadius, t0); - t1 = circleRadius(cosRadius, t1); - if (direction > 0 ? t0 < t1 : t0 > t1) t0 += direction * _math_js__WEBPACK_IMPORTED_MODULE_0__.tau; - } - for (var point, t = t0; direction > 0 ? t > t1 : t < t1; t -= step) { - 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)]); - stream.point(point[0], point[1]); - } -} - -// Returns the signed angle of a cartesian point relative to [cosRadius, 0, 0]. -function circleRadius(cosRadius, point) { - point = (0,_cartesian_js__WEBPACK_IMPORTED_MODULE_1__.cartesian)(point), point[0] -= cosRadius; - (0,_cartesian_js__WEBPACK_IMPORTED_MODULE_1__.cartesianNormalizeInPlace)(point); - var radius = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.acos)(-point[1]); - 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; -} - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() { - var center = (0,_constant_js__WEBPACK_IMPORTED_MODULE_2__["default"])([0, 0]), - radius = (0,_constant_js__WEBPACK_IMPORTED_MODULE_2__["default"])(90), - precision = (0,_constant_js__WEBPACK_IMPORTED_MODULE_2__["default"])(6), - ring, - rotate, - stream = {point: point}; - - function point(x, y) { - ring.push(x = rotate(x, y)); - x[0] *= _math_js__WEBPACK_IMPORTED_MODULE_0__.degrees, x[1] *= _math_js__WEBPACK_IMPORTED_MODULE_0__.degrees; - } - - function circle() { - var c = center.apply(this, arguments), - r = radius.apply(this, arguments) * _math_js__WEBPACK_IMPORTED_MODULE_0__.radians, - p = precision.apply(this, arguments) * _math_js__WEBPACK_IMPORTED_MODULE_0__.radians; - ring = []; - 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; - circleStream(stream, r, p, 1); - c = {type: "Polygon", coordinates: [ring]}; - ring = rotate = null; - return c; - } - - circle.center = function(_) { - return arguments.length ? (center = typeof _ === "function" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_2__["default"])([+_[0], +_[1]]), circle) : center; - }; - - circle.radius = function(_) { - return arguments.length ? (radius = typeof _ === "function" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_2__["default"])(+_), circle) : radius; - }; - - circle.precision = function(_) { - return arguments.length ? (precision = typeof _ === "function" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_2__["default"])(+_), circle) : precision; - }; - - return circle; -} - - -/***/ }), - -/***/ "./node_modules/d3-geo/src/clip/antimeridian.js": -/*!******************************************************!*\ - !*** ./node_modules/d3-geo/src/clip/antimeridian.js ***! - \******************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index.js */ "./node_modules/d3-geo/src/clip/index.js"); -/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../math.js */ "./node_modules/d3-geo/src/math.js"); - - - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_index_js__WEBPACK_IMPORTED_MODULE_0__["default"])( - function() { return true; }, - clipAntimeridianLine, - clipAntimeridianInterpolate, - [-_math_js__WEBPACK_IMPORTED_MODULE_1__.pi, -_math_js__WEBPACK_IMPORTED_MODULE_1__.halfPi] -)); - -// Takes a line and cuts into visible segments. Return values: 0 - there were -// intersections or the line was empty; 1 - no intersections; 2 - there were -// intersections, and the first and last segments should be rejoined. -function clipAntimeridianLine(stream) { - var lambda0 = NaN, - phi0 = NaN, - sign0 = NaN, - clean; // no intersections - - return { - lineStart: function() { - stream.lineStart(); - clean = 1; - }, - point: function(lambda1, phi1) { - var sign1 = lambda1 > 0 ? _math_js__WEBPACK_IMPORTED_MODULE_1__.pi : -_math_js__WEBPACK_IMPORTED_MODULE_1__.pi, - delta = (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.abs)(lambda1 - lambda0); - 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 - stream.point(lambda0, phi0 = (phi0 + phi1) / 2 > 0 ? _math_js__WEBPACK_IMPORTED_MODULE_1__.halfPi : -_math_js__WEBPACK_IMPORTED_MODULE_1__.halfPi); - stream.point(sign0, phi0); - stream.lineEnd(); - stream.lineStart(); - stream.point(sign1, phi0); - stream.point(lambda1, phi0); - clean = 0; - } else if (sign0 !== sign1 && delta >= _math_js__WEBPACK_IMPORTED_MODULE_1__.pi) { // line crosses antimeridian - 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 - 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; - phi0 = clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1); - stream.point(sign0, phi0); - stream.lineEnd(); - stream.lineStart(); - stream.point(sign1, phi0); - clean = 0; - } - stream.point(lambda0 = lambda1, phi0 = phi1); - sign0 = sign1; - }, - lineEnd: function() { - stream.lineEnd(); - lambda0 = phi0 = NaN; - }, - clean: function() { - return 2 - clean; // if intersections, rejoin first and last segments - } - }; -} - -function clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1) { - var cosPhi0, - cosPhi1, - sinLambda0Lambda1 = (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.sin)(lambda0 - lambda1); - return (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.abs)(sinLambda0Lambda1) > _math_js__WEBPACK_IMPORTED_MODULE_1__.epsilon - ? (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) - - (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)) - / (cosPhi0 * cosPhi1 * sinLambda0Lambda1)) - : (phi0 + phi1) / 2; -} - -function clipAntimeridianInterpolate(from, to, direction, stream) { - var phi; - if (from == null) { - phi = direction * _math_js__WEBPACK_IMPORTED_MODULE_1__.halfPi; - stream.point(-_math_js__WEBPACK_IMPORTED_MODULE_1__.pi, phi); - stream.point(0, phi); - stream.point(_math_js__WEBPACK_IMPORTED_MODULE_1__.pi, phi); - stream.point(_math_js__WEBPACK_IMPORTED_MODULE_1__.pi, 0); - stream.point(_math_js__WEBPACK_IMPORTED_MODULE_1__.pi, -phi); - stream.point(0, -phi); - stream.point(-_math_js__WEBPACK_IMPORTED_MODULE_1__.pi, -phi); - stream.point(-_math_js__WEBPACK_IMPORTED_MODULE_1__.pi, 0); - stream.point(-_math_js__WEBPACK_IMPORTED_MODULE_1__.pi, phi); - } else if ((0,_math_js__WEBPACK_IMPORTED_MODULE_1__.abs)(from[0] - to[0]) > _math_js__WEBPACK_IMPORTED_MODULE_1__.epsilon) { - var lambda = from[0] < to[0] ? _math_js__WEBPACK_IMPORTED_MODULE_1__.pi : -_math_js__WEBPACK_IMPORTED_MODULE_1__.pi; - phi = direction * lambda / 2; - stream.point(-lambda, phi); - stream.point(0, phi); - stream.point(lambda, phi); - } else { - stream.point(to[0], to[1]); - } -} - - -/***/ }), - -/***/ "./node_modules/d3-geo/src/clip/buffer.js": -/*!************************************************!*\ - !*** ./node_modules/d3-geo/src/clip/buffer.js ***! - \************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _noop_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../noop.js */ "./node_modules/d3-geo/src/noop.js"); - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() { - var lines = [], - line; - return { - point: function(x, y, m) { - line.push([x, y, m]); - }, - lineStart: function() { - lines.push(line = []); - }, - lineEnd: _noop_js__WEBPACK_IMPORTED_MODULE_0__["default"], - rejoin: function() { - if (lines.length > 1) lines.push(lines.pop().concat(lines.shift())); - }, - result: function() { - var result = lines; - lines = []; - line = null; - return result; - } - }; -} - - -/***/ }), - -/***/ "./node_modules/d3-geo/src/clip/circle.js": -/*!************************************************!*\ - !*** ./node_modules/d3-geo/src/clip/circle.js ***! - \************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _cartesian_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../cartesian.js */ "./node_modules/d3-geo/src/cartesian.js"); -/* harmony import */ var _circle_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../circle.js */ "./node_modules/d3-geo/src/circle.js"); -/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math.js */ "./node_modules/d3-geo/src/math.js"); -/* harmony import */ var _pointEqual_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../pointEqual.js */ "./node_modules/d3-geo/src/pointEqual.js"); -/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./index.js */ "./node_modules/d3-geo/src/clip/index.js"); - - - - - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(radius) { - var cr = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(radius), - delta = 6 * _math_js__WEBPACK_IMPORTED_MODULE_0__.radians, - smallRadius = cr > 0, - notHemisphere = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.abs)(cr) > _math_js__WEBPACK_IMPORTED_MODULE_0__.epsilon; // TODO optimise for this common case - - function interpolate(from, to, direction, stream) { - (0,_circle_js__WEBPACK_IMPORTED_MODULE_1__.circleStream)(stream, radius, delta, direction, from, to); - } - - function visible(lambda, phi) { - return (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(lambda) * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(phi) > cr; - } - - // Takes a line and cuts into visible segments. Return values used for polygon - // clipping: 0 - there were intersections or the line was empty; 1 - no - // intersections 2 - there were intersections, and the first and last segments - // should be rejoined. - function clipLine(stream) { - var point0, // previous point - c0, // code for previous point - v0, // visibility of previous point - v00, // visibility of first point - clean; // no intersections - return { - lineStart: function() { - v00 = v0 = false; - clean = 1; - }, - point: function(lambda, phi) { - var point1 = [lambda, phi], - point2, - v = visible(lambda, phi), - c = smallRadius - ? v ? 0 : code(lambda, phi) - : v ? code(lambda + (lambda < 0 ? _math_js__WEBPACK_IMPORTED_MODULE_0__.pi : -_math_js__WEBPACK_IMPORTED_MODULE_0__.pi), phi) : 0; - if (!point0 && (v00 = v0 = v)) stream.lineStart(); - if (v !== v0) { - point2 = intersect(point0, point1); - if (!point2 || (0,_pointEqual_js__WEBPACK_IMPORTED_MODULE_2__["default"])(point0, point2) || (0,_pointEqual_js__WEBPACK_IMPORTED_MODULE_2__["default"])(point1, point2)) - point1[2] = 1; - } - if (v !== v0) { - clean = 0; - if (v) { - // outside going in - stream.lineStart(); - point2 = intersect(point1, point0); - stream.point(point2[0], point2[1]); - } else { - // inside going out - point2 = intersect(point0, point1); - stream.point(point2[0], point2[1], 2); - stream.lineEnd(); - } - point0 = point2; - } else if (notHemisphere && point0 && smallRadius ^ v) { - var t; - // If the codes for two points are different, or are both zero, - // and there this segment intersects with the small circle. - if (!(c & c0) && (t = intersect(point1, point0, true))) { - clean = 0; - if (smallRadius) { - stream.lineStart(); - stream.point(t[0][0], t[0][1]); - stream.point(t[1][0], t[1][1]); - stream.lineEnd(); - } else { - stream.point(t[1][0], t[1][1]); - stream.lineEnd(); - stream.lineStart(); - stream.point(t[0][0], t[0][1], 3); - } - } - } - if (v && (!point0 || !(0,_pointEqual_js__WEBPACK_IMPORTED_MODULE_2__["default"])(point0, point1))) { - stream.point(point1[0], point1[1]); - } - point0 = point1, v0 = v, c0 = c; - }, - lineEnd: function() { - if (v0) stream.lineEnd(); - point0 = null; - }, - // Rejoin first and last segments if there were intersections and the first - // and last points were visible. - clean: function() { - return clean | ((v00 && v0) << 1); - } - }; - } - - // Intersects the great circle between a and b with the clip circle. - function intersect(a, b, two) { - var pa = (0,_cartesian_js__WEBPACK_IMPORTED_MODULE_3__.cartesian)(a), - pb = (0,_cartesian_js__WEBPACK_IMPORTED_MODULE_3__.cartesian)(b); - - // We have two planes, n1.p = d1 and n2.p = d2. - // Find intersection line p(t) = c1 n1 + c2 n2 + t (n1 ⨯ n2). - var n1 = [1, 0, 0], // normal - n2 = (0,_cartesian_js__WEBPACK_IMPORTED_MODULE_3__.cartesianCross)(pa, pb), - n2n2 = (0,_cartesian_js__WEBPACK_IMPORTED_MODULE_3__.cartesianDot)(n2, n2), - n1n2 = n2[0], // cartesianDot(n1, n2), - determinant = n2n2 - n1n2 * n1n2; - - // Two polar points. - if (!determinant) return !two && a; - - var c1 = cr * n2n2 / determinant, - c2 = -cr * n1n2 / determinant, - n1xn2 = (0,_cartesian_js__WEBPACK_IMPORTED_MODULE_3__.cartesianCross)(n1, n2), - A = (0,_cartesian_js__WEBPACK_IMPORTED_MODULE_3__.cartesianScale)(n1, c1), - B = (0,_cartesian_js__WEBPACK_IMPORTED_MODULE_3__.cartesianScale)(n2, c2); - (0,_cartesian_js__WEBPACK_IMPORTED_MODULE_3__.cartesianAddInPlace)(A, B); - - // Solve |p(t)|^2 = 1. - var u = n1xn2, - w = (0,_cartesian_js__WEBPACK_IMPORTED_MODULE_3__.cartesianDot)(A, u), - uu = (0,_cartesian_js__WEBPACK_IMPORTED_MODULE_3__.cartesianDot)(u, u), - t2 = w * w - uu * ((0,_cartesian_js__WEBPACK_IMPORTED_MODULE_3__.cartesianDot)(A, A) - 1); - - if (t2 < 0) return; - - var t = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sqrt)(t2), - q = (0,_cartesian_js__WEBPACK_IMPORTED_MODULE_3__.cartesianScale)(u, (-w - t) / uu); - (0,_cartesian_js__WEBPACK_IMPORTED_MODULE_3__.cartesianAddInPlace)(q, A); - q = (0,_cartesian_js__WEBPACK_IMPORTED_MODULE_3__.spherical)(q); - - if (!two) return q; - - // Two intersection points. - var lambda0 = a[0], - lambda1 = b[0], - phi0 = a[1], - phi1 = b[1], - z; - - if (lambda1 < lambda0) z = lambda0, lambda0 = lambda1, lambda1 = z; - - var delta = lambda1 - lambda0, - polar = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.abs)(delta - _math_js__WEBPACK_IMPORTED_MODULE_0__.pi) < _math_js__WEBPACK_IMPORTED_MODULE_0__.epsilon, - meridian = polar || delta < _math_js__WEBPACK_IMPORTED_MODULE_0__.epsilon; - - if (!polar && phi1 < phi0) z = phi0, phi0 = phi1, phi1 = z; - - // Check that the first point is between a and b. - if (meridian - ? polar - ? 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) - : phi0 <= q[1] && q[1] <= phi1 - : delta > _math_js__WEBPACK_IMPORTED_MODULE_0__.pi ^ (lambda0 <= q[0] && q[0] <= lambda1)) { - var q1 = (0,_cartesian_js__WEBPACK_IMPORTED_MODULE_3__.cartesianScale)(u, (-w + t) / uu); - (0,_cartesian_js__WEBPACK_IMPORTED_MODULE_3__.cartesianAddInPlace)(q1, A); - return [q, (0,_cartesian_js__WEBPACK_IMPORTED_MODULE_3__.spherical)(q1)]; - } - } - - // Generates a 4-bit vector representing the location of a point relative to - // the small circle's bounding box. - function code(lambda, phi) { - var r = smallRadius ? radius : _math_js__WEBPACK_IMPORTED_MODULE_0__.pi - radius, - code = 0; - if (lambda < -r) code |= 1; // left - else if (lambda > r) code |= 2; // right - if (phi < -r) code |= 4; // below - else if (phi > r) code |= 8; // above - return code; - } - - 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]); -} - - -/***/ }), - -/***/ "./node_modules/d3-geo/src/clip/extent.js": -/*!************************************************!*\ - !*** ./node_modules/d3-geo/src/clip/extent.js ***! - \************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _rectangle_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./rectangle.js */ "./node_modules/d3-geo/src/clip/rectangle.js"); - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() { - var x0 = 0, - y0 = 0, - x1 = 960, - y1 = 500, - cache, - cacheStream, - clip; - - return clip = { - stream: function(stream) { - return cache && cacheStream === stream ? cache : cache = (0,_rectangle_js__WEBPACK_IMPORTED_MODULE_0__["default"])(x0, y0, x1, y1)(cacheStream = stream); - }, - extent: function(_) { - return arguments.length ? (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1], cache = cacheStream = null, clip) : [[x0, y0], [x1, y1]]; - } - }; -} - - -/***/ }), - -/***/ "./node_modules/d3-geo/src/clip/index.js": -/*!***********************************************!*\ - !*** ./node_modules/d3-geo/src/clip/index.js ***! - \***********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _buffer_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./buffer.js */ "./node_modules/d3-geo/src/clip/buffer.js"); -/* harmony import */ var _rejoin_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./rejoin.js */ "./node_modules/d3-geo/src/clip/rejoin.js"); -/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../math.js */ "./node_modules/d3-geo/src/math.js"); -/* harmony import */ var _polygonContains_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../polygonContains.js */ "./node_modules/d3-geo/src/polygonContains.js"); -/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-array */ "./node_modules/d3-array/src/index.js"); - - - - - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(pointVisible, clipLine, interpolate, start) { - return function(sink) { - var line = clipLine(sink), - ringBuffer = (0,_buffer_js__WEBPACK_IMPORTED_MODULE_1__["default"])(), - ringSink = clipLine(ringBuffer), - polygonStarted = false, - polygon, - segments, - ring; - - var clip = { - point: point, - lineStart: lineStart, - lineEnd: lineEnd, - polygonStart: function() { - clip.point = pointRing; - clip.lineStart = ringStart; - clip.lineEnd = ringEnd; - segments = []; - polygon = []; - }, - polygonEnd: function() { - clip.point = point; - clip.lineStart = lineStart; - clip.lineEnd = lineEnd; - segments = (0,d3_array__WEBPACK_IMPORTED_MODULE_0__.merge)(segments); - var startInside = (0,_polygonContains_js__WEBPACK_IMPORTED_MODULE_2__["default"])(polygon, start); - if (segments.length) { - if (!polygonStarted) sink.polygonStart(), polygonStarted = true; - (0,_rejoin_js__WEBPACK_IMPORTED_MODULE_3__["default"])(segments, compareIntersection, startInside, interpolate, sink); - } else if (startInside) { - if (!polygonStarted) sink.polygonStart(), polygonStarted = true; - sink.lineStart(); - interpolate(null, null, 1, sink); - sink.lineEnd(); - } - if (polygonStarted) sink.polygonEnd(), polygonStarted = false; - segments = polygon = null; - }, - sphere: function() { - sink.polygonStart(); - sink.lineStart(); - interpolate(null, null, 1, sink); - sink.lineEnd(); - sink.polygonEnd(); - } - }; - - function point(lambda, phi) { - if (pointVisible(lambda, phi)) sink.point(lambda, phi); - } - - function pointLine(lambda, phi) { - line.point(lambda, phi); - } - - function lineStart() { - clip.point = pointLine; - line.lineStart(); - } - - function lineEnd() { - clip.point = point; - line.lineEnd(); - } - - function pointRing(lambda, phi) { - ring.push([lambda, phi]); - ringSink.point(lambda, phi); - } - - function ringStart() { - ringSink.lineStart(); - ring = []; - } - - function ringEnd() { - pointRing(ring[0][0], ring[0][1]); - ringSink.lineEnd(); - - var clean = ringSink.clean(), - ringSegments = ringBuffer.result(), - i, n = ringSegments.length, m, - segment, - point; - - ring.pop(); - polygon.push(ring); - ring = null; - - if (!n) return; - - // No intersections. - if (clean & 1) { - segment = ringSegments[0]; - if ((m = segment.length - 1) > 0) { - if (!polygonStarted) sink.polygonStart(), polygonStarted = true; - sink.lineStart(); - for (i = 0; i < m; ++i) sink.point((point = segment[i])[0], point[1]); - sink.lineEnd(); - } - return; - } - - // Rejoin connected segments. - // TODO reuse ringBuffer.rejoin()? - if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift())); - - segments.push(ringSegments.filter(validSegment)); - } - - return clip; - }; -} - -function validSegment(segment) { - return segment.length > 1; -} - -// Intersections are sorted along the clip edge. For both antimeridian cutting -// and circle clipping, the same comparison is used. -function compareIntersection(a, b) { - 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]) - - ((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]); -} - - -/***/ }), - -/***/ "./node_modules/d3-geo/src/clip/line.js": -/*!**********************************************!*\ - !*** ./node_modules/d3-geo/src/clip/line.js ***! - \**********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(a, b, x0, y0, x1, y1) { - var ax = a[0], - ay = a[1], - bx = b[0], - by = b[1], - t0 = 0, - t1 = 1, - dx = bx - ax, - dy = by - ay, - r; - - r = x0 - ax; - if (!dx && r > 0) return; - r /= dx; - if (dx < 0) { - if (r < t0) return; - if (r < t1) t1 = r; - } else if (dx > 0) { - if (r > t1) return; - if (r > t0) t0 = r; - } - - r = x1 - ax; - if (!dx && r < 0) return; - r /= dx; - if (dx < 0) { - if (r > t1) return; - if (r > t0) t0 = r; - } else if (dx > 0) { - if (r < t0) return; - if (r < t1) t1 = r; - } - - r = y0 - ay; - if (!dy && r > 0) return; - r /= dy; - if (dy < 0) { - if (r < t0) return; - if (r < t1) t1 = r; - } else if (dy > 0) { - if (r > t1) return; - if (r > t0) t0 = r; - } - - r = y1 - ay; - if (!dy && r < 0) return; - r /= dy; - if (dy < 0) { - if (r > t1) return; - if (r > t0) t0 = r; - } else if (dy > 0) { - if (r < t0) return; - if (r < t1) t1 = r; - } - - if (t0 > 0) a[0] = ax + t0 * dx, a[1] = ay + t0 * dy; - if (t1 < 1) b[0] = ax + t1 * dx, b[1] = ay + t1 * dy; - return true; -} - - -/***/ }), - -/***/ "./node_modules/d3-geo/src/clip/rectangle.js": -/*!***************************************************!*\ - !*** ./node_modules/d3-geo/src/clip/rectangle.js ***! - \***************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ clipRectangle) -/* harmony export */ }); -/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../math.js */ "./node_modules/d3-geo/src/math.js"); -/* harmony import */ var _buffer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./buffer.js */ "./node_modules/d3-geo/src/clip/buffer.js"); -/* harmony import */ var _line_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./line.js */ "./node_modules/d3-geo/src/clip/line.js"); -/* harmony import */ var _rejoin_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./rejoin.js */ "./node_modules/d3-geo/src/clip/rejoin.js"); -/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-array */ "./node_modules/d3-array/src/index.js"); - - - - - - -var clipMax = 1e9, clipMin = -clipMax; - -// TODO Use d3-polygon’s polygonContains here for the ring check? -// TODO Eliminate duplicate buffering in clipBuffer and polygon.push? - -function clipRectangle(x0, y0, x1, y1) { - - function visible(x, y) { - return x0 <= x && x <= x1 && y0 <= y && y <= y1; - } - - function interpolate(from, to, direction, stream) { - var a = 0, a1 = 0; - if (from == null - || (a = corner(from, direction)) !== (a1 = corner(to, direction)) - || comparePoint(from, to) < 0 ^ direction > 0) { - do stream.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0); - while ((a = (a + direction + 4) % 4) !== a1); - } else { - stream.point(to[0], to[1]); - } - } - - function corner(p, direction) { - return (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.abs)(p[0] - x0) < _math_js__WEBPACK_IMPORTED_MODULE_1__.epsilon ? direction > 0 ? 0 : 3 - : (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.abs)(p[0] - x1) < _math_js__WEBPACK_IMPORTED_MODULE_1__.epsilon ? direction > 0 ? 2 : 1 - : (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.abs)(p[1] - y0) < _math_js__WEBPACK_IMPORTED_MODULE_1__.epsilon ? direction > 0 ? 1 : 0 - : direction > 0 ? 3 : 2; // abs(p[1] - y1) < epsilon - } - - function compareIntersection(a, b) { - return comparePoint(a.x, b.x); - } - - function comparePoint(a, b) { - var ca = corner(a, 1), - cb = corner(b, 1); - return ca !== cb ? ca - cb - : ca === 0 ? b[1] - a[1] - : ca === 1 ? a[0] - b[0] - : ca === 2 ? a[1] - b[1] - : b[0] - a[0]; - } - - return function(stream) { - var activeStream = stream, - bufferStream = (0,_buffer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(), - segments, - polygon, - ring, - x__, y__, v__, // first point - x_, y_, v_, // previous point - first, - clean; - - var clipStream = { - point: point, - lineStart: lineStart, - lineEnd: lineEnd, - polygonStart: polygonStart, - polygonEnd: polygonEnd - }; - - function point(x, y) { - if (visible(x, y)) activeStream.point(x, y); - } - - function polygonInside() { - var winding = 0; - - for (var i = 0, n = polygon.length; i < n; ++i) { - for (var ring = polygon[i], j = 1, m = ring.length, point = ring[0], a0, a1, b0 = point[0], b1 = point[1]; j < m; ++j) { - a0 = b0, a1 = b1, point = ring[j], b0 = point[0], b1 = point[1]; - if (a1 <= y1) { if (b1 > y1 && (b0 - a0) * (y1 - a1) > (b1 - a1) * (x0 - a0)) ++winding; } - else { if (b1 <= y1 && (b0 - a0) * (y1 - a1) < (b1 - a1) * (x0 - a0)) --winding; } - } - } - - return winding; - } - - // Buffer geometry within a polygon and then clip it en masse. - function polygonStart() { - activeStream = bufferStream, segments = [], polygon = [], clean = true; - } - - function polygonEnd() { - var startInside = polygonInside(), - cleanInside = clean && startInside, - visible = (segments = (0,d3_array__WEBPACK_IMPORTED_MODULE_0__.merge)(segments)).length; - if (cleanInside || visible) { - stream.polygonStart(); - if (cleanInside) { - stream.lineStart(); - interpolate(null, null, 1, stream); - stream.lineEnd(); - } - if (visible) { - (0,_rejoin_js__WEBPACK_IMPORTED_MODULE_3__["default"])(segments, compareIntersection, startInside, interpolate, stream); - } - stream.polygonEnd(); - } - activeStream = stream, segments = polygon = ring = null; - } - - function lineStart() { - clipStream.point = linePoint; - if (polygon) polygon.push(ring = []); - first = true; - v_ = false; - x_ = y_ = NaN; - } - - // TODO rather than special-case polygons, simply handle them separately. - // Ideally, coincident intersection points should be jittered to avoid - // clipping issues. - function lineEnd() { - if (segments) { - linePoint(x__, y__); - if (v__ && v_) bufferStream.rejoin(); - segments.push(bufferStream.result()); - } - clipStream.point = point; - if (v_) activeStream.lineEnd(); - } - - function linePoint(x, y) { - var v = visible(x, y); - if (polygon) ring.push([x, y]); - if (first) { - x__ = x, y__ = y, v__ = v; - first = false; - if (v) { - activeStream.lineStart(); - activeStream.point(x, y); - } - } else { - if (v && v_) activeStream.point(x, y); - else { - var a = [x_ = Math.max(clipMin, Math.min(clipMax, x_)), y_ = Math.max(clipMin, Math.min(clipMax, y_))], - b = [x = Math.max(clipMin, Math.min(clipMax, x)), y = Math.max(clipMin, Math.min(clipMax, y))]; - if ((0,_line_js__WEBPACK_IMPORTED_MODULE_4__["default"])(a, b, x0, y0, x1, y1)) { - if (!v_) { - activeStream.lineStart(); - activeStream.point(a[0], a[1]); - } - activeStream.point(b[0], b[1]); - if (!v) activeStream.lineEnd(); - clean = false; - } else if (v) { - activeStream.lineStart(); - activeStream.point(x, y); - clean = false; - } - } - } - x_ = x, y_ = y, v_ = v; - } - - return clipStream; - }; -} - - -/***/ }), - -/***/ "./node_modules/d3-geo/src/clip/rejoin.js": -/*!************************************************!*\ - !*** ./node_modules/d3-geo/src/clip/rejoin.js ***! - \************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _pointEqual_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../pointEqual.js */ "./node_modules/d3-geo/src/pointEqual.js"); -/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../math.js */ "./node_modules/d3-geo/src/math.js"); - - - -function Intersection(point, points, other, entry) { - this.x = point; - this.z = points; - this.o = other; // another intersection - this.e = entry; // is an entry? - this.v = false; // visited - this.n = this.p = null; // next & previous -} - -// A generalized polygon clipping algorithm: given a polygon that has been cut -// into its visible line segments, and rejoins the segments by interpolating -// along the clip edge. -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(segments, compareIntersection, startInside, interpolate, stream) { - var subject = [], - clip = [], - i, - n; - - segments.forEach(function(segment) { - if ((n = segment.length - 1) <= 0) return; - var n, p0 = segment[0], p1 = segment[n], x; - - if ((0,_pointEqual_js__WEBPACK_IMPORTED_MODULE_0__["default"])(p0, p1)) { - if (!p0[2] && !p1[2]) { - stream.lineStart(); - for (i = 0; i < n; ++i) stream.point((p0 = segment[i])[0], p0[1]); - stream.lineEnd(); - return; - } - // handle degenerate cases by moving the point - p1[0] += 2 * _math_js__WEBPACK_IMPORTED_MODULE_1__.epsilon; - } - - subject.push(x = new Intersection(p0, segment, null, true)); - clip.push(x.o = new Intersection(p0, null, x, false)); - subject.push(x = new Intersection(p1, segment, null, false)); - clip.push(x.o = new Intersection(p1, null, x, true)); - }); - - if (!subject.length) return; - - clip.sort(compareIntersection); - link(subject); - link(clip); - - for (i = 0, n = clip.length; i < n; ++i) { - clip[i].e = startInside = !startInside; - } - - var start = subject[0], - points, - point; - - while (1) { - // Find first unvisited intersection. - var current = start, - isSubject = true; - while (current.v) if ((current = current.n) === start) return; - points = current.z; - stream.lineStart(); - do { - current.v = current.o.v = true; - if (current.e) { - if (isSubject) { - for (i = 0, n = points.length; i < n; ++i) stream.point((point = points[i])[0], point[1]); - } else { - interpolate(current.x, current.n.x, 1, stream); - } - current = current.n; - } else { - if (isSubject) { - points = current.p.z; - for (i = points.length - 1; i >= 0; --i) stream.point((point = points[i])[0], point[1]); - } else { - interpolate(current.x, current.p.x, -1, stream); - } - current = current.p; - } - current = current.o; - points = current.z; - isSubject = !isSubject; - } while (!current.v); - stream.lineEnd(); - } -} - -function link(array) { - if (!(n = array.length)) return; - var n, - i = 0, - a = array[0], - b; - while (++i < n) { - a.n = b = array[i]; - b.p = a; - a = b; - } - a.n = b = array[0]; - b.p = a; -} - - -/***/ }), - -/***/ "./node_modules/d3-geo/src/compose.js": -/*!********************************************!*\ - !*** ./node_modules/d3-geo/src/compose.js ***! - \********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(a, b) { - - function compose(x, y) { - return x = a(x, y), b(x[0], x[1]); - } - - if (a.invert && b.invert) compose.invert = function(x, y) { - return x = b.invert(x, y), x && a.invert(x[0], x[1]); - }; - - return compose; -} - - -/***/ }), - -/***/ "./node_modules/d3-geo/src/constant.js": -/*!*********************************************!*\ - !*** ./node_modules/d3-geo/src/constant.js ***! - \*********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(x) { - return function() { - return x; - }; -} - - -/***/ }), - -/***/ "./node_modules/d3-geo/src/contains.js": -/*!*********************************************!*\ - !*** ./node_modules/d3-geo/src/contains.js ***! - \*********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _polygonContains_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./polygonContains.js */ "./node_modules/d3-geo/src/polygonContains.js"); -/* harmony import */ var _distance_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./distance.js */ "./node_modules/d3-geo/src/distance.js"); -/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./math.js */ "./node_modules/d3-geo/src/math.js"); - - - - -var containsObjectType = { - Feature: function(object, point) { - return containsGeometry(object.geometry, point); - }, - FeatureCollection: function(object, point) { - var features = object.features, i = -1, n = features.length; - while (++i < n) if (containsGeometry(features[i].geometry, point)) return true; - return false; - } -}; - -var containsGeometryType = { - Sphere: function() { - return true; - }, - Point: function(object, point) { - return containsPoint(object.coordinates, point); - }, - MultiPoint: function(object, point) { - var coordinates = object.coordinates, i = -1, n = coordinates.length; - while (++i < n) if (containsPoint(coordinates[i], point)) return true; - return false; - }, - LineString: function(object, point) { - return containsLine(object.coordinates, point); - }, - MultiLineString: function(object, point) { - var coordinates = object.coordinates, i = -1, n = coordinates.length; - while (++i < n) if (containsLine(coordinates[i], point)) return true; - return false; - }, - Polygon: function(object, point) { - return containsPolygon(object.coordinates, point); - }, - MultiPolygon: function(object, point) { - var coordinates = object.coordinates, i = -1, n = coordinates.length; - while (++i < n) if (containsPolygon(coordinates[i], point)) return true; - return false; - }, - GeometryCollection: function(object, point) { - var geometries = object.geometries, i = -1, n = geometries.length; - while (++i < n) if (containsGeometry(geometries[i], point)) return true; - return false; - } -}; - -function containsGeometry(geometry, point) { - return geometry && containsGeometryType.hasOwnProperty(geometry.type) - ? containsGeometryType[geometry.type](geometry, point) - : false; -} - -function containsPoint(coordinates, point) { - return (0,_distance_js__WEBPACK_IMPORTED_MODULE_0__["default"])(coordinates, point) === 0; -} - -function containsLine(coordinates, point) { - var ao, bo, ab; - for (var i = 0, n = coordinates.length; i < n; i++) { - bo = (0,_distance_js__WEBPACK_IMPORTED_MODULE_0__["default"])(coordinates[i], point); - if (bo === 0) return true; - if (i > 0) { - ab = (0,_distance_js__WEBPACK_IMPORTED_MODULE_0__["default"])(coordinates[i], coordinates[i - 1]); - if ( - ab > 0 && - ao <= ab && - bo <= ab && - (ao + bo - ab) * (1 - Math.pow((ao - bo) / ab, 2)) < _math_js__WEBPACK_IMPORTED_MODULE_1__.epsilon2 * ab - ) - return true; - } - ao = bo; - } - return false; -} - -function containsPolygon(coordinates, point) { - return !!(0,_polygonContains_js__WEBPACK_IMPORTED_MODULE_2__["default"])(coordinates.map(ringRadians), pointRadians(point)); -} - -function ringRadians(ring) { - return ring = ring.map(pointRadians), ring.pop(), ring; -} - -function pointRadians(point) { - return [point[0] * _math_js__WEBPACK_IMPORTED_MODULE_1__.radians, point[1] * _math_js__WEBPACK_IMPORTED_MODULE_1__.radians]; -} - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(object, point) { - return (object && containsObjectType.hasOwnProperty(object.type) - ? containsObjectType[object.type] - : containsGeometry)(object, point); -} - - -/***/ }), - -/***/ "./node_modules/d3-geo/src/distance.js": -/*!*********************************************!*\ - !*** ./node_modules/d3-geo/src/distance.js ***! - \*********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _length_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./length.js */ "./node_modules/d3-geo/src/length.js"); - - -var coordinates = [null, null], - object = {type: "LineString", coordinates: coordinates}; - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(a, b) { - coordinates[0] = a; - coordinates[1] = b; - return (0,_length_js__WEBPACK_IMPORTED_MODULE_0__["default"])(object); -} - - -/***/ }), - -/***/ "./node_modules/d3-geo/src/graticule.js": -/*!**********************************************!*\ - !*** ./node_modules/d3-geo/src/graticule.js ***! - \**********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ graticule), -/* harmony export */ "graticule10": () => (/* binding */ graticule10) -/* harmony export */ }); -/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-array */ "./node_modules/d3-array/src/index.js"); -/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./math.js */ "./node_modules/d3-geo/src/math.js"); - - - -function graticuleX(y0, y1, dy) { - var y = (0,d3_array__WEBPACK_IMPORTED_MODULE_0__.range)(y0, y1 - _math_js__WEBPACK_IMPORTED_MODULE_1__.epsilon, dy).concat(y1); - return function(x) { return y.map(function(y) { return [x, y]; }); }; -} - -function graticuleY(x0, x1, dx) { - var x = (0,d3_array__WEBPACK_IMPORTED_MODULE_0__.range)(x0, x1 - _math_js__WEBPACK_IMPORTED_MODULE_1__.epsilon, dx).concat(x1); - return function(y) { return x.map(function(x) { return [x, y]; }); }; -} - -function graticule() { - var x1, x0, X1, X0, - y1, y0, Y1, Y0, - dx = 10, dy = dx, DX = 90, DY = 360, - x, y, X, Y, - precision = 2.5; - - function graticule() { - return {type: "MultiLineString", coordinates: lines()}; - } - - function lines() { - return (0,d3_array__WEBPACK_IMPORTED_MODULE_0__.range)((0,_math_js__WEBPACK_IMPORTED_MODULE_1__.ceil)(X0 / DX) * DX, X1, DX).map(X) - .concat((0,d3_array__WEBPACK_IMPORTED_MODULE_0__.range)((0,_math_js__WEBPACK_IMPORTED_MODULE_1__.ceil)(Y0 / DY) * DY, Y1, DY).map(Y)) - .concat((0,d3_array__WEBPACK_IMPORTED_MODULE_0__.range)((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)) - .concat((0,d3_array__WEBPACK_IMPORTED_MODULE_0__.range)((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)); - } - - graticule.lines = function() { - return lines().map(function(coordinates) { return {type: "LineString", coordinates: coordinates}; }); - }; - - graticule.outline = function() { - return { - type: "Polygon", - coordinates: [ - X(X0).concat( - Y(Y1).slice(1), - X(X1).reverse().slice(1), - Y(Y0).reverse().slice(1)) - ] - }; - }; - - graticule.extent = function(_) { - if (!arguments.length) return graticule.extentMinor(); - return graticule.extentMajor(_).extentMinor(_); - }; - - graticule.extentMajor = function(_) { - if (!arguments.length) return [[X0, Y0], [X1, Y1]]; - X0 = +_[0][0], X1 = +_[1][0]; - Y0 = +_[0][1], Y1 = +_[1][1]; - if (X0 > X1) _ = X0, X0 = X1, X1 = _; - if (Y0 > Y1) _ = Y0, Y0 = Y1, Y1 = _; - return graticule.precision(precision); - }; - - graticule.extentMinor = function(_) { - if (!arguments.length) return [[x0, y0], [x1, y1]]; - x0 = +_[0][0], x1 = +_[1][0]; - y0 = +_[0][1], y1 = +_[1][1]; - if (x0 > x1) _ = x0, x0 = x1, x1 = _; - if (y0 > y1) _ = y0, y0 = y1, y1 = _; - return graticule.precision(precision); - }; - - graticule.step = function(_) { - if (!arguments.length) return graticule.stepMinor(); - return graticule.stepMajor(_).stepMinor(_); - }; - - graticule.stepMajor = function(_) { - if (!arguments.length) return [DX, DY]; - DX = +_[0], DY = +_[1]; - return graticule; - }; - - graticule.stepMinor = function(_) { - if (!arguments.length) return [dx, dy]; - dx = +_[0], dy = +_[1]; - return graticule; - }; - - graticule.precision = function(_) { - if (!arguments.length) return precision; - precision = +_; - x = graticuleX(y0, y1, 90); - y = graticuleY(x0, x1, precision); - X = graticuleX(Y0, Y1, 90); - Y = graticuleY(X0, X1, precision); - return graticule; - }; - - return graticule - .extentMajor([[-180, -90 + _math_js__WEBPACK_IMPORTED_MODULE_1__.epsilon], [180, 90 - _math_js__WEBPACK_IMPORTED_MODULE_1__.epsilon]]) - .extentMinor([[-180, -80 - _math_js__WEBPACK_IMPORTED_MODULE_1__.epsilon], [180, 80 + _math_js__WEBPACK_IMPORTED_MODULE_1__.epsilon]]); -} - -function graticule10() { - return graticule()(); -} - - -/***/ }), - -/***/ "./node_modules/d3-geo/src/identity.js": -/*!*********************************************!*\ - !*** ./node_modules/d3-geo/src/identity.js ***! - \*********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(x) { - return x; -} - - -/***/ }), - -/***/ "./node_modules/d3-geo/src/index.js": -/*!******************************************!*\ - !*** ./node_modules/d3-geo/src/index.js ***! - \******************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "geoAlbers": () => (/* reexport safe */ _projection_albers_js__WEBPACK_IMPORTED_MODULE_14__["default"]), -/* harmony export */ "geoAlbersUsa": () => (/* reexport safe */ _projection_albersUsa_js__WEBPACK_IMPORTED_MODULE_15__["default"]), -/* harmony export */ "geoArea": () => (/* reexport safe */ _area_js__WEBPACK_IMPORTED_MODULE_0__["default"]), -/* harmony export */ "geoAzimuthalEqualArea": () => (/* reexport safe */ _projection_azimuthalEqualArea_js__WEBPACK_IMPORTED_MODULE_16__["default"]), -/* harmony export */ "geoAzimuthalEqualAreaRaw": () => (/* reexport safe */ _projection_azimuthalEqualArea_js__WEBPACK_IMPORTED_MODULE_16__.azimuthalEqualAreaRaw), -/* harmony export */ "geoAzimuthalEquidistant": () => (/* reexport safe */ _projection_azimuthalEquidistant_js__WEBPACK_IMPORTED_MODULE_17__["default"]), -/* harmony export */ "geoAzimuthalEquidistantRaw": () => (/* reexport safe */ _projection_azimuthalEquidistant_js__WEBPACK_IMPORTED_MODULE_17__.azimuthalEquidistantRaw), -/* harmony export */ "geoBounds": () => (/* reexport safe */ _bounds_js__WEBPACK_IMPORTED_MODULE_1__["default"]), -/* harmony export */ "geoCentroid": () => (/* reexport safe */ _centroid_js__WEBPACK_IMPORTED_MODULE_2__["default"]), -/* harmony export */ "geoCircle": () => (/* reexport safe */ _circle_js__WEBPACK_IMPORTED_MODULE_3__["default"]), -/* harmony export */ "geoClipAntimeridian": () => (/* reexport safe */ _clip_antimeridian_js__WEBPACK_IMPORTED_MODULE_4__["default"]), -/* harmony export */ "geoClipCircle": () => (/* reexport safe */ _clip_circle_js__WEBPACK_IMPORTED_MODULE_5__["default"]), -/* harmony export */ "geoClipExtent": () => (/* reexport safe */ _clip_extent_js__WEBPACK_IMPORTED_MODULE_6__["default"]), -/* harmony export */ "geoClipRectangle": () => (/* reexport safe */ _clip_rectangle_js__WEBPACK_IMPORTED_MODULE_7__["default"]), -/* harmony export */ "geoConicConformal": () => (/* reexport safe */ _projection_conicConformal_js__WEBPACK_IMPORTED_MODULE_18__["default"]), -/* harmony export */ "geoConicConformalRaw": () => (/* reexport safe */ _projection_conicConformal_js__WEBPACK_IMPORTED_MODULE_18__.conicConformalRaw), -/* harmony export */ "geoConicEqualArea": () => (/* reexport safe */ _projection_conicEqualArea_js__WEBPACK_IMPORTED_MODULE_19__["default"]), -/* harmony export */ "geoConicEqualAreaRaw": () => (/* reexport safe */ _projection_conicEqualArea_js__WEBPACK_IMPORTED_MODULE_19__.conicEqualAreaRaw), -/* harmony export */ "geoConicEquidistant": () => (/* reexport safe */ _projection_conicEquidistant_js__WEBPACK_IMPORTED_MODULE_20__["default"]), -/* harmony export */ "geoConicEquidistantRaw": () => (/* reexport safe */ _projection_conicEquidistant_js__WEBPACK_IMPORTED_MODULE_20__.conicEquidistantRaw), -/* harmony export */ "geoContains": () => (/* reexport safe */ _contains_js__WEBPACK_IMPORTED_MODULE_8__["default"]), -/* harmony export */ "geoDistance": () => (/* reexport safe */ _distance_js__WEBPACK_IMPORTED_MODULE_9__["default"]), -/* harmony export */ "geoEqualEarth": () => (/* reexport safe */ _projection_equalEarth_js__WEBPACK_IMPORTED_MODULE_21__["default"]), -/* harmony export */ "geoEqualEarthRaw": () => (/* reexport safe */ _projection_equalEarth_js__WEBPACK_IMPORTED_MODULE_21__.equalEarthRaw), -/* harmony export */ "geoEquirectangular": () => (/* reexport safe */ _projection_equirectangular_js__WEBPACK_IMPORTED_MODULE_22__["default"]), -/* harmony export */ "geoEquirectangularRaw": () => (/* reexport safe */ _projection_equirectangular_js__WEBPACK_IMPORTED_MODULE_22__.equirectangularRaw), -/* harmony export */ "geoGnomonic": () => (/* reexport safe */ _projection_gnomonic_js__WEBPACK_IMPORTED_MODULE_23__["default"]), -/* harmony export */ "geoGnomonicRaw": () => (/* reexport safe */ _projection_gnomonic_js__WEBPACK_IMPORTED_MODULE_23__.gnomonicRaw), -/* harmony export */ "geoGraticule": () => (/* reexport safe */ _graticule_js__WEBPACK_IMPORTED_MODULE_10__["default"]), -/* harmony export */ "geoGraticule10": () => (/* reexport safe */ _graticule_js__WEBPACK_IMPORTED_MODULE_10__.graticule10), -/* harmony export */ "geoIdentity": () => (/* reexport safe */ _projection_identity_js__WEBPACK_IMPORTED_MODULE_24__["default"]), -/* harmony export */ "geoInterpolate": () => (/* reexport safe */ _interpolate_js__WEBPACK_IMPORTED_MODULE_11__["default"]), -/* harmony export */ "geoLength": () => (/* reexport safe */ _length_js__WEBPACK_IMPORTED_MODULE_12__["default"]), -/* harmony export */ "geoMercator": () => (/* reexport safe */ _projection_mercator_js__WEBPACK_IMPORTED_MODULE_26__["default"]), -/* harmony export */ "geoMercatorRaw": () => (/* reexport safe */ _projection_mercator_js__WEBPACK_IMPORTED_MODULE_26__.mercatorRaw), -/* harmony export */ "geoNaturalEarth1": () => (/* reexport safe */ _projection_naturalEarth1_js__WEBPACK_IMPORTED_MODULE_27__["default"]), -/* harmony export */ "geoNaturalEarth1Raw": () => (/* reexport safe */ _projection_naturalEarth1_js__WEBPACK_IMPORTED_MODULE_27__.naturalEarth1Raw), -/* harmony export */ "geoOrthographic": () => (/* reexport safe */ _projection_orthographic_js__WEBPACK_IMPORTED_MODULE_28__["default"]), -/* harmony export */ "geoOrthographicRaw": () => (/* reexport safe */ _projection_orthographic_js__WEBPACK_IMPORTED_MODULE_28__.orthographicRaw), -/* harmony export */ "geoPath": () => (/* reexport safe */ _path_index_js__WEBPACK_IMPORTED_MODULE_13__["default"]), -/* harmony export */ "geoProjection": () => (/* reexport safe */ _projection_index_js__WEBPACK_IMPORTED_MODULE_25__["default"]), -/* harmony export */ "geoProjectionMutator": () => (/* reexport safe */ _projection_index_js__WEBPACK_IMPORTED_MODULE_25__.projectionMutator), -/* harmony export */ "geoRotation": () => (/* reexport safe */ _rotation_js__WEBPACK_IMPORTED_MODULE_31__["default"]), -/* harmony export */ "geoStereographic": () => (/* reexport safe */ _projection_stereographic_js__WEBPACK_IMPORTED_MODULE_29__["default"]), -/* harmony export */ "geoStereographicRaw": () => (/* reexport safe */ _projection_stereographic_js__WEBPACK_IMPORTED_MODULE_29__.stereographicRaw), -/* harmony export */ "geoStream": () => (/* reexport safe */ _stream_js__WEBPACK_IMPORTED_MODULE_32__["default"]), -/* harmony export */ "geoTransform": () => (/* reexport safe */ _transform_js__WEBPACK_IMPORTED_MODULE_33__["default"]), -/* harmony export */ "geoTransverseMercator": () => (/* reexport safe */ _projection_transverseMercator_js__WEBPACK_IMPORTED_MODULE_30__["default"]), -/* harmony export */ "geoTransverseMercatorRaw": () => (/* reexport safe */ _projection_transverseMercator_js__WEBPACK_IMPORTED_MODULE_30__.transverseMercatorRaw) -/* harmony export */ }); -/* harmony import */ var _area_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./area.js */ "./node_modules/d3-geo/src/area.js"); -/* harmony import */ var _bounds_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./bounds.js */ "./node_modules/d3-geo/src/bounds.js"); -/* harmony import */ var _centroid_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./centroid.js */ "./node_modules/d3-geo/src/centroid.js"); -/* harmony import */ var _circle_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./circle.js */ "./node_modules/d3-geo/src/circle.js"); -/* harmony import */ var _clip_antimeridian_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./clip/antimeridian.js */ "./node_modules/d3-geo/src/clip/antimeridian.js"); -/* harmony import */ var _clip_circle_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./clip/circle.js */ "./node_modules/d3-geo/src/clip/circle.js"); -/* harmony import */ var _clip_extent_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./clip/extent.js */ "./node_modules/d3-geo/src/clip/extent.js"); -/* harmony import */ var _clip_rectangle_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./clip/rectangle.js */ "./node_modules/d3-geo/src/clip/rectangle.js"); -/* harmony import */ var _contains_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./contains.js */ "./node_modules/d3-geo/src/contains.js"); -/* harmony import */ var _distance_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./distance.js */ "./node_modules/d3-geo/src/distance.js"); -/* harmony import */ var _graticule_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./graticule.js */ "./node_modules/d3-geo/src/graticule.js"); -/* harmony import */ var _interpolate_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./interpolate.js */ "./node_modules/d3-geo/src/interpolate.js"); -/* harmony import */ var _length_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./length.js */ "./node_modules/d3-geo/src/length.js"); -/* harmony import */ var _path_index_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./path/index.js */ "./node_modules/d3-geo/src/path/index.js"); -/* harmony import */ var _projection_albers_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./projection/albers.js */ "./node_modules/d3-geo/src/projection/albers.js"); -/* harmony import */ var _projection_albersUsa_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./projection/albersUsa.js */ "./node_modules/d3-geo/src/projection/albersUsa.js"); -/* harmony import */ var _projection_azimuthalEqualArea_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./projection/azimuthalEqualArea.js */ "./node_modules/d3-geo/src/projection/azimuthalEqualArea.js"); -/* harmony import */ var _projection_azimuthalEquidistant_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./projection/azimuthalEquidistant.js */ "./node_modules/d3-geo/src/projection/azimuthalEquidistant.js"); -/* harmony import */ var _projection_conicConformal_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./projection/conicConformal.js */ "./node_modules/d3-geo/src/projection/conicConformal.js"); -/* harmony import */ var _projection_conicEqualArea_js__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./projection/conicEqualArea.js */ "./node_modules/d3-geo/src/projection/conicEqualArea.js"); -/* harmony import */ var _projection_conicEquidistant_js__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./projection/conicEquidistant.js */ "./node_modules/d3-geo/src/projection/conicEquidistant.js"); -/* harmony import */ var _projection_equalEarth_js__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./projection/equalEarth.js */ "./node_modules/d3-geo/src/projection/equalEarth.js"); -/* harmony import */ var _projection_equirectangular_js__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./projection/equirectangular.js */ "./node_modules/d3-geo/src/projection/equirectangular.js"); -/* harmony import */ var _projection_gnomonic_js__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./projection/gnomonic.js */ "./node_modules/d3-geo/src/projection/gnomonic.js"); -/* harmony import */ var _projection_identity_js__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./projection/identity.js */ "./node_modules/d3-geo/src/projection/identity.js"); -/* harmony import */ var _projection_index_js__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./projection/index.js */ "./node_modules/d3-geo/src/projection/index.js"); -/* harmony import */ var _projection_mercator_js__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./projection/mercator.js */ "./node_modules/d3-geo/src/projection/mercator.js"); -/* harmony import */ var _projection_naturalEarth1_js__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./projection/naturalEarth1.js */ "./node_modules/d3-geo/src/projection/naturalEarth1.js"); -/* harmony import */ var _projection_orthographic_js__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./projection/orthographic.js */ "./node_modules/d3-geo/src/projection/orthographic.js"); -/* harmony import */ var _projection_stereographic_js__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./projection/stereographic.js */ "./node_modules/d3-geo/src/projection/stereographic.js"); -/* harmony import */ var _projection_transverseMercator_js__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./projection/transverseMercator.js */ "./node_modules/d3-geo/src/projection/transverseMercator.js"); -/* harmony import */ var _rotation_js__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./rotation.js */ "./node_modules/d3-geo/src/rotation.js"); -/* harmony import */ var _stream_js__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./stream.js */ "./node_modules/d3-geo/src/stream.js"); -/* harmony import */ var _transform_js__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./transform.js */ "./node_modules/d3-geo/src/transform.js"); - - - - - - - // DEPRECATED! Use d3.geoIdentity().clipExtent(…). - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -/***/ }), - -/***/ "./node_modules/d3-geo/src/interpolate.js": -/*!************************************************!*\ - !*** ./node_modules/d3-geo/src/interpolate.js ***! - \************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./math.js */ "./node_modules/d3-geo/src/math.js"); - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(a, b) { - var x0 = a[0] * _math_js__WEBPACK_IMPORTED_MODULE_0__.radians, - y0 = a[1] * _math_js__WEBPACK_IMPORTED_MODULE_0__.radians, - x1 = b[0] * _math_js__WEBPACK_IMPORTED_MODULE_0__.radians, - y1 = b[1] * _math_js__WEBPACK_IMPORTED_MODULE_0__.radians, - cy0 = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(y0), - sy0 = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(y0), - cy1 = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(y1), - sy1 = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(y1), - kx0 = cy0 * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(x0), - ky0 = cy0 * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(x0), - kx1 = cy1 * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(x1), - ky1 = cy1 * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(x1), - 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))), - k = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(d); - - var interpolate = d ? function(t) { - var B = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(t *= d) / k, - A = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(d - t) / k, - x = A * kx0 + B * kx1, - y = A * ky0 + B * ky1, - z = A * sy0 + B * sy1; - return [ - (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.atan2)(y, x) * _math_js__WEBPACK_IMPORTED_MODULE_0__.degrees, - (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 - ]; - } : function() { - return [x0 * _math_js__WEBPACK_IMPORTED_MODULE_0__.degrees, y0 * _math_js__WEBPACK_IMPORTED_MODULE_0__.degrees]; - }; - - interpolate.distance = d; - - return interpolate; -} - - -/***/ }), - -/***/ "./node_modules/d3-geo/src/length.js": -/*!*******************************************!*\ - !*** ./node_modules/d3-geo/src/length.js ***! - \*******************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _adder_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./adder.js */ "./node_modules/d3-geo/src/adder.js"); -/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./math.js */ "./node_modules/d3-geo/src/math.js"); -/* harmony import */ var _noop_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./noop.js */ "./node_modules/d3-geo/src/noop.js"); -/* harmony import */ var _stream_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stream.js */ "./node_modules/d3-geo/src/stream.js"); - - - - - -var lengthSum = (0,_adder_js__WEBPACK_IMPORTED_MODULE_0__["default"])(), - lambda0, - sinPhi0, - cosPhi0; - -var lengthStream = { - sphere: _noop_js__WEBPACK_IMPORTED_MODULE_1__["default"], - point: _noop_js__WEBPACK_IMPORTED_MODULE_1__["default"], - lineStart: lengthLineStart, - lineEnd: _noop_js__WEBPACK_IMPORTED_MODULE_1__["default"], - polygonStart: _noop_js__WEBPACK_IMPORTED_MODULE_1__["default"], - polygonEnd: _noop_js__WEBPACK_IMPORTED_MODULE_1__["default"] -}; - -function lengthLineStart() { - lengthStream.point = lengthPointFirst; - lengthStream.lineEnd = lengthLineEnd; -} - -function lengthLineEnd() { - lengthStream.point = lengthStream.lineEnd = _noop_js__WEBPACK_IMPORTED_MODULE_1__["default"]; -} - -function lengthPointFirst(lambda, phi) { - lambda *= _math_js__WEBPACK_IMPORTED_MODULE_2__.radians, phi *= _math_js__WEBPACK_IMPORTED_MODULE_2__.radians; - lambda0 = lambda, sinPhi0 = (0,_math_js__WEBPACK_IMPORTED_MODULE_2__.sin)(phi), cosPhi0 = (0,_math_js__WEBPACK_IMPORTED_MODULE_2__.cos)(phi); - lengthStream.point = lengthPoint; -} - -function lengthPoint(lambda, phi) { - lambda *= _math_js__WEBPACK_IMPORTED_MODULE_2__.radians, phi *= _math_js__WEBPACK_IMPORTED_MODULE_2__.radians; - var sinPhi = (0,_math_js__WEBPACK_IMPORTED_MODULE_2__.sin)(phi), - cosPhi = (0,_math_js__WEBPACK_IMPORTED_MODULE_2__.cos)(phi), - delta = (0,_math_js__WEBPACK_IMPORTED_MODULE_2__.abs)(lambda - lambda0), - cosDelta = (0,_math_js__WEBPACK_IMPORTED_MODULE_2__.cos)(delta), - sinDelta = (0,_math_js__WEBPACK_IMPORTED_MODULE_2__.sin)(delta), - x = cosPhi * sinDelta, - y = cosPhi0 * sinPhi - sinPhi0 * cosPhi * cosDelta, - z = sinPhi0 * sinPhi + cosPhi0 * cosPhi * cosDelta; - lengthSum.add((0,_math_js__WEBPACK_IMPORTED_MODULE_2__.atan2)((0,_math_js__WEBPACK_IMPORTED_MODULE_2__.sqrt)(x * x + y * y), z)); - lambda0 = lambda, sinPhi0 = sinPhi, cosPhi0 = cosPhi; -} - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(object) { - lengthSum.reset(); - (0,_stream_js__WEBPACK_IMPORTED_MODULE_3__["default"])(object, lengthStream); - return +lengthSum; -} - - -/***/ }), - -/***/ "./node_modules/d3-geo/src/math.js": -/*!*****************************************!*\ - !*** ./node_modules/d3-geo/src/math.js ***! - \*****************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "abs": () => (/* binding */ abs), -/* harmony export */ "acos": () => (/* binding */ acos), -/* harmony export */ "asin": () => (/* binding */ asin), -/* harmony export */ "atan": () => (/* binding */ atan), -/* harmony export */ "atan2": () => (/* binding */ atan2), -/* harmony export */ "ceil": () => (/* binding */ ceil), -/* harmony export */ "cos": () => (/* binding */ cos), -/* harmony export */ "degrees": () => (/* binding */ degrees), -/* harmony export */ "epsilon": () => (/* binding */ epsilon), -/* harmony export */ "epsilon2": () => (/* binding */ epsilon2), -/* harmony export */ "exp": () => (/* binding */ exp), -/* harmony export */ "floor": () => (/* binding */ floor), -/* harmony export */ "halfPi": () => (/* binding */ halfPi), -/* harmony export */ "haversin": () => (/* binding */ haversin), -/* harmony export */ "log": () => (/* binding */ log), -/* harmony export */ "pi": () => (/* binding */ pi), -/* harmony export */ "pow": () => (/* binding */ pow), -/* harmony export */ "quarterPi": () => (/* binding */ quarterPi), -/* harmony export */ "radians": () => (/* binding */ radians), -/* harmony export */ "sign": () => (/* binding */ sign), -/* harmony export */ "sin": () => (/* binding */ sin), -/* harmony export */ "sqrt": () => (/* binding */ sqrt), -/* harmony export */ "tan": () => (/* binding */ tan), -/* harmony export */ "tau": () => (/* binding */ tau) -/* harmony export */ }); -var epsilon = 1e-6; -var epsilon2 = 1e-12; -var pi = Math.PI; -var halfPi = pi / 2; -var quarterPi = pi / 4; -var tau = pi * 2; - -var degrees = 180 / pi; -var radians = pi / 180; - -var abs = Math.abs; -var atan = Math.atan; -var atan2 = Math.atan2; -var cos = Math.cos; -var ceil = Math.ceil; -var exp = Math.exp; -var floor = Math.floor; -var log = Math.log; -var pow = Math.pow; -var sin = Math.sin; -var sign = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; }; -var sqrt = Math.sqrt; -var tan = Math.tan; - -function acos(x) { - return x > 1 ? 0 : x < -1 ? pi : Math.acos(x); -} - -function asin(x) { - return x > 1 ? halfPi : x < -1 ? -halfPi : Math.asin(x); -} - -function haversin(x) { - return (x = sin(x / 2)) * x; -} - - -/***/ }), - -/***/ "./node_modules/d3-geo/src/noop.js": -/*!*****************************************!*\ - !*** ./node_modules/d3-geo/src/noop.js ***! - \*****************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ noop) -/* harmony export */ }); -function noop() {} - - -/***/ }), - -/***/ "./node_modules/d3-geo/src/path/area.js": -/*!**********************************************!*\ - !*** ./node_modules/d3-geo/src/path/area.js ***! - \**********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _adder_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../adder.js */ "./node_modules/d3-geo/src/adder.js"); -/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../math.js */ "./node_modules/d3-geo/src/math.js"); -/* harmony import */ var _noop_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../noop.js */ "./node_modules/d3-geo/src/noop.js"); - - - - -var areaSum = (0,_adder_js__WEBPACK_IMPORTED_MODULE_0__["default"])(), - areaRingSum = (0,_adder_js__WEBPACK_IMPORTED_MODULE_0__["default"])(), - x00, - y00, - x0, - y0; - -var areaStream = { - point: _noop_js__WEBPACK_IMPORTED_MODULE_1__["default"], - lineStart: _noop_js__WEBPACK_IMPORTED_MODULE_1__["default"], - lineEnd: _noop_js__WEBPACK_IMPORTED_MODULE_1__["default"], - polygonStart: function() { - areaStream.lineStart = areaRingStart; - areaStream.lineEnd = areaRingEnd; - }, - polygonEnd: function() { - areaStream.lineStart = areaStream.lineEnd = areaStream.point = _noop_js__WEBPACK_IMPORTED_MODULE_1__["default"]; - areaSum.add((0,_math_js__WEBPACK_IMPORTED_MODULE_2__.abs)(areaRingSum)); - areaRingSum.reset(); - }, - result: function() { - var area = areaSum / 2; - areaSum.reset(); - return area; - } -}; - -function areaRingStart() { - areaStream.point = areaPointFirst; -} - -function areaPointFirst(x, y) { - areaStream.point = areaPoint; - x00 = x0 = x, y00 = y0 = y; -} - -function areaPoint(x, y) { - areaRingSum.add(y0 * x - x0 * y); - x0 = x, y0 = y; -} - -function areaRingEnd() { - areaPoint(x00, y00); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (areaStream); - - -/***/ }), - -/***/ "./node_modules/d3-geo/src/path/bounds.js": -/*!************************************************!*\ - !*** ./node_modules/d3-geo/src/path/bounds.js ***! - \************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _noop_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../noop.js */ "./node_modules/d3-geo/src/noop.js"); - - -var x0 = Infinity, - y0 = x0, - x1 = -x0, - y1 = x1; - -var boundsStream = { - point: boundsPoint, - lineStart: _noop_js__WEBPACK_IMPORTED_MODULE_0__["default"], - lineEnd: _noop_js__WEBPACK_IMPORTED_MODULE_0__["default"], - polygonStart: _noop_js__WEBPACK_IMPORTED_MODULE_0__["default"], - polygonEnd: _noop_js__WEBPACK_IMPORTED_MODULE_0__["default"], - result: function() { - var bounds = [[x0, y0], [x1, y1]]; - x1 = y1 = -(y0 = x0 = Infinity); - return bounds; - } -}; - -function boundsPoint(x, y) { - if (x < x0) x0 = x; - if (x > x1) x1 = x; - if (y < y0) y0 = y; - if (y > y1) y1 = y; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (boundsStream); - - -/***/ }), - -/***/ "./node_modules/d3-geo/src/path/centroid.js": -/*!**************************************************!*\ - !*** ./node_modules/d3-geo/src/path/centroid.js ***! - \**************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math.js */ "./node_modules/d3-geo/src/math.js"); - - -// TODO Enforce positive area for exterior, negative area for interior? - -var X0 = 0, - Y0 = 0, - Z0 = 0, - X1 = 0, - Y1 = 0, - Z1 = 0, - X2 = 0, - Y2 = 0, - Z2 = 0, - x00, - y00, - x0, - y0; - -var centroidStream = { - point: centroidPoint, - lineStart: centroidLineStart, - lineEnd: centroidLineEnd, - polygonStart: function() { - centroidStream.lineStart = centroidRingStart; - centroidStream.lineEnd = centroidRingEnd; - }, - polygonEnd: function() { - centroidStream.point = centroidPoint; - centroidStream.lineStart = centroidLineStart; - centroidStream.lineEnd = centroidLineEnd; - }, - result: function() { - var centroid = Z2 ? [X2 / Z2, Y2 / Z2] - : Z1 ? [X1 / Z1, Y1 / Z1] - : Z0 ? [X0 / Z0, Y0 / Z0] - : [NaN, NaN]; - X0 = Y0 = Z0 = - X1 = Y1 = Z1 = - X2 = Y2 = Z2 = 0; - return centroid; - } -}; - -function centroidPoint(x, y) { - X0 += x; - Y0 += y; - ++Z0; -} - -function centroidLineStart() { - centroidStream.point = centroidPointFirstLine; -} - -function centroidPointFirstLine(x, y) { - centroidStream.point = centroidPointLine; - centroidPoint(x0 = x, y0 = y); -} - -function centroidPointLine(x, y) { - var dx = x - x0, dy = y - y0, z = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sqrt)(dx * dx + dy * dy); - X1 += z * (x0 + x) / 2; - Y1 += z * (y0 + y) / 2; - Z1 += z; - centroidPoint(x0 = x, y0 = y); -} - -function centroidLineEnd() { - centroidStream.point = centroidPoint; -} - -function centroidRingStart() { - centroidStream.point = centroidPointFirstRing; -} - -function centroidRingEnd() { - centroidPointRing(x00, y00); -} - -function centroidPointFirstRing(x, y) { - centroidStream.point = centroidPointRing; - centroidPoint(x00 = x0 = x, y00 = y0 = y); -} - -function centroidPointRing(x, y) { - var dx = x - x0, - dy = y - y0, - z = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sqrt)(dx * dx + dy * dy); - - X1 += z * (x0 + x) / 2; - Y1 += z * (y0 + y) / 2; - Z1 += z; - - z = y0 * x - x0 * y; - X2 += z * (x0 + x); - Y2 += z * (y0 + y); - Z2 += z * 3; - centroidPoint(x0 = x, y0 = y); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (centroidStream); - - -/***/ }), - -/***/ "./node_modules/d3-geo/src/path/context.js": -/*!*************************************************!*\ - !*** ./node_modules/d3-geo/src/path/context.js ***! - \*************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ PathContext) -/* harmony export */ }); -/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math.js */ "./node_modules/d3-geo/src/math.js"); -/* harmony import */ var _noop_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../noop.js */ "./node_modules/d3-geo/src/noop.js"); - - - -function PathContext(context) { - this._context = context; -} - -PathContext.prototype = { - _radius: 4.5, - pointRadius: function(_) { - return this._radius = _, this; - }, - polygonStart: function() { - this._line = 0; - }, - polygonEnd: function() { - this._line = NaN; - }, - lineStart: function() { - this._point = 0; - }, - lineEnd: function() { - if (this._line === 0) this._context.closePath(); - this._point = NaN; - }, - point: function(x, y) { - switch (this._point) { - case 0: { - this._context.moveTo(x, y); - this._point = 1; - break; - } - case 1: { - this._context.lineTo(x, y); - break; - } - default: { - this._context.moveTo(x + this._radius, y); - this._context.arc(x, y, this._radius, 0, _math_js__WEBPACK_IMPORTED_MODULE_0__.tau); - break; - } - } - }, - result: _noop_js__WEBPACK_IMPORTED_MODULE_1__["default"] -}; - - -/***/ }), - -/***/ "./node_modules/d3-geo/src/path/index.js": -/*!***********************************************!*\ - !*** ./node_modules/d3-geo/src/path/index.js ***! - \***********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _identity_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../identity.js */ "./node_modules/d3-geo/src/identity.js"); -/* harmony import */ var _stream_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../stream.js */ "./node_modules/d3-geo/src/stream.js"); -/* harmony import */ var _area_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./area.js */ "./node_modules/d3-geo/src/path/area.js"); -/* harmony import */ var _bounds_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./bounds.js */ "./node_modules/d3-geo/src/path/bounds.js"); -/* harmony import */ var _centroid_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./centroid.js */ "./node_modules/d3-geo/src/path/centroid.js"); -/* harmony import */ var _context_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./context.js */ "./node_modules/d3-geo/src/path/context.js"); -/* harmony import */ var _measure_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./measure.js */ "./node_modules/d3-geo/src/path/measure.js"); -/* harmony import */ var _string_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./string.js */ "./node_modules/d3-geo/src/path/string.js"); - - - - - - - - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(projection, context) { - var pointRadius = 4.5, - projectionStream, - contextStream; - - function path(object) { - if (object) { - if (typeof pointRadius === "function") contextStream.pointRadius(+pointRadius.apply(this, arguments)); - (0,_stream_js__WEBPACK_IMPORTED_MODULE_0__["default"])(object, projectionStream(contextStream)); - } - return contextStream.result(); - } - - path.area = function(object) { - (0,_stream_js__WEBPACK_IMPORTED_MODULE_0__["default"])(object, projectionStream(_area_js__WEBPACK_IMPORTED_MODULE_1__["default"])); - return _area_js__WEBPACK_IMPORTED_MODULE_1__["default"].result(); - }; - - path.measure = function(object) { - (0,_stream_js__WEBPACK_IMPORTED_MODULE_0__["default"])(object, projectionStream(_measure_js__WEBPACK_IMPORTED_MODULE_2__["default"])); - return _measure_js__WEBPACK_IMPORTED_MODULE_2__["default"].result(); - }; - - path.bounds = function(object) { - (0,_stream_js__WEBPACK_IMPORTED_MODULE_0__["default"])(object, projectionStream(_bounds_js__WEBPACK_IMPORTED_MODULE_3__["default"])); - return _bounds_js__WEBPACK_IMPORTED_MODULE_3__["default"].result(); - }; - - path.centroid = function(object) { - (0,_stream_js__WEBPACK_IMPORTED_MODULE_0__["default"])(object, projectionStream(_centroid_js__WEBPACK_IMPORTED_MODULE_4__["default"])); - return _centroid_js__WEBPACK_IMPORTED_MODULE_4__["default"].result(); - }; - - path.projection = function(_) { - return arguments.length ? (projectionStream = _ == null ? (projection = null, _identity_js__WEBPACK_IMPORTED_MODULE_5__["default"]) : (projection = _).stream, path) : projection; - }; - - path.context = function(_) { - if (!arguments.length) return context; - contextStream = _ == null ? (context = null, new _string_js__WEBPACK_IMPORTED_MODULE_6__["default"]) : new _context_js__WEBPACK_IMPORTED_MODULE_7__["default"](context = _); - if (typeof pointRadius !== "function") contextStream.pointRadius(pointRadius); - return path; - }; - - path.pointRadius = function(_) { - if (!arguments.length) return pointRadius; - pointRadius = typeof _ === "function" ? _ : (contextStream.pointRadius(+_), +_); - return path; - }; - - return path.projection(projection).context(context); -} - - -/***/ }), - -/***/ "./node_modules/d3-geo/src/path/measure.js": -/*!*************************************************!*\ - !*** ./node_modules/d3-geo/src/path/measure.js ***! - \*************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _adder_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../adder.js */ "./node_modules/d3-geo/src/adder.js"); -/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../math.js */ "./node_modules/d3-geo/src/math.js"); -/* harmony import */ var _noop_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../noop.js */ "./node_modules/d3-geo/src/noop.js"); - - - - -var lengthSum = (0,_adder_js__WEBPACK_IMPORTED_MODULE_0__["default"])(), - lengthRing, - x00, - y00, - x0, - y0; - -var lengthStream = { - point: _noop_js__WEBPACK_IMPORTED_MODULE_1__["default"], - lineStart: function() { - lengthStream.point = lengthPointFirst; - }, - lineEnd: function() { - if (lengthRing) lengthPoint(x00, y00); - lengthStream.point = _noop_js__WEBPACK_IMPORTED_MODULE_1__["default"]; - }, - polygonStart: function() { - lengthRing = true; - }, - polygonEnd: function() { - lengthRing = null; - }, - result: function() { - var length = +lengthSum; - lengthSum.reset(); - return length; - } -}; - -function lengthPointFirst(x, y) { - lengthStream.point = lengthPoint; - x00 = x0 = x, y00 = y0 = y; -} - -function lengthPoint(x, y) { - x0 -= x, y0 -= y; - lengthSum.add((0,_math_js__WEBPACK_IMPORTED_MODULE_2__.sqrt)(x0 * x0 + y0 * y0)); - x0 = x, y0 = y; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (lengthStream); - - -/***/ }), - -/***/ "./node_modules/d3-geo/src/path/string.js": -/*!************************************************!*\ - !*** ./node_modules/d3-geo/src/path/string.js ***! - \************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ PathString) -/* harmony export */ }); -function PathString() { - this._string = []; -} - -PathString.prototype = { - _radius: 4.5, - _circle: circle(4.5), - pointRadius: function(_) { - if ((_ = +_) !== this._radius) this._radius = _, this._circle = null; - return this; - }, - polygonStart: function() { - this._line = 0; - }, - polygonEnd: function() { - this._line = NaN; - }, - lineStart: function() { - this._point = 0; - }, - lineEnd: function() { - if (this._line === 0) this._string.push("Z"); - this._point = NaN; - }, - point: function(x, y) { - switch (this._point) { - case 0: { - this._string.push("M", x, ",", y); - this._point = 1; - break; - } - case 1: { - this._string.push("L", x, ",", y); - break; - } - default: { - if (this._circle == null) this._circle = circle(this._radius); - this._string.push("M", x, ",", y, this._circle); - break; - } - } - }, - result: function() { - if (this._string.length) { - var result = this._string.join(""); - this._string = []; - return result; - } else { - return null; - } - } -}; - -function circle(radius) { - return "m0," + radius - + "a" + radius + "," + radius + " 0 1,1 0," + -2 * radius - + "a" + radius + "," + radius + " 0 1,1 0," + 2 * radius - + "z"; -} - - -/***/ }), - -/***/ "./node_modules/d3-geo/src/pointEqual.js": -/*!***********************************************!*\ - !*** ./node_modules/d3-geo/src/pointEqual.js ***! - \***********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./math.js */ "./node_modules/d3-geo/src/math.js"); - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(a, b) { - 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; -} - - -/***/ }), - -/***/ "./node_modules/d3-geo/src/polygonContains.js": -/*!****************************************************!*\ - !*** ./node_modules/d3-geo/src/polygonContains.js ***! - \****************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _adder_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./adder.js */ "./node_modules/d3-geo/src/adder.js"); -/* harmony import */ var _cartesian_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./cartesian.js */ "./node_modules/d3-geo/src/cartesian.js"); -/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./math.js */ "./node_modules/d3-geo/src/math.js"); - - - - -var sum = (0,_adder_js__WEBPACK_IMPORTED_MODULE_0__["default"])(); - -function longitude(point) { - if ((0,_math_js__WEBPACK_IMPORTED_MODULE_1__.abs)(point[0]) <= _math_js__WEBPACK_IMPORTED_MODULE_1__.pi) - return point[0]; - else - return (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.sign)(point[0]) * (((0,_math_js__WEBPACK_IMPORTED_MODULE_1__.abs)(point[0]) + _math_js__WEBPACK_IMPORTED_MODULE_1__.pi) % _math_js__WEBPACK_IMPORTED_MODULE_1__.tau - _math_js__WEBPACK_IMPORTED_MODULE_1__.pi); -} - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(polygon, point) { - var lambda = longitude(point), - phi = point[1], - sinPhi = (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.sin)(phi), - normal = [(0,_math_js__WEBPACK_IMPORTED_MODULE_1__.sin)(lambda), -(0,_math_js__WEBPACK_IMPORTED_MODULE_1__.cos)(lambda), 0], - angle = 0, - winding = 0; - - sum.reset(); - - if (sinPhi === 1) phi = _math_js__WEBPACK_IMPORTED_MODULE_1__.halfPi + _math_js__WEBPACK_IMPORTED_MODULE_1__.epsilon; - else if (sinPhi === -1) phi = -_math_js__WEBPACK_IMPORTED_MODULE_1__.halfPi - _math_js__WEBPACK_IMPORTED_MODULE_1__.epsilon; - - for (var i = 0, n = polygon.length; i < n; ++i) { - if (!(m = (ring = polygon[i]).length)) continue; - var ring, - m, - point0 = ring[m - 1], - lambda0 = longitude(point0), - phi0 = point0[1] / 2 + _math_js__WEBPACK_IMPORTED_MODULE_1__.quarterPi, - sinPhi0 = (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.sin)(phi0), - cosPhi0 = (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.cos)(phi0); - - for (var j = 0; j < m; ++j, lambda0 = lambda1, sinPhi0 = sinPhi1, cosPhi0 = cosPhi1, point0 = point1) { - var point1 = ring[j], - lambda1 = longitude(point1), - phi1 = point1[1] / 2 + _math_js__WEBPACK_IMPORTED_MODULE_1__.quarterPi, - sinPhi1 = (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.sin)(phi1), - cosPhi1 = (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.cos)(phi1), - delta = lambda1 - lambda0, - sign = delta >= 0 ? 1 : -1, - absDelta = sign * delta, - antimeridian = absDelta > _math_js__WEBPACK_IMPORTED_MODULE_1__.pi, - k = sinPhi0 * sinPhi1; - - sum.add((0,_math_js__WEBPACK_IMPORTED_MODULE_1__.atan2)(k * sign * (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.sin)(absDelta), cosPhi0 * cosPhi1 + k * (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.cos)(absDelta))); - angle += antimeridian ? delta + sign * _math_js__WEBPACK_IMPORTED_MODULE_1__.tau : delta; - - // Are the longitudes either side of the point’s meridian (lambda), - // and are the latitudes smaller than the parallel (phi)? - if (antimeridian ^ lambda0 >= lambda ^ lambda1 >= lambda) { - 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)); - (0,_cartesian_js__WEBPACK_IMPORTED_MODULE_2__.cartesianNormalizeInPlace)(arc); - var intersection = (0,_cartesian_js__WEBPACK_IMPORTED_MODULE_2__.cartesianCross)(normal, arc); - (0,_cartesian_js__WEBPACK_IMPORTED_MODULE_2__.cartesianNormalizeInPlace)(intersection); - var phiArc = (antimeridian ^ delta >= 0 ? -1 : 1) * (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.asin)(intersection[2]); - if (phi > phiArc || phi === phiArc && (arc[0] || arc[1])) { - winding += antimeridian ^ delta >= 0 ? 1 : -1; - } - } - } - } - - // First, determine whether the South pole is inside or outside: - // - // It is inside if: - // * the polygon winds around it in a clockwise direction. - // * the polygon does not (cumulatively) wind around it, but has a negative - // (counter-clockwise) area. - // - // Second, count the (signed) number of times a segment crosses a lambda - // from the point to the South pole. If it is zero, then the point is the - // same side as the South pole. - - return (angle < -_math_js__WEBPACK_IMPORTED_MODULE_1__.epsilon || angle < _math_js__WEBPACK_IMPORTED_MODULE_1__.epsilon && sum < -_math_js__WEBPACK_IMPORTED_MODULE_1__.epsilon) ^ (winding & 1); -} - - -/***/ }), - -/***/ "./node_modules/d3-geo/src/projection/albers.js": -/*!******************************************************!*\ - !*** ./node_modules/d3-geo/src/projection/albers.js ***! - \******************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _conicEqualArea_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./conicEqualArea.js */ "./node_modules/d3-geo/src/projection/conicEqualArea.js"); - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() { - return (0,_conicEqualArea_js__WEBPACK_IMPORTED_MODULE_0__["default"])() - .parallels([29.5, 45.5]) - .scale(1070) - .translate([480, 250]) - .rotate([96, 0]) - .center([-0.6, 38.7]); -} - - -/***/ }), - -/***/ "./node_modules/d3-geo/src/projection/albersUsa.js": -/*!*********************************************************!*\ - !*** ./node_modules/d3-geo/src/projection/albersUsa.js ***! - \*********************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../math.js */ "./node_modules/d3-geo/src/math.js"); -/* harmony import */ var _albers_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./albers.js */ "./node_modules/d3-geo/src/projection/albers.js"); -/* harmony import */ var _conicEqualArea_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./conicEqualArea.js */ "./node_modules/d3-geo/src/projection/conicEqualArea.js"); -/* harmony import */ var _fit_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./fit.js */ "./node_modules/d3-geo/src/projection/fit.js"); - - - - - -// The projections must have mutually exclusive clip regions on the sphere, -// as this will avoid emitting interleaving lines and polygons. -function multiplex(streams) { - var n = streams.length; - return { - point: function(x, y) { var i = -1; while (++i < n) streams[i].point(x, y); }, - sphere: function() { var i = -1; while (++i < n) streams[i].sphere(); }, - lineStart: function() { var i = -1; while (++i < n) streams[i].lineStart(); }, - lineEnd: function() { var i = -1; while (++i < n) streams[i].lineEnd(); }, - polygonStart: function() { var i = -1; while (++i < n) streams[i].polygonStart(); }, - polygonEnd: function() { var i = -1; while (++i < n) streams[i].polygonEnd(); } - }; -} - -// A composite projection for the United States, configured by default for -// 960×500. The projection also works quite well at 960×600 if you change the -// scale to 1285 and adjust the translate accordingly. The set of standard -// parallels for each region comes from USGS, which is published here: -// http://egsc.usgs.gov/isb/pubs/MapProjections/projections.html#albers -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() { - var cache, - cacheStream, - lower48 = (0,_albers_js__WEBPACK_IMPORTED_MODULE_0__["default"])(), lower48Point, - alaska = (0,_conicEqualArea_js__WEBPACK_IMPORTED_MODULE_1__["default"])().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]), alaskaPoint, // EPSG:3338 - hawaii = (0,_conicEqualArea_js__WEBPACK_IMPORTED_MODULE_1__["default"])().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]), hawaiiPoint, // ESRI:102007 - point, pointStream = {point: function(x, y) { point = [x, y]; }}; - - function albersUsa(coordinates) { - var x = coordinates[0], y = coordinates[1]; - return point = null, - (lower48Point.point(x, y), point) - || (alaskaPoint.point(x, y), point) - || (hawaiiPoint.point(x, y), point); - } - - albersUsa.invert = function(coordinates) { - var k = lower48.scale(), - t = lower48.translate(), - x = (coordinates[0] - t[0]) / k, - y = (coordinates[1] - t[1]) / k; - return (y >= 0.120 && y < 0.234 && x >= -0.425 && x < -0.214 ? alaska - : y >= 0.166 && y < 0.234 && x >= -0.214 && x < -0.115 ? hawaii - : lower48).invert(coordinates); - }; - - albersUsa.stream = function(stream) { - return cache && cacheStream === stream ? cache : cache = multiplex([lower48.stream(cacheStream = stream), alaska.stream(stream), hawaii.stream(stream)]); - }; - - albersUsa.precision = function(_) { - if (!arguments.length) return lower48.precision(); - lower48.precision(_), alaska.precision(_), hawaii.precision(_); - return reset(); - }; - - albersUsa.scale = function(_) { - if (!arguments.length) return lower48.scale(); - lower48.scale(_), alaska.scale(_ * 0.35), hawaii.scale(_); - return albersUsa.translate(lower48.translate()); - }; - - albersUsa.translate = function(_) { - if (!arguments.length) return lower48.translate(); - var k = lower48.scale(), x = +_[0], y = +_[1]; - - lower48Point = lower48 - .translate(_) - .clipExtent([[x - 0.455 * k, y - 0.238 * k], [x + 0.455 * k, y + 0.238 * k]]) - .stream(pointStream); - - alaskaPoint = alaska - .translate([x - 0.307 * k, y + 0.201 * k]) - .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]]) - .stream(pointStream); - - hawaiiPoint = hawaii - .translate([x - 0.205 * k, y + 0.212 * k]) - .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]]) - .stream(pointStream); - - return reset(); - }; - - albersUsa.fitExtent = function(extent, object) { - return (0,_fit_js__WEBPACK_IMPORTED_MODULE_3__.fitExtent)(albersUsa, extent, object); - }; - - albersUsa.fitSize = function(size, object) { - return (0,_fit_js__WEBPACK_IMPORTED_MODULE_3__.fitSize)(albersUsa, size, object); - }; - - albersUsa.fitWidth = function(width, object) { - return (0,_fit_js__WEBPACK_IMPORTED_MODULE_3__.fitWidth)(albersUsa, width, object); - }; - - albersUsa.fitHeight = function(height, object) { - return (0,_fit_js__WEBPACK_IMPORTED_MODULE_3__.fitHeight)(albersUsa, height, object); - }; - - function reset() { - cache = cacheStream = null; - return albersUsa; - } - - return albersUsa.scale(1070); -} - - -/***/ }), - -/***/ "./node_modules/d3-geo/src/projection/azimuthal.js": -/*!*********************************************************!*\ - !*** ./node_modules/d3-geo/src/projection/azimuthal.js ***! - \*********************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "azimuthalInvert": () => (/* binding */ azimuthalInvert), -/* harmony export */ "azimuthalRaw": () => (/* binding */ azimuthalRaw) -/* harmony export */ }); -/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math.js */ "./node_modules/d3-geo/src/math.js"); - - -function azimuthalRaw(scale) { - return function(x, y) { - var cx = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(x), - cy = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(y), - k = scale(cx * cy); - return [ - k * cy * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(x), - k * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(y) - ]; - } -} - -function azimuthalInvert(angle) { - return function(x, y) { - var z = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sqrt)(x * x + y * y), - c = angle(z), - sc = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(c), - cc = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(c); - return [ - (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.atan2)(x * sc, z * cc), - (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.asin)(z && y * sc / z) - ]; - } -} - - -/***/ }), - -/***/ "./node_modules/d3-geo/src/projection/azimuthalEqualArea.js": -/*!******************************************************************!*\ - !*** ./node_modules/d3-geo/src/projection/azimuthalEqualArea.js ***! - \******************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "azimuthalEqualAreaRaw": () => (/* binding */ azimuthalEqualAreaRaw), -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../math.js */ "./node_modules/d3-geo/src/math.js"); -/* harmony import */ var _azimuthal_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./azimuthal.js */ "./node_modules/d3-geo/src/projection/azimuthal.js"); -/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./index.js */ "./node_modules/d3-geo/src/projection/index.js"); - - - - -var azimuthalEqualAreaRaw = (0,_azimuthal_js__WEBPACK_IMPORTED_MODULE_0__.azimuthalRaw)(function(cxcy) { - return (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.sqrt)(2 / (1 + cxcy)); -}); - -azimuthalEqualAreaRaw.invert = (0,_azimuthal_js__WEBPACK_IMPORTED_MODULE_0__.azimuthalInvert)(function(z) { - return 2 * (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.asin)(z / 2); -}); - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() { - return (0,_index_js__WEBPACK_IMPORTED_MODULE_2__["default"])(azimuthalEqualAreaRaw) - .scale(124.75) - .clipAngle(180 - 1e-3); -} - - -/***/ }), - -/***/ "./node_modules/d3-geo/src/projection/azimuthalEquidistant.js": -/*!********************************************************************!*\ - !*** ./node_modules/d3-geo/src/projection/azimuthalEquidistant.js ***! - \********************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "azimuthalEquidistantRaw": () => (/* binding */ azimuthalEquidistantRaw), -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../math.js */ "./node_modules/d3-geo/src/math.js"); -/* harmony import */ var _azimuthal_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./azimuthal.js */ "./node_modules/d3-geo/src/projection/azimuthal.js"); -/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./index.js */ "./node_modules/d3-geo/src/projection/index.js"); - - - - -var azimuthalEquidistantRaw = (0,_azimuthal_js__WEBPACK_IMPORTED_MODULE_0__.azimuthalRaw)(function(c) { - return (c = (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.acos)(c)) && c / (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.sin)(c); -}); - -azimuthalEquidistantRaw.invert = (0,_azimuthal_js__WEBPACK_IMPORTED_MODULE_0__.azimuthalInvert)(function(z) { - return z; -}); - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() { - return (0,_index_js__WEBPACK_IMPORTED_MODULE_2__["default"])(azimuthalEquidistantRaw) - .scale(79.4188) - .clipAngle(180 - 1e-3); -} - - -/***/ }), - -/***/ "./node_modules/d3-geo/src/projection/conic.js": -/*!*****************************************************!*\ - !*** ./node_modules/d3-geo/src/projection/conic.js ***! - \*****************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "conicProjection": () => (/* binding */ conicProjection) -/* harmony export */ }); -/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math.js */ "./node_modules/d3-geo/src/math.js"); -/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./index.js */ "./node_modules/d3-geo/src/projection/index.js"); - - - -function conicProjection(projectAt) { - var phi0 = 0, - phi1 = _math_js__WEBPACK_IMPORTED_MODULE_0__.pi / 3, - m = (0,_index_js__WEBPACK_IMPORTED_MODULE_1__.projectionMutator)(projectAt), - p = m(phi0, phi1); - - p.parallels = function(_) { - 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]; - }; - - return p; -} - - -/***/ }), - -/***/ "./node_modules/d3-geo/src/projection/conicConformal.js": -/*!**************************************************************!*\ - !*** ./node_modules/d3-geo/src/projection/conicConformal.js ***! - \**************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "conicConformalRaw": () => (/* binding */ conicConformalRaw), -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math.js */ "./node_modules/d3-geo/src/math.js"); -/* harmony import */ var _conic_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./conic.js */ "./node_modules/d3-geo/src/projection/conic.js"); -/* harmony import */ var _mercator_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./mercator.js */ "./node_modules/d3-geo/src/projection/mercator.js"); - - - - -function tany(y) { - return (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.tan)((_math_js__WEBPACK_IMPORTED_MODULE_0__.halfPi + y) / 2); -} - -function conicConformalRaw(y0, y1) { - var cy0 = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(y0), - 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)), - f = cy0 * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.pow)(tany(y0), n) / n; - - if (!n) return _mercator_js__WEBPACK_IMPORTED_MODULE_1__.mercatorRaw; - - function project(x, y) { - 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; } - 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; } - var r = f / (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.pow)(tany(y), 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)]; - } - - project.invert = function(x, y) { - 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), - 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); - if (fy * n < 0) - 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); - 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]; - }; - - return project; -} - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() { - return (0,_conic_js__WEBPACK_IMPORTED_MODULE_2__.conicProjection)(conicConformalRaw) - .scale(109.5) - .parallels([30, 30]); -} - - -/***/ }), - -/***/ "./node_modules/d3-geo/src/projection/conicEqualArea.js": -/*!**************************************************************!*\ - !*** ./node_modules/d3-geo/src/projection/conicEqualArea.js ***! - \**************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "conicEqualAreaRaw": () => (/* binding */ conicEqualAreaRaw), -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math.js */ "./node_modules/d3-geo/src/math.js"); -/* harmony import */ var _conic_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./conic.js */ "./node_modules/d3-geo/src/projection/conic.js"); -/* harmony import */ var _cylindricalEqualArea_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./cylindricalEqualArea.js */ "./node_modules/d3-geo/src/projection/cylindricalEqualArea.js"); - - - - -function conicEqualAreaRaw(y0, y1) { - var sy0 = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(y0), n = (sy0 + (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(y1)) / 2; - - // Are the parallels symmetrical around the Equator? - 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); - - var c = 1 + sy0 * (2 * n - sy0), r0 = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sqrt)(c) / n; - - function project(x, y) { - var r = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sqrt)(c - 2 * n * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(y)) / n; - return [r * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(x *= n), r0 - r * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(x)]; - } - - project.invert = function(x, y) { - var r0y = r0 - y, - 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); - if (r0y * n < 0) - 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); - return [l / n, (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.asin)((c - (x * x + r0y * r0y) * n * n) / (2 * n))]; - }; - - return project; -} - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() { - return (0,_conic_js__WEBPACK_IMPORTED_MODULE_2__.conicProjection)(conicEqualAreaRaw) - .scale(155.424) - .center([0, 33.6442]); -} - - -/***/ }), - -/***/ "./node_modules/d3-geo/src/projection/conicEquidistant.js": -/*!****************************************************************!*\ - !*** ./node_modules/d3-geo/src/projection/conicEquidistant.js ***! - \****************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "conicEquidistantRaw": () => (/* binding */ conicEquidistantRaw), -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math.js */ "./node_modules/d3-geo/src/math.js"); -/* harmony import */ var _conic_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./conic.js */ "./node_modules/d3-geo/src/projection/conic.js"); -/* harmony import */ var _equirectangular_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./equirectangular.js */ "./node_modules/d3-geo/src/projection/equirectangular.js"); - - - - -function conicEquidistantRaw(y0, y1) { - var cy0 = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(y0), - n = y0 === y1 ? (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(y0) : (cy0 - (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(y1)) / (y1 - y0), - g = cy0 / n + y0; - - 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; - - function project(x, y) { - var gy = g - y, nx = n * x; - return [gy * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(nx), g - gy * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(nx)]; - } - - project.invert = function(x, y) { - var gy = g - y, - 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); - if (gy * n < 0) - 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); - 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)]; - }; - - return project; -} - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() { - return (0,_conic_js__WEBPACK_IMPORTED_MODULE_2__.conicProjection)(conicEquidistantRaw) - .scale(131.154) - .center([0, 13.9389]); -} - - -/***/ }), - -/***/ "./node_modules/d3-geo/src/projection/cylindricalEqualArea.js": -/*!********************************************************************!*\ - !*** ./node_modules/d3-geo/src/projection/cylindricalEqualArea.js ***! - \********************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "cylindricalEqualAreaRaw": () => (/* binding */ cylindricalEqualAreaRaw) -/* harmony export */ }); -/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math.js */ "./node_modules/d3-geo/src/math.js"); - - -function cylindricalEqualAreaRaw(phi0) { - var cosPhi0 = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(phi0); - - function forward(lambda, phi) { - return [lambda * cosPhi0, (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(phi) / cosPhi0]; - } - - forward.invert = function(x, y) { - return [x / cosPhi0, (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.asin)(y * cosPhi0)]; - }; - - return forward; -} - - -/***/ }), - -/***/ "./node_modules/d3-geo/src/projection/equalEarth.js": -/*!**********************************************************!*\ - !*** ./node_modules/d3-geo/src/projection/equalEarth.js ***! - \**********************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "equalEarthRaw": () => (/* binding */ equalEarthRaw) -/* harmony export */ }); -/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./index.js */ "./node_modules/d3-geo/src/projection/index.js"); -/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math.js */ "./node_modules/d3-geo/src/math.js"); - - - -var A1 = 1.340264, - A2 = -0.081106, - A3 = 0.000893, - A4 = 0.003796, - M = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sqrt)(3) / 2, - iterations = 12; - -function equalEarthRaw(lambda, phi) { - 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; - return [ - lambda * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(l) / (M * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2))), - l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2)) - ]; -} - -equalEarthRaw.invert = function(x, y) { - var l = y, l2 = l * l, l6 = l2 * l2 * l2; - for (var i = 0, delta, fy, fpy; i < iterations; ++i) { - fy = l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2)) - y; - fpy = A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2); - l -= delta = fy / fpy, l2 = l * l, l6 = l2 * l2 * l2; - if ((0,_math_js__WEBPACK_IMPORTED_MODULE_0__.abs)(delta) < _math_js__WEBPACK_IMPORTED_MODULE_0__.epsilon2) break; - } - return [ - M * x * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2)) / (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(l), - (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.asin)((0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(l) / M) - ]; -}; - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() { - return (0,_index_js__WEBPACK_IMPORTED_MODULE_1__["default"])(equalEarthRaw) - .scale(177.158); -} - - -/***/ }), - -/***/ "./node_modules/d3-geo/src/projection/equirectangular.js": -/*!***************************************************************!*\ - !*** ./node_modules/d3-geo/src/projection/equirectangular.js ***! - \***************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "equirectangularRaw": () => (/* binding */ equirectangularRaw) -/* harmony export */ }); -/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index.js */ "./node_modules/d3-geo/src/projection/index.js"); - - -function equirectangularRaw(lambda, phi) { - return [lambda, phi]; -} - -equirectangularRaw.invert = equirectangularRaw; - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() { - return (0,_index_js__WEBPACK_IMPORTED_MODULE_0__["default"])(equirectangularRaw) - .scale(152.63); -} - - -/***/ }), - -/***/ "./node_modules/d3-geo/src/projection/fit.js": -/*!***************************************************!*\ - !*** ./node_modules/d3-geo/src/projection/fit.js ***! - \***************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "fitExtent": () => (/* binding */ fitExtent), -/* harmony export */ "fitHeight": () => (/* binding */ fitHeight), -/* harmony export */ "fitSize": () => (/* binding */ fitSize), -/* harmony export */ "fitWidth": () => (/* binding */ fitWidth) -/* harmony export */ }); -/* harmony import */ var _stream_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../stream.js */ "./node_modules/d3-geo/src/stream.js"); -/* harmony import */ var _path_bounds_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../path/bounds.js */ "./node_modules/d3-geo/src/path/bounds.js"); - - - -function fit(projection, fitBounds, object) { - var clip = projection.clipExtent && projection.clipExtent(); - projection.scale(150).translate([0, 0]); - if (clip != null) projection.clipExtent(null); - (0,_stream_js__WEBPACK_IMPORTED_MODULE_0__["default"])(object, projection.stream(_path_bounds_js__WEBPACK_IMPORTED_MODULE_1__["default"])); - fitBounds(_path_bounds_js__WEBPACK_IMPORTED_MODULE_1__["default"].result()); - if (clip != null) projection.clipExtent(clip); - return projection; -} - -function fitExtent(projection, extent, object) { - return fit(projection, function(b) { - var w = extent[1][0] - extent[0][0], - h = extent[1][1] - extent[0][1], - k = Math.min(w / (b[1][0] - b[0][0]), h / (b[1][1] - b[0][1])), - x = +extent[0][0] + (w - k * (b[1][0] + b[0][0])) / 2, - y = +extent[0][1] + (h - k * (b[1][1] + b[0][1])) / 2; - projection.scale(150 * k).translate([x, y]); - }, object); -} - -function fitSize(projection, size, object) { - return fitExtent(projection, [[0, 0], size], object); -} - -function fitWidth(projection, width, object) { - return fit(projection, function(b) { - var w = +width, - k = w / (b[1][0] - b[0][0]), - x = (w - k * (b[1][0] + b[0][0])) / 2, - y = -k * b[0][1]; - projection.scale(150 * k).translate([x, y]); - }, object); -} - -function fitHeight(projection, height, object) { - return fit(projection, function(b) { - var h = +height, - k = h / (b[1][1] - b[0][1]), - x = -k * b[0][0], - y = (h - k * (b[1][1] + b[0][1])) / 2; - projection.scale(150 * k).translate([x, y]); - }, object); -} - - -/***/ }), - -/***/ "./node_modules/d3-geo/src/projection/gnomonic.js": -/*!********************************************************!*\ - !*** ./node_modules/d3-geo/src/projection/gnomonic.js ***! - \********************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "gnomonicRaw": () => (/* binding */ gnomonicRaw) -/* harmony export */ }); -/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math.js */ "./node_modules/d3-geo/src/math.js"); -/* harmony import */ var _azimuthal_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./azimuthal.js */ "./node_modules/d3-geo/src/projection/azimuthal.js"); -/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./index.js */ "./node_modules/d3-geo/src/projection/index.js"); - - - - -function gnomonicRaw(x, y) { - var cy = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(y), k = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(x) * cy; - return [cy * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(x) / k, (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(y) / k]; -} - -gnomonicRaw.invert = (0,_azimuthal_js__WEBPACK_IMPORTED_MODULE_1__.azimuthalInvert)(_math_js__WEBPACK_IMPORTED_MODULE_0__.atan); - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() { - return (0,_index_js__WEBPACK_IMPORTED_MODULE_2__["default"])(gnomonicRaw) - .scale(144.049) - .clipAngle(60); -} - - -/***/ }), - -/***/ "./node_modules/d3-geo/src/projection/identity.js": -/*!********************************************************!*\ - !*** ./node_modules/d3-geo/src/projection/identity.js ***! - \********************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _clip_rectangle_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../clip/rectangle.js */ "./node_modules/d3-geo/src/clip/rectangle.js"); -/* harmony import */ var _identity_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../identity.js */ "./node_modules/d3-geo/src/identity.js"); -/* harmony import */ var _transform_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../transform.js */ "./node_modules/d3-geo/src/transform.js"); -/* harmony import */ var _fit_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./fit.js */ "./node_modules/d3-geo/src/projection/fit.js"); -/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../math.js */ "./node_modules/d3-geo/src/math.js"); - - - - - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() { - var k = 1, tx = 0, ty = 0, sx = 1, sy = 1, // scale, translate and reflect - alpha = 0, ca, sa, // angle - x0 = null, y0, x1, y1, // clip extent - kx = 1, ky = 1, - transform = (0,_transform_js__WEBPACK_IMPORTED_MODULE_0__.transformer)({ - point: function(x, y) { - var p = projection([x, y]) - this.stream.point(p[0], p[1]); - } - }), - postclip = _identity_js__WEBPACK_IMPORTED_MODULE_1__["default"], - cache, - cacheStream; - - function reset() { - kx = k * sx; - ky = k * sy; - cache = cacheStream = null; - return projection; - } - - function projection (p) { - var x = p[0] * kx, y = p[1] * ky; - if (alpha) { - var t = y * ca - x * sa; - x = x * ca + y * sa; - y = t; - } - return [x + tx, y + ty]; - } - projection.invert = function(p) { - var x = p[0] - tx, y = p[1] - ty; - if (alpha) { - var t = y * ca + x * sa; - x = x * ca - y * sa; - y = t; - } - return [x / kx, y / ky]; - }; - projection.stream = function(stream) { - return cache && cacheStream === stream ? cache : cache = transform(postclip(cacheStream = stream)); - }; - projection.postclip = function(_) { - return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip; - }; - projection.clipExtent = function(_) { - 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]]; - }; - projection.scale = function(_) { - return arguments.length ? (k = +_, reset()) : k; - }; - projection.translate = function(_) { - return arguments.length ? (tx = +_[0], ty = +_[1], reset()) : [tx, ty]; - } - projection.angle = function(_) { - 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; - }; - projection.reflectX = function(_) { - return arguments.length ? (sx = _ ? -1 : 1, reset()) : sx < 0; - }; - projection.reflectY = function(_) { - return arguments.length ? (sy = _ ? -1 : 1, reset()) : sy < 0; - }; - projection.fitExtent = function(extent, object) { - return (0,_fit_js__WEBPACK_IMPORTED_MODULE_4__.fitExtent)(projection, extent, object); - }; - projection.fitSize = function(size, object) { - return (0,_fit_js__WEBPACK_IMPORTED_MODULE_4__.fitSize)(projection, size, object); - }; - projection.fitWidth = function(width, object) { - return (0,_fit_js__WEBPACK_IMPORTED_MODULE_4__.fitWidth)(projection, width, object); - }; - projection.fitHeight = function(height, object) { - return (0,_fit_js__WEBPACK_IMPORTED_MODULE_4__.fitHeight)(projection, height, object); - }; - - return projection; -} - - -/***/ }), - -/***/ "./node_modules/d3-geo/src/projection/index.js": -/*!*****************************************************!*\ - !*** ./node_modules/d3-geo/src/projection/index.js ***! - \*****************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ projection), -/* harmony export */ "projectionMutator": () => (/* binding */ projectionMutator) -/* harmony export */ }); -/* harmony import */ var _clip_antimeridian_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../clip/antimeridian.js */ "./node_modules/d3-geo/src/clip/antimeridian.js"); -/* harmony import */ var _clip_circle_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../clip/circle.js */ "./node_modules/d3-geo/src/clip/circle.js"); -/* harmony import */ var _clip_rectangle_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../clip/rectangle.js */ "./node_modules/d3-geo/src/clip/rectangle.js"); -/* harmony import */ var _compose_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../compose.js */ "./node_modules/d3-geo/src/compose.js"); -/* harmony import */ var _identity_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../identity.js */ "./node_modules/d3-geo/src/identity.js"); -/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../math.js */ "./node_modules/d3-geo/src/math.js"); -/* harmony import */ var _rotation_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../rotation.js */ "./node_modules/d3-geo/src/rotation.js"); -/* harmony import */ var _transform_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../transform.js */ "./node_modules/d3-geo/src/transform.js"); -/* harmony import */ var _fit_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./fit.js */ "./node_modules/d3-geo/src/projection/fit.js"); -/* harmony import */ var _resample_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./resample.js */ "./node_modules/d3-geo/src/projection/resample.js"); - - - - - - - - - - - -var transformRadians = (0,_transform_js__WEBPACK_IMPORTED_MODULE_0__.transformer)({ - point: function(x, y) { - this.stream.point(x * _math_js__WEBPACK_IMPORTED_MODULE_1__.radians, y * _math_js__WEBPACK_IMPORTED_MODULE_1__.radians); - } -}); - -function transformRotate(rotate) { - return (0,_transform_js__WEBPACK_IMPORTED_MODULE_0__.transformer)({ - point: function(x, y) { - var r = rotate(x, y); - return this.stream.point(r[0], r[1]); - } - }); -} - -function scaleTranslate(k, dx, dy, sx, sy) { - function transform(x, y) { - x *= sx; y *= sy; - return [dx + k * x, dy - k * y]; - } - transform.invert = function(x, y) { - return [(x - dx) / k * sx, (dy - y) / k * sy]; - }; - return transform; -} - -function scaleTranslateRotate(k, dx, dy, sx, sy, alpha) { - var cosAlpha = (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.cos)(alpha), - sinAlpha = (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.sin)(alpha), - a = cosAlpha * k, - b = sinAlpha * k, - ai = cosAlpha / k, - bi = sinAlpha / k, - ci = (sinAlpha * dy - cosAlpha * dx) / k, - fi = (sinAlpha * dx + cosAlpha * dy) / k; - function transform(x, y) { - x *= sx; y *= sy; - return [a * x - b * y + dx, dy - b * x - a * y]; - } - transform.invert = function(x, y) { - return [sx * (ai * x - bi * y + ci), sy * (fi - bi * x - ai * y)]; - }; - return transform; -} - -function projection(project) { - return projectionMutator(function() { return project; })(); -} - -function projectionMutator(projectAt) { - var project, - k = 150, // scale - x = 480, y = 250, // translate - lambda = 0, phi = 0, // center - deltaLambda = 0, deltaPhi = 0, deltaGamma = 0, rotate, // pre-rotate - alpha = 0, // post-rotate angle - sx = 1, // reflectX - sy = 1, // reflectX - theta = null, preclip = _clip_antimeridian_js__WEBPACK_IMPORTED_MODULE_2__["default"], // pre-clip angle - x0 = null, y0, x1, y1, postclip = _identity_js__WEBPACK_IMPORTED_MODULE_3__["default"], // post-clip extent - delta2 = 0.5, // precision - projectResample, - projectTransform, - projectRotateTransform, - cache, - cacheStream; - - function projection(point) { - return projectRotateTransform(point[0] * _math_js__WEBPACK_IMPORTED_MODULE_1__.radians, point[1] * _math_js__WEBPACK_IMPORTED_MODULE_1__.radians); - } - - function invert(point) { - point = projectRotateTransform.invert(point[0], point[1]); - return point && [point[0] * _math_js__WEBPACK_IMPORTED_MODULE_1__.degrees, point[1] * _math_js__WEBPACK_IMPORTED_MODULE_1__.degrees]; - } - - projection.stream = function(stream) { - return cache && cacheStream === stream ? cache : cache = transformRadians(transformRotate(rotate)(preclip(projectResample(postclip(cacheStream = stream))))); - }; - - projection.preclip = function(_) { - return arguments.length ? (preclip = _, theta = undefined, reset()) : preclip; - }; - - projection.postclip = function(_) { - return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip; - }; - - projection.clipAngle = function(_) { - 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; - }; - - projection.clipExtent = function(_) { - 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]]; - }; - - projection.scale = function(_) { - return arguments.length ? (k = +_, recenter()) : k; - }; - - projection.translate = function(_) { - return arguments.length ? (x = +_[0], y = +_[1], recenter()) : [x, y]; - }; - - projection.center = function(_) { - 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]; - }; - - projection.rotate = function(_) { - 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]; - }; - - projection.angle = function(_) { - return arguments.length ? (alpha = _ % 360 * _math_js__WEBPACK_IMPORTED_MODULE_1__.radians, recenter()) : alpha * _math_js__WEBPACK_IMPORTED_MODULE_1__.degrees; - }; - - projection.reflectX = function(_) { - return arguments.length ? (sx = _ ? -1 : 1, recenter()) : sx < 0; - }; - - projection.reflectY = function(_) { - return arguments.length ? (sy = _ ? -1 : 1, recenter()) : sy < 0; - }; - - projection.precision = function(_) { - return arguments.length ? (projectResample = (0,_resample_js__WEBPACK_IMPORTED_MODULE_6__["default"])(projectTransform, delta2 = _ * _), reset()) : (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.sqrt)(delta2); - }; - - projection.fitExtent = function(extent, object) { - return (0,_fit_js__WEBPACK_IMPORTED_MODULE_7__.fitExtent)(projection, extent, object); - }; - - projection.fitSize = function(size, object) { - return (0,_fit_js__WEBPACK_IMPORTED_MODULE_7__.fitSize)(projection, size, object); - }; - - projection.fitWidth = function(width, object) { - return (0,_fit_js__WEBPACK_IMPORTED_MODULE_7__.fitWidth)(projection, width, object); - }; - - projection.fitHeight = function(height, object) { - return (0,_fit_js__WEBPACK_IMPORTED_MODULE_7__.fitHeight)(projection, height, object); - }; - - function recenter() { - var center = scaleTranslateRotate(k, 0, 0, sx, sy, alpha).apply(null, project(lambda, phi)), - transform = (alpha ? scaleTranslateRotate : scaleTranslate)(k, x - center[0], y - center[1], sx, sy, alpha); - rotate = (0,_rotation_js__WEBPACK_IMPORTED_MODULE_8__.rotateRadians)(deltaLambda, deltaPhi, deltaGamma); - projectTransform = (0,_compose_js__WEBPACK_IMPORTED_MODULE_9__["default"])(project, transform); - projectRotateTransform = (0,_compose_js__WEBPACK_IMPORTED_MODULE_9__["default"])(rotate, projectTransform); - projectResample = (0,_resample_js__WEBPACK_IMPORTED_MODULE_6__["default"])(projectTransform, delta2); - return reset(); - } - - function reset() { - cache = cacheStream = null; - return projection; - } - - return function() { - project = projectAt.apply(this, arguments); - projection.invert = project.invert && invert; - return recenter(); - }; -} - - -/***/ }), - -/***/ "./node_modules/d3-geo/src/projection/mercator.js": -/*!********************************************************!*\ - !*** ./node_modules/d3-geo/src/projection/mercator.js ***! - \********************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "mercatorProjection": () => (/* binding */ mercatorProjection), -/* harmony export */ "mercatorRaw": () => (/* binding */ mercatorRaw) -/* harmony export */ }); -/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math.js */ "./node_modules/d3-geo/src/math.js"); -/* harmony import */ var _rotation_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../rotation.js */ "./node_modules/d3-geo/src/rotation.js"); -/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./index.js */ "./node_modules/d3-geo/src/projection/index.js"); - - - - -function mercatorRaw(lambda, phi) { - 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))]; -} - -mercatorRaw.invert = function(x, y) { - 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]; -}; - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() { - return mercatorProjection(mercatorRaw) - .scale(961 / _math_js__WEBPACK_IMPORTED_MODULE_0__.tau); -} - -function mercatorProjection(project) { - var m = (0,_index_js__WEBPACK_IMPORTED_MODULE_1__["default"])(project), - center = m.center, - scale = m.scale, - translate = m.translate, - clipExtent = m.clipExtent, - x0 = null, y0, x1, y1; // clip extent - - m.scale = function(_) { - return arguments.length ? (scale(_), reclip()) : scale(); - }; - - m.translate = function(_) { - return arguments.length ? (translate(_), reclip()) : translate(); - }; - - m.center = function(_) { - return arguments.length ? (center(_), reclip()) : center(); - }; - - m.clipExtent = function(_) { - 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]]; - }; - - function reclip() { - var k = _math_js__WEBPACK_IMPORTED_MODULE_0__.pi * scale(), - t = m((0,_rotation_js__WEBPACK_IMPORTED_MODULE_2__["default"])(m.rotate()).invert([0, 0])); - return clipExtent(x0 == null - ? [[t[0] - k, t[1] - k], [t[0] + k, t[1] + k]] : project === mercatorRaw - ? [[Math.max(t[0] - k, x0), y0], [Math.min(t[0] + k, x1), y1]] - : [[x0, Math.max(t[1] - k, y0)], [x1, Math.min(t[1] + k, y1)]]); - } - - return reclip(); -} - - -/***/ }), - -/***/ "./node_modules/d3-geo/src/projection/naturalEarth1.js": -/*!*************************************************************!*\ - !*** ./node_modules/d3-geo/src/projection/naturalEarth1.js ***! - \*************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "naturalEarth1Raw": () => (/* binding */ naturalEarth1Raw) -/* harmony export */ }); -/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./index.js */ "./node_modules/d3-geo/src/projection/index.js"); -/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math.js */ "./node_modules/d3-geo/src/math.js"); - - - -function naturalEarth1Raw(lambda, phi) { - var phi2 = phi * phi, phi4 = phi2 * phi2; - return [ - lambda * (0.8707 - 0.131979 * phi2 + phi4 * (-0.013791 + phi4 * (0.003971 * phi2 - 0.001529 * phi4))), - phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4))) - ]; -} - -naturalEarth1Raw.invert = function(x, y) { - var phi = y, i = 25, delta; - do { - var phi2 = phi * phi, phi4 = phi2 * phi2; - phi -= delta = (phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4))) - y) / - (1.007226 + phi2 * (0.015085 * 3 + phi4 * (-0.044475 * 7 + 0.028874 * 9 * phi2 - 0.005916 * 11 * phi4))); - } while ((0,_math_js__WEBPACK_IMPORTED_MODULE_0__.abs)(delta) > _math_js__WEBPACK_IMPORTED_MODULE_0__.epsilon && --i > 0); - return [ - x / (0.8707 + (phi2 = phi * phi) * (-0.131979 + phi2 * (-0.013791 + phi2 * phi2 * phi2 * (0.003971 - 0.001529 * phi2)))), - phi - ]; -}; - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() { - return (0,_index_js__WEBPACK_IMPORTED_MODULE_1__["default"])(naturalEarth1Raw) - .scale(175.295); -} - - -/***/ }), - -/***/ "./node_modules/d3-geo/src/projection/orthographic.js": -/*!************************************************************!*\ - !*** ./node_modules/d3-geo/src/projection/orthographic.js ***! - \************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "orthographicRaw": () => (/* binding */ orthographicRaw) -/* harmony export */ }); -/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math.js */ "./node_modules/d3-geo/src/math.js"); -/* harmony import */ var _azimuthal_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./azimuthal.js */ "./node_modules/d3-geo/src/projection/azimuthal.js"); -/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./index.js */ "./node_modules/d3-geo/src/projection/index.js"); - - - - -function orthographicRaw(x, y) { - 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)]; -} - -orthographicRaw.invert = (0,_azimuthal_js__WEBPACK_IMPORTED_MODULE_1__.azimuthalInvert)(_math_js__WEBPACK_IMPORTED_MODULE_0__.asin); - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() { - return (0,_index_js__WEBPACK_IMPORTED_MODULE_2__["default"])(orthographicRaw) - .scale(249.5) - .clipAngle(90 + _math_js__WEBPACK_IMPORTED_MODULE_0__.epsilon); -} - - -/***/ }), - -/***/ "./node_modules/d3-geo/src/projection/resample.js": -/*!********************************************************!*\ - !*** ./node_modules/d3-geo/src/projection/resample.js ***! - \********************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _cartesian_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../cartesian.js */ "./node_modules/d3-geo/src/cartesian.js"); -/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math.js */ "./node_modules/d3-geo/src/math.js"); -/* harmony import */ var _transform_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../transform.js */ "./node_modules/d3-geo/src/transform.js"); - - - - -var maxDepth = 16, // maximum depth of subdivision - cosMinDistance = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(30 * _math_js__WEBPACK_IMPORTED_MODULE_0__.radians); // cos(minimum angular distance) - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(project, delta2) { - return +delta2 ? resample(project, delta2) : resampleNone(project); -} - -function resampleNone(project) { - return (0,_transform_js__WEBPACK_IMPORTED_MODULE_1__.transformer)({ - point: function(x, y) { - x = project(x, y); - this.stream.point(x[0], x[1]); - } - }); -} - -function resample(project, delta2) { - - function resampleLineTo(x0, y0, lambda0, a0, b0, c0, x1, y1, lambda1, a1, b1, c1, depth, stream) { - var dx = x1 - x0, - dy = y1 - y0, - d2 = dx * dx + dy * dy; - if (d2 > 4 * delta2 && depth--) { - var a = a0 + a1, - b = b0 + b1, - c = c0 + c1, - m = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sqrt)(a * a + b * b + c * c), - phi2 = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.asin)(c /= m), - 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), - p = project(lambda2, phi2), - x2 = p[0], - y2 = p[1], - dx2 = x2 - x0, - dy2 = y2 - y0, - dz = dy * dx2 - dx * dy2; - if (dz * dz / d2 > delta2 // perpendicular projected distance - || (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.abs)((dx * dx2 + dy * dy2) / d2 - 0.5) > 0.3 // midpoint close to an end - || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { // angular distance - resampleLineTo(x0, y0, lambda0, a0, b0, c0, x2, y2, lambda2, a /= m, b /= m, c, depth, stream); - stream.point(x2, y2); - resampleLineTo(x2, y2, lambda2, a, b, c, x1, y1, lambda1, a1, b1, c1, depth, stream); - } - } - } - return function(stream) { - var lambda00, x00, y00, a00, b00, c00, // first point - lambda0, x0, y0, a0, b0, c0; // previous point - - var resampleStream = { - point: point, - lineStart: lineStart, - lineEnd: lineEnd, - polygonStart: function() { stream.polygonStart(); resampleStream.lineStart = ringStart; }, - polygonEnd: function() { stream.polygonEnd(); resampleStream.lineStart = lineStart; } - }; - - function point(x, y) { - x = project(x, y); - stream.point(x[0], x[1]); - } - - function lineStart() { - x0 = NaN; - resampleStream.point = linePoint; - stream.lineStart(); - } - - function linePoint(lambda, phi) { - var c = (0,_cartesian_js__WEBPACK_IMPORTED_MODULE_2__.cartesian)([lambda, phi]), p = project(lambda, phi); - 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); - stream.point(x0, y0); - } - - function lineEnd() { - resampleStream.point = point; - stream.lineEnd(); - } - - function ringStart() { - lineStart(); - resampleStream.point = ringPoint; - resampleStream.lineEnd = ringEnd; - } - - function ringPoint(lambda, phi) { - linePoint(lambda00 = lambda, phi), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0; - resampleStream.point = linePoint; - } - - function ringEnd() { - resampleLineTo(x0, y0, lambda0, a0, b0, c0, x00, y00, lambda00, a00, b00, c00, maxDepth, stream); - resampleStream.lineEnd = lineEnd; - lineEnd(); - } - - return resampleStream; - }; -} - - -/***/ }), - -/***/ "./node_modules/d3-geo/src/projection/stereographic.js": -/*!*************************************************************!*\ - !*** ./node_modules/d3-geo/src/projection/stereographic.js ***! - \*************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "stereographicRaw": () => (/* binding */ stereographicRaw) -/* harmony export */ }); -/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math.js */ "./node_modules/d3-geo/src/math.js"); -/* harmony import */ var _azimuthal_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./azimuthal.js */ "./node_modules/d3-geo/src/projection/azimuthal.js"); -/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./index.js */ "./node_modules/d3-geo/src/projection/index.js"); - - - - -function stereographicRaw(x, y) { - var cy = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(y), k = 1 + (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(x) * cy; - return [cy * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(x) / k, (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(y) / k]; -} - -stereographicRaw.invert = (0,_azimuthal_js__WEBPACK_IMPORTED_MODULE_1__.azimuthalInvert)(function(z) { - return 2 * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.atan)(z); -}); - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() { - return (0,_index_js__WEBPACK_IMPORTED_MODULE_2__["default"])(stereographicRaw) - .scale(250) - .clipAngle(142); -} - - -/***/ }), - -/***/ "./node_modules/d3-geo/src/projection/transverseMercator.js": -/*!******************************************************************!*\ - !*** ./node_modules/d3-geo/src/projection/transverseMercator.js ***! - \******************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "transverseMercatorRaw": () => (/* binding */ transverseMercatorRaw) -/* harmony export */ }); -/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math.js */ "./node_modules/d3-geo/src/math.js"); -/* harmony import */ var _mercator_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./mercator.js */ "./node_modules/d3-geo/src/projection/mercator.js"); - - - -function transverseMercatorRaw(lambda, phi) { - 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]; -} - -transverseMercatorRaw.invert = function(x, y) { - 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]; -}; - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() { - var m = (0,_mercator_js__WEBPACK_IMPORTED_MODULE_1__.mercatorProjection)(transverseMercatorRaw), - center = m.center, - rotate = m.rotate; - - m.center = function(_) { - return arguments.length ? center([-_[1], _[0]]) : (_ = center(), [_[1], -_[0]]); - }; - - m.rotate = function(_) { - return arguments.length ? rotate([_[0], _[1], _.length > 2 ? _[2] + 90 : 90]) : (_ = rotate(), [_[0], _[1], _[2] - 90]); - }; - - return rotate([0, 0, 90]) - .scale(159.155); -} - - -/***/ }), - -/***/ "./node_modules/d3-geo/src/rotation.js": -/*!*********************************************!*\ - !*** ./node_modules/d3-geo/src/rotation.js ***! - \*********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "rotateRadians": () => (/* binding */ rotateRadians) -/* harmony export */ }); -/* harmony import */ var _compose_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./compose.js */ "./node_modules/d3-geo/src/compose.js"); -/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./math.js */ "./node_modules/d3-geo/src/math.js"); - - - -function rotationIdentity(lambda, phi) { - return [(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 : lambda, phi]; -} - -rotationIdentity.invert = rotationIdentity; - -function rotateRadians(deltaLambda, deltaPhi, deltaGamma) { - return (deltaLambda %= _math_js__WEBPACK_IMPORTED_MODULE_0__.tau) ? (deltaPhi || deltaGamma ? (0,_compose_js__WEBPACK_IMPORTED_MODULE_1__["default"])(rotationLambda(deltaLambda), rotationPhiGamma(deltaPhi, deltaGamma)) - : rotationLambda(deltaLambda)) - : (deltaPhi || deltaGamma ? rotationPhiGamma(deltaPhi, deltaGamma) - : rotationIdentity); -} - -function forwardRotationLambda(deltaLambda) { - return function(lambda, phi) { - return lambda += deltaLambda, [lambda > _math_js__WEBPACK_IMPORTED_MODULE_0__.pi ? lambda - _math_js__WEBPACK_IMPORTED_MODULE_0__.tau : lambda < -_math_js__WEBPACK_IMPORTED_MODULE_0__.pi ? lambda + _math_js__WEBPACK_IMPORTED_MODULE_0__.tau : lambda, phi]; - }; -} - -function rotationLambda(deltaLambda) { - var rotation = forwardRotationLambda(deltaLambda); - rotation.invert = forwardRotationLambda(-deltaLambda); - return rotation; -} - -function rotationPhiGamma(deltaPhi, deltaGamma) { - var cosDeltaPhi = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(deltaPhi), - sinDeltaPhi = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(deltaPhi), - cosDeltaGamma = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(deltaGamma), - sinDeltaGamma = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(deltaGamma); - - function rotation(lambda, phi) { - var cosPhi = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(phi), - x = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(lambda) * cosPhi, - y = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(lambda) * cosPhi, - z = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(phi), - k = z * cosDeltaPhi + x * sinDeltaPhi; - return [ - (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.atan2)(y * cosDeltaGamma - k * sinDeltaGamma, x * cosDeltaPhi - z * sinDeltaPhi), - (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.asin)(k * cosDeltaGamma + y * sinDeltaGamma) - ]; - } - - rotation.invert = function(lambda, phi) { - var cosPhi = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(phi), - x = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(lambda) * cosPhi, - y = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(lambda) * cosPhi, - z = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(phi), - k = z * cosDeltaGamma - y * sinDeltaGamma; - return [ - (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.atan2)(y * cosDeltaGamma + z * sinDeltaGamma, x * cosDeltaPhi + k * sinDeltaPhi), - (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.asin)(k * cosDeltaPhi - x * sinDeltaPhi) - ]; - }; - - return rotation; -} - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(rotate) { - 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); - - function forward(coordinates) { - coordinates = rotate(coordinates[0] * _math_js__WEBPACK_IMPORTED_MODULE_0__.radians, coordinates[1] * _math_js__WEBPACK_IMPORTED_MODULE_0__.radians); - return coordinates[0] *= _math_js__WEBPACK_IMPORTED_MODULE_0__.degrees, coordinates[1] *= _math_js__WEBPACK_IMPORTED_MODULE_0__.degrees, coordinates; - } - - forward.invert = function(coordinates) { - coordinates = rotate.invert(coordinates[0] * _math_js__WEBPACK_IMPORTED_MODULE_0__.radians, coordinates[1] * _math_js__WEBPACK_IMPORTED_MODULE_0__.radians); - return coordinates[0] *= _math_js__WEBPACK_IMPORTED_MODULE_0__.degrees, coordinates[1] *= _math_js__WEBPACK_IMPORTED_MODULE_0__.degrees, coordinates; - }; - - return forward; -} - - -/***/ }), - -/***/ "./node_modules/d3-geo/src/stream.js": -/*!*******************************************!*\ - !*** ./node_modules/d3-geo/src/stream.js ***! - \*******************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -function streamGeometry(geometry, stream) { - if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) { - streamGeometryType[geometry.type](geometry, stream); - } -} - -var streamObjectType = { - Feature: function(object, stream) { - streamGeometry(object.geometry, stream); - }, - FeatureCollection: function(object, stream) { - var features = object.features, i = -1, n = features.length; - while (++i < n) streamGeometry(features[i].geometry, stream); - } -}; - -var streamGeometryType = { - Sphere: function(object, stream) { - stream.sphere(); - }, - Point: function(object, stream) { - object = object.coordinates; - stream.point(object[0], object[1], object[2]); - }, - MultiPoint: function(object, stream) { - var coordinates = object.coordinates, i = -1, n = coordinates.length; - while (++i < n) object = coordinates[i], stream.point(object[0], object[1], object[2]); - }, - LineString: function(object, stream) { - streamLine(object.coordinates, stream, 0); - }, - MultiLineString: function(object, stream) { - var coordinates = object.coordinates, i = -1, n = coordinates.length; - while (++i < n) streamLine(coordinates[i], stream, 0); - }, - Polygon: function(object, stream) { - streamPolygon(object.coordinates, stream); - }, - MultiPolygon: function(object, stream) { - var coordinates = object.coordinates, i = -1, n = coordinates.length; - while (++i < n) streamPolygon(coordinates[i], stream); - }, - GeometryCollection: function(object, stream) { - var geometries = object.geometries, i = -1, n = geometries.length; - while (++i < n) streamGeometry(geometries[i], stream); - } -}; - -function streamLine(coordinates, stream, closed) { - var i = -1, n = coordinates.length - closed, coordinate; - stream.lineStart(); - while (++i < n) coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]); - stream.lineEnd(); -} - -function streamPolygon(coordinates, stream) { - var i = -1, n = coordinates.length; - stream.polygonStart(); - while (++i < n) streamLine(coordinates[i], stream, 1); - stream.polygonEnd(); -} - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(object, stream) { - if (object && streamObjectType.hasOwnProperty(object.type)) { - streamObjectType[object.type](object, stream); - } else { - streamGeometry(object, stream); - } -} - - -/***/ }), - -/***/ "./node_modules/d3-geo/src/transform.js": -/*!**********************************************!*\ - !*** ./node_modules/d3-geo/src/transform.js ***! - \**********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "transformer": () => (/* binding */ transformer) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(methods) { - return { - stream: transformer(methods) - }; -} - -function transformer(methods) { - return function(stream) { - var s = new TransformStream; - for (var key in methods) s[key] = methods[key]; - s.stream = stream; - return s; - }; -} - -function TransformStream() {} - -TransformStream.prototype = { - constructor: TransformStream, - point: function(x, y) { this.stream.point(x, y); }, - sphere: function() { this.stream.sphere(); }, - lineStart: function() { this.stream.lineStart(); }, - lineEnd: function() { this.stream.lineEnd(); }, - polygonStart: function() { this.stream.polygonStart(); }, - polygonEnd: function() { this.stream.polygonEnd(); } -}; - - -/***/ }), - -/***/ "./node_modules/d3-hierarchy/src/accessors.js": -/*!****************************************************!*\ - !*** ./node_modules/d3-hierarchy/src/accessors.js ***! - \****************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "optional": () => (/* binding */ optional), -/* harmony export */ "required": () => (/* binding */ required) -/* harmony export */ }); -function optional(f) { - return f == null ? null : required(f); -} - -function required(f) { - if (typeof f !== "function") throw new Error; - return f; -} - - -/***/ }), - -/***/ "./node_modules/d3-hierarchy/src/array.js": -/*!************************************************!*\ - !*** ./node_modules/d3-hierarchy/src/array.js ***! - \************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "shuffle": () => (/* binding */ shuffle), -/* harmony export */ "slice": () => (/* binding */ slice) -/* harmony export */ }); -var slice = Array.prototype.slice; - -function shuffle(array) { - var m = array.length, - t, - i; - - while (m) { - i = Math.random() * m-- | 0; - t = array[m]; - array[m] = array[i]; - array[i] = t; - } - - return array; -} - - -/***/ }), - -/***/ "./node_modules/d3-hierarchy/src/cluster.js": -/*!**************************************************!*\ - !*** ./node_modules/d3-hierarchy/src/cluster.js ***! - \**************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -function defaultSeparation(a, b) { - return a.parent === b.parent ? 1 : 2; -} - -function meanX(children) { - return children.reduce(meanXReduce, 0) / children.length; -} - -function meanXReduce(x, c) { - return x + c.x; -} - -function maxY(children) { - return 1 + children.reduce(maxYReduce, 0); -} - -function maxYReduce(y, c) { - return Math.max(y, c.y); -} - -function leafLeft(node) { - var children; - while (children = node.children) node = children[0]; - return node; -} - -function leafRight(node) { - var children; - while (children = node.children) node = children[children.length - 1]; - return node; -} - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() { - var separation = defaultSeparation, - dx = 1, - dy = 1, - nodeSize = false; - - function cluster(root) { - var previousNode, - x = 0; - - // First walk, computing the initial x & y values. - root.eachAfter(function(node) { - var children = node.children; - if (children) { - node.x = meanX(children); - node.y = maxY(children); - } else { - node.x = previousNode ? x += separation(node, previousNode) : 0; - node.y = 0; - previousNode = node; - } - }); - - var left = leafLeft(root), - right = leafRight(root), - x0 = left.x - separation(left, right) / 2, - x1 = right.x + separation(right, left) / 2; - - // Second walk, normalizing x & y to the desired size. - return root.eachAfter(nodeSize ? function(node) { - node.x = (node.x - root.x) * dx; - node.y = (root.y - node.y) * dy; - } : function(node) { - node.x = (node.x - x0) / (x1 - x0) * dx; - node.y = (1 - (root.y ? node.y / root.y : 1)) * dy; - }); - } - - cluster.separation = function(x) { - return arguments.length ? (separation = x, cluster) : separation; - }; - - cluster.size = function(x) { - return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? null : [dx, dy]); - }; - - cluster.nodeSize = function(x) { - return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? [dx, dy] : null); - }; - - return cluster; -} - - -/***/ }), - -/***/ "./node_modules/d3-hierarchy/src/constant.js": -/*!***************************************************!*\ - !*** ./node_modules/d3-hierarchy/src/constant.js ***! - \***************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "constantZero": () => (/* binding */ constantZero), -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -function constantZero() { - return 0; -} - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(x) { - return function() { - return x; - }; -} - - -/***/ }), - -/***/ "./node_modules/d3-hierarchy/src/hierarchy/ancestors.js": -/*!**************************************************************!*\ - !*** ./node_modules/d3-hierarchy/src/hierarchy/ancestors.js ***! - \**************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() { - var node = this, nodes = [node]; - while (node = node.parent) { - nodes.push(node); - } - return nodes; -} - - -/***/ }), - -/***/ "./node_modules/d3-hierarchy/src/hierarchy/count.js": -/*!**********************************************************!*\ - !*** ./node_modules/d3-hierarchy/src/hierarchy/count.js ***! - \**********************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -function count(node) { - var sum = 0, - children = node.children, - i = children && children.length; - if (!i) sum = 1; - else while (--i >= 0) sum += children[i].value; - node.value = sum; -} - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() { - return this.eachAfter(count); -} - - -/***/ }), - -/***/ "./node_modules/d3-hierarchy/src/hierarchy/descendants.js": -/*!****************************************************************!*\ - !*** ./node_modules/d3-hierarchy/src/hierarchy/descendants.js ***! - \****************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() { - var nodes = []; - this.each(function(node) { - nodes.push(node); - }); - return nodes; -} - - -/***/ }), - -/***/ "./node_modules/d3-hierarchy/src/hierarchy/each.js": -/*!*********************************************************!*\ - !*** ./node_modules/d3-hierarchy/src/hierarchy/each.js ***! - \*********************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(callback) { - var node = this, current, next = [node], children, i, n; - do { - current = next.reverse(), next = []; - while (node = current.pop()) { - callback(node), children = node.children; - if (children) for (i = 0, n = children.length; i < n; ++i) { - next.push(children[i]); - } - } - } while (next.length); - return this; -} - - -/***/ }), - -/***/ "./node_modules/d3-hierarchy/src/hierarchy/eachAfter.js": -/*!**************************************************************!*\ - !*** ./node_modules/d3-hierarchy/src/hierarchy/eachAfter.js ***! - \**************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(callback) { - var node = this, nodes = [node], next = [], children, i, n; - while (node = nodes.pop()) { - next.push(node), children = node.children; - if (children) for (i = 0, n = children.length; i < n; ++i) { - nodes.push(children[i]); - } - } - while (node = next.pop()) { - callback(node); - } - return this; -} - - -/***/ }), - -/***/ "./node_modules/d3-hierarchy/src/hierarchy/eachBefore.js": -/*!***************************************************************!*\ - !*** ./node_modules/d3-hierarchy/src/hierarchy/eachBefore.js ***! - \***************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(callback) { - var node = this, nodes = [node], children, i; - while (node = nodes.pop()) { - callback(node), children = node.children; - if (children) for (i = children.length - 1; i >= 0; --i) { - nodes.push(children[i]); - } - } - return this; -} - - -/***/ }), - -/***/ "./node_modules/d3-hierarchy/src/hierarchy/index.js": -/*!**********************************************************!*\ - !*** ./node_modules/d3-hierarchy/src/hierarchy/index.js ***! - \**********************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Node": () => (/* binding */ Node), -/* harmony export */ "computeHeight": () => (/* binding */ computeHeight), -/* harmony export */ "default": () => (/* binding */ hierarchy) -/* harmony export */ }); -/* harmony import */ var _count_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./count.js */ "./node_modules/d3-hierarchy/src/hierarchy/count.js"); -/* harmony import */ var _each_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./each.js */ "./node_modules/d3-hierarchy/src/hierarchy/each.js"); -/* harmony import */ var _eachBefore_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./eachBefore.js */ "./node_modules/d3-hierarchy/src/hierarchy/eachBefore.js"); -/* harmony import */ var _eachAfter_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./eachAfter.js */ "./node_modules/d3-hierarchy/src/hierarchy/eachAfter.js"); -/* harmony import */ var _sum_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./sum.js */ "./node_modules/d3-hierarchy/src/hierarchy/sum.js"); -/* harmony import */ var _sort_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./sort.js */ "./node_modules/d3-hierarchy/src/hierarchy/sort.js"); -/* harmony import */ var _path_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./path.js */ "./node_modules/d3-hierarchy/src/hierarchy/path.js"); -/* harmony import */ var _ancestors_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./ancestors.js */ "./node_modules/d3-hierarchy/src/hierarchy/ancestors.js"); -/* harmony import */ var _descendants_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./descendants.js */ "./node_modules/d3-hierarchy/src/hierarchy/descendants.js"); -/* harmony import */ var _leaves_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./leaves.js */ "./node_modules/d3-hierarchy/src/hierarchy/leaves.js"); -/* harmony import */ var _links_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./links.js */ "./node_modules/d3-hierarchy/src/hierarchy/links.js"); - - - - - - - - - - - - -function hierarchy(data, children) { - var root = new Node(data), - valued = +data.value && (root.value = data.value), - node, - nodes = [root], - child, - childs, - i, - n; - - if (children == null) children = defaultChildren; - - while (node = nodes.pop()) { - if (valued) node.value = +node.data.value; - if ((childs = children(node.data)) && (n = childs.length)) { - node.children = new Array(n); - for (i = n - 1; i >= 0; --i) { - nodes.push(child = node.children[i] = new Node(childs[i])); - child.parent = node; - child.depth = node.depth + 1; - } - } - } - - return root.eachBefore(computeHeight); -} - -function node_copy() { - return hierarchy(this).eachBefore(copyData); -} - -function defaultChildren(d) { - return d.children; -} - -function copyData(node) { - node.data = node.data.data; -} - -function computeHeight(node) { - var height = 0; - do node.height = height; - while ((node = node.parent) && (node.height < ++height)); -} - -function Node(data) { - this.data = data; - this.depth = - this.height = 0; - this.parent = null; -} - -Node.prototype = hierarchy.prototype = { - constructor: Node, - count: _count_js__WEBPACK_IMPORTED_MODULE_0__["default"], - each: _each_js__WEBPACK_IMPORTED_MODULE_1__["default"], - eachAfter: _eachAfter_js__WEBPACK_IMPORTED_MODULE_2__["default"], - eachBefore: _eachBefore_js__WEBPACK_IMPORTED_MODULE_3__["default"], - sum: _sum_js__WEBPACK_IMPORTED_MODULE_4__["default"], - sort: _sort_js__WEBPACK_IMPORTED_MODULE_5__["default"], - path: _path_js__WEBPACK_IMPORTED_MODULE_6__["default"], - ancestors: _ancestors_js__WEBPACK_IMPORTED_MODULE_7__["default"], - descendants: _descendants_js__WEBPACK_IMPORTED_MODULE_8__["default"], - leaves: _leaves_js__WEBPACK_IMPORTED_MODULE_9__["default"], - links: _links_js__WEBPACK_IMPORTED_MODULE_10__["default"], - copy: node_copy -}; - - -/***/ }), - -/***/ "./node_modules/d3-hierarchy/src/hierarchy/leaves.js": -/*!***********************************************************!*\ - !*** ./node_modules/d3-hierarchy/src/hierarchy/leaves.js ***! - \***********************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() { - var leaves = []; - this.eachBefore(function(node) { - if (!node.children) { - leaves.push(node); - } - }); - return leaves; -} - - -/***/ }), - -/***/ "./node_modules/d3-hierarchy/src/hierarchy/links.js": -/*!**********************************************************!*\ - !*** ./node_modules/d3-hierarchy/src/hierarchy/links.js ***! - \**********************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() { - var root = this, links = []; - root.each(function(node) { - if (node !== root) { // Don’t include the root’s parent, if any. - links.push({source: node.parent, target: node}); - } - }); - return links; -} - - -/***/ }), - -/***/ "./node_modules/d3-hierarchy/src/hierarchy/path.js": -/*!*********************************************************!*\ - !*** ./node_modules/d3-hierarchy/src/hierarchy/path.js ***! - \*********************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(end) { - var start = this, - ancestor = leastCommonAncestor(start, end), - nodes = [start]; - while (start !== ancestor) { - start = start.parent; - nodes.push(start); - } - var k = nodes.length; - while (end !== ancestor) { - nodes.splice(k, 0, end); - end = end.parent; - } - return nodes; -} - -function leastCommonAncestor(a, b) { - if (a === b) return a; - var aNodes = a.ancestors(), - bNodes = b.ancestors(), - c = null; - a = aNodes.pop(); - b = bNodes.pop(); - while (a === b) { - c = a; - a = aNodes.pop(); - b = bNodes.pop(); - } - return c; -} - - -/***/ }), - -/***/ "./node_modules/d3-hierarchy/src/hierarchy/sort.js": -/*!*********************************************************!*\ - !*** ./node_modules/d3-hierarchy/src/hierarchy/sort.js ***! - \*********************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(compare) { - return this.eachBefore(function(node) { - if (node.children) { - node.children.sort(compare); - } - }); -} - - -/***/ }), - -/***/ "./node_modules/d3-hierarchy/src/hierarchy/sum.js": -/*!********************************************************!*\ - !*** ./node_modules/d3-hierarchy/src/hierarchy/sum.js ***! - \********************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(value) { - return this.eachAfter(function(node) { - var sum = +value(node.data) || 0, - children = node.children, - i = children && children.length; - while (--i >= 0) sum += children[i].value; - node.value = sum; - }); -} - - -/***/ }), - -/***/ "./node_modules/d3-hierarchy/src/index.js": -/*!************************************************!*\ - !*** ./node_modules/d3-hierarchy/src/index.js ***! - \************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "cluster": () => (/* reexport safe */ _cluster_js__WEBPACK_IMPORTED_MODULE_0__["default"]), -/* harmony export */ "hierarchy": () => (/* reexport safe */ _hierarchy_index_js__WEBPACK_IMPORTED_MODULE_1__["default"]), -/* harmony export */ "pack": () => (/* reexport safe */ _pack_index_js__WEBPACK_IMPORTED_MODULE_2__["default"]), -/* harmony export */ "packEnclose": () => (/* reexport safe */ _pack_enclose_js__WEBPACK_IMPORTED_MODULE_4__["default"]), -/* harmony export */ "packSiblings": () => (/* reexport safe */ _pack_siblings_js__WEBPACK_IMPORTED_MODULE_3__["default"]), -/* harmony export */ "partition": () => (/* reexport safe */ _partition_js__WEBPACK_IMPORTED_MODULE_5__["default"]), -/* harmony export */ "stratify": () => (/* reexport safe */ _stratify_js__WEBPACK_IMPORTED_MODULE_6__["default"]), -/* harmony export */ "tree": () => (/* reexport safe */ _tree_js__WEBPACK_IMPORTED_MODULE_7__["default"]), -/* harmony export */ "treemap": () => (/* reexport safe */ _treemap_index_js__WEBPACK_IMPORTED_MODULE_8__["default"]), -/* harmony export */ "treemapBinary": () => (/* reexport safe */ _treemap_binary_js__WEBPACK_IMPORTED_MODULE_9__["default"]), -/* harmony export */ "treemapDice": () => (/* reexport safe */ _treemap_dice_js__WEBPACK_IMPORTED_MODULE_10__["default"]), -/* harmony export */ "treemapResquarify": () => (/* reexport safe */ _treemap_resquarify_js__WEBPACK_IMPORTED_MODULE_14__["default"]), -/* harmony export */ "treemapSlice": () => (/* reexport safe */ _treemap_slice_js__WEBPACK_IMPORTED_MODULE_11__["default"]), -/* harmony export */ "treemapSliceDice": () => (/* reexport safe */ _treemap_sliceDice_js__WEBPACK_IMPORTED_MODULE_12__["default"]), -/* harmony export */ "treemapSquarify": () => (/* reexport safe */ _treemap_squarify_js__WEBPACK_IMPORTED_MODULE_13__["default"]) -/* harmony export */ }); -/* harmony import */ var _cluster_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./cluster.js */ "./node_modules/d3-hierarchy/src/cluster.js"); -/* harmony import */ var _hierarchy_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./hierarchy/index.js */ "./node_modules/d3-hierarchy/src/hierarchy/index.js"); -/* harmony import */ var _pack_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./pack/index.js */ "./node_modules/d3-hierarchy/src/pack/index.js"); -/* harmony import */ var _pack_siblings_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./pack/siblings.js */ "./node_modules/d3-hierarchy/src/pack/siblings.js"); -/* harmony import */ var _pack_enclose_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./pack/enclose.js */ "./node_modules/d3-hierarchy/src/pack/enclose.js"); -/* harmony import */ var _partition_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./partition.js */ "./node_modules/d3-hierarchy/src/partition.js"); -/* harmony import */ var _stratify_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./stratify.js */ "./node_modules/d3-hierarchy/src/stratify.js"); -/* harmony import */ var _tree_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./tree.js */ "./node_modules/d3-hierarchy/src/tree.js"); -/* harmony import */ var _treemap_index_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./treemap/index.js */ "./node_modules/d3-hierarchy/src/treemap/index.js"); -/* harmony import */ var _treemap_binary_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./treemap/binary.js */ "./node_modules/d3-hierarchy/src/treemap/binary.js"); -/* harmony import */ var _treemap_dice_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./treemap/dice.js */ "./node_modules/d3-hierarchy/src/treemap/dice.js"); -/* harmony import */ var _treemap_slice_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./treemap/slice.js */ "./node_modules/d3-hierarchy/src/treemap/slice.js"); -/* harmony import */ var _treemap_sliceDice_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./treemap/sliceDice.js */ "./node_modules/d3-hierarchy/src/treemap/sliceDice.js"); -/* harmony import */ var _treemap_squarify_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./treemap/squarify.js */ "./node_modules/d3-hierarchy/src/treemap/squarify.js"); -/* harmony import */ var _treemap_resquarify_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./treemap/resquarify.js */ "./node_modules/d3-hierarchy/src/treemap/resquarify.js"); - - - - - - - - - - - - - - - - - -/***/ }), - -/***/ "./node_modules/d3-hierarchy/src/pack/enclose.js": -/*!*******************************************************!*\ - !*** ./node_modules/d3-hierarchy/src/pack/enclose.js ***! - \*******************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _array_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../array.js */ "./node_modules/d3-hierarchy/src/array.js"); - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(circles) { - var i = 0, n = (circles = (0,_array_js__WEBPACK_IMPORTED_MODULE_0__.shuffle)(_array_js__WEBPACK_IMPORTED_MODULE_0__.slice.call(circles))).length, B = [], p, e; - - while (i < n) { - p = circles[i]; - if (e && enclosesWeak(e, p)) ++i; - else e = encloseBasis(B = extendBasis(B, p)), i = 0; - } - - return e; -} - -function extendBasis(B, p) { - var i, j; - - if (enclosesWeakAll(p, B)) return [p]; - - // If we get here then B must have at least one element. - for (i = 0; i < B.length; ++i) { - if (enclosesNot(p, B[i]) - && enclosesWeakAll(encloseBasis2(B[i], p), B)) { - return [B[i], p]; - } - } - - // If we get here then B must have at least two elements. - for (i = 0; i < B.length - 1; ++i) { - for (j = i + 1; j < B.length; ++j) { - if (enclosesNot(encloseBasis2(B[i], B[j]), p) - && enclosesNot(encloseBasis2(B[i], p), B[j]) - && enclosesNot(encloseBasis2(B[j], p), B[i]) - && enclosesWeakAll(encloseBasis3(B[i], B[j], p), B)) { - return [B[i], B[j], p]; - } - } - } - - // If we get here then something is very wrong. - throw new Error; -} - -function enclosesNot(a, b) { - var dr = a.r - b.r, dx = b.x - a.x, dy = b.y - a.y; - return dr < 0 || dr * dr < dx * dx + dy * dy; -} - -function enclosesWeak(a, b) { - var dr = a.r - b.r + 1e-6, dx = b.x - a.x, dy = b.y - a.y; - return dr > 0 && dr * dr > dx * dx + dy * dy; -} - -function enclosesWeakAll(a, B) { - for (var i = 0; i < B.length; ++i) { - if (!enclosesWeak(a, B[i])) { - return false; - } - } - return true; -} - -function encloseBasis(B) { - switch (B.length) { - case 1: return encloseBasis1(B[0]); - case 2: return encloseBasis2(B[0], B[1]); - case 3: return encloseBasis3(B[0], B[1], B[2]); - } -} - -function encloseBasis1(a) { - return { - x: a.x, - y: a.y, - r: a.r - }; -} - -function encloseBasis2(a, b) { - var x1 = a.x, y1 = a.y, r1 = a.r, - x2 = b.x, y2 = b.y, r2 = b.r, - x21 = x2 - x1, y21 = y2 - y1, r21 = r2 - r1, - l = Math.sqrt(x21 * x21 + y21 * y21); - return { - x: (x1 + x2 + x21 / l * r21) / 2, - y: (y1 + y2 + y21 / l * r21) / 2, - r: (l + r1 + r2) / 2 - }; -} - -function encloseBasis3(a, b, c) { - var x1 = a.x, y1 = a.y, r1 = a.r, - x2 = b.x, y2 = b.y, r2 = b.r, - x3 = c.x, y3 = c.y, r3 = c.r, - a2 = x1 - x2, - a3 = x1 - x3, - b2 = y1 - y2, - b3 = y1 - y3, - c2 = r2 - r1, - c3 = r3 - r1, - d1 = x1 * x1 + y1 * y1 - r1 * r1, - d2 = d1 - x2 * x2 - y2 * y2 + r2 * r2, - d3 = d1 - x3 * x3 - y3 * y3 + r3 * r3, - ab = a3 * b2 - a2 * b3, - xa = (b2 * d3 - b3 * d2) / (ab * 2) - x1, - xb = (b3 * c2 - b2 * c3) / ab, - ya = (a3 * d2 - a2 * d3) / (ab * 2) - y1, - yb = (a2 * c3 - a3 * c2) / ab, - A = xb * xb + yb * yb - 1, - B = 2 * (r1 + xa * xb + ya * yb), - C = xa * xa + ya * ya - r1 * r1, - r = -(A ? (B + Math.sqrt(B * B - 4 * A * C)) / (2 * A) : C / B); - return { - x: x1 + xa + xb * r, - y: y1 + ya + yb * r, - r: r - }; -} - - -/***/ }), - -/***/ "./node_modules/d3-hierarchy/src/pack/index.js": -/*!*****************************************************!*\ - !*** ./node_modules/d3-hierarchy/src/pack/index.js ***! - \*****************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _siblings_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./siblings.js */ "./node_modules/d3-hierarchy/src/pack/siblings.js"); -/* harmony import */ var _accessors_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../accessors.js */ "./node_modules/d3-hierarchy/src/accessors.js"); -/* harmony import */ var _constant_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../constant.js */ "./node_modules/d3-hierarchy/src/constant.js"); - - - - -function defaultRadius(d) { - return Math.sqrt(d.value); -} - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() { - var radius = null, - dx = 1, - dy = 1, - padding = _constant_js__WEBPACK_IMPORTED_MODULE_0__.constantZero; - - function pack(root) { - root.x = dx / 2, root.y = dy / 2; - if (radius) { - root.eachBefore(radiusLeaf(radius)) - .eachAfter(packChildren(padding, 0.5)) - .eachBefore(translateChild(1)); - } else { - root.eachBefore(radiusLeaf(defaultRadius)) - .eachAfter(packChildren(_constant_js__WEBPACK_IMPORTED_MODULE_0__.constantZero, 1)) - .eachAfter(packChildren(padding, root.r / Math.min(dx, dy))) - .eachBefore(translateChild(Math.min(dx, dy) / (2 * root.r))); - } - return root; - } - - pack.radius = function(x) { - return arguments.length ? (radius = (0,_accessors_js__WEBPACK_IMPORTED_MODULE_1__.optional)(x), pack) : radius; - }; - - pack.size = function(x) { - return arguments.length ? (dx = +x[0], dy = +x[1], pack) : [dx, dy]; - }; - - pack.padding = function(x) { - return arguments.length ? (padding = typeof x === "function" ? x : (0,_constant_js__WEBPACK_IMPORTED_MODULE_0__["default"])(+x), pack) : padding; - }; - - return pack; -} - -function radiusLeaf(radius) { - return function(node) { - if (!node.children) { - node.r = Math.max(0, +radius(node) || 0); - } - }; -} - -function packChildren(padding, k) { - return function(node) { - if (children = node.children) { - var children, - i, - n = children.length, - r = padding(node) * k || 0, - e; - - if (r) for (i = 0; i < n; ++i) children[i].r += r; - e = (0,_siblings_js__WEBPACK_IMPORTED_MODULE_2__.packEnclose)(children); - if (r) for (i = 0; i < n; ++i) children[i].r -= r; - node.r = e + r; - } - }; -} - -function translateChild(k) { - return function(node) { - var parent = node.parent; - node.r *= k; - if (parent) { - node.x = parent.x + k * node.x; - node.y = parent.y + k * node.y; - } - }; -} - - -/***/ }), - -/***/ "./node_modules/d3-hierarchy/src/pack/siblings.js": -/*!********************************************************!*\ - !*** ./node_modules/d3-hierarchy/src/pack/siblings.js ***! - \********************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "packEnclose": () => (/* binding */ packEnclose) -/* harmony export */ }); -/* harmony import */ var _enclose_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./enclose.js */ "./node_modules/d3-hierarchy/src/pack/enclose.js"); - - -function place(b, a, c) { - var dx = b.x - a.x, x, a2, - dy = b.y - a.y, y, b2, - d2 = dx * dx + dy * dy; - if (d2) { - a2 = a.r + c.r, a2 *= a2; - b2 = b.r + c.r, b2 *= b2; - if (a2 > b2) { - x = (d2 + b2 - a2) / (2 * d2); - y = Math.sqrt(Math.max(0, b2 / d2 - x * x)); - c.x = b.x - x * dx - y * dy; - c.y = b.y - x * dy + y * dx; - } else { - x = (d2 + a2 - b2) / (2 * d2); - y = Math.sqrt(Math.max(0, a2 / d2 - x * x)); - c.x = a.x + x * dx - y * dy; - c.y = a.y + x * dy + y * dx; - } - } else { - c.x = a.x + c.r; - c.y = a.y; - } -} - -function intersects(a, b) { - var dr = a.r + b.r - 1e-6, dx = b.x - a.x, dy = b.y - a.y; - return dr > 0 && dr * dr > dx * dx + dy * dy; -} - -function score(node) { - var a = node._, - b = node.next._, - ab = a.r + b.r, - dx = (a.x * b.r + b.x * a.r) / ab, - dy = (a.y * b.r + b.y * a.r) / ab; - return dx * dx + dy * dy; -} - -function Node(circle) { - this._ = circle; - this.next = null; - this.previous = null; -} - -function packEnclose(circles) { - if (!(n = circles.length)) return 0; - - var a, b, c, n, aa, ca, i, j, k, sj, sk; - - // Place the first circle. - a = circles[0], a.x = 0, a.y = 0; - if (!(n > 1)) return a.r; - - // Place the second circle. - b = circles[1], a.x = -b.r, b.x = a.r, b.y = 0; - if (!(n > 2)) return a.r + b.r; - - // Place the third circle. - place(b, a, c = circles[2]); - - // Initialize the front-chain using the first three circles a, b and c. - a = new Node(a), b = new Node(b), c = new Node(c); - a.next = c.previous = b; - b.next = a.previous = c; - c.next = b.previous = a; - - // Attempt to place each remaining circle… - pack: for (i = 3; i < n; ++i) { - place(a._, b._, c = circles[i]), c = new Node(c); - - // Find the closest intersecting circle on the front-chain, if any. - // “Closeness” is determined by linear distance along the front-chain. - // “Ahead” or “behind” is likewise determined by linear distance. - j = b.next, k = a.previous, sj = b._.r, sk = a._.r; - do { - if (sj <= sk) { - if (intersects(j._, c._)) { - b = j, a.next = b, b.previous = a, --i; - continue pack; - } - sj += j._.r, j = j.next; - } else { - if (intersects(k._, c._)) { - a = k, a.next = b, b.previous = a, --i; - continue pack; - } - sk += k._.r, k = k.previous; - } - } while (j !== k.next); - - // Success! Insert the new circle c between a and b. - c.previous = a, c.next = b, a.next = b.previous = b = c; - - // Compute the new closest circle pair to the centroid. - aa = score(a); - while ((c = c.next) !== b) { - if ((ca = score(c)) < aa) { - a = c, aa = ca; - } - } - b = a.next; - } - - // Compute the enclosing circle of the front chain. - a = [b._], c = b; while ((c = c.next) !== b) a.push(c._); c = (0,_enclose_js__WEBPACK_IMPORTED_MODULE_0__["default"])(a); - - // Translate the circles to put the enclosing circle around the origin. - for (i = 0; i < n; ++i) a = circles[i], a.x -= c.x, a.y -= c.y; - - return c.r; -} - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(circles) { - packEnclose(circles); - return circles; -} - - -/***/ }), - -/***/ "./node_modules/d3-hierarchy/src/partition.js": -/*!****************************************************!*\ - !*** ./node_modules/d3-hierarchy/src/partition.js ***! - \****************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _treemap_round_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./treemap/round.js */ "./node_modules/d3-hierarchy/src/treemap/round.js"); -/* harmony import */ var _treemap_dice_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./treemap/dice.js */ "./node_modules/d3-hierarchy/src/treemap/dice.js"); - - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() { - var dx = 1, - dy = 1, - padding = 0, - round = false; - - function partition(root) { - var n = root.height + 1; - root.x0 = - root.y0 = padding; - root.x1 = dx; - root.y1 = dy / n; - root.eachBefore(positionNode(dy, n)); - if (round) root.eachBefore(_treemap_round_js__WEBPACK_IMPORTED_MODULE_0__["default"]); - return root; - } - - function positionNode(dy, n) { - return function(node) { - if (node.children) { - (0,_treemap_dice_js__WEBPACK_IMPORTED_MODULE_1__["default"])(node, node.x0, dy * (node.depth + 1) / n, node.x1, dy * (node.depth + 2) / n); - } - var x0 = node.x0, - y0 = node.y0, - x1 = node.x1 - padding, - y1 = node.y1 - padding; - if (x1 < x0) x0 = x1 = (x0 + x1) / 2; - if (y1 < y0) y0 = y1 = (y0 + y1) / 2; - node.x0 = x0; - node.y0 = y0; - node.x1 = x1; - node.y1 = y1; - }; - } - - partition.round = function(x) { - return arguments.length ? (round = !!x, partition) : round; - }; - - partition.size = function(x) { - return arguments.length ? (dx = +x[0], dy = +x[1], partition) : [dx, dy]; - }; - - partition.padding = function(x) { - return arguments.length ? (padding = +x, partition) : padding; - }; - - return partition; -} - - -/***/ }), - -/***/ "./node_modules/d3-hierarchy/src/stratify.js": -/*!***************************************************!*\ - !*** ./node_modules/d3-hierarchy/src/stratify.js ***! - \***************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _accessors_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./accessors.js */ "./node_modules/d3-hierarchy/src/accessors.js"); -/* harmony import */ var _hierarchy_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./hierarchy/index.js */ "./node_modules/d3-hierarchy/src/hierarchy/index.js"); - - - -var keyPrefix = "$", // Protect against keys like “__proto__”. - preroot = {depth: -1}, - ambiguous = {}; - -function defaultId(d) { - return d.id; -} - -function defaultParentId(d) { - return d.parentId; -} - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() { - var id = defaultId, - parentId = defaultParentId; - - function stratify(data) { - var d, - i, - n = data.length, - root, - parent, - node, - nodes = new Array(n), - nodeId, - nodeKey, - nodeByKey = {}; - - for (i = 0; i < n; ++i) { - d = data[i], node = nodes[i] = new _hierarchy_index_js__WEBPACK_IMPORTED_MODULE_0__.Node(d); - if ((nodeId = id(d, i, data)) != null && (nodeId += "")) { - nodeKey = keyPrefix + (node.id = nodeId); - nodeByKey[nodeKey] = nodeKey in nodeByKey ? ambiguous : node; - } - } - - for (i = 0; i < n; ++i) { - node = nodes[i], nodeId = parentId(data[i], i, data); - if (nodeId == null || !(nodeId += "")) { - if (root) throw new Error("multiple roots"); - root = node; - } else { - parent = nodeByKey[keyPrefix + nodeId]; - if (!parent) throw new Error("missing: " + nodeId); - if (parent === ambiguous) throw new Error("ambiguous: " + nodeId); - if (parent.children) parent.children.push(node); - else parent.children = [node]; - node.parent = parent; - } - } - - if (!root) throw new Error("no root"); - root.parent = preroot; - root.eachBefore(function(node) { node.depth = node.parent.depth + 1; --n; }).eachBefore(_hierarchy_index_js__WEBPACK_IMPORTED_MODULE_0__.computeHeight); - root.parent = null; - if (n > 0) throw new Error("cycle"); - - return root; - } - - stratify.id = function(x) { - return arguments.length ? (id = (0,_accessors_js__WEBPACK_IMPORTED_MODULE_1__.required)(x), stratify) : id; - }; - - stratify.parentId = function(x) { - return arguments.length ? (parentId = (0,_accessors_js__WEBPACK_IMPORTED_MODULE_1__.required)(x), stratify) : parentId; - }; - - return stratify; -} - - -/***/ }), - -/***/ "./node_modules/d3-hierarchy/src/tree.js": -/*!***********************************************!*\ - !*** ./node_modules/d3-hierarchy/src/tree.js ***! - \***********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _hierarchy_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./hierarchy/index.js */ "./node_modules/d3-hierarchy/src/hierarchy/index.js"); - - -function defaultSeparation(a, b) { - return a.parent === b.parent ? 1 : 2; -} - -// function radialSeparation(a, b) { -// return (a.parent === b.parent ? 1 : 2) / a.depth; -// } - -// This function is used to traverse the left contour of a subtree (or -// subforest). It returns the successor of v on this contour. This successor is -// either given by the leftmost child of v or by the thread of v. The function -// returns null if and only if v is on the highest level of its subtree. -function nextLeft(v) { - var children = v.children; - return children ? children[0] : v.t; -} - -// This function works analogously to nextLeft. -function nextRight(v) { - var children = v.children; - return children ? children[children.length - 1] : v.t; -} - -// Shifts the current subtree rooted at w+. This is done by increasing -// prelim(w+) and mod(w+) by shift. -function moveSubtree(wm, wp, shift) { - var change = shift / (wp.i - wm.i); - wp.c -= change; - wp.s += shift; - wm.c += change; - wp.z += shift; - wp.m += shift; -} - -// All other shifts, applied to the smaller subtrees between w- and w+, are -// performed by this function. To prepare the shifts, we have to adjust -// change(w+), shift(w+), and change(w-). -function executeShifts(v) { - var shift = 0, - change = 0, - children = v.children, - i = children.length, - w; - while (--i >= 0) { - w = children[i]; - w.z += shift; - w.m += shift; - shift += w.s + (change += w.c); - } -} - -// If vi-’s ancestor is a sibling of v, returns vi-’s ancestor. Otherwise, -// returns the specified (default) ancestor. -function nextAncestor(vim, v, ancestor) { - return vim.a.parent === v.parent ? vim.a : ancestor; -} - -function TreeNode(node, i) { - this._ = node; - this.parent = null; - this.children = null; - this.A = null; // default ancestor - this.a = this; // ancestor - this.z = 0; // prelim - this.m = 0; // mod - this.c = 0; // change - this.s = 0; // shift - this.t = null; // thread - this.i = i; // number -} - -TreeNode.prototype = Object.create(_hierarchy_index_js__WEBPACK_IMPORTED_MODULE_0__.Node.prototype); - -function treeRoot(root) { - var tree = new TreeNode(root, 0), - node, - nodes = [tree], - child, - children, - i, - n; - - while (node = nodes.pop()) { - if (children = node._.children) { - node.children = new Array(n = children.length); - for (i = n - 1; i >= 0; --i) { - nodes.push(child = node.children[i] = new TreeNode(children[i], i)); - child.parent = node; - } - } - } - - (tree.parent = new TreeNode(null, 0)).children = [tree]; - return tree; -} - -// Node-link tree diagram using the Reingold-Tilford "tidy" algorithm -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() { - var separation = defaultSeparation, - dx = 1, - dy = 1, - nodeSize = null; - - function tree(root) { - var t = treeRoot(root); - - // Compute the layout using Buchheim et al.’s algorithm. - t.eachAfter(firstWalk), t.parent.m = -t.z; - t.eachBefore(secondWalk); - - // If a fixed node size is specified, scale x and y. - if (nodeSize) root.eachBefore(sizeNode); - - // If a fixed tree size is specified, scale x and y based on the extent. - // Compute the left-most, right-most, and depth-most nodes for extents. - else { - var left = root, - right = root, - bottom = root; - root.eachBefore(function(node) { - if (node.x < left.x) left = node; - if (node.x > right.x) right = node; - if (node.depth > bottom.depth) bottom = node; - }); - var s = left === right ? 1 : separation(left, right) / 2, - tx = s - left.x, - kx = dx / (right.x + s + tx), - ky = dy / (bottom.depth || 1); - root.eachBefore(function(node) { - node.x = (node.x + tx) * kx; - node.y = node.depth * ky; - }); - } - - return root; - } - - // Computes a preliminary x-coordinate for v. Before that, FIRST WALK is - // applied recursively to the children of v, as well as the function - // APPORTION. After spacing out the children by calling EXECUTE SHIFTS, the - // node v is placed to the midpoint of its outermost children. - function firstWalk(v) { - var children = v.children, - siblings = v.parent.children, - w = v.i ? siblings[v.i - 1] : null; - if (children) { - executeShifts(v); - var midpoint = (children[0].z + children[children.length - 1].z) / 2; - if (w) { - v.z = w.z + separation(v._, w._); - v.m = v.z - midpoint; - } else { - v.z = midpoint; - } - } else if (w) { - v.z = w.z + separation(v._, w._); - } - v.parent.A = apportion(v, w, v.parent.A || siblings[0]); - } - - // Computes all real x-coordinates by summing up the modifiers recursively. - function secondWalk(v) { - v._.x = v.z + v.parent.m; - v.m += v.parent.m; - } - - // The core of the algorithm. Here, a new subtree is combined with the - // previous subtrees. Threads are used to traverse the inside and outside - // contours of the left and right subtree up to the highest common level. The - // vertices used for the traversals are vi+, vi-, vo-, and vo+, where the - // superscript o means outside and i means inside, the subscript - means left - // subtree and + means right subtree. For summing up the modifiers along the - // contour, we use respective variables si+, si-, so-, and so+. Whenever two - // nodes of the inside contours conflict, we compute the left one of the - // greatest uncommon ancestors using the function ANCESTOR and call MOVE - // SUBTREE to shift the subtree and prepare the shifts of smaller subtrees. - // Finally, we add a new thread (if necessary). - function apportion(v, w, ancestor) { - if (w) { - var vip = v, - vop = v, - vim = w, - vom = vip.parent.children[0], - sip = vip.m, - sop = vop.m, - sim = vim.m, - som = vom.m, - shift; - while (vim = nextRight(vim), vip = nextLeft(vip), vim && vip) { - vom = nextLeft(vom); - vop = nextRight(vop); - vop.a = v; - shift = vim.z + sim - vip.z - sip + separation(vim._, vip._); - if (shift > 0) { - moveSubtree(nextAncestor(vim, v, ancestor), v, shift); - sip += shift; - sop += shift; - } - sim += vim.m; - sip += vip.m; - som += vom.m; - sop += vop.m; - } - if (vim && !nextRight(vop)) { - vop.t = vim; - vop.m += sim - sop; - } - if (vip && !nextLeft(vom)) { - vom.t = vip; - vom.m += sip - som; - ancestor = v; - } - } - return ancestor; - } - - function sizeNode(node) { - node.x *= dx; - node.y = node.depth * dy; - } - - tree.separation = function(x) { - return arguments.length ? (separation = x, tree) : separation; - }; - - tree.size = function(x) { - return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], tree) : (nodeSize ? null : [dx, dy]); - }; - - tree.nodeSize = function(x) { - return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], tree) : (nodeSize ? [dx, dy] : null); - }; - - return tree; -} - - -/***/ }), - -/***/ "./node_modules/d3-hierarchy/src/treemap/binary.js": -/*!*********************************************************!*\ - !*** ./node_modules/d3-hierarchy/src/treemap/binary.js ***! - \*********************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(parent, x0, y0, x1, y1) { - var nodes = parent.children, - i, n = nodes.length, - sum, sums = new Array(n + 1); - - for (sums[0] = sum = i = 0; i < n; ++i) { - sums[i + 1] = sum += nodes[i].value; - } - - partition(0, n, parent.value, x0, y0, x1, y1); - - function partition(i, j, value, x0, y0, x1, y1) { - if (i >= j - 1) { - var node = nodes[i]; - node.x0 = x0, node.y0 = y0; - node.x1 = x1, node.y1 = y1; - return; - } - - var valueOffset = sums[i], - valueTarget = (value / 2) + valueOffset, - k = i + 1, - hi = j - 1; - - while (k < hi) { - var mid = k + hi >>> 1; - if (sums[mid] < valueTarget) k = mid + 1; - else hi = mid; - } - - if ((valueTarget - sums[k - 1]) < (sums[k] - valueTarget) && i + 1 < k) --k; - - var valueLeft = sums[k] - valueOffset, - valueRight = value - valueLeft; - - if ((x1 - x0) > (y1 - y0)) { - var xk = (x0 * valueRight + x1 * valueLeft) / value; - partition(i, k, valueLeft, x0, y0, xk, y1); - partition(k, j, valueRight, xk, y0, x1, y1); - } else { - var yk = (y0 * valueRight + y1 * valueLeft) / value; - partition(i, k, valueLeft, x0, y0, x1, yk); - partition(k, j, valueRight, x0, yk, x1, y1); - } - } -} - - -/***/ }), - -/***/ "./node_modules/d3-hierarchy/src/treemap/dice.js": -/*!*******************************************************!*\ - !*** ./node_modules/d3-hierarchy/src/treemap/dice.js ***! - \*******************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(parent, x0, y0, x1, y1) { - var nodes = parent.children, - node, - i = -1, - n = nodes.length, - k = parent.value && (x1 - x0) / parent.value; - - while (++i < n) { - node = nodes[i], node.y0 = y0, node.y1 = y1; - node.x0 = x0, node.x1 = x0 += node.value * k; - } -} - - -/***/ }), - -/***/ "./node_modules/d3-hierarchy/src/treemap/index.js": -/*!********************************************************!*\ - !*** ./node_modules/d3-hierarchy/src/treemap/index.js ***! - \********************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _round_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./round.js */ "./node_modules/d3-hierarchy/src/treemap/round.js"); -/* harmony import */ var _squarify_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./squarify.js */ "./node_modules/d3-hierarchy/src/treemap/squarify.js"); -/* harmony import */ var _accessors_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../accessors.js */ "./node_modules/d3-hierarchy/src/accessors.js"); -/* harmony import */ var _constant_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../constant.js */ "./node_modules/d3-hierarchy/src/constant.js"); - - - - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() { - var tile = _squarify_js__WEBPACK_IMPORTED_MODULE_0__["default"], - round = false, - dx = 1, - dy = 1, - paddingStack = [0], - paddingInner = _constant_js__WEBPACK_IMPORTED_MODULE_1__.constantZero, - paddingTop = _constant_js__WEBPACK_IMPORTED_MODULE_1__.constantZero, - paddingRight = _constant_js__WEBPACK_IMPORTED_MODULE_1__.constantZero, - paddingBottom = _constant_js__WEBPACK_IMPORTED_MODULE_1__.constantZero, - paddingLeft = _constant_js__WEBPACK_IMPORTED_MODULE_1__.constantZero; - - function treemap(root) { - root.x0 = - root.y0 = 0; - root.x1 = dx; - root.y1 = dy; - root.eachBefore(positionNode); - paddingStack = [0]; - if (round) root.eachBefore(_round_js__WEBPACK_IMPORTED_MODULE_2__["default"]); - return root; - } - - function positionNode(node) { - var p = paddingStack[node.depth], - x0 = node.x0 + p, - y0 = node.y0 + p, - x1 = node.x1 - p, - y1 = node.y1 - p; - if (x1 < x0) x0 = x1 = (x0 + x1) / 2; - if (y1 < y0) y0 = y1 = (y0 + y1) / 2; - node.x0 = x0; - node.y0 = y0; - node.x1 = x1; - node.y1 = y1; - if (node.children) { - p = paddingStack[node.depth + 1] = paddingInner(node) / 2; - x0 += paddingLeft(node) - p; - y0 += paddingTop(node) - p; - x1 -= paddingRight(node) - p; - y1 -= paddingBottom(node) - p; - if (x1 < x0) x0 = x1 = (x0 + x1) / 2; - if (y1 < y0) y0 = y1 = (y0 + y1) / 2; - tile(node, x0, y0, x1, y1); - } - } - - treemap.round = function(x) { - return arguments.length ? (round = !!x, treemap) : round; - }; - - treemap.size = function(x) { - return arguments.length ? (dx = +x[0], dy = +x[1], treemap) : [dx, dy]; - }; - - treemap.tile = function(x) { - return arguments.length ? (tile = (0,_accessors_js__WEBPACK_IMPORTED_MODULE_3__.required)(x), treemap) : tile; - }; - - treemap.padding = function(x) { - return arguments.length ? treemap.paddingInner(x).paddingOuter(x) : treemap.paddingInner(); - }; - - treemap.paddingInner = function(x) { - return arguments.length ? (paddingInner = typeof x === "function" ? x : (0,_constant_js__WEBPACK_IMPORTED_MODULE_1__["default"])(+x), treemap) : paddingInner; - }; - - treemap.paddingOuter = function(x) { - return arguments.length ? treemap.paddingTop(x).paddingRight(x).paddingBottom(x).paddingLeft(x) : treemap.paddingTop(); - }; - - treemap.paddingTop = function(x) { - return arguments.length ? (paddingTop = typeof x === "function" ? x : (0,_constant_js__WEBPACK_IMPORTED_MODULE_1__["default"])(+x), treemap) : paddingTop; - }; - - treemap.paddingRight = function(x) { - return arguments.length ? (paddingRight = typeof x === "function" ? x : (0,_constant_js__WEBPACK_IMPORTED_MODULE_1__["default"])(+x), treemap) : paddingRight; - }; - - treemap.paddingBottom = function(x) { - return arguments.length ? (paddingBottom = typeof x === "function" ? x : (0,_constant_js__WEBPACK_IMPORTED_MODULE_1__["default"])(+x), treemap) : paddingBottom; - }; - - treemap.paddingLeft = function(x) { - return arguments.length ? (paddingLeft = typeof x === "function" ? x : (0,_constant_js__WEBPACK_IMPORTED_MODULE_1__["default"])(+x), treemap) : paddingLeft; - }; - - return treemap; -} - - -/***/ }), - -/***/ "./node_modules/d3-hierarchy/src/treemap/resquarify.js": -/*!*************************************************************!*\ - !*** ./node_modules/d3-hierarchy/src/treemap/resquarify.js ***! - \*************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _dice_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./dice.js */ "./node_modules/d3-hierarchy/src/treemap/dice.js"); -/* harmony import */ var _slice_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./slice.js */ "./node_modules/d3-hierarchy/src/treemap/slice.js"); -/* harmony import */ var _squarify_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./squarify.js */ "./node_modules/d3-hierarchy/src/treemap/squarify.js"); - - - - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((function custom(ratio) { - - function resquarify(parent, x0, y0, x1, y1) { - if ((rows = parent._squarify) && (rows.ratio === ratio)) { - var rows, - row, - nodes, - i, - j = -1, - n, - m = rows.length, - value = parent.value; - - while (++j < m) { - row = rows[j], nodes = row.children; - for (i = row.value = 0, n = nodes.length; i < n; ++i) row.value += nodes[i].value; - if (row.dice) (0,_dice_js__WEBPACK_IMPORTED_MODULE_0__["default"])(row, x0, y0, x1, y0 += (y1 - y0) * row.value / value); - else (0,_slice_js__WEBPACK_IMPORTED_MODULE_1__["default"])(row, x0, y0, x0 += (x1 - x0) * row.value / value, y1); - value -= row.value; - } - } else { - parent._squarify = rows = (0,_squarify_js__WEBPACK_IMPORTED_MODULE_2__.squarifyRatio)(ratio, parent, x0, y0, x1, y1); - rows.ratio = ratio; - } - } - - resquarify.ratio = function(x) { - return custom((x = +x) > 1 ? x : 1); - }; - - return resquarify; -})(_squarify_js__WEBPACK_IMPORTED_MODULE_2__.phi)); - - -/***/ }), - -/***/ "./node_modules/d3-hierarchy/src/treemap/round.js": -/*!********************************************************!*\ - !*** ./node_modules/d3-hierarchy/src/treemap/round.js ***! - \********************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(node) { - node.x0 = Math.round(node.x0); - node.y0 = Math.round(node.y0); - node.x1 = Math.round(node.x1); - node.y1 = Math.round(node.y1); -} - - -/***/ }), - -/***/ "./node_modules/d3-hierarchy/src/treemap/slice.js": -/*!********************************************************!*\ - !*** ./node_modules/d3-hierarchy/src/treemap/slice.js ***! - \********************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(parent, x0, y0, x1, y1) { - var nodes = parent.children, - node, - i = -1, - n = nodes.length, - k = parent.value && (y1 - y0) / parent.value; - - while (++i < n) { - node = nodes[i], node.x0 = x0, node.x1 = x1; - node.y0 = y0, node.y1 = y0 += node.value * k; - } -} - - -/***/ }), - -/***/ "./node_modules/d3-hierarchy/src/treemap/sliceDice.js": -/*!************************************************************!*\ - !*** ./node_modules/d3-hierarchy/src/treemap/sliceDice.js ***! - \************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _dice_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./dice.js */ "./node_modules/d3-hierarchy/src/treemap/dice.js"); -/* harmony import */ var _slice_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./slice.js */ "./node_modules/d3-hierarchy/src/treemap/slice.js"); - - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(parent, x0, y0, x1, y1) { - (parent.depth & 1 ? _slice_js__WEBPACK_IMPORTED_MODULE_0__["default"] : _dice_js__WEBPACK_IMPORTED_MODULE_1__["default"])(parent, x0, y0, x1, y1); -} - - -/***/ }), - -/***/ "./node_modules/d3-hierarchy/src/treemap/squarify.js": -/*!***********************************************************!*\ - !*** ./node_modules/d3-hierarchy/src/treemap/squarify.js ***! - \***********************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "phi": () => (/* binding */ phi), -/* harmony export */ "squarifyRatio": () => (/* binding */ squarifyRatio) -/* harmony export */ }); -/* harmony import */ var _dice_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./dice.js */ "./node_modules/d3-hierarchy/src/treemap/dice.js"); -/* harmony import */ var _slice_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./slice.js */ "./node_modules/d3-hierarchy/src/treemap/slice.js"); - - - -var phi = (1 + Math.sqrt(5)) / 2; - -function squarifyRatio(ratio, parent, x0, y0, x1, y1) { - var rows = [], - nodes = parent.children, - row, - nodeValue, - i0 = 0, - i1 = 0, - n = nodes.length, - dx, dy, - value = parent.value, - sumValue, - minValue, - maxValue, - newRatio, - minRatio, - alpha, - beta; - - while (i0 < n) { - dx = x1 - x0, dy = y1 - y0; - - // Find the next non-empty node. - do sumValue = nodes[i1++].value; while (!sumValue && i1 < n); - minValue = maxValue = sumValue; - alpha = Math.max(dy / dx, dx / dy) / (value * ratio); - beta = sumValue * sumValue * alpha; - minRatio = Math.max(maxValue / beta, beta / minValue); - - // Keep adding nodes while the aspect ratio maintains or improves. - for (; i1 < n; ++i1) { - sumValue += nodeValue = nodes[i1].value; - if (nodeValue < minValue) minValue = nodeValue; - if (nodeValue > maxValue) maxValue = nodeValue; - beta = sumValue * sumValue * alpha; - newRatio = Math.max(maxValue / beta, beta / minValue); - if (newRatio > minRatio) { sumValue -= nodeValue; break; } - minRatio = newRatio; - } - - // Position and record the row orientation. - rows.push(row = {value: sumValue, dice: dx < dy, children: nodes.slice(i0, i1)}); - if (row.dice) (0,_dice_js__WEBPACK_IMPORTED_MODULE_0__["default"])(row, x0, y0, x1, value ? y0 += dy * sumValue / value : y1); - else (0,_slice_js__WEBPACK_IMPORTED_MODULE_1__["default"])(row, x0, y0, value ? x0 += dx * sumValue / value : x1, y1); - value -= sumValue, i0 = i1; - } - - return rows; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((function custom(ratio) { - - function squarify(parent, x0, y0, x1, y1) { - squarifyRatio(ratio, parent, x0, y0, x1, y1); - } - - squarify.ratio = function(x) { - return custom((x = +x) > 1 ? x : 1); - }; - - return squarify; -})(phi)); - - -/***/ }), - -/***/ "./node_modules/d3-interpolate/src/array.js": -/*!**************************************************!*\ - !*** ./node_modules/d3-interpolate/src/array.js ***! - \**************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "genericArray": () => (/* binding */ genericArray) -/* harmony export */ }); -/* harmony import */ var _value_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./value.js */ "./node_modules/d3-interpolate/src/value.js"); -/* harmony import */ var _numberArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./numberArray.js */ "./node_modules/d3-interpolate/src/numberArray.js"); - - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(a, b) { - return ((0,_numberArray_js__WEBPACK_IMPORTED_MODULE_0__.isNumberArray)(b) ? _numberArray_js__WEBPACK_IMPORTED_MODULE_0__["default"] : genericArray)(a, b); -} - -function genericArray(a, b) { - var nb = b ? b.length : 0, - na = a ? Math.min(nb, a.length) : 0, - x = new Array(na), - c = new Array(nb), - i; - - for (i = 0; i < na; ++i) x[i] = (0,_value_js__WEBPACK_IMPORTED_MODULE_1__["default"])(a[i], b[i]); - for (; i < nb; ++i) c[i] = b[i]; - - return function(t) { - for (i = 0; i < na; ++i) c[i] = x[i](t); - return c; - }; -} - - -/***/ }), - -/***/ "./node_modules/d3-interpolate/src/basis.js": -/*!**************************************************!*\ - !*** ./node_modules/d3-interpolate/src/basis.js ***! - \**************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "basis": () => (/* binding */ basis), -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -function basis(t1, v0, v1, v2, v3) { - var t2 = t1 * t1, t3 = t2 * t1; - return ((1 - 3 * t1 + 3 * t2 - t3) * v0 - + (4 - 6 * t2 + 3 * t3) * v1 - + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2 - + t3 * v3) / 6; -} - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(values) { - var n = values.length - 1; - return function(t) { - var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n), - v1 = values[i], - v2 = values[i + 1], - v0 = i > 0 ? values[i - 1] : 2 * v1 - v2, - v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1; - return basis((t - i / n) * n, v0, v1, v2, v3); - }; -} - - -/***/ }), - -/***/ "./node_modules/d3-interpolate/src/basisClosed.js": -/*!********************************************************!*\ - !*** ./node_modules/d3-interpolate/src/basisClosed.js ***! - \********************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _basis_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./basis.js */ "./node_modules/d3-interpolate/src/basis.js"); - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(values) { - var n = values.length; - return function(t) { - var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n), - v0 = values[(i + n - 1) % n], - v1 = values[i % n], - v2 = values[(i + 1) % n], - v3 = values[(i + 2) % n]; - return (0,_basis_js__WEBPACK_IMPORTED_MODULE_0__.basis)((t - i / n) * n, v0, v1, v2, v3); - }; -} - - -/***/ }), - -/***/ "./node_modules/d3-interpolate/src/color.js": -/*!**************************************************!*\ - !*** ./node_modules/d3-interpolate/src/color.js ***! - \**************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ nogamma), -/* harmony export */ "gamma": () => (/* binding */ gamma), -/* harmony export */ "hue": () => (/* binding */ hue) -/* harmony export */ }); -/* harmony import */ var _constant_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./constant.js */ "./node_modules/d3-interpolate/src/constant.js"); - - -function linear(a, d) { - return function(t) { - return a + t * d; - }; -} - -function exponential(a, b, y) { - return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) { - return Math.pow(a + t * b, y); - }; -} - -function hue(a, b) { - var d = b - a; - 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); -} - -function gamma(y) { - return (y = +y) === 1 ? nogamma : function(a, b) { - return b - a ? exponential(a, b, y) : (0,_constant_js__WEBPACK_IMPORTED_MODULE_0__["default"])(isNaN(a) ? b : a); - }; -} - -function nogamma(a, b) { - var d = b - a; - return d ? linear(a, d) : (0,_constant_js__WEBPACK_IMPORTED_MODULE_0__["default"])(isNaN(a) ? b : a); -} - - -/***/ }), - -/***/ "./node_modules/d3-interpolate/src/constant.js": -/*!*****************************************************!*\ - !*** ./node_modules/d3-interpolate/src/constant.js ***! - \*****************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(x) { - return function() { - return x; - }; -} - - -/***/ }), - -/***/ "./node_modules/d3-interpolate/src/cubehelix.js": -/*!******************************************************!*\ - !*** ./node_modules/d3-interpolate/src/cubehelix.js ***! - \******************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "cubehelixLong": () => (/* binding */ cubehelixLong), -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var d3_color__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-color */ "./node_modules/d3-color/src/cubehelix.js"); -/* harmony import */ var _color_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./color.js */ "./node_modules/d3-interpolate/src/color.js"); - - - -function cubehelix(hue) { - return (function cubehelixGamma(y) { - y = +y; - - function cubehelix(start, end) { - 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), - s = (0,_color_js__WEBPACK_IMPORTED_MODULE_1__["default"])(start.s, end.s), - l = (0,_color_js__WEBPACK_IMPORTED_MODULE_1__["default"])(start.l, end.l), - opacity = (0,_color_js__WEBPACK_IMPORTED_MODULE_1__["default"])(start.opacity, end.opacity); - return function(t) { - start.h = h(t); - start.s = s(t); - start.l = l(Math.pow(t, y)); - start.opacity = opacity(t); - return start + ""; - }; - } - - cubehelix.gamma = cubehelixGamma; - - return cubehelix; - })(1); -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cubehelix(_color_js__WEBPACK_IMPORTED_MODULE_1__.hue)); -var cubehelixLong = cubehelix(_color_js__WEBPACK_IMPORTED_MODULE_1__["default"]); - - -/***/ }), - -/***/ "./node_modules/d3-interpolate/src/date.js": -/*!*************************************************!*\ - !*** ./node_modules/d3-interpolate/src/date.js ***! - \*************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(a, b) { - var d = new Date; - return a = +a, b = +b, function(t) { - return d.setTime(a * (1 - t) + b * t), d; - }; -} - - -/***/ }), - -/***/ "./node_modules/d3-interpolate/src/discrete.js": -/*!*****************************************************!*\ - !*** ./node_modules/d3-interpolate/src/discrete.js ***! - \*****************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(range) { - var n = range.length; - return function(t) { - return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))]; - }; -} - - -/***/ }), - -/***/ "./node_modules/d3-interpolate/src/hcl.js": -/*!************************************************!*\ - !*** ./node_modules/d3-interpolate/src/hcl.js ***! - \************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "hclLong": () => (/* binding */ hclLong) -/* harmony export */ }); -/* harmony import */ var d3_color__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-color */ "./node_modules/d3-color/src/lab.js"); -/* harmony import */ var _color_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./color.js */ "./node_modules/d3-interpolate/src/color.js"); - - - -function hcl(hue) { - return function(start, end) { - 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), - c = (0,_color_js__WEBPACK_IMPORTED_MODULE_1__["default"])(start.c, end.c), - l = (0,_color_js__WEBPACK_IMPORTED_MODULE_1__["default"])(start.l, end.l), - opacity = (0,_color_js__WEBPACK_IMPORTED_MODULE_1__["default"])(start.opacity, end.opacity); - return function(t) { - start.h = h(t); - start.c = c(t); - start.l = l(t); - start.opacity = opacity(t); - return start + ""; - }; - } -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (hcl(_color_js__WEBPACK_IMPORTED_MODULE_1__.hue)); -var hclLong = hcl(_color_js__WEBPACK_IMPORTED_MODULE_1__["default"]); - - -/***/ }), - -/***/ "./node_modules/d3-interpolate/src/hsl.js": -/*!************************************************!*\ - !*** ./node_modules/d3-interpolate/src/hsl.js ***! - \************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "hslLong": () => (/* binding */ hslLong) -/* harmony export */ }); -/* harmony import */ var d3_color__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-color */ "./node_modules/d3-color/src/color.js"); -/* harmony import */ var _color_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./color.js */ "./node_modules/d3-interpolate/src/color.js"); - - - -function hsl(hue) { - return function(start, end) { - 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), - s = (0,_color_js__WEBPACK_IMPORTED_MODULE_1__["default"])(start.s, end.s), - l = (0,_color_js__WEBPACK_IMPORTED_MODULE_1__["default"])(start.l, end.l), - opacity = (0,_color_js__WEBPACK_IMPORTED_MODULE_1__["default"])(start.opacity, end.opacity); - return function(t) { - start.h = h(t); - start.s = s(t); - start.l = l(t); - start.opacity = opacity(t); - return start + ""; - }; - } -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (hsl(_color_js__WEBPACK_IMPORTED_MODULE_1__.hue)); -var hslLong = hsl(_color_js__WEBPACK_IMPORTED_MODULE_1__["default"]); - - -/***/ }), - -/***/ "./node_modules/d3-interpolate/src/hue.js": -/*!************************************************!*\ - !*** ./node_modules/d3-interpolate/src/hue.js ***! - \************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _color_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./color.js */ "./node_modules/d3-interpolate/src/color.js"); - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(a, b) { - var i = (0,_color_js__WEBPACK_IMPORTED_MODULE_0__.hue)(+a, +b); - return function(t) { - var x = i(t); - return x - 360 * Math.floor(x / 360); - }; -} - - -/***/ }), - -/***/ "./node_modules/d3-interpolate/src/index.js": -/*!**************************************************!*\ - !*** ./node_modules/d3-interpolate/src/index.js ***! - \**************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "interpolate": () => (/* reexport safe */ _value_js__WEBPACK_IMPORTED_MODULE_0__["default"]), -/* harmony export */ "interpolateArray": () => (/* reexport safe */ _array_js__WEBPACK_IMPORTED_MODULE_1__["default"]), -/* harmony export */ "interpolateBasis": () => (/* reexport safe */ _basis_js__WEBPACK_IMPORTED_MODULE_2__["default"]), -/* harmony export */ "interpolateBasisClosed": () => (/* reexport safe */ _basisClosed_js__WEBPACK_IMPORTED_MODULE_3__["default"]), -/* harmony export */ "interpolateCubehelix": () => (/* reexport safe */ _cubehelix_js__WEBPACK_IMPORTED_MODULE_18__["default"]), -/* harmony export */ "interpolateCubehelixLong": () => (/* reexport safe */ _cubehelix_js__WEBPACK_IMPORTED_MODULE_18__.cubehelixLong), -/* harmony export */ "interpolateDate": () => (/* reexport safe */ _date_js__WEBPACK_IMPORTED_MODULE_4__["default"]), -/* harmony export */ "interpolateDiscrete": () => (/* reexport safe */ _discrete_js__WEBPACK_IMPORTED_MODULE_5__["default"]), -/* harmony export */ "interpolateHcl": () => (/* reexport safe */ _hcl_js__WEBPACK_IMPORTED_MODULE_17__["default"]), -/* harmony export */ "interpolateHclLong": () => (/* reexport safe */ _hcl_js__WEBPACK_IMPORTED_MODULE_17__.hclLong), -/* harmony export */ "interpolateHsl": () => (/* reexport safe */ _hsl_js__WEBPACK_IMPORTED_MODULE_15__["default"]), -/* harmony export */ "interpolateHslLong": () => (/* reexport safe */ _hsl_js__WEBPACK_IMPORTED_MODULE_15__.hslLong), -/* harmony export */ "interpolateHue": () => (/* reexport safe */ _hue_js__WEBPACK_IMPORTED_MODULE_6__["default"]), -/* harmony export */ "interpolateLab": () => (/* reexport safe */ _lab_js__WEBPACK_IMPORTED_MODULE_16__["default"]), -/* harmony export */ "interpolateNumber": () => (/* reexport safe */ _number_js__WEBPACK_IMPORTED_MODULE_7__["default"]), -/* harmony export */ "interpolateNumberArray": () => (/* reexport safe */ _numberArray_js__WEBPACK_IMPORTED_MODULE_8__["default"]), -/* harmony export */ "interpolateObject": () => (/* reexport safe */ _object_js__WEBPACK_IMPORTED_MODULE_9__["default"]), -/* harmony export */ "interpolateRgb": () => (/* reexport safe */ _rgb_js__WEBPACK_IMPORTED_MODULE_14__["default"]), -/* harmony export */ "interpolateRgbBasis": () => (/* reexport safe */ _rgb_js__WEBPACK_IMPORTED_MODULE_14__.rgbBasis), -/* harmony export */ "interpolateRgbBasisClosed": () => (/* reexport safe */ _rgb_js__WEBPACK_IMPORTED_MODULE_14__.rgbBasisClosed), -/* harmony export */ "interpolateRound": () => (/* reexport safe */ _round_js__WEBPACK_IMPORTED_MODULE_10__["default"]), -/* harmony export */ "interpolateString": () => (/* reexport safe */ _string_js__WEBPACK_IMPORTED_MODULE_11__["default"]), -/* harmony export */ "interpolateTransformCss": () => (/* reexport safe */ _transform_index_js__WEBPACK_IMPORTED_MODULE_12__.interpolateTransformCss), -/* harmony export */ "interpolateTransformSvg": () => (/* reexport safe */ _transform_index_js__WEBPACK_IMPORTED_MODULE_12__.interpolateTransformSvg), -/* harmony export */ "interpolateZoom": () => (/* reexport safe */ _zoom_js__WEBPACK_IMPORTED_MODULE_13__["default"]), -/* harmony export */ "piecewise": () => (/* reexport safe */ _piecewise_js__WEBPACK_IMPORTED_MODULE_19__["default"]), -/* harmony export */ "quantize": () => (/* reexport safe */ _quantize_js__WEBPACK_IMPORTED_MODULE_20__["default"]) -/* harmony export */ }); -/* harmony import */ var _value_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./value.js */ "./node_modules/d3-interpolate/src/value.js"); -/* harmony import */ var _array_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./array.js */ "./node_modules/d3-interpolate/src/array.js"); -/* harmony import */ var _basis_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./basis.js */ "./node_modules/d3-interpolate/src/basis.js"); -/* harmony import */ var _basisClosed_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./basisClosed.js */ "./node_modules/d3-interpolate/src/basisClosed.js"); -/* harmony import */ var _date_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./date.js */ "./node_modules/d3-interpolate/src/date.js"); -/* harmony import */ var _discrete_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./discrete.js */ "./node_modules/d3-interpolate/src/discrete.js"); -/* harmony import */ var _hue_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./hue.js */ "./node_modules/d3-interpolate/src/hue.js"); -/* harmony import */ var _number_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./number.js */ "./node_modules/d3-interpolate/src/number.js"); -/* harmony import */ var _numberArray_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./numberArray.js */ "./node_modules/d3-interpolate/src/numberArray.js"); -/* harmony import */ var _object_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./object.js */ "./node_modules/d3-interpolate/src/object.js"); -/* harmony import */ var _round_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./round.js */ "./node_modules/d3-interpolate/src/round.js"); -/* harmony import */ var _string_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./string.js */ "./node_modules/d3-interpolate/src/string.js"); -/* harmony import */ var _transform_index_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./transform/index.js */ "./node_modules/d3-interpolate/src/transform/index.js"); -/* harmony import */ var _zoom_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./zoom.js */ "./node_modules/d3-interpolate/src/zoom.js"); -/* harmony import */ var _rgb_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./rgb.js */ "./node_modules/d3-interpolate/src/rgb.js"); -/* harmony import */ var _hsl_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./hsl.js */ "./node_modules/d3-interpolate/src/hsl.js"); -/* harmony import */ var _lab_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./lab.js */ "./node_modules/d3-interpolate/src/lab.js"); -/* harmony import */ var _hcl_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./hcl.js */ "./node_modules/d3-interpolate/src/hcl.js"); -/* harmony import */ var _cubehelix_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./cubehelix.js */ "./node_modules/d3-interpolate/src/cubehelix.js"); -/* harmony import */ var _piecewise_js__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./piecewise.js */ "./node_modules/d3-interpolate/src/piecewise.js"); -/* harmony import */ var _quantize_js__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./quantize.js */ "./node_modules/d3-interpolate/src/quantize.js"); - - - - - - - - - - - - - - - - - - - - - - - -/***/ }), - -/***/ "./node_modules/d3-interpolate/src/lab.js": -/*!************************************************!*\ - !*** ./node_modules/d3-interpolate/src/lab.js ***! - \************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ lab) -/* harmony export */ }); -/* harmony import */ var d3_color__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-color */ "./node_modules/d3-color/src/lab.js"); -/* harmony import */ var _color_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./color.js */ "./node_modules/d3-interpolate/src/color.js"); - - - -function lab(start, end) { - 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), - a = (0,_color_js__WEBPACK_IMPORTED_MODULE_0__["default"])(start.a, end.a), - b = (0,_color_js__WEBPACK_IMPORTED_MODULE_0__["default"])(start.b, end.b), - opacity = (0,_color_js__WEBPACK_IMPORTED_MODULE_0__["default"])(start.opacity, end.opacity); - return function(t) { - start.l = l(t); - start.a = a(t); - start.b = b(t); - start.opacity = opacity(t); - return start + ""; - }; -} - - -/***/ }), - -/***/ "./node_modules/d3-interpolate/src/number.js": -/*!***************************************************!*\ - !*** ./node_modules/d3-interpolate/src/number.js ***! - \***************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(a, b) { - return a = +a, b = +b, function(t) { - return a * (1 - t) + b * t; - }; -} - - -/***/ }), - -/***/ "./node_modules/d3-interpolate/src/numberArray.js": -/*!********************************************************!*\ - !*** ./node_modules/d3-interpolate/src/numberArray.js ***! - \********************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "isNumberArray": () => (/* binding */ isNumberArray) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(a, b) { - if (!b) b = []; - var n = a ? Math.min(b.length, a.length) : 0, - c = b.slice(), - i; - return function(t) { - for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t; - return c; - }; -} - -function isNumberArray(x) { - return ArrayBuffer.isView(x) && !(x instanceof DataView); -} - - -/***/ }), - -/***/ "./node_modules/d3-interpolate/src/object.js": -/*!***************************************************!*\ - !*** ./node_modules/d3-interpolate/src/object.js ***! - \***************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _value_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./value.js */ "./node_modules/d3-interpolate/src/value.js"); - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(a, b) { - var i = {}, - c = {}, - k; - - if (a === null || typeof a !== "object") a = {}; - if (b === null || typeof b !== "object") b = {}; - - for (k in b) { - if (k in a) { - i[k] = (0,_value_js__WEBPACK_IMPORTED_MODULE_0__["default"])(a[k], b[k]); - } else { - c[k] = b[k]; - } - } - - return function(t) { - for (k in i) c[k] = i[k](t); - return c; - }; -} - - -/***/ }), - -/***/ "./node_modules/d3-interpolate/src/piecewise.js": -/*!******************************************************!*\ - !*** ./node_modules/d3-interpolate/src/piecewise.js ***! - \******************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ piecewise) -/* harmony export */ }); -function piecewise(interpolate, values) { - var i = 0, n = values.length - 1, v = values[0], I = new Array(n < 0 ? 0 : n); - while (i < n) I[i] = interpolate(v, v = values[++i]); - return function(t) { - var i = Math.max(0, Math.min(n - 1, Math.floor(t *= n))); - return I[i](t - i); - }; -} - - -/***/ }), - -/***/ "./node_modules/d3-interpolate/src/quantize.js": -/*!*****************************************************!*\ - !*** ./node_modules/d3-interpolate/src/quantize.js ***! - \*****************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(interpolator, n) { - var samples = new Array(n); - for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1)); - return samples; -} - - -/***/ }), - -/***/ "./node_modules/d3-interpolate/src/rgb.js": -/*!************************************************!*\ - !*** ./node_modules/d3-interpolate/src/rgb.js ***! - \************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "rgbBasis": () => (/* binding */ rgbBasis), -/* harmony export */ "rgbBasisClosed": () => (/* binding */ rgbBasisClosed) -/* harmony export */ }); -/* harmony import */ var d3_color__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-color */ "./node_modules/d3-color/src/color.js"); -/* harmony import */ var _basis_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./basis.js */ "./node_modules/d3-interpolate/src/basis.js"); -/* harmony import */ var _basisClosed_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./basisClosed.js */ "./node_modules/d3-interpolate/src/basisClosed.js"); -/* harmony import */ var _color_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./color.js */ "./node_modules/d3-interpolate/src/color.js"); - - - - - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((function rgbGamma(y) { - var color = (0,_color_js__WEBPACK_IMPORTED_MODULE_0__.gamma)(y); - - function rgb(start, end) { - 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), - g = color(start.g, end.g), - b = color(start.b, end.b), - opacity = (0,_color_js__WEBPACK_IMPORTED_MODULE_0__["default"])(start.opacity, end.opacity); - return function(t) { - start.r = r(t); - start.g = g(t); - start.b = b(t); - start.opacity = opacity(t); - return start + ""; - }; - } - - rgb.gamma = rgbGamma; - - return rgb; -})(1)); - -function rgbSpline(spline) { - return function(colors) { - var n = colors.length, - r = new Array(n), - g = new Array(n), - b = new Array(n), - i, color; - for (i = 0; i < n; ++i) { - color = (0,d3_color__WEBPACK_IMPORTED_MODULE_1__.rgb)(colors[i]); - r[i] = color.r || 0; - g[i] = color.g || 0; - b[i] = color.b || 0; - } - r = spline(r); - g = spline(g); - b = spline(b); - color.opacity = 1; - return function(t) { - color.r = r(t); - color.g = g(t); - color.b = b(t); - return color + ""; - }; - }; -} - -var rgbBasis = rgbSpline(_basis_js__WEBPACK_IMPORTED_MODULE_2__["default"]); -var rgbBasisClosed = rgbSpline(_basisClosed_js__WEBPACK_IMPORTED_MODULE_3__["default"]); - - -/***/ }), - -/***/ "./node_modules/d3-interpolate/src/round.js": -/*!**************************************************!*\ - !*** ./node_modules/d3-interpolate/src/round.js ***! - \**************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(a, b) { - return a = +a, b = +b, function(t) { - return Math.round(a * (1 - t) + b * t); - }; -} - - -/***/ }), - -/***/ "./node_modules/d3-interpolate/src/string.js": -/*!***************************************************!*\ - !*** ./node_modules/d3-interpolate/src/string.js ***! - \***************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _number_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./number.js */ "./node_modules/d3-interpolate/src/number.js"); - - -var reA = /[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g, - reB = new RegExp(reA.source, "g"); - -function zero(b) { - return function() { - return b; - }; -} - -function one(b) { - return function(t) { - return b(t) + ""; - }; -} - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(a, b) { - var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b - am, // current match in a - bm, // current match in b - bs, // string preceding current number in b, if any - i = -1, // index in s - s = [], // string constants and placeholders - q = []; // number interpolators - - // Coerce inputs to strings. - a = a + "", b = b + ""; - - // Interpolate pairs of numbers in a & b. - while ((am = reA.exec(a)) - && (bm = reB.exec(b))) { - if ((bs = bm.index) > bi) { // a string precedes the next number in b - bs = b.slice(bi, bs); - if (s[i]) s[i] += bs; // coalesce with previous string - else s[++i] = bs; - } - if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match - if (s[i]) s[i] += bm; // coalesce with previous string - else s[++i] = bm; - } else { // interpolate non-matching numbers - s[++i] = null; - q.push({i: i, x: (0,_number_js__WEBPACK_IMPORTED_MODULE_0__["default"])(am, bm)}); - } - bi = reB.lastIndex; - } - - // Add remains of b. - if (bi < b.length) { - bs = b.slice(bi); - if (s[i]) s[i] += bs; // coalesce with previous string - else s[++i] = bs; - } - - // Special optimization for only a single match. - // Otherwise, interpolate each of the numbers and rejoin the string. - return s.length < 2 ? (q[0] - ? one(q[0].x) - : zero(b)) - : (b = q.length, function(t) { - for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t); - return s.join(""); - }); -} - - -/***/ }), - -/***/ "./node_modules/d3-interpolate/src/transform/decompose.js": -/*!****************************************************************!*\ - !*** ./node_modules/d3-interpolate/src/transform/decompose.js ***! - \****************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "identity": () => (/* binding */ identity) -/* harmony export */ }); -var degrees = 180 / Math.PI; - -var identity = { - translateX: 0, - translateY: 0, - rotate: 0, - skewX: 0, - scaleX: 1, - scaleY: 1 -}; - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(a, b, c, d, e, f) { - var scaleX, scaleY, skewX; - if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX; - if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX; - if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY; - if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX; - return { - translateX: e, - translateY: f, - rotate: Math.atan2(b, a) * degrees, - skewX: Math.atan(skewX) * degrees, - scaleX: scaleX, - scaleY: scaleY - }; -} - - -/***/ }), - -/***/ "./node_modules/d3-interpolate/src/transform/index.js": -/*!************************************************************!*\ - !*** ./node_modules/d3-interpolate/src/transform/index.js ***! - \************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "interpolateTransformCss": () => (/* binding */ interpolateTransformCss), -/* harmony export */ "interpolateTransformSvg": () => (/* binding */ interpolateTransformSvg) -/* harmony export */ }); -/* harmony import */ var _number_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../number.js */ "./node_modules/d3-interpolate/src/number.js"); -/* harmony import */ var _parse_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./parse.js */ "./node_modules/d3-interpolate/src/transform/parse.js"); - - - -function interpolateTransform(parse, pxComma, pxParen, degParen) { - - function pop(s) { - return s.length ? s.pop() + " " : ""; - } - - function translate(xa, ya, xb, yb, s, q) { - if (xa !== xb || ya !== yb) { - var i = s.push("translate(", null, pxComma, null, pxParen); - 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)}); - } else if (xb || yb) { - s.push("translate(" + xb + pxComma + yb + pxParen); - } - } - - function rotate(a, b, s, q) { - if (a !== b) { - if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path - q.push({i: s.push(pop(s) + "rotate(", null, degParen) - 2, x: (0,_number_js__WEBPACK_IMPORTED_MODULE_0__["default"])(a, b)}); - } else if (b) { - s.push(pop(s) + "rotate(" + b + degParen); - } - } - - function skewX(a, b, s, q) { - if (a !== b) { - q.push({i: s.push(pop(s) + "skewX(", null, degParen) - 2, x: (0,_number_js__WEBPACK_IMPORTED_MODULE_0__["default"])(a, b)}); - } else if (b) { - s.push(pop(s) + "skewX(" + b + degParen); - } - } - - function scale(xa, ya, xb, yb, s, q) { - if (xa !== xb || ya !== yb) { - var i = s.push(pop(s) + "scale(", null, ",", null, ")"); - 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)}); - } else if (xb !== 1 || yb !== 1) { - s.push(pop(s) + "scale(" + xb + "," + yb + ")"); - } - } - - return function(a, b) { - var s = [], // string constants and placeholders - q = []; // number interpolators - a = parse(a), b = parse(b); - translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q); - rotate(a.rotate, b.rotate, s, q); - skewX(a.skewX, b.skewX, s, q); - scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q); - a = b = null; // gc - return function(t) { - var i = -1, n = q.length, o; - while (++i < n) s[(o = q[i]).i] = o.x(t); - return s.join(""); - }; - }; -} - -var interpolateTransformCss = interpolateTransform(_parse_js__WEBPACK_IMPORTED_MODULE_1__.parseCss, "px, ", "px)", "deg)"); -var interpolateTransformSvg = interpolateTransform(_parse_js__WEBPACK_IMPORTED_MODULE_1__.parseSvg, ", ", ")", ")"); - - -/***/ }), - -/***/ "./node_modules/d3-interpolate/src/transform/parse.js": -/*!************************************************************!*\ - !*** ./node_modules/d3-interpolate/src/transform/parse.js ***! - \************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "parseCss": () => (/* binding */ parseCss), -/* harmony export */ "parseSvg": () => (/* binding */ parseSvg) -/* harmony export */ }); -/* harmony import */ var _decompose_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./decompose.js */ "./node_modules/d3-interpolate/src/transform/decompose.js"); - - -var cssNode, - cssRoot, - cssView, - svgNode; - -function parseCss(value) { - if (value === "none") return _decompose_js__WEBPACK_IMPORTED_MODULE_0__.identity; - if (!cssNode) cssNode = document.createElement("DIV"), cssRoot = document.documentElement, cssView = document.defaultView; - cssNode.style.transform = value; - value = cssView.getComputedStyle(cssRoot.appendChild(cssNode), null).getPropertyValue("transform"); - cssRoot.removeChild(cssNode); - value = value.slice(7, -1).split(","); - return (0,_decompose_js__WEBPACK_IMPORTED_MODULE_0__["default"])(+value[0], +value[1], +value[2], +value[3], +value[4], +value[5]); -} - -function parseSvg(value) { - if (value == null) return _decompose_js__WEBPACK_IMPORTED_MODULE_0__.identity; - if (!svgNode) svgNode = document.createElementNS("http://www.w3.org/2000/svg", "g"); - svgNode.setAttribute("transform", value); - if (!(value = svgNode.transform.baseVal.consolidate())) return _decompose_js__WEBPACK_IMPORTED_MODULE_0__.identity; - value = value.matrix; - return (0,_decompose_js__WEBPACK_IMPORTED_MODULE_0__["default"])(value.a, value.b, value.c, value.d, value.e, value.f); -} - - -/***/ }), - -/***/ "./node_modules/d3-interpolate/src/value.js": -/*!**************************************************!*\ - !*** ./node_modules/d3-interpolate/src/value.js ***! - \**************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var d3_color__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-color */ "./node_modules/d3-color/src/color.js"); -/* harmony import */ var _rgb_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./rgb.js */ "./node_modules/d3-interpolate/src/rgb.js"); -/* harmony import */ var _array_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./array.js */ "./node_modules/d3-interpolate/src/array.js"); -/* harmony import */ var _date_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./date.js */ "./node_modules/d3-interpolate/src/date.js"); -/* harmony import */ var _number_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./number.js */ "./node_modules/d3-interpolate/src/number.js"); -/* harmony import */ var _object_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./object.js */ "./node_modules/d3-interpolate/src/object.js"); -/* harmony import */ var _string_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./string.js */ "./node_modules/d3-interpolate/src/string.js"); -/* harmony import */ var _constant_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./constant.js */ "./node_modules/d3-interpolate/src/constant.js"); -/* harmony import */ var _numberArray_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./numberArray.js */ "./node_modules/d3-interpolate/src/numberArray.js"); - - - - - - - - - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(a, b) { - var t = typeof b, c; - return b == null || t === "boolean" ? (0,_constant_js__WEBPACK_IMPORTED_MODULE_0__["default"])(b) - : (t === "number" ? _number_js__WEBPACK_IMPORTED_MODULE_1__["default"] - : 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"]) - : b instanceof d3_color__WEBPACK_IMPORTED_MODULE_2__["default"] ? _rgb_js__WEBPACK_IMPORTED_MODULE_3__["default"] - : b instanceof Date ? _date_js__WEBPACK_IMPORTED_MODULE_5__["default"] - : (0,_numberArray_js__WEBPACK_IMPORTED_MODULE_6__.isNumberArray)(b) ? _numberArray_js__WEBPACK_IMPORTED_MODULE_6__["default"] - : Array.isArray(b) ? _array_js__WEBPACK_IMPORTED_MODULE_7__.genericArray - : typeof b.valueOf !== "function" && typeof b.toString !== "function" || isNaN(b) ? _object_js__WEBPACK_IMPORTED_MODULE_8__["default"] - : _number_js__WEBPACK_IMPORTED_MODULE_1__["default"])(a, b); -} - - -/***/ }), - -/***/ "./node_modules/d3-interpolate/src/zoom.js": -/*!*************************************************!*\ - !*** ./node_modules/d3-interpolate/src/zoom.js ***! - \*************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -var rho = Math.SQRT2, - rho2 = 2, - rho4 = 4, - epsilon2 = 1e-12; - -function cosh(x) { - return ((x = Math.exp(x)) + 1 / x) / 2; -} - -function sinh(x) { - return ((x = Math.exp(x)) - 1 / x) / 2; -} - -function tanh(x) { - return ((x = Math.exp(2 * x)) - 1) / (x + 1); -} - -// p0 = [ux0, uy0, w0] -// p1 = [ux1, uy1, w1] -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(p0, p1) { - var ux0 = p0[0], uy0 = p0[1], w0 = p0[2], - ux1 = p1[0], uy1 = p1[1], w1 = p1[2], - dx = ux1 - ux0, - dy = uy1 - uy0, - d2 = dx * dx + dy * dy, - i, - S; - - // Special case for u0 ≅ u1. - if (d2 < epsilon2) { - S = Math.log(w1 / w0) / rho; - i = function(t) { - return [ - ux0 + t * dx, - uy0 + t * dy, - w0 * Math.exp(rho * t * S) - ]; - } - } - - // General case. - else { - var d1 = Math.sqrt(d2), - b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1), - b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1), - r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0), - r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1); - S = (r1 - r0) / rho; - i = function(t) { - var s = t * S, - coshr0 = cosh(r0), - u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0)); - return [ - ux0 + u * dx, - uy0 + u * dy, - w0 * coshr0 / cosh(rho * s + r0) - ]; - } - } - - i.duration = S * 1000; - - return i; -} - - -/***/ }), - -/***/ "./node_modules/d3-path/src/index.js": -/*!*******************************************!*\ - !*** ./node_modules/d3-path/src/index.js ***! - \*******************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "path": () => (/* reexport safe */ _path_js__WEBPACK_IMPORTED_MODULE_0__["default"]) -/* harmony export */ }); -/* harmony import */ var _path_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./path.js */ "./node_modules/d3-path/src/path.js"); - - - -/***/ }), - -/***/ "./node_modules/d3-path/src/path.js": -/*!******************************************!*\ - !*** ./node_modules/d3-path/src/path.js ***! - \******************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -var pi = Math.PI, - tau = 2 * pi, - epsilon = 1e-6, - tauEpsilon = tau - epsilon; - -function Path() { - this._x0 = this._y0 = // start of current subpath - this._x1 = this._y1 = null; // end of current subpath - this._ = ""; -} - -function path() { - return new Path; -} - -Path.prototype = path.prototype = { - constructor: Path, - moveTo: function(x, y) { - this._ += "M" + (this._x0 = this._x1 = +x) + "," + (this._y0 = this._y1 = +y); - }, - closePath: function() { - if (this._x1 !== null) { - this._x1 = this._x0, this._y1 = this._y0; - this._ += "Z"; - } - }, - lineTo: function(x, y) { - this._ += "L" + (this._x1 = +x) + "," + (this._y1 = +y); - }, - quadraticCurveTo: function(x1, y1, x, y) { - this._ += "Q" + (+x1) + "," + (+y1) + "," + (this._x1 = +x) + "," + (this._y1 = +y); - }, - bezierCurveTo: function(x1, y1, x2, y2, x, y) { - this._ += "C" + (+x1) + "," + (+y1) + "," + (+x2) + "," + (+y2) + "," + (this._x1 = +x) + "," + (this._y1 = +y); - }, - arcTo: function(x1, y1, x2, y2, r) { - x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r; - var x0 = this._x1, - y0 = this._y1, - x21 = x2 - x1, - y21 = y2 - y1, - x01 = x0 - x1, - y01 = y0 - y1, - l01_2 = x01 * x01 + y01 * y01; - - // Is the radius negative? Error. - if (r < 0) throw new Error("negative radius: " + r); - - // Is this path empty? Move to (x1,y1). - if (this._x1 === null) { - this._ += "M" + (this._x1 = x1) + "," + (this._y1 = y1); - } - - // Or, is (x1,y1) coincident with (x0,y0)? Do nothing. - else if (!(l01_2 > epsilon)); - - // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear? - // Equivalently, is (x1,y1) coincident with (x2,y2)? - // Or, is the radius zero? Line to (x1,y1). - else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) { - this._ += "L" + (this._x1 = x1) + "," + (this._y1 = y1); - } - - // Otherwise, draw an arc! - else { - var x20 = x2 - x0, - y20 = y2 - y0, - l21_2 = x21 * x21 + y21 * y21, - l20_2 = x20 * x20 + y20 * y20, - l21 = Math.sqrt(l21_2), - l01 = Math.sqrt(l01_2), - l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2), - t01 = l / l01, - t21 = l / l21; - - // If the start tangent is not coincident with (x0,y0), line to. - if (Math.abs(t01 - 1) > epsilon) { - this._ += "L" + (x1 + t01 * x01) + "," + (y1 + t01 * y01); - } - - this._ += "A" + r + "," + r + ",0,0," + (+(y01 * x20 > x01 * y20)) + "," + (this._x1 = x1 + t21 * x21) + "," + (this._y1 = y1 + t21 * y21); - } - }, - arc: function(x, y, r, a0, a1, ccw) { - x = +x, y = +y, r = +r, ccw = !!ccw; - var dx = r * Math.cos(a0), - dy = r * Math.sin(a0), - x0 = x + dx, - y0 = y + dy, - cw = 1 ^ ccw, - da = ccw ? a0 - a1 : a1 - a0; - - // Is the radius negative? Error. - if (r < 0) throw new Error("negative radius: " + r); - - // Is this path empty? Move to (x0,y0). - if (this._x1 === null) { - this._ += "M" + x0 + "," + y0; - } - - // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0). - else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) { - this._ += "L" + x0 + "," + y0; - } - - // Is this arc empty? We’re done. - if (!r) return; - - // Does the angle go the wrong way? Flip the direction. - if (da < 0) da = da % tau + tau; - - // Is this a complete circle? Draw two arcs to complete the circle. - if (da > tauEpsilon) { - this._ += "A" + r + "," + r + ",0,1," + cw + "," + (x - dx) + "," + (y - dy) + "A" + r + "," + r + ",0,1," + cw + "," + (this._x1 = x0) + "," + (this._y1 = y0); - } - - // Is this arc non-empty? Draw an arc! - else if (da > epsilon) { - this._ += "A" + r + "," + r + ",0," + (+(da >= pi)) + "," + cw + "," + (this._x1 = x + r * Math.cos(a1)) + "," + (this._y1 = y + r * Math.sin(a1)); - } - }, - rect: function(x, y, w, h) { - this._ += "M" + (this._x0 = this._x1 = +x) + "," + (this._y0 = this._y1 = +y) + "h" + (+w) + "v" + (+h) + "h" + (-w) + "Z"; - }, - toString: function() { - return this._; - } -}; - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (path); - - -/***/ }), - -/***/ "./node_modules/d3-polygon/src/area.js": -/*!*********************************************!*\ - !*** ./node_modules/d3-polygon/src/area.js ***! - \*********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(polygon) { - var i = -1, - n = polygon.length, - a, - b = polygon[n - 1], - area = 0; - - while (++i < n) { - a = b; - b = polygon[i]; - area += a[1] * b[0] - a[0] * b[1]; - } - - return area / 2; -} - - -/***/ }), - -/***/ "./node_modules/d3-polygon/src/centroid.js": -/*!*************************************************!*\ - !*** ./node_modules/d3-polygon/src/centroid.js ***! - \*************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(polygon) { - var i = -1, - n = polygon.length, - x = 0, - y = 0, - a, - b = polygon[n - 1], - c, - k = 0; - - while (++i < n) { - a = b; - b = polygon[i]; - k += c = a[0] * b[1] - b[0] * a[1]; - x += (a[0] + b[0]) * c; - y += (a[1] + b[1]) * c; - } - - return k *= 3, [x / k, y / k]; -} - - -/***/ }), - -/***/ "./node_modules/d3-polygon/src/contains.js": -/*!*************************************************!*\ - !*** ./node_modules/d3-polygon/src/contains.js ***! - \*************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(polygon, point) { - var n = polygon.length, - p = polygon[n - 1], - x = point[0], y = point[1], - x0 = p[0], y0 = p[1], - x1, y1, - inside = false; - - for (var i = 0; i < n; ++i) { - p = polygon[i], x1 = p[0], y1 = p[1]; - if (((y1 > y) !== (y0 > y)) && (x < (x0 - x1) * (y - y1) / (y0 - y1) + x1)) inside = !inside; - x0 = x1, y0 = y1; - } - - return inside; -} - - -/***/ }), - -/***/ "./node_modules/d3-polygon/src/cross.js": -/*!**********************************************!*\ - !*** ./node_modules/d3-polygon/src/cross.js ***! - \**********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -// Returns the 2D cross product of AB and AC vectors, i.e., the z-component of -// the 3D cross product in a quadrant I Cartesian coordinate system (+x is -// right, +y is up). Returns a positive value if ABC is counter-clockwise, -// negative if clockwise, and zero if the points are collinear. -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(a, b, c) { - return (b[0] - a[0]) * (c[1] - a[1]) - (b[1] - a[1]) * (c[0] - a[0]); -} - - -/***/ }), - -/***/ "./node_modules/d3-polygon/src/hull.js": -/*!*********************************************!*\ - !*** ./node_modules/d3-polygon/src/hull.js ***! - \*********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _cross_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./cross.js */ "./node_modules/d3-polygon/src/cross.js"); - - -function lexicographicOrder(a, b) { - return a[0] - b[0] || a[1] - b[1]; -} - -// Computes the upper convex hull per the monotone chain algorithm. -// Assumes points.length >= 3, is sorted by x, unique in y. -// Returns an array of indices into points in left-to-right order. -function computeUpperHullIndexes(points) { - var n = points.length, - indexes = [0, 1], - size = 2; - - for (var i = 2; i < n; ++i) { - while (size > 1 && (0,_cross_js__WEBPACK_IMPORTED_MODULE_0__["default"])(points[indexes[size - 2]], points[indexes[size - 1]], points[i]) <= 0) --size; - indexes[size++] = i; - } - - return indexes.slice(0, size); // remove popped points -} - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(points) { - if ((n = points.length) < 3) return null; - - var i, - n, - sortedPoints = new Array(n), - flippedPoints = new Array(n); - - for (i = 0; i < n; ++i) sortedPoints[i] = [+points[i][0], +points[i][1], i]; - sortedPoints.sort(lexicographicOrder); - for (i = 0; i < n; ++i) flippedPoints[i] = [sortedPoints[i][0], -sortedPoints[i][1]]; - - var upperIndexes = computeUpperHullIndexes(sortedPoints), - lowerIndexes = computeUpperHullIndexes(flippedPoints); - - // Construct the hull polygon, removing possible duplicate endpoints. - var skipLeft = lowerIndexes[0] === upperIndexes[0], - skipRight = lowerIndexes[lowerIndexes.length - 1] === upperIndexes[upperIndexes.length - 1], - hull = []; - - // Add upper hull in right-to-l order. - // Then add lower hull in left-to-right order. - for (i = upperIndexes.length - 1; i >= 0; --i) hull.push(points[sortedPoints[upperIndexes[i]][2]]); - for (i = +skipLeft; i < lowerIndexes.length - skipRight; ++i) hull.push(points[sortedPoints[lowerIndexes[i]][2]]); - - return hull; -} - - -/***/ }), - -/***/ "./node_modules/d3-polygon/src/index.js": -/*!**********************************************!*\ - !*** ./node_modules/d3-polygon/src/index.js ***! - \**********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "polygonArea": () => (/* reexport safe */ _area_js__WEBPACK_IMPORTED_MODULE_0__["default"]), -/* harmony export */ "polygonCentroid": () => (/* reexport safe */ _centroid_js__WEBPACK_IMPORTED_MODULE_1__["default"]), -/* harmony export */ "polygonContains": () => (/* reexport safe */ _contains_js__WEBPACK_IMPORTED_MODULE_3__["default"]), -/* harmony export */ "polygonHull": () => (/* reexport safe */ _hull_js__WEBPACK_IMPORTED_MODULE_2__["default"]), -/* harmony export */ "polygonLength": () => (/* reexport safe */ _length_js__WEBPACK_IMPORTED_MODULE_4__["default"]) -/* harmony export */ }); -/* harmony import */ var _area_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./area.js */ "./node_modules/d3-polygon/src/area.js"); -/* harmony import */ var _centroid_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./centroid.js */ "./node_modules/d3-polygon/src/centroid.js"); -/* harmony import */ var _hull_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./hull.js */ "./node_modules/d3-polygon/src/hull.js"); -/* harmony import */ var _contains_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./contains.js */ "./node_modules/d3-polygon/src/contains.js"); -/* harmony import */ var _length_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./length.js */ "./node_modules/d3-polygon/src/length.js"); - - - - - - - -/***/ }), - -/***/ "./node_modules/d3-polygon/src/length.js": -/*!***********************************************!*\ - !*** ./node_modules/d3-polygon/src/length.js ***! - \***********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(polygon) { - var i = -1, - n = polygon.length, - b = polygon[n - 1], - xa, - ya, - xb = b[0], - yb = b[1], - perimeter = 0; - - while (++i < n) { - xa = xb; - ya = yb; - b = polygon[i]; - xb = b[0]; - yb = b[1]; - xa -= xb; - ya -= yb; - perimeter += Math.sqrt(xa * xa + ya * ya); - } - - return perimeter; -} - - -/***/ }), - -/***/ "./node_modules/d3-quadtree/src/add.js": -/*!*********************************************!*\ - !*** ./node_modules/d3-quadtree/src/add.js ***! - \*********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "addAll": () => (/* binding */ addAll), -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(d) { - var x = +this._x.call(null, d), - y = +this._y.call(null, d); - return add(this.cover(x, y), x, y, d); -} - -function add(tree, x, y, d) { - if (isNaN(x) || isNaN(y)) return tree; // ignore invalid points - - var parent, - node = tree._root, - leaf = {data: d}, - x0 = tree._x0, - y0 = tree._y0, - x1 = tree._x1, - y1 = tree._y1, - xm, - ym, - xp, - yp, - right, - bottom, - i, - j; - - // If the tree is empty, initialize the root as a leaf. - if (!node) return tree._root = leaf, tree; - - // Find the existing leaf for the new point, or add it. - while (node.length) { - if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm; - if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym; - if (parent = node, !(node = node[i = bottom << 1 | right])) return parent[i] = leaf, tree; - } - - // Is the new point is exactly coincident with the existing point? - xp = +tree._x.call(null, node.data); - yp = +tree._y.call(null, node.data); - if (x === xp && y === yp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree; - - // Otherwise, split the leaf node until the old and new point are separated. - do { - parent = parent ? parent[i] = new Array(4) : tree._root = new Array(4); - if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm; - if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym; - } while ((i = bottom << 1 | right) === (j = (yp >= ym) << 1 | (xp >= xm))); - return parent[j] = node, parent[i] = leaf, tree; -} - -function addAll(data) { - var d, i, n = data.length, - x, - y, - xz = new Array(n), - yz = new Array(n), - x0 = Infinity, - y0 = Infinity, - x1 = -Infinity, - y1 = -Infinity; - - // Compute the points and their extent. - for (i = 0; i < n; ++i) { - if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d))) continue; - xz[i] = x; - yz[i] = y; - if (x < x0) x0 = x; - if (x > x1) x1 = x; - if (y < y0) y0 = y; - if (y > y1) y1 = y; - } - - // If there were no (valid) points, abort. - if (x0 > x1 || y0 > y1) return this; - - // Expand the tree to cover the new points. - this.cover(x0, y0).cover(x1, y1); - - // Add the new points. - for (i = 0; i < n; ++i) { - add(this, xz[i], yz[i], data[i]); - } - - return this; -} - - -/***/ }), - -/***/ "./node_modules/d3-quadtree/src/cover.js": -/*!***********************************************!*\ - !*** ./node_modules/d3-quadtree/src/cover.js ***! - \***********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(x, y) { - if (isNaN(x = +x) || isNaN(y = +y)) return this; // ignore invalid points - - var x0 = this._x0, - y0 = this._y0, - x1 = this._x1, - y1 = this._y1; - - // If the quadtree has no extent, initialize them. - // Integer extent are necessary so that if we later double the extent, - // the existing quadrant boundaries don’t change due to floating point error! - if (isNaN(x0)) { - x1 = (x0 = Math.floor(x)) + 1; - y1 = (y0 = Math.floor(y)) + 1; - } - - // Otherwise, double repeatedly to cover. - else { - var z = x1 - x0, - node = this._root, - parent, - i; - - while (x0 > x || x >= x1 || y0 > y || y >= y1) { - i = (y < y0) << 1 | (x < x0); - parent = new Array(4), parent[i] = node, node = parent, z *= 2; - switch (i) { - case 0: x1 = x0 + z, y1 = y0 + z; break; - case 1: x0 = x1 - z, y1 = y0 + z; break; - case 2: x1 = x0 + z, y0 = y1 - z; break; - case 3: x0 = x1 - z, y0 = y1 - z; break; - } - } - - if (this._root && this._root.length) this._root = node; - } - - this._x0 = x0; - this._y0 = y0; - this._x1 = x1; - this._y1 = y1; - return this; -} - - -/***/ }), - -/***/ "./node_modules/d3-quadtree/src/data.js": -/*!**********************************************!*\ - !*** ./node_modules/d3-quadtree/src/data.js ***! - \**********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() { - var data = []; - this.visit(function(node) { - if (!node.length) do data.push(node.data); while (node = node.next) - }); - return data; -} - - -/***/ }), - -/***/ "./node_modules/d3-quadtree/src/extent.js": -/*!************************************************!*\ - !*** ./node_modules/d3-quadtree/src/extent.js ***! - \************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(_) { - return arguments.length - ? this.cover(+_[0][0], +_[0][1]).cover(+_[1][0], +_[1][1]) - : isNaN(this._x0) ? undefined : [[this._x0, this._y0], [this._x1, this._y1]]; -} - - -/***/ }), - -/***/ "./node_modules/d3-quadtree/src/find.js": -/*!**********************************************!*\ - !*** ./node_modules/d3-quadtree/src/find.js ***! - \**********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _quad_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./quad.js */ "./node_modules/d3-quadtree/src/quad.js"); - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(x, y, radius) { - var data, - x0 = this._x0, - y0 = this._y0, - x1, - y1, - x2, - y2, - x3 = this._x1, - y3 = this._y1, - quads = [], - node = this._root, - q, - i; - - if (node) quads.push(new _quad_js__WEBPACK_IMPORTED_MODULE_0__["default"](node, x0, y0, x3, y3)); - if (radius == null) radius = Infinity; - else { - x0 = x - radius, y0 = y - radius; - x3 = x + radius, y3 = y + radius; - radius *= radius; - } - - while (q = quads.pop()) { - - // Stop searching if this quadrant can’t contain a closer node. - if (!(node = q.node) - || (x1 = q.x0) > x3 - || (y1 = q.y0) > y3 - || (x2 = q.x1) < x0 - || (y2 = q.y1) < y0) continue; - - // Bisect the current quadrant. - if (node.length) { - var xm = (x1 + x2) / 2, - ym = (y1 + y2) / 2; - - quads.push( - new _quad_js__WEBPACK_IMPORTED_MODULE_0__["default"](node[3], xm, ym, x2, y2), - new _quad_js__WEBPACK_IMPORTED_MODULE_0__["default"](node[2], x1, ym, xm, y2), - new _quad_js__WEBPACK_IMPORTED_MODULE_0__["default"](node[1], xm, y1, x2, ym), - new _quad_js__WEBPACK_IMPORTED_MODULE_0__["default"](node[0], x1, y1, xm, ym) - ); - - // Visit the closest quadrant first. - if (i = (y >= ym) << 1 | (x >= xm)) { - q = quads[quads.length - 1]; - quads[quads.length - 1] = quads[quads.length - 1 - i]; - quads[quads.length - 1 - i] = q; - } - } - - // Visit this point. (Visiting coincident points isn’t necessary!) - else { - var dx = x - +this._x.call(null, node.data), - dy = y - +this._y.call(null, node.data), - d2 = dx * dx + dy * dy; - if (d2 < radius) { - var d = Math.sqrt(radius = d2); - x0 = x - d, y0 = y - d; - x3 = x + d, y3 = y + d; - data = node.data; - } - } - } - - return data; -} - - -/***/ }), - -/***/ "./node_modules/d3-quadtree/src/index.js": -/*!***********************************************!*\ - !*** ./node_modules/d3-quadtree/src/index.js ***! - \***********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "quadtree": () => (/* reexport safe */ _quadtree_js__WEBPACK_IMPORTED_MODULE_0__["default"]) -/* harmony export */ }); -/* harmony import */ var _quadtree_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./quadtree.js */ "./node_modules/d3-quadtree/src/quadtree.js"); - - - -/***/ }), - -/***/ "./node_modules/d3-quadtree/src/quad.js": -/*!**********************************************!*\ - !*** ./node_modules/d3-quadtree/src/quad.js ***! - \**********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(node, x0, y0, x1, y1) { - this.node = node; - this.x0 = x0; - this.y0 = y0; - this.x1 = x1; - this.y1 = y1; -} - - -/***/ }), - -/***/ "./node_modules/d3-quadtree/src/quadtree.js": -/*!**************************************************!*\ - !*** ./node_modules/d3-quadtree/src/quadtree.js ***! - \**************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ quadtree) -/* harmony export */ }); -/* harmony import */ var _add_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./add.js */ "./node_modules/d3-quadtree/src/add.js"); -/* harmony import */ var _cover_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./cover.js */ "./node_modules/d3-quadtree/src/cover.js"); -/* harmony import */ var _data_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./data.js */ "./node_modules/d3-quadtree/src/data.js"); -/* harmony import */ var _extent_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./extent.js */ "./node_modules/d3-quadtree/src/extent.js"); -/* harmony import */ var _find_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./find.js */ "./node_modules/d3-quadtree/src/find.js"); -/* harmony import */ var _remove_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./remove.js */ "./node_modules/d3-quadtree/src/remove.js"); -/* harmony import */ var _root_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./root.js */ "./node_modules/d3-quadtree/src/root.js"); -/* harmony import */ var _size_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./size.js */ "./node_modules/d3-quadtree/src/size.js"); -/* harmony import */ var _visit_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./visit.js */ "./node_modules/d3-quadtree/src/visit.js"); -/* harmony import */ var _visitAfter_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./visitAfter.js */ "./node_modules/d3-quadtree/src/visitAfter.js"); -/* harmony import */ var _x_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./x.js */ "./node_modules/d3-quadtree/src/x.js"); -/* harmony import */ var _y_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./y.js */ "./node_modules/d3-quadtree/src/y.js"); - - - - - - - - - - - - - -function quadtree(nodes, x, y) { - 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); - return nodes == null ? tree : tree.addAll(nodes); -} - -function Quadtree(x, y, x0, y0, x1, y1) { - this._x = x; - this._y = y; - this._x0 = x0; - this._y0 = y0; - this._x1 = x1; - this._y1 = y1; - this._root = undefined; -} - -function leaf_copy(leaf) { - var copy = {data: leaf.data}, next = copy; - while (leaf = leaf.next) next = next.next = {data: leaf.data}; - return copy; -} - -var treeProto = quadtree.prototype = Quadtree.prototype; - -treeProto.copy = function() { - var copy = new Quadtree(this._x, this._y, this._x0, this._y0, this._x1, this._y1), - node = this._root, - nodes, - child; - - if (!node) return copy; - - if (!node.length) return copy._root = leaf_copy(node), copy; - - nodes = [{source: node, target: copy._root = new Array(4)}]; - while (node = nodes.pop()) { - for (var i = 0; i < 4; ++i) { - if (child = node.source[i]) { - if (child.length) nodes.push({source: child, target: node.target[i] = new Array(4)}); - else node.target[i] = leaf_copy(child); - } - } - } - - return copy; -}; - -treeProto.add = _add_js__WEBPACK_IMPORTED_MODULE_2__["default"]; -treeProto.addAll = _add_js__WEBPACK_IMPORTED_MODULE_2__.addAll; -treeProto.cover = _cover_js__WEBPACK_IMPORTED_MODULE_3__["default"]; -treeProto.data = _data_js__WEBPACK_IMPORTED_MODULE_4__["default"]; -treeProto.extent = _extent_js__WEBPACK_IMPORTED_MODULE_5__["default"]; -treeProto.find = _find_js__WEBPACK_IMPORTED_MODULE_6__["default"]; -treeProto.remove = _remove_js__WEBPACK_IMPORTED_MODULE_7__["default"]; -treeProto.removeAll = _remove_js__WEBPACK_IMPORTED_MODULE_7__.removeAll; -treeProto.root = _root_js__WEBPACK_IMPORTED_MODULE_8__["default"]; -treeProto.size = _size_js__WEBPACK_IMPORTED_MODULE_9__["default"]; -treeProto.visit = _visit_js__WEBPACK_IMPORTED_MODULE_10__["default"]; -treeProto.visitAfter = _visitAfter_js__WEBPACK_IMPORTED_MODULE_11__["default"]; -treeProto.x = _x_js__WEBPACK_IMPORTED_MODULE_0__["default"]; -treeProto.y = _y_js__WEBPACK_IMPORTED_MODULE_1__["default"]; - - -/***/ }), - -/***/ "./node_modules/d3-quadtree/src/remove.js": -/*!************************************************!*\ - !*** ./node_modules/d3-quadtree/src/remove.js ***! - \************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "removeAll": () => (/* binding */ removeAll) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(d) { - if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d))) return this; // ignore invalid points - - var parent, - node = this._root, - retainer, - previous, - next, - x0 = this._x0, - y0 = this._y0, - x1 = this._x1, - y1 = this._y1, - x, - y, - xm, - ym, - right, - bottom, - i, - j; - - // If the tree is empty, initialize the root as a leaf. - if (!node) return this; - - // Find the leaf node for the point. - // While descending, also retain the deepest parent with a non-removed sibling. - if (node.length) while (true) { - if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm; - if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym; - if (!(parent = node, node = node[i = bottom << 1 | right])) return this; - if (!node.length) break; - if (parent[(i + 1) & 3] || parent[(i + 2) & 3] || parent[(i + 3) & 3]) retainer = parent, j = i; - } - - // Find the point to remove. - while (node.data !== d) if (!(previous = node, node = node.next)) return this; - if (next = node.next) delete node.next; - - // If there are multiple coincident points, remove just the point. - if (previous) return (next ? previous.next = next : delete previous.next), this; - - // If this is the root point, remove it. - if (!parent) return this._root = next, this; - - // Remove this leaf. - next ? parent[i] = next : delete parent[i]; - - // If the parent now contains exactly one leaf, collapse superfluous parents. - if ((node = parent[0] || parent[1] || parent[2] || parent[3]) - && node === (parent[3] || parent[2] || parent[1] || parent[0]) - && !node.length) { - if (retainer) retainer[j] = node; - else this._root = node; - } - - return this; -} - -function removeAll(data) { - for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]); - return this; -} - - -/***/ }), - -/***/ "./node_modules/d3-quadtree/src/root.js": -/*!**********************************************!*\ - !*** ./node_modules/d3-quadtree/src/root.js ***! - \**********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() { - return this._root; -} - - -/***/ }), - -/***/ "./node_modules/d3-quadtree/src/size.js": -/*!**********************************************!*\ - !*** ./node_modules/d3-quadtree/src/size.js ***! - \**********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() { - var size = 0; - this.visit(function(node) { - if (!node.length) do ++size; while (node = node.next) - }); - return size; -} - - -/***/ }), - -/***/ "./node_modules/d3-quadtree/src/visit.js": -/*!***********************************************!*\ - !*** ./node_modules/d3-quadtree/src/visit.js ***! - \***********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _quad_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./quad.js */ "./node_modules/d3-quadtree/src/quad.js"); - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(callback) { - var quads = [], q, node = this._root, child, x0, y0, x1, y1; - if (node) quads.push(new _quad_js__WEBPACK_IMPORTED_MODULE_0__["default"](node, this._x0, this._y0, this._x1, this._y1)); - while (q = quads.pop()) { - if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1) && node.length) { - var xm = (x0 + x1) / 2, ym = (y0 + y1) / 2; - if (child = node[3]) quads.push(new _quad_js__WEBPACK_IMPORTED_MODULE_0__["default"](child, xm, ym, x1, y1)); - if (child = node[2]) quads.push(new _quad_js__WEBPACK_IMPORTED_MODULE_0__["default"](child, x0, ym, xm, y1)); - if (child = node[1]) quads.push(new _quad_js__WEBPACK_IMPORTED_MODULE_0__["default"](child, xm, y0, x1, ym)); - if (child = node[0]) quads.push(new _quad_js__WEBPACK_IMPORTED_MODULE_0__["default"](child, x0, y0, xm, ym)); - } - } - return this; -} - - -/***/ }), - -/***/ "./node_modules/d3-quadtree/src/visitAfter.js": -/*!****************************************************!*\ - !*** ./node_modules/d3-quadtree/src/visitAfter.js ***! - \****************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _quad_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./quad.js */ "./node_modules/d3-quadtree/src/quad.js"); - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(callback) { - var quads = [], next = [], q; - if (this._root) quads.push(new _quad_js__WEBPACK_IMPORTED_MODULE_0__["default"](this._root, this._x0, this._y0, this._x1, this._y1)); - while (q = quads.pop()) { - var node = q.node; - if (node.length) { - var child, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1, xm = (x0 + x1) / 2, ym = (y0 + y1) / 2; - if (child = node[0]) quads.push(new _quad_js__WEBPACK_IMPORTED_MODULE_0__["default"](child, x0, y0, xm, ym)); - if (child = node[1]) quads.push(new _quad_js__WEBPACK_IMPORTED_MODULE_0__["default"](child, xm, y0, x1, ym)); - if (child = node[2]) quads.push(new _quad_js__WEBPACK_IMPORTED_MODULE_0__["default"](child, x0, ym, xm, y1)); - if (child = node[3]) quads.push(new _quad_js__WEBPACK_IMPORTED_MODULE_0__["default"](child, xm, ym, x1, y1)); - } - next.push(q); - } - while (q = next.pop()) { - callback(q.node, q.x0, q.y0, q.x1, q.y1); - } - return this; -} - - -/***/ }), - -/***/ "./node_modules/d3-quadtree/src/x.js": -/*!*******************************************!*\ - !*** ./node_modules/d3-quadtree/src/x.js ***! - \*******************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "defaultX": () => (/* binding */ defaultX) -/* harmony export */ }); -function defaultX(d) { - return d[0]; -} - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(_) { - return arguments.length ? (this._x = _, this) : this._x; -} - - -/***/ }), - -/***/ "./node_modules/d3-quadtree/src/y.js": -/*!*******************************************!*\ - !*** ./node_modules/d3-quadtree/src/y.js ***! - \*******************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "defaultY": () => (/* binding */ defaultY) -/* harmony export */ }); -function defaultY(d) { - return d[1]; -} - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(_) { - return arguments.length ? (this._y = _, this) : this._y; -} - - -/***/ }), - -/***/ "./node_modules/d3-random/src/bates.js": -/*!*********************************************!*\ - !*** ./node_modules/d3-random/src/bates.js ***! - \*********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _defaultSource__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./defaultSource */ "./node_modules/d3-random/src/defaultSource.js"); -/* harmony import */ var _irwinHall__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./irwinHall */ "./node_modules/d3-random/src/irwinHall.js"); - - - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((function sourceRandomBates(source) { - function randomBates(n) { - var randomIrwinHall = _irwinHall__WEBPACK_IMPORTED_MODULE_1__["default"].source(source)(n); - return function() { - return randomIrwinHall() / n; - }; - } - - randomBates.source = sourceRandomBates; - - return randomBates; -})(_defaultSource__WEBPACK_IMPORTED_MODULE_0__["default"])); - - -/***/ }), - -/***/ "./node_modules/d3-random/src/defaultSource.js": -/*!*****************************************************!*\ - !*** ./node_modules/d3-random/src/defaultSource.js ***! - \*****************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() { - return Math.random(); -} - - -/***/ }), - -/***/ "./node_modules/d3-random/src/exponential.js": -/*!***************************************************!*\ - !*** ./node_modules/d3-random/src/exponential.js ***! - \***************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _defaultSource__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./defaultSource */ "./node_modules/d3-random/src/defaultSource.js"); - - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((function sourceRandomExponential(source) { - function randomExponential(lambda) { - return function() { - return -Math.log(1 - source()) / lambda; - }; - } - - randomExponential.source = sourceRandomExponential; - - return randomExponential; -})(_defaultSource__WEBPACK_IMPORTED_MODULE_0__["default"])); - - -/***/ }), - -/***/ "./node_modules/d3-random/src/index.js": -/*!*********************************************!*\ - !*** ./node_modules/d3-random/src/index.js ***! - \*********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "randomBates": () => (/* reexport safe */ _bates__WEBPACK_IMPORTED_MODULE_3__["default"]), -/* harmony export */ "randomExponential": () => (/* reexport safe */ _exponential__WEBPACK_IMPORTED_MODULE_5__["default"]), -/* harmony export */ "randomIrwinHall": () => (/* reexport safe */ _irwinHall__WEBPACK_IMPORTED_MODULE_4__["default"]), -/* harmony export */ "randomLogNormal": () => (/* reexport safe */ _logNormal__WEBPACK_IMPORTED_MODULE_2__["default"]), -/* harmony export */ "randomNormal": () => (/* reexport safe */ _normal__WEBPACK_IMPORTED_MODULE_1__["default"]), -/* harmony export */ "randomUniform": () => (/* reexport safe */ _uniform__WEBPACK_IMPORTED_MODULE_0__["default"]) -/* harmony export */ }); -/* harmony import */ var _uniform__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./uniform */ "./node_modules/d3-random/src/uniform.js"); -/* harmony import */ var _normal__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./normal */ "./node_modules/d3-random/src/normal.js"); -/* harmony import */ var _logNormal__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./logNormal */ "./node_modules/d3-random/src/logNormal.js"); -/* harmony import */ var _bates__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./bates */ "./node_modules/d3-random/src/bates.js"); -/* harmony import */ var _irwinHall__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./irwinHall */ "./node_modules/d3-random/src/irwinHall.js"); -/* harmony import */ var _exponential__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./exponential */ "./node_modules/d3-random/src/exponential.js"); - - - - - - - - -/***/ }), - -/***/ "./node_modules/d3-random/src/irwinHall.js": -/*!*************************************************!*\ - !*** ./node_modules/d3-random/src/irwinHall.js ***! - \*************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _defaultSource__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./defaultSource */ "./node_modules/d3-random/src/defaultSource.js"); - - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((function sourceRandomIrwinHall(source) { - function randomIrwinHall(n) { - return function() { - for (var sum = 0, i = 0; i < n; ++i) sum += source(); - return sum; - }; - } - - randomIrwinHall.source = sourceRandomIrwinHall; - - return randomIrwinHall; -})(_defaultSource__WEBPACK_IMPORTED_MODULE_0__["default"])); - - -/***/ }), - -/***/ "./node_modules/d3-random/src/logNormal.js": -/*!*************************************************!*\ - !*** ./node_modules/d3-random/src/logNormal.js ***! - \*************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _defaultSource__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./defaultSource */ "./node_modules/d3-random/src/defaultSource.js"); -/* harmony import */ var _normal__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./normal */ "./node_modules/d3-random/src/normal.js"); - - - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((function sourceRandomLogNormal(source) { - function randomLogNormal() { - var randomNormal = _normal__WEBPACK_IMPORTED_MODULE_1__["default"].source(source).apply(this, arguments); - return function() { - return Math.exp(randomNormal()); - }; - } - - randomLogNormal.source = sourceRandomLogNormal; - - return randomLogNormal; -})(_defaultSource__WEBPACK_IMPORTED_MODULE_0__["default"])); - - -/***/ }), - -/***/ "./node_modules/d3-random/src/normal.js": -/*!**********************************************!*\ - !*** ./node_modules/d3-random/src/normal.js ***! - \**********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _defaultSource__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./defaultSource */ "./node_modules/d3-random/src/defaultSource.js"); - - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((function sourceRandomNormal(source) { - function randomNormal(mu, sigma) { - var x, r; - mu = mu == null ? 0 : +mu; - sigma = sigma == null ? 1 : +sigma; - return function() { - var y; - - // If available, use the second previously-generated uniform random. - if (x != null) y = x, x = null; - - // Otherwise, generate a new x and y. - else do { - x = source() * 2 - 1; - y = source() * 2 - 1; - r = x * x + y * y; - } while (!r || r > 1); - - return mu + sigma * y * Math.sqrt(-2 * Math.log(r) / r); - }; - } - - randomNormal.source = sourceRandomNormal; - - return randomNormal; -})(_defaultSource__WEBPACK_IMPORTED_MODULE_0__["default"])); - - -/***/ }), - -/***/ "./node_modules/d3-random/src/uniform.js": -/*!***********************************************!*\ - !*** ./node_modules/d3-random/src/uniform.js ***! - \***********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _defaultSource__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./defaultSource */ "./node_modules/d3-random/src/defaultSource.js"); - - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((function sourceRandomUniform(source) { - function randomUniform(min, max) { - min = min == null ? 0 : +min; - max = max == null ? 1 : +max; - if (arguments.length === 1) max = min, min = 0; - else max -= min; - return function() { - return source() * max + min; - }; - } - - randomUniform.source = sourceRandomUniform; - - return randomUniform; -})(_defaultSource__WEBPACK_IMPORTED_MODULE_0__["default"])); - - -/***/ }), - -/***/ "./node_modules/d3-scale-chromatic/src/categorical/Accent.js": -/*!*******************************************************************!*\ - !*** ./node_modules/d3-scale-chromatic/src/categorical/Accent.js ***! - \*******************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _colors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors.js */ "./node_modules/d3-scale-chromatic/src/colors.js"); - - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_colors_js__WEBPACK_IMPORTED_MODULE_0__["default"])("7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666")); - - -/***/ }), - -/***/ "./node_modules/d3-scale-chromatic/src/categorical/Dark2.js": -/*!******************************************************************!*\ - !*** ./node_modules/d3-scale-chromatic/src/categorical/Dark2.js ***! - \******************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _colors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors.js */ "./node_modules/d3-scale-chromatic/src/colors.js"); - - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_colors_js__WEBPACK_IMPORTED_MODULE_0__["default"])("1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666")); - - -/***/ }), - -/***/ "./node_modules/d3-scale-chromatic/src/categorical/Paired.js": -/*!*******************************************************************!*\ - !*** ./node_modules/d3-scale-chromatic/src/categorical/Paired.js ***! - \*******************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _colors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors.js */ "./node_modules/d3-scale-chromatic/src/colors.js"); - - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_colors_js__WEBPACK_IMPORTED_MODULE_0__["default"])("a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928")); - - -/***/ }), - -/***/ "./node_modules/d3-scale-chromatic/src/categorical/Pastel1.js": -/*!********************************************************************!*\ - !*** ./node_modules/d3-scale-chromatic/src/categorical/Pastel1.js ***! - \********************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _colors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors.js */ "./node_modules/d3-scale-chromatic/src/colors.js"); - - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_colors_js__WEBPACK_IMPORTED_MODULE_0__["default"])("fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2")); - - -/***/ }), - -/***/ "./node_modules/d3-scale-chromatic/src/categorical/Pastel2.js": -/*!********************************************************************!*\ - !*** ./node_modules/d3-scale-chromatic/src/categorical/Pastel2.js ***! - \********************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _colors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors.js */ "./node_modules/d3-scale-chromatic/src/colors.js"); - - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_colors_js__WEBPACK_IMPORTED_MODULE_0__["default"])("b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc")); - - -/***/ }), - -/***/ "./node_modules/d3-scale-chromatic/src/categorical/Set1.js": -/*!*****************************************************************!*\ - !*** ./node_modules/d3-scale-chromatic/src/categorical/Set1.js ***! - \*****************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _colors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors.js */ "./node_modules/d3-scale-chromatic/src/colors.js"); - - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_colors_js__WEBPACK_IMPORTED_MODULE_0__["default"])("e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999")); - - -/***/ }), - -/***/ "./node_modules/d3-scale-chromatic/src/categorical/Set2.js": -/*!*****************************************************************!*\ - !*** ./node_modules/d3-scale-chromatic/src/categorical/Set2.js ***! - \*****************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _colors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors.js */ "./node_modules/d3-scale-chromatic/src/colors.js"); - - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_colors_js__WEBPACK_IMPORTED_MODULE_0__["default"])("66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3")); - - -/***/ }), - -/***/ "./node_modules/d3-scale-chromatic/src/categorical/Set3.js": -/*!*****************************************************************!*\ - !*** ./node_modules/d3-scale-chromatic/src/categorical/Set3.js ***! - \*****************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _colors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors.js */ "./node_modules/d3-scale-chromatic/src/colors.js"); - - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_colors_js__WEBPACK_IMPORTED_MODULE_0__["default"])("8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f")); - - -/***/ }), - -/***/ "./node_modules/d3-scale-chromatic/src/categorical/Tableau10.js": -/*!**********************************************************************!*\ - !*** ./node_modules/d3-scale-chromatic/src/categorical/Tableau10.js ***! - \**********************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _colors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors.js */ "./node_modules/d3-scale-chromatic/src/colors.js"); - - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_colors_js__WEBPACK_IMPORTED_MODULE_0__["default"])("4e79a7f28e2ce1575976b7b259a14fedc949af7aa1ff9da79c755fbab0ab")); - - -/***/ }), - -/***/ "./node_modules/d3-scale-chromatic/src/categorical/category10.js": -/*!***********************************************************************!*\ - !*** ./node_modules/d3-scale-chromatic/src/categorical/category10.js ***! - \***********************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _colors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors.js */ "./node_modules/d3-scale-chromatic/src/colors.js"); - - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_colors_js__WEBPACK_IMPORTED_MODULE_0__["default"])("1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf")); - - -/***/ }), - -/***/ "./node_modules/d3-scale-chromatic/src/colors.js": -/*!*******************************************************!*\ - !*** ./node_modules/d3-scale-chromatic/src/colors.js ***! - \*******************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(specifier) { - var n = specifier.length / 6 | 0, colors = new Array(n), i = 0; - while (i < n) colors[i] = "#" + specifier.slice(i * 6, ++i * 6); - return colors; -} - - -/***/ }), - -/***/ "./node_modules/d3-scale-chromatic/src/diverging/BrBG.js": -/*!***************************************************************!*\ - !*** ./node_modules/d3-scale-chromatic/src/diverging/BrBG.js ***! - \***************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "scheme": () => (/* binding */ scheme) -/* harmony export */ }); -/* harmony import */ var _colors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors.js */ "./node_modules/d3-scale-chromatic/src/colors.js"); -/* harmony import */ var _ramp_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp.js */ "./node_modules/d3-scale-chromatic/src/ramp.js"); - - - -var scheme = new Array(3).concat( - "d8b365f5f5f55ab4ac", - "a6611adfc27d80cdc1018571", - "a6611adfc27df5f5f580cdc1018571", - "8c510ad8b365f6e8c3c7eae55ab4ac01665e", - "8c510ad8b365f6e8c3f5f5f5c7eae55ab4ac01665e", - "8c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e", - "8c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e", - "5430058c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e003c30", - "5430058c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e003c30" -).map(_colors_js__WEBPACK_IMPORTED_MODULE_0__["default"]); - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_ramp_js__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); - - -/***/ }), - -/***/ "./node_modules/d3-scale-chromatic/src/diverging/PRGn.js": -/*!***************************************************************!*\ - !*** ./node_modules/d3-scale-chromatic/src/diverging/PRGn.js ***! - \***************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "scheme": () => (/* binding */ scheme) -/* harmony export */ }); -/* harmony import */ var _colors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors.js */ "./node_modules/d3-scale-chromatic/src/colors.js"); -/* harmony import */ var _ramp_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp.js */ "./node_modules/d3-scale-chromatic/src/ramp.js"); - - - -var scheme = new Array(3).concat( - "af8dc3f7f7f77fbf7b", - "7b3294c2a5cfa6dba0008837", - "7b3294c2a5cff7f7f7a6dba0008837", - "762a83af8dc3e7d4e8d9f0d37fbf7b1b7837", - "762a83af8dc3e7d4e8f7f7f7d9f0d37fbf7b1b7837", - "762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b7837", - "762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b7837", - "40004b762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b783700441b", - "40004b762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b783700441b" -).map(_colors_js__WEBPACK_IMPORTED_MODULE_0__["default"]); - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_ramp_js__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); - - -/***/ }), - -/***/ "./node_modules/d3-scale-chromatic/src/diverging/PiYG.js": -/*!***************************************************************!*\ - !*** ./node_modules/d3-scale-chromatic/src/diverging/PiYG.js ***! - \***************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "scheme": () => (/* binding */ scheme) -/* harmony export */ }); -/* harmony import */ var _colors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors.js */ "./node_modules/d3-scale-chromatic/src/colors.js"); -/* harmony import */ var _ramp_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp.js */ "./node_modules/d3-scale-chromatic/src/ramp.js"); - - - -var scheme = new Array(3).concat( - "e9a3c9f7f7f7a1d76a", - "d01c8bf1b6dab8e1864dac26", - "d01c8bf1b6daf7f7f7b8e1864dac26", - "c51b7de9a3c9fde0efe6f5d0a1d76a4d9221", - "c51b7de9a3c9fde0eff7f7f7e6f5d0a1d76a4d9221", - "c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221", - "c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221", - "8e0152c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221276419", - "8e0152c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221276419" -).map(_colors_js__WEBPACK_IMPORTED_MODULE_0__["default"]); - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_ramp_js__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); - - -/***/ }), - -/***/ "./node_modules/d3-scale-chromatic/src/diverging/PuOr.js": -/*!***************************************************************!*\ - !*** ./node_modules/d3-scale-chromatic/src/diverging/PuOr.js ***! - \***************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "scheme": () => (/* binding */ scheme) -/* harmony export */ }); -/* harmony import */ var _colors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors.js */ "./node_modules/d3-scale-chromatic/src/colors.js"); -/* harmony import */ var _ramp_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp.js */ "./node_modules/d3-scale-chromatic/src/ramp.js"); - - - -var scheme = new Array(3).concat( - "998ec3f7f7f7f1a340", - "5e3c99b2abd2fdb863e66101", - "5e3c99b2abd2f7f7f7fdb863e66101", - "542788998ec3d8daebfee0b6f1a340b35806", - "542788998ec3d8daebf7f7f7fee0b6f1a340b35806", - "5427888073acb2abd2d8daebfee0b6fdb863e08214b35806", - "5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b35806", - "2d004b5427888073acb2abd2d8daebfee0b6fdb863e08214b358067f3b08", - "2d004b5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b358067f3b08" -).map(_colors_js__WEBPACK_IMPORTED_MODULE_0__["default"]); - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_ramp_js__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); - - -/***/ }), - -/***/ "./node_modules/d3-scale-chromatic/src/diverging/RdBu.js": -/*!***************************************************************!*\ - !*** ./node_modules/d3-scale-chromatic/src/diverging/RdBu.js ***! - \***************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "scheme": () => (/* binding */ scheme) -/* harmony export */ }); -/* harmony import */ var _colors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors.js */ "./node_modules/d3-scale-chromatic/src/colors.js"); -/* harmony import */ var _ramp_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp.js */ "./node_modules/d3-scale-chromatic/src/ramp.js"); - - - -var scheme = new Array(3).concat( - "ef8a62f7f7f767a9cf", - "ca0020f4a58292c5de0571b0", - "ca0020f4a582f7f7f792c5de0571b0", - "b2182bef8a62fddbc7d1e5f067a9cf2166ac", - "b2182bef8a62fddbc7f7f7f7d1e5f067a9cf2166ac", - "b2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac", - "b2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac", - "67001fb2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac053061", - "67001fb2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac053061" -).map(_colors_js__WEBPACK_IMPORTED_MODULE_0__["default"]); - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_ramp_js__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); - - -/***/ }), - -/***/ "./node_modules/d3-scale-chromatic/src/diverging/RdGy.js": -/*!***************************************************************!*\ - !*** ./node_modules/d3-scale-chromatic/src/diverging/RdGy.js ***! - \***************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "scheme": () => (/* binding */ scheme) -/* harmony export */ }); -/* harmony import */ var _colors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors.js */ "./node_modules/d3-scale-chromatic/src/colors.js"); -/* harmony import */ var _ramp_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp.js */ "./node_modules/d3-scale-chromatic/src/ramp.js"); - - - -var scheme = new Array(3).concat( - "ef8a62ffffff999999", - "ca0020f4a582bababa404040", - "ca0020f4a582ffffffbababa404040", - "b2182bef8a62fddbc7e0e0e09999994d4d4d", - "b2182bef8a62fddbc7ffffffe0e0e09999994d4d4d", - "b2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d", - "b2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d", - "67001fb2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d1a1a1a", - "67001fb2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d1a1a1a" -).map(_colors_js__WEBPACK_IMPORTED_MODULE_0__["default"]); - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_ramp_js__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); - - -/***/ }), - -/***/ "./node_modules/d3-scale-chromatic/src/diverging/RdYlBu.js": -/*!*****************************************************************!*\ - !*** ./node_modules/d3-scale-chromatic/src/diverging/RdYlBu.js ***! - \*****************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "scheme": () => (/* binding */ scheme) -/* harmony export */ }); -/* harmony import */ var _colors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors.js */ "./node_modules/d3-scale-chromatic/src/colors.js"); -/* harmony import */ var _ramp_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp.js */ "./node_modules/d3-scale-chromatic/src/ramp.js"); - - - -var scheme = new Array(3).concat( - "fc8d59ffffbf91bfdb", - "d7191cfdae61abd9e92c7bb6", - "d7191cfdae61ffffbfabd9e92c7bb6", - "d73027fc8d59fee090e0f3f891bfdb4575b4", - "d73027fc8d59fee090ffffbfe0f3f891bfdb4575b4", - "d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4", - "d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4", - "a50026d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4313695", - "a50026d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4313695" -).map(_colors_js__WEBPACK_IMPORTED_MODULE_0__["default"]); - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_ramp_js__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); - - -/***/ }), - -/***/ "./node_modules/d3-scale-chromatic/src/diverging/RdYlGn.js": -/*!*****************************************************************!*\ - !*** ./node_modules/d3-scale-chromatic/src/diverging/RdYlGn.js ***! - \*****************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "scheme": () => (/* binding */ scheme) -/* harmony export */ }); -/* harmony import */ var _colors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors.js */ "./node_modules/d3-scale-chromatic/src/colors.js"); -/* harmony import */ var _ramp_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp.js */ "./node_modules/d3-scale-chromatic/src/ramp.js"); - - - -var scheme = new Array(3).concat( - "fc8d59ffffbf91cf60", - "d7191cfdae61a6d96a1a9641", - "d7191cfdae61ffffbfa6d96a1a9641", - "d73027fc8d59fee08bd9ef8b91cf601a9850", - "d73027fc8d59fee08bffffbfd9ef8b91cf601a9850", - "d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850", - "d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850", - "a50026d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850006837", - "a50026d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850006837" -).map(_colors_js__WEBPACK_IMPORTED_MODULE_0__["default"]); - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_ramp_js__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); - - -/***/ }), - -/***/ "./node_modules/d3-scale-chromatic/src/diverging/Spectral.js": -/*!*******************************************************************!*\ - !*** ./node_modules/d3-scale-chromatic/src/diverging/Spectral.js ***! - \*******************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "scheme": () => (/* binding */ scheme) -/* harmony export */ }); -/* harmony import */ var _colors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors.js */ "./node_modules/d3-scale-chromatic/src/colors.js"); -/* harmony import */ var _ramp_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp.js */ "./node_modules/d3-scale-chromatic/src/ramp.js"); - - - -var scheme = new Array(3).concat( - "fc8d59ffffbf99d594", - "d7191cfdae61abdda42b83ba", - "d7191cfdae61ffffbfabdda42b83ba", - "d53e4ffc8d59fee08be6f59899d5943288bd", - "d53e4ffc8d59fee08bffffbfe6f59899d5943288bd", - "d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd", - "d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd", - "9e0142d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd5e4fa2", - "9e0142d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd5e4fa2" -).map(_colors_js__WEBPACK_IMPORTED_MODULE_0__["default"]); - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_ramp_js__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); - - -/***/ }), - -/***/ "./node_modules/d3-scale-chromatic/src/index.js": -/*!******************************************************!*\ - !*** ./node_modules/d3-scale-chromatic/src/index.js ***! - \******************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "interpolateBlues": () => (/* reexport safe */ _sequential_single_Blues_js__WEBPACK_IMPORTED_MODULE_31__["default"]), -/* harmony export */ "interpolateBrBG": () => (/* reexport safe */ _diverging_BrBG_js__WEBPACK_IMPORTED_MODULE_10__["default"]), -/* harmony export */ "interpolateBuGn": () => (/* reexport safe */ _sequential_multi_BuGn_js__WEBPACK_IMPORTED_MODULE_19__["default"]), -/* harmony export */ "interpolateBuPu": () => (/* reexport safe */ _sequential_multi_BuPu_js__WEBPACK_IMPORTED_MODULE_20__["default"]), -/* harmony export */ "interpolateCividis": () => (/* reexport safe */ _sequential_multi_cividis_js__WEBPACK_IMPORTED_MODULE_37__["default"]), -/* harmony export */ "interpolateCool": () => (/* reexport safe */ _sequential_multi_rainbow_js__WEBPACK_IMPORTED_MODULE_39__.cool), -/* harmony export */ "interpolateCubehelixDefault": () => (/* reexport safe */ _sequential_multi_cubehelix_js__WEBPACK_IMPORTED_MODULE_38__["default"]), -/* harmony export */ "interpolateGnBu": () => (/* reexport safe */ _sequential_multi_GnBu_js__WEBPACK_IMPORTED_MODULE_21__["default"]), -/* harmony export */ "interpolateGreens": () => (/* reexport safe */ _sequential_single_Greens_js__WEBPACK_IMPORTED_MODULE_32__["default"]), -/* harmony export */ "interpolateGreys": () => (/* reexport safe */ _sequential_single_Greys_js__WEBPACK_IMPORTED_MODULE_33__["default"]), -/* harmony export */ "interpolateInferno": () => (/* reexport safe */ _sequential_multi_viridis_js__WEBPACK_IMPORTED_MODULE_42__.inferno), -/* harmony export */ "interpolateMagma": () => (/* reexport safe */ _sequential_multi_viridis_js__WEBPACK_IMPORTED_MODULE_42__.magma), -/* harmony export */ "interpolateOrRd": () => (/* reexport safe */ _sequential_multi_OrRd_js__WEBPACK_IMPORTED_MODULE_22__["default"]), -/* harmony export */ "interpolateOranges": () => (/* reexport safe */ _sequential_single_Oranges_js__WEBPACK_IMPORTED_MODULE_36__["default"]), -/* harmony export */ "interpolatePRGn": () => (/* reexport safe */ _diverging_PRGn_js__WEBPACK_IMPORTED_MODULE_11__["default"]), -/* harmony export */ "interpolatePiYG": () => (/* reexport safe */ _diverging_PiYG_js__WEBPACK_IMPORTED_MODULE_12__["default"]), -/* harmony export */ "interpolatePlasma": () => (/* reexport safe */ _sequential_multi_viridis_js__WEBPACK_IMPORTED_MODULE_42__.plasma), -/* harmony export */ "interpolatePuBu": () => (/* reexport safe */ _sequential_multi_PuBu_js__WEBPACK_IMPORTED_MODULE_24__["default"]), -/* harmony export */ "interpolatePuBuGn": () => (/* reexport safe */ _sequential_multi_PuBuGn_js__WEBPACK_IMPORTED_MODULE_23__["default"]), -/* harmony export */ "interpolatePuOr": () => (/* reexport safe */ _diverging_PuOr_js__WEBPACK_IMPORTED_MODULE_13__["default"]), -/* harmony export */ "interpolatePuRd": () => (/* reexport safe */ _sequential_multi_PuRd_js__WEBPACK_IMPORTED_MODULE_25__["default"]), -/* harmony export */ "interpolatePurples": () => (/* reexport safe */ _sequential_single_Purples_js__WEBPACK_IMPORTED_MODULE_34__["default"]), -/* harmony export */ "interpolateRainbow": () => (/* reexport safe */ _sequential_multi_rainbow_js__WEBPACK_IMPORTED_MODULE_39__["default"]), -/* harmony export */ "interpolateRdBu": () => (/* reexport safe */ _diverging_RdBu_js__WEBPACK_IMPORTED_MODULE_14__["default"]), -/* harmony export */ "interpolateRdGy": () => (/* reexport safe */ _diverging_RdGy_js__WEBPACK_IMPORTED_MODULE_15__["default"]), -/* harmony export */ "interpolateRdPu": () => (/* reexport safe */ _sequential_multi_RdPu_js__WEBPACK_IMPORTED_MODULE_26__["default"]), -/* harmony export */ "interpolateRdYlBu": () => (/* reexport safe */ _diverging_RdYlBu_js__WEBPACK_IMPORTED_MODULE_16__["default"]), -/* harmony export */ "interpolateRdYlGn": () => (/* reexport safe */ _diverging_RdYlGn_js__WEBPACK_IMPORTED_MODULE_17__["default"]), -/* harmony export */ "interpolateReds": () => (/* reexport safe */ _sequential_single_Reds_js__WEBPACK_IMPORTED_MODULE_35__["default"]), -/* harmony export */ "interpolateSinebow": () => (/* reexport safe */ _sequential_multi_sinebow_js__WEBPACK_IMPORTED_MODULE_40__["default"]), -/* harmony export */ "interpolateSpectral": () => (/* reexport safe */ _diverging_Spectral_js__WEBPACK_IMPORTED_MODULE_18__["default"]), -/* harmony export */ "interpolateTurbo": () => (/* reexport safe */ _sequential_multi_turbo_js__WEBPACK_IMPORTED_MODULE_41__["default"]), -/* harmony export */ "interpolateViridis": () => (/* reexport safe */ _sequential_multi_viridis_js__WEBPACK_IMPORTED_MODULE_42__["default"]), -/* harmony export */ "interpolateWarm": () => (/* reexport safe */ _sequential_multi_rainbow_js__WEBPACK_IMPORTED_MODULE_39__.warm), -/* harmony export */ "interpolateYlGn": () => (/* reexport safe */ _sequential_multi_YlGn_js__WEBPACK_IMPORTED_MODULE_28__["default"]), -/* harmony export */ "interpolateYlGnBu": () => (/* reexport safe */ _sequential_multi_YlGnBu_js__WEBPACK_IMPORTED_MODULE_27__["default"]), -/* harmony export */ "interpolateYlOrBr": () => (/* reexport safe */ _sequential_multi_YlOrBr_js__WEBPACK_IMPORTED_MODULE_29__["default"]), -/* harmony export */ "interpolateYlOrRd": () => (/* reexport safe */ _sequential_multi_YlOrRd_js__WEBPACK_IMPORTED_MODULE_30__["default"]), -/* harmony export */ "schemeAccent": () => (/* reexport safe */ _categorical_Accent_js__WEBPACK_IMPORTED_MODULE_1__["default"]), -/* harmony export */ "schemeBlues": () => (/* reexport safe */ _sequential_single_Blues_js__WEBPACK_IMPORTED_MODULE_31__.scheme), -/* harmony export */ "schemeBrBG": () => (/* reexport safe */ _diverging_BrBG_js__WEBPACK_IMPORTED_MODULE_10__.scheme), -/* harmony export */ "schemeBuGn": () => (/* reexport safe */ _sequential_multi_BuGn_js__WEBPACK_IMPORTED_MODULE_19__.scheme), -/* harmony export */ "schemeBuPu": () => (/* reexport safe */ _sequential_multi_BuPu_js__WEBPACK_IMPORTED_MODULE_20__.scheme), -/* harmony export */ "schemeCategory10": () => (/* reexport safe */ _categorical_category10_js__WEBPACK_IMPORTED_MODULE_0__["default"]), -/* harmony export */ "schemeDark2": () => (/* reexport safe */ _categorical_Dark2_js__WEBPACK_IMPORTED_MODULE_2__["default"]), -/* harmony export */ "schemeGnBu": () => (/* reexport safe */ _sequential_multi_GnBu_js__WEBPACK_IMPORTED_MODULE_21__.scheme), -/* harmony export */ "schemeGreens": () => (/* reexport safe */ _sequential_single_Greens_js__WEBPACK_IMPORTED_MODULE_32__.scheme), -/* harmony export */ "schemeGreys": () => (/* reexport safe */ _sequential_single_Greys_js__WEBPACK_IMPORTED_MODULE_33__.scheme), -/* harmony export */ "schemeOrRd": () => (/* reexport safe */ _sequential_multi_OrRd_js__WEBPACK_IMPORTED_MODULE_22__.scheme), -/* harmony export */ "schemeOranges": () => (/* reexport safe */ _sequential_single_Oranges_js__WEBPACK_IMPORTED_MODULE_36__.scheme), -/* harmony export */ "schemePRGn": () => (/* reexport safe */ _diverging_PRGn_js__WEBPACK_IMPORTED_MODULE_11__.scheme), -/* harmony export */ "schemePaired": () => (/* reexport safe */ _categorical_Paired_js__WEBPACK_IMPORTED_MODULE_3__["default"]), -/* harmony export */ "schemePastel1": () => (/* reexport safe */ _categorical_Pastel1_js__WEBPACK_IMPORTED_MODULE_4__["default"]), -/* harmony export */ "schemePastel2": () => (/* reexport safe */ _categorical_Pastel2_js__WEBPACK_IMPORTED_MODULE_5__["default"]), -/* harmony export */ "schemePiYG": () => (/* reexport safe */ _diverging_PiYG_js__WEBPACK_IMPORTED_MODULE_12__.scheme), -/* harmony export */ "schemePuBu": () => (/* reexport safe */ _sequential_multi_PuBu_js__WEBPACK_IMPORTED_MODULE_24__.scheme), -/* harmony export */ "schemePuBuGn": () => (/* reexport safe */ _sequential_multi_PuBuGn_js__WEBPACK_IMPORTED_MODULE_23__.scheme), -/* harmony export */ "schemePuOr": () => (/* reexport safe */ _diverging_PuOr_js__WEBPACK_IMPORTED_MODULE_13__.scheme), -/* harmony export */ "schemePuRd": () => (/* reexport safe */ _sequential_multi_PuRd_js__WEBPACK_IMPORTED_MODULE_25__.scheme), -/* harmony export */ "schemePurples": () => (/* reexport safe */ _sequential_single_Purples_js__WEBPACK_IMPORTED_MODULE_34__.scheme), -/* harmony export */ "schemeRdBu": () => (/* reexport safe */ _diverging_RdBu_js__WEBPACK_IMPORTED_MODULE_14__.scheme), -/* harmony export */ "schemeRdGy": () => (/* reexport safe */ _diverging_RdGy_js__WEBPACK_IMPORTED_MODULE_15__.scheme), -/* harmony export */ "schemeRdPu": () => (/* reexport safe */ _sequential_multi_RdPu_js__WEBPACK_IMPORTED_MODULE_26__.scheme), -/* harmony export */ "schemeRdYlBu": () => (/* reexport safe */ _diverging_RdYlBu_js__WEBPACK_IMPORTED_MODULE_16__.scheme), -/* harmony export */ "schemeRdYlGn": () => (/* reexport safe */ _diverging_RdYlGn_js__WEBPACK_IMPORTED_MODULE_17__.scheme), -/* harmony export */ "schemeReds": () => (/* reexport safe */ _sequential_single_Reds_js__WEBPACK_IMPORTED_MODULE_35__.scheme), -/* harmony export */ "schemeSet1": () => (/* reexport safe */ _categorical_Set1_js__WEBPACK_IMPORTED_MODULE_6__["default"]), -/* harmony export */ "schemeSet2": () => (/* reexport safe */ _categorical_Set2_js__WEBPACK_IMPORTED_MODULE_7__["default"]), -/* harmony export */ "schemeSet3": () => (/* reexport safe */ _categorical_Set3_js__WEBPACK_IMPORTED_MODULE_8__["default"]), -/* harmony export */ "schemeSpectral": () => (/* reexport safe */ _diverging_Spectral_js__WEBPACK_IMPORTED_MODULE_18__.scheme), -/* harmony export */ "schemeTableau10": () => (/* reexport safe */ _categorical_Tableau10_js__WEBPACK_IMPORTED_MODULE_9__["default"]), -/* harmony export */ "schemeYlGn": () => (/* reexport safe */ _sequential_multi_YlGn_js__WEBPACK_IMPORTED_MODULE_28__.scheme), -/* harmony export */ "schemeYlGnBu": () => (/* reexport safe */ _sequential_multi_YlGnBu_js__WEBPACK_IMPORTED_MODULE_27__.scheme), -/* harmony export */ "schemeYlOrBr": () => (/* reexport safe */ _sequential_multi_YlOrBr_js__WEBPACK_IMPORTED_MODULE_29__.scheme), -/* harmony export */ "schemeYlOrRd": () => (/* reexport safe */ _sequential_multi_YlOrRd_js__WEBPACK_IMPORTED_MODULE_30__.scheme) -/* harmony export */ }); -/* harmony import */ var _categorical_category10_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./categorical/category10.js */ "./node_modules/d3-scale-chromatic/src/categorical/category10.js"); -/* harmony import */ var _categorical_Accent_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./categorical/Accent.js */ "./node_modules/d3-scale-chromatic/src/categorical/Accent.js"); -/* harmony import */ var _categorical_Dark2_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./categorical/Dark2.js */ "./node_modules/d3-scale-chromatic/src/categorical/Dark2.js"); -/* harmony import */ var _categorical_Paired_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./categorical/Paired.js */ "./node_modules/d3-scale-chromatic/src/categorical/Paired.js"); -/* harmony import */ var _categorical_Pastel1_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./categorical/Pastel1.js */ "./node_modules/d3-scale-chromatic/src/categorical/Pastel1.js"); -/* harmony import */ var _categorical_Pastel2_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./categorical/Pastel2.js */ "./node_modules/d3-scale-chromatic/src/categorical/Pastel2.js"); -/* harmony import */ var _categorical_Set1_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./categorical/Set1.js */ "./node_modules/d3-scale-chromatic/src/categorical/Set1.js"); -/* harmony import */ var _categorical_Set2_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./categorical/Set2.js */ "./node_modules/d3-scale-chromatic/src/categorical/Set2.js"); -/* harmony import */ var _categorical_Set3_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./categorical/Set3.js */ "./node_modules/d3-scale-chromatic/src/categorical/Set3.js"); -/* harmony import */ var _categorical_Tableau10_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./categorical/Tableau10.js */ "./node_modules/d3-scale-chromatic/src/categorical/Tableau10.js"); -/* harmony import */ var _diverging_BrBG_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./diverging/BrBG.js */ "./node_modules/d3-scale-chromatic/src/diverging/BrBG.js"); -/* harmony import */ var _diverging_PRGn_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./diverging/PRGn.js */ "./node_modules/d3-scale-chromatic/src/diverging/PRGn.js"); -/* harmony import */ var _diverging_PiYG_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./diverging/PiYG.js */ "./node_modules/d3-scale-chromatic/src/diverging/PiYG.js"); -/* harmony import */ var _diverging_PuOr_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./diverging/PuOr.js */ "./node_modules/d3-scale-chromatic/src/diverging/PuOr.js"); -/* harmony import */ var _diverging_RdBu_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./diverging/RdBu.js */ "./node_modules/d3-scale-chromatic/src/diverging/RdBu.js"); -/* harmony import */ var _diverging_RdGy_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./diverging/RdGy.js */ "./node_modules/d3-scale-chromatic/src/diverging/RdGy.js"); -/* harmony import */ var _diverging_RdYlBu_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./diverging/RdYlBu.js */ "./node_modules/d3-scale-chromatic/src/diverging/RdYlBu.js"); -/* harmony import */ var _diverging_RdYlGn_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./diverging/RdYlGn.js */ "./node_modules/d3-scale-chromatic/src/diverging/RdYlGn.js"); -/* harmony import */ var _diverging_Spectral_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./diverging/Spectral.js */ "./node_modules/d3-scale-chromatic/src/diverging/Spectral.js"); -/* 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"); -/* 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"); -/* 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"); -/* 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"); -/* 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"); -/* 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"); -/* 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"); -/* 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"); -/* 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"); -/* 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"); -/* 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"); -/* 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"); -/* 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"); -/* 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"); -/* 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"); -/* 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"); -/* 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"); -/* 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"); -/* 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"); -/* 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"); -/* 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"); -/* 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"); -/* 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"); -/* 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"); - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -/***/ }), - -/***/ "./node_modules/d3-scale-chromatic/src/ramp.js": -/*!*****************************************************!*\ - !*** ./node_modules/d3-scale-chromatic/src/ramp.js ***! - \*****************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var d3_interpolate__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-interpolate */ "./node_modules/d3-interpolate/src/rgb.js"); - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(scheme) { - return (0,d3_interpolate__WEBPACK_IMPORTED_MODULE_0__.rgbBasis)(scheme[scheme.length - 1]); -} - - -/***/ }), - -/***/ "./node_modules/d3-scale-chromatic/src/sequential-multi/BuGn.js": -/*!**********************************************************************!*\ - !*** ./node_modules/d3-scale-chromatic/src/sequential-multi/BuGn.js ***! - \**********************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "scheme": () => (/* binding */ scheme) -/* harmony export */ }); -/* harmony import */ var _colors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors.js */ "./node_modules/d3-scale-chromatic/src/colors.js"); -/* harmony import */ var _ramp_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp.js */ "./node_modules/d3-scale-chromatic/src/ramp.js"); - - - -var scheme = new Array(3).concat( - "e5f5f999d8c92ca25f", - "edf8fbb2e2e266c2a4238b45", - "edf8fbb2e2e266c2a42ca25f006d2c", - "edf8fbccece699d8c966c2a42ca25f006d2c", - "edf8fbccece699d8c966c2a441ae76238b45005824", - "f7fcfde5f5f9ccece699d8c966c2a441ae76238b45005824", - "f7fcfde5f5f9ccece699d8c966c2a441ae76238b45006d2c00441b" -).map(_colors_js__WEBPACK_IMPORTED_MODULE_0__["default"]); - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_ramp_js__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); - - -/***/ }), - -/***/ "./node_modules/d3-scale-chromatic/src/sequential-multi/BuPu.js": -/*!**********************************************************************!*\ - !*** ./node_modules/d3-scale-chromatic/src/sequential-multi/BuPu.js ***! - \**********************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "scheme": () => (/* binding */ scheme) -/* harmony export */ }); -/* harmony import */ var _colors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors.js */ "./node_modules/d3-scale-chromatic/src/colors.js"); -/* harmony import */ var _ramp_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp.js */ "./node_modules/d3-scale-chromatic/src/ramp.js"); - - - -var scheme = new Array(3).concat( - "e0ecf49ebcda8856a7", - "edf8fbb3cde38c96c688419d", - "edf8fbb3cde38c96c68856a7810f7c", - "edf8fbbfd3e69ebcda8c96c68856a7810f7c", - "edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b", - "f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b", - "f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b" -).map(_colors_js__WEBPACK_IMPORTED_MODULE_0__["default"]); - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_ramp_js__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); - - -/***/ }), - -/***/ "./node_modules/d3-scale-chromatic/src/sequential-multi/GnBu.js": -/*!**********************************************************************!*\ - !*** ./node_modules/d3-scale-chromatic/src/sequential-multi/GnBu.js ***! - \**********************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "scheme": () => (/* binding */ scheme) -/* harmony export */ }); -/* harmony import */ var _colors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors.js */ "./node_modules/d3-scale-chromatic/src/colors.js"); -/* harmony import */ var _ramp_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp.js */ "./node_modules/d3-scale-chromatic/src/ramp.js"); - - - -var scheme = new Array(3).concat( - "e0f3dba8ddb543a2ca", - "f0f9e8bae4bc7bccc42b8cbe", - "f0f9e8bae4bc7bccc443a2ca0868ac", - "f0f9e8ccebc5a8ddb57bccc443a2ca0868ac", - "f0f9e8ccebc5a8ddb57bccc44eb3d32b8cbe08589e", - "f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe08589e", - "f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe0868ac084081" -).map(_colors_js__WEBPACK_IMPORTED_MODULE_0__["default"]); - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_ramp_js__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); - - -/***/ }), - -/***/ "./node_modules/d3-scale-chromatic/src/sequential-multi/OrRd.js": -/*!**********************************************************************!*\ - !*** ./node_modules/d3-scale-chromatic/src/sequential-multi/OrRd.js ***! - \**********************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "scheme": () => (/* binding */ scheme) -/* harmony export */ }); -/* harmony import */ var _colors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors.js */ "./node_modules/d3-scale-chromatic/src/colors.js"); -/* harmony import */ var _ramp_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp.js */ "./node_modules/d3-scale-chromatic/src/ramp.js"); - - - -var scheme = new Array(3).concat( - "fee8c8fdbb84e34a33", - "fef0d9fdcc8afc8d59d7301f", - "fef0d9fdcc8afc8d59e34a33b30000", - "fef0d9fdd49efdbb84fc8d59e34a33b30000", - "fef0d9fdd49efdbb84fc8d59ef6548d7301f990000", - "fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301f990000", - "fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301fb300007f0000" -).map(_colors_js__WEBPACK_IMPORTED_MODULE_0__["default"]); - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_ramp_js__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); - - -/***/ }), - -/***/ "./node_modules/d3-scale-chromatic/src/sequential-multi/PuBu.js": -/*!**********************************************************************!*\ - !*** ./node_modules/d3-scale-chromatic/src/sequential-multi/PuBu.js ***! - \**********************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "scheme": () => (/* binding */ scheme) -/* harmony export */ }); -/* harmony import */ var _colors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors.js */ "./node_modules/d3-scale-chromatic/src/colors.js"); -/* harmony import */ var _ramp_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp.js */ "./node_modules/d3-scale-chromatic/src/ramp.js"); - - - -var scheme = new Array(3).concat( - "ece7f2a6bddb2b8cbe", - "f1eef6bdc9e174a9cf0570b0", - "f1eef6bdc9e174a9cf2b8cbe045a8d", - "f1eef6d0d1e6a6bddb74a9cf2b8cbe045a8d", - "f1eef6d0d1e6a6bddb74a9cf3690c00570b0034e7b", - "fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0034e7b", - "fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0045a8d023858" -).map(_colors_js__WEBPACK_IMPORTED_MODULE_0__["default"]); - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_ramp_js__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); - - -/***/ }), - -/***/ "./node_modules/d3-scale-chromatic/src/sequential-multi/PuBuGn.js": -/*!************************************************************************!*\ - !*** ./node_modules/d3-scale-chromatic/src/sequential-multi/PuBuGn.js ***! - \************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "scheme": () => (/* binding */ scheme) -/* harmony export */ }); -/* harmony import */ var _colors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors.js */ "./node_modules/d3-scale-chromatic/src/colors.js"); -/* harmony import */ var _ramp_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp.js */ "./node_modules/d3-scale-chromatic/src/ramp.js"); - - - -var scheme = new Array(3).concat( - "ece2f0a6bddb1c9099", - "f6eff7bdc9e167a9cf02818a", - "f6eff7bdc9e167a9cf1c9099016c59", - "f6eff7d0d1e6a6bddb67a9cf1c9099016c59", - "f6eff7d0d1e6a6bddb67a9cf3690c002818a016450", - "fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016450", - "fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016c59014636" -).map(_colors_js__WEBPACK_IMPORTED_MODULE_0__["default"]); - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_ramp_js__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); - - -/***/ }), - -/***/ "./node_modules/d3-scale-chromatic/src/sequential-multi/PuRd.js": -/*!**********************************************************************!*\ - !*** ./node_modules/d3-scale-chromatic/src/sequential-multi/PuRd.js ***! - \**********************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "scheme": () => (/* binding */ scheme) -/* harmony export */ }); -/* harmony import */ var _colors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors.js */ "./node_modules/d3-scale-chromatic/src/colors.js"); -/* harmony import */ var _ramp_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp.js */ "./node_modules/d3-scale-chromatic/src/ramp.js"); - - - -var scheme = new Array(3).concat( - "e7e1efc994c7dd1c77", - "f1eef6d7b5d8df65b0ce1256", - "f1eef6d7b5d8df65b0dd1c77980043", - "f1eef6d4b9dac994c7df65b0dd1c77980043", - "f1eef6d4b9dac994c7df65b0e7298ace125691003f", - "f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125691003f", - "f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125698004367001f" -).map(_colors_js__WEBPACK_IMPORTED_MODULE_0__["default"]); - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_ramp_js__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); - - -/***/ }), - -/***/ "./node_modules/d3-scale-chromatic/src/sequential-multi/RdPu.js": -/*!**********************************************************************!*\ - !*** ./node_modules/d3-scale-chromatic/src/sequential-multi/RdPu.js ***! - \**********************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "scheme": () => (/* binding */ scheme) -/* harmony export */ }); -/* harmony import */ var _colors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors.js */ "./node_modules/d3-scale-chromatic/src/colors.js"); -/* harmony import */ var _ramp_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp.js */ "./node_modules/d3-scale-chromatic/src/ramp.js"); - - - -var scheme = new Array(3).concat( - "fde0ddfa9fb5c51b8a", - "feebe2fbb4b9f768a1ae017e", - "feebe2fbb4b9f768a1c51b8a7a0177", - "feebe2fcc5c0fa9fb5f768a1c51b8a7a0177", - "feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177", - "fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177", - "fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a" -).map(_colors_js__WEBPACK_IMPORTED_MODULE_0__["default"]); - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_ramp_js__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); - - -/***/ }), - -/***/ "./node_modules/d3-scale-chromatic/src/sequential-multi/YlGn.js": -/*!**********************************************************************!*\ - !*** ./node_modules/d3-scale-chromatic/src/sequential-multi/YlGn.js ***! - \**********************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "scheme": () => (/* binding */ scheme) -/* harmony export */ }); -/* harmony import */ var _colors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors.js */ "./node_modules/d3-scale-chromatic/src/colors.js"); -/* harmony import */ var _ramp_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp.js */ "./node_modules/d3-scale-chromatic/src/ramp.js"); - - - -var scheme = new Array(3).concat( - "f7fcb9addd8e31a354", - "ffffccc2e69978c679238443", - "ffffccc2e69978c67931a354006837", - "ffffccd9f0a3addd8e78c67931a354006837", - "ffffccd9f0a3addd8e78c67941ab5d238443005a32", - "ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443005a32", - "ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443006837004529" -).map(_colors_js__WEBPACK_IMPORTED_MODULE_0__["default"]); - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_ramp_js__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); - - -/***/ }), - -/***/ "./node_modules/d3-scale-chromatic/src/sequential-multi/YlGnBu.js": -/*!************************************************************************!*\ - !*** ./node_modules/d3-scale-chromatic/src/sequential-multi/YlGnBu.js ***! - \************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "scheme": () => (/* binding */ scheme) -/* harmony export */ }); -/* harmony import */ var _colors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors.js */ "./node_modules/d3-scale-chromatic/src/colors.js"); -/* harmony import */ var _ramp_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp.js */ "./node_modules/d3-scale-chromatic/src/ramp.js"); - - - -var scheme = new Array(3).concat( - "edf8b17fcdbb2c7fb8", - "ffffcca1dab441b6c4225ea8", - "ffffcca1dab441b6c42c7fb8253494", - "ffffccc7e9b47fcdbb41b6c42c7fb8253494", - "ffffccc7e9b47fcdbb41b6c41d91c0225ea80c2c84", - "ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea80c2c84", - "ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea8253494081d58" -).map(_colors_js__WEBPACK_IMPORTED_MODULE_0__["default"]); - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_ramp_js__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); - - -/***/ }), - -/***/ "./node_modules/d3-scale-chromatic/src/sequential-multi/YlOrBr.js": -/*!************************************************************************!*\ - !*** ./node_modules/d3-scale-chromatic/src/sequential-multi/YlOrBr.js ***! - \************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "scheme": () => (/* binding */ scheme) -/* harmony export */ }); -/* harmony import */ var _colors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors.js */ "./node_modules/d3-scale-chromatic/src/colors.js"); -/* harmony import */ var _ramp_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp.js */ "./node_modules/d3-scale-chromatic/src/ramp.js"); - - - -var scheme = new Array(3).concat( - "fff7bcfec44fd95f0e", - "ffffd4fed98efe9929cc4c02", - "ffffd4fed98efe9929d95f0e993404", - "ffffd4fee391fec44ffe9929d95f0e993404", - "ffffd4fee391fec44ffe9929ec7014cc4c028c2d04", - "ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04", - "ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506" -).map(_colors_js__WEBPACK_IMPORTED_MODULE_0__["default"]); - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_ramp_js__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); - - -/***/ }), - -/***/ "./node_modules/d3-scale-chromatic/src/sequential-multi/YlOrRd.js": -/*!************************************************************************!*\ - !*** ./node_modules/d3-scale-chromatic/src/sequential-multi/YlOrRd.js ***! - \************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "scheme": () => (/* binding */ scheme) -/* harmony export */ }); -/* harmony import */ var _colors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors.js */ "./node_modules/d3-scale-chromatic/src/colors.js"); -/* harmony import */ var _ramp_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp.js */ "./node_modules/d3-scale-chromatic/src/ramp.js"); - - - -var scheme = new Array(3).concat( - "ffeda0feb24cf03b20", - "ffffb2fecc5cfd8d3ce31a1c", - "ffffb2fecc5cfd8d3cf03b20bd0026", - "ffffb2fed976feb24cfd8d3cf03b20bd0026", - "ffffb2fed976feb24cfd8d3cfc4e2ae31a1cb10026", - "ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cb10026", - "ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cbd0026800026" -).map(_colors_js__WEBPACK_IMPORTED_MODULE_0__["default"]); - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_ramp_js__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); - - -/***/ }), - -/***/ "./node_modules/d3-scale-chromatic/src/sequential-multi/cividis.js": -/*!*************************************************************************!*\ - !*** ./node_modules/d3-scale-chromatic/src/sequential-multi/cividis.js ***! - \*************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(t) { - t = Math.max(0, Math.min(1, t)); - return "rgb(" - + 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))))))) + ", " - + 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))))))) + ", " - + 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))))))) - + ")"; -} - - -/***/ }), - -/***/ "./node_modules/d3-scale-chromatic/src/sequential-multi/cubehelix.js": -/*!***************************************************************************!*\ - !*** ./node_modules/d3-scale-chromatic/src/sequential-multi/cubehelix.js ***! - \***************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var d3_color__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-color */ "./node_modules/d3-color/src/cubehelix.js"); -/* harmony import */ var d3_interpolate__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-interpolate */ "./node_modules/d3-interpolate/src/cubehelix.js"); - - - -/* 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))); - - -/***/ }), - -/***/ "./node_modules/d3-scale-chromatic/src/sequential-multi/rainbow.js": -/*!*************************************************************************!*\ - !*** ./node_modules/d3-scale-chromatic/src/sequential-multi/rainbow.js ***! - \*************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "cool": () => (/* binding */ cool), -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "warm": () => (/* binding */ warm) -/* harmony export */ }); -/* harmony import */ var d3_color__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-color */ "./node_modules/d3-color/src/cubehelix.js"); -/* harmony import */ var d3_interpolate__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-interpolate */ "./node_modules/d3-interpolate/src/cubehelix.js"); - - - -var 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)); - -var 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)); - -var c = (0,d3_color__WEBPACK_IMPORTED_MODULE_1__["default"])(); - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(t) { - if (t < 0 || t > 1) t -= Math.floor(t); - var ts = Math.abs(t - 0.5); - c.h = 360 * t - 100; - c.s = 1.5 - 1.5 * ts; - c.l = 0.8 - 0.9 * ts; - return c + ""; -} - - -/***/ }), - -/***/ "./node_modules/d3-scale-chromatic/src/sequential-multi/sinebow.js": -/*!*************************************************************************!*\ - !*** ./node_modules/d3-scale-chromatic/src/sequential-multi/sinebow.js ***! - \*************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var d3_color__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-color */ "./node_modules/d3-color/src/color.js"); - - -var c = (0,d3_color__WEBPACK_IMPORTED_MODULE_0__.rgb)(), - pi_1_3 = Math.PI / 3, - pi_2_3 = Math.PI * 2 / 3; - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(t) { - var x; - t = (0.5 - t) * Math.PI; - c.r = 255 * (x = Math.sin(t)) * x; - c.g = 255 * (x = Math.sin(t + pi_1_3)) * x; - c.b = 255 * (x = Math.sin(t + pi_2_3)) * x; - return c + ""; -} - - -/***/ }), - -/***/ "./node_modules/d3-scale-chromatic/src/sequential-multi/turbo.js": -/*!***********************************************************************!*\ - !*** ./node_modules/d3-scale-chromatic/src/sequential-multi/turbo.js ***! - \***********************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(t) { - t = Math.max(0, Math.min(1, t)); - return "rgb(" - + 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))))))) + ", " - + 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))))))) + ", " - + Math.max(0, Math.min(255, Math.round(27.2 + t * (3211.1 - t * (15327.97 - t * (27814 - t * (22569.18 - t * 6838.66))))))) - + ")"; -} - - -/***/ }), - -/***/ "./node_modules/d3-scale-chromatic/src/sequential-multi/viridis.js": -/*!*************************************************************************!*\ - !*** ./node_modules/d3-scale-chromatic/src/sequential-multi/viridis.js ***! - \*************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "inferno": () => (/* binding */ inferno), -/* harmony export */ "magma": () => (/* binding */ magma), -/* harmony export */ "plasma": () => (/* binding */ plasma) -/* harmony export */ }); -/* harmony import */ var _colors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors.js */ "./node_modules/d3-scale-chromatic/src/colors.js"); - - -function ramp(range) { - var n = range.length; - return function(t) { - return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))]; - }; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ramp((0,_colors_js__WEBPACK_IMPORTED_MODULE_0__["default"])("44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725"))); - -var magma = ramp((0,_colors_js__WEBPACK_IMPORTED_MODULE_0__["default"])("00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf")); - -var inferno = ramp((0,_colors_js__WEBPACK_IMPORTED_MODULE_0__["default"])("00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4")); - -var plasma = ramp((0,_colors_js__WEBPACK_IMPORTED_MODULE_0__["default"])("0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921")); - - -/***/ }), - -/***/ "./node_modules/d3-scale-chromatic/src/sequential-single/Blues.js": -/*!************************************************************************!*\ - !*** ./node_modules/d3-scale-chromatic/src/sequential-single/Blues.js ***! - \************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "scheme": () => (/* binding */ scheme) -/* harmony export */ }); -/* harmony import */ var _colors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors.js */ "./node_modules/d3-scale-chromatic/src/colors.js"); -/* harmony import */ var _ramp_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp.js */ "./node_modules/d3-scale-chromatic/src/ramp.js"); - - - -var scheme = new Array(3).concat( - "deebf79ecae13182bd", - "eff3ffbdd7e76baed62171b5", - "eff3ffbdd7e76baed63182bd08519c", - "eff3ffc6dbef9ecae16baed63182bd08519c", - "eff3ffc6dbef9ecae16baed64292c62171b5084594", - "f7fbffdeebf7c6dbef9ecae16baed64292c62171b5084594", - "f7fbffdeebf7c6dbef9ecae16baed64292c62171b508519c08306b" -).map(_colors_js__WEBPACK_IMPORTED_MODULE_0__["default"]); - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_ramp_js__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); - - -/***/ }), - -/***/ "./node_modules/d3-scale-chromatic/src/sequential-single/Greens.js": -/*!*************************************************************************!*\ - !*** ./node_modules/d3-scale-chromatic/src/sequential-single/Greens.js ***! - \*************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "scheme": () => (/* binding */ scheme) -/* harmony export */ }); -/* harmony import */ var _colors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors.js */ "./node_modules/d3-scale-chromatic/src/colors.js"); -/* harmony import */ var _ramp_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp.js */ "./node_modules/d3-scale-chromatic/src/ramp.js"); - - - -var scheme = new Array(3).concat( - "e5f5e0a1d99b31a354", - "edf8e9bae4b374c476238b45", - "edf8e9bae4b374c47631a354006d2c", - "edf8e9c7e9c0a1d99b74c47631a354006d2c", - "edf8e9c7e9c0a1d99b74c47641ab5d238b45005a32", - "f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45005a32", - "f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45006d2c00441b" -).map(_colors_js__WEBPACK_IMPORTED_MODULE_0__["default"]); - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_ramp_js__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); - - -/***/ }), - -/***/ "./node_modules/d3-scale-chromatic/src/sequential-single/Greys.js": -/*!************************************************************************!*\ - !*** ./node_modules/d3-scale-chromatic/src/sequential-single/Greys.js ***! - \************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "scheme": () => (/* binding */ scheme) -/* harmony export */ }); -/* harmony import */ var _colors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors.js */ "./node_modules/d3-scale-chromatic/src/colors.js"); -/* harmony import */ var _ramp_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp.js */ "./node_modules/d3-scale-chromatic/src/ramp.js"); - - - -var scheme = new Array(3).concat( - "f0f0f0bdbdbd636363", - "f7f7f7cccccc969696525252", - "f7f7f7cccccc969696636363252525", - "f7f7f7d9d9d9bdbdbd969696636363252525", - "f7f7f7d9d9d9bdbdbd969696737373525252252525", - "fffffff0f0f0d9d9d9bdbdbd969696737373525252252525", - "fffffff0f0f0d9d9d9bdbdbd969696737373525252252525000000" -).map(_colors_js__WEBPACK_IMPORTED_MODULE_0__["default"]); - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_ramp_js__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); - - -/***/ }), - -/***/ "./node_modules/d3-scale-chromatic/src/sequential-single/Oranges.js": -/*!**************************************************************************!*\ - !*** ./node_modules/d3-scale-chromatic/src/sequential-single/Oranges.js ***! - \**************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "scheme": () => (/* binding */ scheme) -/* harmony export */ }); -/* harmony import */ var _colors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors.js */ "./node_modules/d3-scale-chromatic/src/colors.js"); -/* harmony import */ var _ramp_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp.js */ "./node_modules/d3-scale-chromatic/src/ramp.js"); - - - -var scheme = new Array(3).concat( - "fee6cefdae6be6550d", - "feeddefdbe85fd8d3cd94701", - "feeddefdbe85fd8d3ce6550da63603", - "feeddefdd0a2fdae6bfd8d3ce6550da63603", - "feeddefdd0a2fdae6bfd8d3cf16913d948018c2d04", - "fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d948018c2d04", - "fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d94801a636037f2704" -).map(_colors_js__WEBPACK_IMPORTED_MODULE_0__["default"]); - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_ramp_js__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); - - -/***/ }), - -/***/ "./node_modules/d3-scale-chromatic/src/sequential-single/Purples.js": -/*!**************************************************************************!*\ - !*** ./node_modules/d3-scale-chromatic/src/sequential-single/Purples.js ***! - \**************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "scheme": () => (/* binding */ scheme) -/* harmony export */ }); -/* harmony import */ var _colors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors.js */ "./node_modules/d3-scale-chromatic/src/colors.js"); -/* harmony import */ var _ramp_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp.js */ "./node_modules/d3-scale-chromatic/src/ramp.js"); - - - -var scheme = new Array(3).concat( - "efedf5bcbddc756bb1", - "f2f0f7cbc9e29e9ac86a51a3", - "f2f0f7cbc9e29e9ac8756bb154278f", - "f2f0f7dadaebbcbddc9e9ac8756bb154278f", - "f2f0f7dadaebbcbddc9e9ac8807dba6a51a34a1486", - "fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a34a1486", - "fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a354278f3f007d" -).map(_colors_js__WEBPACK_IMPORTED_MODULE_0__["default"]); - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_ramp_js__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); - - -/***/ }), - -/***/ "./node_modules/d3-scale-chromatic/src/sequential-single/Reds.js": -/*!***********************************************************************!*\ - !*** ./node_modules/d3-scale-chromatic/src/sequential-single/Reds.js ***! - \***********************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "scheme": () => (/* binding */ scheme) -/* harmony export */ }); -/* harmony import */ var _colors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors.js */ "./node_modules/d3-scale-chromatic/src/colors.js"); -/* harmony import */ var _ramp_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp.js */ "./node_modules/d3-scale-chromatic/src/ramp.js"); - - - -var scheme = new Array(3).concat( - "fee0d2fc9272de2d26", - "fee5d9fcae91fb6a4acb181d", - "fee5d9fcae91fb6a4ade2d26a50f15", - "fee5d9fcbba1fc9272fb6a4ade2d26a50f15", - "fee5d9fcbba1fc9272fb6a4aef3b2ccb181d99000d", - "fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181d99000d", - "fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181da50f1567000d" -).map(_colors_js__WEBPACK_IMPORTED_MODULE_0__["default"]); - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_ramp_js__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); - - -/***/ }), - -/***/ "./node_modules/d3-scale/src/array.js": -/*!********************************************!*\ - !*** ./node_modules/d3-scale/src/array.js ***! - \********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "map": () => (/* binding */ map), -/* harmony export */ "slice": () => (/* binding */ slice) -/* harmony export */ }); -var array = Array.prototype; - -var map = array.map; -var slice = array.slice; - - -/***/ }), - -/***/ "./node_modules/d3-scale/src/band.js": -/*!*******************************************!*\ - !*** ./node_modules/d3-scale/src/band.js ***! - \*******************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ band), -/* harmony export */ "point": () => (/* binding */ point) -/* harmony export */ }); -/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-array */ "./node_modules/d3-array/src/index.js"); -/* harmony import */ var _init__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./init */ "./node_modules/d3-scale/src/init.js"); -/* harmony import */ var _ordinal__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./ordinal */ "./node_modules/d3-scale/src/ordinal.js"); - - - - -function band() { - var scale = (0,_ordinal__WEBPACK_IMPORTED_MODULE_2__["default"])().unknown(undefined), - domain = scale.domain, - ordinalRange = scale.range, - range = [0, 1], - step, - bandwidth, - round = false, - paddingInner = 0, - paddingOuter = 0, - align = 0.5; - - delete scale.unknown; - - function rescale() { - var n = domain().length, - reverse = range[1] < range[0], - start = range[reverse - 0], - stop = range[1 - reverse]; - step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2); - if (round) step = Math.floor(step); - start += (stop - start - step * (n - paddingInner)) * align; - bandwidth = step * (1 - paddingInner); - if (round) start = Math.round(start), bandwidth = Math.round(bandwidth); - var values = (0,d3_array__WEBPACK_IMPORTED_MODULE_0__.range)(n).map(function(i) { return start + step * i; }); - return ordinalRange(reverse ? values.reverse() : values); - } - - scale.domain = function(_) { - return arguments.length ? (domain(_), rescale()) : domain(); - }; - - scale.range = function(_) { - return arguments.length ? (range = [+_[0], +_[1]], rescale()) : range.slice(); - }; - - scale.rangeRound = function(_) { - return range = [+_[0], +_[1]], round = true, rescale(); - }; - - scale.bandwidth = function() { - return bandwidth; - }; - - scale.step = function() { - return step; - }; - - scale.round = function(_) { - return arguments.length ? (round = !!_, rescale()) : round; - }; - - scale.padding = function(_) { - return arguments.length ? (paddingInner = Math.min(1, paddingOuter = +_), rescale()) : paddingInner; - }; - - scale.paddingInner = function(_) { - return arguments.length ? (paddingInner = Math.min(1, _), rescale()) : paddingInner; - }; - - scale.paddingOuter = function(_) { - return arguments.length ? (paddingOuter = +_, rescale()) : paddingOuter; - }; - - scale.align = function(_) { - return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align; - }; - - scale.copy = function() { - return band(domain(), range) - .round(round) - .paddingInner(paddingInner) - .paddingOuter(paddingOuter) - .align(align); - }; - - return _init__WEBPACK_IMPORTED_MODULE_1__.initRange.apply(rescale(), arguments); -} - -function pointish(scale) { - var copy = scale.copy; - - scale.padding = scale.paddingOuter; - delete scale.paddingInner; - delete scale.paddingOuter; - - scale.copy = function() { - return pointish(copy()); - }; - - return scale; -} - -function point() { - return pointish(band.apply(null, arguments).paddingInner(1)); -} - - -/***/ }), - -/***/ "./node_modules/d3-scale/src/constant.js": -/*!***********************************************!*\ - !*** ./node_modules/d3-scale/src/constant.js ***! - \***********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(x) { - return function() { - return x; - }; -} - - -/***/ }), - -/***/ "./node_modules/d3-scale/src/continuous.js": -/*!*************************************************!*\ - !*** ./node_modules/d3-scale/src/continuous.js ***! - \*************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "copy": () => (/* binding */ copy), -/* harmony export */ "default": () => (/* binding */ continuous), -/* harmony export */ "identity": () => (/* binding */ identity), -/* harmony export */ "transformer": () => (/* binding */ transformer) -/* harmony export */ }); -/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-array */ "./node_modules/d3-array/src/index.js"); -/* harmony import */ var d3_interpolate__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! d3-interpolate */ "./node_modules/d3-interpolate/src/value.js"); -/* harmony import */ var d3_interpolate__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! d3-interpolate */ "./node_modules/d3-interpolate/src/number.js"); -/* harmony import */ var d3_interpolate__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! d3-interpolate */ "./node_modules/d3-interpolate/src/round.js"); -/* harmony import */ var _array__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./array */ "./node_modules/d3-scale/src/array.js"); -/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./constant */ "./node_modules/d3-scale/src/constant.js"); -/* harmony import */ var _number__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./number */ "./node_modules/d3-scale/src/number.js"); - - - - - - -var unit = [0, 1]; - -function identity(x) { - return x; -} - -function normalize(a, b) { - return (b -= (a = +a)) - ? function(x) { return (x - a) / b; } - : (0,_constant__WEBPACK_IMPORTED_MODULE_2__["default"])(isNaN(b) ? NaN : 0.5); -} - -function clamper(domain) { - var a = domain[0], b = domain[domain.length - 1], t; - if (a > b) t = a, a = b, b = t; - return function(x) { return Math.max(a, Math.min(b, x)); }; -} - -// normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1]. -// interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b]. -function bimap(domain, range, interpolate) { - var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1]; - if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0); - else d0 = normalize(d0, d1), r0 = interpolate(r0, r1); - return function(x) { return r0(d0(x)); }; -} - -function polymap(domain, range, interpolate) { - var j = Math.min(domain.length, range.length) - 1, - d = new Array(j), - r = new Array(j), - i = -1; - - // Reverse descending domains. - if (domain[j] < domain[0]) { - domain = domain.slice().reverse(); - range = range.slice().reverse(); - } - - while (++i < j) { - d[i] = normalize(domain[i], domain[i + 1]); - r[i] = interpolate(range[i], range[i + 1]); - } - - return function(x) { - var i = (0,d3_array__WEBPACK_IMPORTED_MODULE_0__.bisect)(domain, x, 1, j) - 1; - return r[i](d[i](x)); - }; -} - -function copy(source, target) { - return target - .domain(source.domain()) - .range(source.range()) - .interpolate(source.interpolate()) - .clamp(source.clamp()) - .unknown(source.unknown()); -} - -function transformer() { - var domain = unit, - range = unit, - interpolate = d3_interpolate__WEBPACK_IMPORTED_MODULE_4__["default"], - transform, - untransform, - unknown, - clamp = identity, - piecewise, - output, - input; - - function rescale() { - piecewise = Math.min(domain.length, range.length) > 2 ? polymap : bimap; - output = input = null; - return scale; - } - - function scale(x) { - return isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate)))(transform(clamp(x))); - } - - scale.invert = function(y) { - return clamp(untransform((input || (input = piecewise(range, domain.map(transform), d3_interpolate__WEBPACK_IMPORTED_MODULE_5__["default"])))(y))); - }; - - scale.domain = function(_) { - return arguments.length ? (domain = _array__WEBPACK_IMPORTED_MODULE_1__.map.call(_, _number__WEBPACK_IMPORTED_MODULE_3__["default"]), clamp === identity || (clamp = clamper(domain)), rescale()) : domain.slice(); - }; - - scale.range = function(_) { - return arguments.length ? (range = _array__WEBPACK_IMPORTED_MODULE_1__.slice.call(_), rescale()) : range.slice(); - }; - - scale.rangeRound = function(_) { - return range = _array__WEBPACK_IMPORTED_MODULE_1__.slice.call(_), interpolate = d3_interpolate__WEBPACK_IMPORTED_MODULE_6__["default"], rescale(); - }; - - scale.clamp = function(_) { - return arguments.length ? (clamp = _ ? clamper(domain) : identity, scale) : clamp !== identity; - }; - - scale.interpolate = function(_) { - return arguments.length ? (interpolate = _, rescale()) : interpolate; - }; - - scale.unknown = function(_) { - return arguments.length ? (unknown = _, scale) : unknown; - }; - - return function(t, u) { - transform = t, untransform = u; - return rescale(); - }; -} - -function continuous(transform, untransform) { - return transformer()(transform, untransform); -} - - -/***/ }), - -/***/ "./node_modules/d3-scale/src/diverging.js": -/*!************************************************!*\ - !*** ./node_modules/d3-scale/src/diverging.js ***! - \************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ diverging), -/* harmony export */ "divergingLog": () => (/* binding */ divergingLog), -/* harmony export */ "divergingPow": () => (/* binding */ divergingPow), -/* harmony export */ "divergingSqrt": () => (/* binding */ divergingSqrt), -/* harmony export */ "divergingSymlog": () => (/* binding */ divergingSymlog) -/* harmony export */ }); -/* harmony import */ var _continuous__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./continuous */ "./node_modules/d3-scale/src/continuous.js"); -/* harmony import */ var _init__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./init */ "./node_modules/d3-scale/src/init.js"); -/* harmony import */ var _linear__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./linear */ "./node_modules/d3-scale/src/linear.js"); -/* harmony import */ var _log__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./log */ "./node_modules/d3-scale/src/log.js"); -/* harmony import */ var _sequential__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./sequential */ "./node_modules/d3-scale/src/sequential.js"); -/* harmony import */ var _symlog__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./symlog */ "./node_modules/d3-scale/src/symlog.js"); -/* harmony import */ var _pow__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./pow */ "./node_modules/d3-scale/src/pow.js"); - - - - - - - - -function transformer() { - var x0 = 0, - x1 = 0.5, - x2 = 1, - t0, - t1, - t2, - k10, - k21, - interpolator = _continuous__WEBPACK_IMPORTED_MODULE_0__.identity, - transform, - clamp = false, - unknown; - - function scale(x) { - return isNaN(x = +x) ? unknown : (x = 0.5 + ((x = +transform(x)) - t1) * (x < t1 ? k10 : k21), interpolator(clamp ? Math.max(0, Math.min(1, x)) : x)); - } - - scale.domain = function(_) { - return arguments.length ? (t0 = transform(x0 = +_[0]), t1 = transform(x1 = +_[1]), t2 = transform(x2 = +_[2]), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1), scale) : [x0, x1, x2]; - }; - - scale.clamp = function(_) { - return arguments.length ? (clamp = !!_, scale) : clamp; - }; - - scale.interpolator = function(_) { - return arguments.length ? (interpolator = _, scale) : interpolator; - }; - - scale.unknown = function(_) { - return arguments.length ? (unknown = _, scale) : unknown; - }; - - return function(t) { - 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); - return scale; - }; -} - -function diverging() { - var scale = (0,_linear__WEBPACK_IMPORTED_MODULE_2__.linearish)(transformer()(_continuous__WEBPACK_IMPORTED_MODULE_0__.identity)); - - scale.copy = function() { - return (0,_sequential__WEBPACK_IMPORTED_MODULE_4__.copy)(scale, diverging()); - }; - - return _init__WEBPACK_IMPORTED_MODULE_1__.initInterpolator.apply(scale, arguments); -} - -function divergingLog() { - var scale = (0,_log__WEBPACK_IMPORTED_MODULE_3__.loggish)(transformer()).domain([0.1, 1, 10]); - - scale.copy = function() { - return (0,_sequential__WEBPACK_IMPORTED_MODULE_4__.copy)(scale, divergingLog()).base(scale.base()); - }; - - return _init__WEBPACK_IMPORTED_MODULE_1__.initInterpolator.apply(scale, arguments); -} - -function divergingSymlog() { - var scale = (0,_symlog__WEBPACK_IMPORTED_MODULE_5__.symlogish)(transformer()); - - scale.copy = function() { - return (0,_sequential__WEBPACK_IMPORTED_MODULE_4__.copy)(scale, divergingSymlog()).constant(scale.constant()); - }; - - return _init__WEBPACK_IMPORTED_MODULE_1__.initInterpolator.apply(scale, arguments); -} - -function divergingPow() { - var scale = (0,_pow__WEBPACK_IMPORTED_MODULE_6__.powish)(transformer()); - - scale.copy = function() { - return (0,_sequential__WEBPACK_IMPORTED_MODULE_4__.copy)(scale, divergingPow()).exponent(scale.exponent()); - }; - - return _init__WEBPACK_IMPORTED_MODULE_1__.initInterpolator.apply(scale, arguments); -} - -function divergingSqrt() { - return divergingPow.apply(null, arguments).exponent(0.5); -} - - -/***/ }), - -/***/ "./node_modules/d3-scale/src/identity.js": -/*!***********************************************!*\ - !*** ./node_modules/d3-scale/src/identity.js ***! - \***********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ identity) -/* harmony export */ }); -/* harmony import */ var _array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./array */ "./node_modules/d3-scale/src/array.js"); -/* harmony import */ var _linear__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./linear */ "./node_modules/d3-scale/src/linear.js"); -/* harmony import */ var _number__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./number */ "./node_modules/d3-scale/src/number.js"); - - - - -function identity(domain) { - var unknown; - - function scale(x) { - return isNaN(x = +x) ? unknown : x; - } - - scale.invert = scale; - - scale.domain = scale.range = function(_) { - return arguments.length ? (domain = _array__WEBPACK_IMPORTED_MODULE_0__.map.call(_, _number__WEBPACK_IMPORTED_MODULE_2__["default"]), scale) : domain.slice(); - }; - - scale.unknown = function(_) { - return arguments.length ? (unknown = _, scale) : unknown; - }; - - scale.copy = function() { - return identity(domain).unknown(unknown); - }; - - domain = arguments.length ? _array__WEBPACK_IMPORTED_MODULE_0__.map.call(domain, _number__WEBPACK_IMPORTED_MODULE_2__["default"]) : [0, 1]; - - return (0,_linear__WEBPACK_IMPORTED_MODULE_1__.linearish)(scale); -} - - -/***/ }), - -/***/ "./node_modules/d3-scale/src/index.js": -/*!********************************************!*\ - !*** ./node_modules/d3-scale/src/index.js ***! - \********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "scaleBand": () => (/* reexport safe */ _band__WEBPACK_IMPORTED_MODULE_0__["default"]), -/* harmony export */ "scaleDiverging": () => (/* reexport safe */ _diverging__WEBPACK_IMPORTED_MODULE_14__["default"]), -/* harmony export */ "scaleDivergingLog": () => (/* reexport safe */ _diverging__WEBPACK_IMPORTED_MODULE_14__.divergingLog), -/* harmony export */ "scaleDivergingPow": () => (/* reexport safe */ _diverging__WEBPACK_IMPORTED_MODULE_14__.divergingPow), -/* harmony export */ "scaleDivergingSqrt": () => (/* reexport safe */ _diverging__WEBPACK_IMPORTED_MODULE_14__.divergingSqrt), -/* harmony export */ "scaleDivergingSymlog": () => (/* reexport safe */ _diverging__WEBPACK_IMPORTED_MODULE_14__.divergingSymlog), -/* harmony export */ "scaleIdentity": () => (/* reexport safe */ _identity__WEBPACK_IMPORTED_MODULE_1__["default"]), -/* harmony export */ "scaleImplicit": () => (/* reexport safe */ _ordinal__WEBPACK_IMPORTED_MODULE_5__.implicit), -/* harmony export */ "scaleLinear": () => (/* reexport safe */ _linear__WEBPACK_IMPORTED_MODULE_2__["default"]), -/* harmony export */ "scaleLog": () => (/* reexport safe */ _log__WEBPACK_IMPORTED_MODULE_3__["default"]), -/* harmony export */ "scaleOrdinal": () => (/* reexport safe */ _ordinal__WEBPACK_IMPORTED_MODULE_5__["default"]), -/* harmony export */ "scalePoint": () => (/* reexport safe */ _band__WEBPACK_IMPORTED_MODULE_0__.point), -/* harmony export */ "scalePow": () => (/* reexport safe */ _pow__WEBPACK_IMPORTED_MODULE_6__["default"]), -/* harmony export */ "scaleQuantile": () => (/* reexport safe */ _quantile__WEBPACK_IMPORTED_MODULE_7__["default"]), -/* harmony export */ "scaleQuantize": () => (/* reexport safe */ _quantize__WEBPACK_IMPORTED_MODULE_8__["default"]), -/* harmony export */ "scaleSequential": () => (/* reexport safe */ _sequential__WEBPACK_IMPORTED_MODULE_12__["default"]), -/* harmony export */ "scaleSequentialLog": () => (/* reexport safe */ _sequential__WEBPACK_IMPORTED_MODULE_12__.sequentialLog), -/* harmony export */ "scaleSequentialPow": () => (/* reexport safe */ _sequential__WEBPACK_IMPORTED_MODULE_12__.sequentialPow), -/* harmony export */ "scaleSequentialQuantile": () => (/* reexport safe */ _sequentialQuantile__WEBPACK_IMPORTED_MODULE_13__["default"]), -/* harmony export */ "scaleSequentialSqrt": () => (/* reexport safe */ _sequential__WEBPACK_IMPORTED_MODULE_12__.sequentialSqrt), -/* harmony export */ "scaleSequentialSymlog": () => (/* reexport safe */ _sequential__WEBPACK_IMPORTED_MODULE_12__.sequentialSymlog), -/* harmony export */ "scaleSqrt": () => (/* reexport safe */ _pow__WEBPACK_IMPORTED_MODULE_6__.sqrt), -/* harmony export */ "scaleSymlog": () => (/* reexport safe */ _symlog__WEBPACK_IMPORTED_MODULE_4__["default"]), -/* harmony export */ "scaleThreshold": () => (/* reexport safe */ _threshold__WEBPACK_IMPORTED_MODULE_9__["default"]), -/* harmony export */ "scaleTime": () => (/* reexport safe */ _time__WEBPACK_IMPORTED_MODULE_10__["default"]), -/* harmony export */ "scaleUtc": () => (/* reexport safe */ _utcTime__WEBPACK_IMPORTED_MODULE_11__["default"]), -/* harmony export */ "tickFormat": () => (/* reexport safe */ _tickFormat__WEBPACK_IMPORTED_MODULE_15__["default"]) -/* harmony export */ }); -/* harmony import */ var _band__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./band */ "./node_modules/d3-scale/src/band.js"); -/* harmony import */ var _identity__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./identity */ "./node_modules/d3-scale/src/identity.js"); -/* harmony import */ var _linear__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./linear */ "./node_modules/d3-scale/src/linear.js"); -/* harmony import */ var _log__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./log */ "./node_modules/d3-scale/src/log.js"); -/* harmony import */ var _symlog__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./symlog */ "./node_modules/d3-scale/src/symlog.js"); -/* harmony import */ var _ordinal__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./ordinal */ "./node_modules/d3-scale/src/ordinal.js"); -/* harmony import */ var _pow__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./pow */ "./node_modules/d3-scale/src/pow.js"); -/* harmony import */ var _quantile__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./quantile */ "./node_modules/d3-scale/src/quantile.js"); -/* harmony import */ var _quantize__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./quantize */ "./node_modules/d3-scale/src/quantize.js"); -/* harmony import */ var _threshold__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./threshold */ "./node_modules/d3-scale/src/threshold.js"); -/* harmony import */ var _time__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./time */ "./node_modules/d3-scale/src/time.js"); -/* harmony import */ var _utcTime__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./utcTime */ "./node_modules/d3-scale/src/utcTime.js"); -/* harmony import */ var _sequential__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./sequential */ "./node_modules/d3-scale/src/sequential.js"); -/* harmony import */ var _sequentialQuantile__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./sequentialQuantile */ "./node_modules/d3-scale/src/sequentialQuantile.js"); -/* harmony import */ var _diverging__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./diverging */ "./node_modules/d3-scale/src/diverging.js"); -/* harmony import */ var _tickFormat__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./tickFormat */ "./node_modules/d3-scale/src/tickFormat.js"); - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -/***/ }), - -/***/ "./node_modules/d3-scale/src/init.js": -/*!*******************************************!*\ - !*** ./node_modules/d3-scale/src/init.js ***! - \*******************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "initInterpolator": () => (/* binding */ initInterpolator), -/* harmony export */ "initRange": () => (/* binding */ initRange) -/* harmony export */ }); -function initRange(domain, range) { - switch (arguments.length) { - case 0: break; - case 1: this.range(domain); break; - default: this.range(range).domain(domain); break; - } - return this; -} - -function initInterpolator(domain, interpolator) { - switch (arguments.length) { - case 0: break; - case 1: this.interpolator(domain); break; - default: this.interpolator(interpolator).domain(domain); break; - } - return this; -} - - -/***/ }), - -/***/ "./node_modules/d3-scale/src/linear.js": -/*!*********************************************!*\ - !*** ./node_modules/d3-scale/src/linear.js ***! - \*********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ linear), -/* harmony export */ "linearish": () => (/* binding */ linearish) -/* harmony export */ }); -/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-array */ "./node_modules/d3-array/src/index.js"); -/* harmony import */ var _continuous__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./continuous */ "./node_modules/d3-scale/src/continuous.js"); -/* harmony import */ var _init__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./init */ "./node_modules/d3-scale/src/init.js"); -/* harmony import */ var _tickFormat__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tickFormat */ "./node_modules/d3-scale/src/tickFormat.js"); - - - - - -function linearish(scale) { - var domain = scale.domain; - - scale.ticks = function(count) { - var d = domain(); - return (0,d3_array__WEBPACK_IMPORTED_MODULE_0__.ticks)(d[0], d[d.length - 1], count == null ? 10 : count); - }; - - scale.tickFormat = function(count, specifier) { - var d = domain(); - return (0,_tickFormat__WEBPACK_IMPORTED_MODULE_3__["default"])(d[0], d[d.length - 1], count == null ? 10 : count, specifier); - }; - - scale.nice = function(count) { - if (count == null) count = 10; - - var d = domain(), - i0 = 0, - i1 = d.length - 1, - start = d[i0], - stop = d[i1], - step; - - if (stop < start) { - step = start, start = stop, stop = step; - step = i0, i0 = i1, i1 = step; - } - - step = (0,d3_array__WEBPACK_IMPORTED_MODULE_0__.tickIncrement)(start, stop, count); - - if (step > 0) { - start = Math.floor(start / step) * step; - stop = Math.ceil(stop / step) * step; - step = (0,d3_array__WEBPACK_IMPORTED_MODULE_0__.tickIncrement)(start, stop, count); - } else if (step < 0) { - start = Math.ceil(start * step) / step; - stop = Math.floor(stop * step) / step; - step = (0,d3_array__WEBPACK_IMPORTED_MODULE_0__.tickIncrement)(start, stop, count); - } - - if (step > 0) { - d[i0] = Math.floor(start / step) * step; - d[i1] = Math.ceil(stop / step) * step; - domain(d); - } else if (step < 0) { - d[i0] = Math.ceil(start * step) / step; - d[i1] = Math.floor(stop * step) / step; - domain(d); - } - - return scale; - }; - - return scale; -} - -function linear() { - var scale = (0,_continuous__WEBPACK_IMPORTED_MODULE_1__["default"])(_continuous__WEBPACK_IMPORTED_MODULE_1__.identity, _continuous__WEBPACK_IMPORTED_MODULE_1__.identity); - - scale.copy = function() { - return (0,_continuous__WEBPACK_IMPORTED_MODULE_1__.copy)(scale, linear()); - }; - - _init__WEBPACK_IMPORTED_MODULE_2__.initRange.apply(scale, arguments); - - return linearish(scale); -} - - -/***/ }), - -/***/ "./node_modules/d3-scale/src/log.js": -/*!******************************************!*\ - !*** ./node_modules/d3-scale/src/log.js ***! - \******************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ log), -/* harmony export */ "loggish": () => (/* binding */ loggish) -/* harmony export */ }); -/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-array */ "./node_modules/d3-array/src/index.js"); -/* harmony import */ var d3_format__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! d3-format */ "./node_modules/d3-format/src/defaultLocale.js"); -/* harmony import */ var _nice__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./nice */ "./node_modules/d3-scale/src/nice.js"); -/* harmony import */ var _continuous__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./continuous */ "./node_modules/d3-scale/src/continuous.js"); -/* harmony import */ var _init__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./init */ "./node_modules/d3-scale/src/init.js"); - - - - - - -function transformLog(x) { - return Math.log(x); -} - -function transformExp(x) { - return Math.exp(x); -} - -function transformLogn(x) { - return -Math.log(-x); -} - -function transformExpn(x) { - return -Math.exp(-x); -} - -function pow10(x) { - return isFinite(x) ? +("1e" + x) : x < 0 ? 0 : x; -} - -function powp(base) { - return base === 10 ? pow10 - : base === Math.E ? Math.exp - : function(x) { return Math.pow(base, x); }; -} - -function logp(base) { - return base === Math.E ? Math.log - : base === 10 && Math.log10 - || base === 2 && Math.log2 - || (base = Math.log(base), function(x) { return Math.log(x) / base; }); -} - -function reflect(f) { - return function(x) { - return -f(-x); - }; -} - -function loggish(transform) { - var scale = transform(transformLog, transformExp), - domain = scale.domain, - base = 10, - logs, - pows; - - function rescale() { - logs = logp(base), pows = powp(base); - if (domain()[0] < 0) { - logs = reflect(logs), pows = reflect(pows); - transform(transformLogn, transformExpn); - } else { - transform(transformLog, transformExp); - } - return scale; - } - - scale.base = function(_) { - return arguments.length ? (base = +_, rescale()) : base; - }; - - scale.domain = function(_) { - return arguments.length ? (domain(_), rescale()) : domain(); - }; - - scale.ticks = function(count) { - var d = domain(), - u = d[0], - v = d[d.length - 1], - r; - - if (r = v < u) i = u, u = v, v = i; - - var i = logs(u), - j = logs(v), - p, - k, - t, - n = count == null ? 10 : +count, - z = []; - - if (!(base % 1) && j - i < n) { - i = Math.round(i) - 1, j = Math.round(j) + 1; - if (u > 0) for (; i < j; ++i) { - for (k = 1, p = pows(i); k < base; ++k) { - t = p * k; - if (t < u) continue; - if (t > v) break; - z.push(t); - } - } else for (; i < j; ++i) { - for (k = base - 1, p = pows(i); k >= 1; --k) { - t = p * k; - if (t < u) continue; - if (t > v) break; - z.push(t); - } - } - } else { - z = (0,d3_array__WEBPACK_IMPORTED_MODULE_0__.ticks)(i, j, Math.min(j - i, n)).map(pows); - } - - return r ? z.reverse() : z; - }; - - scale.tickFormat = function(count, specifier) { - if (specifier == null) specifier = base === 10 ? ".0e" : ","; - if (typeof specifier !== "function") specifier = (0,d3_format__WEBPACK_IMPORTED_MODULE_4__.format)(specifier); - if (count === Infinity) return specifier; - if (count == null) count = 10; - var k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate? - return function(d) { - var i = d / pows(Math.round(logs(d))); - if (i * base < base - 0.5) i *= base; - return i <= k ? specifier(d) : ""; - }; - }; - - scale.nice = function() { - return domain((0,_nice__WEBPACK_IMPORTED_MODULE_1__["default"])(domain(), { - floor: function(x) { return pows(Math.floor(logs(x))); }, - ceil: function(x) { return pows(Math.ceil(logs(x))); } - })); - }; - - return scale; -} - -function log() { - var scale = loggish((0,_continuous__WEBPACK_IMPORTED_MODULE_2__.transformer)()).domain([1, 10]); - - scale.copy = function() { - return (0,_continuous__WEBPACK_IMPORTED_MODULE_2__.copy)(scale, log()).base(scale.base()); - }; - - _init__WEBPACK_IMPORTED_MODULE_3__.initRange.apply(scale, arguments); - - return scale; -} - - -/***/ }), - -/***/ "./node_modules/d3-scale/src/nice.js": -/*!*******************************************!*\ - !*** ./node_modules/d3-scale/src/nice.js ***! - \*******************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(domain, interval) { - domain = domain.slice(); - - var i0 = 0, - i1 = domain.length - 1, - x0 = domain[i0], - x1 = domain[i1], - t; - - if (x1 < x0) { - t = i0, i0 = i1, i1 = t; - t = x0, x0 = x1, x1 = t; - } - - domain[i0] = interval.floor(x0); - domain[i1] = interval.ceil(x1); - return domain; -} - - -/***/ }), - -/***/ "./node_modules/d3-scale/src/number.js": -/*!*********************************************!*\ - !*** ./node_modules/d3-scale/src/number.js ***! - \*********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(x) { - return +x; -} - - -/***/ }), - -/***/ "./node_modules/d3-scale/src/ordinal.js": -/*!**********************************************!*\ - !*** ./node_modules/d3-scale/src/ordinal.js ***! - \**********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ ordinal), -/* harmony export */ "implicit": () => (/* binding */ implicit) -/* harmony export */ }); -/* harmony import */ var d3_collection__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-collection */ "./node_modules/d3-collection/src/index.js"); -/* harmony import */ var _array__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./array */ "./node_modules/d3-scale/src/array.js"); -/* harmony import */ var _init__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./init */ "./node_modules/d3-scale/src/init.js"); - - - - -var implicit = {name: "implicit"}; - -function ordinal() { - var index = (0,d3_collection__WEBPACK_IMPORTED_MODULE_0__.map)(), - domain = [], - range = [], - unknown = implicit; - - function scale(d) { - var key = d + "", i = index.get(key); - if (!i) { - if (unknown !== implicit) return unknown; - index.set(key, i = domain.push(d)); - } - return range[(i - 1) % range.length]; - } - - scale.domain = function(_) { - if (!arguments.length) return domain.slice(); - domain = [], index = (0,d3_collection__WEBPACK_IMPORTED_MODULE_0__.map)(); - var i = -1, n = _.length, d, key; - while (++i < n) if (!index.has(key = (d = _[i]) + "")) index.set(key, domain.push(d)); - return scale; - }; - - scale.range = function(_) { - return arguments.length ? (range = _array__WEBPACK_IMPORTED_MODULE_1__.slice.call(_), scale) : range.slice(); - }; - - scale.unknown = function(_) { - return arguments.length ? (unknown = _, scale) : unknown; - }; - - scale.copy = function() { - return ordinal(domain, range).unknown(unknown); - }; - - _init__WEBPACK_IMPORTED_MODULE_2__.initRange.apply(scale, arguments); - - return scale; -} - - -/***/ }), - -/***/ "./node_modules/d3-scale/src/pow.js": -/*!******************************************!*\ - !*** ./node_modules/d3-scale/src/pow.js ***! - \******************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ pow), -/* harmony export */ "powish": () => (/* binding */ powish), -/* harmony export */ "sqrt": () => (/* binding */ sqrt) -/* harmony export */ }); -/* harmony import */ var _linear__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./linear */ "./node_modules/d3-scale/src/linear.js"); -/* harmony import */ var _continuous__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./continuous */ "./node_modules/d3-scale/src/continuous.js"); -/* harmony import */ var _init__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./init */ "./node_modules/d3-scale/src/init.js"); - - - - -function transformPow(exponent) { - return function(x) { - return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent); - }; -} - -function transformSqrt(x) { - return x < 0 ? -Math.sqrt(-x) : Math.sqrt(x); -} - -function transformSquare(x) { - return x < 0 ? -x * x : x * x; -} - -function powish(transform) { - var scale = transform(_continuous__WEBPACK_IMPORTED_MODULE_1__.identity, _continuous__WEBPACK_IMPORTED_MODULE_1__.identity), - exponent = 1; - - function rescale() { - return exponent === 1 ? transform(_continuous__WEBPACK_IMPORTED_MODULE_1__.identity, _continuous__WEBPACK_IMPORTED_MODULE_1__.identity) - : exponent === 0.5 ? transform(transformSqrt, transformSquare) - : transform(transformPow(exponent), transformPow(1 / exponent)); - } - - scale.exponent = function(_) { - return arguments.length ? (exponent = +_, rescale()) : exponent; - }; - - return (0,_linear__WEBPACK_IMPORTED_MODULE_0__.linearish)(scale); -} - -function pow() { - var scale = powish((0,_continuous__WEBPACK_IMPORTED_MODULE_1__.transformer)()); - - scale.copy = function() { - return (0,_continuous__WEBPACK_IMPORTED_MODULE_1__.copy)(scale, pow()).exponent(scale.exponent()); - }; - - _init__WEBPACK_IMPORTED_MODULE_2__.initRange.apply(scale, arguments); - - return scale; -} - -function sqrt() { - return pow.apply(null, arguments).exponent(0.5); -} - - -/***/ }), - -/***/ "./node_modules/d3-scale/src/quantile.js": -/*!***********************************************!*\ - !*** ./node_modules/d3-scale/src/quantile.js ***! - \***********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ quantile) -/* harmony export */ }); -/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-array */ "./node_modules/d3-array/src/index.js"); -/* harmony import */ var _array__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./array */ "./node_modules/d3-scale/src/array.js"); -/* harmony import */ var _init__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./init */ "./node_modules/d3-scale/src/init.js"); - - - - -function quantile() { - var domain = [], - range = [], - thresholds = [], - unknown; - - function rescale() { - var i = 0, n = Math.max(1, range.length); - thresholds = new Array(n - 1); - while (++i < n) thresholds[i - 1] = (0,d3_array__WEBPACK_IMPORTED_MODULE_0__.quantile)(domain, i / n); - return scale; - } - - function scale(x) { - return isNaN(x = +x) ? unknown : range[(0,d3_array__WEBPACK_IMPORTED_MODULE_0__.bisect)(thresholds, x)]; - } - - scale.invertExtent = function(y) { - var i = range.indexOf(y); - return i < 0 ? [NaN, NaN] : [ - i > 0 ? thresholds[i - 1] : domain[0], - i < thresholds.length ? thresholds[i] : domain[domain.length - 1] - ]; - }; - - scale.domain = function(_) { - if (!arguments.length) return domain.slice(); - domain = []; - for (var i = 0, n = _.length, d; i < n; ++i) if (d = _[i], d != null && !isNaN(d = +d)) domain.push(d); - domain.sort(d3_array__WEBPACK_IMPORTED_MODULE_0__.ascending); - return rescale(); - }; - - scale.range = function(_) { - return arguments.length ? (range = _array__WEBPACK_IMPORTED_MODULE_1__.slice.call(_), rescale()) : range.slice(); - }; - - scale.unknown = function(_) { - return arguments.length ? (unknown = _, scale) : unknown; - }; - - scale.quantiles = function() { - return thresholds.slice(); - }; - - scale.copy = function() { - return quantile() - .domain(domain) - .range(range) - .unknown(unknown); - }; - - return _init__WEBPACK_IMPORTED_MODULE_2__.initRange.apply(scale, arguments); -} - - -/***/ }), - -/***/ "./node_modules/d3-scale/src/quantize.js": -/*!***********************************************!*\ - !*** ./node_modules/d3-scale/src/quantize.js ***! - \***********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ quantize) -/* harmony export */ }); -/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-array */ "./node_modules/d3-array/src/index.js"); -/* harmony import */ var _array__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./array */ "./node_modules/d3-scale/src/array.js"); -/* harmony import */ var _linear__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./linear */ "./node_modules/d3-scale/src/linear.js"); -/* harmony import */ var _init__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./init */ "./node_modules/d3-scale/src/init.js"); - - - - - -function quantize() { - var x0 = 0, - x1 = 1, - n = 1, - domain = [0.5], - range = [0, 1], - unknown; - - function scale(x) { - return x <= x ? range[(0,d3_array__WEBPACK_IMPORTED_MODULE_0__.bisect)(domain, x, 0, n)] : unknown; - } - - function rescale() { - var i = -1; - domain = new Array(n); - while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1); - return scale; - } - - scale.domain = function(_) { - return arguments.length ? (x0 = +_[0], x1 = +_[1], rescale()) : [x0, x1]; - }; - - scale.range = function(_) { - return arguments.length ? (n = (range = _array__WEBPACK_IMPORTED_MODULE_1__.slice.call(_)).length - 1, rescale()) : range.slice(); - }; - - scale.invertExtent = function(y) { - var i = range.indexOf(y); - return i < 0 ? [NaN, NaN] - : i < 1 ? [x0, domain[0]] - : i >= n ? [domain[n - 1], x1] - : [domain[i - 1], domain[i]]; - }; - - scale.unknown = function(_) { - return arguments.length ? (unknown = _, scale) : scale; - }; - - scale.thresholds = function() { - return domain.slice(); - }; - - scale.copy = function() { - return quantize() - .domain([x0, x1]) - .range(range) - .unknown(unknown); - }; - - return _init__WEBPACK_IMPORTED_MODULE_3__.initRange.apply((0,_linear__WEBPACK_IMPORTED_MODULE_2__.linearish)(scale), arguments); -} - - -/***/ }), - -/***/ "./node_modules/d3-scale/src/sequential.js": -/*!*************************************************!*\ - !*** ./node_modules/d3-scale/src/sequential.js ***! - \*************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "copy": () => (/* binding */ copy), -/* harmony export */ "default": () => (/* binding */ sequential), -/* harmony export */ "sequentialLog": () => (/* binding */ sequentialLog), -/* harmony export */ "sequentialPow": () => (/* binding */ sequentialPow), -/* harmony export */ "sequentialSqrt": () => (/* binding */ sequentialSqrt), -/* harmony export */ "sequentialSymlog": () => (/* binding */ sequentialSymlog) -/* harmony export */ }); -/* harmony import */ var _continuous__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./continuous */ "./node_modules/d3-scale/src/continuous.js"); -/* harmony import */ var _init__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./init */ "./node_modules/d3-scale/src/init.js"); -/* harmony import */ var _linear__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./linear */ "./node_modules/d3-scale/src/linear.js"); -/* harmony import */ var _log__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./log */ "./node_modules/d3-scale/src/log.js"); -/* harmony import */ var _symlog__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./symlog */ "./node_modules/d3-scale/src/symlog.js"); -/* harmony import */ var _pow__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./pow */ "./node_modules/d3-scale/src/pow.js"); - - - - - - - -function transformer() { - var x0 = 0, - x1 = 1, - t0, - t1, - k10, - transform, - interpolator = _continuous__WEBPACK_IMPORTED_MODULE_0__.identity, - clamp = false, - unknown; - - function scale(x) { - return isNaN(x = +x) ? unknown : interpolator(k10 === 0 ? 0.5 : (x = (transform(x) - t0) * k10, clamp ? Math.max(0, Math.min(1, x)) : x)); - } - - scale.domain = function(_) { - return arguments.length ? (t0 = transform(x0 = +_[0]), t1 = transform(x1 = +_[1]), k10 = t0 === t1 ? 0 : 1 / (t1 - t0), scale) : [x0, x1]; - }; - - scale.clamp = function(_) { - return arguments.length ? (clamp = !!_, scale) : clamp; - }; - - scale.interpolator = function(_) { - return arguments.length ? (interpolator = _, scale) : interpolator; - }; - - scale.unknown = function(_) { - return arguments.length ? (unknown = _, scale) : unknown; - }; - - return function(t) { - transform = t, t0 = t(x0), t1 = t(x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0); - return scale; - }; -} - -function copy(source, target) { - return target - .domain(source.domain()) - .interpolator(source.interpolator()) - .clamp(source.clamp()) - .unknown(source.unknown()); -} - -function sequential() { - var scale = (0,_linear__WEBPACK_IMPORTED_MODULE_2__.linearish)(transformer()(_continuous__WEBPACK_IMPORTED_MODULE_0__.identity)); - - scale.copy = function() { - return copy(scale, sequential()); - }; - - return _init__WEBPACK_IMPORTED_MODULE_1__.initInterpolator.apply(scale, arguments); -} - -function sequentialLog() { - var scale = (0,_log__WEBPACK_IMPORTED_MODULE_3__.loggish)(transformer()).domain([1, 10]); - - scale.copy = function() { - return copy(scale, sequentialLog()).base(scale.base()); - }; - - return _init__WEBPACK_IMPORTED_MODULE_1__.initInterpolator.apply(scale, arguments); -} - -function sequentialSymlog() { - var scale = (0,_symlog__WEBPACK_IMPORTED_MODULE_4__.symlogish)(transformer()); - - scale.copy = function() { - return copy(scale, sequentialSymlog()).constant(scale.constant()); - }; - - return _init__WEBPACK_IMPORTED_MODULE_1__.initInterpolator.apply(scale, arguments); -} - -function sequentialPow() { - var scale = (0,_pow__WEBPACK_IMPORTED_MODULE_5__.powish)(transformer()); - - scale.copy = function() { - return copy(scale, sequentialPow()).exponent(scale.exponent()); - }; - - return _init__WEBPACK_IMPORTED_MODULE_1__.initInterpolator.apply(scale, arguments); -} - -function sequentialSqrt() { - return sequentialPow.apply(null, arguments).exponent(0.5); -} - - -/***/ }), - -/***/ "./node_modules/d3-scale/src/sequentialQuantile.js": -/*!*********************************************************!*\ - !*** ./node_modules/d3-scale/src/sequentialQuantile.js ***! - \*********************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ sequentialQuantile) -/* harmony export */ }); -/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-array */ "./node_modules/d3-array/src/index.js"); -/* harmony import */ var _continuous__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./continuous */ "./node_modules/d3-scale/src/continuous.js"); -/* harmony import */ var _init__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./init */ "./node_modules/d3-scale/src/init.js"); - - - - -function sequentialQuantile() { - var domain = [], - interpolator = _continuous__WEBPACK_IMPORTED_MODULE_1__.identity; - - function scale(x) { - if (!isNaN(x = +x)) return interpolator(((0,d3_array__WEBPACK_IMPORTED_MODULE_0__.bisect)(domain, x) - 1) / (domain.length - 1)); - } - - scale.domain = function(_) { - if (!arguments.length) return domain.slice(); - domain = []; - for (var i = 0, n = _.length, d; i < n; ++i) if (d = _[i], d != null && !isNaN(d = +d)) domain.push(d); - domain.sort(d3_array__WEBPACK_IMPORTED_MODULE_0__.ascending); - return scale; - }; - - scale.interpolator = function(_) { - return arguments.length ? (interpolator = _, scale) : interpolator; - }; - - scale.copy = function() { - return sequentialQuantile(interpolator).domain(domain); - }; - - return _init__WEBPACK_IMPORTED_MODULE_2__.initInterpolator.apply(scale, arguments); -} - - -/***/ }), - -/***/ "./node_modules/d3-scale/src/symlog.js": -/*!*********************************************!*\ - !*** ./node_modules/d3-scale/src/symlog.js ***! - \*********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ symlog), -/* harmony export */ "symlogish": () => (/* binding */ symlogish) -/* harmony export */ }); -/* harmony import */ var _linear__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./linear */ "./node_modules/d3-scale/src/linear.js"); -/* harmony import */ var _continuous__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./continuous */ "./node_modules/d3-scale/src/continuous.js"); -/* harmony import */ var _init__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./init */ "./node_modules/d3-scale/src/init.js"); - - - - -function transformSymlog(c) { - return function(x) { - return Math.sign(x) * Math.log1p(Math.abs(x / c)); - }; -} - -function transformSymexp(c) { - return function(x) { - return Math.sign(x) * Math.expm1(Math.abs(x)) * c; - }; -} - -function symlogish(transform) { - var c = 1, scale = transform(transformSymlog(c), transformSymexp(c)); - - scale.constant = function(_) { - return arguments.length ? transform(transformSymlog(c = +_), transformSymexp(c)) : c; - }; - - return (0,_linear__WEBPACK_IMPORTED_MODULE_0__.linearish)(scale); -} - -function symlog() { - var scale = symlogish((0,_continuous__WEBPACK_IMPORTED_MODULE_1__.transformer)()); - - scale.copy = function() { - return (0,_continuous__WEBPACK_IMPORTED_MODULE_1__.copy)(scale, symlog()).constant(scale.constant()); - }; - - return _init__WEBPACK_IMPORTED_MODULE_2__.initRange.apply(scale, arguments); -} - - -/***/ }), - -/***/ "./node_modules/d3-scale/src/threshold.js": -/*!************************************************!*\ - !*** ./node_modules/d3-scale/src/threshold.js ***! - \************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ threshold) -/* harmony export */ }); -/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-array */ "./node_modules/d3-array/src/index.js"); -/* harmony import */ var _array__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./array */ "./node_modules/d3-scale/src/array.js"); -/* harmony import */ var _init__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./init */ "./node_modules/d3-scale/src/init.js"); - - - - -function threshold() { - var domain = [0.5], - range = [0, 1], - unknown, - n = 1; - - function scale(x) { - return x <= x ? range[(0,d3_array__WEBPACK_IMPORTED_MODULE_0__.bisect)(domain, x, 0, n)] : unknown; - } - - scale.domain = function(_) { - return arguments.length ? (domain = _array__WEBPACK_IMPORTED_MODULE_1__.slice.call(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice(); - }; - - scale.range = function(_) { - return arguments.length ? (range = _array__WEBPACK_IMPORTED_MODULE_1__.slice.call(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice(); - }; - - scale.invertExtent = function(y) { - var i = range.indexOf(y); - return [domain[i - 1], domain[i]]; - }; - - scale.unknown = function(_) { - return arguments.length ? (unknown = _, scale) : unknown; - }; - - scale.copy = function() { - return threshold() - .domain(domain) - .range(range) - .unknown(unknown); - }; - - return _init__WEBPACK_IMPORTED_MODULE_2__.initRange.apply(scale, arguments); -} - - -/***/ }), - -/***/ "./node_modules/d3-scale/src/tickFormat.js": -/*!*************************************************!*\ - !*** ./node_modules/d3-scale/src/tickFormat.js ***! - \*************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-array */ "./node_modules/d3-array/src/index.js"); -/* harmony import */ var d3_format__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-format */ "./node_modules/d3-format/src/formatSpecifier.js"); -/* harmony import */ var d3_format__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-format */ "./node_modules/d3-format/src/precisionPrefix.js"); -/* harmony import */ var d3_format__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! d3-format */ "./node_modules/d3-format/src/defaultLocale.js"); -/* harmony import */ var d3_format__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! d3-format */ "./node_modules/d3-format/src/precisionRound.js"); -/* harmony import */ var d3_format__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! d3-format */ "./node_modules/d3-format/src/precisionFixed.js"); - - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(start, stop, count, specifier) { - var step = (0,d3_array__WEBPACK_IMPORTED_MODULE_0__.tickStep)(start, stop, count), - precision; - specifier = (0,d3_format__WEBPACK_IMPORTED_MODULE_1__["default"])(specifier == null ? ",f" : specifier); - switch (specifier.type) { - case "s": { - var value = Math.max(Math.abs(start), Math.abs(stop)); - if (specifier.precision == null && !isNaN(precision = (0,d3_format__WEBPACK_IMPORTED_MODULE_2__["default"])(step, value))) specifier.precision = precision; - return (0,d3_format__WEBPACK_IMPORTED_MODULE_3__.formatPrefix)(specifier, value); - } - case "": - case "e": - case "g": - case "p": - case "r": { - 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"); - break; - } - case "f": - case "%": { - if (specifier.precision == null && !isNaN(precision = (0,d3_format__WEBPACK_IMPORTED_MODULE_5__["default"])(step))) specifier.precision = precision - (specifier.type === "%") * 2; - break; - } - } - return (0,d3_format__WEBPACK_IMPORTED_MODULE_3__.format)(specifier); -} - - -/***/ }), - -/***/ "./node_modules/d3-scale/src/time.js": -/*!*******************************************!*\ - !*** ./node_modules/d3-scale/src/time.js ***! - \*******************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "calendar": () => (/* binding */ calendar), -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-array */ "./node_modules/d3-array/src/index.js"); -/* harmony import */ var d3_time__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! d3-time */ "./node_modules/d3-time/src/year.js"); -/* harmony import */ var d3_time__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! d3-time */ "./node_modules/d3-time/src/month.js"); -/* harmony import */ var d3_time__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! d3-time */ "./node_modules/d3-time/src/week.js"); -/* harmony import */ var d3_time__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! d3-time */ "./node_modules/d3-time/src/day.js"); -/* harmony import */ var d3_time__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! d3-time */ "./node_modules/d3-time/src/hour.js"); -/* harmony import */ var d3_time__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! d3-time */ "./node_modules/d3-time/src/minute.js"); -/* harmony import */ var d3_time__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! d3-time */ "./node_modules/d3-time/src/second.js"); -/* harmony import */ var d3_time__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! d3-time */ "./node_modules/d3-time/src/millisecond.js"); -/* harmony import */ var d3_time_format__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! d3-time-format */ "./node_modules/d3-time-format/src/defaultLocale.js"); -/* harmony import */ var _array__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./array */ "./node_modules/d3-scale/src/array.js"); -/* harmony import */ var _continuous__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./continuous */ "./node_modules/d3-scale/src/continuous.js"); -/* harmony import */ var _init__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./init */ "./node_modules/d3-scale/src/init.js"); -/* harmony import */ var _nice__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./nice */ "./node_modules/d3-scale/src/nice.js"); - - - - - - - - -var durationSecond = 1000, - durationMinute = durationSecond * 60, - durationHour = durationMinute * 60, - durationDay = durationHour * 24, - durationWeek = durationDay * 7, - durationMonth = durationDay * 30, - durationYear = durationDay * 365; - -function date(t) { - return new Date(t); -} - -function number(t) { - return t instanceof Date ? +t : +new Date(+t); -} - -function calendar(year, month, week, day, hour, minute, second, millisecond, format) { - var scale = (0,_continuous__WEBPACK_IMPORTED_MODULE_2__["default"])(_continuous__WEBPACK_IMPORTED_MODULE_2__.identity, _continuous__WEBPACK_IMPORTED_MODULE_2__.identity), - invert = scale.invert, - domain = scale.domain; - - var formatMillisecond = format(".%L"), - formatSecond = format(":%S"), - formatMinute = format("%I:%M"), - formatHour = format("%I %p"), - formatDay = format("%a %d"), - formatWeek = format("%b %d"), - formatMonth = format("%B"), - formatYear = format("%Y"); - - var tickIntervals = [ - [second, 1, durationSecond], - [second, 5, 5 * durationSecond], - [second, 15, 15 * durationSecond], - [second, 30, 30 * durationSecond], - [minute, 1, durationMinute], - [minute, 5, 5 * durationMinute], - [minute, 15, 15 * durationMinute], - [minute, 30, 30 * durationMinute], - [ hour, 1, durationHour ], - [ hour, 3, 3 * durationHour ], - [ hour, 6, 6 * durationHour ], - [ hour, 12, 12 * durationHour ], - [ day, 1, durationDay ], - [ day, 2, 2 * durationDay ], - [ week, 1, durationWeek ], - [ month, 1, durationMonth ], - [ month, 3, 3 * durationMonth ], - [ year, 1, durationYear ] - ]; - - function tickFormat(date) { - return (second(date) < date ? formatMillisecond - : minute(date) < date ? formatSecond - : hour(date) < date ? formatMinute - : day(date) < date ? formatHour - : month(date) < date ? (week(date) < date ? formatDay : formatWeek) - : year(date) < date ? formatMonth - : formatYear)(date); - } - - function tickInterval(interval, start, stop, step) { - if (interval == null) interval = 10; - - // If a desired tick count is specified, pick a reasonable tick interval - // based on the extent of the domain and a rough estimate of tick size. - // Otherwise, assume interval is already a time interval and use it. - if (typeof interval === "number") { - var target = Math.abs(stop - start) / interval, - i = (0,d3_array__WEBPACK_IMPORTED_MODULE_0__.bisector)(function(i) { return i[2]; }).right(tickIntervals, target); - if (i === tickIntervals.length) { - step = (0,d3_array__WEBPACK_IMPORTED_MODULE_0__.tickStep)(start / durationYear, stop / durationYear, interval); - interval = year; - } else if (i) { - i = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i]; - step = i[1]; - interval = i[0]; - } else { - step = Math.max((0,d3_array__WEBPACK_IMPORTED_MODULE_0__.tickStep)(start, stop, interval), 1); - interval = millisecond; - } - } - - return step == null ? interval : interval.every(step); - } - - scale.invert = function(y) { - return new Date(invert(y)); - }; - - scale.domain = function(_) { - return arguments.length ? domain(_array__WEBPACK_IMPORTED_MODULE_1__.map.call(_, number)) : domain().map(date); - }; - - scale.ticks = function(interval, step) { - var d = domain(), - t0 = d[0], - t1 = d[d.length - 1], - r = t1 < t0, - t; - if (r) t = t0, t0 = t1, t1 = t; - t = tickInterval(interval, t0, t1, step); - t = t ? t.range(t0, t1 + 1) : []; // inclusive stop - return r ? t.reverse() : t; - }; - - scale.tickFormat = function(count, specifier) { - return specifier == null ? tickFormat : format(specifier); - }; - - scale.nice = function(interval, step) { - var d = domain(); - return (interval = tickInterval(interval, d[0], d[d.length - 1], step)) - ? domain((0,_nice__WEBPACK_IMPORTED_MODULE_4__["default"])(d, interval)) - : scale; - }; - - scale.copy = function() { - return (0,_continuous__WEBPACK_IMPORTED_MODULE_2__.copy)(scale, calendar(year, month, week, day, hour, minute, second, millisecond, format)); - }; - - return scale; -} - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() { - return _init__WEBPACK_IMPORTED_MODULE_3__.initRange.apply(calendar(d3_time__WEBPACK_IMPORTED_MODULE_5__["default"], d3_time__WEBPACK_IMPORTED_MODULE_6__["default"], d3_time__WEBPACK_IMPORTED_MODULE_7__.sunday, d3_time__WEBPACK_IMPORTED_MODULE_8__["default"], d3_time__WEBPACK_IMPORTED_MODULE_9__["default"], d3_time__WEBPACK_IMPORTED_MODULE_10__["default"], d3_time__WEBPACK_IMPORTED_MODULE_11__["default"], d3_time__WEBPACK_IMPORTED_MODULE_12__["default"], d3_time_format__WEBPACK_IMPORTED_MODULE_13__.timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]), arguments); -} - - -/***/ }), - -/***/ "./node_modules/d3-scale/src/utcTime.js": -/*!**********************************************!*\ - !*** ./node_modules/d3-scale/src/utcTime.js ***! - \**********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _time__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./time */ "./node_modules/d3-scale/src/time.js"); -/* harmony import */ var d3_time_format__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! d3-time-format */ "./node_modules/d3-time-format/src/defaultLocale.js"); -/* harmony import */ var d3_time__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-time */ "./node_modules/d3-time/src/utcYear.js"); -/* harmony import */ var d3_time__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! d3-time */ "./node_modules/d3-time/src/utcMonth.js"); -/* harmony import */ var d3_time__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! d3-time */ "./node_modules/d3-time/src/utcWeek.js"); -/* harmony import */ var d3_time__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! d3-time */ "./node_modules/d3-time/src/utcDay.js"); -/* harmony import */ var d3_time__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! d3-time */ "./node_modules/d3-time/src/utcHour.js"); -/* harmony import */ var d3_time__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! d3-time */ "./node_modules/d3-time/src/utcMinute.js"); -/* harmony import */ var d3_time__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! d3-time */ "./node_modules/d3-time/src/second.js"); -/* harmony import */ var d3_time__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! d3-time */ "./node_modules/d3-time/src/millisecond.js"); -/* harmony import */ var _init__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./init */ "./node_modules/d3-scale/src/init.js"); - - - - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() { - return _init__WEBPACK_IMPORTED_MODULE_1__.initRange.apply((0,_time__WEBPACK_IMPORTED_MODULE_0__.calendar)(d3_time__WEBPACK_IMPORTED_MODULE_2__["default"], d3_time__WEBPACK_IMPORTED_MODULE_3__["default"], d3_time__WEBPACK_IMPORTED_MODULE_4__.utcSunday, d3_time__WEBPACK_IMPORTED_MODULE_5__["default"], d3_time__WEBPACK_IMPORTED_MODULE_6__["default"], d3_time__WEBPACK_IMPORTED_MODULE_7__["default"], d3_time__WEBPACK_IMPORTED_MODULE_8__["default"], d3_time__WEBPACK_IMPORTED_MODULE_9__["default"], d3_time_format__WEBPACK_IMPORTED_MODULE_10__.utcFormat).domain([Date.UTC(2000, 0, 1), Date.UTC(2000, 0, 2)]), arguments); -} - - -/***/ }), - -/***/ "./node_modules/d3-selection/src/constant.js": -/*!***************************************************!*\ - !*** ./node_modules/d3-selection/src/constant.js ***! - \***************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(x) { - return function() { - return x; - }; -} - - -/***/ }), - -/***/ "./node_modules/d3-selection/src/create.js": -/*!*************************************************!*\ - !*** ./node_modules/d3-selection/src/create.js ***! - \*************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _creator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./creator */ "./node_modules/d3-selection/src/creator.js"); -/* harmony import */ var _select__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./select */ "./node_modules/d3-selection/src/select.js"); - - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(name) { - return (0,_select__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_creator__WEBPACK_IMPORTED_MODULE_1__["default"])(name).call(document.documentElement)); -} - - -/***/ }), - -/***/ "./node_modules/d3-selection/src/creator.js": -/*!**************************************************!*\ - !*** ./node_modules/d3-selection/src/creator.js ***! - \**************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _namespace__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./namespace */ "./node_modules/d3-selection/src/namespace.js"); -/* harmony import */ var _namespaces__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./namespaces */ "./node_modules/d3-selection/src/namespaces.js"); - - - -function creatorInherit(name) { - return function() { - var document = this.ownerDocument, - uri = this.namespaceURI; - return uri === _namespaces__WEBPACK_IMPORTED_MODULE_0__.xhtml && document.documentElement.namespaceURI === _namespaces__WEBPACK_IMPORTED_MODULE_0__.xhtml - ? document.createElement(name) - : document.createElementNS(uri, name); - }; -} - -function creatorFixed(fullname) { - return function() { - return this.ownerDocument.createElementNS(fullname.space, fullname.local); - }; -} - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(name) { - var fullname = (0,_namespace__WEBPACK_IMPORTED_MODULE_1__["default"])(name); - return (fullname.local - ? creatorFixed - : creatorInherit)(fullname); -} - - -/***/ }), - -/***/ "./node_modules/d3-selection/src/index.js": -/*!************************************************!*\ - !*** ./node_modules/d3-selection/src/index.js ***! - \************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "clientPoint": () => (/* reexport safe */ _point__WEBPACK_IMPORTED_MODULE_7__["default"]), -/* harmony export */ "create": () => (/* reexport safe */ _create__WEBPACK_IMPORTED_MODULE_0__["default"]), -/* harmony export */ "creator": () => (/* reexport safe */ _creator__WEBPACK_IMPORTED_MODULE_1__["default"]), -/* harmony export */ "customEvent": () => (/* reexport safe */ _selection_on__WEBPACK_IMPORTED_MODULE_17__.customEvent), -/* harmony export */ "event": () => (/* reexport safe */ _selection_on__WEBPACK_IMPORTED_MODULE_17__.event), -/* harmony export */ "local": () => (/* reexport safe */ _local__WEBPACK_IMPORTED_MODULE_2__["default"]), -/* harmony export */ "matcher": () => (/* reexport safe */ _matcher__WEBPACK_IMPORTED_MODULE_3__["default"]), -/* harmony export */ "mouse": () => (/* reexport safe */ _mouse__WEBPACK_IMPORTED_MODULE_4__["default"]), -/* harmony export */ "namespace": () => (/* reexport safe */ _namespace__WEBPACK_IMPORTED_MODULE_5__["default"]), -/* harmony export */ "namespaces": () => (/* reexport safe */ _namespaces__WEBPACK_IMPORTED_MODULE_6__["default"]), -/* harmony export */ "select": () => (/* reexport safe */ _select__WEBPACK_IMPORTED_MODULE_8__["default"]), -/* harmony export */ "selectAll": () => (/* reexport safe */ _selectAll__WEBPACK_IMPORTED_MODULE_9__["default"]), -/* harmony export */ "selection": () => (/* reexport safe */ _selection_index__WEBPACK_IMPORTED_MODULE_10__["default"]), -/* harmony export */ "selector": () => (/* reexport safe */ _selector__WEBPACK_IMPORTED_MODULE_11__["default"]), -/* harmony export */ "selectorAll": () => (/* reexport safe */ _selectorAll__WEBPACK_IMPORTED_MODULE_12__["default"]), -/* harmony export */ "style": () => (/* reexport safe */ _selection_style__WEBPACK_IMPORTED_MODULE_13__.styleValue), -/* harmony export */ "touch": () => (/* reexport safe */ _touch__WEBPACK_IMPORTED_MODULE_14__["default"]), -/* harmony export */ "touches": () => (/* reexport safe */ _touches__WEBPACK_IMPORTED_MODULE_15__["default"]), -/* harmony export */ "window": () => (/* reexport safe */ _window__WEBPACK_IMPORTED_MODULE_16__["default"]) -/* harmony export */ }); -/* harmony import */ var _create__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./create */ "./node_modules/d3-selection/src/create.js"); -/* harmony import */ var _creator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./creator */ "./node_modules/d3-selection/src/creator.js"); -/* harmony import */ var _local__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./local */ "./node_modules/d3-selection/src/local.js"); -/* harmony import */ var _matcher__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./matcher */ "./node_modules/d3-selection/src/matcher.js"); -/* harmony import */ var _mouse__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./mouse */ "./node_modules/d3-selection/src/mouse.js"); -/* harmony import */ var _namespace__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./namespace */ "./node_modules/d3-selection/src/namespace.js"); -/* harmony import */ var _namespaces__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./namespaces */ "./node_modules/d3-selection/src/namespaces.js"); -/* harmony import */ var _point__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./point */ "./node_modules/d3-selection/src/point.js"); -/* harmony import */ var _select__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./select */ "./node_modules/d3-selection/src/select.js"); -/* harmony import */ var _selectAll__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./selectAll */ "./node_modules/d3-selection/src/selectAll.js"); -/* harmony import */ var _selection_index__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./selection/index */ "./node_modules/d3-selection/src/selection/index.js"); -/* harmony import */ var _selector__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./selector */ "./node_modules/d3-selection/src/selector.js"); -/* harmony import */ var _selectorAll__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./selectorAll */ "./node_modules/d3-selection/src/selectorAll.js"); -/* harmony import */ var _selection_style__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./selection/style */ "./node_modules/d3-selection/src/selection/style.js"); -/* harmony import */ var _touch__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./touch */ "./node_modules/d3-selection/src/touch.js"); -/* harmony import */ var _touches__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./touches */ "./node_modules/d3-selection/src/touches.js"); -/* harmony import */ var _window__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./window */ "./node_modules/d3-selection/src/window.js"); -/* harmony import */ var _selection_on__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./selection/on */ "./node_modules/d3-selection/src/selection/on.js"); - - - - - - - - - - - - - - - - - - - - -/***/ }), - -/***/ "./node_modules/d3-selection/src/local.js": -/*!************************************************!*\ - !*** ./node_modules/d3-selection/src/local.js ***! - \************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ local) -/* harmony export */ }); -var nextId = 0; - -function local() { - return new Local; -} - -function Local() { - this._ = "@" + (++nextId).toString(36); -} - -Local.prototype = local.prototype = { - constructor: Local, - get: function(node) { - var id = this._; - while (!(id in node)) if (!(node = node.parentNode)) return; - return node[id]; - }, - set: function(node, value) { - return node[this._] = value; - }, - remove: function(node) { - return this._ in node && delete node[this._]; - }, - toString: function() { - return this._; - } -}; - - -/***/ }), - -/***/ "./node_modules/d3-selection/src/matcher.js": -/*!**************************************************!*\ - !*** ./node_modules/d3-selection/src/matcher.js ***! - \**************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(selector) { - return function() { - return this.matches(selector); - }; -} - - -/***/ }), - -/***/ "./node_modules/d3-selection/src/mouse.js": -/*!************************************************!*\ - !*** ./node_modules/d3-selection/src/mouse.js ***! - \************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _sourceEvent__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sourceEvent */ "./node_modules/d3-selection/src/sourceEvent.js"); -/* harmony import */ var _point__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./point */ "./node_modules/d3-selection/src/point.js"); - - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(node) { - var event = (0,_sourceEvent__WEBPACK_IMPORTED_MODULE_0__["default"])(); - if (event.changedTouches) event = event.changedTouches[0]; - return (0,_point__WEBPACK_IMPORTED_MODULE_1__["default"])(node, event); -} - - -/***/ }), - -/***/ "./node_modules/d3-selection/src/namespace.js": -/*!****************************************************!*\ - !*** ./node_modules/d3-selection/src/namespace.js ***! - \****************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _namespaces__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./namespaces */ "./node_modules/d3-selection/src/namespaces.js"); - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(name) { - var prefix = name += "", i = prefix.indexOf(":"); - if (i >= 0 && (prefix = name.slice(0, i)) !== "xmlns") name = name.slice(i + 1); - return _namespaces__WEBPACK_IMPORTED_MODULE_0__["default"].hasOwnProperty(prefix) ? {space: _namespaces__WEBPACK_IMPORTED_MODULE_0__["default"][prefix], local: name} : name; -} - - -/***/ }), - -/***/ "./node_modules/d3-selection/src/namespaces.js": -/*!*****************************************************!*\ - !*** ./node_modules/d3-selection/src/namespaces.js ***! - \*****************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "xhtml": () => (/* binding */ xhtml) -/* harmony export */ }); -var xhtml = "http://www.w3.org/1999/xhtml"; - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ - svg: "http://www.w3.org/2000/svg", - xhtml: xhtml, - xlink: "http://www.w3.org/1999/xlink", - xml: "http://www.w3.org/XML/1998/namespace", - xmlns: "http://www.w3.org/2000/xmlns/" -}); - - -/***/ }), - -/***/ "./node_modules/d3-selection/src/point.js": -/*!************************************************!*\ - !*** ./node_modules/d3-selection/src/point.js ***! - \************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(node, event) { - var svg = node.ownerSVGElement || node; - - if (svg.createSVGPoint) { - var point = svg.createSVGPoint(); - point.x = event.clientX, point.y = event.clientY; - point = point.matrixTransform(node.getScreenCTM().inverse()); - return [point.x, point.y]; - } - - var rect = node.getBoundingClientRect(); - return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop]; -} - - -/***/ }), - -/***/ "./node_modules/d3-selection/src/select.js": -/*!*************************************************!*\ - !*** ./node_modules/d3-selection/src/select.js ***! - \*************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _selection_index__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./selection/index */ "./node_modules/d3-selection/src/selection/index.js"); - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(selector) { - return typeof selector === "string" - ? new _selection_index__WEBPACK_IMPORTED_MODULE_0__.Selection([[document.querySelector(selector)]], [document.documentElement]) - : new _selection_index__WEBPACK_IMPORTED_MODULE_0__.Selection([[selector]], _selection_index__WEBPACK_IMPORTED_MODULE_0__.root); -} - - -/***/ }), - -/***/ "./node_modules/d3-selection/src/selectAll.js": -/*!****************************************************!*\ - !*** ./node_modules/d3-selection/src/selectAll.js ***! - \****************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _selection_index__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./selection/index */ "./node_modules/d3-selection/src/selection/index.js"); - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(selector) { - return typeof selector === "string" - ? new _selection_index__WEBPACK_IMPORTED_MODULE_0__.Selection([document.querySelectorAll(selector)], [document.documentElement]) - : new _selection_index__WEBPACK_IMPORTED_MODULE_0__.Selection([selector == null ? [] : selector], _selection_index__WEBPACK_IMPORTED_MODULE_0__.root); -} - - -/***/ }), - -/***/ "./node_modules/d3-selection/src/selection/append.js": -/*!***********************************************************!*\ - !*** ./node_modules/d3-selection/src/selection/append.js ***! - \***********************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _creator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../creator */ "./node_modules/d3-selection/src/creator.js"); - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(name) { - var create = typeof name === "function" ? name : (0,_creator__WEBPACK_IMPORTED_MODULE_0__["default"])(name); - return this.select(function() { - return this.appendChild(create.apply(this, arguments)); - }); -} - - -/***/ }), - -/***/ "./node_modules/d3-selection/src/selection/attr.js": -/*!*********************************************************!*\ - !*** ./node_modules/d3-selection/src/selection/attr.js ***! - \*********************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _namespace__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../namespace */ "./node_modules/d3-selection/src/namespace.js"); - - -function attrRemove(name) { - return function() { - this.removeAttribute(name); - }; -} - -function attrRemoveNS(fullname) { - return function() { - this.removeAttributeNS(fullname.space, fullname.local); - }; -} - -function attrConstant(name, value) { - return function() { - this.setAttribute(name, value); - }; -} - -function attrConstantNS(fullname, value) { - return function() { - this.setAttributeNS(fullname.space, fullname.local, value); - }; -} - -function attrFunction(name, value) { - return function() { - var v = value.apply(this, arguments); - if (v == null) this.removeAttribute(name); - else this.setAttribute(name, v); - }; -} - -function attrFunctionNS(fullname, value) { - return function() { - var v = value.apply(this, arguments); - if (v == null) this.removeAttributeNS(fullname.space, fullname.local); - else this.setAttributeNS(fullname.space, fullname.local, v); - }; -} - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(name, value) { - var fullname = (0,_namespace__WEBPACK_IMPORTED_MODULE_0__["default"])(name); - - if (arguments.length < 2) { - var node = this.node(); - return fullname.local - ? node.getAttributeNS(fullname.space, fullname.local) - : node.getAttribute(fullname); - } - - return this.each((value == null - ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === "function" - ? (fullname.local ? attrFunctionNS : attrFunction) - : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value)); -} - - -/***/ }), - -/***/ "./node_modules/d3-selection/src/selection/call.js": -/*!*********************************************************!*\ - !*** ./node_modules/d3-selection/src/selection/call.js ***! - \*********************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() { - var callback = arguments[0]; - arguments[0] = this; - callback.apply(null, arguments); - return this; -} - - -/***/ }), - -/***/ "./node_modules/d3-selection/src/selection/classed.js": -/*!************************************************************!*\ - !*** ./node_modules/d3-selection/src/selection/classed.js ***! - \************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -function classArray(string) { - return string.trim().split(/^|\s+/); -} - -function classList(node) { - return node.classList || new ClassList(node); -} - -function ClassList(node) { - this._node = node; - this._names = classArray(node.getAttribute("class") || ""); -} - -ClassList.prototype = { - add: function(name) { - var i = this._names.indexOf(name); - if (i < 0) { - this._names.push(name); - this._node.setAttribute("class", this._names.join(" ")); - } - }, - remove: function(name) { - var i = this._names.indexOf(name); - if (i >= 0) { - this._names.splice(i, 1); - this._node.setAttribute("class", this._names.join(" ")); - } - }, - contains: function(name) { - return this._names.indexOf(name) >= 0; - } -}; - -function classedAdd(node, names) { - var list = classList(node), i = -1, n = names.length; - while (++i < n) list.add(names[i]); -} - -function classedRemove(node, names) { - var list = classList(node), i = -1, n = names.length; - while (++i < n) list.remove(names[i]); -} - -function classedTrue(names) { - return function() { - classedAdd(this, names); - }; -} - -function classedFalse(names) { - return function() { - classedRemove(this, names); - }; -} - -function classedFunction(names, value) { - return function() { - (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names); - }; -} - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(name, value) { - var names = classArray(name + ""); - - if (arguments.length < 2) { - var list = classList(this.node()), i = -1, n = names.length; - while (++i < n) if (!list.contains(names[i])) return false; - return true; - } - - return this.each((typeof value === "function" - ? classedFunction : value - ? classedTrue - : classedFalse)(names, value)); -} - - -/***/ }), - -/***/ "./node_modules/d3-selection/src/selection/clone.js": -/*!**********************************************************!*\ - !*** ./node_modules/d3-selection/src/selection/clone.js ***! - \**********************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -function selection_cloneShallow() { - var clone = this.cloneNode(false), parent = this.parentNode; - return parent ? parent.insertBefore(clone, this.nextSibling) : clone; -} - -function selection_cloneDeep() { - var clone = this.cloneNode(true), parent = this.parentNode; - return parent ? parent.insertBefore(clone, this.nextSibling) : clone; -} - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(deep) { - return this.select(deep ? selection_cloneDeep : selection_cloneShallow); -} - - -/***/ }), - -/***/ "./node_modules/d3-selection/src/selection/data.js": -/*!*********************************************************!*\ - !*** ./node_modules/d3-selection/src/selection/data.js ***! - \*********************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./index */ "./node_modules/d3-selection/src/selection/index.js"); -/* harmony import */ var _enter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./enter */ "./node_modules/d3-selection/src/selection/enter.js"); -/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../constant */ "./node_modules/d3-selection/src/constant.js"); - - - - -var keyPrefix = "$"; // Protect against keys like “__proto__”. - -function bindIndex(parent, group, enter, update, exit, data) { - var i = 0, - node, - groupLength = group.length, - dataLength = data.length; - - // Put any non-null nodes that fit into update. - // Put any null nodes into enter. - // Put any remaining data into enter. - for (; i < dataLength; ++i) { - if (node = group[i]) { - node.__data__ = data[i]; - update[i] = node; - } else { - enter[i] = new _enter__WEBPACK_IMPORTED_MODULE_0__.EnterNode(parent, data[i]); - } - } - - // Put any non-null nodes that don’t fit into exit. - for (; i < groupLength; ++i) { - if (node = group[i]) { - exit[i] = node; - } - } -} - -function bindKey(parent, group, enter, update, exit, data, key) { - var i, - node, - nodeByKeyValue = {}, - groupLength = group.length, - dataLength = data.length, - keyValues = new Array(groupLength), - keyValue; - - // Compute the key for each node. - // If multiple nodes have the same key, the duplicates are added to exit. - for (i = 0; i < groupLength; ++i) { - if (node = group[i]) { - keyValues[i] = keyValue = keyPrefix + key.call(node, node.__data__, i, group); - if (keyValue in nodeByKeyValue) { - exit[i] = node; - } else { - nodeByKeyValue[keyValue] = node; - } - } - } - - // Compute the key for each datum. - // If there a node associated with this key, join and add it to update. - // If there is not (or the key is a duplicate), add it to enter. - for (i = 0; i < dataLength; ++i) { - keyValue = keyPrefix + key.call(parent, data[i], i, data); - if (node = nodeByKeyValue[keyValue]) { - update[i] = node; - node.__data__ = data[i]; - nodeByKeyValue[keyValue] = null; - } else { - enter[i] = new _enter__WEBPACK_IMPORTED_MODULE_0__.EnterNode(parent, data[i]); - } - } - - // Add any remaining nodes that were not bound to data to exit. - for (i = 0; i < groupLength; ++i) { - if ((node = group[i]) && (nodeByKeyValue[keyValues[i]] === node)) { - exit[i] = node; - } - } -} - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(value, key) { - if (!value) { - data = new Array(this.size()), j = -1; - this.each(function(d) { data[++j] = d; }); - return data; - } - - var bind = key ? bindKey : bindIndex, - parents = this._parents, - groups = this._groups; - - if (typeof value !== "function") value = (0,_constant__WEBPACK_IMPORTED_MODULE_1__["default"])(value); - - for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) { - var parent = parents[j], - group = groups[j], - groupLength = group.length, - data = value.call(parent, parent && parent.__data__, j, parents), - dataLength = data.length, - enterGroup = enter[j] = new Array(dataLength), - updateGroup = update[j] = new Array(dataLength), - exitGroup = exit[j] = new Array(groupLength); - - bind(parent, group, enterGroup, updateGroup, exitGroup, data, key); - - // Now connect the enter nodes to their following update node, such that - // appendChild can insert the materialized enter node before this node, - // rather than at the end of the parent node. - for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) { - if (previous = enterGroup[i0]) { - if (i0 >= i1) i1 = i0 + 1; - while (!(next = updateGroup[i1]) && ++i1 < dataLength); - previous._next = next || null; - } - } - } - - update = new _index__WEBPACK_IMPORTED_MODULE_2__.Selection(update, parents); - update._enter = enter; - update._exit = exit; - return update; -} - - -/***/ }), - -/***/ "./node_modules/d3-selection/src/selection/datum.js": -/*!**********************************************************!*\ - !*** ./node_modules/d3-selection/src/selection/datum.js ***! - \**********************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(value) { - return arguments.length - ? this.property("__data__", value) - : this.node().__data__; -} - - -/***/ }), - -/***/ "./node_modules/d3-selection/src/selection/dispatch.js": -/*!*************************************************************!*\ - !*** ./node_modules/d3-selection/src/selection/dispatch.js ***! - \*************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../window */ "./node_modules/d3-selection/src/window.js"); - - -function dispatchEvent(node, type, params) { - var window = (0,_window__WEBPACK_IMPORTED_MODULE_0__["default"])(node), - event = window.CustomEvent; - - if (typeof event === "function") { - event = new event(type, params); - } else { - event = window.document.createEvent("Event"); - if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail; - else event.initEvent(type, false, false); - } - - node.dispatchEvent(event); -} - -function dispatchConstant(type, params) { - return function() { - return dispatchEvent(this, type, params); - }; -} - -function dispatchFunction(type, params) { - return function() { - return dispatchEvent(this, type, params.apply(this, arguments)); - }; -} - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(type, params) { - return this.each((typeof params === "function" - ? dispatchFunction - : dispatchConstant)(type, params)); -} - - -/***/ }), - -/***/ "./node_modules/d3-selection/src/selection/each.js": -/*!*********************************************************!*\ - !*** ./node_modules/d3-selection/src/selection/each.js ***! - \*********************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(callback) { - - for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) { - for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) { - if (node = group[i]) callback.call(node, node.__data__, i, group); - } - } - - return this; -} - - -/***/ }), - -/***/ "./node_modules/d3-selection/src/selection/empty.js": -/*!**********************************************************!*\ - !*** ./node_modules/d3-selection/src/selection/empty.js ***! - \**********************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() { - return !this.node(); -} - - -/***/ }), - -/***/ "./node_modules/d3-selection/src/selection/enter.js": -/*!**********************************************************!*\ - !*** ./node_modules/d3-selection/src/selection/enter.js ***! - \**********************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "EnterNode": () => (/* binding */ EnterNode), -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _sparse__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./sparse */ "./node_modules/d3-selection/src/selection/sparse.js"); -/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index */ "./node_modules/d3-selection/src/selection/index.js"); - - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() { - return new _index__WEBPACK_IMPORTED_MODULE_0__.Selection(this._enter || this._groups.map(_sparse__WEBPACK_IMPORTED_MODULE_1__["default"]), this._parents); -} - -function EnterNode(parent, datum) { - this.ownerDocument = parent.ownerDocument; - this.namespaceURI = parent.namespaceURI; - this._next = null; - this._parent = parent; - this.__data__ = datum; -} - -EnterNode.prototype = { - constructor: EnterNode, - appendChild: function(child) { return this._parent.insertBefore(child, this._next); }, - insertBefore: function(child, next) { return this._parent.insertBefore(child, next); }, - querySelector: function(selector) { return this._parent.querySelector(selector); }, - querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); } -}; - - -/***/ }), - -/***/ "./node_modules/d3-selection/src/selection/exit.js": -/*!*********************************************************!*\ - !*** ./node_modules/d3-selection/src/selection/exit.js ***! - \*********************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _sparse__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./sparse */ "./node_modules/d3-selection/src/selection/sparse.js"); -/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index */ "./node_modules/d3-selection/src/selection/index.js"); - - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() { - return new _index__WEBPACK_IMPORTED_MODULE_0__.Selection(this._exit || this._groups.map(_sparse__WEBPACK_IMPORTED_MODULE_1__["default"]), this._parents); -} - - -/***/ }), - -/***/ "./node_modules/d3-selection/src/selection/filter.js": -/*!***********************************************************!*\ - !*** ./node_modules/d3-selection/src/selection/filter.js ***! - \***********************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./index */ "./node_modules/d3-selection/src/selection/index.js"); -/* harmony import */ var _matcher__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../matcher */ "./node_modules/d3-selection/src/matcher.js"); - - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(match) { - if (typeof match !== "function") match = (0,_matcher__WEBPACK_IMPORTED_MODULE_0__["default"])(match); - - for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) { - for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) { - if ((node = group[i]) && match.call(node, node.__data__, i, group)) { - subgroup.push(node); - } - } - } - - return new _index__WEBPACK_IMPORTED_MODULE_1__.Selection(subgroups, this._parents); -} - - -/***/ }), - -/***/ "./node_modules/d3-selection/src/selection/html.js": -/*!*********************************************************!*\ - !*** ./node_modules/d3-selection/src/selection/html.js ***! - \*********************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -function htmlRemove() { - this.innerHTML = ""; -} - -function htmlConstant(value) { - return function() { - this.innerHTML = value; - }; -} - -function htmlFunction(value) { - return function() { - var v = value.apply(this, arguments); - this.innerHTML = v == null ? "" : v; - }; -} - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(value) { - return arguments.length - ? this.each(value == null - ? htmlRemove : (typeof value === "function" - ? htmlFunction - : htmlConstant)(value)) - : this.node().innerHTML; -} - - -/***/ }), - -/***/ "./node_modules/d3-selection/src/selection/index.js": -/*!**********************************************************!*\ - !*** ./node_modules/d3-selection/src/selection/index.js ***! - \**********************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Selection": () => (/* binding */ Selection), -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "root": () => (/* binding */ root) -/* harmony export */ }); -/* harmony import */ var _select__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./select */ "./node_modules/d3-selection/src/selection/select.js"); -/* harmony import */ var _selectAll__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./selectAll */ "./node_modules/d3-selection/src/selection/selectAll.js"); -/* harmony import */ var _filter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./filter */ "./node_modules/d3-selection/src/selection/filter.js"); -/* harmony import */ var _data__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./data */ "./node_modules/d3-selection/src/selection/data.js"); -/* harmony import */ var _enter__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./enter */ "./node_modules/d3-selection/src/selection/enter.js"); -/* harmony import */ var _exit__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./exit */ "./node_modules/d3-selection/src/selection/exit.js"); -/* harmony import */ var _join__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./join */ "./node_modules/d3-selection/src/selection/join.js"); -/* harmony import */ var _merge__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./merge */ "./node_modules/d3-selection/src/selection/merge.js"); -/* harmony import */ var _order__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./order */ "./node_modules/d3-selection/src/selection/order.js"); -/* harmony import */ var _sort__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./sort */ "./node_modules/d3-selection/src/selection/sort.js"); -/* harmony import */ var _call__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./call */ "./node_modules/d3-selection/src/selection/call.js"); -/* harmony import */ var _nodes__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./nodes */ "./node_modules/d3-selection/src/selection/nodes.js"); -/* harmony import */ var _node__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./node */ "./node_modules/d3-selection/src/selection/node.js"); -/* harmony import */ var _size__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./size */ "./node_modules/d3-selection/src/selection/size.js"); -/* harmony import */ var _empty__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./empty */ "./node_modules/d3-selection/src/selection/empty.js"); -/* harmony import */ var _each__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./each */ "./node_modules/d3-selection/src/selection/each.js"); -/* harmony import */ var _attr__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./attr */ "./node_modules/d3-selection/src/selection/attr.js"); -/* harmony import */ var _style__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./style */ "./node_modules/d3-selection/src/selection/style.js"); -/* harmony import */ var _property__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./property */ "./node_modules/d3-selection/src/selection/property.js"); -/* harmony import */ var _classed__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./classed */ "./node_modules/d3-selection/src/selection/classed.js"); -/* harmony import */ var _text__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./text */ "./node_modules/d3-selection/src/selection/text.js"); -/* harmony import */ var _html__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./html */ "./node_modules/d3-selection/src/selection/html.js"); -/* harmony import */ var _raise__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./raise */ "./node_modules/d3-selection/src/selection/raise.js"); -/* harmony import */ var _lower__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./lower */ "./node_modules/d3-selection/src/selection/lower.js"); -/* harmony import */ var _append__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./append */ "./node_modules/d3-selection/src/selection/append.js"); -/* harmony import */ var _insert__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./insert */ "./node_modules/d3-selection/src/selection/insert.js"); -/* harmony import */ var _remove__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./remove */ "./node_modules/d3-selection/src/selection/remove.js"); -/* harmony import */ var _clone__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./clone */ "./node_modules/d3-selection/src/selection/clone.js"); -/* harmony import */ var _datum__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./datum */ "./node_modules/d3-selection/src/selection/datum.js"); -/* harmony import */ var _on__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./on */ "./node_modules/d3-selection/src/selection/on.js"); -/* harmony import */ var _dispatch__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./dispatch */ "./node_modules/d3-selection/src/selection/dispatch.js"); - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -var root = [null]; - -function Selection(groups, parents) { - this._groups = groups; - this._parents = parents; -} - -function selection() { - return new Selection([[document.documentElement]], root); -} - -Selection.prototype = selection.prototype = { - constructor: Selection, - select: _select__WEBPACK_IMPORTED_MODULE_0__["default"], - selectAll: _selectAll__WEBPACK_IMPORTED_MODULE_1__["default"], - filter: _filter__WEBPACK_IMPORTED_MODULE_2__["default"], - data: _data__WEBPACK_IMPORTED_MODULE_3__["default"], - enter: _enter__WEBPACK_IMPORTED_MODULE_4__["default"], - exit: _exit__WEBPACK_IMPORTED_MODULE_5__["default"], - join: _join__WEBPACK_IMPORTED_MODULE_6__["default"], - merge: _merge__WEBPACK_IMPORTED_MODULE_7__["default"], - order: _order__WEBPACK_IMPORTED_MODULE_8__["default"], - sort: _sort__WEBPACK_IMPORTED_MODULE_9__["default"], - call: _call__WEBPACK_IMPORTED_MODULE_10__["default"], - nodes: _nodes__WEBPACK_IMPORTED_MODULE_11__["default"], - node: _node__WEBPACK_IMPORTED_MODULE_12__["default"], - size: _size__WEBPACK_IMPORTED_MODULE_13__["default"], - empty: _empty__WEBPACK_IMPORTED_MODULE_14__["default"], - each: _each__WEBPACK_IMPORTED_MODULE_15__["default"], - attr: _attr__WEBPACK_IMPORTED_MODULE_16__["default"], - style: _style__WEBPACK_IMPORTED_MODULE_17__["default"], - property: _property__WEBPACK_IMPORTED_MODULE_18__["default"], - classed: _classed__WEBPACK_IMPORTED_MODULE_19__["default"], - text: _text__WEBPACK_IMPORTED_MODULE_20__["default"], - html: _html__WEBPACK_IMPORTED_MODULE_21__["default"], - raise: _raise__WEBPACK_IMPORTED_MODULE_22__["default"], - lower: _lower__WEBPACK_IMPORTED_MODULE_23__["default"], - append: _append__WEBPACK_IMPORTED_MODULE_24__["default"], - insert: _insert__WEBPACK_IMPORTED_MODULE_25__["default"], - remove: _remove__WEBPACK_IMPORTED_MODULE_26__["default"], - clone: _clone__WEBPACK_IMPORTED_MODULE_27__["default"], - datum: _datum__WEBPACK_IMPORTED_MODULE_28__["default"], - on: _on__WEBPACK_IMPORTED_MODULE_29__["default"], - dispatch: _dispatch__WEBPACK_IMPORTED_MODULE_30__["default"] -}; - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (selection); - - -/***/ }), - -/***/ "./node_modules/d3-selection/src/selection/insert.js": -/*!***********************************************************!*\ - !*** ./node_modules/d3-selection/src/selection/insert.js ***! - \***********************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _creator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../creator */ "./node_modules/d3-selection/src/creator.js"); -/* harmony import */ var _selector__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../selector */ "./node_modules/d3-selection/src/selector.js"); - - - -function constantNull() { - return null; -} - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(name, before) { - var create = typeof name === "function" ? name : (0,_creator__WEBPACK_IMPORTED_MODULE_0__["default"])(name), - select = before == null ? constantNull : typeof before === "function" ? before : (0,_selector__WEBPACK_IMPORTED_MODULE_1__["default"])(before); - return this.select(function() { - return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null); - }); -} - - -/***/ }), - -/***/ "./node_modules/d3-selection/src/selection/join.js": -/*!*********************************************************!*\ - !*** ./node_modules/d3-selection/src/selection/join.js ***! - \*********************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(onenter, onupdate, onexit) { - var enter = this.enter(), update = this, exit = this.exit(); - enter = typeof onenter === "function" ? onenter(enter) : enter.append(onenter + ""); - if (onupdate != null) update = onupdate(update); - if (onexit == null) exit.remove(); else onexit(exit); - return enter && update ? enter.merge(update).order() : update; -} - - -/***/ }), - -/***/ "./node_modules/d3-selection/src/selection/lower.js": -/*!**********************************************************!*\ - !*** ./node_modules/d3-selection/src/selection/lower.js ***! - \**********************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -function lower() { - if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild); -} - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() { - return this.each(lower); -} - - -/***/ }), - -/***/ "./node_modules/d3-selection/src/selection/merge.js": -/*!**********************************************************!*\ - !*** ./node_modules/d3-selection/src/selection/merge.js ***! - \**********************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index */ "./node_modules/d3-selection/src/selection/index.js"); - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(selection) { - - 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) { - for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) { - if (node = group0[i] || group1[i]) { - merge[i] = node; - } - } - } - - for (; j < m0; ++j) { - merges[j] = groups0[j]; - } - - return new _index__WEBPACK_IMPORTED_MODULE_0__.Selection(merges, this._parents); -} - - -/***/ }), - -/***/ "./node_modules/d3-selection/src/selection/node.js": -/*!*********************************************************!*\ - !*** ./node_modules/d3-selection/src/selection/node.js ***! - \*********************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() { - - for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) { - for (var group = groups[j], i = 0, n = group.length; i < n; ++i) { - var node = group[i]; - if (node) return node; - } - } - - return null; -} - - -/***/ }), - -/***/ "./node_modules/d3-selection/src/selection/nodes.js": -/*!**********************************************************!*\ - !*** ./node_modules/d3-selection/src/selection/nodes.js ***! - \**********************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() { - var nodes = new Array(this.size()), i = -1; - this.each(function() { nodes[++i] = this; }); - return nodes; -} - - -/***/ }), - -/***/ "./node_modules/d3-selection/src/selection/on.js": -/*!*******************************************************!*\ - !*** ./node_modules/d3-selection/src/selection/on.js ***! - \*******************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "customEvent": () => (/* binding */ customEvent), -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "event": () => (/* binding */ event) -/* harmony export */ }); -var filterEvents = {}; - -var event = null; - -if (typeof document !== "undefined") { - var element = document.documentElement; - if (!("onmouseenter" in element)) { - filterEvents = {mouseenter: "mouseover", mouseleave: "mouseout"}; - } -} - -function filterContextListener(listener, index, group) { - listener = contextListener(listener, index, group); - return function(event) { - var related = event.relatedTarget; - if (!related || (related !== this && !(related.compareDocumentPosition(this) & 8))) { - listener.call(this, event); - } - }; -} - -function contextListener(listener, index, group) { - return function(event1) { - var event0 = event; // Events can be reentrant (e.g., focus). - event = event1; - try { - listener.call(this, this.__data__, index, group); - } finally { - event = event0; - } - }; -} - -function parseTypenames(typenames) { - return typenames.trim().split(/^|\s+/).map(function(t) { - var name = "", i = t.indexOf("."); - if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i); - return {type: t, name: name}; - }); -} - -function onRemove(typename) { - return function() { - var on = this.__on; - if (!on) return; - for (var j = 0, i = -1, m = on.length, o; j < m; ++j) { - if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) { - this.removeEventListener(o.type, o.listener, o.capture); - } else { - on[++i] = o; - } - } - if (++i) on.length = i; - else delete this.__on; - }; -} - -function onAdd(typename, value, capture) { - var wrap = filterEvents.hasOwnProperty(typename.type) ? filterContextListener : contextListener; - return function(d, i, group) { - var on = this.__on, o, listener = wrap(value, i, group); - if (on) for (var j = 0, m = on.length; j < m; ++j) { - if ((o = on[j]).type === typename.type && o.name === typename.name) { - this.removeEventListener(o.type, o.listener, o.capture); - this.addEventListener(o.type, o.listener = listener, o.capture = capture); - o.value = value; - return; - } - } - this.addEventListener(typename.type, listener, capture); - o = {type: typename.type, name: typename.name, value: value, listener: listener, capture: capture}; - if (!on) this.__on = [o]; - else on.push(o); - }; -} - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(typename, value, capture) { - var typenames = parseTypenames(typename + ""), i, n = typenames.length, t; - - if (arguments.length < 2) { - var on = this.node().__on; - if (on) for (var j = 0, m = on.length, o; j < m; ++j) { - for (i = 0, o = on[j]; i < n; ++i) { - if ((t = typenames[i]).type === o.type && t.name === o.name) { - return o.value; - } - } - } - return; - } - - on = value ? onAdd : onRemove; - if (capture == null) capture = false; - for (i = 0; i < n; ++i) this.each(on(typenames[i], value, capture)); - return this; -} - -function customEvent(event1, listener, that, args) { - var event0 = event; - event1.sourceEvent = event; - event = event1; - try { - return listener.apply(that, args); - } finally { - event = event0; - } -} - - -/***/ }), - -/***/ "./node_modules/d3-selection/src/selection/order.js": -/*!**********************************************************!*\ - !*** ./node_modules/d3-selection/src/selection/order.js ***! - \**********************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() { - - for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) { - for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) { - if (node = group[i]) { - if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next); - next = node; - } - } - } - - return this; -} - - -/***/ }), - -/***/ "./node_modules/d3-selection/src/selection/property.js": -/*!*************************************************************!*\ - !*** ./node_modules/d3-selection/src/selection/property.js ***! - \*************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -function propertyRemove(name) { - return function() { - delete this[name]; - }; -} - -function propertyConstant(name, value) { - return function() { - this[name] = value; - }; -} - -function propertyFunction(name, value) { - return function() { - var v = value.apply(this, arguments); - if (v == null) delete this[name]; - else this[name] = v; - }; -} - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(name, value) { - return arguments.length > 1 - ? this.each((value == null - ? propertyRemove : typeof value === "function" - ? propertyFunction - : propertyConstant)(name, value)) - : this.node()[name]; -} - - -/***/ }), - -/***/ "./node_modules/d3-selection/src/selection/raise.js": -/*!**********************************************************!*\ - !*** ./node_modules/d3-selection/src/selection/raise.js ***! - \**********************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -function raise() { - if (this.nextSibling) this.parentNode.appendChild(this); -} - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() { - return this.each(raise); -} - - -/***/ }), - -/***/ "./node_modules/d3-selection/src/selection/remove.js": -/*!***********************************************************!*\ - !*** ./node_modules/d3-selection/src/selection/remove.js ***! - \***********************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -function remove() { - var parent = this.parentNode; - if (parent) parent.removeChild(this); -} - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() { - return this.each(remove); -} - - -/***/ }), - -/***/ "./node_modules/d3-selection/src/selection/select.js": -/*!***********************************************************!*\ - !*** ./node_modules/d3-selection/src/selection/select.js ***! - \***********************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./index */ "./node_modules/d3-selection/src/selection/index.js"); -/* harmony import */ var _selector__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../selector */ "./node_modules/d3-selection/src/selector.js"); - - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(select) { - if (typeof select !== "function") select = (0,_selector__WEBPACK_IMPORTED_MODULE_0__["default"])(select); - - for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) { - for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) { - if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) { - if ("__data__" in node) subnode.__data__ = node.__data__; - subgroup[i] = subnode; - } - } - } - - return new _index__WEBPACK_IMPORTED_MODULE_1__.Selection(subgroups, this._parents); -} - - -/***/ }), - -/***/ "./node_modules/d3-selection/src/selection/selectAll.js": -/*!**************************************************************!*\ - !*** ./node_modules/d3-selection/src/selection/selectAll.js ***! - \**************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./index */ "./node_modules/d3-selection/src/selection/index.js"); -/* harmony import */ var _selectorAll__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../selectorAll */ "./node_modules/d3-selection/src/selectorAll.js"); - - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(select) { - if (typeof select !== "function") select = (0,_selectorAll__WEBPACK_IMPORTED_MODULE_0__["default"])(select); - - for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) { - for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) { - if (node = group[i]) { - subgroups.push(select.call(node, node.__data__, i, group)); - parents.push(node); - } - } - } - - return new _index__WEBPACK_IMPORTED_MODULE_1__.Selection(subgroups, parents); -} - - -/***/ }), - -/***/ "./node_modules/d3-selection/src/selection/size.js": -/*!*********************************************************!*\ - !*** ./node_modules/d3-selection/src/selection/size.js ***! - \*********************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() { - var size = 0; - this.each(function() { ++size; }); - return size; -} - - -/***/ }), - -/***/ "./node_modules/d3-selection/src/selection/sort.js": -/*!*********************************************************!*\ - !*** ./node_modules/d3-selection/src/selection/sort.js ***! - \*********************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index */ "./node_modules/d3-selection/src/selection/index.js"); - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(compare) { - if (!compare) compare = ascending; - - function compareNode(a, b) { - return a && b ? compare(a.__data__, b.__data__) : !a - !b; - } - - for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) { - for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) { - if (node = group[i]) { - sortgroup[i] = node; - } - } - sortgroup.sort(compareNode); - } - - return new _index__WEBPACK_IMPORTED_MODULE_0__.Selection(sortgroups, this._parents).order(); -} - -function ascending(a, b) { - return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN; -} - - -/***/ }), - -/***/ "./node_modules/d3-selection/src/selection/sparse.js": -/*!***********************************************************!*\ - !*** ./node_modules/d3-selection/src/selection/sparse.js ***! - \***********************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(update) { - return new Array(update.length); -} - - -/***/ }), - -/***/ "./node_modules/d3-selection/src/selection/style.js": -/*!**********************************************************!*\ - !*** ./node_modules/d3-selection/src/selection/style.js ***! - \**********************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "styleValue": () => (/* binding */ styleValue) -/* harmony export */ }); -/* harmony import */ var _window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../window */ "./node_modules/d3-selection/src/window.js"); - - -function styleRemove(name) { - return function() { - this.style.removeProperty(name); - }; -} - -function styleConstant(name, value, priority) { - return function() { - this.style.setProperty(name, value, priority); - }; -} - -function styleFunction(name, value, priority) { - return function() { - var v = value.apply(this, arguments); - if (v == null) this.style.removeProperty(name); - else this.style.setProperty(name, v, priority); - }; -} - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(name, value, priority) { - return arguments.length > 1 - ? this.each((value == null - ? styleRemove : typeof value === "function" - ? styleFunction - : styleConstant)(name, value, priority == null ? "" : priority)) - : styleValue(this.node(), name); -} - -function styleValue(node, name) { - return node.style.getPropertyValue(name) - || (0,_window__WEBPACK_IMPORTED_MODULE_0__["default"])(node).getComputedStyle(node, null).getPropertyValue(name); -} - - -/***/ }), - -/***/ "./node_modules/d3-selection/src/selection/text.js": -/*!*********************************************************!*\ - !*** ./node_modules/d3-selection/src/selection/text.js ***! - \*********************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -function textRemove() { - this.textContent = ""; -} - -function textConstant(value) { - return function() { - this.textContent = value; - }; -} - -function textFunction(value) { - return function() { - var v = value.apply(this, arguments); - this.textContent = v == null ? "" : v; - }; -} - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(value) { - return arguments.length - ? this.each(value == null - ? textRemove : (typeof value === "function" - ? textFunction - : textConstant)(value)) - : this.node().textContent; -} - - -/***/ }), - -/***/ "./node_modules/d3-selection/src/selector.js": -/*!***************************************************!*\ - !*** ./node_modules/d3-selection/src/selector.js ***! - \***************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -function none() {} - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(selector) { - return selector == null ? none : function() { - return this.querySelector(selector); - }; -} - - -/***/ }), - -/***/ "./node_modules/d3-selection/src/selectorAll.js": -/*!******************************************************!*\ - !*** ./node_modules/d3-selection/src/selectorAll.js ***! - \******************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -function empty() { - return []; -} - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(selector) { - return selector == null ? empty : function() { - return this.querySelectorAll(selector); - }; -} - - -/***/ }), - -/***/ "./node_modules/d3-selection/src/sourceEvent.js": -/*!******************************************************!*\ - !*** ./node_modules/d3-selection/src/sourceEvent.js ***! - \******************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _selection_on__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./selection/on */ "./node_modules/d3-selection/src/selection/on.js"); - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() { - var current = _selection_on__WEBPACK_IMPORTED_MODULE_0__.event, source; - while (source = current.sourceEvent) current = source; - return current; -} - - -/***/ }), - -/***/ "./node_modules/d3-selection/src/touch.js": -/*!************************************************!*\ - !*** ./node_modules/d3-selection/src/touch.js ***! - \************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _sourceEvent__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sourceEvent */ "./node_modules/d3-selection/src/sourceEvent.js"); -/* harmony import */ var _point__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./point */ "./node_modules/d3-selection/src/point.js"); - - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(node, touches, identifier) { - if (arguments.length < 3) identifier = touches, touches = (0,_sourceEvent__WEBPACK_IMPORTED_MODULE_0__["default"])().changedTouches; - - for (var i = 0, n = touches ? touches.length : 0, touch; i < n; ++i) { - if ((touch = touches[i]).identifier === identifier) { - return (0,_point__WEBPACK_IMPORTED_MODULE_1__["default"])(node, touch); - } - } - - return null; -} - - -/***/ }), - -/***/ "./node_modules/d3-selection/src/touches.js": -/*!**************************************************!*\ - !*** ./node_modules/d3-selection/src/touches.js ***! - \**************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _sourceEvent__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sourceEvent */ "./node_modules/d3-selection/src/sourceEvent.js"); -/* harmony import */ var _point__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./point */ "./node_modules/d3-selection/src/point.js"); - - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(node, touches) { - if (touches == null) touches = (0,_sourceEvent__WEBPACK_IMPORTED_MODULE_0__["default"])().touches; - - for (var i = 0, n = touches ? touches.length : 0, points = new Array(n); i < n; ++i) { - points[i] = (0,_point__WEBPACK_IMPORTED_MODULE_1__["default"])(node, touches[i]); - } - - return points; -} - - -/***/ }), - -/***/ "./node_modules/d3-selection/src/window.js": -/*!*************************************************!*\ - !*** ./node_modules/d3-selection/src/window.js ***! - \*************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(node) { - return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node - || (node.document && node) // node is a Window - || node.defaultView; // node is a Document -} - - -/***/ }), - -/***/ "./node_modules/d3-shape/src/arc.js": -/*!******************************************!*\ - !*** ./node_modules/d3-shape/src/arc.js ***! - \******************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var d3_path__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-path */ "./node_modules/d3-path/src/path.js"); -/* harmony import */ var _constant_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./constant.js */ "./node_modules/d3-shape/src/constant.js"); -/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./math.js */ "./node_modules/d3-shape/src/math.js"); - - - - -function arcInnerRadius(d) { - return d.innerRadius; -} - -function arcOuterRadius(d) { - return d.outerRadius; -} - -function arcStartAngle(d) { - return d.startAngle; -} - -function arcEndAngle(d) { - return d.endAngle; -} - -function arcPadAngle(d) { - return d && d.padAngle; // Note: optional! -} - -function intersect(x0, y0, x1, y1, x2, y2, x3, y3) { - var x10 = x1 - x0, y10 = y1 - y0, - x32 = x3 - x2, y32 = y3 - y2, - t = y32 * x10 - x32 * y10; - if (t * t < _math_js__WEBPACK_IMPORTED_MODULE_0__.epsilon) return; - t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t; - return [x0 + t * x10, y0 + t * y10]; -} - -// Compute perpendicular offset line of length rc. -// http://mathworld.wolfram.com/Circle-LineIntersection.html -function cornerTangents(x0, y0, x1, y1, r1, rc, cw) { - var x01 = x0 - x1, - y01 = y0 - y1, - lo = (cw ? rc : -rc) / (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sqrt)(x01 * x01 + y01 * y01), - ox = lo * y01, - oy = -lo * x01, - x11 = x0 + ox, - y11 = y0 + oy, - x10 = x1 + ox, - y10 = y1 + oy, - x00 = (x11 + x10) / 2, - y00 = (y11 + y10) / 2, - dx = x10 - x11, - dy = y10 - y11, - d2 = dx * dx + dy * dy, - r = r1 - rc, - D = x11 * y10 - x10 * y11, - 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)), - cx0 = (D * dy - dx * d) / d2, - cy0 = (-D * dx - dy * d) / d2, - cx1 = (D * dy + dx * d) / d2, - cy1 = (-D * dx + dy * d) / d2, - dx0 = cx0 - x00, - dy0 = cy0 - y00, - dx1 = cx1 - x00, - dy1 = cy1 - y00; - - // Pick the closer of the two intersection points. - // TODO Is there a faster way to determine which intersection to use? - if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1; - - return { - cx: cx0, - cy: cy0, - x01: -ox, - y01: -oy, - x11: cx0 * (r1 / r - 1), - y11: cy0 * (r1 / r - 1) - }; -} - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() { - var innerRadius = arcInnerRadius, - outerRadius = arcOuterRadius, - cornerRadius = (0,_constant_js__WEBPACK_IMPORTED_MODULE_1__["default"])(0), - padRadius = null, - startAngle = arcStartAngle, - endAngle = arcEndAngle, - padAngle = arcPadAngle, - context = null; - - function arc() { - var buffer, - r, - r0 = +innerRadius.apply(this, arguments), - r1 = +outerRadius.apply(this, arguments), - a0 = startAngle.apply(this, arguments) - _math_js__WEBPACK_IMPORTED_MODULE_0__.halfPi, - a1 = endAngle.apply(this, arguments) - _math_js__WEBPACK_IMPORTED_MODULE_0__.halfPi, - da = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.abs)(a1 - a0), - cw = a1 > a0; - - if (!context) context = buffer = (0,d3_path__WEBPACK_IMPORTED_MODULE_2__["default"])(); - - // Ensure that the outer radius is always larger than the inner radius. - if (r1 < r0) r = r1, r1 = r0, r0 = r; - - // Is it a point? - if (!(r1 > _math_js__WEBPACK_IMPORTED_MODULE_0__.epsilon)) context.moveTo(0, 0); - - // Or is it a circle or annulus? - else if (da > _math_js__WEBPACK_IMPORTED_MODULE_0__.tau - _math_js__WEBPACK_IMPORTED_MODULE_0__.epsilon) { - context.moveTo(r1 * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(a0), r1 * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(a0)); - context.arc(0, 0, r1, a0, a1, !cw); - if (r0 > _math_js__WEBPACK_IMPORTED_MODULE_0__.epsilon) { - context.moveTo(r0 * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(a1), r0 * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(a1)); - context.arc(0, 0, r0, a1, a0, cw); - } - } - - // Or is it a circular or annular sector? - else { - var a01 = a0, - a11 = a1, - a00 = a0, - a10 = a1, - da0 = da, - da1 = da, - ap = padAngle.apply(this, arguments) / 2, - 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)), - rc = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.min)((0,_math_js__WEBPACK_IMPORTED_MODULE_0__.abs)(r1 - r0) / 2, +cornerRadius.apply(this, arguments)), - rc0 = rc, - rc1 = rc, - t0, - t1; - - // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0. - if (rp > _math_js__WEBPACK_IMPORTED_MODULE_0__.epsilon) { - var p0 = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.asin)(rp / r0 * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(ap)), - p1 = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.asin)(rp / r1 * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(ap)); - if ((da0 -= p0 * 2) > _math_js__WEBPACK_IMPORTED_MODULE_0__.epsilon) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0; - else da0 = 0, a00 = a10 = (a0 + a1) / 2; - if ((da1 -= p1 * 2) > _math_js__WEBPACK_IMPORTED_MODULE_0__.epsilon) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1; - else da1 = 0, a01 = a11 = (a0 + a1) / 2; - } - - var x01 = r1 * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(a01), - y01 = r1 * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(a01), - x10 = r0 * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(a10), - y10 = r0 * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(a10); - - // Apply rounded corners? - if (rc > _math_js__WEBPACK_IMPORTED_MODULE_0__.epsilon) { - var x11 = r1 * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(a11), - y11 = r1 * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(a11), - x00 = r0 * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(a00), - y00 = r0 * (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(a00), - oc; - - // Restrict the corner radius according to the sector angle. - if (da < _math_js__WEBPACK_IMPORTED_MODULE_0__.pi && (oc = intersect(x01, y01, x00, y00, x11, y11, x10, y10))) { - var ax = x01 - oc[0], - ay = y01 - oc[1], - bx = x11 - oc[0], - by = y11 - oc[1], - 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), - lc = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sqrt)(oc[0] * oc[0] + oc[1] * oc[1]); - rc0 = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.min)(rc, (r0 - lc) / (kc - 1)); - rc1 = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.min)(rc, (r1 - lc) / (kc + 1)); - } - } - - // Is the sector collapsed to a line? - if (!(da1 > _math_js__WEBPACK_IMPORTED_MODULE_0__.epsilon)) context.moveTo(x01, y01); - - // Does the sector’s outer ring have rounded corners? - else if (rc1 > _math_js__WEBPACK_IMPORTED_MODULE_0__.epsilon) { - t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw); - t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw); - - context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01); - - // Have the corners merged? - 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); - - // Otherwise, draw the two corners and the ring. - else { - 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); - 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); - 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); - } - } - - // Or is the outer ring just a circular arc? - else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw); - - // Is there no inner ring, and it’s a circular sector? - // Or perhaps it’s an annular sector collapsed due to padding? - if (!(r0 > _math_js__WEBPACK_IMPORTED_MODULE_0__.epsilon) || !(da0 > _math_js__WEBPACK_IMPORTED_MODULE_0__.epsilon)) context.lineTo(x10, y10); - - // Does the sector’s inner ring (or point) have rounded corners? - else if (rc0 > _math_js__WEBPACK_IMPORTED_MODULE_0__.epsilon) { - t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw); - t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw); - - context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01); - - // Have the corners merged? - 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); - - // Otherwise, draw the two corners and the ring. - else { - 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); - 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); - 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); - } - } - - // Or is the inner ring just a circular arc? - else context.arc(0, 0, r0, a10, a00, cw); - } - - context.closePath(); - - if (buffer) return context = null, buffer + "" || null; - } - - arc.centroid = function() { - var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2, - a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - _math_js__WEBPACK_IMPORTED_MODULE_0__.pi / 2; - return [(0,_math_js__WEBPACK_IMPORTED_MODULE_0__.cos)(a) * r, (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.sin)(a) * r]; - }; - - arc.innerRadius = function(_) { - return arguments.length ? (innerRadius = typeof _ === "function" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_1__["default"])(+_), arc) : innerRadius; - }; - - arc.outerRadius = function(_) { - return arguments.length ? (outerRadius = typeof _ === "function" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_1__["default"])(+_), arc) : outerRadius; - }; - - arc.cornerRadius = function(_) { - return arguments.length ? (cornerRadius = typeof _ === "function" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_1__["default"])(+_), arc) : cornerRadius; - }; - - arc.padRadius = function(_) { - return arguments.length ? (padRadius = _ == null ? null : typeof _ === "function" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_1__["default"])(+_), arc) : padRadius; - }; - - arc.startAngle = function(_) { - return arguments.length ? (startAngle = typeof _ === "function" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_1__["default"])(+_), arc) : startAngle; - }; - - arc.endAngle = function(_) { - return arguments.length ? (endAngle = typeof _ === "function" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_1__["default"])(+_), arc) : endAngle; - }; - - arc.padAngle = function(_) { - return arguments.length ? (padAngle = typeof _ === "function" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_1__["default"])(+_), arc) : padAngle; - }; - - arc.context = function(_) { - return arguments.length ? ((context = _ == null ? null : _), arc) : context; - }; - - return arc; -} - - -/***/ }), - -/***/ "./node_modules/d3-shape/src/area.js": -/*!*******************************************!*\ - !*** ./node_modules/d3-shape/src/area.js ***! - \*******************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var d3_path__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! d3-path */ "./node_modules/d3-path/src/path.js"); -/* harmony import */ var _constant_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./constant.js */ "./node_modules/d3-shape/src/constant.js"); -/* harmony import */ var _curve_linear_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./curve/linear.js */ "./node_modules/d3-shape/src/curve/linear.js"); -/* harmony import */ var _line_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./line.js */ "./node_modules/d3-shape/src/line.js"); -/* harmony import */ var _point_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./point.js */ "./node_modules/d3-shape/src/point.js"); - - - - - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() { - var x0 = _point_js__WEBPACK_IMPORTED_MODULE_0__.x, - x1 = null, - y0 = (0,_constant_js__WEBPACK_IMPORTED_MODULE_1__["default"])(0), - y1 = _point_js__WEBPACK_IMPORTED_MODULE_0__.y, - defined = (0,_constant_js__WEBPACK_IMPORTED_MODULE_1__["default"])(true), - context = null, - curve = _curve_linear_js__WEBPACK_IMPORTED_MODULE_2__["default"], - output = null; - - function area(data) { - var i, - j, - k, - n = data.length, - d, - defined0 = false, - buffer, - x0z = new Array(n), - y0z = new Array(n); - - if (context == null) output = curve(buffer = (0,d3_path__WEBPACK_IMPORTED_MODULE_3__["default"])()); - - for (i = 0; i <= n; ++i) { - if (!(i < n && defined(d = data[i], i, data)) === defined0) { - if (defined0 = !defined0) { - j = i; - output.areaStart(); - output.lineStart(); - } else { - output.lineEnd(); - output.lineStart(); - for (k = i - 1; k >= j; --k) { - output.point(x0z[k], y0z[k]); - } - output.lineEnd(); - output.areaEnd(); - } - } - if (defined0) { - x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data); - output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]); - } - } - - if (buffer) return output = null, buffer + "" || null; - } - - function arealine() { - return (0,_line_js__WEBPACK_IMPORTED_MODULE_4__["default"])().defined(defined).curve(curve).context(context); - } - - area.x = function(_) { - return arguments.length ? (x0 = typeof _ === "function" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_1__["default"])(+_), x1 = null, area) : x0; - }; - - area.x0 = function(_) { - return arguments.length ? (x0 = typeof _ === "function" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_1__["default"])(+_), area) : x0; - }; - - area.x1 = function(_) { - return arguments.length ? (x1 = _ == null ? null : typeof _ === "function" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_1__["default"])(+_), area) : x1; - }; - - area.y = function(_) { - return arguments.length ? (y0 = typeof _ === "function" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_1__["default"])(+_), y1 = null, area) : y0; - }; - - area.y0 = function(_) { - return arguments.length ? (y0 = typeof _ === "function" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_1__["default"])(+_), area) : y0; - }; - - area.y1 = function(_) { - return arguments.length ? (y1 = _ == null ? null : typeof _ === "function" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_1__["default"])(+_), area) : y1; - }; - - area.lineX0 = - area.lineY0 = function() { - return arealine().x(x0).y(y0); - }; - - area.lineY1 = function() { - return arealine().x(x0).y(y1); - }; - - area.lineX1 = function() { - return arealine().x(x1).y(y0); - }; - - area.defined = function(_) { - return arguments.length ? (defined = typeof _ === "function" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_1__["default"])(!!_), area) : defined; - }; - - area.curve = function(_) { - return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve; - }; - - area.context = function(_) { - return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context; - }; - - return area; -} - - -/***/ }), - -/***/ "./node_modules/d3-shape/src/areaRadial.js": -/*!*************************************************!*\ - !*** ./node_modules/d3-shape/src/areaRadial.js ***! - \*************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _curve_radial_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./curve/radial.js */ "./node_modules/d3-shape/src/curve/radial.js"); -/* harmony import */ var _area_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./area.js */ "./node_modules/d3-shape/src/area.js"); -/* harmony import */ var _lineRadial_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./lineRadial.js */ "./node_modules/d3-shape/src/lineRadial.js"); - - - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() { - var a = (0,_area_js__WEBPACK_IMPORTED_MODULE_0__["default"])().curve(_curve_radial_js__WEBPACK_IMPORTED_MODULE_1__.curveRadialLinear), - c = a.curve, - x0 = a.lineX0, - x1 = a.lineX1, - y0 = a.lineY0, - y1 = a.lineY1; - - a.angle = a.x, delete a.x; - a.startAngle = a.x0, delete a.x0; - a.endAngle = a.x1, delete a.x1; - a.radius = a.y, delete a.y; - a.innerRadius = a.y0, delete a.y0; - a.outerRadius = a.y1, delete a.y1; - a.lineStartAngle = function() { return (0,_lineRadial_js__WEBPACK_IMPORTED_MODULE_2__.lineRadial)(x0()); }, delete a.lineX0; - a.lineEndAngle = function() { return (0,_lineRadial_js__WEBPACK_IMPORTED_MODULE_2__.lineRadial)(x1()); }, delete a.lineX1; - a.lineInnerRadius = function() { return (0,_lineRadial_js__WEBPACK_IMPORTED_MODULE_2__.lineRadial)(y0()); }, delete a.lineY0; - a.lineOuterRadius = function() { return (0,_lineRadial_js__WEBPACK_IMPORTED_MODULE_2__.lineRadial)(y1()); }, delete a.lineY1; - - a.curve = function(_) { - return arguments.length ? c((0,_curve_radial_js__WEBPACK_IMPORTED_MODULE_1__["default"])(_)) : c()._curve; - }; - - return a; -} - - -/***/ }), - -/***/ "./node_modules/d3-shape/src/array.js": -/*!********************************************!*\ - !*** ./node_modules/d3-shape/src/array.js ***! - \********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "slice": () => (/* binding */ slice) -/* harmony export */ }); -var slice = Array.prototype.slice; - - -/***/ }), - -/***/ "./node_modules/d3-shape/src/constant.js": -/*!***********************************************!*\ - !*** ./node_modules/d3-shape/src/constant.js ***! - \***********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(x) { - return function constant() { - return x; - }; -} - - -/***/ }), - -/***/ "./node_modules/d3-shape/src/curve/basis.js": -/*!**************************************************!*\ - !*** ./node_modules/d3-shape/src/curve/basis.js ***! - \**************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Basis": () => (/* binding */ Basis), -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "point": () => (/* binding */ point) -/* harmony export */ }); -function point(that, x, y) { - that._context.bezierCurveTo( - (2 * that._x0 + that._x1) / 3, - (2 * that._y0 + that._y1) / 3, - (that._x0 + 2 * that._x1) / 3, - (that._y0 + 2 * that._y1) / 3, - (that._x0 + 4 * that._x1 + x) / 6, - (that._y0 + 4 * that._y1 + y) / 6 - ); -} - -function Basis(context) { - this._context = context; -} - -Basis.prototype = { - areaStart: function() { - this._line = 0; - }, - areaEnd: function() { - this._line = NaN; - }, - lineStart: function() { - this._x0 = this._x1 = - this._y0 = this._y1 = NaN; - this._point = 0; - }, - lineEnd: function() { - switch (this._point) { - case 3: point(this, this._x1, this._y1); // proceed - case 2: this._context.lineTo(this._x1, this._y1); break; - } - if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); - this._line = 1 - this._line; - }, - point: function(x, y) { - x = +x, y = +y; - switch (this._point) { - case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break; - case 1: this._point = 2; break; - case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // proceed - default: point(this, x, y); break; - } - this._x0 = this._x1, this._x1 = x; - this._y0 = this._y1, this._y1 = y; - } -}; - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(context) { - return new Basis(context); -} - - -/***/ }), - -/***/ "./node_modules/d3-shape/src/curve/basisClosed.js": -/*!********************************************************!*\ - !*** ./node_modules/d3-shape/src/curve/basisClosed.js ***! - \********************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _noop_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../noop.js */ "./node_modules/d3-shape/src/noop.js"); -/* harmony import */ var _basis_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./basis.js */ "./node_modules/d3-shape/src/curve/basis.js"); - - - -function BasisClosed(context) { - this._context = context; -} - -BasisClosed.prototype = { - areaStart: _noop_js__WEBPACK_IMPORTED_MODULE_0__["default"], - areaEnd: _noop_js__WEBPACK_IMPORTED_MODULE_0__["default"], - lineStart: function() { - this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = - this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN; - this._point = 0; - }, - lineEnd: function() { - switch (this._point) { - case 1: { - this._context.moveTo(this._x2, this._y2); - this._context.closePath(); - break; - } - case 2: { - this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3); - this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3); - this._context.closePath(); - break; - } - case 3: { - this.point(this._x2, this._y2); - this.point(this._x3, this._y3); - this.point(this._x4, this._y4); - break; - } - } - }, - point: function(x, y) { - x = +x, y = +y; - switch (this._point) { - case 0: this._point = 1; this._x2 = x, this._y2 = y; break; - case 1: this._point = 2; this._x3 = x, this._y3 = y; break; - 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; - default: (0,_basis_js__WEBPACK_IMPORTED_MODULE_1__.point)(this, x, y); break; - } - this._x0 = this._x1, this._x1 = x; - this._y0 = this._y1, this._y1 = y; - } -}; - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(context) { - return new BasisClosed(context); -} - - -/***/ }), - -/***/ "./node_modules/d3-shape/src/curve/basisOpen.js": -/*!******************************************************!*\ - !*** ./node_modules/d3-shape/src/curve/basisOpen.js ***! - \******************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _basis_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./basis.js */ "./node_modules/d3-shape/src/curve/basis.js"); - - -function BasisOpen(context) { - this._context = context; -} - -BasisOpen.prototype = { - areaStart: function() { - this._line = 0; - }, - areaEnd: function() { - this._line = NaN; - }, - lineStart: function() { - this._x0 = this._x1 = - this._y0 = this._y1 = NaN; - this._point = 0; - }, - lineEnd: function() { - if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath(); - this._line = 1 - this._line; - }, - point: function(x, y) { - x = +x, y = +y; - switch (this._point) { - case 0: this._point = 1; break; - case 1: this._point = 2; break; - 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; - case 3: this._point = 4; // proceed - default: (0,_basis_js__WEBPACK_IMPORTED_MODULE_0__.point)(this, x, y); break; - } - this._x0 = this._x1, this._x1 = x; - this._y0 = this._y1, this._y1 = y; - } -}; - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(context) { - return new BasisOpen(context); -} - - -/***/ }), - -/***/ "./node_modules/d3-shape/src/curve/bundle.js": -/*!***************************************************!*\ - !*** ./node_modules/d3-shape/src/curve/bundle.js ***! - \***************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _basis_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./basis.js */ "./node_modules/d3-shape/src/curve/basis.js"); - - -function Bundle(context, beta) { - this._basis = new _basis_js__WEBPACK_IMPORTED_MODULE_0__.Basis(context); - this._beta = beta; -} - -Bundle.prototype = { - lineStart: function() { - this._x = []; - this._y = []; - this._basis.lineStart(); - }, - lineEnd: function() { - var x = this._x, - y = this._y, - j = x.length - 1; - - if (j > 0) { - var x0 = x[0], - y0 = y[0], - dx = x[j] - x0, - dy = y[j] - y0, - i = -1, - t; - - while (++i <= j) { - t = i / j; - this._basis.point( - this._beta * x[i] + (1 - this._beta) * (x0 + t * dx), - this._beta * y[i] + (1 - this._beta) * (y0 + t * dy) - ); - } - } - - this._x = this._y = null; - this._basis.lineEnd(); - }, - point: function(x, y) { - this._x.push(+x); - this._y.push(+y); - } -}; - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((function custom(beta) { - - function bundle(context) { - return beta === 1 ? new _basis_js__WEBPACK_IMPORTED_MODULE_0__.Basis(context) : new Bundle(context, beta); - } - - bundle.beta = function(beta) { - return custom(+beta); - }; - - return bundle; -})(0.85)); - - -/***/ }), - -/***/ "./node_modules/d3-shape/src/curve/cardinal.js": -/*!*****************************************************!*\ - !*** ./node_modules/d3-shape/src/curve/cardinal.js ***! - \*****************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Cardinal": () => (/* binding */ Cardinal), -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "point": () => (/* binding */ point) -/* harmony export */ }); -function point(that, x, y) { - that._context.bezierCurveTo( - that._x1 + that._k * (that._x2 - that._x0), - that._y1 + that._k * (that._y2 - that._y0), - that._x2 + that._k * (that._x1 - x), - that._y2 + that._k * (that._y1 - y), - that._x2, - that._y2 - ); -} - -function Cardinal(context, tension) { - this._context = context; - this._k = (1 - tension) / 6; -} - -Cardinal.prototype = { - areaStart: function() { - this._line = 0; - }, - areaEnd: function() { - this._line = NaN; - }, - lineStart: function() { - this._x0 = this._x1 = this._x2 = - this._y0 = this._y1 = this._y2 = NaN; - this._point = 0; - }, - lineEnd: function() { - switch (this._point) { - case 2: this._context.lineTo(this._x2, this._y2); break; - case 3: point(this, this._x1, this._y1); break; - } - if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); - this._line = 1 - this._line; - }, - point: function(x, y) { - x = +x, y = +y; - switch (this._point) { - case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break; - case 1: this._point = 2; this._x1 = x, this._y1 = y; break; - case 2: this._point = 3; // proceed - default: point(this, x, y); break; - } - this._x0 = this._x1, this._x1 = this._x2, this._x2 = x; - this._y0 = this._y1, this._y1 = this._y2, this._y2 = y; - } -}; - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((function custom(tension) { - - function cardinal(context) { - return new Cardinal(context, tension); - } - - cardinal.tension = function(tension) { - return custom(+tension); - }; - - return cardinal; -})(0)); - - -/***/ }), - -/***/ "./node_modules/d3-shape/src/curve/cardinalClosed.js": -/*!***********************************************************!*\ - !*** ./node_modules/d3-shape/src/curve/cardinalClosed.js ***! - \***********************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "CardinalClosed": () => (/* binding */ CardinalClosed), -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _noop_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../noop.js */ "./node_modules/d3-shape/src/noop.js"); -/* harmony import */ var _cardinal_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./cardinal.js */ "./node_modules/d3-shape/src/curve/cardinal.js"); - - - -function CardinalClosed(context, tension) { - this._context = context; - this._k = (1 - tension) / 6; -} - -CardinalClosed.prototype = { - areaStart: _noop_js__WEBPACK_IMPORTED_MODULE_0__["default"], - areaEnd: _noop_js__WEBPACK_IMPORTED_MODULE_0__["default"], - lineStart: function() { - this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 = - this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN; - this._point = 0; - }, - lineEnd: function() { - switch (this._point) { - case 1: { - this._context.moveTo(this._x3, this._y3); - this._context.closePath(); - break; - } - case 2: { - this._context.lineTo(this._x3, this._y3); - this._context.closePath(); - break; - } - case 3: { - this.point(this._x3, this._y3); - this.point(this._x4, this._y4); - this.point(this._x5, this._y5); - break; - } - } - }, - point: function(x, y) { - x = +x, y = +y; - switch (this._point) { - case 0: this._point = 1; this._x3 = x, this._y3 = y; break; - case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break; - case 2: this._point = 3; this._x5 = x, this._y5 = y; break; - default: (0,_cardinal_js__WEBPACK_IMPORTED_MODULE_1__.point)(this, x, y); break; - } - this._x0 = this._x1, this._x1 = this._x2, this._x2 = x; - this._y0 = this._y1, this._y1 = this._y2, this._y2 = y; - } -}; - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((function custom(tension) { - - function cardinal(context) { - return new CardinalClosed(context, tension); - } - - cardinal.tension = function(tension) { - return custom(+tension); - }; - - return cardinal; -})(0)); - - -/***/ }), - -/***/ "./node_modules/d3-shape/src/curve/cardinalOpen.js": -/*!*********************************************************!*\ - !*** ./node_modules/d3-shape/src/curve/cardinalOpen.js ***! - \*********************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "CardinalOpen": () => (/* binding */ CardinalOpen), -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _cardinal_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./cardinal.js */ "./node_modules/d3-shape/src/curve/cardinal.js"); - - -function CardinalOpen(context, tension) { - this._context = context; - this._k = (1 - tension) / 6; -} - -CardinalOpen.prototype = { - areaStart: function() { - this._line = 0; - }, - areaEnd: function() { - this._line = NaN; - }, - lineStart: function() { - this._x0 = this._x1 = this._x2 = - this._y0 = this._y1 = this._y2 = NaN; - this._point = 0; - }, - lineEnd: function() { - if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath(); - this._line = 1 - this._line; - }, - point: function(x, y) { - x = +x, y = +y; - switch (this._point) { - case 0: this._point = 1; break; - case 1: this._point = 2; break; - case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break; - case 3: this._point = 4; // proceed - default: (0,_cardinal_js__WEBPACK_IMPORTED_MODULE_0__.point)(this, x, y); break; - } - this._x0 = this._x1, this._x1 = this._x2, this._x2 = x; - this._y0 = this._y1, this._y1 = this._y2, this._y2 = y; - } -}; - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((function custom(tension) { - - function cardinal(context) { - return new CardinalOpen(context, tension); - } - - cardinal.tension = function(tension) { - return custom(+tension); - }; - - return cardinal; -})(0)); - - -/***/ }), - -/***/ "./node_modules/d3-shape/src/curve/catmullRom.js": -/*!*******************************************************!*\ - !*** ./node_modules/d3-shape/src/curve/catmullRom.js ***! - \*******************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "point": () => (/* binding */ point) -/* harmony export */ }); -/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math.js */ "./node_modules/d3-shape/src/math.js"); -/* harmony import */ var _cardinal_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./cardinal.js */ "./node_modules/d3-shape/src/curve/cardinal.js"); - - - -function point(that, x, y) { - var x1 = that._x1, - y1 = that._y1, - x2 = that._x2, - y2 = that._y2; - - if (that._l01_a > _math_js__WEBPACK_IMPORTED_MODULE_0__.epsilon) { - var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a, - n = 3 * that._l01_a * (that._l01_a + that._l12_a); - x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n; - y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n; - } - - if (that._l23_a > _math_js__WEBPACK_IMPORTED_MODULE_0__.epsilon) { - var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a, - m = 3 * that._l23_a * (that._l23_a + that._l12_a); - x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m; - y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m; - } - - that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2); -} - -function CatmullRom(context, alpha) { - this._context = context; - this._alpha = alpha; -} - -CatmullRom.prototype = { - areaStart: function() { - this._line = 0; - }, - areaEnd: function() { - this._line = NaN; - }, - lineStart: function() { - this._x0 = this._x1 = this._x2 = - this._y0 = this._y1 = this._y2 = NaN; - this._l01_a = this._l12_a = this._l23_a = - this._l01_2a = this._l12_2a = this._l23_2a = - this._point = 0; - }, - lineEnd: function() { - switch (this._point) { - case 2: this._context.lineTo(this._x2, this._y2); break; - case 3: this.point(this._x2, this._y2); break; - } - if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); - this._line = 1 - this._line; - }, - point: function(x, y) { - x = +x, y = +y; - - if (this._point) { - var x23 = this._x2 - x, - y23 = this._y2 - y; - this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha)); - } - - switch (this._point) { - case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break; - case 1: this._point = 2; break; - case 2: this._point = 3; // proceed - default: point(this, x, y); break; - } - - this._l01_a = this._l12_a, this._l12_a = this._l23_a; - this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a; - this._x0 = this._x1, this._x1 = this._x2, this._x2 = x; - this._y0 = this._y1, this._y1 = this._y2, this._y2 = y; - } -}; - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((function custom(alpha) { - - function catmullRom(context) { - return alpha ? new CatmullRom(context, alpha) : new _cardinal_js__WEBPACK_IMPORTED_MODULE_1__.Cardinal(context, 0); - } - - catmullRom.alpha = function(alpha) { - return custom(+alpha); - }; - - return catmullRom; -})(0.5)); - - -/***/ }), - -/***/ "./node_modules/d3-shape/src/curve/catmullRomClosed.js": -/*!*************************************************************!*\ - !*** ./node_modules/d3-shape/src/curve/catmullRomClosed.js ***! - \*************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _cardinalClosed_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./cardinalClosed.js */ "./node_modules/d3-shape/src/curve/cardinalClosed.js"); -/* harmony import */ var _noop_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../noop.js */ "./node_modules/d3-shape/src/noop.js"); -/* harmony import */ var _catmullRom_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./catmullRom.js */ "./node_modules/d3-shape/src/curve/catmullRom.js"); - - - - -function CatmullRomClosed(context, alpha) { - this._context = context; - this._alpha = alpha; -} - -CatmullRomClosed.prototype = { - areaStart: _noop_js__WEBPACK_IMPORTED_MODULE_0__["default"], - areaEnd: _noop_js__WEBPACK_IMPORTED_MODULE_0__["default"], - lineStart: function() { - this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 = - this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN; - this._l01_a = this._l12_a = this._l23_a = - this._l01_2a = this._l12_2a = this._l23_2a = - this._point = 0; - }, - lineEnd: function() { - switch (this._point) { - case 1: { - this._context.moveTo(this._x3, this._y3); - this._context.closePath(); - break; - } - case 2: { - this._context.lineTo(this._x3, this._y3); - this._context.closePath(); - break; - } - case 3: { - this.point(this._x3, this._y3); - this.point(this._x4, this._y4); - this.point(this._x5, this._y5); - break; - } - } - }, - point: function(x, y) { - x = +x, y = +y; - - if (this._point) { - var x23 = this._x2 - x, - y23 = this._y2 - y; - this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha)); - } - - switch (this._point) { - case 0: this._point = 1; this._x3 = x, this._y3 = y; break; - case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break; - case 2: this._point = 3; this._x5 = x, this._y5 = y; break; - default: (0,_catmullRom_js__WEBPACK_IMPORTED_MODULE_1__.point)(this, x, y); break; - } - - this._l01_a = this._l12_a, this._l12_a = this._l23_a; - this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a; - this._x0 = this._x1, this._x1 = this._x2, this._x2 = x; - this._y0 = this._y1, this._y1 = this._y2, this._y2 = y; - } -}; - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((function custom(alpha) { - - function catmullRom(context) { - return alpha ? new CatmullRomClosed(context, alpha) : new _cardinalClosed_js__WEBPACK_IMPORTED_MODULE_2__.CardinalClosed(context, 0); - } - - catmullRom.alpha = function(alpha) { - return custom(+alpha); - }; - - return catmullRom; -})(0.5)); - - -/***/ }), - -/***/ "./node_modules/d3-shape/src/curve/catmullRomOpen.js": -/*!***********************************************************!*\ - !*** ./node_modules/d3-shape/src/curve/catmullRomOpen.js ***! - \***********************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _cardinalOpen_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./cardinalOpen.js */ "./node_modules/d3-shape/src/curve/cardinalOpen.js"); -/* harmony import */ var _catmullRom_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./catmullRom.js */ "./node_modules/d3-shape/src/curve/catmullRom.js"); - - - -function CatmullRomOpen(context, alpha) { - this._context = context; - this._alpha = alpha; -} - -CatmullRomOpen.prototype = { - areaStart: function() { - this._line = 0; - }, - areaEnd: function() { - this._line = NaN; - }, - lineStart: function() { - this._x0 = this._x1 = this._x2 = - this._y0 = this._y1 = this._y2 = NaN; - this._l01_a = this._l12_a = this._l23_a = - this._l01_2a = this._l12_2a = this._l23_2a = - this._point = 0; - }, - lineEnd: function() { - if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath(); - this._line = 1 - this._line; - }, - point: function(x, y) { - x = +x, y = +y; - - if (this._point) { - var x23 = this._x2 - x, - y23 = this._y2 - y; - this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha)); - } - - switch (this._point) { - case 0: this._point = 1; break; - case 1: this._point = 2; break; - case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break; - case 3: this._point = 4; // proceed - default: (0,_catmullRom_js__WEBPACK_IMPORTED_MODULE_0__.point)(this, x, y); break; - } - - this._l01_a = this._l12_a, this._l12_a = this._l23_a; - this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a; - this._x0 = this._x1, this._x1 = this._x2, this._x2 = x; - this._y0 = this._y1, this._y1 = this._y2, this._y2 = y; - } -}; - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((function custom(alpha) { - - function catmullRom(context) { - return alpha ? new CatmullRomOpen(context, alpha) : new _cardinalOpen_js__WEBPACK_IMPORTED_MODULE_1__.CardinalOpen(context, 0); - } - - catmullRom.alpha = function(alpha) { - return custom(+alpha); - }; - - return catmullRom; -})(0.5)); - - -/***/ }), - -/***/ "./node_modules/d3-shape/src/curve/linear.js": -/*!***************************************************!*\ - !*** ./node_modules/d3-shape/src/curve/linear.js ***! - \***************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -function Linear(context) { - this._context = context; -} - -Linear.prototype = { - areaStart: function() { - this._line = 0; - }, - areaEnd: function() { - this._line = NaN; - }, - lineStart: function() { - this._point = 0; - }, - lineEnd: function() { - if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); - this._line = 1 - this._line; - }, - point: function(x, y) { - x = +x, y = +y; - switch (this._point) { - case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break; - case 1: this._point = 2; // proceed - default: this._context.lineTo(x, y); break; - } - } -}; - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(context) { - return new Linear(context); -} - - -/***/ }), - -/***/ "./node_modules/d3-shape/src/curve/linearClosed.js": -/*!*********************************************************!*\ - !*** ./node_modules/d3-shape/src/curve/linearClosed.js ***! - \*********************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _noop_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../noop.js */ "./node_modules/d3-shape/src/noop.js"); - - -function LinearClosed(context) { - this._context = context; -} - -LinearClosed.prototype = { - areaStart: _noop_js__WEBPACK_IMPORTED_MODULE_0__["default"], - areaEnd: _noop_js__WEBPACK_IMPORTED_MODULE_0__["default"], - lineStart: function() { - this._point = 0; - }, - lineEnd: function() { - if (this._point) this._context.closePath(); - }, - point: function(x, y) { - x = +x, y = +y; - if (this._point) this._context.lineTo(x, y); - else this._point = 1, this._context.moveTo(x, y); - } -}; - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(context) { - return new LinearClosed(context); -} - - -/***/ }), - -/***/ "./node_modules/d3-shape/src/curve/monotone.js": -/*!*****************************************************!*\ - !*** ./node_modules/d3-shape/src/curve/monotone.js ***! - \*****************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "monotoneX": () => (/* binding */ monotoneX), -/* harmony export */ "monotoneY": () => (/* binding */ monotoneY) -/* harmony export */ }); -function sign(x) { - return x < 0 ? -1 : 1; -} - -// Calculate the slopes of the tangents (Hermite-type interpolation) based on -// the following paper: Steffen, M. 1990. A Simple Method for Monotonic -// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO. -// NOV(II), P. 443, 1990. -function slope3(that, x2, y2) { - var h0 = that._x1 - that._x0, - h1 = x2 - that._x1, - s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0), - s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0), - p = (s0 * h1 + s1 * h0) / (h0 + h1); - return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0; -} - -// Calculate a one-sided slope. -function slope2(that, t) { - var h = that._x1 - that._x0; - return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t; -} - -// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations -// "you can express cubic Hermite interpolation in terms of cubic Bézier curves -// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1". -function point(that, t0, t1) { - var x0 = that._x0, - y0 = that._y0, - x1 = that._x1, - y1 = that._y1, - dx = (x1 - x0) / 3; - that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1); -} - -function MonotoneX(context) { - this._context = context; -} - -MonotoneX.prototype = { - areaStart: function() { - this._line = 0; - }, - areaEnd: function() { - this._line = NaN; - }, - lineStart: function() { - this._x0 = this._x1 = - this._y0 = this._y1 = - this._t0 = NaN; - this._point = 0; - }, - lineEnd: function() { - switch (this._point) { - case 2: this._context.lineTo(this._x1, this._y1); break; - case 3: point(this, this._t0, slope2(this, this._t0)); break; - } - if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); - this._line = 1 - this._line; - }, - point: function(x, y) { - var t1 = NaN; - - x = +x, y = +y; - if (x === this._x1 && y === this._y1) return; // Ignore coincident points. - switch (this._point) { - case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break; - case 1: this._point = 2; break; - case 2: this._point = 3; point(this, slope2(this, t1 = slope3(this, x, y)), t1); break; - default: point(this, this._t0, t1 = slope3(this, x, y)); break; - } - - this._x0 = this._x1, this._x1 = x; - this._y0 = this._y1, this._y1 = y; - this._t0 = t1; - } -} - -function MonotoneY(context) { - this._context = new ReflectContext(context); -} - -(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) { - MonotoneX.prototype.point.call(this, y, x); -}; - -function ReflectContext(context) { - this._context = context; -} - -ReflectContext.prototype = { - moveTo: function(x, y) { this._context.moveTo(y, x); }, - closePath: function() { this._context.closePath(); }, - lineTo: function(x, y) { this._context.lineTo(y, x); }, - bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); } -}; - -function monotoneX(context) { - return new MonotoneX(context); -} - -function monotoneY(context) { - return new MonotoneY(context); -} - - -/***/ }), - -/***/ "./node_modules/d3-shape/src/curve/natural.js": -/*!****************************************************!*\ - !*** ./node_modules/d3-shape/src/curve/natural.js ***! - \****************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -function Natural(context) { - this._context = context; -} - -Natural.prototype = { - areaStart: function() { - this._line = 0; - }, - areaEnd: function() { - this._line = NaN; - }, - lineStart: function() { - this._x = []; - this._y = []; - }, - lineEnd: function() { - var x = this._x, - y = this._y, - n = x.length; - - if (n) { - this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]); - if (n === 2) { - this._context.lineTo(x[1], y[1]); - } else { - var px = controlPoints(x), - py = controlPoints(y); - for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) { - this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]); - } - } - } - - if (this._line || (this._line !== 0 && n === 1)) this._context.closePath(); - this._line = 1 - this._line; - this._x = this._y = null; - }, - point: function(x, y) { - this._x.push(+x); - this._y.push(+y); - } -}; - -// See https://www.particleincell.com/2012/bezier-splines/ for derivation. -function controlPoints(x) { - var i, - n = x.length - 1, - m, - a = new Array(n), - b = new Array(n), - r = new Array(n); - a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1]; - for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1]; - a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n]; - for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1]; - a[n - 1] = r[n - 1] / b[n - 1]; - for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i]; - b[n - 1] = (x[n] + a[n - 1]) / 2; - for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1]; - return [a, b]; -} - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(context) { - return new Natural(context); -} - - -/***/ }), - -/***/ "./node_modules/d3-shape/src/curve/radial.js": -/*!***************************************************!*\ - !*** ./node_modules/d3-shape/src/curve/radial.js ***! - \***************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "curveRadialLinear": () => (/* binding */ curveRadialLinear), -/* harmony export */ "default": () => (/* binding */ curveRadial) -/* harmony export */ }); -/* harmony import */ var _linear_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./linear.js */ "./node_modules/d3-shape/src/curve/linear.js"); - - -var curveRadialLinear = curveRadial(_linear_js__WEBPACK_IMPORTED_MODULE_0__["default"]); - -function Radial(curve) { - this._curve = curve; -} - -Radial.prototype = { - areaStart: function() { - this._curve.areaStart(); - }, - areaEnd: function() { - this._curve.areaEnd(); - }, - lineStart: function() { - this._curve.lineStart(); - }, - lineEnd: function() { - this._curve.lineEnd(); - }, - point: function(a, r) { - this._curve.point(r * Math.sin(a), r * -Math.cos(a)); - } -}; - -function curveRadial(curve) { - - function radial(context) { - return new Radial(curve(context)); - } - - radial._curve = curve; - - return radial; -} - - -/***/ }), - -/***/ "./node_modules/d3-shape/src/curve/step.js": -/*!*************************************************!*\ - !*** ./node_modules/d3-shape/src/curve/step.js ***! - \*************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "stepAfter": () => (/* binding */ stepAfter), -/* harmony export */ "stepBefore": () => (/* binding */ stepBefore) -/* harmony export */ }); -function Step(context, t) { - this._context = context; - this._t = t; -} - -Step.prototype = { - areaStart: function() { - this._line = 0; - }, - areaEnd: function() { - this._line = NaN; - }, - lineStart: function() { - this._x = this._y = NaN; - this._point = 0; - }, - lineEnd: function() { - if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y); - if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); - if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line; - }, - point: function(x, y) { - x = +x, y = +y; - switch (this._point) { - case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break; - case 1: this._point = 2; // proceed - default: { - if (this._t <= 0) { - this._context.lineTo(this._x, y); - this._context.lineTo(x, y); - } else { - var x1 = this._x * (1 - this._t) + x * this._t; - this._context.lineTo(x1, this._y); - this._context.lineTo(x1, y); - } - break; - } - } - this._x = x, this._y = y; - } -}; - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(context) { - return new Step(context, 0.5); -} - -function stepBefore(context) { - return new Step(context, 0); -} - -function stepAfter(context) { - return new Step(context, 1); -} - - -/***/ }), - -/***/ "./node_modules/d3-shape/src/descending.js": -/*!*************************************************!*\ - !*** ./node_modules/d3-shape/src/descending.js ***! - \*************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(a, b) { - return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN; -} - - -/***/ }), - -/***/ "./node_modules/d3-shape/src/identity.js": -/*!***********************************************!*\ - !*** ./node_modules/d3-shape/src/identity.js ***! - \***********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(d) { - return d; -} - - -/***/ }), - -/***/ "./node_modules/d3-shape/src/index.js": -/*!********************************************!*\ - !*** ./node_modules/d3-shape/src/index.js ***! - \********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "arc": () => (/* reexport safe */ _arc_js__WEBPACK_IMPORTED_MODULE_0__["default"]), -/* harmony export */ "area": () => (/* reexport safe */ _area_js__WEBPACK_IMPORTED_MODULE_1__["default"]), -/* harmony export */ "areaRadial": () => (/* reexport safe */ _areaRadial_js__WEBPACK_IMPORTED_MODULE_4__["default"]), -/* harmony export */ "curveBasis": () => (/* reexport safe */ _curve_basis_js__WEBPACK_IMPORTED_MODULE_18__["default"]), -/* harmony export */ "curveBasisClosed": () => (/* reexport safe */ _curve_basisClosed_js__WEBPACK_IMPORTED_MODULE_16__["default"]), -/* harmony export */ "curveBasisOpen": () => (/* reexport safe */ _curve_basisOpen_js__WEBPACK_IMPORTED_MODULE_17__["default"]), -/* harmony export */ "curveBundle": () => (/* reexport safe */ _curve_bundle_js__WEBPACK_IMPORTED_MODULE_19__["default"]), -/* harmony export */ "curveCardinal": () => (/* reexport safe */ _curve_cardinal_js__WEBPACK_IMPORTED_MODULE_22__["default"]), -/* harmony export */ "curveCardinalClosed": () => (/* reexport safe */ _curve_cardinalClosed_js__WEBPACK_IMPORTED_MODULE_20__["default"]), -/* harmony export */ "curveCardinalOpen": () => (/* reexport safe */ _curve_cardinalOpen_js__WEBPACK_IMPORTED_MODULE_21__["default"]), -/* harmony export */ "curveCatmullRom": () => (/* reexport safe */ _curve_catmullRom_js__WEBPACK_IMPORTED_MODULE_25__["default"]), -/* harmony export */ "curveCatmullRomClosed": () => (/* reexport safe */ _curve_catmullRomClosed_js__WEBPACK_IMPORTED_MODULE_23__["default"]), -/* harmony export */ "curveCatmullRomOpen": () => (/* reexport safe */ _curve_catmullRomOpen_js__WEBPACK_IMPORTED_MODULE_24__["default"]), -/* harmony export */ "curveLinear": () => (/* reexport safe */ _curve_linear_js__WEBPACK_IMPORTED_MODULE_27__["default"]), -/* harmony export */ "curveLinearClosed": () => (/* reexport safe */ _curve_linearClosed_js__WEBPACK_IMPORTED_MODULE_26__["default"]), -/* harmony export */ "curveMonotoneX": () => (/* reexport safe */ _curve_monotone_js__WEBPACK_IMPORTED_MODULE_28__.monotoneX), -/* harmony export */ "curveMonotoneY": () => (/* reexport safe */ _curve_monotone_js__WEBPACK_IMPORTED_MODULE_28__.monotoneY), -/* harmony export */ "curveNatural": () => (/* reexport safe */ _curve_natural_js__WEBPACK_IMPORTED_MODULE_29__["default"]), -/* harmony export */ "curveStep": () => (/* reexport safe */ _curve_step_js__WEBPACK_IMPORTED_MODULE_30__["default"]), -/* harmony export */ "curveStepAfter": () => (/* reexport safe */ _curve_step_js__WEBPACK_IMPORTED_MODULE_30__.stepAfter), -/* harmony export */ "curveStepBefore": () => (/* reexport safe */ _curve_step_js__WEBPACK_IMPORTED_MODULE_30__.stepBefore), -/* harmony export */ "line": () => (/* reexport safe */ _line_js__WEBPACK_IMPORTED_MODULE_2__["default"]), -/* harmony export */ "lineRadial": () => (/* reexport safe */ _lineRadial_js__WEBPACK_IMPORTED_MODULE_5__["default"]), -/* harmony export */ "linkHorizontal": () => (/* reexport safe */ _link_index_js__WEBPACK_IMPORTED_MODULE_7__.linkHorizontal), -/* harmony export */ "linkRadial": () => (/* reexport safe */ _link_index_js__WEBPACK_IMPORTED_MODULE_7__.linkRadial), -/* harmony export */ "linkVertical": () => (/* reexport safe */ _link_index_js__WEBPACK_IMPORTED_MODULE_7__.linkVertical), -/* harmony export */ "pie": () => (/* reexport safe */ _pie_js__WEBPACK_IMPORTED_MODULE_3__["default"]), -/* harmony export */ "pointRadial": () => (/* reexport safe */ _pointRadial_js__WEBPACK_IMPORTED_MODULE_6__["default"]), -/* harmony export */ "radialArea": () => (/* reexport safe */ _areaRadial_js__WEBPACK_IMPORTED_MODULE_4__["default"]), -/* harmony export */ "radialLine": () => (/* reexport safe */ _lineRadial_js__WEBPACK_IMPORTED_MODULE_5__["default"]), -/* harmony export */ "stack": () => (/* reexport safe */ _stack_js__WEBPACK_IMPORTED_MODULE_31__["default"]), -/* harmony export */ "stackOffsetDiverging": () => (/* reexport safe */ _offset_diverging_js__WEBPACK_IMPORTED_MODULE_33__["default"]), -/* harmony export */ "stackOffsetExpand": () => (/* reexport safe */ _offset_expand_js__WEBPACK_IMPORTED_MODULE_32__["default"]), -/* harmony export */ "stackOffsetNone": () => (/* reexport safe */ _offset_none_js__WEBPACK_IMPORTED_MODULE_34__["default"]), -/* harmony export */ "stackOffsetSilhouette": () => (/* reexport safe */ _offset_silhouette_js__WEBPACK_IMPORTED_MODULE_35__["default"]), -/* harmony export */ "stackOffsetWiggle": () => (/* reexport safe */ _offset_wiggle_js__WEBPACK_IMPORTED_MODULE_36__["default"]), -/* harmony export */ "stackOrderAppearance": () => (/* reexport safe */ _order_appearance_js__WEBPACK_IMPORTED_MODULE_37__["default"]), -/* harmony export */ "stackOrderAscending": () => (/* reexport safe */ _order_ascending_js__WEBPACK_IMPORTED_MODULE_38__["default"]), -/* harmony export */ "stackOrderDescending": () => (/* reexport safe */ _order_descending_js__WEBPACK_IMPORTED_MODULE_39__["default"]), -/* harmony export */ "stackOrderInsideOut": () => (/* reexport safe */ _order_insideOut_js__WEBPACK_IMPORTED_MODULE_40__["default"]), -/* harmony export */ "stackOrderNone": () => (/* reexport safe */ _order_none_js__WEBPACK_IMPORTED_MODULE_41__["default"]), -/* harmony export */ "stackOrderReverse": () => (/* reexport safe */ _order_reverse_js__WEBPACK_IMPORTED_MODULE_42__["default"]), -/* harmony export */ "symbol": () => (/* reexport safe */ _symbol_js__WEBPACK_IMPORTED_MODULE_8__["default"]), -/* harmony export */ "symbolCircle": () => (/* reexport safe */ _symbol_circle_js__WEBPACK_IMPORTED_MODULE_9__["default"]), -/* harmony export */ "symbolCross": () => (/* reexport safe */ _symbol_cross_js__WEBPACK_IMPORTED_MODULE_10__["default"]), -/* harmony export */ "symbolDiamond": () => (/* reexport safe */ _symbol_diamond_js__WEBPACK_IMPORTED_MODULE_11__["default"]), -/* harmony export */ "symbolSquare": () => (/* reexport safe */ _symbol_square_js__WEBPACK_IMPORTED_MODULE_12__["default"]), -/* harmony export */ "symbolStar": () => (/* reexport safe */ _symbol_star_js__WEBPACK_IMPORTED_MODULE_13__["default"]), -/* harmony export */ "symbolTriangle": () => (/* reexport safe */ _symbol_triangle_js__WEBPACK_IMPORTED_MODULE_14__["default"]), -/* harmony export */ "symbolWye": () => (/* reexport safe */ _symbol_wye_js__WEBPACK_IMPORTED_MODULE_15__["default"]), -/* harmony export */ "symbols": () => (/* reexport safe */ _symbol_js__WEBPACK_IMPORTED_MODULE_8__.symbols) -/* harmony export */ }); -/* harmony import */ var _arc_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./arc.js */ "./node_modules/d3-shape/src/arc.js"); -/* harmony import */ var _area_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./area.js */ "./node_modules/d3-shape/src/area.js"); -/* harmony import */ var _line_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./line.js */ "./node_modules/d3-shape/src/line.js"); -/* harmony import */ var _pie_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./pie.js */ "./node_modules/d3-shape/src/pie.js"); -/* harmony import */ var _areaRadial_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./areaRadial.js */ "./node_modules/d3-shape/src/areaRadial.js"); -/* harmony import */ var _lineRadial_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./lineRadial.js */ "./node_modules/d3-shape/src/lineRadial.js"); -/* harmony import */ var _pointRadial_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./pointRadial.js */ "./node_modules/d3-shape/src/pointRadial.js"); -/* harmony import */ var _link_index_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./link/index.js */ "./node_modules/d3-shape/src/link/index.js"); -/* harmony import */ var _symbol_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./symbol.js */ "./node_modules/d3-shape/src/symbol.js"); -/* harmony import */ var _symbol_circle_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./symbol/circle.js */ "./node_modules/d3-shape/src/symbol/circle.js"); -/* harmony import */ var _symbol_cross_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./symbol/cross.js */ "./node_modules/d3-shape/src/symbol/cross.js"); -/* harmony import */ var _symbol_diamond_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./symbol/diamond.js */ "./node_modules/d3-shape/src/symbol/diamond.js"); -/* harmony import */ var _symbol_square_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./symbol/square.js */ "./node_modules/d3-shape/src/symbol/square.js"); -/* harmony import */ var _symbol_star_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./symbol/star.js */ "./node_modules/d3-shape/src/symbol/star.js"); -/* harmony import */ var _symbol_triangle_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./symbol/triangle.js */ "./node_modules/d3-shape/src/symbol/triangle.js"); -/* harmony import */ var _symbol_wye_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./symbol/wye.js */ "./node_modules/d3-shape/src/symbol/wye.js"); -/* harmony import */ var _curve_basisClosed_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./curve/basisClosed.js */ "./node_modules/d3-shape/src/curve/basisClosed.js"); -/* harmony import */ var _curve_basisOpen_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./curve/basisOpen.js */ "./node_modules/d3-shape/src/curve/basisOpen.js"); -/* harmony import */ var _curve_basis_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./curve/basis.js */ "./node_modules/d3-shape/src/curve/basis.js"); -/* harmony import */ var _curve_bundle_js__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./curve/bundle.js */ "./node_modules/d3-shape/src/curve/bundle.js"); -/* harmony import */ var _curve_cardinalClosed_js__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./curve/cardinalClosed.js */ "./node_modules/d3-shape/src/curve/cardinalClosed.js"); -/* harmony import */ var _curve_cardinalOpen_js__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./curve/cardinalOpen.js */ "./node_modules/d3-shape/src/curve/cardinalOpen.js"); -/* harmony import */ var _curve_cardinal_js__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./curve/cardinal.js */ "./node_modules/d3-shape/src/curve/cardinal.js"); -/* harmony import */ var _curve_catmullRomClosed_js__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./curve/catmullRomClosed.js */ "./node_modules/d3-shape/src/curve/catmullRomClosed.js"); -/* harmony import */ var _curve_catmullRomOpen_js__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./curve/catmullRomOpen.js */ "./node_modules/d3-shape/src/curve/catmullRomOpen.js"); -/* harmony import */ var _curve_catmullRom_js__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./curve/catmullRom.js */ "./node_modules/d3-shape/src/curve/catmullRom.js"); -/* harmony import */ var _curve_linearClosed_js__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./curve/linearClosed.js */ "./node_modules/d3-shape/src/curve/linearClosed.js"); -/* harmony import */ var _curve_linear_js__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./curve/linear.js */ "./node_modules/d3-shape/src/curve/linear.js"); -/* harmony import */ var _curve_monotone_js__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./curve/monotone.js */ "./node_modules/d3-shape/src/curve/monotone.js"); -/* harmony import */ var _curve_natural_js__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./curve/natural.js */ "./node_modules/d3-shape/src/curve/natural.js"); -/* harmony import */ var _curve_step_js__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./curve/step.js */ "./node_modules/d3-shape/src/curve/step.js"); -/* harmony import */ var _stack_js__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./stack.js */ "./node_modules/d3-shape/src/stack.js"); -/* harmony import */ var _offset_expand_js__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./offset/expand.js */ "./node_modules/d3-shape/src/offset/expand.js"); -/* harmony import */ var _offset_diverging_js__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./offset/diverging.js */ "./node_modules/d3-shape/src/offset/diverging.js"); -/* harmony import */ var _offset_none_js__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./offset/none.js */ "./node_modules/d3-shape/src/offset/none.js"); -/* harmony import */ var _offset_silhouette_js__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./offset/silhouette.js */ "./node_modules/d3-shape/src/offset/silhouette.js"); -/* harmony import */ var _offset_wiggle_js__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./offset/wiggle.js */ "./node_modules/d3-shape/src/offset/wiggle.js"); -/* harmony import */ var _order_appearance_js__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./order/appearance.js */ "./node_modules/d3-shape/src/order/appearance.js"); -/* harmony import */ var _order_ascending_js__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./order/ascending.js */ "./node_modules/d3-shape/src/order/ascending.js"); -/* harmony import */ var _order_descending_js__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ./order/descending.js */ "./node_modules/d3-shape/src/order/descending.js"); -/* harmony import */ var _order_insideOut_js__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ./order/insideOut.js */ "./node_modules/d3-shape/src/order/insideOut.js"); -/* harmony import */ var _order_none_js__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ./order/none.js */ "./node_modules/d3-shape/src/order/none.js"); -/* harmony import */ var _order_reverse_js__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! ./order/reverse.js */ "./node_modules/d3-shape/src/order/reverse.js"); - - - - - // Note: radialArea is deprecated! - // Note: radialLine is deprecated! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -/***/ }), - -/***/ "./node_modules/d3-shape/src/line.js": -/*!*******************************************!*\ - !*** ./node_modules/d3-shape/src/line.js ***! - \*******************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var d3_path__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! d3-path */ "./node_modules/d3-path/src/path.js"); -/* harmony import */ var _constant_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./constant.js */ "./node_modules/d3-shape/src/constant.js"); -/* harmony import */ var _curve_linear_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./curve/linear.js */ "./node_modules/d3-shape/src/curve/linear.js"); -/* harmony import */ var _point_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./point.js */ "./node_modules/d3-shape/src/point.js"); - - - - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() { - var x = _point_js__WEBPACK_IMPORTED_MODULE_0__.x, - y = _point_js__WEBPACK_IMPORTED_MODULE_0__.y, - defined = (0,_constant_js__WEBPACK_IMPORTED_MODULE_1__["default"])(true), - context = null, - curve = _curve_linear_js__WEBPACK_IMPORTED_MODULE_2__["default"], - output = null; - - function line(data) { - var i, - n = data.length, - d, - defined0 = false, - buffer; - - if (context == null) output = curve(buffer = (0,d3_path__WEBPACK_IMPORTED_MODULE_3__["default"])()); - - for (i = 0; i <= n; ++i) { - if (!(i < n && defined(d = data[i], i, data)) === defined0) { - if (defined0 = !defined0) output.lineStart(); - else output.lineEnd(); - } - if (defined0) output.point(+x(d, i, data), +y(d, i, data)); - } - - if (buffer) return output = null, buffer + "" || null; - } - - line.x = function(_) { - return arguments.length ? (x = typeof _ === "function" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_1__["default"])(+_), line) : x; - }; - - line.y = function(_) { - return arguments.length ? (y = typeof _ === "function" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_1__["default"])(+_), line) : y; - }; - - line.defined = function(_) { - return arguments.length ? (defined = typeof _ === "function" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_1__["default"])(!!_), line) : defined; - }; - - line.curve = function(_) { - return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve; - }; - - line.context = function(_) { - return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context; - }; - - return line; -} - - -/***/ }), - -/***/ "./node_modules/d3-shape/src/lineRadial.js": -/*!*************************************************!*\ - !*** ./node_modules/d3-shape/src/lineRadial.js ***! - \*************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "lineRadial": () => (/* binding */ lineRadial) -/* harmony export */ }); -/* harmony import */ var _curve_radial_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./curve/radial.js */ "./node_modules/d3-shape/src/curve/radial.js"); -/* harmony import */ var _line_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./line.js */ "./node_modules/d3-shape/src/line.js"); - - - -function lineRadial(l) { - var c = l.curve; - - l.angle = l.x, delete l.x; - l.radius = l.y, delete l.y; - - l.curve = function(_) { - return arguments.length ? c((0,_curve_radial_js__WEBPACK_IMPORTED_MODULE_0__["default"])(_)) : c()._curve; - }; - - return l; -} - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() { - return lineRadial((0,_line_js__WEBPACK_IMPORTED_MODULE_1__["default"])().curve(_curve_radial_js__WEBPACK_IMPORTED_MODULE_0__.curveRadialLinear)); -} - - -/***/ }), - -/***/ "./node_modules/d3-shape/src/link/index.js": -/*!*************************************************!*\ - !*** ./node_modules/d3-shape/src/link/index.js ***! - \*************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "linkHorizontal": () => (/* binding */ linkHorizontal), -/* harmony export */ "linkRadial": () => (/* binding */ linkRadial), -/* harmony export */ "linkVertical": () => (/* binding */ linkVertical) -/* harmony export */ }); -/* harmony import */ var d3_path__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-path */ "./node_modules/d3-path/src/path.js"); -/* harmony import */ var _array_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../array.js */ "./node_modules/d3-shape/src/array.js"); -/* harmony import */ var _constant_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../constant.js */ "./node_modules/d3-shape/src/constant.js"); -/* harmony import */ var _point_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../point.js */ "./node_modules/d3-shape/src/point.js"); -/* harmony import */ var _pointRadial_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../pointRadial.js */ "./node_modules/d3-shape/src/pointRadial.js"); - - - - - - -function linkSource(d) { - return d.source; -} - -function linkTarget(d) { - return d.target; -} - -function link(curve) { - var source = linkSource, - target = linkTarget, - x = _point_js__WEBPACK_IMPORTED_MODULE_0__.x, - y = _point_js__WEBPACK_IMPORTED_MODULE_0__.y, - context = null; - - function link() { - var buffer, argv = _array_js__WEBPACK_IMPORTED_MODULE_1__.slice.call(arguments), s = source.apply(this, argv), t = target.apply(this, argv); - if (!context) context = buffer = (0,d3_path__WEBPACK_IMPORTED_MODULE_2__["default"])(); - curve(context, +x.apply(this, (argv[0] = s, argv)), +y.apply(this, argv), +x.apply(this, (argv[0] = t, argv)), +y.apply(this, argv)); - if (buffer) return context = null, buffer + "" || null; - } - - link.source = function(_) { - return arguments.length ? (source = _, link) : source; - }; - - link.target = function(_) { - return arguments.length ? (target = _, link) : target; - }; - - link.x = function(_) { - return arguments.length ? (x = typeof _ === "function" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_3__["default"])(+_), link) : x; - }; - - link.y = function(_) { - return arguments.length ? (y = typeof _ === "function" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_3__["default"])(+_), link) : y; - }; - - link.context = function(_) { - return arguments.length ? ((context = _ == null ? null : _), link) : context; - }; - - return link; -} - -function curveHorizontal(context, x0, y0, x1, y1) { - context.moveTo(x0, y0); - context.bezierCurveTo(x0 = (x0 + x1) / 2, y0, x0, y1, x1, y1); -} - -function curveVertical(context, x0, y0, x1, y1) { - context.moveTo(x0, y0); - context.bezierCurveTo(x0, y0 = (y0 + y1) / 2, x1, y0, x1, y1); -} - -function curveRadial(context, x0, y0, x1, y1) { - var p0 = (0,_pointRadial_js__WEBPACK_IMPORTED_MODULE_4__["default"])(x0, y0), - p1 = (0,_pointRadial_js__WEBPACK_IMPORTED_MODULE_4__["default"])(x0, y0 = (y0 + y1) / 2), - p2 = (0,_pointRadial_js__WEBPACK_IMPORTED_MODULE_4__["default"])(x1, y0), - p3 = (0,_pointRadial_js__WEBPACK_IMPORTED_MODULE_4__["default"])(x1, y1); - context.moveTo(p0[0], p0[1]); - context.bezierCurveTo(p1[0], p1[1], p2[0], p2[1], p3[0], p3[1]); -} - -function linkHorizontal() { - return link(curveHorizontal); -} - -function linkVertical() { - return link(curveVertical); -} - -function linkRadial() { - var l = link(curveRadial); - l.angle = l.x, delete l.x; - l.radius = l.y, delete l.y; - return l; -} - - -/***/ }), - -/***/ "./node_modules/d3-shape/src/math.js": -/*!*******************************************!*\ - !*** ./node_modules/d3-shape/src/math.js ***! - \*******************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "abs": () => (/* binding */ abs), -/* harmony export */ "acos": () => (/* binding */ acos), -/* harmony export */ "asin": () => (/* binding */ asin), -/* harmony export */ "atan2": () => (/* binding */ atan2), -/* harmony export */ "cos": () => (/* binding */ cos), -/* harmony export */ "epsilon": () => (/* binding */ epsilon), -/* harmony export */ "halfPi": () => (/* binding */ halfPi), -/* harmony export */ "max": () => (/* binding */ max), -/* harmony export */ "min": () => (/* binding */ min), -/* harmony export */ "pi": () => (/* binding */ pi), -/* harmony export */ "sin": () => (/* binding */ sin), -/* harmony export */ "sqrt": () => (/* binding */ sqrt), -/* harmony export */ "tau": () => (/* binding */ tau) -/* harmony export */ }); -var abs = Math.abs; -var atan2 = Math.atan2; -var cos = Math.cos; -var max = Math.max; -var min = Math.min; -var sin = Math.sin; -var sqrt = Math.sqrt; - -var epsilon = 1e-12; -var pi = Math.PI; -var halfPi = pi / 2; -var tau = 2 * pi; - -function acos(x) { - return x > 1 ? 0 : x < -1 ? pi : Math.acos(x); -} - -function asin(x) { - return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x); -} - - -/***/ }), - -/***/ "./node_modules/d3-shape/src/noop.js": -/*!*******************************************!*\ - !*** ./node_modules/d3-shape/src/noop.js ***! - \*******************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {} - - -/***/ }), - -/***/ "./node_modules/d3-shape/src/offset/diverging.js": -/*!*******************************************************!*\ - !*** ./node_modules/d3-shape/src/offset/diverging.js ***! - \*******************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(series, order) { - if (!((n = series.length) > 0)) return; - for (var i, j = 0, d, dy, yp, yn, n, m = series[order[0]].length; j < m; ++j) { - for (yp = yn = 0, i = 0; i < n; ++i) { - if ((dy = (d = series[order[i]][j])[1] - d[0]) > 0) { - d[0] = yp, d[1] = yp += dy; - } else if (dy < 0) { - d[1] = yn, d[0] = yn += dy; - } else { - d[0] = 0, d[1] = dy; - } - } - } -} - - -/***/ }), - -/***/ "./node_modules/d3-shape/src/offset/expand.js": -/*!****************************************************!*\ - !*** ./node_modules/d3-shape/src/offset/expand.js ***! - \****************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _none_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./none.js */ "./node_modules/d3-shape/src/offset/none.js"); - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(series, order) { - if (!((n = series.length) > 0)) return; - for (var i, n, j = 0, m = series[0].length, y; j < m; ++j) { - for (y = i = 0; i < n; ++i) y += series[i][j][1] || 0; - if (y) for (i = 0; i < n; ++i) series[i][j][1] /= y; - } - (0,_none_js__WEBPACK_IMPORTED_MODULE_0__["default"])(series, order); -} - - -/***/ }), - -/***/ "./node_modules/d3-shape/src/offset/none.js": -/*!**************************************************!*\ - !*** ./node_modules/d3-shape/src/offset/none.js ***! - \**************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(series, order) { - if (!((n = series.length) > 1)) return; - for (var i = 1, j, s0, s1 = series[order[0]], n, m = s1.length; i < n; ++i) { - s0 = s1, s1 = series[order[i]]; - for (j = 0; j < m; ++j) { - s1[j][1] += s1[j][0] = isNaN(s0[j][1]) ? s0[j][0] : s0[j][1]; - } - } -} - - -/***/ }), - -/***/ "./node_modules/d3-shape/src/offset/silhouette.js": -/*!********************************************************!*\ - !*** ./node_modules/d3-shape/src/offset/silhouette.js ***! - \********************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _none_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./none.js */ "./node_modules/d3-shape/src/offset/none.js"); - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(series, order) { - if (!((n = series.length) > 0)) return; - for (var j = 0, s0 = series[order[0]], n, m = s0.length; j < m; ++j) { - for (var i = 0, y = 0; i < n; ++i) y += series[i][j][1] || 0; - s0[j][1] += s0[j][0] = -y / 2; - } - (0,_none_js__WEBPACK_IMPORTED_MODULE_0__["default"])(series, order); -} - - -/***/ }), - -/***/ "./node_modules/d3-shape/src/offset/wiggle.js": -/*!****************************************************!*\ - !*** ./node_modules/d3-shape/src/offset/wiggle.js ***! - \****************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _none_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./none.js */ "./node_modules/d3-shape/src/offset/none.js"); - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(series, order) { - if (!((n = series.length) > 0) || !((m = (s0 = series[order[0]]).length) > 0)) return; - for (var y = 0, j = 1, s0, m, n; j < m; ++j) { - for (var i = 0, s1 = 0, s2 = 0; i < n; ++i) { - var si = series[order[i]], - sij0 = si[j][1] || 0, - sij1 = si[j - 1][1] || 0, - s3 = (sij0 - sij1) / 2; - for (var k = 0; k < i; ++k) { - var sk = series[order[k]], - skj0 = sk[j][1] || 0, - skj1 = sk[j - 1][1] || 0; - s3 += skj0 - skj1; - } - s1 += sij0, s2 += s3 * sij0; - } - s0[j - 1][1] += s0[j - 1][0] = y; - if (s1) y -= s2 / s1; - } - s0[j - 1][1] += s0[j - 1][0] = y; - (0,_none_js__WEBPACK_IMPORTED_MODULE_0__["default"])(series, order); -} - - -/***/ }), - -/***/ "./node_modules/d3-shape/src/order/appearance.js": -/*!*******************************************************!*\ - !*** ./node_modules/d3-shape/src/order/appearance.js ***! - \*******************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _none_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./none.js */ "./node_modules/d3-shape/src/order/none.js"); - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(series) { - var peaks = series.map(peak); - return (0,_none_js__WEBPACK_IMPORTED_MODULE_0__["default"])(series).sort(function(a, b) { return peaks[a] - peaks[b]; }); -} - -function peak(series) { - var i = -1, j = 0, n = series.length, vi, vj = -Infinity; - while (++i < n) if ((vi = +series[i][1]) > vj) vj = vi, j = i; - return j; -} - - -/***/ }), - -/***/ "./node_modules/d3-shape/src/order/ascending.js": -/*!******************************************************!*\ - !*** ./node_modules/d3-shape/src/order/ascending.js ***! - \******************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "sum": () => (/* binding */ sum) -/* harmony export */ }); -/* harmony import */ var _none_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./none.js */ "./node_modules/d3-shape/src/order/none.js"); - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(series) { - var sums = series.map(sum); - return (0,_none_js__WEBPACK_IMPORTED_MODULE_0__["default"])(series).sort(function(a, b) { return sums[a] - sums[b]; }); -} - -function sum(series) { - var s = 0, i = -1, n = series.length, v; - while (++i < n) if (v = +series[i][1]) s += v; - return s; -} - - -/***/ }), - -/***/ "./node_modules/d3-shape/src/order/descending.js": -/*!*******************************************************!*\ - !*** ./node_modules/d3-shape/src/order/descending.js ***! - \*******************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _ascending_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ascending.js */ "./node_modules/d3-shape/src/order/ascending.js"); - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(series) { - return (0,_ascending_js__WEBPACK_IMPORTED_MODULE_0__["default"])(series).reverse(); -} - - -/***/ }), - -/***/ "./node_modules/d3-shape/src/order/insideOut.js": -/*!******************************************************!*\ - !*** ./node_modules/d3-shape/src/order/insideOut.js ***! - \******************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _appearance_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./appearance.js */ "./node_modules/d3-shape/src/order/appearance.js"); -/* harmony import */ var _ascending_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ascending.js */ "./node_modules/d3-shape/src/order/ascending.js"); - - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(series) { - var n = series.length, - i, - j, - sums = series.map(_ascending_js__WEBPACK_IMPORTED_MODULE_0__.sum), - order = (0,_appearance_js__WEBPACK_IMPORTED_MODULE_1__["default"])(series), - top = 0, - bottom = 0, - tops = [], - bottoms = []; - - for (i = 0; i < n; ++i) { - j = order[i]; - if (top < bottom) { - top += sums[j]; - tops.push(j); - } else { - bottom += sums[j]; - bottoms.push(j); - } - } - - return bottoms.reverse().concat(tops); -} - - -/***/ }), - -/***/ "./node_modules/d3-shape/src/order/none.js": -/*!*************************************************!*\ - !*** ./node_modules/d3-shape/src/order/none.js ***! - \*************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(series) { - var n = series.length, o = new Array(n); - while (--n >= 0) o[n] = n; - return o; -} - - -/***/ }), - -/***/ "./node_modules/d3-shape/src/order/reverse.js": -/*!****************************************************!*\ - !*** ./node_modules/d3-shape/src/order/reverse.js ***! - \****************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _none_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./none.js */ "./node_modules/d3-shape/src/order/none.js"); - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(series) { - return (0,_none_js__WEBPACK_IMPORTED_MODULE_0__["default"])(series).reverse(); -} - - -/***/ }), - -/***/ "./node_modules/d3-shape/src/pie.js": -/*!******************************************!*\ - !*** ./node_modules/d3-shape/src/pie.js ***! - \******************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _constant_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./constant.js */ "./node_modules/d3-shape/src/constant.js"); -/* harmony import */ var _descending_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./descending.js */ "./node_modules/d3-shape/src/descending.js"); -/* harmony import */ var _identity_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./identity.js */ "./node_modules/d3-shape/src/identity.js"); -/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./math.js */ "./node_modules/d3-shape/src/math.js"); - - - - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() { - var value = _identity_js__WEBPACK_IMPORTED_MODULE_0__["default"], - sortValues = _descending_js__WEBPACK_IMPORTED_MODULE_1__["default"], - sort = null, - startAngle = (0,_constant_js__WEBPACK_IMPORTED_MODULE_2__["default"])(0), - endAngle = (0,_constant_js__WEBPACK_IMPORTED_MODULE_2__["default"])(_math_js__WEBPACK_IMPORTED_MODULE_3__.tau), - padAngle = (0,_constant_js__WEBPACK_IMPORTED_MODULE_2__["default"])(0); - - function pie(data) { - var i, - n = data.length, - j, - k, - sum = 0, - index = new Array(n), - arcs = new Array(n), - a0 = +startAngle.apply(this, arguments), - da = Math.min(_math_js__WEBPACK_IMPORTED_MODULE_3__.tau, Math.max(-_math_js__WEBPACK_IMPORTED_MODULE_3__.tau, endAngle.apply(this, arguments) - a0)), - a1, - p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)), - pa = p * (da < 0 ? -1 : 1), - v; - - for (i = 0; i < n; ++i) { - if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) { - sum += v; - } - } - - // Optionally sort the arcs by previously-computed values or by data. - if (sortValues != null) index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); }); - else if (sort != null) index.sort(function(i, j) { return sort(data[i], data[j]); }); - - // Compute the arcs! They are stored in the original data's order. - for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) { - j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = { - data: data[j], - index: i, - value: v, - startAngle: a0, - endAngle: a1, - padAngle: p - }; - } - - return arcs; - } - - pie.value = function(_) { - return arguments.length ? (value = typeof _ === "function" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_2__["default"])(+_), pie) : value; - }; - - pie.sortValues = function(_) { - return arguments.length ? (sortValues = _, sort = null, pie) : sortValues; - }; - - pie.sort = function(_) { - return arguments.length ? (sort = _, sortValues = null, pie) : sort; - }; - - pie.startAngle = function(_) { - return arguments.length ? (startAngle = typeof _ === "function" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_2__["default"])(+_), pie) : startAngle; - }; - - pie.endAngle = function(_) { - return arguments.length ? (endAngle = typeof _ === "function" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_2__["default"])(+_), pie) : endAngle; - }; - - pie.padAngle = function(_) { - return arguments.length ? (padAngle = typeof _ === "function" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_2__["default"])(+_), pie) : padAngle; - }; - - return pie; -} - - -/***/ }), - -/***/ "./node_modules/d3-shape/src/point.js": -/*!********************************************!*\ - !*** ./node_modules/d3-shape/src/point.js ***! - \********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "x": () => (/* binding */ x), -/* harmony export */ "y": () => (/* binding */ y) -/* harmony export */ }); -function x(p) { - return p[0]; -} - -function y(p) { - return p[1]; -} - - -/***/ }), - -/***/ "./node_modules/d3-shape/src/pointRadial.js": -/*!**************************************************!*\ - !*** ./node_modules/d3-shape/src/pointRadial.js ***! - \**************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(x, y) { - return [(y = +y) * Math.cos(x -= Math.PI / 2), y * Math.sin(x)]; -} - - -/***/ }), - -/***/ "./node_modules/d3-shape/src/stack.js": -/*!********************************************!*\ - !*** ./node_modules/d3-shape/src/stack.js ***! - \********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _array_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./array.js */ "./node_modules/d3-shape/src/array.js"); -/* harmony import */ var _constant_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./constant.js */ "./node_modules/d3-shape/src/constant.js"); -/* harmony import */ var _offset_none_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./offset/none.js */ "./node_modules/d3-shape/src/offset/none.js"); -/* harmony import */ var _order_none_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./order/none.js */ "./node_modules/d3-shape/src/order/none.js"); - - - - - -function stackValue(d, key) { - return d[key]; -} - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() { - var keys = (0,_constant_js__WEBPACK_IMPORTED_MODULE_0__["default"])([]), - order = _order_none_js__WEBPACK_IMPORTED_MODULE_1__["default"], - offset = _offset_none_js__WEBPACK_IMPORTED_MODULE_2__["default"], - value = stackValue; - - function stack(data) { - var kz = keys.apply(this, arguments), - i, - m = data.length, - n = kz.length, - sz = new Array(n), - oz; - - for (i = 0; i < n; ++i) { - for (var ki = kz[i], si = sz[i] = new Array(m), j = 0, sij; j < m; ++j) { - si[j] = sij = [0, +value(data[j], ki, j, data)]; - sij.data = data[j]; - } - si.key = ki; - } - - for (i = 0, oz = order(sz); i < n; ++i) { - sz[oz[i]].index = i; - } - - offset(sz, oz); - return sz; - } - - stack.keys = function(_) { - return arguments.length ? (keys = typeof _ === "function" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_0__["default"])(_array_js__WEBPACK_IMPORTED_MODULE_3__.slice.call(_)), stack) : keys; - }; - - stack.value = function(_) { - return arguments.length ? (value = typeof _ === "function" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_0__["default"])(+_), stack) : value; - }; - - stack.order = function(_) { - return arguments.length ? (order = _ == null ? _order_none_js__WEBPACK_IMPORTED_MODULE_1__["default"] : typeof _ === "function" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_0__["default"])(_array_js__WEBPACK_IMPORTED_MODULE_3__.slice.call(_)), stack) : order; - }; - - stack.offset = function(_) { - return arguments.length ? (offset = _ == null ? _offset_none_js__WEBPACK_IMPORTED_MODULE_2__["default"] : _, stack) : offset; - }; - - return stack; -} - - -/***/ }), - -/***/ "./node_modules/d3-shape/src/symbol.js": -/*!*********************************************!*\ - !*** ./node_modules/d3-shape/src/symbol.js ***! - \*********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "symbols": () => (/* binding */ symbols) -/* harmony export */ }); -/* harmony import */ var d3_path__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! d3-path */ "./node_modules/d3-path/src/path.js"); -/* harmony import */ var _symbol_circle_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./symbol/circle.js */ "./node_modules/d3-shape/src/symbol/circle.js"); -/* harmony import */ var _symbol_cross_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./symbol/cross.js */ "./node_modules/d3-shape/src/symbol/cross.js"); -/* harmony import */ var _symbol_diamond_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./symbol/diamond.js */ "./node_modules/d3-shape/src/symbol/diamond.js"); -/* harmony import */ var _symbol_star_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./symbol/star.js */ "./node_modules/d3-shape/src/symbol/star.js"); -/* harmony import */ var _symbol_square_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./symbol/square.js */ "./node_modules/d3-shape/src/symbol/square.js"); -/* harmony import */ var _symbol_triangle_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./symbol/triangle.js */ "./node_modules/d3-shape/src/symbol/triangle.js"); -/* harmony import */ var _symbol_wye_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./symbol/wye.js */ "./node_modules/d3-shape/src/symbol/wye.js"); -/* harmony import */ var _constant_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./constant.js */ "./node_modules/d3-shape/src/constant.js"); - - - - - - - - - - -var symbols = [ - _symbol_circle_js__WEBPACK_IMPORTED_MODULE_0__["default"], - _symbol_cross_js__WEBPACK_IMPORTED_MODULE_1__["default"], - _symbol_diamond_js__WEBPACK_IMPORTED_MODULE_2__["default"], - _symbol_square_js__WEBPACK_IMPORTED_MODULE_3__["default"], - _symbol_star_js__WEBPACK_IMPORTED_MODULE_4__["default"], - _symbol_triangle_js__WEBPACK_IMPORTED_MODULE_5__["default"], - _symbol_wye_js__WEBPACK_IMPORTED_MODULE_6__["default"] -]; - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() { - var type = (0,_constant_js__WEBPACK_IMPORTED_MODULE_7__["default"])(_symbol_circle_js__WEBPACK_IMPORTED_MODULE_0__["default"]), - size = (0,_constant_js__WEBPACK_IMPORTED_MODULE_7__["default"])(64), - context = null; - - function symbol() { - var buffer; - if (!context) context = buffer = (0,d3_path__WEBPACK_IMPORTED_MODULE_8__["default"])(); - type.apply(this, arguments).draw(context, +size.apply(this, arguments)); - if (buffer) return context = null, buffer + "" || null; - } - - symbol.type = function(_) { - return arguments.length ? (type = typeof _ === "function" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_7__["default"])(_), symbol) : type; - }; - - symbol.size = function(_) { - return arguments.length ? (size = typeof _ === "function" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_7__["default"])(+_), symbol) : size; - }; - - symbol.context = function(_) { - return arguments.length ? (context = _ == null ? null : _, symbol) : context; - }; - - return symbol; -} - - -/***/ }), - -/***/ "./node_modules/d3-shape/src/symbol/circle.js": -/*!****************************************************!*\ - !*** ./node_modules/d3-shape/src/symbol/circle.js ***! - \****************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math.js */ "./node_modules/d3-shape/src/math.js"); - - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ - draw: function(context, size) { - var r = Math.sqrt(size / _math_js__WEBPACK_IMPORTED_MODULE_0__.pi); - context.moveTo(r, 0); - context.arc(0, 0, r, 0, _math_js__WEBPACK_IMPORTED_MODULE_0__.tau); - } -}); - - -/***/ }), - -/***/ "./node_modules/d3-shape/src/symbol/cross.js": -/*!***************************************************!*\ - !*** ./node_modules/d3-shape/src/symbol/cross.js ***! - \***************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ - draw: function(context, size) { - var r = Math.sqrt(size / 5) / 2; - context.moveTo(-3 * r, -r); - context.lineTo(-r, -r); - context.lineTo(-r, -3 * r); - context.lineTo(r, -3 * r); - context.lineTo(r, -r); - context.lineTo(3 * r, -r); - context.lineTo(3 * r, r); - context.lineTo(r, r); - context.lineTo(r, 3 * r); - context.lineTo(-r, 3 * r); - context.lineTo(-r, r); - context.lineTo(-3 * r, r); - context.closePath(); - } -}); - - -/***/ }), - -/***/ "./node_modules/d3-shape/src/symbol/diamond.js": -/*!*****************************************************!*\ - !*** ./node_modules/d3-shape/src/symbol/diamond.js ***! - \*****************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -var tan30 = Math.sqrt(1 / 3), - tan30_2 = tan30 * 2; - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ - draw: function(context, size) { - var y = Math.sqrt(size / tan30_2), - x = y * tan30; - context.moveTo(0, -y); - context.lineTo(x, 0); - context.lineTo(0, y); - context.lineTo(-x, 0); - context.closePath(); - } -}); - - -/***/ }), - -/***/ "./node_modules/d3-shape/src/symbol/square.js": -/*!****************************************************!*\ - !*** ./node_modules/d3-shape/src/symbol/square.js ***! - \****************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ - draw: function(context, size) { - var w = Math.sqrt(size), - x = -w / 2; - context.rect(x, x, w, w); - } -}); - - -/***/ }), - -/***/ "./node_modules/d3-shape/src/symbol/star.js": -/*!**************************************************!*\ - !*** ./node_modules/d3-shape/src/symbol/star.js ***! - \**************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math.js */ "./node_modules/d3-shape/src/math.js"); - - -var ka = 0.89081309152928522810, - kr = Math.sin(_math_js__WEBPACK_IMPORTED_MODULE_0__.pi / 10) / Math.sin(7 * _math_js__WEBPACK_IMPORTED_MODULE_0__.pi / 10), - kx = Math.sin(_math_js__WEBPACK_IMPORTED_MODULE_0__.tau / 10) * kr, - ky = -Math.cos(_math_js__WEBPACK_IMPORTED_MODULE_0__.tau / 10) * kr; - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ - draw: function(context, size) { - var r = Math.sqrt(size * ka), - x = kx * r, - y = ky * r; - context.moveTo(0, -r); - context.lineTo(x, y); - for (var i = 1; i < 5; ++i) { - var a = _math_js__WEBPACK_IMPORTED_MODULE_0__.tau * i / 5, - c = Math.cos(a), - s = Math.sin(a); - context.lineTo(s * r, -c * r); - context.lineTo(c * x - s * y, s * x + c * y); - } - context.closePath(); - } -}); - - -/***/ }), - -/***/ "./node_modules/d3-shape/src/symbol/triangle.js": -/*!******************************************************!*\ - !*** ./node_modules/d3-shape/src/symbol/triangle.js ***! - \******************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -var sqrt3 = Math.sqrt(3); - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ - draw: function(context, size) { - var y = -Math.sqrt(size / (sqrt3 * 3)); - context.moveTo(0, y * 2); - context.lineTo(-sqrt3 * y, -y); - context.lineTo(sqrt3 * y, -y); - context.closePath(); - } -}); - - -/***/ }), - -/***/ "./node_modules/d3-shape/src/symbol/wye.js": -/*!*************************************************!*\ - !*** ./node_modules/d3-shape/src/symbol/wye.js ***! - \*************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -var c = -0.5, - s = Math.sqrt(3) / 2, - k = 1 / Math.sqrt(12), - a = (k / 2 + 1) * 3; - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ - draw: function(context, size) { - var r = Math.sqrt(size / a), - x0 = r / 2, - y0 = r * k, - x1 = x0, - y1 = r * k + r, - x2 = -x1, - y2 = y1; - context.moveTo(x0, y0); - context.lineTo(x1, y1); - context.lineTo(x2, y2); - context.lineTo(c * x0 - s * y0, s * x0 + c * y0); - context.lineTo(c * x1 - s * y1, s * x1 + c * y1); - context.lineTo(c * x2 - s * y2, s * x2 + c * y2); - context.lineTo(c * x0 + s * y0, c * y0 - s * x0); - context.lineTo(c * x1 + s * y1, c * y1 - s * x1); - context.lineTo(c * x2 + s * y2, c * y2 - s * x2); - context.closePath(); - } -}); - - -/***/ }), - -/***/ "./node_modules/d3-time-format/src/defaultLocale.js": -/*!**********************************************************!*\ - !*** ./node_modules/d3-time-format/src/defaultLocale.js ***! - \**********************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ defaultLocale), -/* harmony export */ "timeFormat": () => (/* binding */ timeFormat), -/* harmony export */ "timeParse": () => (/* binding */ timeParse), -/* harmony export */ "utcFormat": () => (/* binding */ utcFormat), -/* harmony export */ "utcParse": () => (/* binding */ utcParse) -/* harmony export */ }); -/* harmony import */ var _locale_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./locale.js */ "./node_modules/d3-time-format/src/locale.js"); - - -var locale; -var timeFormat; -var timeParse; -var utcFormat; -var utcParse; - -defaultLocale({ - dateTime: "%x, %X", - date: "%-m/%-d/%Y", - time: "%-I:%M:%S %p", - periods: ["AM", "PM"], - days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], - shortDays: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], - months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], - shortMonths: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] -}); - -function defaultLocale(definition) { - locale = (0,_locale_js__WEBPACK_IMPORTED_MODULE_0__["default"])(definition); - timeFormat = locale.format; - timeParse = locale.parse; - utcFormat = locale.utcFormat; - utcParse = locale.utcParse; - return locale; -} - - -/***/ }), - -/***/ "./node_modules/d3-time-format/src/index.js": -/*!**************************************************!*\ - !*** ./node_modules/d3-time-format/src/index.js ***! - \**************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "isoFormat": () => (/* reexport safe */ _isoFormat_js__WEBPACK_IMPORTED_MODULE_2__["default"]), -/* harmony export */ "isoParse": () => (/* reexport safe */ _isoParse_js__WEBPACK_IMPORTED_MODULE_3__["default"]), -/* harmony export */ "timeFormat": () => (/* reexport safe */ _defaultLocale_js__WEBPACK_IMPORTED_MODULE_0__.timeFormat), -/* harmony export */ "timeFormatDefaultLocale": () => (/* reexport safe */ _defaultLocale_js__WEBPACK_IMPORTED_MODULE_0__["default"]), -/* harmony export */ "timeFormatLocale": () => (/* reexport safe */ _locale_js__WEBPACK_IMPORTED_MODULE_1__["default"]), -/* harmony export */ "timeParse": () => (/* reexport safe */ _defaultLocale_js__WEBPACK_IMPORTED_MODULE_0__.timeParse), -/* harmony export */ "utcFormat": () => (/* reexport safe */ _defaultLocale_js__WEBPACK_IMPORTED_MODULE_0__.utcFormat), -/* harmony export */ "utcParse": () => (/* reexport safe */ _defaultLocale_js__WEBPACK_IMPORTED_MODULE_0__.utcParse) -/* harmony export */ }); -/* harmony import */ var _defaultLocale_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./defaultLocale.js */ "./node_modules/d3-time-format/src/defaultLocale.js"); -/* harmony import */ var _locale_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./locale.js */ "./node_modules/d3-time-format/src/locale.js"); -/* harmony import */ var _isoFormat_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./isoFormat.js */ "./node_modules/d3-time-format/src/isoFormat.js"); -/* harmony import */ var _isoParse_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./isoParse.js */ "./node_modules/d3-time-format/src/isoParse.js"); - - - - - - -/***/ }), - -/***/ "./node_modules/d3-time-format/src/isoFormat.js": -/*!******************************************************!*\ - !*** ./node_modules/d3-time-format/src/isoFormat.js ***! - \******************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "isoSpecifier": () => (/* binding */ isoSpecifier) -/* harmony export */ }); -/* harmony import */ var _defaultLocale_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./defaultLocale.js */ "./node_modules/d3-time-format/src/defaultLocale.js"); - - -var isoSpecifier = "%Y-%m-%dT%H:%M:%S.%LZ"; - -function formatIsoNative(date) { - return date.toISOString(); -} - -var formatIso = Date.prototype.toISOString - ? formatIsoNative - : (0,_defaultLocale_js__WEBPACK_IMPORTED_MODULE_0__.utcFormat)(isoSpecifier); - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (formatIso); - - -/***/ }), - -/***/ "./node_modules/d3-time-format/src/isoParse.js": -/*!*****************************************************!*\ - !*** ./node_modules/d3-time-format/src/isoParse.js ***! - \*****************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _isoFormat_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./isoFormat.js */ "./node_modules/d3-time-format/src/isoFormat.js"); -/* harmony import */ var _defaultLocale_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./defaultLocale.js */ "./node_modules/d3-time-format/src/defaultLocale.js"); - - - -function parseIsoNative(string) { - var date = new Date(string); - return isNaN(date) ? null : date; -} - -var parseIso = +new Date("2000-01-01T00:00:00.000Z") - ? parseIsoNative - : (0,_defaultLocale_js__WEBPACK_IMPORTED_MODULE_0__.utcParse)(_isoFormat_js__WEBPACK_IMPORTED_MODULE_1__.isoSpecifier); - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (parseIso); - - -/***/ }), - -/***/ "./node_modules/d3-time-format/src/locale.js": -/*!***************************************************!*\ - !*** ./node_modules/d3-time-format/src/locale.js ***! - \***************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ formatLocale) -/* harmony export */ }); -/* harmony import */ var d3_time__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-time */ "./node_modules/d3-time/src/utcWeek.js"); -/* harmony import */ var d3_time__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-time */ "./node_modules/d3-time/src/utcDay.js"); -/* harmony import */ var d3_time__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-time */ "./node_modules/d3-time/src/week.js"); -/* harmony import */ var d3_time__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! d3-time */ "./node_modules/d3-time/src/day.js"); -/* harmony import */ var d3_time__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! d3-time */ "./node_modules/d3-time/src/year.js"); -/* harmony import */ var d3_time__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! d3-time */ "./node_modules/d3-time/src/utcYear.js"); - - -function localDate(d) { - if (0 <= d.y && d.y < 100) { - var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L); - date.setFullYear(d.y); - return date; - } - return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L); -} - -function utcDate(d) { - if (0 <= d.y && d.y < 100) { - var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L)); - date.setUTCFullYear(d.y); - return date; - } - return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L)); -} - -function newDate(y, m, d) { - return {y: y, m: m, d: d, H: 0, M: 0, S: 0, L: 0}; -} - -function formatLocale(locale) { - var locale_dateTime = locale.dateTime, - locale_date = locale.date, - locale_time = locale.time, - locale_periods = locale.periods, - locale_weekdays = locale.days, - locale_shortWeekdays = locale.shortDays, - locale_months = locale.months, - locale_shortMonths = locale.shortMonths; - - var periodRe = formatRe(locale_periods), - periodLookup = formatLookup(locale_periods), - weekdayRe = formatRe(locale_weekdays), - weekdayLookup = formatLookup(locale_weekdays), - shortWeekdayRe = formatRe(locale_shortWeekdays), - shortWeekdayLookup = formatLookup(locale_shortWeekdays), - monthRe = formatRe(locale_months), - monthLookup = formatLookup(locale_months), - shortMonthRe = formatRe(locale_shortMonths), - shortMonthLookup = formatLookup(locale_shortMonths); - - var formats = { - "a": formatShortWeekday, - "A": formatWeekday, - "b": formatShortMonth, - "B": formatMonth, - "c": null, - "d": formatDayOfMonth, - "e": formatDayOfMonth, - "f": formatMicroseconds, - "g": formatYearISO, - "G": formatFullYearISO, - "H": formatHour24, - "I": formatHour12, - "j": formatDayOfYear, - "L": formatMilliseconds, - "m": formatMonthNumber, - "M": formatMinutes, - "p": formatPeriod, - "q": formatQuarter, - "Q": formatUnixTimestamp, - "s": formatUnixTimestampSeconds, - "S": formatSeconds, - "u": formatWeekdayNumberMonday, - "U": formatWeekNumberSunday, - "V": formatWeekNumberISO, - "w": formatWeekdayNumberSunday, - "W": formatWeekNumberMonday, - "x": null, - "X": null, - "y": formatYear, - "Y": formatFullYear, - "Z": formatZone, - "%": formatLiteralPercent - }; - - var utcFormats = { - "a": formatUTCShortWeekday, - "A": formatUTCWeekday, - "b": formatUTCShortMonth, - "B": formatUTCMonth, - "c": null, - "d": formatUTCDayOfMonth, - "e": formatUTCDayOfMonth, - "f": formatUTCMicroseconds, - "g": formatUTCYearISO, - "G": formatUTCFullYearISO, - "H": formatUTCHour24, - "I": formatUTCHour12, - "j": formatUTCDayOfYear, - "L": formatUTCMilliseconds, - "m": formatUTCMonthNumber, - "M": formatUTCMinutes, - "p": formatUTCPeriod, - "q": formatUTCQuarter, - "Q": formatUnixTimestamp, - "s": formatUnixTimestampSeconds, - "S": formatUTCSeconds, - "u": formatUTCWeekdayNumberMonday, - "U": formatUTCWeekNumberSunday, - "V": formatUTCWeekNumberISO, - "w": formatUTCWeekdayNumberSunday, - "W": formatUTCWeekNumberMonday, - "x": null, - "X": null, - "y": formatUTCYear, - "Y": formatUTCFullYear, - "Z": formatUTCZone, - "%": formatLiteralPercent - }; - - var parses = { - "a": parseShortWeekday, - "A": parseWeekday, - "b": parseShortMonth, - "B": parseMonth, - "c": parseLocaleDateTime, - "d": parseDayOfMonth, - "e": parseDayOfMonth, - "f": parseMicroseconds, - "g": parseYear, - "G": parseFullYear, - "H": parseHour24, - "I": parseHour24, - "j": parseDayOfYear, - "L": parseMilliseconds, - "m": parseMonthNumber, - "M": parseMinutes, - "p": parsePeriod, - "q": parseQuarter, - "Q": parseUnixTimestamp, - "s": parseUnixTimestampSeconds, - "S": parseSeconds, - "u": parseWeekdayNumberMonday, - "U": parseWeekNumberSunday, - "V": parseWeekNumberISO, - "w": parseWeekdayNumberSunday, - "W": parseWeekNumberMonday, - "x": parseLocaleDate, - "X": parseLocaleTime, - "y": parseYear, - "Y": parseFullYear, - "Z": parseZone, - "%": parseLiteralPercent - }; - - // These recursive directive definitions must be deferred. - formats.x = newFormat(locale_date, formats); - formats.X = newFormat(locale_time, formats); - formats.c = newFormat(locale_dateTime, formats); - utcFormats.x = newFormat(locale_date, utcFormats); - utcFormats.X = newFormat(locale_time, utcFormats); - utcFormats.c = newFormat(locale_dateTime, utcFormats); - - function newFormat(specifier, formats) { - return function(date) { - var string = [], - i = -1, - j = 0, - n = specifier.length, - c, - pad, - format; - - if (!(date instanceof Date)) date = new Date(+date); - - while (++i < n) { - if (specifier.charCodeAt(i) === 37) { - string.push(specifier.slice(j, i)); - if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i); - else pad = c === "e" ? " " : "0"; - if (format = formats[c]) c = format(date, pad); - string.push(c); - j = i + 1; - } - } - - string.push(specifier.slice(j, i)); - return string.join(""); - }; - } - - function newParse(specifier, Z) { - return function(string) { - var d = newDate(1900, undefined, 1), - i = parseSpecifier(d, specifier, string += "", 0), - week, day; - if (i != string.length) return null; - - // If a UNIX timestamp is specified, return it. - if ("Q" in d) return new Date(d.Q); - if ("s" in d) return new Date(d.s * 1000 + ("L" in d ? d.L : 0)); - - // If this is utcParse, never use the local timezone. - if (Z && !("Z" in d)) d.Z = 0; - - // The am-pm flag is 0 for AM, and 1 for PM. - if ("p" in d) d.H = d.H % 12 + d.p * 12; - - // If the month was not specified, inherit from the quarter. - if (d.m === undefined) d.m = "q" in d ? d.q : 0; - - // Convert day-of-week and week-of-year to day-of-year. - if ("V" in d) { - if (d.V < 1 || d.V > 53) return null; - if (!("w" in d)) d.w = 1; - if ("Z" in d) { - week = utcDate(newDate(d.y, 0, 1)), day = week.getUTCDay(); - week = day > 4 || day === 0 ? d3_time__WEBPACK_IMPORTED_MODULE_0__.utcMonday.ceil(week) : (0,d3_time__WEBPACK_IMPORTED_MODULE_0__.utcMonday)(week); - week = d3_time__WEBPACK_IMPORTED_MODULE_1__["default"].offset(week, (d.V - 1) * 7); - d.y = week.getUTCFullYear(); - d.m = week.getUTCMonth(); - d.d = week.getUTCDate() + (d.w + 6) % 7; - } else { - week = localDate(newDate(d.y, 0, 1)), day = week.getDay(); - week = day > 4 || day === 0 ? d3_time__WEBPACK_IMPORTED_MODULE_2__.monday.ceil(week) : (0,d3_time__WEBPACK_IMPORTED_MODULE_2__.monday)(week); - week = d3_time__WEBPACK_IMPORTED_MODULE_3__["default"].offset(week, (d.V - 1) * 7); - d.y = week.getFullYear(); - d.m = week.getMonth(); - d.d = week.getDate() + (d.w + 6) % 7; - } - } else if ("W" in d || "U" in d) { - if (!("w" in d)) d.w = "u" in d ? d.u % 7 : "W" in d ? 1 : 0; - day = "Z" in d ? utcDate(newDate(d.y, 0, 1)).getUTCDay() : localDate(newDate(d.y, 0, 1)).getDay(); - d.m = 0; - d.d = "W" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7; - } - - // If a time zone is specified, all fields are interpreted as UTC and then - // offset according to the specified time zone. - if ("Z" in d) { - d.H += d.Z / 100 | 0; - d.M += d.Z % 100; - return utcDate(d); - } - - // Otherwise, all fields are in local time. - return localDate(d); - }; - } - - function parseSpecifier(d, specifier, string, j) { - var i = 0, - n = specifier.length, - m = string.length, - c, - parse; - - while (i < n) { - if (j >= m) return -1; - c = specifier.charCodeAt(i++); - if (c === 37) { - c = specifier.charAt(i++); - parse = parses[c in pads ? specifier.charAt(i++) : c]; - if (!parse || ((j = parse(d, string, j)) < 0)) return -1; - } else if (c != string.charCodeAt(j++)) { - return -1; - } - } - - return j; - } - - function parsePeriod(d, string, i) { - var n = periodRe.exec(string.slice(i)); - return n ? (d.p = periodLookup[n[0].toLowerCase()], i + n[0].length) : -1; - } - - function parseShortWeekday(d, string, i) { - var n = shortWeekdayRe.exec(string.slice(i)); - return n ? (d.w = shortWeekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1; - } - - function parseWeekday(d, string, i) { - var n = weekdayRe.exec(string.slice(i)); - return n ? (d.w = weekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1; - } - - function parseShortMonth(d, string, i) { - var n = shortMonthRe.exec(string.slice(i)); - return n ? (d.m = shortMonthLookup[n[0].toLowerCase()], i + n[0].length) : -1; - } - - function parseMonth(d, string, i) { - var n = monthRe.exec(string.slice(i)); - return n ? (d.m = monthLookup[n[0].toLowerCase()], i + n[0].length) : -1; - } - - function parseLocaleDateTime(d, string, i) { - return parseSpecifier(d, locale_dateTime, string, i); - } - - function parseLocaleDate(d, string, i) { - return parseSpecifier(d, locale_date, string, i); - } - - function parseLocaleTime(d, string, i) { - return parseSpecifier(d, locale_time, string, i); - } - - function formatShortWeekday(d) { - return locale_shortWeekdays[d.getDay()]; - } - - function formatWeekday(d) { - return locale_weekdays[d.getDay()]; - } - - function formatShortMonth(d) { - return locale_shortMonths[d.getMonth()]; - } - - function formatMonth(d) { - return locale_months[d.getMonth()]; - } - - function formatPeriod(d) { - return locale_periods[+(d.getHours() >= 12)]; - } - - function formatQuarter(d) { - return 1 + ~~(d.getMonth() / 3); - } - - function formatUTCShortWeekday(d) { - return locale_shortWeekdays[d.getUTCDay()]; - } - - function formatUTCWeekday(d) { - return locale_weekdays[d.getUTCDay()]; - } - - function formatUTCShortMonth(d) { - return locale_shortMonths[d.getUTCMonth()]; - } - - function formatUTCMonth(d) { - return locale_months[d.getUTCMonth()]; - } - - function formatUTCPeriod(d) { - return locale_periods[+(d.getUTCHours() >= 12)]; - } - - function formatUTCQuarter(d) { - return 1 + ~~(d.getUTCMonth() / 3); - } - - return { - format: function(specifier) { - var f = newFormat(specifier += "", formats); - f.toString = function() { return specifier; }; - return f; - }, - parse: function(specifier) { - var p = newParse(specifier += "", false); - p.toString = function() { return specifier; }; - return p; - }, - utcFormat: function(specifier) { - var f = newFormat(specifier += "", utcFormats); - f.toString = function() { return specifier; }; - return f; - }, - utcParse: function(specifier) { - var p = newParse(specifier += "", true); - p.toString = function() { return specifier; }; - return p; - } - }; -} - -var pads = {"-": "", "_": " ", "0": "0"}, - numberRe = /^\s*\d+/, // note: ignores next directive - percentRe = /^%/, - requoteRe = /[\\^$*+?|[\]().{}]/g; - -function pad(value, fill, width) { - var sign = value < 0 ? "-" : "", - string = (sign ? -value : value) + "", - length = string.length; - return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string); -} - -function requote(s) { - return s.replace(requoteRe, "\\$&"); -} - -function formatRe(names) { - return new RegExp("^(?:" + names.map(requote).join("|") + ")", "i"); -} - -function formatLookup(names) { - var map = {}, i = -1, n = names.length; - while (++i < n) map[names[i].toLowerCase()] = i; - return map; -} - -function parseWeekdayNumberSunday(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 1)); - return n ? (d.w = +n[0], i + n[0].length) : -1; -} - -function parseWeekdayNumberMonday(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 1)); - return n ? (d.u = +n[0], i + n[0].length) : -1; -} - -function parseWeekNumberSunday(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 2)); - return n ? (d.U = +n[0], i + n[0].length) : -1; -} - -function parseWeekNumberISO(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 2)); - return n ? (d.V = +n[0], i + n[0].length) : -1; -} - -function parseWeekNumberMonday(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 2)); - return n ? (d.W = +n[0], i + n[0].length) : -1; -} - -function parseFullYear(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 4)); - return n ? (d.y = +n[0], i + n[0].length) : -1; -} - -function parseYear(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 2)); - return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1; -} - -function parseZone(d, string, i) { - var n = /^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(string.slice(i, i + 6)); - return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || "00")), i + n[0].length) : -1; -} - -function parseQuarter(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 1)); - return n ? (d.q = n[0] * 3 - 3, i + n[0].length) : -1; -} - -function parseMonthNumber(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 2)); - return n ? (d.m = n[0] - 1, i + n[0].length) : -1; -} - -function parseDayOfMonth(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 2)); - return n ? (d.d = +n[0], i + n[0].length) : -1; -} - -function parseDayOfYear(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 3)); - return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1; -} - -function parseHour24(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 2)); - return n ? (d.H = +n[0], i + n[0].length) : -1; -} - -function parseMinutes(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 2)); - return n ? (d.M = +n[0], i + n[0].length) : -1; -} - -function parseSeconds(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 2)); - return n ? (d.S = +n[0], i + n[0].length) : -1; -} - -function parseMilliseconds(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 3)); - return n ? (d.L = +n[0], i + n[0].length) : -1; -} - -function parseMicroseconds(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 6)); - return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1; -} - -function parseLiteralPercent(d, string, i) { - var n = percentRe.exec(string.slice(i, i + 1)); - return n ? i + n[0].length : -1; -} - -function parseUnixTimestamp(d, string, i) { - var n = numberRe.exec(string.slice(i)); - return n ? (d.Q = +n[0], i + n[0].length) : -1; -} - -function parseUnixTimestampSeconds(d, string, i) { - var n = numberRe.exec(string.slice(i)); - return n ? (d.s = +n[0], i + n[0].length) : -1; -} - -function formatDayOfMonth(d, p) { - return pad(d.getDate(), p, 2); -} - -function formatHour24(d, p) { - return pad(d.getHours(), p, 2); -} - -function formatHour12(d, p) { - return pad(d.getHours() % 12 || 12, p, 2); -} - -function formatDayOfYear(d, p) { - return pad(1 + d3_time__WEBPACK_IMPORTED_MODULE_3__["default"].count((0,d3_time__WEBPACK_IMPORTED_MODULE_4__["default"])(d), d), p, 3); -} - -function formatMilliseconds(d, p) { - return pad(d.getMilliseconds(), p, 3); -} - -function formatMicroseconds(d, p) { - return formatMilliseconds(d, p) + "000"; -} - -function formatMonthNumber(d, p) { - return pad(d.getMonth() + 1, p, 2); -} - -function formatMinutes(d, p) { - return pad(d.getMinutes(), p, 2); -} - -function formatSeconds(d, p) { - return pad(d.getSeconds(), p, 2); -} - -function formatWeekdayNumberMonday(d) { - var day = d.getDay(); - return day === 0 ? 7 : day; -} - -function formatWeekNumberSunday(d, p) { - return pad(d3_time__WEBPACK_IMPORTED_MODULE_2__.sunday.count((0,d3_time__WEBPACK_IMPORTED_MODULE_4__["default"])(d) - 1, d), p, 2); -} - -function dISO(d) { - var day = d.getDay(); - return (day >= 4 || day === 0) ? (0,d3_time__WEBPACK_IMPORTED_MODULE_2__.thursday)(d) : d3_time__WEBPACK_IMPORTED_MODULE_2__.thursday.ceil(d); -} - -function formatWeekNumberISO(d, p) { - d = dISO(d); - return pad(d3_time__WEBPACK_IMPORTED_MODULE_2__.thursday.count((0,d3_time__WEBPACK_IMPORTED_MODULE_4__["default"])(d), d) + ((0,d3_time__WEBPACK_IMPORTED_MODULE_4__["default"])(d).getDay() === 4), p, 2); -} - -function formatWeekdayNumberSunday(d) { - return d.getDay(); -} - -function formatWeekNumberMonday(d, p) { - return pad(d3_time__WEBPACK_IMPORTED_MODULE_2__.monday.count((0,d3_time__WEBPACK_IMPORTED_MODULE_4__["default"])(d) - 1, d), p, 2); -} - -function formatYear(d, p) { - return pad(d.getFullYear() % 100, p, 2); -} - -function formatYearISO(d, p) { - d = dISO(d); - return pad(d.getFullYear() % 100, p, 2); -} - -function formatFullYear(d, p) { - return pad(d.getFullYear() % 10000, p, 4); -} - -function formatFullYearISO(d, p) { - var day = d.getDay(); - d = (day >= 4 || day === 0) ? (0,d3_time__WEBPACK_IMPORTED_MODULE_2__.thursday)(d) : d3_time__WEBPACK_IMPORTED_MODULE_2__.thursday.ceil(d); - return pad(d.getFullYear() % 10000, p, 4); -} - -function formatZone(d) { - var z = d.getTimezoneOffset(); - return (z > 0 ? "-" : (z *= -1, "+")) - + pad(z / 60 | 0, "0", 2) - + pad(z % 60, "0", 2); -} - -function formatUTCDayOfMonth(d, p) { - return pad(d.getUTCDate(), p, 2); -} - -function formatUTCHour24(d, p) { - return pad(d.getUTCHours(), p, 2); -} - -function formatUTCHour12(d, p) { - return pad(d.getUTCHours() % 12 || 12, p, 2); -} - -function formatUTCDayOfYear(d, p) { - return pad(1 + d3_time__WEBPACK_IMPORTED_MODULE_1__["default"].count((0,d3_time__WEBPACK_IMPORTED_MODULE_5__["default"])(d), d), p, 3); -} - -function formatUTCMilliseconds(d, p) { - return pad(d.getUTCMilliseconds(), p, 3); -} - -function formatUTCMicroseconds(d, p) { - return formatUTCMilliseconds(d, p) + "000"; -} - -function formatUTCMonthNumber(d, p) { - return pad(d.getUTCMonth() + 1, p, 2); -} - -function formatUTCMinutes(d, p) { - return pad(d.getUTCMinutes(), p, 2); -} - -function formatUTCSeconds(d, p) { - return pad(d.getUTCSeconds(), p, 2); -} - -function formatUTCWeekdayNumberMonday(d) { - var dow = d.getUTCDay(); - return dow === 0 ? 7 : dow; -} - -function formatUTCWeekNumberSunday(d, p) { - return pad(d3_time__WEBPACK_IMPORTED_MODULE_0__.utcSunday.count((0,d3_time__WEBPACK_IMPORTED_MODULE_5__["default"])(d) - 1, d), p, 2); -} - -function UTCdISO(d) { - var day = d.getUTCDay(); - return (day >= 4 || day === 0) ? (0,d3_time__WEBPACK_IMPORTED_MODULE_0__.utcThursday)(d) : d3_time__WEBPACK_IMPORTED_MODULE_0__.utcThursday.ceil(d); -} - -function formatUTCWeekNumberISO(d, p) { - d = UTCdISO(d); - return pad(d3_time__WEBPACK_IMPORTED_MODULE_0__.utcThursday.count((0,d3_time__WEBPACK_IMPORTED_MODULE_5__["default"])(d), d) + ((0,d3_time__WEBPACK_IMPORTED_MODULE_5__["default"])(d).getUTCDay() === 4), p, 2); -} - -function formatUTCWeekdayNumberSunday(d) { - return d.getUTCDay(); -} - -function formatUTCWeekNumberMonday(d, p) { - return pad(d3_time__WEBPACK_IMPORTED_MODULE_0__.utcMonday.count((0,d3_time__WEBPACK_IMPORTED_MODULE_5__["default"])(d) - 1, d), p, 2); -} - -function formatUTCYear(d, p) { - return pad(d.getUTCFullYear() % 100, p, 2); -} - -function formatUTCYearISO(d, p) { - d = UTCdISO(d); - return pad(d.getUTCFullYear() % 100, p, 2); -} - -function formatUTCFullYear(d, p) { - return pad(d.getUTCFullYear() % 10000, p, 4); -} - -function formatUTCFullYearISO(d, p) { - var day = d.getUTCDay(); - d = (day >= 4 || day === 0) ? (0,d3_time__WEBPACK_IMPORTED_MODULE_0__.utcThursday)(d) : d3_time__WEBPACK_IMPORTED_MODULE_0__.utcThursday.ceil(d); - return pad(d.getUTCFullYear() % 10000, p, 4); -} - -function formatUTCZone() { - return "+0000"; -} - -function formatLiteralPercent() { - return "%"; -} - -function formatUnixTimestamp(d) { - return +d; -} - -function formatUnixTimestampSeconds(d) { - return Math.floor(+d / 1000); -} - - -/***/ }), - -/***/ "./node_modules/d3-time/src/day.js": -/*!*****************************************!*\ - !*** ./node_modules/d3-time/src/day.js ***! - \*****************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "days": () => (/* binding */ days), -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _interval_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./interval.js */ "./node_modules/d3-time/src/interval.js"); -/* harmony import */ var _duration_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./duration.js */ "./node_modules/d3-time/src/duration.js"); - - - -var day = (0,_interval_js__WEBPACK_IMPORTED_MODULE_0__["default"])(function(date) { - date.setHours(0, 0, 0, 0); -}, function(date, step) { - date.setDate(date.getDate() + step); -}, function(start, end) { - return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * _duration_js__WEBPACK_IMPORTED_MODULE_1__.durationMinute) / _duration_js__WEBPACK_IMPORTED_MODULE_1__.durationDay; -}, function(date) { - return date.getDate() - 1; -}); - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (day); -var days = day.range; - - -/***/ }), - -/***/ "./node_modules/d3-time/src/duration.js": -/*!**********************************************!*\ - !*** ./node_modules/d3-time/src/duration.js ***! - \**********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "durationDay": () => (/* binding */ durationDay), -/* harmony export */ "durationHour": () => (/* binding */ durationHour), -/* harmony export */ "durationMinute": () => (/* binding */ durationMinute), -/* harmony export */ "durationSecond": () => (/* binding */ durationSecond), -/* harmony export */ "durationWeek": () => (/* binding */ durationWeek) -/* harmony export */ }); -var durationSecond = 1e3; -var durationMinute = 6e4; -var durationHour = 36e5; -var durationDay = 864e5; -var durationWeek = 6048e5; - - -/***/ }), - -/***/ "./node_modules/d3-time/src/hour.js": -/*!******************************************!*\ - !*** ./node_modules/d3-time/src/hour.js ***! - \******************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "hours": () => (/* binding */ hours) -/* harmony export */ }); -/* harmony import */ var _interval_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./interval.js */ "./node_modules/d3-time/src/interval.js"); -/* harmony import */ var _duration_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./duration.js */ "./node_modules/d3-time/src/duration.js"); - - - -var hour = (0,_interval_js__WEBPACK_IMPORTED_MODULE_0__["default"])(function(date) { - date.setTime(date - date.getMilliseconds() - date.getSeconds() * _duration_js__WEBPACK_IMPORTED_MODULE_1__.durationSecond - date.getMinutes() * _duration_js__WEBPACK_IMPORTED_MODULE_1__.durationMinute); -}, function(date, step) { - date.setTime(+date + step * _duration_js__WEBPACK_IMPORTED_MODULE_1__.durationHour); -}, function(start, end) { - return (end - start) / _duration_js__WEBPACK_IMPORTED_MODULE_1__.durationHour; -}, function(date) { - return date.getHours(); -}); - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (hour); -var hours = hour.range; - - -/***/ }), - -/***/ "./node_modules/d3-time/src/index.js": -/*!*******************************************!*\ - !*** ./node_modules/d3-time/src/index.js ***! - \*******************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "timeDay": () => (/* reexport safe */ _day_js__WEBPACK_IMPORTED_MODULE_5__["default"]), -/* harmony export */ "timeDays": () => (/* reexport safe */ _day_js__WEBPACK_IMPORTED_MODULE_5__.days), -/* harmony export */ "timeFriday": () => (/* reexport safe */ _week_js__WEBPACK_IMPORTED_MODULE_6__.friday), -/* harmony export */ "timeFridays": () => (/* reexport safe */ _week_js__WEBPACK_IMPORTED_MODULE_6__.fridays), -/* harmony export */ "timeHour": () => (/* reexport safe */ _hour_js__WEBPACK_IMPORTED_MODULE_4__["default"]), -/* harmony export */ "timeHours": () => (/* reexport safe */ _hour_js__WEBPACK_IMPORTED_MODULE_4__.hours), -/* harmony export */ "timeInterval": () => (/* reexport safe */ _interval_js__WEBPACK_IMPORTED_MODULE_0__["default"]), -/* harmony export */ "timeMillisecond": () => (/* reexport safe */ _millisecond_js__WEBPACK_IMPORTED_MODULE_1__["default"]), -/* harmony export */ "timeMilliseconds": () => (/* reexport safe */ _millisecond_js__WEBPACK_IMPORTED_MODULE_1__.milliseconds), -/* harmony export */ "timeMinute": () => (/* reexport safe */ _minute_js__WEBPACK_IMPORTED_MODULE_3__["default"]), -/* harmony export */ "timeMinutes": () => (/* reexport safe */ _minute_js__WEBPACK_IMPORTED_MODULE_3__.minutes), -/* harmony export */ "timeMonday": () => (/* reexport safe */ _week_js__WEBPACK_IMPORTED_MODULE_6__.monday), -/* harmony export */ "timeMondays": () => (/* reexport safe */ _week_js__WEBPACK_IMPORTED_MODULE_6__.mondays), -/* harmony export */ "timeMonth": () => (/* reexport safe */ _month_js__WEBPACK_IMPORTED_MODULE_7__["default"]), -/* harmony export */ "timeMonths": () => (/* reexport safe */ _month_js__WEBPACK_IMPORTED_MODULE_7__.months), -/* harmony export */ "timeSaturday": () => (/* reexport safe */ _week_js__WEBPACK_IMPORTED_MODULE_6__.saturday), -/* harmony export */ "timeSaturdays": () => (/* reexport safe */ _week_js__WEBPACK_IMPORTED_MODULE_6__.saturdays), -/* harmony export */ "timeSecond": () => (/* reexport safe */ _second_js__WEBPACK_IMPORTED_MODULE_2__["default"]), -/* harmony export */ "timeSeconds": () => (/* reexport safe */ _second_js__WEBPACK_IMPORTED_MODULE_2__.seconds), -/* harmony export */ "timeSunday": () => (/* reexport safe */ _week_js__WEBPACK_IMPORTED_MODULE_6__.sunday), -/* harmony export */ "timeSundays": () => (/* reexport safe */ _week_js__WEBPACK_IMPORTED_MODULE_6__.sundays), -/* harmony export */ "timeThursday": () => (/* reexport safe */ _week_js__WEBPACK_IMPORTED_MODULE_6__.thursday), -/* harmony export */ "timeThursdays": () => (/* reexport safe */ _week_js__WEBPACK_IMPORTED_MODULE_6__.thursdays), -/* harmony export */ "timeTuesday": () => (/* reexport safe */ _week_js__WEBPACK_IMPORTED_MODULE_6__.tuesday), -/* harmony export */ "timeTuesdays": () => (/* reexport safe */ _week_js__WEBPACK_IMPORTED_MODULE_6__.tuesdays), -/* harmony export */ "timeWednesday": () => (/* reexport safe */ _week_js__WEBPACK_IMPORTED_MODULE_6__.wednesday), -/* harmony export */ "timeWednesdays": () => (/* reexport safe */ _week_js__WEBPACK_IMPORTED_MODULE_6__.wednesdays), -/* harmony export */ "timeWeek": () => (/* reexport safe */ _week_js__WEBPACK_IMPORTED_MODULE_6__.sunday), -/* harmony export */ "timeWeeks": () => (/* reexport safe */ _week_js__WEBPACK_IMPORTED_MODULE_6__.sundays), -/* harmony export */ "timeYear": () => (/* reexport safe */ _year_js__WEBPACK_IMPORTED_MODULE_8__["default"]), -/* harmony export */ "timeYears": () => (/* reexport safe */ _year_js__WEBPACK_IMPORTED_MODULE_8__.years), -/* harmony export */ "utcDay": () => (/* reexport safe */ _utcDay_js__WEBPACK_IMPORTED_MODULE_11__["default"]), -/* harmony export */ "utcDays": () => (/* reexport safe */ _utcDay_js__WEBPACK_IMPORTED_MODULE_11__.utcDays), -/* harmony export */ "utcFriday": () => (/* reexport safe */ _utcWeek_js__WEBPACK_IMPORTED_MODULE_12__.utcFriday), -/* harmony export */ "utcFridays": () => (/* reexport safe */ _utcWeek_js__WEBPACK_IMPORTED_MODULE_12__.utcFridays), -/* harmony export */ "utcHour": () => (/* reexport safe */ _utcHour_js__WEBPACK_IMPORTED_MODULE_10__["default"]), -/* harmony export */ "utcHours": () => (/* reexport safe */ _utcHour_js__WEBPACK_IMPORTED_MODULE_10__.utcHours), -/* harmony export */ "utcMillisecond": () => (/* reexport safe */ _millisecond_js__WEBPACK_IMPORTED_MODULE_1__["default"]), -/* harmony export */ "utcMilliseconds": () => (/* reexport safe */ _millisecond_js__WEBPACK_IMPORTED_MODULE_1__.milliseconds), -/* harmony export */ "utcMinute": () => (/* reexport safe */ _utcMinute_js__WEBPACK_IMPORTED_MODULE_9__["default"]), -/* harmony export */ "utcMinutes": () => (/* reexport safe */ _utcMinute_js__WEBPACK_IMPORTED_MODULE_9__.utcMinutes), -/* harmony export */ "utcMonday": () => (/* reexport safe */ _utcWeek_js__WEBPACK_IMPORTED_MODULE_12__.utcMonday), -/* harmony export */ "utcMondays": () => (/* reexport safe */ _utcWeek_js__WEBPACK_IMPORTED_MODULE_12__.utcMondays), -/* harmony export */ "utcMonth": () => (/* reexport safe */ _utcMonth_js__WEBPACK_IMPORTED_MODULE_13__["default"]), -/* harmony export */ "utcMonths": () => (/* reexport safe */ _utcMonth_js__WEBPACK_IMPORTED_MODULE_13__.utcMonths), -/* harmony export */ "utcSaturday": () => (/* reexport safe */ _utcWeek_js__WEBPACK_IMPORTED_MODULE_12__.utcSaturday), -/* harmony export */ "utcSaturdays": () => (/* reexport safe */ _utcWeek_js__WEBPACK_IMPORTED_MODULE_12__.utcSaturdays), -/* harmony export */ "utcSecond": () => (/* reexport safe */ _second_js__WEBPACK_IMPORTED_MODULE_2__["default"]), -/* harmony export */ "utcSeconds": () => (/* reexport safe */ _second_js__WEBPACK_IMPORTED_MODULE_2__.seconds), -/* harmony export */ "utcSunday": () => (/* reexport safe */ _utcWeek_js__WEBPACK_IMPORTED_MODULE_12__.utcSunday), -/* harmony export */ "utcSundays": () => (/* reexport safe */ _utcWeek_js__WEBPACK_IMPORTED_MODULE_12__.utcSundays), -/* harmony export */ "utcThursday": () => (/* reexport safe */ _utcWeek_js__WEBPACK_IMPORTED_MODULE_12__.utcThursday), -/* harmony export */ "utcThursdays": () => (/* reexport safe */ _utcWeek_js__WEBPACK_IMPORTED_MODULE_12__.utcThursdays), -/* harmony export */ "utcTuesday": () => (/* reexport safe */ _utcWeek_js__WEBPACK_IMPORTED_MODULE_12__.utcTuesday), -/* harmony export */ "utcTuesdays": () => (/* reexport safe */ _utcWeek_js__WEBPACK_IMPORTED_MODULE_12__.utcTuesdays), -/* harmony export */ "utcWednesday": () => (/* reexport safe */ _utcWeek_js__WEBPACK_IMPORTED_MODULE_12__.utcWednesday), -/* harmony export */ "utcWednesdays": () => (/* reexport safe */ _utcWeek_js__WEBPACK_IMPORTED_MODULE_12__.utcWednesdays), -/* harmony export */ "utcWeek": () => (/* reexport safe */ _utcWeek_js__WEBPACK_IMPORTED_MODULE_12__.utcSunday), -/* harmony export */ "utcWeeks": () => (/* reexport safe */ _utcWeek_js__WEBPACK_IMPORTED_MODULE_12__.utcSundays), -/* harmony export */ "utcYear": () => (/* reexport safe */ _utcYear_js__WEBPACK_IMPORTED_MODULE_14__["default"]), -/* harmony export */ "utcYears": () => (/* reexport safe */ _utcYear_js__WEBPACK_IMPORTED_MODULE_14__.utcYears) -/* harmony export */ }); -/* harmony import */ var _interval_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./interval.js */ "./node_modules/d3-time/src/interval.js"); -/* harmony import */ var _millisecond_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./millisecond.js */ "./node_modules/d3-time/src/millisecond.js"); -/* harmony import */ var _second_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./second.js */ "./node_modules/d3-time/src/second.js"); -/* harmony import */ var _minute_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./minute.js */ "./node_modules/d3-time/src/minute.js"); -/* harmony import */ var _hour_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./hour.js */ "./node_modules/d3-time/src/hour.js"); -/* harmony import */ var _day_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./day.js */ "./node_modules/d3-time/src/day.js"); -/* harmony import */ var _week_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./week.js */ "./node_modules/d3-time/src/week.js"); -/* harmony import */ var _month_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./month.js */ "./node_modules/d3-time/src/month.js"); -/* harmony import */ var _year_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./year.js */ "./node_modules/d3-time/src/year.js"); -/* harmony import */ var _utcMinute_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./utcMinute.js */ "./node_modules/d3-time/src/utcMinute.js"); -/* harmony import */ var _utcHour_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./utcHour.js */ "./node_modules/d3-time/src/utcHour.js"); -/* harmony import */ var _utcDay_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./utcDay.js */ "./node_modules/d3-time/src/utcDay.js"); -/* harmony import */ var _utcWeek_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./utcWeek.js */ "./node_modules/d3-time/src/utcWeek.js"); -/* harmony import */ var _utcMonth_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./utcMonth.js */ "./node_modules/d3-time/src/utcMonth.js"); -/* harmony import */ var _utcYear_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./utcYear.js */ "./node_modules/d3-time/src/utcYear.js"); - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -/***/ }), - -/***/ "./node_modules/d3-time/src/interval.js": -/*!**********************************************!*\ - !*** ./node_modules/d3-time/src/interval.js ***! - \**********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ newInterval) -/* harmony export */ }); -var t0 = new Date, - t1 = new Date; - -function newInterval(floori, offseti, count, field) { - - function interval(date) { - return floori(date = arguments.length === 0 ? new Date : new Date(+date)), date; - } - - interval.floor = function(date) { - return floori(date = new Date(+date)), date; - }; - - interval.ceil = function(date) { - return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date; - }; - - interval.round = function(date) { - var d0 = interval(date), - d1 = interval.ceil(date); - return date - d0 < d1 - date ? d0 : d1; - }; - - interval.offset = function(date, step) { - return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date; - }; - - interval.range = function(start, stop, step) { - var range = [], previous; - start = interval.ceil(start); - step = step == null ? 1 : Math.floor(step); - if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date - do range.push(previous = new Date(+start)), offseti(start, step), floori(start); - while (previous < start && start < stop); - return range; - }; - - interval.filter = function(test) { - return newInterval(function(date) { - if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1); - }, function(date, step) { - if (date >= date) { - if (step < 0) while (++step <= 0) { - while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty - } else while (--step >= 0) { - while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty - } - } - }); - }; - - if (count) { - interval.count = function(start, end) { - t0.setTime(+start), t1.setTime(+end); - floori(t0), floori(t1); - return Math.floor(count(t0, t1)); - }; - - interval.every = function(step) { - step = Math.floor(step); - return !isFinite(step) || !(step > 0) ? null - : !(step > 1) ? interval - : interval.filter(field - ? function(d) { return field(d) % step === 0; } - : function(d) { return interval.count(0, d) % step === 0; }); - }; - } - - return interval; -} - - -/***/ }), - -/***/ "./node_modules/d3-time/src/millisecond.js": -/*!*************************************************!*\ - !*** ./node_modules/d3-time/src/millisecond.js ***! - \*************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "milliseconds": () => (/* binding */ milliseconds) -/* harmony export */ }); -/* harmony import */ var _interval_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./interval.js */ "./node_modules/d3-time/src/interval.js"); - - -var millisecond = (0,_interval_js__WEBPACK_IMPORTED_MODULE_0__["default"])(function() { - // noop -}, function(date, step) { - date.setTime(+date + step); -}, function(start, end) { - return end - start; -}); - -// An optimized implementation for this simple case. -millisecond.every = function(k) { - k = Math.floor(k); - if (!isFinite(k) || !(k > 0)) return null; - if (!(k > 1)) return millisecond; - return (0,_interval_js__WEBPACK_IMPORTED_MODULE_0__["default"])(function(date) { - date.setTime(Math.floor(date / k) * k); - }, function(date, step) { - date.setTime(+date + step * k); - }, function(start, end) { - return (end - start) / k; - }); -}; - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (millisecond); -var milliseconds = millisecond.range; - - -/***/ }), - -/***/ "./node_modules/d3-time/src/minute.js": -/*!********************************************!*\ - !*** ./node_modules/d3-time/src/minute.js ***! - \********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "minutes": () => (/* binding */ minutes) -/* harmony export */ }); -/* harmony import */ var _interval_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./interval.js */ "./node_modules/d3-time/src/interval.js"); -/* harmony import */ var _duration_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./duration.js */ "./node_modules/d3-time/src/duration.js"); - - - -var minute = (0,_interval_js__WEBPACK_IMPORTED_MODULE_0__["default"])(function(date) { - date.setTime(date - date.getMilliseconds() - date.getSeconds() * _duration_js__WEBPACK_IMPORTED_MODULE_1__.durationSecond); -}, function(date, step) { - date.setTime(+date + step * _duration_js__WEBPACK_IMPORTED_MODULE_1__.durationMinute); -}, function(start, end) { - return (end - start) / _duration_js__WEBPACK_IMPORTED_MODULE_1__.durationMinute; -}, function(date) { - return date.getMinutes(); -}); - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (minute); -var minutes = minute.range; - - -/***/ }), - -/***/ "./node_modules/d3-time/src/month.js": -/*!*******************************************!*\ - !*** ./node_modules/d3-time/src/month.js ***! - \*******************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "months": () => (/* binding */ months) -/* harmony export */ }); -/* harmony import */ var _interval_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./interval.js */ "./node_modules/d3-time/src/interval.js"); - - -var month = (0,_interval_js__WEBPACK_IMPORTED_MODULE_0__["default"])(function(date) { - date.setDate(1); - date.setHours(0, 0, 0, 0); -}, function(date, step) { - date.setMonth(date.getMonth() + step); -}, function(start, end) { - return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12; -}, function(date) { - return date.getMonth(); -}); - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (month); -var months = month.range; - - -/***/ }), - -/***/ "./node_modules/d3-time/src/second.js": -/*!********************************************!*\ - !*** ./node_modules/d3-time/src/second.js ***! - \********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "seconds": () => (/* binding */ seconds) -/* harmony export */ }); -/* harmony import */ var _interval_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./interval.js */ "./node_modules/d3-time/src/interval.js"); -/* harmony import */ var _duration_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./duration.js */ "./node_modules/d3-time/src/duration.js"); - - - -var second = (0,_interval_js__WEBPACK_IMPORTED_MODULE_0__["default"])(function(date) { - date.setTime(date - date.getMilliseconds()); -}, function(date, step) { - date.setTime(+date + step * _duration_js__WEBPACK_IMPORTED_MODULE_1__.durationSecond); -}, function(start, end) { - return (end - start) / _duration_js__WEBPACK_IMPORTED_MODULE_1__.durationSecond; -}, function(date) { - return date.getUTCSeconds(); -}); - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (second); -var seconds = second.range; - - -/***/ }), - -/***/ "./node_modules/d3-time/src/utcDay.js": -/*!********************************************!*\ - !*** ./node_modules/d3-time/src/utcDay.js ***! - \********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "utcDays": () => (/* binding */ utcDays) -/* harmony export */ }); -/* harmony import */ var _interval_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./interval.js */ "./node_modules/d3-time/src/interval.js"); -/* harmony import */ var _duration_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./duration.js */ "./node_modules/d3-time/src/duration.js"); - - - -var utcDay = (0,_interval_js__WEBPACK_IMPORTED_MODULE_0__["default"])(function(date) { - date.setUTCHours(0, 0, 0, 0); -}, function(date, step) { - date.setUTCDate(date.getUTCDate() + step); -}, function(start, end) { - return (end - start) / _duration_js__WEBPACK_IMPORTED_MODULE_1__.durationDay; -}, function(date) { - return date.getUTCDate() - 1; -}); - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (utcDay); -var utcDays = utcDay.range; - - -/***/ }), - -/***/ "./node_modules/d3-time/src/utcHour.js": -/*!*********************************************!*\ - !*** ./node_modules/d3-time/src/utcHour.js ***! - \*********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "utcHours": () => (/* binding */ utcHours) -/* harmony export */ }); -/* harmony import */ var _interval_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./interval.js */ "./node_modules/d3-time/src/interval.js"); -/* harmony import */ var _duration_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./duration.js */ "./node_modules/d3-time/src/duration.js"); - - - -var utcHour = (0,_interval_js__WEBPACK_IMPORTED_MODULE_0__["default"])(function(date) { - date.setUTCMinutes(0, 0, 0); -}, function(date, step) { - date.setTime(+date + step * _duration_js__WEBPACK_IMPORTED_MODULE_1__.durationHour); -}, function(start, end) { - return (end - start) / _duration_js__WEBPACK_IMPORTED_MODULE_1__.durationHour; -}, function(date) { - return date.getUTCHours(); -}); - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (utcHour); -var utcHours = utcHour.range; - - -/***/ }), - -/***/ "./node_modules/d3-time/src/utcMinute.js": -/*!***********************************************!*\ - !*** ./node_modules/d3-time/src/utcMinute.js ***! - \***********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "utcMinutes": () => (/* binding */ utcMinutes) -/* harmony export */ }); -/* harmony import */ var _interval_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./interval.js */ "./node_modules/d3-time/src/interval.js"); -/* harmony import */ var _duration_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./duration.js */ "./node_modules/d3-time/src/duration.js"); - - - -var utcMinute = (0,_interval_js__WEBPACK_IMPORTED_MODULE_0__["default"])(function(date) { - date.setUTCSeconds(0, 0); -}, function(date, step) { - date.setTime(+date + step * _duration_js__WEBPACK_IMPORTED_MODULE_1__.durationMinute); -}, function(start, end) { - return (end - start) / _duration_js__WEBPACK_IMPORTED_MODULE_1__.durationMinute; -}, function(date) { - return date.getUTCMinutes(); -}); - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (utcMinute); -var utcMinutes = utcMinute.range; - - -/***/ }), - -/***/ "./node_modules/d3-time/src/utcMonth.js": -/*!**********************************************!*\ - !*** ./node_modules/d3-time/src/utcMonth.js ***! - \**********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "utcMonths": () => (/* binding */ utcMonths) -/* harmony export */ }); -/* harmony import */ var _interval_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./interval.js */ "./node_modules/d3-time/src/interval.js"); - - -var utcMonth = (0,_interval_js__WEBPACK_IMPORTED_MODULE_0__["default"])(function(date) { - date.setUTCDate(1); - date.setUTCHours(0, 0, 0, 0); -}, function(date, step) { - date.setUTCMonth(date.getUTCMonth() + step); -}, function(start, end) { - return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12; -}, function(date) { - return date.getUTCMonth(); -}); - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (utcMonth); -var utcMonths = utcMonth.range; - - -/***/ }), - -/***/ "./node_modules/d3-time/src/utcWeek.js": -/*!*********************************************!*\ - !*** ./node_modules/d3-time/src/utcWeek.js ***! - \*********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "utcFriday": () => (/* binding */ utcFriday), -/* harmony export */ "utcFridays": () => (/* binding */ utcFridays), -/* harmony export */ "utcMonday": () => (/* binding */ utcMonday), -/* harmony export */ "utcMondays": () => (/* binding */ utcMondays), -/* harmony export */ "utcSaturday": () => (/* binding */ utcSaturday), -/* harmony export */ "utcSaturdays": () => (/* binding */ utcSaturdays), -/* harmony export */ "utcSunday": () => (/* binding */ utcSunday), -/* harmony export */ "utcSundays": () => (/* binding */ utcSundays), -/* harmony export */ "utcThursday": () => (/* binding */ utcThursday), -/* harmony export */ "utcThursdays": () => (/* binding */ utcThursdays), -/* harmony export */ "utcTuesday": () => (/* binding */ utcTuesday), -/* harmony export */ "utcTuesdays": () => (/* binding */ utcTuesdays), -/* harmony export */ "utcWednesday": () => (/* binding */ utcWednesday), -/* harmony export */ "utcWednesdays": () => (/* binding */ utcWednesdays) -/* harmony export */ }); -/* harmony import */ var _interval_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./interval.js */ "./node_modules/d3-time/src/interval.js"); -/* harmony import */ var _duration_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./duration.js */ "./node_modules/d3-time/src/duration.js"); - - - -function utcWeekday(i) { - return (0,_interval_js__WEBPACK_IMPORTED_MODULE_0__["default"])(function(date) { - date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7); - date.setUTCHours(0, 0, 0, 0); - }, function(date, step) { - date.setUTCDate(date.getUTCDate() + step * 7); - }, function(start, end) { - return (end - start) / _duration_js__WEBPACK_IMPORTED_MODULE_1__.durationWeek; - }); -} - -var utcSunday = utcWeekday(0); -var utcMonday = utcWeekday(1); -var utcTuesday = utcWeekday(2); -var utcWednesday = utcWeekday(3); -var utcThursday = utcWeekday(4); -var utcFriday = utcWeekday(5); -var utcSaturday = utcWeekday(6); - -var utcSundays = utcSunday.range; -var utcMondays = utcMonday.range; -var utcTuesdays = utcTuesday.range; -var utcWednesdays = utcWednesday.range; -var utcThursdays = utcThursday.range; -var utcFridays = utcFriday.range; -var utcSaturdays = utcSaturday.range; - - -/***/ }), - -/***/ "./node_modules/d3-time/src/utcYear.js": -/*!*********************************************!*\ - !*** ./node_modules/d3-time/src/utcYear.js ***! - \*********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "utcYears": () => (/* binding */ utcYears) -/* harmony export */ }); -/* harmony import */ var _interval_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./interval.js */ "./node_modules/d3-time/src/interval.js"); - - -var utcYear = (0,_interval_js__WEBPACK_IMPORTED_MODULE_0__["default"])(function(date) { - date.setUTCMonth(0, 1); - date.setUTCHours(0, 0, 0, 0); -}, function(date, step) { - date.setUTCFullYear(date.getUTCFullYear() + step); -}, function(start, end) { - return end.getUTCFullYear() - start.getUTCFullYear(); -}, function(date) { - return date.getUTCFullYear(); -}); - -// An optimized implementation for this simple case. -utcYear.every = function(k) { - return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : (0,_interval_js__WEBPACK_IMPORTED_MODULE_0__["default"])(function(date) { - date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k); - date.setUTCMonth(0, 1); - date.setUTCHours(0, 0, 0, 0); - }, function(date, step) { - date.setUTCFullYear(date.getUTCFullYear() + step * k); - }); -}; - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (utcYear); -var utcYears = utcYear.range; - - -/***/ }), - -/***/ "./node_modules/d3-time/src/week.js": -/*!******************************************!*\ - !*** ./node_modules/d3-time/src/week.js ***! - \******************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "friday": () => (/* binding */ friday), -/* harmony export */ "fridays": () => (/* binding */ fridays), -/* harmony export */ "monday": () => (/* binding */ monday), -/* harmony export */ "mondays": () => (/* binding */ mondays), -/* harmony export */ "saturday": () => (/* binding */ saturday), -/* harmony export */ "saturdays": () => (/* binding */ saturdays), -/* harmony export */ "sunday": () => (/* binding */ sunday), -/* harmony export */ "sundays": () => (/* binding */ sundays), -/* harmony export */ "thursday": () => (/* binding */ thursday), -/* harmony export */ "thursdays": () => (/* binding */ thursdays), -/* harmony export */ "tuesday": () => (/* binding */ tuesday), -/* harmony export */ "tuesdays": () => (/* binding */ tuesdays), -/* harmony export */ "wednesday": () => (/* binding */ wednesday), -/* harmony export */ "wednesdays": () => (/* binding */ wednesdays) -/* harmony export */ }); -/* harmony import */ var _interval_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./interval.js */ "./node_modules/d3-time/src/interval.js"); -/* harmony import */ var _duration_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./duration.js */ "./node_modules/d3-time/src/duration.js"); - - - -function weekday(i) { - return (0,_interval_js__WEBPACK_IMPORTED_MODULE_0__["default"])(function(date) { - date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7); - date.setHours(0, 0, 0, 0); - }, function(date, step) { - date.setDate(date.getDate() + step * 7); - }, function(start, end) { - return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * _duration_js__WEBPACK_IMPORTED_MODULE_1__.durationMinute) / _duration_js__WEBPACK_IMPORTED_MODULE_1__.durationWeek; - }); -} - -var sunday = weekday(0); -var monday = weekday(1); -var tuesday = weekday(2); -var wednesday = weekday(3); -var thursday = weekday(4); -var friday = weekday(5); -var saturday = weekday(6); - -var sundays = sunday.range; -var mondays = monday.range; -var tuesdays = tuesday.range; -var wednesdays = wednesday.range; -var thursdays = thursday.range; -var fridays = friday.range; -var saturdays = saturday.range; - - -/***/ }), - -/***/ "./node_modules/d3-time/src/year.js": -/*!******************************************!*\ - !*** ./node_modules/d3-time/src/year.js ***! - \******************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "years": () => (/* binding */ years) -/* harmony export */ }); -/* harmony import */ var _interval_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./interval.js */ "./node_modules/d3-time/src/interval.js"); - - -var year = (0,_interval_js__WEBPACK_IMPORTED_MODULE_0__["default"])(function(date) { - date.setMonth(0, 1); - date.setHours(0, 0, 0, 0); -}, function(date, step) { - date.setFullYear(date.getFullYear() + step); -}, function(start, end) { - return end.getFullYear() - start.getFullYear(); -}, function(date) { - return date.getFullYear(); -}); - -// An optimized implementation for this simple case. -year.every = function(k) { - return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : (0,_interval_js__WEBPACK_IMPORTED_MODULE_0__["default"])(function(date) { - date.setFullYear(Math.floor(date.getFullYear() / k) * k); - date.setMonth(0, 1); - date.setHours(0, 0, 0, 0); - }, function(date, step) { - date.setFullYear(date.getFullYear() + step * k); - }); -}; - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (year); -var years = year.range; - - -/***/ }), - -/***/ "./node_modules/d3-timer/src/index.js": -/*!********************************************!*\ - !*** ./node_modules/d3-timer/src/index.js ***! - \********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "interval": () => (/* reexport safe */ _interval_js__WEBPACK_IMPORTED_MODULE_2__["default"]), -/* harmony export */ "now": () => (/* reexport safe */ _timer_js__WEBPACK_IMPORTED_MODULE_0__.now), -/* harmony export */ "timeout": () => (/* reexport safe */ _timeout_js__WEBPACK_IMPORTED_MODULE_1__["default"]), -/* harmony export */ "timer": () => (/* reexport safe */ _timer_js__WEBPACK_IMPORTED_MODULE_0__.timer), -/* harmony export */ "timerFlush": () => (/* reexport safe */ _timer_js__WEBPACK_IMPORTED_MODULE_0__.timerFlush) -/* harmony export */ }); -/* harmony import */ var _timer_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./timer.js */ "./node_modules/d3-timer/src/timer.js"); -/* harmony import */ var _timeout_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./timeout.js */ "./node_modules/d3-timer/src/timeout.js"); -/* harmony import */ var _interval_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./interval.js */ "./node_modules/d3-timer/src/interval.js"); - - - - - - - -/***/ }), - -/***/ "./node_modules/d3-timer/src/interval.js": -/*!***********************************************!*\ - !*** ./node_modules/d3-timer/src/interval.js ***! - \***********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _timer_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./timer.js */ "./node_modules/d3-timer/src/timer.js"); - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(callback, delay, time) { - var t = new _timer_js__WEBPACK_IMPORTED_MODULE_0__.Timer, total = delay; - if (delay == null) return t.restart(callback, delay, time), t; - delay = +delay, time = time == null ? (0,_timer_js__WEBPACK_IMPORTED_MODULE_0__.now)() : +time; - t.restart(function tick(elapsed) { - elapsed += total; - t.restart(tick, total += delay, time); - callback(elapsed); - }, delay, time); - return t; -} - - -/***/ }), - -/***/ "./node_modules/d3-timer/src/timeout.js": -/*!**********************************************!*\ - !*** ./node_modules/d3-timer/src/timeout.js ***! - \**********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _timer_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./timer.js */ "./node_modules/d3-timer/src/timer.js"); - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(callback, delay, time) { - var t = new _timer_js__WEBPACK_IMPORTED_MODULE_0__.Timer; - delay = delay == null ? 0 : +delay; - t.restart(function(elapsed) { - t.stop(); - callback(elapsed + delay); - }, delay, time); - return t; -} - - -/***/ }), - -/***/ "./node_modules/d3-timer/src/timer.js": -/*!********************************************!*\ - !*** ./node_modules/d3-timer/src/timer.js ***! - \********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Timer": () => (/* binding */ Timer), -/* harmony export */ "now": () => (/* binding */ now), -/* harmony export */ "timer": () => (/* binding */ timer), -/* harmony export */ "timerFlush": () => (/* binding */ timerFlush) -/* harmony export */ }); -var frame = 0, // is an animation frame pending? - timeout = 0, // is a timeout pending? - interval = 0, // are any timers active? - pokeDelay = 1000, // how frequently we check for clock skew - taskHead, - taskTail, - clockLast = 0, - clockNow = 0, - clockSkew = 0, - clock = typeof performance === "object" && performance.now ? performance : Date, - setFrame = typeof window === "object" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); }; - -function now() { - return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew); -} - -function clearNow() { - clockNow = 0; -} - -function Timer() { - this._call = - this._time = - this._next = null; -} - -Timer.prototype = timer.prototype = { - constructor: Timer, - restart: function(callback, delay, time) { - if (typeof callback !== "function") throw new TypeError("callback is not a function"); - time = (time == null ? now() : +time) + (delay == null ? 0 : +delay); - if (!this._next && taskTail !== this) { - if (taskTail) taskTail._next = this; - else taskHead = this; - taskTail = this; - } - this._call = callback; - this._time = time; - sleep(); - }, - stop: function() { - if (this._call) { - this._call = null; - this._time = Infinity; - sleep(); - } - } -}; - -function timer(callback, delay, time) { - var t = new Timer; - t.restart(callback, delay, time); - return t; -} - -function timerFlush() { - now(); // Get the current time, if not already set. - ++frame; // Pretend we’ve set an alarm, if we haven’t already. - var t = taskHead, e; - while (t) { - if ((e = clockNow - t._time) >= 0) t._call.call(null, e); - t = t._next; - } - --frame; -} - -function wake() { - clockNow = (clockLast = clock.now()) + clockSkew; - frame = timeout = 0; - try { - timerFlush(); - } finally { - frame = 0; - nap(); - clockNow = 0; - } -} - -function poke() { - var now = clock.now(), delay = now - clockLast; - if (delay > pokeDelay) clockSkew -= delay, clockLast = now; -} - -function nap() { - var t0, t1 = taskHead, t2, time = Infinity; - while (t1) { - if (t1._call) { - if (time > t1._time) time = t1._time; - t0 = t1, t1 = t1._next; - } else { - t2 = t1._next, t1._next = null; - t1 = t0 ? t0._next = t2 : taskHead = t2; - } - } - taskTail = t0; - sleep(time); -} - -function sleep(time) { - if (frame) return; // Soonest alarm already set, or will be. - if (timeout) timeout = clearTimeout(timeout); - var delay = time - clockNow; // Strictly less than if we recomputed clockNow. - if (delay > 24) { - if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew); - if (interval) interval = clearInterval(interval); - } else { - if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay); - frame = 1, setFrame(wake); - } -} - - -/***/ }), - -/***/ "./node_modules/d3-transition/src/active.js": -/*!**************************************************!*\ - !*** ./node_modules/d3-transition/src/active.js ***! - \**************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _transition_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./transition/index.js */ "./node_modules/d3-transition/src/transition/index.js"); -/* harmony import */ var _transition_schedule_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./transition/schedule.js */ "./node_modules/d3-transition/src/transition/schedule.js"); - - - -var root = [null]; - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(node, name) { - var schedules = node.__transition, - schedule, - i; - - if (schedules) { - name = name == null ? null : name + ""; - for (i in schedules) { - if ((schedule = schedules[i]).state > _transition_schedule_js__WEBPACK_IMPORTED_MODULE_1__.SCHEDULED && schedule.name === name) { - return new _transition_index_js__WEBPACK_IMPORTED_MODULE_0__.Transition([[node]], root, name, +i); - } - } - } - - return null; -} - - -/***/ }), - -/***/ "./node_modules/d3-transition/src/index.js": -/*!*************************************************!*\ - !*** ./node_modules/d3-transition/src/index.js ***! - \*************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "active": () => (/* reexport safe */ _active_js__WEBPACK_IMPORTED_MODULE_2__["default"]), -/* harmony export */ "interrupt": () => (/* reexport safe */ _interrupt_js__WEBPACK_IMPORTED_MODULE_3__["default"]), -/* harmony export */ "transition": () => (/* reexport safe */ _transition_index_js__WEBPACK_IMPORTED_MODULE_1__["default"]) -/* harmony export */ }); -/* harmony import */ var _selection_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./selection/index.js */ "./node_modules/d3-transition/src/selection/index.js"); -/* harmony import */ var _transition_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./transition/index.js */ "./node_modules/d3-transition/src/transition/index.js"); -/* harmony import */ var _active_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./active.js */ "./node_modules/d3-transition/src/active.js"); -/* harmony import */ var _interrupt_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./interrupt.js */ "./node_modules/d3-transition/src/interrupt.js"); - - - - - - -/***/ }), - -/***/ "./node_modules/d3-transition/src/interrupt.js": -/*!*****************************************************!*\ - !*** ./node_modules/d3-transition/src/interrupt.js ***! - \*****************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _transition_schedule_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./transition/schedule.js */ "./node_modules/d3-transition/src/transition/schedule.js"); - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(node, name) { - var schedules = node.__transition, - schedule, - active, - empty = true, - i; - - if (!schedules) return; - - name = name == null ? null : name + ""; - - for (i in schedules) { - if ((schedule = schedules[i]).name !== name) { empty = false; continue; } - active = schedule.state > _transition_schedule_js__WEBPACK_IMPORTED_MODULE_0__.STARTING && schedule.state < _transition_schedule_js__WEBPACK_IMPORTED_MODULE_0__.ENDING; - schedule.state = _transition_schedule_js__WEBPACK_IMPORTED_MODULE_0__.ENDED; - schedule.timer.stop(); - schedule.on.call(active ? "interrupt" : "cancel", node, node.__data__, schedule.index, schedule.group); - delete schedules[i]; - } - - if (empty) delete node.__transition; -} - - -/***/ }), - -/***/ "./node_modules/d3-transition/src/selection/index.js": -/*!***********************************************************!*\ - !*** ./node_modules/d3-transition/src/selection/index.js ***! - \***********************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-selection */ "./node_modules/d3-selection/src/selection/index.js"); -/* harmony import */ var _interrupt_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./interrupt.js */ "./node_modules/d3-transition/src/selection/interrupt.js"); -/* harmony import */ var _transition_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./transition.js */ "./node_modules/d3-transition/src/selection/transition.js"); - - - - -d3_selection__WEBPACK_IMPORTED_MODULE_2__["default"].prototype.interrupt = _interrupt_js__WEBPACK_IMPORTED_MODULE_0__["default"]; -d3_selection__WEBPACK_IMPORTED_MODULE_2__["default"].prototype.transition = _transition_js__WEBPACK_IMPORTED_MODULE_1__["default"]; - - -/***/ }), - -/***/ "./node_modules/d3-transition/src/selection/interrupt.js": -/*!***************************************************************!*\ - !*** ./node_modules/d3-transition/src/selection/interrupt.js ***! - \***************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _interrupt_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../interrupt.js */ "./node_modules/d3-transition/src/interrupt.js"); - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(name) { - return this.each(function() { - (0,_interrupt_js__WEBPACK_IMPORTED_MODULE_0__["default"])(this, name); - }); -} - - -/***/ }), - -/***/ "./node_modules/d3-transition/src/selection/transition.js": -/*!****************************************************************!*\ - !*** ./node_modules/d3-transition/src/selection/transition.js ***! - \****************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _transition_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../transition/index.js */ "./node_modules/d3-transition/src/transition/index.js"); -/* harmony import */ var _transition_schedule_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../transition/schedule.js */ "./node_modules/d3-transition/src/transition/schedule.js"); -/* harmony import */ var d3_ease__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-ease */ "./node_modules/d3-ease/src/cubic.js"); -/* harmony import */ var d3_timer__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! d3-timer */ "./node_modules/d3-timer/src/timer.js"); - - - - - -var defaultTiming = { - time: null, // Set on use. - delay: 0, - duration: 250, - ease: d3_ease__WEBPACK_IMPORTED_MODULE_2__.cubicInOut -}; - -function inherit(node, id) { - var timing; - while (!(timing = node.__transition) || !(timing = timing[id])) { - if (!(node = node.parentNode)) { - return defaultTiming.time = (0,d3_timer__WEBPACK_IMPORTED_MODULE_3__.now)(), defaultTiming; - } - } - return timing; -} - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(name) { - var id, - timing; - - if (name instanceof _transition_index_js__WEBPACK_IMPORTED_MODULE_0__.Transition) { - id = name._id, name = name._name; - } else { - id = (0,_transition_index_js__WEBPACK_IMPORTED_MODULE_0__.newId)(), (timing = defaultTiming).time = (0,d3_timer__WEBPACK_IMPORTED_MODULE_3__.now)(), name = name == null ? null : name + ""; - } - - for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) { - for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) { - if (node = group[i]) { - (0,_transition_schedule_js__WEBPACK_IMPORTED_MODULE_1__["default"])(node, name, id, i, group, timing || inherit(node, id)); - } - } - } - - return new _transition_index_js__WEBPACK_IMPORTED_MODULE_0__.Transition(groups, this._parents, name, id); -} - - -/***/ }), - -/***/ "./node_modules/d3-transition/src/transition/attr.js": -/*!***********************************************************!*\ - !*** ./node_modules/d3-transition/src/transition/attr.js ***! - \***********************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var d3_interpolate__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! d3-interpolate */ "./node_modules/d3-interpolate/src/transform/index.js"); -/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-selection */ "./node_modules/d3-selection/src/namespace.js"); -/* harmony import */ var _tween_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./tween.js */ "./node_modules/d3-transition/src/transition/tween.js"); -/* harmony import */ var _interpolate_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./interpolate.js */ "./node_modules/d3-transition/src/transition/interpolate.js"); - - - - - -function attrRemove(name) { - return function() { - this.removeAttribute(name); - }; -} - -function attrRemoveNS(fullname) { - return function() { - this.removeAttributeNS(fullname.space, fullname.local); - }; -} - -function attrConstant(name, interpolate, value1) { - var string00, - string1 = value1 + "", - interpolate0; - return function() { - var string0 = this.getAttribute(name); - return string0 === string1 ? null - : string0 === string00 ? interpolate0 - : interpolate0 = interpolate(string00 = string0, value1); - }; -} - -function attrConstantNS(fullname, interpolate, value1) { - var string00, - string1 = value1 + "", - interpolate0; - return function() { - var string0 = this.getAttributeNS(fullname.space, fullname.local); - return string0 === string1 ? null - : string0 === string00 ? interpolate0 - : interpolate0 = interpolate(string00 = string0, value1); - }; -} - -function attrFunction(name, interpolate, value) { - var string00, - string10, - interpolate0; - return function() { - var string0, value1 = value(this), string1; - if (value1 == null) return void this.removeAttribute(name); - string0 = this.getAttribute(name); - string1 = value1 + ""; - return string0 === string1 ? null - : string0 === string00 && string1 === string10 ? interpolate0 - : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1)); - }; -} - -function attrFunctionNS(fullname, interpolate, value) { - var string00, - string10, - interpolate0; - return function() { - var string0, value1 = value(this), string1; - if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local); - string0 = this.getAttributeNS(fullname.space, fullname.local); - string1 = value1 + ""; - return string0 === string1 ? null - : string0 === string00 && string1 === string10 ? interpolate0 - : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1)); - }; -} - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(name, value) { - var fullname = (0,d3_selection__WEBPACK_IMPORTED_MODULE_2__["default"])(name), i = fullname === "transform" ? d3_interpolate__WEBPACK_IMPORTED_MODULE_3__.interpolateTransformSvg : _interpolate_js__WEBPACK_IMPORTED_MODULE_1__["default"]; - return this.attrTween(name, typeof value === "function" - ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, (0,_tween_js__WEBPACK_IMPORTED_MODULE_0__.tweenValue)(this, "attr." + name, value)) - : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname) - : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value)); -} - - -/***/ }), - -/***/ "./node_modules/d3-transition/src/transition/attrTween.js": -/*!****************************************************************!*\ - !*** ./node_modules/d3-transition/src/transition/attrTween.js ***! - \****************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-selection */ "./node_modules/d3-selection/src/namespace.js"); - - -function attrInterpolate(name, i) { - return function(t) { - this.setAttribute(name, i.call(this, t)); - }; -} - -function attrInterpolateNS(fullname, i) { - return function(t) { - this.setAttributeNS(fullname.space, fullname.local, i.call(this, t)); - }; -} - -function attrTweenNS(fullname, value) { - var t0, i0; - function tween() { - var i = value.apply(this, arguments); - if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i); - return t0; - } - tween._value = value; - return tween; -} - -function attrTween(name, value) { - var t0, i0; - function tween() { - var i = value.apply(this, arguments); - if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i); - return t0; - } - tween._value = value; - return tween; -} - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(name, value) { - var key = "attr." + name; - if (arguments.length < 2) return (key = this.tween(key)) && key._value; - if (value == null) return this.tween(key, null); - if (typeof value !== "function") throw new Error; - var fullname = (0,d3_selection__WEBPACK_IMPORTED_MODULE_0__["default"])(name); - return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value)); -} - - -/***/ }), - -/***/ "./node_modules/d3-transition/src/transition/delay.js": -/*!************************************************************!*\ - !*** ./node_modules/d3-transition/src/transition/delay.js ***! - \************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _schedule_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./schedule.js */ "./node_modules/d3-transition/src/transition/schedule.js"); - - -function delayFunction(id, value) { - return function() { - (0,_schedule_js__WEBPACK_IMPORTED_MODULE_0__.init)(this, id).delay = +value.apply(this, arguments); - }; -} - -function delayConstant(id, value) { - return value = +value, function() { - (0,_schedule_js__WEBPACK_IMPORTED_MODULE_0__.init)(this, id).delay = value; - }; -} - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(value) { - var id = this._id; - - return arguments.length - ? this.each((typeof value === "function" - ? delayFunction - : delayConstant)(id, value)) - : (0,_schedule_js__WEBPACK_IMPORTED_MODULE_0__.get)(this.node(), id).delay; -} - - -/***/ }), - -/***/ "./node_modules/d3-transition/src/transition/duration.js": -/*!***************************************************************!*\ - !*** ./node_modules/d3-transition/src/transition/duration.js ***! - \***************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _schedule_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./schedule.js */ "./node_modules/d3-transition/src/transition/schedule.js"); - - -function durationFunction(id, value) { - return function() { - (0,_schedule_js__WEBPACK_IMPORTED_MODULE_0__.set)(this, id).duration = +value.apply(this, arguments); - }; -} - -function durationConstant(id, value) { - return value = +value, function() { - (0,_schedule_js__WEBPACK_IMPORTED_MODULE_0__.set)(this, id).duration = value; - }; -} - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(value) { - var id = this._id; - - return arguments.length - ? this.each((typeof value === "function" - ? durationFunction - : durationConstant)(id, value)) - : (0,_schedule_js__WEBPACK_IMPORTED_MODULE_0__.get)(this.node(), id).duration; -} - - -/***/ }), - -/***/ "./node_modules/d3-transition/src/transition/ease.js": -/*!***********************************************************!*\ - !*** ./node_modules/d3-transition/src/transition/ease.js ***! - \***********************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _schedule_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./schedule.js */ "./node_modules/d3-transition/src/transition/schedule.js"); - - -function easeConstant(id, value) { - if (typeof value !== "function") throw new Error; - return function() { - (0,_schedule_js__WEBPACK_IMPORTED_MODULE_0__.set)(this, id).ease = value; - }; -} - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(value) { - var id = this._id; - - return arguments.length - ? this.each(easeConstant(id, value)) - : (0,_schedule_js__WEBPACK_IMPORTED_MODULE_0__.get)(this.node(), id).ease; -} - - -/***/ }), - -/***/ "./node_modules/d3-transition/src/transition/end.js": -/*!**********************************************************!*\ - !*** ./node_modules/d3-transition/src/transition/end.js ***! - \**********************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _schedule_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./schedule.js */ "./node_modules/d3-transition/src/transition/schedule.js"); - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() { - var on0, on1, that = this, id = that._id, size = that.size(); - return new Promise(function(resolve, reject) { - var cancel = {value: reject}, - end = {value: function() { if (--size === 0) resolve(); }}; - - that.each(function() { - var schedule = (0,_schedule_js__WEBPACK_IMPORTED_MODULE_0__.set)(this, id), - on = schedule.on; - - // If this node shared a dispatch with the previous node, - // just assign the updated shared dispatch and we’re done! - // Otherwise, copy-on-write. - if (on !== on0) { - on1 = (on0 = on).copy(); - on1._.cancel.push(cancel); - on1._.interrupt.push(cancel); - on1._.end.push(end); - } - - schedule.on = on1; - }); - }); -} - - -/***/ }), - -/***/ "./node_modules/d3-transition/src/transition/filter.js": -/*!*************************************************************!*\ - !*** ./node_modules/d3-transition/src/transition/filter.js ***! - \*************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-selection */ "./node_modules/d3-selection/src/matcher.js"); -/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index.js */ "./node_modules/d3-transition/src/transition/index.js"); - - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(match) { - if (typeof match !== "function") match = (0,d3_selection__WEBPACK_IMPORTED_MODULE_1__["default"])(match); - - for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) { - for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) { - if ((node = group[i]) && match.call(node, node.__data__, i, group)) { - subgroup.push(node); - } - } - } - - return new _index_js__WEBPACK_IMPORTED_MODULE_0__.Transition(subgroups, this._parents, this._name, this._id); -} - - -/***/ }), - -/***/ "./node_modules/d3-transition/src/transition/index.js": -/*!************************************************************!*\ - !*** ./node_modules/d3-transition/src/transition/index.js ***! - \************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Transition": () => (/* binding */ Transition), -/* harmony export */ "default": () => (/* binding */ transition), -/* harmony export */ "newId": () => (/* binding */ newId) -/* harmony export */ }); -/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! d3-selection */ "./node_modules/d3-selection/src/selection/index.js"); -/* harmony import */ var _attr_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./attr.js */ "./node_modules/d3-transition/src/transition/attr.js"); -/* harmony import */ var _attrTween_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./attrTween.js */ "./node_modules/d3-transition/src/transition/attrTween.js"); -/* harmony import */ var _delay_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./delay.js */ "./node_modules/d3-transition/src/transition/delay.js"); -/* harmony import */ var _duration_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./duration.js */ "./node_modules/d3-transition/src/transition/duration.js"); -/* harmony import */ var _ease_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./ease.js */ "./node_modules/d3-transition/src/transition/ease.js"); -/* harmony import */ var _filter_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./filter.js */ "./node_modules/d3-transition/src/transition/filter.js"); -/* harmony import */ var _merge_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./merge.js */ "./node_modules/d3-transition/src/transition/merge.js"); -/* harmony import */ var _on_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./on.js */ "./node_modules/d3-transition/src/transition/on.js"); -/* harmony import */ var _remove_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./remove.js */ "./node_modules/d3-transition/src/transition/remove.js"); -/* harmony import */ var _select_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./select.js */ "./node_modules/d3-transition/src/transition/select.js"); -/* harmony import */ var _selectAll_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./selectAll.js */ "./node_modules/d3-transition/src/transition/selectAll.js"); -/* harmony import */ var _selection_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./selection.js */ "./node_modules/d3-transition/src/transition/selection.js"); -/* harmony import */ var _style_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./style.js */ "./node_modules/d3-transition/src/transition/style.js"); -/* harmony import */ var _styleTween_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./styleTween.js */ "./node_modules/d3-transition/src/transition/styleTween.js"); -/* harmony import */ var _text_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./text.js */ "./node_modules/d3-transition/src/transition/text.js"); -/* harmony import */ var _textTween_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./textTween.js */ "./node_modules/d3-transition/src/transition/textTween.js"); -/* harmony import */ var _transition_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./transition.js */ "./node_modules/d3-transition/src/transition/transition.js"); -/* harmony import */ var _tween_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./tween.js */ "./node_modules/d3-transition/src/transition/tween.js"); -/* harmony import */ var _end_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./end.js */ "./node_modules/d3-transition/src/transition/end.js"); - - - - - - - - - - - - - - - - - - - - - -var id = 0; - -function Transition(groups, parents, name, id) { - this._groups = groups; - this._parents = parents; - this._name = name; - this._id = id; -} - -function transition(name) { - return (0,d3_selection__WEBPACK_IMPORTED_MODULE_19__["default"])().transition(name); -} - -function newId() { - return ++id; -} - -var selection_prototype = d3_selection__WEBPACK_IMPORTED_MODULE_19__["default"].prototype; - -Transition.prototype = transition.prototype = { - constructor: Transition, - select: _select_js__WEBPACK_IMPORTED_MODULE_9__["default"], - selectAll: _selectAll_js__WEBPACK_IMPORTED_MODULE_10__["default"], - filter: _filter_js__WEBPACK_IMPORTED_MODULE_5__["default"], - merge: _merge_js__WEBPACK_IMPORTED_MODULE_6__["default"], - selection: _selection_js__WEBPACK_IMPORTED_MODULE_11__["default"], - transition: _transition_js__WEBPACK_IMPORTED_MODULE_16__["default"], - call: selection_prototype.call, - nodes: selection_prototype.nodes, - node: selection_prototype.node, - size: selection_prototype.size, - empty: selection_prototype.empty, - each: selection_prototype.each, - on: _on_js__WEBPACK_IMPORTED_MODULE_7__["default"], - attr: _attr_js__WEBPACK_IMPORTED_MODULE_0__["default"], - attrTween: _attrTween_js__WEBPACK_IMPORTED_MODULE_1__["default"], - style: _style_js__WEBPACK_IMPORTED_MODULE_12__["default"], - styleTween: _styleTween_js__WEBPACK_IMPORTED_MODULE_13__["default"], - text: _text_js__WEBPACK_IMPORTED_MODULE_14__["default"], - textTween: _textTween_js__WEBPACK_IMPORTED_MODULE_15__["default"], - remove: _remove_js__WEBPACK_IMPORTED_MODULE_8__["default"], - tween: _tween_js__WEBPACK_IMPORTED_MODULE_17__["default"], - delay: _delay_js__WEBPACK_IMPORTED_MODULE_2__["default"], - duration: _duration_js__WEBPACK_IMPORTED_MODULE_3__["default"], - ease: _ease_js__WEBPACK_IMPORTED_MODULE_4__["default"], - end: _end_js__WEBPACK_IMPORTED_MODULE_18__["default"] -}; - - -/***/ }), - -/***/ "./node_modules/d3-transition/src/transition/interpolate.js": -/*!******************************************************************!*\ - !*** ./node_modules/d3-transition/src/transition/interpolate.js ***! - \******************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var d3_color__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-color */ "./node_modules/d3-color/src/color.js"); -/* harmony import */ var d3_interpolate__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-interpolate */ "./node_modules/d3-interpolate/src/number.js"); -/* harmony import */ var d3_interpolate__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-interpolate */ "./node_modules/d3-interpolate/src/rgb.js"); -/* harmony import */ var d3_interpolate__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! d3-interpolate */ "./node_modules/d3-interpolate/src/string.js"); - - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(a, b) { - var c; - return (typeof b === "number" ? d3_interpolate__WEBPACK_IMPORTED_MODULE_0__["default"] - : b instanceof d3_color__WEBPACK_IMPORTED_MODULE_1__["default"] ? d3_interpolate__WEBPACK_IMPORTED_MODULE_2__["default"] - : (c = (0,d3_color__WEBPACK_IMPORTED_MODULE_1__["default"])(b)) ? (b = c, d3_interpolate__WEBPACK_IMPORTED_MODULE_2__["default"]) - : d3_interpolate__WEBPACK_IMPORTED_MODULE_3__["default"])(a, b); -} - - -/***/ }), - -/***/ "./node_modules/d3-transition/src/transition/merge.js": -/*!************************************************************!*\ - !*** ./node_modules/d3-transition/src/transition/merge.js ***! - \************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index.js */ "./node_modules/d3-transition/src/transition/index.js"); - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(transition) { - if (transition._id !== this._id) throw new Error; - - 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) { - for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) { - if (node = group0[i] || group1[i]) { - merge[i] = node; - } - } - } - - for (; j < m0; ++j) { - merges[j] = groups0[j]; - } - - return new _index_js__WEBPACK_IMPORTED_MODULE_0__.Transition(merges, this._parents, this._name, this._id); -} - - -/***/ }), - -/***/ "./node_modules/d3-transition/src/transition/on.js": -/*!*********************************************************!*\ - !*** ./node_modules/d3-transition/src/transition/on.js ***! - \*********************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _schedule_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./schedule.js */ "./node_modules/d3-transition/src/transition/schedule.js"); - - -function start(name) { - return (name + "").trim().split(/^|\s+/).every(function(t) { - var i = t.indexOf("."); - if (i >= 0) t = t.slice(0, i); - return !t || t === "start"; - }); -} - -function onFunction(id, name, listener) { - var on0, on1, sit = start(name) ? _schedule_js__WEBPACK_IMPORTED_MODULE_0__.init : _schedule_js__WEBPACK_IMPORTED_MODULE_0__.set; - return function() { - var schedule = sit(this, id), - on = schedule.on; - - // If this node shared a dispatch with the previous node, - // just assign the updated shared dispatch and we’re done! - // Otherwise, copy-on-write. - if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener); - - schedule.on = on1; - }; -} - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(name, listener) { - var id = this._id; - - return arguments.length < 2 - ? (0,_schedule_js__WEBPACK_IMPORTED_MODULE_0__.get)(this.node(), id).on.on(name) - : this.each(onFunction(id, name, listener)); -} - - -/***/ }), - -/***/ "./node_modules/d3-transition/src/transition/remove.js": -/*!*************************************************************!*\ - !*** ./node_modules/d3-transition/src/transition/remove.js ***! - \*************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -function removeFunction(id) { - return function() { - var parent = this.parentNode; - for (var i in this.__transition) if (+i !== id) return; - if (parent) parent.removeChild(this); - }; -} - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() { - return this.on("end.remove", removeFunction(this._id)); -} - - -/***/ }), - -/***/ "./node_modules/d3-transition/src/transition/schedule.js": -/*!***************************************************************!*\ - !*** ./node_modules/d3-transition/src/transition/schedule.js ***! - \***************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "CREATED": () => (/* binding */ CREATED), -/* harmony export */ "ENDED": () => (/* binding */ ENDED), -/* harmony export */ "ENDING": () => (/* binding */ ENDING), -/* harmony export */ "RUNNING": () => (/* binding */ RUNNING), -/* harmony export */ "SCHEDULED": () => (/* binding */ SCHEDULED), -/* harmony export */ "STARTED": () => (/* binding */ STARTED), -/* harmony export */ "STARTING": () => (/* binding */ STARTING), -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "get": () => (/* binding */ get), -/* harmony export */ "init": () => (/* binding */ init), -/* harmony export */ "set": () => (/* binding */ set) -/* harmony export */ }); -/* harmony import */ var d3_dispatch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-dispatch */ "./node_modules/d3-dispatch/src/dispatch.js"); -/* harmony import */ var d3_timer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-timer */ "./node_modules/d3-timer/src/timer.js"); -/* harmony import */ var d3_timer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-timer */ "./node_modules/d3-timer/src/timeout.js"); - - - -var emptyOn = (0,d3_dispatch__WEBPACK_IMPORTED_MODULE_0__["default"])("start", "end", "cancel", "interrupt"); -var emptyTween = []; - -var CREATED = 0; -var SCHEDULED = 1; -var STARTING = 2; -var STARTED = 3; -var RUNNING = 4; -var ENDING = 5; -var ENDED = 6; - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(node, name, id, index, group, timing) { - var schedules = node.__transition; - if (!schedules) node.__transition = {}; - else if (id in schedules) return; - create(node, id, { - name: name, - index: index, // For context during callback. - group: group, // For context during callback. - on: emptyOn, - tween: emptyTween, - time: timing.time, - delay: timing.delay, - duration: timing.duration, - ease: timing.ease, - timer: null, - state: CREATED - }); -} - -function init(node, id) { - var schedule = get(node, id); - if (schedule.state > CREATED) throw new Error("too late; already scheduled"); - return schedule; -} - -function set(node, id) { - var schedule = get(node, id); - if (schedule.state > STARTED) throw new Error("too late; already running"); - return schedule; -} - -function get(node, id) { - var schedule = node.__transition; - if (!schedule || !(schedule = schedule[id])) throw new Error("transition not found"); - return schedule; -} - -function create(node, id, self) { - var schedules = node.__transition, - tween; - - // Initialize the self timer when the transition is created. - // Note the actual delay is not known until the first callback! - schedules[id] = self; - self.timer = (0,d3_timer__WEBPACK_IMPORTED_MODULE_1__.timer)(schedule, 0, self.time); - - function schedule(elapsed) { - self.state = SCHEDULED; - self.timer.restart(start, self.delay, self.time); - - // If the elapsed delay is less than our first sleep, start immediately. - if (self.delay <= elapsed) start(elapsed - self.delay); - } - - function start(elapsed) { - var i, j, n, o; - - // If the state is not SCHEDULED, then we previously errored on start. - if (self.state !== SCHEDULED) return stop(); - - for (i in schedules) { - o = schedules[i]; - if (o.name !== self.name) continue; - - // While this element already has a starting transition during this frame, - // defer starting an interrupting transition until that transition has a - // chance to tick (and possibly end); see d3/d3-transition#54! - if (o.state === STARTED) return (0,d3_timer__WEBPACK_IMPORTED_MODULE_2__["default"])(start); - - // Interrupt the active transition, if any. - if (o.state === RUNNING) { - o.state = ENDED; - o.timer.stop(); - o.on.call("interrupt", node, node.__data__, o.index, o.group); - delete schedules[i]; - } - - // Cancel any pre-empted transitions. - else if (+i < id) { - o.state = ENDED; - o.timer.stop(); - o.on.call("cancel", node, node.__data__, o.index, o.group); - delete schedules[i]; - } - } - - // Defer the first tick to end of the current frame; see d3/d3#1576. - // Note the transition may be canceled after start and before the first tick! - // Note this must be scheduled before the start event; see d3/d3-transition#16! - // Assuming this is successful, subsequent callbacks go straight to tick. - (0,d3_timer__WEBPACK_IMPORTED_MODULE_2__["default"])(function() { - if (self.state === STARTED) { - self.state = RUNNING; - self.timer.restart(tick, self.delay, self.time); - tick(elapsed); - } - }); - - // Dispatch the start event. - // Note this must be done before the tween are initialized. - self.state = STARTING; - self.on.call("start", node, node.__data__, self.index, self.group); - if (self.state !== STARTING) return; // interrupted - self.state = STARTED; - - // Initialize the tween, deleting null tween. - tween = new Array(n = self.tween.length); - for (i = 0, j = -1; i < n; ++i) { - if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) { - tween[++j] = o; - } - } - tween.length = j + 1; - } - - function tick(elapsed) { - var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1), - i = -1, - n = tween.length; - - while (++i < n) { - tween[i].call(node, t); - } - - // Dispatch the end event. - if (self.state === ENDING) { - self.on.call("end", node, node.__data__, self.index, self.group); - stop(); - } - } - - function stop() { - self.state = ENDED; - self.timer.stop(); - delete schedules[id]; - for (var i in schedules) return; // eslint-disable-line no-unused-vars - delete node.__transition; - } -} - - -/***/ }), - -/***/ "./node_modules/d3-transition/src/transition/select.js": -/*!*************************************************************!*\ - !*** ./node_modules/d3-transition/src/transition/select.js ***! - \*************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-selection */ "./node_modules/d3-selection/src/selector.js"); -/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index.js */ "./node_modules/d3-transition/src/transition/index.js"); -/* harmony import */ var _schedule_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./schedule.js */ "./node_modules/d3-transition/src/transition/schedule.js"); - - - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(select) { - var name = this._name, - id = this._id; - - if (typeof select !== "function") select = (0,d3_selection__WEBPACK_IMPORTED_MODULE_2__["default"])(select); - - for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) { - for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) { - if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) { - if ("__data__" in node) subnode.__data__ = node.__data__; - subgroup[i] = subnode; - (0,_schedule_js__WEBPACK_IMPORTED_MODULE_1__["default"])(subgroup[i], name, id, i, subgroup, (0,_schedule_js__WEBPACK_IMPORTED_MODULE_1__.get)(node, id)); - } - } - } - - return new _index_js__WEBPACK_IMPORTED_MODULE_0__.Transition(subgroups, this._parents, name, id); -} - - -/***/ }), - -/***/ "./node_modules/d3-transition/src/transition/selectAll.js": -/*!****************************************************************!*\ - !*** ./node_modules/d3-transition/src/transition/selectAll.js ***! - \****************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-selection */ "./node_modules/d3-selection/src/selectorAll.js"); -/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index.js */ "./node_modules/d3-transition/src/transition/index.js"); -/* harmony import */ var _schedule_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./schedule.js */ "./node_modules/d3-transition/src/transition/schedule.js"); - - - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(select) { - var name = this._name, - id = this._id; - - if (typeof select !== "function") select = (0,d3_selection__WEBPACK_IMPORTED_MODULE_2__["default"])(select); - - for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) { - for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) { - if (node = group[i]) { - 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) { - if (child = children[k]) { - (0,_schedule_js__WEBPACK_IMPORTED_MODULE_1__["default"])(child, name, id, k, children, inherit); - } - } - subgroups.push(children); - parents.push(node); - } - } - } - - return new _index_js__WEBPACK_IMPORTED_MODULE_0__.Transition(subgroups, parents, name, id); -} - - -/***/ }), - -/***/ "./node_modules/d3-transition/src/transition/selection.js": -/*!****************************************************************!*\ - !*** ./node_modules/d3-transition/src/transition/selection.js ***! - \****************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-selection */ "./node_modules/d3-selection/src/selection/index.js"); - - -var Selection = d3_selection__WEBPACK_IMPORTED_MODULE_0__["default"].prototype.constructor; - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() { - return new Selection(this._groups, this._parents); -} - - -/***/ }), - -/***/ "./node_modules/d3-transition/src/transition/style.js": -/*!************************************************************!*\ - !*** ./node_modules/d3-transition/src/transition/style.js ***! - \************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var d3_interpolate__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! d3-interpolate */ "./node_modules/d3-interpolate/src/transform/index.js"); -/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! d3-selection */ "./node_modules/d3-selection/src/selection/style.js"); -/* harmony import */ var _schedule_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./schedule.js */ "./node_modules/d3-transition/src/transition/schedule.js"); -/* harmony import */ var _tween_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tween.js */ "./node_modules/d3-transition/src/transition/tween.js"); -/* harmony import */ var _interpolate_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./interpolate.js */ "./node_modules/d3-transition/src/transition/interpolate.js"); - - - - - - -function styleNull(name, interpolate) { - var string00, - string10, - interpolate0; - return function() { - var string0 = (0,d3_selection__WEBPACK_IMPORTED_MODULE_3__.styleValue)(this, name), - string1 = (this.style.removeProperty(name), (0,d3_selection__WEBPACK_IMPORTED_MODULE_3__.styleValue)(this, name)); - return string0 === string1 ? null - : string0 === string00 && string1 === string10 ? interpolate0 - : interpolate0 = interpolate(string00 = string0, string10 = string1); - }; -} - -function styleRemove(name) { - return function() { - this.style.removeProperty(name); - }; -} - -function styleConstant(name, interpolate, value1) { - var string00, - string1 = value1 + "", - interpolate0; - return function() { - var string0 = (0,d3_selection__WEBPACK_IMPORTED_MODULE_3__.styleValue)(this, name); - return string0 === string1 ? null - : string0 === string00 ? interpolate0 - : interpolate0 = interpolate(string00 = string0, value1); - }; -} - -function styleFunction(name, interpolate, value) { - var string00, - string10, - interpolate0; - return function() { - var string0 = (0,d3_selection__WEBPACK_IMPORTED_MODULE_3__.styleValue)(this, name), - value1 = value(this), - string1 = value1 + ""; - if (value1 == null) string1 = value1 = (this.style.removeProperty(name), (0,d3_selection__WEBPACK_IMPORTED_MODULE_3__.styleValue)(this, name)); - return string0 === string1 ? null - : string0 === string00 && string1 === string10 ? interpolate0 - : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1)); - }; -} - -function styleMaybeRemove(id, name) { - var on0, on1, listener0, key = "style." + name, event = "end." + key, remove; - return function() { - var schedule = (0,_schedule_js__WEBPACK_IMPORTED_MODULE_0__.set)(this, id), - on = schedule.on, - listener = schedule.value[key] == null ? remove || (remove = styleRemove(name)) : undefined; - - // If this node shared a dispatch with the previous node, - // just assign the updated shared dispatch and we’re done! - // Otherwise, copy-on-write. - if (on !== on0 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener); - - schedule.on = on1; - }; -} - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(name, value, priority) { - var i = (name += "") === "transform" ? d3_interpolate__WEBPACK_IMPORTED_MODULE_4__.interpolateTransformCss : _interpolate_js__WEBPACK_IMPORTED_MODULE_2__["default"]; - return value == null ? this - .styleTween(name, styleNull(name, i)) - .on("end.style." + name, styleRemove(name)) - : typeof value === "function" ? this - .styleTween(name, styleFunction(name, i, (0,_tween_js__WEBPACK_IMPORTED_MODULE_1__.tweenValue)(this, "style." + name, value))) - .each(styleMaybeRemove(this._id, name)) - : this - .styleTween(name, styleConstant(name, i, value), priority) - .on("end.style." + name, null); -} - - -/***/ }), - -/***/ "./node_modules/d3-transition/src/transition/styleTween.js": -/*!*****************************************************************!*\ - !*** ./node_modules/d3-transition/src/transition/styleTween.js ***! - \*****************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -function styleInterpolate(name, i, priority) { - return function(t) { - this.style.setProperty(name, i.call(this, t), priority); - }; -} - -function styleTween(name, value, priority) { - var t, i0; - function tween() { - var i = value.apply(this, arguments); - if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority); - return t; - } - tween._value = value; - return tween; -} - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(name, value, priority) { - var key = "style." + (name += ""); - if (arguments.length < 2) return (key = this.tween(key)) && key._value; - if (value == null) return this.tween(key, null); - if (typeof value !== "function") throw new Error; - return this.tween(key, styleTween(name, value, priority == null ? "" : priority)); -} - - -/***/ }), - -/***/ "./node_modules/d3-transition/src/transition/text.js": -/*!***********************************************************!*\ - !*** ./node_modules/d3-transition/src/transition/text.js ***! - \***********************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _tween_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./tween.js */ "./node_modules/d3-transition/src/transition/tween.js"); - - -function textConstant(value) { - return function() { - this.textContent = value; - }; -} - -function textFunction(value) { - return function() { - var value1 = value(this); - this.textContent = value1 == null ? "" : value1; - }; -} - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(value) { - return this.tween("text", typeof value === "function" - ? textFunction((0,_tween_js__WEBPACK_IMPORTED_MODULE_0__.tweenValue)(this, "text", value)) - : textConstant(value == null ? "" : value + "")); -} - - -/***/ }), - -/***/ "./node_modules/d3-transition/src/transition/textTween.js": -/*!****************************************************************!*\ - !*** ./node_modules/d3-transition/src/transition/textTween.js ***! - \****************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -function textInterpolate(i) { - return function(t) { - this.textContent = i.call(this, t); - }; -} - -function textTween(value) { - var t0, i0; - function tween() { - var i = value.apply(this, arguments); - if (i !== i0) t0 = (i0 = i) && textInterpolate(i); - return t0; - } - tween._value = value; - return tween; -} - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(value) { - var key = "text"; - if (arguments.length < 1) return (key = this.tween(key)) && key._value; - if (value == null) return this.tween(key, null); - if (typeof value !== "function") throw new Error; - return this.tween(key, textTween(value)); -} - - -/***/ }), - -/***/ "./node_modules/d3-transition/src/transition/transition.js": -/*!*****************************************************************!*\ - !*** ./node_modules/d3-transition/src/transition/transition.js ***! - \*****************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index.js */ "./node_modules/d3-transition/src/transition/index.js"); -/* harmony import */ var _schedule_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./schedule.js */ "./node_modules/d3-transition/src/transition/schedule.js"); - - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() { - var name = this._name, - id0 = this._id, - id1 = (0,_index_js__WEBPACK_IMPORTED_MODULE_0__.newId)(); - - for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) { - for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) { - if (node = group[i]) { - var inherit = (0,_schedule_js__WEBPACK_IMPORTED_MODULE_1__.get)(node, id0); - (0,_schedule_js__WEBPACK_IMPORTED_MODULE_1__["default"])(node, name, id1, i, group, { - time: inherit.time + inherit.delay + inherit.duration, - delay: 0, - duration: inherit.duration, - ease: inherit.ease - }); - } - } - } - - return new _index_js__WEBPACK_IMPORTED_MODULE_0__.Transition(groups, this._parents, name, id1); -} - - -/***/ }), - -/***/ "./node_modules/d3-transition/src/transition/tween.js": -/*!************************************************************!*\ - !*** ./node_modules/d3-transition/src/transition/tween.js ***! - \************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "tweenValue": () => (/* binding */ tweenValue) -/* harmony export */ }); -/* harmony import */ var _schedule_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./schedule.js */ "./node_modules/d3-transition/src/transition/schedule.js"); - - -function tweenRemove(id, name) { - var tween0, tween1; - return function() { - var schedule = (0,_schedule_js__WEBPACK_IMPORTED_MODULE_0__.set)(this, id), - tween = schedule.tween; - - // If this node shared tween with the previous node, - // just assign the updated shared tween and we’re done! - // Otherwise, copy-on-write. - if (tween !== tween0) { - tween1 = tween0 = tween; - for (var i = 0, n = tween1.length; i < n; ++i) { - if (tween1[i].name === name) { - tween1 = tween1.slice(); - tween1.splice(i, 1); - break; - } - } - } - - schedule.tween = tween1; - }; -} - -function tweenFunction(id, name, value) { - var tween0, tween1; - if (typeof value !== "function") throw new Error; - return function() { - var schedule = (0,_schedule_js__WEBPACK_IMPORTED_MODULE_0__.set)(this, id), - tween = schedule.tween; - - // If this node shared tween with the previous node, - // just assign the updated shared tween and we’re done! - // Otherwise, copy-on-write. - if (tween !== tween0) { - tween1 = (tween0 = tween).slice(); - for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) { - if (tween1[i].name === name) { - tween1[i] = t; - break; - } - } - if (i === n) tween1.push(t); - } - - schedule.tween = tween1; - }; -} - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(name, value) { - var id = this._id; - - name += ""; - - if (arguments.length < 2) { - var tween = (0,_schedule_js__WEBPACK_IMPORTED_MODULE_0__.get)(this.node(), id).tween; - for (var i = 0, n = tween.length, t; i < n; ++i) { - if ((t = tween[i]).name === name) { - return t.value; - } - } - return null; - } - - return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value)); -} - -function tweenValue(transition, name, value) { - var id = transition._id; - - transition.each(function() { - var schedule = (0,_schedule_js__WEBPACK_IMPORTED_MODULE_0__.set)(this, id); - (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments); - }); - - return function(node) { - return (0,_schedule_js__WEBPACK_IMPORTED_MODULE_0__.get)(node, id).value[name]; - }; -} - - -/***/ }), - -/***/ "./node_modules/d3-voronoi/src/Beach.js": -/*!**********************************************!*\ - !*** ./node_modules/d3-voronoi/src/Beach.js ***! - \**********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "addBeach": () => (/* binding */ addBeach), -/* harmony export */ "removeBeach": () => (/* binding */ removeBeach) -/* harmony export */ }); -/* harmony import */ var _RedBlackTree__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./RedBlackTree */ "./node_modules/d3-voronoi/src/RedBlackTree.js"); -/* harmony import */ var _Cell__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Cell */ "./node_modules/d3-voronoi/src/Cell.js"); -/* harmony import */ var _Circle__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Circle */ "./node_modules/d3-voronoi/src/Circle.js"); -/* harmony import */ var _Edge__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./Edge */ "./node_modules/d3-voronoi/src/Edge.js"); -/* harmony import */ var _Diagram__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./Diagram */ "./node_modules/d3-voronoi/src/Diagram.js"); - - - - - - -var beachPool = []; - -function Beach() { - (0,_RedBlackTree__WEBPACK_IMPORTED_MODULE_0__.RedBlackNode)(this); - this.edge = - this.site = - this.circle = null; -} - -function createBeach(site) { - var beach = beachPool.pop() || new Beach; - beach.site = site; - return beach; -} - -function detachBeach(beach) { - (0,_Circle__WEBPACK_IMPORTED_MODULE_2__.detachCircle)(beach); - _Diagram__WEBPACK_IMPORTED_MODULE_4__.beaches.remove(beach); - beachPool.push(beach); - (0,_RedBlackTree__WEBPACK_IMPORTED_MODULE_0__.RedBlackNode)(beach); -} - -function removeBeach(beach) { - var circle = beach.circle, - x = circle.x, - y = circle.cy, - vertex = [x, y], - previous = beach.P, - next = beach.N, - disappearing = [beach]; - - detachBeach(beach); - - var lArc = previous; - while (lArc.circle - && Math.abs(x - lArc.circle.x) < _Diagram__WEBPACK_IMPORTED_MODULE_4__.epsilon - && Math.abs(y - lArc.circle.cy) < _Diagram__WEBPACK_IMPORTED_MODULE_4__.epsilon) { - previous = lArc.P; - disappearing.unshift(lArc); - detachBeach(lArc); - lArc = previous; - } - - disappearing.unshift(lArc); - (0,_Circle__WEBPACK_IMPORTED_MODULE_2__.detachCircle)(lArc); - - var rArc = next; - while (rArc.circle - && Math.abs(x - rArc.circle.x) < _Diagram__WEBPACK_IMPORTED_MODULE_4__.epsilon - && Math.abs(y - rArc.circle.cy) < _Diagram__WEBPACK_IMPORTED_MODULE_4__.epsilon) { - next = rArc.N; - disappearing.push(rArc); - detachBeach(rArc); - rArc = next; - } - - disappearing.push(rArc); - (0,_Circle__WEBPACK_IMPORTED_MODULE_2__.detachCircle)(rArc); - - var nArcs = disappearing.length, - iArc; - for (iArc = 1; iArc < nArcs; ++iArc) { - rArc = disappearing[iArc]; - lArc = disappearing[iArc - 1]; - (0,_Edge__WEBPACK_IMPORTED_MODULE_3__.setEdgeEnd)(rArc.edge, lArc.site, rArc.site, vertex); - } - - lArc = disappearing[0]; - rArc = disappearing[nArcs - 1]; - rArc.edge = (0,_Edge__WEBPACK_IMPORTED_MODULE_3__.createEdge)(lArc.site, rArc.site, null, vertex); - - (0,_Circle__WEBPACK_IMPORTED_MODULE_2__.attachCircle)(lArc); - (0,_Circle__WEBPACK_IMPORTED_MODULE_2__.attachCircle)(rArc); -} - -function addBeach(site) { - var x = site[0], - directrix = site[1], - lArc, - rArc, - dxl, - dxr, - node = _Diagram__WEBPACK_IMPORTED_MODULE_4__.beaches._; - - while (node) { - dxl = leftBreakPoint(node, directrix) - x; - if (dxl > _Diagram__WEBPACK_IMPORTED_MODULE_4__.epsilon) node = node.L; else { - dxr = x - rightBreakPoint(node, directrix); - if (dxr > _Diagram__WEBPACK_IMPORTED_MODULE_4__.epsilon) { - if (!node.R) { - lArc = node; - break; - } - node = node.R; - } else { - if (dxl > -_Diagram__WEBPACK_IMPORTED_MODULE_4__.epsilon) { - lArc = node.P; - rArc = node; - } else if (dxr > -_Diagram__WEBPACK_IMPORTED_MODULE_4__.epsilon) { - lArc = node; - rArc = node.N; - } else { - lArc = rArc = node; - } - break; - } - } - } - - (0,_Cell__WEBPACK_IMPORTED_MODULE_1__.createCell)(site); - var newArc = createBeach(site); - _Diagram__WEBPACK_IMPORTED_MODULE_4__.beaches.insert(lArc, newArc); - - if (!lArc && !rArc) return; - - if (lArc === rArc) { - (0,_Circle__WEBPACK_IMPORTED_MODULE_2__.detachCircle)(lArc); - rArc = createBeach(lArc.site); - _Diagram__WEBPACK_IMPORTED_MODULE_4__.beaches.insert(newArc, rArc); - newArc.edge = rArc.edge = (0,_Edge__WEBPACK_IMPORTED_MODULE_3__.createEdge)(lArc.site, newArc.site); - (0,_Circle__WEBPACK_IMPORTED_MODULE_2__.attachCircle)(lArc); - (0,_Circle__WEBPACK_IMPORTED_MODULE_2__.attachCircle)(rArc); - return; - } - - if (!rArc) { // && lArc - newArc.edge = (0,_Edge__WEBPACK_IMPORTED_MODULE_3__.createEdge)(lArc.site, newArc.site); - return; - } - - // else lArc !== rArc - (0,_Circle__WEBPACK_IMPORTED_MODULE_2__.detachCircle)(lArc); - (0,_Circle__WEBPACK_IMPORTED_MODULE_2__.detachCircle)(rArc); - - var lSite = lArc.site, - ax = lSite[0], - ay = lSite[1], - bx = site[0] - ax, - by = site[1] - ay, - rSite = rArc.site, - cx = rSite[0] - ax, - cy = rSite[1] - ay, - d = 2 * (bx * cy - by * cx), - hb = bx * bx + by * by, - hc = cx * cx + cy * cy, - vertex = [(cy * hb - by * hc) / d + ax, (bx * hc - cx * hb) / d + ay]; - - (0,_Edge__WEBPACK_IMPORTED_MODULE_3__.setEdgeEnd)(rArc.edge, lSite, rSite, vertex); - newArc.edge = (0,_Edge__WEBPACK_IMPORTED_MODULE_3__.createEdge)(lSite, site, null, vertex); - rArc.edge = (0,_Edge__WEBPACK_IMPORTED_MODULE_3__.createEdge)(site, rSite, null, vertex); - (0,_Circle__WEBPACK_IMPORTED_MODULE_2__.attachCircle)(lArc); - (0,_Circle__WEBPACK_IMPORTED_MODULE_2__.attachCircle)(rArc); -} - -function leftBreakPoint(arc, directrix) { - var site = arc.site, - rfocx = site[0], - rfocy = site[1], - pby2 = rfocy - directrix; - - if (!pby2) return rfocx; - - var lArc = arc.P; - if (!lArc) return -Infinity; - - site = lArc.site; - var lfocx = site[0], - lfocy = site[1], - plby2 = lfocy - directrix; - - if (!plby2) return lfocx; - - var hl = lfocx - rfocx, - aby2 = 1 / pby2 - 1 / plby2, - b = hl / plby2; - - if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx; - - return (rfocx + lfocx) / 2; -} - -function rightBreakPoint(arc, directrix) { - var rArc = arc.N; - if (rArc) return leftBreakPoint(rArc, directrix); - var site = arc.site; - return site[1] === directrix ? site[0] : Infinity; -} - - -/***/ }), - -/***/ "./node_modules/d3-voronoi/src/Cell.js": -/*!*********************************************!*\ - !*** ./node_modules/d3-voronoi/src/Cell.js ***! - \*********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "cellHalfedgeEnd": () => (/* binding */ cellHalfedgeEnd), -/* harmony export */ "cellHalfedgeStart": () => (/* binding */ cellHalfedgeStart), -/* harmony export */ "clipCells": () => (/* binding */ clipCells), -/* harmony export */ "createCell": () => (/* binding */ createCell), -/* harmony export */ "sortCellHalfedges": () => (/* binding */ sortCellHalfedges) -/* harmony export */ }); -/* harmony import */ var _Edge__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Edge */ "./node_modules/d3-voronoi/src/Edge.js"); -/* harmony import */ var _Diagram__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Diagram */ "./node_modules/d3-voronoi/src/Diagram.js"); - - - -function createCell(site) { - return _Diagram__WEBPACK_IMPORTED_MODULE_1__.cells[site.index] = { - site: site, - halfedges: [] - }; -} - -function cellHalfedgeAngle(cell, edge) { - var site = cell.site, - va = edge.left, - vb = edge.right; - if (site === vb) vb = va, va = site; - if (vb) return Math.atan2(vb[1] - va[1], vb[0] - va[0]); - if (site === va) va = edge[1], vb = edge[0]; - else va = edge[0], vb = edge[1]; - return Math.atan2(va[0] - vb[0], vb[1] - va[1]); -} - -function cellHalfedgeStart(cell, edge) { - return edge[+(edge.left !== cell.site)]; -} - -function cellHalfedgeEnd(cell, edge) { - return edge[+(edge.left === cell.site)]; -} - -function sortCellHalfedges() { - for (var i = 0, n = _Diagram__WEBPACK_IMPORTED_MODULE_1__.cells.length, cell, halfedges, j, m; i < n; ++i) { - if ((cell = _Diagram__WEBPACK_IMPORTED_MODULE_1__.cells[i]) && (m = (halfedges = cell.halfedges).length)) { - var index = new Array(m), - array = new Array(m); - for (j = 0; j < m; ++j) index[j] = j, array[j] = cellHalfedgeAngle(cell, _Diagram__WEBPACK_IMPORTED_MODULE_1__.edges[halfedges[j]]); - index.sort(function(i, j) { return array[j] - array[i]; }); - for (j = 0; j < m; ++j) array[j] = halfedges[index[j]]; - for (j = 0; j < m; ++j) halfedges[j] = array[j]; - } - } -} - -function clipCells(x0, y0, x1, y1) { - var nCells = _Diagram__WEBPACK_IMPORTED_MODULE_1__.cells.length, - iCell, - cell, - site, - iHalfedge, - halfedges, - nHalfedges, - start, - startX, - startY, - end, - endX, - endY, - cover = true; - - for (iCell = 0; iCell < nCells; ++iCell) { - if (cell = _Diagram__WEBPACK_IMPORTED_MODULE_1__.cells[iCell]) { - site = cell.site; - halfedges = cell.halfedges; - iHalfedge = halfedges.length; - - // Remove any dangling clipped edges. - while (iHalfedge--) { - if (!_Diagram__WEBPACK_IMPORTED_MODULE_1__.edges[halfedges[iHalfedge]]) { - halfedges.splice(iHalfedge, 1); - } - } - - // Insert any border edges as necessary. - iHalfedge = 0, nHalfedges = halfedges.length; - while (iHalfedge < nHalfedges) { - end = cellHalfedgeEnd(cell, _Diagram__WEBPACK_IMPORTED_MODULE_1__.edges[halfedges[iHalfedge]]), endX = end[0], endY = end[1]; - start = cellHalfedgeStart(cell, _Diagram__WEBPACK_IMPORTED_MODULE_1__.edges[halfedges[++iHalfedge % nHalfedges]]), startX = start[0], startY = start[1]; - if (Math.abs(endX - startX) > _Diagram__WEBPACK_IMPORTED_MODULE_1__.epsilon || Math.abs(endY - startY) > _Diagram__WEBPACK_IMPORTED_MODULE_1__.epsilon) { - halfedges.splice(iHalfedge, 0, _Diagram__WEBPACK_IMPORTED_MODULE_1__.edges.push((0,_Edge__WEBPACK_IMPORTED_MODULE_0__.createBorderEdge)(site, end, - Math.abs(endX - x0) < _Diagram__WEBPACK_IMPORTED_MODULE_1__.epsilon && y1 - endY > _Diagram__WEBPACK_IMPORTED_MODULE_1__.epsilon ? [x0, Math.abs(startX - x0) < _Diagram__WEBPACK_IMPORTED_MODULE_1__.epsilon ? startY : y1] - : Math.abs(endY - y1) < _Diagram__WEBPACK_IMPORTED_MODULE_1__.epsilon && x1 - endX > _Diagram__WEBPACK_IMPORTED_MODULE_1__.epsilon ? [Math.abs(startY - y1) < _Diagram__WEBPACK_IMPORTED_MODULE_1__.epsilon ? startX : x1, y1] - : Math.abs(endX - x1) < _Diagram__WEBPACK_IMPORTED_MODULE_1__.epsilon && endY - y0 > _Diagram__WEBPACK_IMPORTED_MODULE_1__.epsilon ? [x1, Math.abs(startX - x1) < _Diagram__WEBPACK_IMPORTED_MODULE_1__.epsilon ? startY : y0] - : Math.abs(endY - y0) < _Diagram__WEBPACK_IMPORTED_MODULE_1__.epsilon && endX - x0 > _Diagram__WEBPACK_IMPORTED_MODULE_1__.epsilon ? [Math.abs(startY - y0) < _Diagram__WEBPACK_IMPORTED_MODULE_1__.epsilon ? startX : x0, y0] - : null)) - 1); - ++nHalfedges; - } - } - - if (nHalfedges) cover = false; - } - } - - // If there weren’t any edges, have the closest site cover the extent. - // It doesn’t matter which corner of the extent we measure! - if (cover) { - var dx, dy, d2, dc = Infinity; - - for (iCell = 0, cover = null; iCell < nCells; ++iCell) { - if (cell = _Diagram__WEBPACK_IMPORTED_MODULE_1__.cells[iCell]) { - site = cell.site; - dx = site[0] - x0; - dy = site[1] - y0; - d2 = dx * dx + dy * dy; - if (d2 < dc) dc = d2, cover = cell; - } - } - - if (cover) { - var v00 = [x0, y0], v01 = [x0, y1], v11 = [x1, y1], v10 = [x1, y0]; - cover.halfedges.push( - _Diagram__WEBPACK_IMPORTED_MODULE_1__.edges.push((0,_Edge__WEBPACK_IMPORTED_MODULE_0__.createBorderEdge)(site = cover.site, v00, v01)) - 1, - _Diagram__WEBPACK_IMPORTED_MODULE_1__.edges.push((0,_Edge__WEBPACK_IMPORTED_MODULE_0__.createBorderEdge)(site, v01, v11)) - 1, - _Diagram__WEBPACK_IMPORTED_MODULE_1__.edges.push((0,_Edge__WEBPACK_IMPORTED_MODULE_0__.createBorderEdge)(site, v11, v10)) - 1, - _Diagram__WEBPACK_IMPORTED_MODULE_1__.edges.push((0,_Edge__WEBPACK_IMPORTED_MODULE_0__.createBorderEdge)(site, v10, v00)) - 1 - ); - } - } - - // Lastly delete any cells with no edges; these were entirely clipped. - for (iCell = 0; iCell < nCells; ++iCell) { - if (cell = _Diagram__WEBPACK_IMPORTED_MODULE_1__.cells[iCell]) { - if (!cell.halfedges.length) { - delete _Diagram__WEBPACK_IMPORTED_MODULE_1__.cells[iCell]; - } - } - } -} - - -/***/ }), - -/***/ "./node_modules/d3-voronoi/src/Circle.js": -/*!***********************************************!*\ - !*** ./node_modules/d3-voronoi/src/Circle.js ***! - \***********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "attachCircle": () => (/* binding */ attachCircle), -/* harmony export */ "detachCircle": () => (/* binding */ detachCircle), -/* harmony export */ "firstCircle": () => (/* binding */ firstCircle) -/* harmony export */ }); -/* harmony import */ var _RedBlackTree__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./RedBlackTree */ "./node_modules/d3-voronoi/src/RedBlackTree.js"); -/* harmony import */ var _Diagram__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Diagram */ "./node_modules/d3-voronoi/src/Diagram.js"); - - - -var circlePool = []; - -var firstCircle; - -function Circle() { - (0,_RedBlackTree__WEBPACK_IMPORTED_MODULE_0__.RedBlackNode)(this); - this.x = - this.y = - this.arc = - this.site = - this.cy = null; -} - -function attachCircle(arc) { - var lArc = arc.P, - rArc = arc.N; - - if (!lArc || !rArc) return; - - var lSite = lArc.site, - cSite = arc.site, - rSite = rArc.site; - - if (lSite === rSite) return; - - var bx = cSite[0], - by = cSite[1], - ax = lSite[0] - bx, - ay = lSite[1] - by, - cx = rSite[0] - bx, - cy = rSite[1] - by; - - var d = 2 * (ax * cy - ay * cx); - if (d >= -_Diagram__WEBPACK_IMPORTED_MODULE_1__.epsilon2) return; - - var ha = ax * ax + ay * ay, - hc = cx * cx + cy * cy, - x = (cy * ha - ay * hc) / d, - y = (ax * hc - cx * ha) / d; - - var circle = circlePool.pop() || new Circle; - circle.arc = arc; - circle.site = cSite; - circle.x = x + bx; - circle.y = (circle.cy = y + by) + Math.sqrt(x * x + y * y); // y bottom - - arc.circle = circle; - - var before = null, - node = _Diagram__WEBPACK_IMPORTED_MODULE_1__.circles._; - - while (node) { - if (circle.y < node.y || (circle.y === node.y && circle.x <= node.x)) { - if (node.L) node = node.L; - else { before = node.P; break; } - } else { - if (node.R) node = node.R; - else { before = node; break; } - } - } - - _Diagram__WEBPACK_IMPORTED_MODULE_1__.circles.insert(before, circle); - if (!before) firstCircle = circle; -} - -function detachCircle(arc) { - var circle = arc.circle; - if (circle) { - if (!circle.P) firstCircle = circle.N; - _Diagram__WEBPACK_IMPORTED_MODULE_1__.circles.remove(circle); - circlePool.push(circle); - (0,_RedBlackTree__WEBPACK_IMPORTED_MODULE_0__.RedBlackNode)(circle); - arc.circle = null; - } -} - - -/***/ }), - -/***/ "./node_modules/d3-voronoi/src/Diagram.js": -/*!************************************************!*\ - !*** ./node_modules/d3-voronoi/src/Diagram.js ***! - \************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "beaches": () => (/* binding */ beaches), -/* harmony export */ "cells": () => (/* binding */ cells), -/* harmony export */ "circles": () => (/* binding */ circles), -/* harmony export */ "default": () => (/* binding */ Diagram), -/* harmony export */ "edges": () => (/* binding */ edges), -/* harmony export */ "epsilon": () => (/* binding */ epsilon), -/* harmony export */ "epsilon2": () => (/* binding */ epsilon2) -/* harmony export */ }); -/* harmony import */ var _Beach__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Beach */ "./node_modules/d3-voronoi/src/Beach.js"); -/* harmony import */ var _Cell__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Cell */ "./node_modules/d3-voronoi/src/Cell.js"); -/* harmony import */ var _Circle__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Circle */ "./node_modules/d3-voronoi/src/Circle.js"); -/* harmony import */ var _Edge__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./Edge */ "./node_modules/d3-voronoi/src/Edge.js"); -/* harmony import */ var _RedBlackTree__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./RedBlackTree */ "./node_modules/d3-voronoi/src/RedBlackTree.js"); - - - - - - -var epsilon = 1e-6; -var epsilon2 = 1e-12; -var beaches; -var cells; -var circles; -var edges; - -function triangleArea(a, b, c) { - return (a[0] - c[0]) * (b[1] - a[1]) - (a[0] - b[0]) * (c[1] - a[1]); -} - -function lexicographic(a, b) { - return b[1] - a[1] - || b[0] - a[0]; -} - -function Diagram(sites, extent) { - var site = sites.sort(lexicographic).pop(), - x, - y, - circle; - - edges = []; - cells = new Array(sites.length); - beaches = new _RedBlackTree__WEBPACK_IMPORTED_MODULE_4__["default"]; - circles = new _RedBlackTree__WEBPACK_IMPORTED_MODULE_4__["default"]; - - while (true) { - circle = _Circle__WEBPACK_IMPORTED_MODULE_2__.firstCircle; - if (site && (!circle || site[1] < circle.y || (site[1] === circle.y && site[0] < circle.x))) { - if (site[0] !== x || site[1] !== y) { - (0,_Beach__WEBPACK_IMPORTED_MODULE_0__.addBeach)(site); - x = site[0], y = site[1]; - } - site = sites.pop(); - } else if (circle) { - (0,_Beach__WEBPACK_IMPORTED_MODULE_0__.removeBeach)(circle.arc); - } else { - break; - } - } - - (0,_Cell__WEBPACK_IMPORTED_MODULE_1__.sortCellHalfedges)(); - - if (extent) { - var x0 = +extent[0][0], - y0 = +extent[0][1], - x1 = +extent[1][0], - y1 = +extent[1][1]; - (0,_Edge__WEBPACK_IMPORTED_MODULE_3__.clipEdges)(x0, y0, x1, y1); - (0,_Cell__WEBPACK_IMPORTED_MODULE_1__.clipCells)(x0, y0, x1, y1); - } - - this.edges = edges; - this.cells = cells; - - beaches = - circles = - edges = - cells = null; -} - -Diagram.prototype = { - constructor: Diagram, - - polygons: function() { - var edges = this.edges; - - return this.cells.map(function(cell) { - var polygon = cell.halfedges.map(function(i) { return (0,_Cell__WEBPACK_IMPORTED_MODULE_1__.cellHalfedgeStart)(cell, edges[i]); }); - polygon.data = cell.site.data; - return polygon; - }); - }, - - triangles: function() { - var triangles = [], - edges = this.edges; - - this.cells.forEach(function(cell, i) { - if (!(m = (halfedges = cell.halfedges).length)) return; - var site = cell.site, - halfedges, - j = -1, - m, - s0, - e1 = edges[halfedges[m - 1]], - s1 = e1.left === site ? e1.right : e1.left; - - while (++j < m) { - s0 = s1; - e1 = edges[halfedges[j]]; - s1 = e1.left === site ? e1.right : e1.left; - if (s0 && s1 && i < s0.index && i < s1.index && triangleArea(site, s0, s1) < 0) { - triangles.push([site.data, s0.data, s1.data]); - } - } - }); - - return triangles; - }, - - links: function() { - return this.edges.filter(function(edge) { - return edge.right; - }).map(function(edge) { - return { - source: edge.left.data, - target: edge.right.data - }; - }); - }, - - find: function(x, y, radius) { - var that = this, i0, i1 = that._found || 0, n = that.cells.length, cell; - - // Use the previously-found cell, or start with an arbitrary one. - while (!(cell = that.cells[i1])) if (++i1 >= n) return null; - var dx = x - cell.site[0], dy = y - cell.site[1], d2 = dx * dx + dy * dy; - - // Traverse the half-edges to find a closer cell, if any. - do { - cell = that.cells[i0 = i1], i1 = null; - cell.halfedges.forEach(function(e) { - var edge = that.edges[e], v = edge.left; - if ((v === cell.site || !v) && !(v = edge.right)) return; - var vx = x - v[0], vy = y - v[1], v2 = vx * vx + vy * vy; - if (v2 < d2) d2 = v2, i1 = v.index; - }); - } while (i1 !== null); - - that._found = i0; - - return radius == null || d2 <= radius * radius ? cell.site : null; - } -} - - -/***/ }), - -/***/ "./node_modules/d3-voronoi/src/Edge.js": -/*!*********************************************!*\ - !*** ./node_modules/d3-voronoi/src/Edge.js ***! - \*********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "clipEdges": () => (/* binding */ clipEdges), -/* harmony export */ "createBorderEdge": () => (/* binding */ createBorderEdge), -/* harmony export */ "createEdge": () => (/* binding */ createEdge), -/* harmony export */ "setEdgeEnd": () => (/* binding */ setEdgeEnd) -/* harmony export */ }); -/* harmony import */ var _Diagram__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Diagram */ "./node_modules/d3-voronoi/src/Diagram.js"); - - -function createEdge(left, right, v0, v1) { - var edge = [null, null], - index = _Diagram__WEBPACK_IMPORTED_MODULE_0__.edges.push(edge) - 1; - edge.left = left; - edge.right = right; - if (v0) setEdgeEnd(edge, left, right, v0); - if (v1) setEdgeEnd(edge, right, left, v1); - _Diagram__WEBPACK_IMPORTED_MODULE_0__.cells[left.index].halfedges.push(index); - _Diagram__WEBPACK_IMPORTED_MODULE_0__.cells[right.index].halfedges.push(index); - return edge; -} - -function createBorderEdge(left, v0, v1) { - var edge = [v0, v1]; - edge.left = left; - return edge; -} - -function setEdgeEnd(edge, left, right, vertex) { - if (!edge[0] && !edge[1]) { - edge[0] = vertex; - edge.left = left; - edge.right = right; - } else if (edge.left === right) { - edge[1] = vertex; - } else { - edge[0] = vertex; - } -} - -// Liang–Barsky line clipping. -function clipEdge(edge, x0, y0, x1, y1) { - var a = edge[0], - b = edge[1], - ax = a[0], - ay = a[1], - bx = b[0], - by = b[1], - t0 = 0, - t1 = 1, - dx = bx - ax, - dy = by - ay, - r; - - r = x0 - ax; - if (!dx && r > 0) return; - r /= dx; - if (dx < 0) { - if (r < t0) return; - if (r < t1) t1 = r; - } else if (dx > 0) { - if (r > t1) return; - if (r > t0) t0 = r; - } - - r = x1 - ax; - if (!dx && r < 0) return; - r /= dx; - if (dx < 0) { - if (r > t1) return; - if (r > t0) t0 = r; - } else if (dx > 0) { - if (r < t0) return; - if (r < t1) t1 = r; - } - - r = y0 - ay; - if (!dy && r > 0) return; - r /= dy; - if (dy < 0) { - if (r < t0) return; - if (r < t1) t1 = r; - } else if (dy > 0) { - if (r > t1) return; - if (r > t0) t0 = r; - } - - r = y1 - ay; - if (!dy && r < 0) return; - r /= dy; - if (dy < 0) { - if (r > t1) return; - if (r > t0) t0 = r; - } else if (dy > 0) { - if (r < t0) return; - if (r < t1) t1 = r; - } - - if (!(t0 > 0) && !(t1 < 1)) return true; // TODO Better check? - - if (t0 > 0) edge[0] = [ax + t0 * dx, ay + t0 * dy]; - if (t1 < 1) edge[1] = [ax + t1 * dx, ay + t1 * dy]; - return true; -} - -function connectEdge(edge, x0, y0, x1, y1) { - var v1 = edge[1]; - if (v1) return true; - - var v0 = edge[0], - left = edge.left, - right = edge.right, - lx = left[0], - ly = left[1], - rx = right[0], - ry = right[1], - fx = (lx + rx) / 2, - fy = (ly + ry) / 2, - fm, - fb; - - if (ry === ly) { - if (fx < x0 || fx >= x1) return; - if (lx > rx) { - if (!v0) v0 = [fx, y0]; - else if (v0[1] >= y1) return; - v1 = [fx, y1]; - } else { - if (!v0) v0 = [fx, y1]; - else if (v0[1] < y0) return; - v1 = [fx, y0]; - } - } else { - fm = (lx - rx) / (ry - ly); - fb = fy - fm * fx; - if (fm < -1 || fm > 1) { - if (lx > rx) { - if (!v0) v0 = [(y0 - fb) / fm, y0]; - else if (v0[1] >= y1) return; - v1 = [(y1 - fb) / fm, y1]; - } else { - if (!v0) v0 = [(y1 - fb) / fm, y1]; - else if (v0[1] < y0) return; - v1 = [(y0 - fb) / fm, y0]; - } - } else { - if (ly < ry) { - if (!v0) v0 = [x0, fm * x0 + fb]; - else if (v0[0] >= x1) return; - v1 = [x1, fm * x1 + fb]; - } else { - if (!v0) v0 = [x1, fm * x1 + fb]; - else if (v0[0] < x0) return; - v1 = [x0, fm * x0 + fb]; - } - } - } - - edge[0] = v0; - edge[1] = v1; - return true; -} - -function clipEdges(x0, y0, x1, y1) { - var i = _Diagram__WEBPACK_IMPORTED_MODULE_0__.edges.length, - edge; - - while (i--) { - if (!connectEdge(edge = _Diagram__WEBPACK_IMPORTED_MODULE_0__.edges[i], x0, y0, x1, y1) - || !clipEdge(edge, x0, y0, x1, y1) - || !(Math.abs(edge[0][0] - edge[1][0]) > _Diagram__WEBPACK_IMPORTED_MODULE_0__.epsilon - || Math.abs(edge[0][1] - edge[1][1]) > _Diagram__WEBPACK_IMPORTED_MODULE_0__.epsilon)) { - delete _Diagram__WEBPACK_IMPORTED_MODULE_0__.edges[i]; - } - } -} - - -/***/ }), - -/***/ "./node_modules/d3-voronoi/src/RedBlackTree.js": -/*!*****************************************************!*\ - !*** ./node_modules/d3-voronoi/src/RedBlackTree.js ***! - \*****************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "RedBlackNode": () => (/* binding */ RedBlackNode), -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -function RedBlackTree() { - this._ = null; // root node -} - -function RedBlackNode(node) { - node.U = // parent node - node.C = // color - true for red, false for black - node.L = // left node - node.R = // right node - node.P = // previous node - node.N = null; // next node -} - -RedBlackTree.prototype = { - constructor: RedBlackTree, - - insert: function(after, node) { - var parent, grandpa, uncle; - - if (after) { - node.P = after; - node.N = after.N; - if (after.N) after.N.P = node; - after.N = node; - if (after.R) { - after = after.R; - while (after.L) after = after.L; - after.L = node; - } else { - after.R = node; - } - parent = after; - } else if (this._) { - after = RedBlackFirst(this._); - node.P = null; - node.N = after; - after.P = after.L = node; - parent = after; - } else { - node.P = node.N = null; - this._ = node; - parent = null; - } - node.L = node.R = null; - node.U = parent; - node.C = true; - - after = node; - while (parent && parent.C) { - grandpa = parent.U; - if (parent === grandpa.L) { - uncle = grandpa.R; - if (uncle && uncle.C) { - parent.C = uncle.C = false; - grandpa.C = true; - after = grandpa; - } else { - if (after === parent.R) { - RedBlackRotateLeft(this, parent); - after = parent; - parent = after.U; - } - parent.C = false; - grandpa.C = true; - RedBlackRotateRight(this, grandpa); - } - } else { - uncle = grandpa.L; - if (uncle && uncle.C) { - parent.C = uncle.C = false; - grandpa.C = true; - after = grandpa; - } else { - if (after === parent.L) { - RedBlackRotateRight(this, parent); - after = parent; - parent = after.U; - } - parent.C = false; - grandpa.C = true; - RedBlackRotateLeft(this, grandpa); - } - } - parent = after.U; - } - this._.C = false; - }, - - remove: function(node) { - if (node.N) node.N.P = node.P; - if (node.P) node.P.N = node.N; - node.N = node.P = null; - - var parent = node.U, - sibling, - left = node.L, - right = node.R, - next, - red; - - if (!left) next = right; - else if (!right) next = left; - else next = RedBlackFirst(right); - - if (parent) { - if (parent.L === node) parent.L = next; - else parent.R = next; - } else { - this._ = next; - } - - if (left && right) { - red = next.C; - next.C = node.C; - next.L = left; - left.U = next; - if (next !== right) { - parent = next.U; - next.U = node.U; - node = next.R; - parent.L = node; - next.R = right; - right.U = next; - } else { - next.U = parent; - parent = next; - node = next.R; - } - } else { - red = node.C; - node = next; - } - - if (node) node.U = parent; - if (red) return; - if (node && node.C) { node.C = false; return; } - - do { - if (node === this._) break; - if (node === parent.L) { - sibling = parent.R; - if (sibling.C) { - sibling.C = false; - parent.C = true; - RedBlackRotateLeft(this, parent); - sibling = parent.R; - } - if ((sibling.L && sibling.L.C) - || (sibling.R && sibling.R.C)) { - if (!sibling.R || !sibling.R.C) { - sibling.L.C = false; - sibling.C = true; - RedBlackRotateRight(this, sibling); - sibling = parent.R; - } - sibling.C = parent.C; - parent.C = sibling.R.C = false; - RedBlackRotateLeft(this, parent); - node = this._; - break; - } - } else { - sibling = parent.L; - if (sibling.C) { - sibling.C = false; - parent.C = true; - RedBlackRotateRight(this, parent); - sibling = parent.L; - } - if ((sibling.L && sibling.L.C) - || (sibling.R && sibling.R.C)) { - if (!sibling.L || !sibling.L.C) { - sibling.R.C = false; - sibling.C = true; - RedBlackRotateLeft(this, sibling); - sibling = parent.L; - } - sibling.C = parent.C; - parent.C = sibling.L.C = false; - RedBlackRotateRight(this, parent); - node = this._; - break; - } - } - sibling.C = true; - node = parent; - parent = parent.U; - } while (!node.C); - - if (node) node.C = false; - } -}; - -function RedBlackRotateLeft(tree, node) { - var p = node, - q = node.R, - parent = p.U; - - if (parent) { - if (parent.L === p) parent.L = q; - else parent.R = q; - } else { - tree._ = q; - } - - q.U = parent; - p.U = q; - p.R = q.L; - if (p.R) p.R.U = p; - q.L = p; -} - -function RedBlackRotateRight(tree, node) { - var p = node, - q = node.L, - parent = p.U; - - if (parent) { - if (parent.L === p) parent.L = q; - else parent.R = q; - } else { - tree._ = q; - } - - q.U = parent; - p.U = q; - p.L = q.R; - if (p.L) p.L.U = p; - q.R = p; -} - -function RedBlackFirst(node) { - while (node.L) node = node.L; - return node; -} - -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (RedBlackTree); - - -/***/ }), - -/***/ "./node_modules/d3-voronoi/src/constant.js": -/*!*************************************************!*\ - !*** ./node_modules/d3-voronoi/src/constant.js ***! - \*************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(x) { - return function() { - return x; - }; -} - - -/***/ }), - -/***/ "./node_modules/d3-voronoi/src/index.js": -/*!**********************************************!*\ - !*** ./node_modules/d3-voronoi/src/index.js ***! - \**********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "voronoi": () => (/* reexport safe */ _voronoi__WEBPACK_IMPORTED_MODULE_0__["default"]) -/* harmony export */ }); -/* harmony import */ var _voronoi__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./voronoi */ "./node_modules/d3-voronoi/src/voronoi.js"); - - - -/***/ }), - -/***/ "./node_modules/d3-voronoi/src/point.js": -/*!**********************************************!*\ - !*** ./node_modules/d3-voronoi/src/point.js ***! - \**********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "x": () => (/* binding */ x), -/* harmony export */ "y": () => (/* binding */ y) -/* harmony export */ }); -function x(d) { - return d[0]; -} - -function y(d) { - return d[1]; -} - - -/***/ }), - -/***/ "./node_modules/d3-voronoi/src/voronoi.js": -/*!************************************************!*\ - !*** ./node_modules/d3-voronoi/src/voronoi.js ***! - \************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./constant */ "./node_modules/d3-voronoi/src/constant.js"); -/* harmony import */ var _point__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./point */ "./node_modules/d3-voronoi/src/point.js"); -/* harmony import */ var _Diagram__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Diagram */ "./node_modules/d3-voronoi/src/Diagram.js"); - - - - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() { - var x = _point__WEBPACK_IMPORTED_MODULE_1__.x, - y = _point__WEBPACK_IMPORTED_MODULE_1__.y, - extent = null; - - function voronoi(data) { - return new _Diagram__WEBPACK_IMPORTED_MODULE_2__["default"](data.map(function(d, i) { - var s = [Math.round(x(d, i, data) / _Diagram__WEBPACK_IMPORTED_MODULE_2__.epsilon) * _Diagram__WEBPACK_IMPORTED_MODULE_2__.epsilon, Math.round(y(d, i, data) / _Diagram__WEBPACK_IMPORTED_MODULE_2__.epsilon) * _Diagram__WEBPACK_IMPORTED_MODULE_2__.epsilon]; - s.index = i; - s.data = d; - return s; - }), extent); - } - - voronoi.polygons = function(data) { - return voronoi(data).polygons(); - }; - - voronoi.links = function(data) { - return voronoi(data).links(); - }; - - voronoi.triangles = function(data) { - return voronoi(data).triangles(); - }; - - voronoi.x = function(_) { - return arguments.length ? (x = typeof _ === "function" ? _ : (0,_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(+_), voronoi) : x; - }; - - voronoi.y = function(_) { - return arguments.length ? (y = typeof _ === "function" ? _ : (0,_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(+_), voronoi) : y; - }; - - voronoi.extent = function(_) { - return arguments.length ? (extent = _ == null ? null : [[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]], voronoi) : extent && [[extent[0][0], extent[0][1]], [extent[1][0], extent[1][1]]]; - }; - - voronoi.size = function(_) { - return arguments.length ? (extent = _ == null ? null : [[0, 0], [+_[0], +_[1]]], voronoi) : extent && [extent[1][0] - extent[0][0], extent[1][1] - extent[0][1]]; - }; - - return voronoi; -} - - -/***/ }), - -/***/ "./node_modules/d3-zoom/src/constant.js": -/*!**********************************************!*\ - !*** ./node_modules/d3-zoom/src/constant.js ***! - \**********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(x) { - return function() { - return x; - }; -} - - -/***/ }), - -/***/ "./node_modules/d3-zoom/src/event.js": -/*!*******************************************!*\ - !*** ./node_modules/d3-zoom/src/event.js ***! - \*******************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ ZoomEvent) -/* harmony export */ }); -function ZoomEvent(target, type, transform) { - this.target = target; - this.type = type; - this.transform = transform; -} - - -/***/ }), - -/***/ "./node_modules/d3-zoom/src/index.js": -/*!*******************************************!*\ - !*** ./node_modules/d3-zoom/src/index.js ***! - \*******************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "zoom": () => (/* reexport safe */ _zoom_js__WEBPACK_IMPORTED_MODULE_0__["default"]), -/* harmony export */ "zoomIdentity": () => (/* reexport safe */ _transform_js__WEBPACK_IMPORTED_MODULE_1__.identity), -/* harmony export */ "zoomTransform": () => (/* reexport safe */ _transform_js__WEBPACK_IMPORTED_MODULE_1__["default"]) -/* harmony export */ }); -/* harmony import */ var _zoom_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./zoom.js */ "./node_modules/d3-zoom/src/zoom.js"); -/* harmony import */ var _transform_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./transform.js */ "./node_modules/d3-zoom/src/transform.js"); - - - - -/***/ }), - -/***/ "./node_modules/d3-zoom/src/noevent.js": -/*!*********************************************!*\ - !*** ./node_modules/d3-zoom/src/noevent.js ***! - \*********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "nopropagation": () => (/* binding */ nopropagation) -/* harmony export */ }); -/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-selection */ "./node_modules/d3-selection/src/selection/on.js"); - - -function nopropagation() { - d3_selection__WEBPACK_IMPORTED_MODULE_0__.event.stopImmediatePropagation(); -} - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() { - d3_selection__WEBPACK_IMPORTED_MODULE_0__.event.preventDefault(); - d3_selection__WEBPACK_IMPORTED_MODULE_0__.event.stopImmediatePropagation(); -} - - -/***/ }), - -/***/ "./node_modules/d3-zoom/src/transform.js": -/*!***********************************************!*\ - !*** ./node_modules/d3-zoom/src/transform.js ***! - \***********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Transform": () => (/* binding */ Transform), -/* harmony export */ "default": () => (/* binding */ transform), -/* harmony export */ "identity": () => (/* binding */ identity) -/* harmony export */ }); -function Transform(k, x, y) { - this.k = k; - this.x = x; - this.y = y; -} - -Transform.prototype = { - constructor: Transform, - scale: function(k) { - return k === 1 ? this : new Transform(this.k * k, this.x, this.y); - }, - translate: function(x, y) { - return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y); - }, - apply: function(point) { - return [point[0] * this.k + this.x, point[1] * this.k + this.y]; - }, - applyX: function(x) { - return x * this.k + this.x; - }, - applyY: function(y) { - return y * this.k + this.y; - }, - invert: function(location) { - return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k]; - }, - invertX: function(x) { - return (x - this.x) / this.k; - }, - invertY: function(y) { - return (y - this.y) / this.k; - }, - rescaleX: function(x) { - return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x)); - }, - rescaleY: function(y) { - return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y)); - }, - toString: function() { - return "translate(" + this.x + "," + this.y + ") scale(" + this.k + ")"; - } -}; - -var identity = new Transform(1, 0, 0); - -transform.prototype = Transform.prototype; - -function transform(node) { - while (!node.__zoom) if (!(node = node.parentNode)) return identity; - return node.__zoom; -} - - -/***/ }), - -/***/ "./node_modules/d3-zoom/src/zoom.js": -/*!******************************************!*\ - !*** ./node_modules/d3-zoom/src/zoom.js ***! - \******************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var d3_dispatch__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! d3-dispatch */ "./node_modules/d3-dispatch/src/dispatch.js"); -/* harmony import */ var d3_drag__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! d3-drag */ "./node_modules/d3-drag/src/nodrag.js"); -/* harmony import */ var d3_interpolate__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! d3-interpolate */ "./node_modules/d3-interpolate/src/zoom.js"); -/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! d3-selection */ "./node_modules/d3-selection/src/selection/on.js"); -/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! d3-selection */ "./node_modules/d3-selection/src/mouse.js"); -/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! d3-selection */ "./node_modules/d3-selection/src/select.js"); -/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! d3-selection */ "./node_modules/d3-selection/src/touch.js"); -/* harmony import */ var d3_transition__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-transition */ "./node_modules/d3-transition/src/index.js"); -/* harmony import */ var _constant_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./constant.js */ "./node_modules/d3-zoom/src/constant.js"); -/* harmony import */ var _event_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./event.js */ "./node_modules/d3-zoom/src/event.js"); -/* harmony import */ var _transform_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./transform.js */ "./node_modules/d3-zoom/src/transform.js"); -/* harmony import */ var _noevent_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./noevent.js */ "./node_modules/d3-zoom/src/noevent.js"); - - - - - - - - - - -// Ignore right-click, since that should open the context menu. -function defaultFilter() { - return !d3_selection__WEBPACK_IMPORTED_MODULE_5__.event.ctrlKey && !d3_selection__WEBPACK_IMPORTED_MODULE_5__.event.button; -} - -function defaultExtent() { - var e = this; - if (e instanceof SVGElement) { - e = e.ownerSVGElement || e; - if (e.hasAttribute("viewBox")) { - e = e.viewBox.baseVal; - return [[e.x, e.y], [e.x + e.width, e.y + e.height]]; - } - return [[0, 0], [e.width.baseVal.value, e.height.baseVal.value]]; - } - return [[0, 0], [e.clientWidth, e.clientHeight]]; -} - -function defaultTransform() { - return this.__zoom || _transform_js__WEBPACK_IMPORTED_MODULE_3__.identity; -} - -function defaultWheelDelta() { - return -d3_selection__WEBPACK_IMPORTED_MODULE_5__.event.deltaY * (d3_selection__WEBPACK_IMPORTED_MODULE_5__.event.deltaMode === 1 ? 0.05 : d3_selection__WEBPACK_IMPORTED_MODULE_5__.event.deltaMode ? 1 : 0.002); -} - -function defaultTouchable() { - return navigator.maxTouchPoints || ("ontouchstart" in this); -} - -function defaultConstrain(transform, extent, translateExtent) { - var dx0 = transform.invertX(extent[0][0]) - translateExtent[0][0], - dx1 = transform.invertX(extent[1][0]) - translateExtent[1][0], - dy0 = transform.invertY(extent[0][1]) - translateExtent[0][1], - dy1 = transform.invertY(extent[1][1]) - translateExtent[1][1]; - return transform.translate( - dx1 > dx0 ? (dx0 + dx1) / 2 : Math.min(0, dx0) || Math.max(0, dx1), - dy1 > dy0 ? (dy0 + dy1) / 2 : Math.min(0, dy0) || Math.max(0, dy1) - ); -} - -/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() { - var filter = defaultFilter, - extent = defaultExtent, - constrain = defaultConstrain, - wheelDelta = defaultWheelDelta, - touchable = defaultTouchable, - scaleExtent = [0, Infinity], - translateExtent = [[-Infinity, -Infinity], [Infinity, Infinity]], - duration = 250, - interpolate = d3_interpolate__WEBPACK_IMPORTED_MODULE_6__["default"], - listeners = (0,d3_dispatch__WEBPACK_IMPORTED_MODULE_7__["default"])("start", "zoom", "end"), - touchstarting, - touchending, - touchDelay = 500, - wheelDelay = 150, - clickDistance2 = 0; - - function zoom(selection) { - selection - .property("__zoom", defaultTransform) - .on("wheel.zoom", wheeled) - .on("mousedown.zoom", mousedowned) - .on("dblclick.zoom", dblclicked) - .filter(touchable) - .on("touchstart.zoom", touchstarted) - .on("touchmove.zoom", touchmoved) - .on("touchend.zoom touchcancel.zoom", touchended) - .style("touch-action", "none") - .style("-webkit-tap-highlight-color", "rgba(0,0,0,0)"); - } - - zoom.transform = function(collection, transform, point) { - var selection = collection.selection ? collection.selection() : collection; - selection.property("__zoom", defaultTransform); - if (collection !== selection) { - schedule(collection, transform, point); - } else { - selection.interrupt().each(function() { - gesture(this, arguments) - .start() - .zoom(null, typeof transform === "function" ? transform.apply(this, arguments) : transform) - .end(); - }); - } - }; - - zoom.scaleBy = function(selection, k, p) { - zoom.scaleTo(selection, function() { - var k0 = this.__zoom.k, - k1 = typeof k === "function" ? k.apply(this, arguments) : k; - return k0 * k1; - }, p); - }; - - zoom.scaleTo = function(selection, k, p) { - zoom.transform(selection, function() { - var e = extent.apply(this, arguments), - t0 = this.__zoom, - p0 = p == null ? centroid(e) : typeof p === "function" ? p.apply(this, arguments) : p, - p1 = t0.invert(p0), - k1 = typeof k === "function" ? k.apply(this, arguments) : k; - return constrain(translate(scale(t0, k1), p0, p1), e, translateExtent); - }, p); - }; - - zoom.translateBy = function(selection, x, y) { - zoom.transform(selection, function() { - return constrain(this.__zoom.translate( - typeof x === "function" ? x.apply(this, arguments) : x, - typeof y === "function" ? y.apply(this, arguments) : y - ), extent.apply(this, arguments), translateExtent); - }); - }; - - zoom.translateTo = function(selection, x, y, p) { - zoom.transform(selection, function() { - var e = extent.apply(this, arguments), - t = this.__zoom, - p0 = p == null ? centroid(e) : typeof p === "function" ? p.apply(this, arguments) : p; - return constrain(_transform_js__WEBPACK_IMPORTED_MODULE_3__.identity.translate(p0[0], p0[1]).scale(t.k).translate( - typeof x === "function" ? -x.apply(this, arguments) : -x, - typeof y === "function" ? -y.apply(this, arguments) : -y - ), e, translateExtent); - }, p); - }; - - function scale(transform, k) { - k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], k)); - return k === transform.k ? transform : new _transform_js__WEBPACK_IMPORTED_MODULE_3__.Transform(k, transform.x, transform.y); - } - - function translate(transform, p0, p1) { - var x = p0[0] - p1[0] * transform.k, y = p0[1] - p1[1] * transform.k; - return x === transform.x && y === transform.y ? transform : new _transform_js__WEBPACK_IMPORTED_MODULE_3__.Transform(transform.k, x, y); - } - - function centroid(extent) { - return [(+extent[0][0] + +extent[1][0]) / 2, (+extent[0][1] + +extent[1][1]) / 2]; - } - - function schedule(transition, transform, point) { - transition - .on("start.zoom", function() { gesture(this, arguments).start(); }) - .on("interrupt.zoom end.zoom", function() { gesture(this, arguments).end(); }) - .tween("zoom", function() { - var that = this, - args = arguments, - g = gesture(that, args), - e = extent.apply(that, args), - p = point == null ? centroid(e) : typeof point === "function" ? point.apply(that, args) : point, - w = Math.max(e[1][0] - e[0][0], e[1][1] - e[0][1]), - a = that.__zoom, - b = typeof transform === "function" ? transform.apply(that, args) : transform, - i = interpolate(a.invert(p).concat(w / a.k), b.invert(p).concat(w / b.k)); - return function(t) { - if (t === 1) t = b; // Avoid rounding error on end. - 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); } - g.zoom(null, t); - }; - }); - } - - function gesture(that, args, clean) { - return (!clean && that.__zooming) || new Gesture(that, args); - } - - function Gesture(that, args) { - this.that = that; - this.args = args; - this.active = 0; - this.extent = extent.apply(that, args); - this.taps = 0; - } - - Gesture.prototype = { - start: function() { - if (++this.active === 1) { - this.that.__zooming = this; - this.emit("start"); - } - return this; - }, - zoom: function(key, transform) { - if (this.mouse && key !== "mouse") this.mouse[1] = transform.invert(this.mouse[0]); - if (this.touch0 && key !== "touch") this.touch0[1] = transform.invert(this.touch0[0]); - if (this.touch1 && key !== "touch") this.touch1[1] = transform.invert(this.touch1[0]); - this.that.__zoom = transform; - this.emit("zoom"); - return this; - }, - end: function() { - if (--this.active === 0) { - delete this.that.__zooming; - this.emit("end"); - } - return this; - }, - emit: function(type) { - (0,d3_selection__WEBPACK_IMPORTED_MODULE_5__.customEvent)(new _event_js__WEBPACK_IMPORTED_MODULE_2__["default"](zoom, type, this.that.__zoom), listeners.apply, listeners, [type, this.that, this.args]); - } - }; - - function wheeled() { - if (!filter.apply(this, arguments)) return; - var g = gesture(this, arguments), - t = this.__zoom, - k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], t.k * Math.pow(2, wheelDelta.apply(this, arguments)))), - p = (0,d3_selection__WEBPACK_IMPORTED_MODULE_8__["default"])(this); - - // If the mouse is in the same location as before, reuse it. - // If there were recent wheel events, reset the wheel idle timeout. - if (g.wheel) { - if (g.mouse[0][0] !== p[0] || g.mouse[0][1] !== p[1]) { - g.mouse[1] = t.invert(g.mouse[0] = p); - } - clearTimeout(g.wheel); - } - - // If this wheel event won’t trigger a transform change, ignore it. - else if (t.k === k) return; - - // Otherwise, capture the mouse point and location at the start. - else { - g.mouse = [p, t.invert(p)]; - (0,d3_transition__WEBPACK_IMPORTED_MODULE_0__.interrupt)(this); - g.start(); - } - - (0,_noevent_js__WEBPACK_IMPORTED_MODULE_4__["default"])(); - g.wheel = setTimeout(wheelidled, wheelDelay); - g.zoom("mouse", constrain(translate(scale(t, k), g.mouse[0], g.mouse[1]), g.extent, translateExtent)); - - function wheelidled() { - g.wheel = null; - g.end(); - } - } - - function mousedowned() { - if (touchending || !filter.apply(this, arguments)) return; - var g = gesture(this, arguments, true), - v = (0,d3_selection__WEBPACK_IMPORTED_MODULE_9__["default"])(d3_selection__WEBPACK_IMPORTED_MODULE_5__.event.view).on("mousemove.zoom", mousemoved, true).on("mouseup.zoom", mouseupped, true), - p = (0,d3_selection__WEBPACK_IMPORTED_MODULE_8__["default"])(this), - x0 = d3_selection__WEBPACK_IMPORTED_MODULE_5__.event.clientX, - y0 = d3_selection__WEBPACK_IMPORTED_MODULE_5__.event.clientY; - - (0,d3_drag__WEBPACK_IMPORTED_MODULE_10__["default"])(d3_selection__WEBPACK_IMPORTED_MODULE_5__.event.view); - (0,_noevent_js__WEBPACK_IMPORTED_MODULE_4__.nopropagation)(); - g.mouse = [p, this.__zoom.invert(p)]; - (0,d3_transition__WEBPACK_IMPORTED_MODULE_0__.interrupt)(this); - g.start(); - - function mousemoved() { - (0,_noevent_js__WEBPACK_IMPORTED_MODULE_4__["default"])(); - if (!g.moved) { - var dx = d3_selection__WEBPACK_IMPORTED_MODULE_5__.event.clientX - x0, dy = d3_selection__WEBPACK_IMPORTED_MODULE_5__.event.clientY - y0; - g.moved = dx * dx + dy * dy > clickDistance2; - } - g.zoom("mouse", constrain(translate(g.that.__zoom, g.mouse[0] = (0,d3_selection__WEBPACK_IMPORTED_MODULE_8__["default"])(g.that), g.mouse[1]), g.extent, translateExtent)); - } - - function mouseupped() { - v.on("mousemove.zoom mouseup.zoom", null); - (0,d3_drag__WEBPACK_IMPORTED_MODULE_10__.yesdrag)(d3_selection__WEBPACK_IMPORTED_MODULE_5__.event.view, g.moved); - (0,_noevent_js__WEBPACK_IMPORTED_MODULE_4__["default"])(); - g.end(); - } - } - - function dblclicked() { - if (!filter.apply(this, arguments)) return; - var t0 = this.__zoom, - p0 = (0,d3_selection__WEBPACK_IMPORTED_MODULE_8__["default"])(this), - p1 = t0.invert(p0), - k1 = t0.k * (d3_selection__WEBPACK_IMPORTED_MODULE_5__.event.shiftKey ? 0.5 : 2), - t1 = constrain(translate(scale(t0, k1), p0, p1), extent.apply(this, arguments), translateExtent); - - (0,_noevent_js__WEBPACK_IMPORTED_MODULE_4__["default"])(); - if (duration > 0) (0,d3_selection__WEBPACK_IMPORTED_MODULE_9__["default"])(this).transition().duration(duration).call(schedule, t1, p0); - else (0,d3_selection__WEBPACK_IMPORTED_MODULE_9__["default"])(this).call(zoom.transform, t1); - } - - function touchstarted() { - if (!filter.apply(this, arguments)) return; - var touches = d3_selection__WEBPACK_IMPORTED_MODULE_5__.event.touches, - n = touches.length, - g = gesture(this, arguments, d3_selection__WEBPACK_IMPORTED_MODULE_5__.event.changedTouches.length === n), - started, i, t, p; - - (0,_noevent_js__WEBPACK_IMPORTED_MODULE_4__.nopropagation)(); - for (i = 0; i < n; ++i) { - t = touches[i], p = (0,d3_selection__WEBPACK_IMPORTED_MODULE_11__["default"])(this, touches, t.identifier); - p = [p, this.__zoom.invert(p), t.identifier]; - if (!g.touch0) g.touch0 = p, started = true, g.taps = 1 + !!touchstarting; - else if (!g.touch1 && g.touch0[2] !== p[2]) g.touch1 = p, g.taps = 0; - } - - if (touchstarting) touchstarting = clearTimeout(touchstarting); - - if (started) { - if (g.taps < 2) touchstarting = setTimeout(function() { touchstarting = null; }, touchDelay); - (0,d3_transition__WEBPACK_IMPORTED_MODULE_0__.interrupt)(this); - g.start(); - } - } - - function touchmoved() { - if (!this.__zooming) return; - var g = gesture(this, arguments), - touches = d3_selection__WEBPACK_IMPORTED_MODULE_5__.event.changedTouches, - n = touches.length, i, t, p, l; - - (0,_noevent_js__WEBPACK_IMPORTED_MODULE_4__["default"])(); - if (touchstarting) touchstarting = clearTimeout(touchstarting); - g.taps = 0; - for (i = 0; i < n; ++i) { - t = touches[i], p = (0,d3_selection__WEBPACK_IMPORTED_MODULE_11__["default"])(this, touches, t.identifier); - if (g.touch0 && g.touch0[2] === t.identifier) g.touch0[0] = p; - else if (g.touch1 && g.touch1[2] === t.identifier) g.touch1[0] = p; - } - t = g.that.__zoom; - if (g.touch1) { - var p0 = g.touch0[0], l0 = g.touch0[1], - p1 = g.touch1[0], l1 = g.touch1[1], - dp = (dp = p1[0] - p0[0]) * dp + (dp = p1[1] - p0[1]) * dp, - dl = (dl = l1[0] - l0[0]) * dl + (dl = l1[1] - l0[1]) * dl; - t = scale(t, Math.sqrt(dp / dl)); - p = [(p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2]; - l = [(l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2]; - } - else if (g.touch0) p = g.touch0[0], l = g.touch0[1]; - else return; - g.zoom("touch", constrain(translate(t, p, l), g.extent, translateExtent)); - } - - function touchended() { - if (!this.__zooming) return; - var g = gesture(this, arguments), - touches = d3_selection__WEBPACK_IMPORTED_MODULE_5__.event.changedTouches, - n = touches.length, i, t; - - (0,_noevent_js__WEBPACK_IMPORTED_MODULE_4__.nopropagation)(); - if (touchending) clearTimeout(touchending); - touchending = setTimeout(function() { touchending = null; }, touchDelay); - for (i = 0; i < n; ++i) { - t = touches[i]; - if (g.touch0 && g.touch0[2] === t.identifier) delete g.touch0; - else if (g.touch1 && g.touch1[2] === t.identifier) delete g.touch1; - } - if (g.touch1 && !g.touch0) g.touch0 = g.touch1, delete g.touch1; - if (g.touch0) g.touch0[1] = this.__zoom.invert(g.touch0[0]); - else { - g.end(); - // If this was a dbltap, reroute to the (optional) dblclick.zoom handler. - if (g.taps === 2) { - var p = (0,d3_selection__WEBPACK_IMPORTED_MODULE_9__["default"])(this).on("dblclick.zoom"); - if (p) p.apply(this, arguments); - } - } - } - - zoom.wheelDelta = function(_) { - return arguments.length ? (wheelDelta = typeof _ === "function" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_1__["default"])(+_), zoom) : wheelDelta; - }; - - zoom.filter = function(_) { - return arguments.length ? (filter = typeof _ === "function" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_1__["default"])(!!_), zoom) : filter; - }; - - zoom.touchable = function(_) { - return arguments.length ? (touchable = typeof _ === "function" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_1__["default"])(!!_), zoom) : touchable; - }; - - zoom.extent = function(_) { - return arguments.length ? (extent = typeof _ === "function" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_1__["default"])([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), zoom) : extent; - }; - - zoom.scaleExtent = function(_) { - return arguments.length ? (scaleExtent[0] = +_[0], scaleExtent[1] = +_[1], zoom) : [scaleExtent[0], scaleExtent[1]]; - }; - - zoom.translateExtent = function(_) { - 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]]]; - }; - - zoom.constrain = function(_) { - return arguments.length ? (constrain = _, zoom) : constrain; - }; - - zoom.duration = function(_) { - return arguments.length ? (duration = +_, zoom) : duration; - }; - - zoom.interpolate = function(_) { - return arguments.length ? (interpolate = _, zoom) : interpolate; - }; - - zoom.on = function() { - var value = listeners.on.apply(listeners, arguments); - return value === listeners ? zoom : value; - }; - - zoom.clickDistance = function(_) { - return arguments.length ? (clickDistance2 = (_ = +_) * _, zoom) : Math.sqrt(clickDistance2); - }; - - return zoom; -} - - -/***/ }), - -/***/ "./node_modules/d3/dist/package.js": -/*!*****************************************!*\ - !*** ./node_modules/d3/dist/package.js ***! - \*****************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "author": () => (/* binding */ author), -/* harmony export */ "dependencies": () => (/* binding */ dependencies), -/* harmony export */ "description": () => (/* binding */ description), -/* harmony export */ "devDependencies": () => (/* binding */ devDependencies), -/* harmony export */ "files": () => (/* binding */ files), -/* harmony export */ "homepage": () => (/* binding */ homepage), -/* harmony export */ "jsdelivr": () => (/* binding */ jsdelivr), -/* harmony export */ "keywords": () => (/* binding */ keywords), -/* harmony export */ "license": () => (/* binding */ license), -/* harmony export */ "main": () => (/* binding */ main), -/* harmony export */ "module": () => (/* binding */ module), -/* harmony export */ "name": () => (/* binding */ name), -/* harmony export */ "repository": () => (/* binding */ repository), -/* harmony export */ "scripts": () => (/* binding */ scripts), -/* harmony export */ "unpkg": () => (/* binding */ unpkg), -/* harmony export */ "version": () => (/* binding */ version) -/* harmony export */ }); -var name = "d3"; -var version = "5.16.0"; -var description = "Data-Driven Documents"; -var keywords = ["dom","visualization","svg","animation","canvas"]; -var homepage = "https://d3js.org"; -var license = "BSD-3-Clause"; -var author = {"name":"Mike Bostock","url":"https://bost.ocks.org/mike"}; -var main = "dist/d3.node.js"; -var unpkg = "dist/d3.min.js"; -var jsdelivr = "dist/d3.min.js"; -var module = "index.js"; -var repository = {"type":"git","url":"https://github.com/d3/d3.git"}; -var files = ["dist/**/*.js","index.js"]; -var scripts = {"pretest":"rimraf dist && mkdir dist && json2module package.json > dist/package.js && rollup -c","test":"tape 'test/**/*-test.js'","prepublishOnly":"yarn test","postpublish":"git push && git push --tags && cd ../d3.github.com && git pull && cp ../d3/dist/d3.js d3.v5.js && cp ../d3/dist/d3.min.js d3.v5.min.js && git add d3.v5.js d3.v5.min.js && git commit -m \"d3 ${npm_package_version}\" && git push && cd - && cd ../d3-bower && git pull && cp ../d3/LICENSE ../d3/README.md ../d3/dist/d3.js ../d3/dist/d3.min.js . && git add -- LICENSE README.md d3.js d3.min.js && git commit -m \"${npm_package_version}\" && git tag -am \"${npm_package_version}\" v${npm_package_version} && git push && git push --tags && cd - && zip -j dist/d3.zip -- LICENSE README.md API.md CHANGES.md dist/d3.js dist/d3.min.js"}; -var devDependencies = {"json2module":"0.0","rimraf":"2","rollup":"1","rollup-plugin-ascii":"0.0","rollup-plugin-node-resolve":"3","rollup-plugin-terser":"5","tape":"4"}; -var dependencies = {"d3-array":"1","d3-axis":"1","d3-brush":"1","d3-chord":"1","d3-collection":"1","d3-color":"1","d3-contour":"1","d3-dispatch":"1","d3-drag":"1","d3-dsv":"1","d3-ease":"1","d3-fetch":"1","d3-force":"1","d3-format":"1","d3-geo":"1","d3-hierarchy":"1","d3-interpolate":"1","d3-path":"1","d3-polygon":"1","d3-quadtree":"1","d3-random":"1","d3-scale":"2","d3-scale-chromatic":"1","d3-selection":"1","d3-shape":"1","d3-time":"1","d3-time-format":"2","d3-timer":"1","d3-transition":"1","d3-voronoi":"1","d3-zoom":"1"}; - - -/***/ }), - -/***/ "./node_modules/d3/index.js": -/*!**********************************!*\ - !*** ./node_modules/d3/index.js ***! - \**********************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "FormatSpecifier": () => (/* reexport safe */ d3_format__WEBPACK_IMPORTED_MODULE_14__.FormatSpecifier), -/* harmony export */ "active": () => (/* reexport safe */ d3_transition__WEBPACK_IMPORTED_MODULE_29__.active), -/* harmony export */ "arc": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_25__.arc), -/* harmony export */ "area": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_25__.area), -/* harmony export */ "areaRadial": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_25__.areaRadial), -/* harmony export */ "ascending": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_1__.ascending), -/* harmony export */ "autoType": () => (/* reexport safe */ d3_dsv__WEBPACK_IMPORTED_MODULE_10__.autoType), -/* harmony export */ "axisBottom": () => (/* reexport safe */ d3_axis__WEBPACK_IMPORTED_MODULE_2__.axisBottom), -/* harmony export */ "axisLeft": () => (/* reexport safe */ d3_axis__WEBPACK_IMPORTED_MODULE_2__.axisLeft), -/* harmony export */ "axisRight": () => (/* reexport safe */ d3_axis__WEBPACK_IMPORTED_MODULE_2__.axisRight), -/* harmony export */ "axisTop": () => (/* reexport safe */ d3_axis__WEBPACK_IMPORTED_MODULE_2__.axisTop), -/* harmony export */ "bisect": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_1__.bisect), -/* harmony export */ "bisectLeft": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_1__.bisectLeft), -/* harmony export */ "bisectRight": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_1__.bisectRight), -/* harmony export */ "bisector": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_1__.bisector), -/* harmony export */ "blob": () => (/* reexport safe */ d3_fetch__WEBPACK_IMPORTED_MODULE_12__.blob), -/* harmony export */ "brush": () => (/* reexport safe */ d3_brush__WEBPACK_IMPORTED_MODULE_3__.brush), -/* harmony export */ "brushSelection": () => (/* reexport safe */ d3_brush__WEBPACK_IMPORTED_MODULE_3__.brushSelection), -/* harmony export */ "brushX": () => (/* reexport safe */ d3_brush__WEBPACK_IMPORTED_MODULE_3__.brushX), -/* harmony export */ "brushY": () => (/* reexport safe */ d3_brush__WEBPACK_IMPORTED_MODULE_3__.brushY), -/* harmony export */ "buffer": () => (/* reexport safe */ d3_fetch__WEBPACK_IMPORTED_MODULE_12__.buffer), -/* harmony export */ "chord": () => (/* reexport safe */ d3_chord__WEBPACK_IMPORTED_MODULE_4__.chord), -/* harmony export */ "clientPoint": () => (/* reexport safe */ d3_selection__WEBPACK_IMPORTED_MODULE_24__.clientPoint), -/* harmony export */ "cluster": () => (/* reexport safe */ d3_hierarchy__WEBPACK_IMPORTED_MODULE_16__.cluster), -/* harmony export */ "color": () => (/* reexport safe */ d3_color__WEBPACK_IMPORTED_MODULE_6__.color), -/* harmony export */ "contourDensity": () => (/* reexport safe */ d3_contour__WEBPACK_IMPORTED_MODULE_7__.contourDensity), -/* harmony export */ "contours": () => (/* reexport safe */ d3_contour__WEBPACK_IMPORTED_MODULE_7__.contours), -/* harmony export */ "create": () => (/* reexport safe */ d3_selection__WEBPACK_IMPORTED_MODULE_24__.create), -/* harmony export */ "creator": () => (/* reexport safe */ d3_selection__WEBPACK_IMPORTED_MODULE_24__.creator), -/* harmony export */ "cross": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_1__.cross), -/* harmony export */ "csv": () => (/* reexport safe */ d3_fetch__WEBPACK_IMPORTED_MODULE_12__.csv), -/* harmony export */ "csvFormat": () => (/* reexport safe */ d3_dsv__WEBPACK_IMPORTED_MODULE_10__.csvFormat), -/* harmony export */ "csvFormatBody": () => (/* reexport safe */ d3_dsv__WEBPACK_IMPORTED_MODULE_10__.csvFormatBody), -/* harmony export */ "csvFormatRow": () => (/* reexport safe */ d3_dsv__WEBPACK_IMPORTED_MODULE_10__.csvFormatRow), -/* harmony export */ "csvFormatRows": () => (/* reexport safe */ d3_dsv__WEBPACK_IMPORTED_MODULE_10__.csvFormatRows), -/* harmony export */ "csvFormatValue": () => (/* reexport safe */ d3_dsv__WEBPACK_IMPORTED_MODULE_10__.csvFormatValue), -/* harmony export */ "csvParse": () => (/* reexport safe */ d3_dsv__WEBPACK_IMPORTED_MODULE_10__.csvParse), -/* harmony export */ "csvParseRows": () => (/* reexport safe */ d3_dsv__WEBPACK_IMPORTED_MODULE_10__.csvParseRows), -/* harmony export */ "cubehelix": () => (/* reexport safe */ d3_color__WEBPACK_IMPORTED_MODULE_6__.cubehelix), -/* harmony export */ "curveBasis": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_25__.curveBasis), -/* harmony export */ "curveBasisClosed": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_25__.curveBasisClosed), -/* harmony export */ "curveBasisOpen": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_25__.curveBasisOpen), -/* harmony export */ "curveBundle": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_25__.curveBundle), -/* harmony export */ "curveCardinal": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_25__.curveCardinal), -/* harmony export */ "curveCardinalClosed": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_25__.curveCardinalClosed), -/* harmony export */ "curveCardinalOpen": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_25__.curveCardinalOpen), -/* harmony export */ "curveCatmullRom": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_25__.curveCatmullRom), -/* harmony export */ "curveCatmullRomClosed": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_25__.curveCatmullRomClosed), -/* harmony export */ "curveCatmullRomOpen": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_25__.curveCatmullRomOpen), -/* harmony export */ "curveLinear": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_25__.curveLinear), -/* harmony export */ "curveLinearClosed": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_25__.curveLinearClosed), -/* harmony export */ "curveMonotoneX": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_25__.curveMonotoneX), -/* harmony export */ "curveMonotoneY": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_25__.curveMonotoneY), -/* harmony export */ "curveNatural": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_25__.curveNatural), -/* harmony export */ "curveStep": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_25__.curveStep), -/* harmony export */ "curveStepAfter": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_25__.curveStepAfter), -/* harmony export */ "curveStepBefore": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_25__.curveStepBefore), -/* harmony export */ "customEvent": () => (/* reexport safe */ d3_selection__WEBPACK_IMPORTED_MODULE_24__.customEvent), -/* harmony export */ "descending": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_1__.descending), -/* harmony export */ "deviation": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_1__.deviation), -/* harmony export */ "dispatch": () => (/* reexport safe */ d3_dispatch__WEBPACK_IMPORTED_MODULE_8__.dispatch), -/* harmony export */ "drag": () => (/* reexport safe */ d3_drag__WEBPACK_IMPORTED_MODULE_9__.drag), -/* harmony export */ "dragDisable": () => (/* reexport safe */ d3_drag__WEBPACK_IMPORTED_MODULE_9__.dragDisable), -/* harmony export */ "dragEnable": () => (/* reexport safe */ d3_drag__WEBPACK_IMPORTED_MODULE_9__.dragEnable), -/* harmony export */ "dsv": () => (/* reexport safe */ d3_fetch__WEBPACK_IMPORTED_MODULE_12__.dsv), -/* harmony export */ "dsvFormat": () => (/* reexport safe */ d3_dsv__WEBPACK_IMPORTED_MODULE_10__.dsvFormat), -/* harmony export */ "easeBack": () => (/* reexport safe */ d3_ease__WEBPACK_IMPORTED_MODULE_11__.easeBack), -/* harmony export */ "easeBackIn": () => (/* reexport safe */ d3_ease__WEBPACK_IMPORTED_MODULE_11__.easeBackIn), -/* harmony export */ "easeBackInOut": () => (/* reexport safe */ d3_ease__WEBPACK_IMPORTED_MODULE_11__.easeBackInOut), -/* harmony export */ "easeBackOut": () => (/* reexport safe */ d3_ease__WEBPACK_IMPORTED_MODULE_11__.easeBackOut), -/* harmony export */ "easeBounce": () => (/* reexport safe */ d3_ease__WEBPACK_IMPORTED_MODULE_11__.easeBounce), -/* harmony export */ "easeBounceIn": () => (/* reexport safe */ d3_ease__WEBPACK_IMPORTED_MODULE_11__.easeBounceIn), -/* harmony export */ "easeBounceInOut": () => (/* reexport safe */ d3_ease__WEBPACK_IMPORTED_MODULE_11__.easeBounceInOut), -/* harmony export */ "easeBounceOut": () => (/* reexport safe */ d3_ease__WEBPACK_IMPORTED_MODULE_11__.easeBounceOut), -/* harmony export */ "easeCircle": () => (/* reexport safe */ d3_ease__WEBPACK_IMPORTED_MODULE_11__.easeCircle), -/* harmony export */ "easeCircleIn": () => (/* reexport safe */ d3_ease__WEBPACK_IMPORTED_MODULE_11__.easeCircleIn), -/* harmony export */ "easeCircleInOut": () => (/* reexport safe */ d3_ease__WEBPACK_IMPORTED_MODULE_11__.easeCircleInOut), -/* harmony export */ "easeCircleOut": () => (/* reexport safe */ d3_ease__WEBPACK_IMPORTED_MODULE_11__.easeCircleOut), -/* harmony export */ "easeCubic": () => (/* reexport safe */ d3_ease__WEBPACK_IMPORTED_MODULE_11__.easeCubic), -/* harmony export */ "easeCubicIn": () => (/* reexport safe */ d3_ease__WEBPACK_IMPORTED_MODULE_11__.easeCubicIn), -/* harmony export */ "easeCubicInOut": () => (/* reexport safe */ d3_ease__WEBPACK_IMPORTED_MODULE_11__.easeCubicInOut), -/* harmony export */ "easeCubicOut": () => (/* reexport safe */ d3_ease__WEBPACK_IMPORTED_MODULE_11__.easeCubicOut), -/* harmony export */ "easeElastic": () => (/* reexport safe */ d3_ease__WEBPACK_IMPORTED_MODULE_11__.easeElastic), -/* harmony export */ "easeElasticIn": () => (/* reexport safe */ d3_ease__WEBPACK_IMPORTED_MODULE_11__.easeElasticIn), -/* harmony export */ "easeElasticInOut": () => (/* reexport safe */ d3_ease__WEBPACK_IMPORTED_MODULE_11__.easeElasticInOut), -/* harmony export */ "easeElasticOut": () => (/* reexport safe */ d3_ease__WEBPACK_IMPORTED_MODULE_11__.easeElasticOut), -/* harmony export */ "easeExp": () => (/* reexport safe */ d3_ease__WEBPACK_IMPORTED_MODULE_11__.easeExp), -/* harmony export */ "easeExpIn": () => (/* reexport safe */ d3_ease__WEBPACK_IMPORTED_MODULE_11__.easeExpIn), -/* harmony export */ "easeExpInOut": () => (/* reexport safe */ d3_ease__WEBPACK_IMPORTED_MODULE_11__.easeExpInOut), -/* harmony export */ "easeExpOut": () => (/* reexport safe */ d3_ease__WEBPACK_IMPORTED_MODULE_11__.easeExpOut), -/* harmony export */ "easeLinear": () => (/* reexport safe */ d3_ease__WEBPACK_IMPORTED_MODULE_11__.easeLinear), -/* harmony export */ "easePoly": () => (/* reexport safe */ d3_ease__WEBPACK_IMPORTED_MODULE_11__.easePoly), -/* harmony export */ "easePolyIn": () => (/* reexport safe */ d3_ease__WEBPACK_IMPORTED_MODULE_11__.easePolyIn), -/* harmony export */ "easePolyInOut": () => (/* reexport safe */ d3_ease__WEBPACK_IMPORTED_MODULE_11__.easePolyInOut), -/* harmony export */ "easePolyOut": () => (/* reexport safe */ d3_ease__WEBPACK_IMPORTED_MODULE_11__.easePolyOut), -/* harmony export */ "easeQuad": () => (/* reexport safe */ d3_ease__WEBPACK_IMPORTED_MODULE_11__.easeQuad), -/* harmony export */ "easeQuadIn": () => (/* reexport safe */ d3_ease__WEBPACK_IMPORTED_MODULE_11__.easeQuadIn), -/* harmony export */ "easeQuadInOut": () => (/* reexport safe */ d3_ease__WEBPACK_IMPORTED_MODULE_11__.easeQuadInOut), -/* harmony export */ "easeQuadOut": () => (/* reexport safe */ d3_ease__WEBPACK_IMPORTED_MODULE_11__.easeQuadOut), -/* harmony export */ "easeSin": () => (/* reexport safe */ d3_ease__WEBPACK_IMPORTED_MODULE_11__.easeSin), -/* harmony export */ "easeSinIn": () => (/* reexport safe */ d3_ease__WEBPACK_IMPORTED_MODULE_11__.easeSinIn), -/* harmony export */ "easeSinInOut": () => (/* reexport safe */ d3_ease__WEBPACK_IMPORTED_MODULE_11__.easeSinInOut), -/* harmony export */ "easeSinOut": () => (/* reexport safe */ d3_ease__WEBPACK_IMPORTED_MODULE_11__.easeSinOut), -/* harmony export */ "entries": () => (/* reexport safe */ d3_collection__WEBPACK_IMPORTED_MODULE_5__.entries), -/* harmony export */ "event": () => (/* reexport safe */ d3_selection__WEBPACK_IMPORTED_MODULE_24__.event), -/* harmony export */ "extent": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_1__.extent), -/* harmony export */ "forceCenter": () => (/* reexport safe */ d3_force__WEBPACK_IMPORTED_MODULE_13__.forceCenter), -/* harmony export */ "forceCollide": () => (/* reexport safe */ d3_force__WEBPACK_IMPORTED_MODULE_13__.forceCollide), -/* harmony export */ "forceLink": () => (/* reexport safe */ d3_force__WEBPACK_IMPORTED_MODULE_13__.forceLink), -/* harmony export */ "forceManyBody": () => (/* reexport safe */ d3_force__WEBPACK_IMPORTED_MODULE_13__.forceManyBody), -/* harmony export */ "forceRadial": () => (/* reexport safe */ d3_force__WEBPACK_IMPORTED_MODULE_13__.forceRadial), -/* harmony export */ "forceSimulation": () => (/* reexport safe */ d3_force__WEBPACK_IMPORTED_MODULE_13__.forceSimulation), -/* harmony export */ "forceX": () => (/* reexport safe */ d3_force__WEBPACK_IMPORTED_MODULE_13__.forceX), -/* harmony export */ "forceY": () => (/* reexport safe */ d3_force__WEBPACK_IMPORTED_MODULE_13__.forceY), -/* harmony export */ "format": () => (/* reexport safe */ d3_format__WEBPACK_IMPORTED_MODULE_14__.format), -/* harmony export */ "formatDefaultLocale": () => (/* reexport safe */ d3_format__WEBPACK_IMPORTED_MODULE_14__.formatDefaultLocale), -/* harmony export */ "formatLocale": () => (/* reexport safe */ d3_format__WEBPACK_IMPORTED_MODULE_14__.formatLocale), -/* harmony export */ "formatPrefix": () => (/* reexport safe */ d3_format__WEBPACK_IMPORTED_MODULE_14__.formatPrefix), -/* harmony export */ "formatSpecifier": () => (/* reexport safe */ d3_format__WEBPACK_IMPORTED_MODULE_14__.formatSpecifier), -/* harmony export */ "geoAlbers": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_15__.geoAlbers), -/* harmony export */ "geoAlbersUsa": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_15__.geoAlbersUsa), -/* harmony export */ "geoArea": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_15__.geoArea), -/* harmony export */ "geoAzimuthalEqualArea": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_15__.geoAzimuthalEqualArea), -/* harmony export */ "geoAzimuthalEqualAreaRaw": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_15__.geoAzimuthalEqualAreaRaw), -/* harmony export */ "geoAzimuthalEquidistant": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_15__.geoAzimuthalEquidistant), -/* harmony export */ "geoAzimuthalEquidistantRaw": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_15__.geoAzimuthalEquidistantRaw), -/* harmony export */ "geoBounds": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_15__.geoBounds), -/* harmony export */ "geoCentroid": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_15__.geoCentroid), -/* harmony export */ "geoCircle": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_15__.geoCircle), -/* harmony export */ "geoClipAntimeridian": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_15__.geoClipAntimeridian), -/* harmony export */ "geoClipCircle": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_15__.geoClipCircle), -/* harmony export */ "geoClipExtent": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_15__.geoClipExtent), -/* harmony export */ "geoClipRectangle": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_15__.geoClipRectangle), -/* harmony export */ "geoConicConformal": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_15__.geoConicConformal), -/* harmony export */ "geoConicConformalRaw": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_15__.geoConicConformalRaw), -/* harmony export */ "geoConicEqualArea": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_15__.geoConicEqualArea), -/* harmony export */ "geoConicEqualAreaRaw": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_15__.geoConicEqualAreaRaw), -/* harmony export */ "geoConicEquidistant": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_15__.geoConicEquidistant), -/* harmony export */ "geoConicEquidistantRaw": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_15__.geoConicEquidistantRaw), -/* harmony export */ "geoContains": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_15__.geoContains), -/* harmony export */ "geoDistance": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_15__.geoDistance), -/* harmony export */ "geoEqualEarth": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_15__.geoEqualEarth), -/* harmony export */ "geoEqualEarthRaw": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_15__.geoEqualEarthRaw), -/* harmony export */ "geoEquirectangular": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_15__.geoEquirectangular), -/* harmony export */ "geoEquirectangularRaw": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_15__.geoEquirectangularRaw), -/* harmony export */ "geoGnomonic": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_15__.geoGnomonic), -/* harmony export */ "geoGnomonicRaw": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_15__.geoGnomonicRaw), -/* harmony export */ "geoGraticule": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_15__.geoGraticule), -/* harmony export */ "geoGraticule10": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_15__.geoGraticule10), -/* harmony export */ "geoIdentity": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_15__.geoIdentity), -/* harmony export */ "geoInterpolate": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_15__.geoInterpolate), -/* harmony export */ "geoLength": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_15__.geoLength), -/* harmony export */ "geoMercator": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_15__.geoMercator), -/* harmony export */ "geoMercatorRaw": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_15__.geoMercatorRaw), -/* harmony export */ "geoNaturalEarth1": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_15__.geoNaturalEarth1), -/* harmony export */ "geoNaturalEarth1Raw": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_15__.geoNaturalEarth1Raw), -/* harmony export */ "geoOrthographic": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_15__.geoOrthographic), -/* harmony export */ "geoOrthographicRaw": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_15__.geoOrthographicRaw), -/* harmony export */ "geoPath": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_15__.geoPath), -/* harmony export */ "geoProjection": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_15__.geoProjection), -/* harmony export */ "geoProjectionMutator": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_15__.geoProjectionMutator), -/* harmony export */ "geoRotation": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_15__.geoRotation), -/* harmony export */ "geoStereographic": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_15__.geoStereographic), -/* harmony export */ "geoStereographicRaw": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_15__.geoStereographicRaw), -/* harmony export */ "geoStream": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_15__.geoStream), -/* harmony export */ "geoTransform": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_15__.geoTransform), -/* harmony export */ "geoTransverseMercator": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_15__.geoTransverseMercator), -/* harmony export */ "geoTransverseMercatorRaw": () => (/* reexport safe */ d3_geo__WEBPACK_IMPORTED_MODULE_15__.geoTransverseMercatorRaw), -/* harmony export */ "gray": () => (/* reexport safe */ d3_color__WEBPACK_IMPORTED_MODULE_6__.gray), -/* harmony export */ "hcl": () => (/* reexport safe */ d3_color__WEBPACK_IMPORTED_MODULE_6__.hcl), -/* harmony export */ "hierarchy": () => (/* reexport safe */ d3_hierarchy__WEBPACK_IMPORTED_MODULE_16__.hierarchy), -/* harmony export */ "histogram": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_1__.histogram), -/* harmony export */ "hsl": () => (/* reexport safe */ d3_color__WEBPACK_IMPORTED_MODULE_6__.hsl), -/* harmony export */ "html": () => (/* reexport safe */ d3_fetch__WEBPACK_IMPORTED_MODULE_12__.html), -/* harmony export */ "image": () => (/* reexport safe */ d3_fetch__WEBPACK_IMPORTED_MODULE_12__.image), -/* harmony export */ "interpolate": () => (/* reexport safe */ d3_interpolate__WEBPACK_IMPORTED_MODULE_17__.interpolate), -/* harmony export */ "interpolateArray": () => (/* reexport safe */ d3_interpolate__WEBPACK_IMPORTED_MODULE_17__.interpolateArray), -/* harmony export */ "interpolateBasis": () => (/* reexport safe */ d3_interpolate__WEBPACK_IMPORTED_MODULE_17__.interpolateBasis), -/* harmony export */ "interpolateBasisClosed": () => (/* reexport safe */ d3_interpolate__WEBPACK_IMPORTED_MODULE_17__.interpolateBasisClosed), -/* harmony export */ "interpolateBlues": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__.interpolateBlues), -/* harmony export */ "interpolateBrBG": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__.interpolateBrBG), -/* harmony export */ "interpolateBuGn": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__.interpolateBuGn), -/* harmony export */ "interpolateBuPu": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__.interpolateBuPu), -/* harmony export */ "interpolateCividis": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__.interpolateCividis), -/* harmony export */ "interpolateCool": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__.interpolateCool), -/* harmony export */ "interpolateCubehelix": () => (/* reexport safe */ d3_interpolate__WEBPACK_IMPORTED_MODULE_17__.interpolateCubehelix), -/* harmony export */ "interpolateCubehelixDefault": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__.interpolateCubehelixDefault), -/* harmony export */ "interpolateCubehelixLong": () => (/* reexport safe */ d3_interpolate__WEBPACK_IMPORTED_MODULE_17__.interpolateCubehelixLong), -/* harmony export */ "interpolateDate": () => (/* reexport safe */ d3_interpolate__WEBPACK_IMPORTED_MODULE_17__.interpolateDate), -/* harmony export */ "interpolateDiscrete": () => (/* reexport safe */ d3_interpolate__WEBPACK_IMPORTED_MODULE_17__.interpolateDiscrete), -/* harmony export */ "interpolateGnBu": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__.interpolateGnBu), -/* harmony export */ "interpolateGreens": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__.interpolateGreens), -/* harmony export */ "interpolateGreys": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__.interpolateGreys), -/* harmony export */ "interpolateHcl": () => (/* reexport safe */ d3_interpolate__WEBPACK_IMPORTED_MODULE_17__.interpolateHcl), -/* harmony export */ "interpolateHclLong": () => (/* reexport safe */ d3_interpolate__WEBPACK_IMPORTED_MODULE_17__.interpolateHclLong), -/* harmony export */ "interpolateHsl": () => (/* reexport safe */ d3_interpolate__WEBPACK_IMPORTED_MODULE_17__.interpolateHsl), -/* harmony export */ "interpolateHslLong": () => (/* reexport safe */ d3_interpolate__WEBPACK_IMPORTED_MODULE_17__.interpolateHslLong), -/* harmony export */ "interpolateHue": () => (/* reexport safe */ d3_interpolate__WEBPACK_IMPORTED_MODULE_17__.interpolateHue), -/* harmony export */ "interpolateInferno": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__.interpolateInferno), -/* harmony export */ "interpolateLab": () => (/* reexport safe */ d3_interpolate__WEBPACK_IMPORTED_MODULE_17__.interpolateLab), -/* harmony export */ "interpolateMagma": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__.interpolateMagma), -/* harmony export */ "interpolateNumber": () => (/* reexport safe */ d3_interpolate__WEBPACK_IMPORTED_MODULE_17__.interpolateNumber), -/* harmony export */ "interpolateNumberArray": () => (/* reexport safe */ d3_interpolate__WEBPACK_IMPORTED_MODULE_17__.interpolateNumberArray), -/* harmony export */ "interpolateObject": () => (/* reexport safe */ d3_interpolate__WEBPACK_IMPORTED_MODULE_17__.interpolateObject), -/* harmony export */ "interpolateOrRd": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__.interpolateOrRd), -/* harmony export */ "interpolateOranges": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__.interpolateOranges), -/* harmony export */ "interpolatePRGn": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__.interpolatePRGn), -/* harmony export */ "interpolatePiYG": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__.interpolatePiYG), -/* harmony export */ "interpolatePlasma": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__.interpolatePlasma), -/* harmony export */ "interpolatePuBu": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__.interpolatePuBu), -/* harmony export */ "interpolatePuBuGn": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__.interpolatePuBuGn), -/* harmony export */ "interpolatePuOr": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__.interpolatePuOr), -/* harmony export */ "interpolatePuRd": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__.interpolatePuRd), -/* harmony export */ "interpolatePurples": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__.interpolatePurples), -/* harmony export */ "interpolateRainbow": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__.interpolateRainbow), -/* harmony export */ "interpolateRdBu": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__.interpolateRdBu), -/* harmony export */ "interpolateRdGy": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__.interpolateRdGy), -/* harmony export */ "interpolateRdPu": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__.interpolateRdPu), -/* harmony export */ "interpolateRdYlBu": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__.interpolateRdYlBu), -/* harmony export */ "interpolateRdYlGn": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__.interpolateRdYlGn), -/* harmony export */ "interpolateReds": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__.interpolateReds), -/* harmony export */ "interpolateRgb": () => (/* reexport safe */ d3_interpolate__WEBPACK_IMPORTED_MODULE_17__.interpolateRgb), -/* harmony export */ "interpolateRgbBasis": () => (/* reexport safe */ d3_interpolate__WEBPACK_IMPORTED_MODULE_17__.interpolateRgbBasis), -/* harmony export */ "interpolateRgbBasisClosed": () => (/* reexport safe */ d3_interpolate__WEBPACK_IMPORTED_MODULE_17__.interpolateRgbBasisClosed), -/* harmony export */ "interpolateRound": () => (/* reexport safe */ d3_interpolate__WEBPACK_IMPORTED_MODULE_17__.interpolateRound), -/* harmony export */ "interpolateSinebow": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__.interpolateSinebow), -/* harmony export */ "interpolateSpectral": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__.interpolateSpectral), -/* harmony export */ "interpolateString": () => (/* reexport safe */ d3_interpolate__WEBPACK_IMPORTED_MODULE_17__.interpolateString), -/* harmony export */ "interpolateTransformCss": () => (/* reexport safe */ d3_interpolate__WEBPACK_IMPORTED_MODULE_17__.interpolateTransformCss), -/* harmony export */ "interpolateTransformSvg": () => (/* reexport safe */ d3_interpolate__WEBPACK_IMPORTED_MODULE_17__.interpolateTransformSvg), -/* harmony export */ "interpolateTurbo": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__.interpolateTurbo), -/* harmony export */ "interpolateViridis": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__.interpolateViridis), -/* harmony export */ "interpolateWarm": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__.interpolateWarm), -/* harmony export */ "interpolateYlGn": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__.interpolateYlGn), -/* harmony export */ "interpolateYlGnBu": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__.interpolateYlGnBu), -/* harmony export */ "interpolateYlOrBr": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__.interpolateYlOrBr), -/* harmony export */ "interpolateYlOrRd": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__.interpolateYlOrRd), -/* harmony export */ "interpolateZoom": () => (/* reexport safe */ d3_interpolate__WEBPACK_IMPORTED_MODULE_17__.interpolateZoom), -/* harmony export */ "interrupt": () => (/* reexport safe */ d3_transition__WEBPACK_IMPORTED_MODULE_29__.interrupt), -/* harmony export */ "interval": () => (/* reexport safe */ d3_timer__WEBPACK_IMPORTED_MODULE_28__.interval), -/* harmony export */ "isoFormat": () => (/* reexport safe */ d3_time_format__WEBPACK_IMPORTED_MODULE_27__.isoFormat), -/* harmony export */ "isoParse": () => (/* reexport safe */ d3_time_format__WEBPACK_IMPORTED_MODULE_27__.isoParse), -/* harmony export */ "json": () => (/* reexport safe */ d3_fetch__WEBPACK_IMPORTED_MODULE_12__.json), -/* harmony export */ "keys": () => (/* reexport safe */ d3_collection__WEBPACK_IMPORTED_MODULE_5__.keys), -/* harmony export */ "lab": () => (/* reexport safe */ d3_color__WEBPACK_IMPORTED_MODULE_6__.lab), -/* harmony export */ "lch": () => (/* reexport safe */ d3_color__WEBPACK_IMPORTED_MODULE_6__.lch), -/* harmony export */ "line": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_25__.line), -/* harmony export */ "lineRadial": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_25__.lineRadial), -/* harmony export */ "linkHorizontal": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_25__.linkHorizontal), -/* harmony export */ "linkRadial": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_25__.linkRadial), -/* harmony export */ "linkVertical": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_25__.linkVertical), -/* harmony export */ "local": () => (/* reexport safe */ d3_selection__WEBPACK_IMPORTED_MODULE_24__.local), -/* harmony export */ "map": () => (/* reexport safe */ d3_collection__WEBPACK_IMPORTED_MODULE_5__.map), -/* harmony export */ "matcher": () => (/* reexport safe */ d3_selection__WEBPACK_IMPORTED_MODULE_24__.matcher), -/* harmony export */ "max": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_1__.max), -/* harmony export */ "mean": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_1__.mean), -/* harmony export */ "median": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_1__.median), -/* harmony export */ "merge": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_1__.merge), -/* harmony export */ "min": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_1__.min), -/* harmony export */ "mouse": () => (/* reexport safe */ d3_selection__WEBPACK_IMPORTED_MODULE_24__.mouse), -/* harmony export */ "namespace": () => (/* reexport safe */ d3_selection__WEBPACK_IMPORTED_MODULE_24__.namespace), -/* harmony export */ "namespaces": () => (/* reexport safe */ d3_selection__WEBPACK_IMPORTED_MODULE_24__.namespaces), -/* harmony export */ "nest": () => (/* reexport safe */ d3_collection__WEBPACK_IMPORTED_MODULE_5__.nest), -/* harmony export */ "now": () => (/* reexport safe */ d3_timer__WEBPACK_IMPORTED_MODULE_28__.now), -/* harmony export */ "pack": () => (/* reexport safe */ d3_hierarchy__WEBPACK_IMPORTED_MODULE_16__.pack), -/* harmony export */ "packEnclose": () => (/* reexport safe */ d3_hierarchy__WEBPACK_IMPORTED_MODULE_16__.packEnclose), -/* harmony export */ "packSiblings": () => (/* reexport safe */ d3_hierarchy__WEBPACK_IMPORTED_MODULE_16__.packSiblings), -/* harmony export */ "pairs": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_1__.pairs), -/* harmony export */ "partition": () => (/* reexport safe */ d3_hierarchy__WEBPACK_IMPORTED_MODULE_16__.partition), -/* harmony export */ "path": () => (/* reexport safe */ d3_path__WEBPACK_IMPORTED_MODULE_18__.path), -/* harmony export */ "permute": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_1__.permute), -/* harmony export */ "pie": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_25__.pie), -/* harmony export */ "piecewise": () => (/* reexport safe */ d3_interpolate__WEBPACK_IMPORTED_MODULE_17__.piecewise), -/* harmony export */ "pointRadial": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_25__.pointRadial), -/* harmony export */ "polygonArea": () => (/* reexport safe */ d3_polygon__WEBPACK_IMPORTED_MODULE_19__.polygonArea), -/* harmony export */ "polygonCentroid": () => (/* reexport safe */ d3_polygon__WEBPACK_IMPORTED_MODULE_19__.polygonCentroid), -/* harmony export */ "polygonContains": () => (/* reexport safe */ d3_polygon__WEBPACK_IMPORTED_MODULE_19__.polygonContains), -/* harmony export */ "polygonHull": () => (/* reexport safe */ d3_polygon__WEBPACK_IMPORTED_MODULE_19__.polygonHull), -/* harmony export */ "polygonLength": () => (/* reexport safe */ d3_polygon__WEBPACK_IMPORTED_MODULE_19__.polygonLength), -/* harmony export */ "precisionFixed": () => (/* reexport safe */ d3_format__WEBPACK_IMPORTED_MODULE_14__.precisionFixed), -/* harmony export */ "precisionPrefix": () => (/* reexport safe */ d3_format__WEBPACK_IMPORTED_MODULE_14__.precisionPrefix), -/* harmony export */ "precisionRound": () => (/* reexport safe */ d3_format__WEBPACK_IMPORTED_MODULE_14__.precisionRound), -/* harmony export */ "quadtree": () => (/* reexport safe */ d3_quadtree__WEBPACK_IMPORTED_MODULE_20__.quadtree), -/* harmony export */ "quantile": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_1__.quantile), -/* harmony export */ "quantize": () => (/* reexport safe */ d3_interpolate__WEBPACK_IMPORTED_MODULE_17__.quantize), -/* harmony export */ "radialArea": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_25__.radialArea), -/* harmony export */ "radialLine": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_25__.radialLine), -/* harmony export */ "randomBates": () => (/* reexport safe */ d3_random__WEBPACK_IMPORTED_MODULE_21__.randomBates), -/* harmony export */ "randomExponential": () => (/* reexport safe */ d3_random__WEBPACK_IMPORTED_MODULE_21__.randomExponential), -/* harmony export */ "randomIrwinHall": () => (/* reexport safe */ d3_random__WEBPACK_IMPORTED_MODULE_21__.randomIrwinHall), -/* harmony export */ "randomLogNormal": () => (/* reexport safe */ d3_random__WEBPACK_IMPORTED_MODULE_21__.randomLogNormal), -/* harmony export */ "randomNormal": () => (/* reexport safe */ d3_random__WEBPACK_IMPORTED_MODULE_21__.randomNormal), -/* harmony export */ "randomUniform": () => (/* reexport safe */ d3_random__WEBPACK_IMPORTED_MODULE_21__.randomUniform), -/* harmony export */ "range": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_1__.range), -/* harmony export */ "rgb": () => (/* reexport safe */ d3_color__WEBPACK_IMPORTED_MODULE_6__.rgb), -/* harmony export */ "ribbon": () => (/* reexport safe */ d3_chord__WEBPACK_IMPORTED_MODULE_4__.ribbon), -/* harmony export */ "scaleBand": () => (/* reexport safe */ d3_scale__WEBPACK_IMPORTED_MODULE_22__.scaleBand), -/* harmony export */ "scaleDiverging": () => (/* reexport safe */ d3_scale__WEBPACK_IMPORTED_MODULE_22__.scaleDiverging), -/* harmony export */ "scaleDivergingLog": () => (/* reexport safe */ d3_scale__WEBPACK_IMPORTED_MODULE_22__.scaleDivergingLog), -/* harmony export */ "scaleDivergingPow": () => (/* reexport safe */ d3_scale__WEBPACK_IMPORTED_MODULE_22__.scaleDivergingPow), -/* harmony export */ "scaleDivergingSqrt": () => (/* reexport safe */ d3_scale__WEBPACK_IMPORTED_MODULE_22__.scaleDivergingSqrt), -/* harmony export */ "scaleDivergingSymlog": () => (/* reexport safe */ d3_scale__WEBPACK_IMPORTED_MODULE_22__.scaleDivergingSymlog), -/* harmony export */ "scaleIdentity": () => (/* reexport safe */ d3_scale__WEBPACK_IMPORTED_MODULE_22__.scaleIdentity), -/* harmony export */ "scaleImplicit": () => (/* reexport safe */ d3_scale__WEBPACK_IMPORTED_MODULE_22__.scaleImplicit), -/* harmony export */ "scaleLinear": () => (/* reexport safe */ d3_scale__WEBPACK_IMPORTED_MODULE_22__.scaleLinear), -/* harmony export */ "scaleLog": () => (/* reexport safe */ d3_scale__WEBPACK_IMPORTED_MODULE_22__.scaleLog), -/* harmony export */ "scaleOrdinal": () => (/* reexport safe */ d3_scale__WEBPACK_IMPORTED_MODULE_22__.scaleOrdinal), -/* harmony export */ "scalePoint": () => (/* reexport safe */ d3_scale__WEBPACK_IMPORTED_MODULE_22__.scalePoint), -/* harmony export */ "scalePow": () => (/* reexport safe */ d3_scale__WEBPACK_IMPORTED_MODULE_22__.scalePow), -/* harmony export */ "scaleQuantile": () => (/* reexport safe */ d3_scale__WEBPACK_IMPORTED_MODULE_22__.scaleQuantile), -/* harmony export */ "scaleQuantize": () => (/* reexport safe */ d3_scale__WEBPACK_IMPORTED_MODULE_22__.scaleQuantize), -/* harmony export */ "scaleSequential": () => (/* reexport safe */ d3_scale__WEBPACK_IMPORTED_MODULE_22__.scaleSequential), -/* harmony export */ "scaleSequentialLog": () => (/* reexport safe */ d3_scale__WEBPACK_IMPORTED_MODULE_22__.scaleSequentialLog), -/* harmony export */ "scaleSequentialPow": () => (/* reexport safe */ d3_scale__WEBPACK_IMPORTED_MODULE_22__.scaleSequentialPow), -/* harmony export */ "scaleSequentialQuantile": () => (/* reexport safe */ d3_scale__WEBPACK_IMPORTED_MODULE_22__.scaleSequentialQuantile), -/* harmony export */ "scaleSequentialSqrt": () => (/* reexport safe */ d3_scale__WEBPACK_IMPORTED_MODULE_22__.scaleSequentialSqrt), -/* harmony export */ "scaleSequentialSymlog": () => (/* reexport safe */ d3_scale__WEBPACK_IMPORTED_MODULE_22__.scaleSequentialSymlog), -/* harmony export */ "scaleSqrt": () => (/* reexport safe */ d3_scale__WEBPACK_IMPORTED_MODULE_22__.scaleSqrt), -/* harmony export */ "scaleSymlog": () => (/* reexport safe */ d3_scale__WEBPACK_IMPORTED_MODULE_22__.scaleSymlog), -/* harmony export */ "scaleThreshold": () => (/* reexport safe */ d3_scale__WEBPACK_IMPORTED_MODULE_22__.scaleThreshold), -/* harmony export */ "scaleTime": () => (/* reexport safe */ d3_scale__WEBPACK_IMPORTED_MODULE_22__.scaleTime), -/* harmony export */ "scaleUtc": () => (/* reexport safe */ d3_scale__WEBPACK_IMPORTED_MODULE_22__.scaleUtc), -/* harmony export */ "scan": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_1__.scan), -/* harmony export */ "schemeAccent": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__.schemeAccent), -/* harmony export */ "schemeBlues": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__.schemeBlues), -/* harmony export */ "schemeBrBG": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__.schemeBrBG), -/* harmony export */ "schemeBuGn": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__.schemeBuGn), -/* harmony export */ "schemeBuPu": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__.schemeBuPu), -/* harmony export */ "schemeCategory10": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__.schemeCategory10), -/* harmony export */ "schemeDark2": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__.schemeDark2), -/* harmony export */ "schemeGnBu": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__.schemeGnBu), -/* harmony export */ "schemeGreens": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__.schemeGreens), -/* harmony export */ "schemeGreys": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__.schemeGreys), -/* harmony export */ "schemeOrRd": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__.schemeOrRd), -/* harmony export */ "schemeOranges": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__.schemeOranges), -/* harmony export */ "schemePRGn": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__.schemePRGn), -/* harmony export */ "schemePaired": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__.schemePaired), -/* harmony export */ "schemePastel1": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__.schemePastel1), -/* harmony export */ "schemePastel2": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__.schemePastel2), -/* harmony export */ "schemePiYG": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__.schemePiYG), -/* harmony export */ "schemePuBu": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__.schemePuBu), -/* harmony export */ "schemePuBuGn": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__.schemePuBuGn), -/* harmony export */ "schemePuOr": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__.schemePuOr), -/* harmony export */ "schemePuRd": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__.schemePuRd), -/* harmony export */ "schemePurples": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__.schemePurples), -/* harmony export */ "schemeRdBu": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__.schemeRdBu), -/* harmony export */ "schemeRdGy": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__.schemeRdGy), -/* harmony export */ "schemeRdPu": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__.schemeRdPu), -/* harmony export */ "schemeRdYlBu": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__.schemeRdYlBu), -/* harmony export */ "schemeRdYlGn": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__.schemeRdYlGn), -/* harmony export */ "schemeReds": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__.schemeReds), -/* harmony export */ "schemeSet1": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__.schemeSet1), -/* harmony export */ "schemeSet2": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__.schemeSet2), -/* harmony export */ "schemeSet3": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__.schemeSet3), -/* harmony export */ "schemeSpectral": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__.schemeSpectral), -/* harmony export */ "schemeTableau10": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__.schemeTableau10), -/* harmony export */ "schemeYlGn": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__.schemeYlGn), -/* harmony export */ "schemeYlGnBu": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__.schemeYlGnBu), -/* harmony export */ "schemeYlOrBr": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__.schemeYlOrBr), -/* harmony export */ "schemeYlOrRd": () => (/* reexport safe */ d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__.schemeYlOrRd), -/* harmony export */ "select": () => (/* reexport safe */ d3_selection__WEBPACK_IMPORTED_MODULE_24__.select), -/* harmony export */ "selectAll": () => (/* reexport safe */ d3_selection__WEBPACK_IMPORTED_MODULE_24__.selectAll), -/* harmony export */ "selection": () => (/* reexport safe */ d3_selection__WEBPACK_IMPORTED_MODULE_24__.selection), -/* harmony export */ "selector": () => (/* reexport safe */ d3_selection__WEBPACK_IMPORTED_MODULE_24__.selector), -/* harmony export */ "selectorAll": () => (/* reexport safe */ d3_selection__WEBPACK_IMPORTED_MODULE_24__.selectorAll), -/* harmony export */ "set": () => (/* reexport safe */ d3_collection__WEBPACK_IMPORTED_MODULE_5__.set), -/* harmony export */ "shuffle": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_1__.shuffle), -/* harmony export */ "stack": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_25__.stack), -/* harmony export */ "stackOffsetDiverging": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_25__.stackOffsetDiverging), -/* harmony export */ "stackOffsetExpand": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_25__.stackOffsetExpand), -/* harmony export */ "stackOffsetNone": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_25__.stackOffsetNone), -/* harmony export */ "stackOffsetSilhouette": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_25__.stackOffsetSilhouette), -/* harmony export */ "stackOffsetWiggle": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_25__.stackOffsetWiggle), -/* harmony export */ "stackOrderAppearance": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_25__.stackOrderAppearance), -/* harmony export */ "stackOrderAscending": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_25__.stackOrderAscending), -/* harmony export */ "stackOrderDescending": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_25__.stackOrderDescending), -/* harmony export */ "stackOrderInsideOut": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_25__.stackOrderInsideOut), -/* harmony export */ "stackOrderNone": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_25__.stackOrderNone), -/* harmony export */ "stackOrderReverse": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_25__.stackOrderReverse), -/* harmony export */ "stratify": () => (/* reexport safe */ d3_hierarchy__WEBPACK_IMPORTED_MODULE_16__.stratify), -/* harmony export */ "style": () => (/* reexport safe */ d3_selection__WEBPACK_IMPORTED_MODULE_24__.style), -/* harmony export */ "sum": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_1__.sum), -/* harmony export */ "svg": () => (/* reexport safe */ d3_fetch__WEBPACK_IMPORTED_MODULE_12__.svg), -/* harmony export */ "symbol": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_25__.symbol), -/* harmony export */ "symbolCircle": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_25__.symbolCircle), -/* harmony export */ "symbolCross": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_25__.symbolCross), -/* harmony export */ "symbolDiamond": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_25__.symbolDiamond), -/* harmony export */ "symbolSquare": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_25__.symbolSquare), -/* harmony export */ "symbolStar": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_25__.symbolStar), -/* harmony export */ "symbolTriangle": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_25__.symbolTriangle), -/* harmony export */ "symbolWye": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_25__.symbolWye), -/* harmony export */ "symbols": () => (/* reexport safe */ d3_shape__WEBPACK_IMPORTED_MODULE_25__.symbols), -/* harmony export */ "text": () => (/* reexport safe */ d3_fetch__WEBPACK_IMPORTED_MODULE_12__.text), -/* harmony export */ "thresholdFreedmanDiaconis": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_1__.thresholdFreedmanDiaconis), -/* harmony export */ "thresholdScott": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_1__.thresholdScott), -/* harmony export */ "thresholdSturges": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_1__.thresholdSturges), -/* harmony export */ "tickFormat": () => (/* reexport safe */ d3_scale__WEBPACK_IMPORTED_MODULE_22__.tickFormat), -/* harmony export */ "tickIncrement": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_1__.tickIncrement), -/* harmony export */ "tickStep": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_1__.tickStep), -/* harmony export */ "ticks": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_1__.ticks), -/* harmony export */ "timeDay": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_26__.timeDay), -/* harmony export */ "timeDays": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_26__.timeDays), -/* harmony export */ "timeFormat": () => (/* reexport safe */ d3_time_format__WEBPACK_IMPORTED_MODULE_27__.timeFormat), -/* harmony export */ "timeFormatDefaultLocale": () => (/* reexport safe */ d3_time_format__WEBPACK_IMPORTED_MODULE_27__.timeFormatDefaultLocale), -/* harmony export */ "timeFormatLocale": () => (/* reexport safe */ d3_time_format__WEBPACK_IMPORTED_MODULE_27__.timeFormatLocale), -/* harmony export */ "timeFriday": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_26__.timeFriday), -/* harmony export */ "timeFridays": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_26__.timeFridays), -/* harmony export */ "timeHour": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_26__.timeHour), -/* harmony export */ "timeHours": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_26__.timeHours), -/* harmony export */ "timeInterval": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_26__.timeInterval), -/* harmony export */ "timeMillisecond": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_26__.timeMillisecond), -/* harmony export */ "timeMilliseconds": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_26__.timeMilliseconds), -/* harmony export */ "timeMinute": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_26__.timeMinute), -/* harmony export */ "timeMinutes": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_26__.timeMinutes), -/* harmony export */ "timeMonday": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_26__.timeMonday), -/* harmony export */ "timeMondays": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_26__.timeMondays), -/* harmony export */ "timeMonth": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_26__.timeMonth), -/* harmony export */ "timeMonths": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_26__.timeMonths), -/* harmony export */ "timeParse": () => (/* reexport safe */ d3_time_format__WEBPACK_IMPORTED_MODULE_27__.timeParse), -/* harmony export */ "timeSaturday": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_26__.timeSaturday), -/* harmony export */ "timeSaturdays": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_26__.timeSaturdays), -/* harmony export */ "timeSecond": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_26__.timeSecond), -/* harmony export */ "timeSeconds": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_26__.timeSeconds), -/* harmony export */ "timeSunday": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_26__.timeSunday), -/* harmony export */ "timeSundays": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_26__.timeSundays), -/* harmony export */ "timeThursday": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_26__.timeThursday), -/* harmony export */ "timeThursdays": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_26__.timeThursdays), -/* harmony export */ "timeTuesday": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_26__.timeTuesday), -/* harmony export */ "timeTuesdays": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_26__.timeTuesdays), -/* harmony export */ "timeWednesday": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_26__.timeWednesday), -/* harmony export */ "timeWednesdays": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_26__.timeWednesdays), -/* harmony export */ "timeWeek": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_26__.timeWeek), -/* harmony export */ "timeWeeks": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_26__.timeWeeks), -/* harmony export */ "timeYear": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_26__.timeYear), -/* harmony export */ "timeYears": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_26__.timeYears), -/* harmony export */ "timeout": () => (/* reexport safe */ d3_timer__WEBPACK_IMPORTED_MODULE_28__.timeout), -/* harmony export */ "timer": () => (/* reexport safe */ d3_timer__WEBPACK_IMPORTED_MODULE_28__.timer), -/* harmony export */ "timerFlush": () => (/* reexport safe */ d3_timer__WEBPACK_IMPORTED_MODULE_28__.timerFlush), -/* harmony export */ "touch": () => (/* reexport safe */ d3_selection__WEBPACK_IMPORTED_MODULE_24__.touch), -/* harmony export */ "touches": () => (/* reexport safe */ d3_selection__WEBPACK_IMPORTED_MODULE_24__.touches), -/* harmony export */ "transition": () => (/* reexport safe */ d3_transition__WEBPACK_IMPORTED_MODULE_29__.transition), -/* harmony export */ "transpose": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_1__.transpose), -/* harmony export */ "tree": () => (/* reexport safe */ d3_hierarchy__WEBPACK_IMPORTED_MODULE_16__.tree), -/* harmony export */ "treemap": () => (/* reexport safe */ d3_hierarchy__WEBPACK_IMPORTED_MODULE_16__.treemap), -/* harmony export */ "treemapBinary": () => (/* reexport safe */ d3_hierarchy__WEBPACK_IMPORTED_MODULE_16__.treemapBinary), -/* harmony export */ "treemapDice": () => (/* reexport safe */ d3_hierarchy__WEBPACK_IMPORTED_MODULE_16__.treemapDice), -/* harmony export */ "treemapResquarify": () => (/* reexport safe */ d3_hierarchy__WEBPACK_IMPORTED_MODULE_16__.treemapResquarify), -/* harmony export */ "treemapSlice": () => (/* reexport safe */ d3_hierarchy__WEBPACK_IMPORTED_MODULE_16__.treemapSlice), -/* harmony export */ "treemapSliceDice": () => (/* reexport safe */ d3_hierarchy__WEBPACK_IMPORTED_MODULE_16__.treemapSliceDice), -/* harmony export */ "treemapSquarify": () => (/* reexport safe */ d3_hierarchy__WEBPACK_IMPORTED_MODULE_16__.treemapSquarify), -/* harmony export */ "tsv": () => (/* reexport safe */ d3_fetch__WEBPACK_IMPORTED_MODULE_12__.tsv), -/* harmony export */ "tsvFormat": () => (/* reexport safe */ d3_dsv__WEBPACK_IMPORTED_MODULE_10__.tsvFormat), -/* harmony export */ "tsvFormatBody": () => (/* reexport safe */ d3_dsv__WEBPACK_IMPORTED_MODULE_10__.tsvFormatBody), -/* harmony export */ "tsvFormatRow": () => (/* reexport safe */ d3_dsv__WEBPACK_IMPORTED_MODULE_10__.tsvFormatRow), -/* harmony export */ "tsvFormatRows": () => (/* reexport safe */ d3_dsv__WEBPACK_IMPORTED_MODULE_10__.tsvFormatRows), -/* harmony export */ "tsvFormatValue": () => (/* reexport safe */ d3_dsv__WEBPACK_IMPORTED_MODULE_10__.tsvFormatValue), -/* harmony export */ "tsvParse": () => (/* reexport safe */ d3_dsv__WEBPACK_IMPORTED_MODULE_10__.tsvParse), -/* harmony export */ "tsvParseRows": () => (/* reexport safe */ d3_dsv__WEBPACK_IMPORTED_MODULE_10__.tsvParseRows), -/* harmony export */ "utcDay": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_26__.utcDay), -/* harmony export */ "utcDays": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_26__.utcDays), -/* harmony export */ "utcFormat": () => (/* reexport safe */ d3_time_format__WEBPACK_IMPORTED_MODULE_27__.utcFormat), -/* harmony export */ "utcFriday": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_26__.utcFriday), -/* harmony export */ "utcFridays": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_26__.utcFridays), -/* harmony export */ "utcHour": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_26__.utcHour), -/* harmony export */ "utcHours": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_26__.utcHours), -/* harmony export */ "utcMillisecond": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_26__.utcMillisecond), -/* harmony export */ "utcMilliseconds": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_26__.utcMilliseconds), -/* harmony export */ "utcMinute": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_26__.utcMinute), -/* harmony export */ "utcMinutes": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_26__.utcMinutes), -/* harmony export */ "utcMonday": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_26__.utcMonday), -/* harmony export */ "utcMondays": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_26__.utcMondays), -/* harmony export */ "utcMonth": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_26__.utcMonth), -/* harmony export */ "utcMonths": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_26__.utcMonths), -/* harmony export */ "utcParse": () => (/* reexport safe */ d3_time_format__WEBPACK_IMPORTED_MODULE_27__.utcParse), -/* harmony export */ "utcSaturday": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_26__.utcSaturday), -/* harmony export */ "utcSaturdays": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_26__.utcSaturdays), -/* harmony export */ "utcSecond": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_26__.utcSecond), -/* harmony export */ "utcSeconds": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_26__.utcSeconds), -/* harmony export */ "utcSunday": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_26__.utcSunday), -/* harmony export */ "utcSundays": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_26__.utcSundays), -/* harmony export */ "utcThursday": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_26__.utcThursday), -/* harmony export */ "utcThursdays": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_26__.utcThursdays), -/* harmony export */ "utcTuesday": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_26__.utcTuesday), -/* harmony export */ "utcTuesdays": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_26__.utcTuesdays), -/* harmony export */ "utcWednesday": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_26__.utcWednesday), -/* harmony export */ "utcWednesdays": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_26__.utcWednesdays), -/* harmony export */ "utcWeek": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_26__.utcWeek), -/* harmony export */ "utcWeeks": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_26__.utcWeeks), -/* harmony export */ "utcYear": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_26__.utcYear), -/* harmony export */ "utcYears": () => (/* reexport safe */ d3_time__WEBPACK_IMPORTED_MODULE_26__.utcYears), -/* harmony export */ "values": () => (/* reexport safe */ d3_collection__WEBPACK_IMPORTED_MODULE_5__.values), -/* harmony export */ "variance": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_1__.variance), -/* harmony export */ "version": () => (/* reexport safe */ _dist_package_js__WEBPACK_IMPORTED_MODULE_0__.version), -/* harmony export */ "voronoi": () => (/* reexport safe */ d3_voronoi__WEBPACK_IMPORTED_MODULE_30__.voronoi), -/* harmony export */ "window": () => (/* reexport safe */ d3_selection__WEBPACK_IMPORTED_MODULE_24__.window), -/* harmony export */ "xml": () => (/* reexport safe */ d3_fetch__WEBPACK_IMPORTED_MODULE_12__.xml), -/* harmony export */ "zip": () => (/* reexport safe */ d3_array__WEBPACK_IMPORTED_MODULE_1__.zip), -/* harmony export */ "zoom": () => (/* reexport safe */ d3_zoom__WEBPACK_IMPORTED_MODULE_31__.zoom), -/* harmony export */ "zoomIdentity": () => (/* reexport safe */ d3_zoom__WEBPACK_IMPORTED_MODULE_31__.zoomIdentity), -/* harmony export */ "zoomTransform": () => (/* reexport safe */ d3_zoom__WEBPACK_IMPORTED_MODULE_31__.zoomTransform) -/* harmony export */ }); -/* harmony import */ var _dist_package_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./dist/package.js */ "./node_modules/d3/dist/package.js"); -/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-array */ "./node_modules/d3-array/src/index.js"); -/* harmony import */ var d3_axis__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-axis */ "./node_modules/d3-axis/src/index.js"); -/* harmony import */ var d3_brush__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! d3-brush */ "./node_modules/d3-brush/src/index.js"); -/* harmony import */ var d3_chord__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! d3-chord */ "./node_modules/d3-chord/src/index.js"); -/* harmony import */ var d3_collection__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! d3-collection */ "./node_modules/d3-collection/src/index.js"); -/* harmony import */ var d3_color__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! d3-color */ "./node_modules/d3-color/src/index.js"); -/* harmony import */ var d3_contour__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! d3-contour */ "./node_modules/d3-contour/src/index.js"); -/* harmony import */ var d3_dispatch__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! d3-dispatch */ "./node_modules/d3-dispatch/src/index.js"); -/* harmony import */ var d3_drag__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! d3-drag */ "./node_modules/d3-drag/src/index.js"); -/* harmony import */ var d3_dsv__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! d3-dsv */ "./node_modules/d3-dsv/src/index.js"); -/* harmony import */ var d3_ease__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! d3-ease */ "./node_modules/d3-ease/src/index.js"); -/* harmony import */ var d3_fetch__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! d3-fetch */ "./node_modules/d3-fetch/src/index.js"); -/* harmony import */ var d3_force__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! d3-force */ "./node_modules/d3-force/src/index.js"); -/* harmony import */ var d3_format__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! d3-format */ "./node_modules/d3-format/src/index.js"); -/* harmony import */ var d3_geo__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! d3-geo */ "./node_modules/d3-geo/src/index.js"); -/* harmony import */ var d3_hierarchy__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! d3-hierarchy */ "./node_modules/d3-hierarchy/src/index.js"); -/* harmony import */ var d3_interpolate__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! d3-interpolate */ "./node_modules/d3-interpolate/src/index.js"); -/* harmony import */ var d3_path__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! d3-path */ "./node_modules/d3-path/src/index.js"); -/* harmony import */ var d3_polygon__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! d3-polygon */ "./node_modules/d3-polygon/src/index.js"); -/* harmony import */ var d3_quadtree__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! d3-quadtree */ "./node_modules/d3-quadtree/src/index.js"); -/* harmony import */ var d3_random__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! d3-random */ "./node_modules/d3-random/src/index.js"); -/* harmony import */ var d3_scale__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! d3-scale */ "./node_modules/d3-scale/src/index.js"); -/* harmony import */ var d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! d3-scale-chromatic */ "./node_modules/d3-scale-chromatic/src/index.js"); -/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! d3-selection */ "./node_modules/d3-selection/src/index.js"); -/* harmony import */ var d3_shape__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! d3-shape */ "./node_modules/d3-shape/src/index.js"); -/* harmony import */ var d3_time__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! d3-time */ "./node_modules/d3-time/src/index.js"); -/* harmony import */ var d3_time_format__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! d3-time-format */ "./node_modules/d3-time-format/src/index.js"); -/* harmony import */ var d3_timer__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! d3-timer */ "./node_modules/d3-timer/src/index.js"); -/* harmony import */ var d3_transition__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! d3-transition */ "./node_modules/d3-transition/src/index.js"); -/* harmony import */ var d3_voronoi__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! d3-voronoi */ "./node_modules/d3-voronoi/src/index.js"); -/* harmony import */ var d3_zoom__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! d3-zoom */ "./node_modules/d3-zoom/src/index.js"); - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -/***/ }), - -/***/ "./node_modules/@babel/runtime/helpers/classCallCheck.js": -/*!***************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/classCallCheck.js ***! - \***************************************************************/ -/***/ ((module) => { - -function _classCallCheck(instance, Constructor) { - if (!(instance instanceof Constructor)) { - throw new TypeError("Cannot call a class as a function"); - } -} -module.exports = _classCallCheck, module.exports.__esModule = true, module.exports["default"] = module.exports; - -/***/ }), - -/***/ "./node_modules/@babel/runtime/helpers/createClass.js": -/*!************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/createClass.js ***! - \************************************************************/ -/***/ ((module) => { - -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); - } -} -function _createClass(Constructor, protoProps, staticProps) { - if (protoProps) _defineProperties(Constructor.prototype, protoProps); - if (staticProps) _defineProperties(Constructor, staticProps); - Object.defineProperty(Constructor, "prototype", { - writable: false - }); - return Constructor; -} -module.exports = _createClass, module.exports.__esModule = true, module.exports["default"] = module.exports; - -/***/ }), - -/***/ "./node_modules/@babel/runtime/helpers/interopRequireDefault.js": -/*!**********************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/interopRequireDefault.js ***! - \**********************************************************************/ -/***/ ((module) => { - -function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - "default": obj - }; -} -module.exports = _interopRequireDefault, module.exports.__esModule = true, module.exports["default"] = module.exports; - -/***/ }), - -/***/ "./node_modules/@babel/runtime/helpers/typeof.js": -/*!*******************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/typeof.js ***! - \*******************************************************/ -/***/ ((module) => { - -function _typeof(obj) { - "@babel/helpers - typeof"; - - return (module.exports = _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { - return typeof obj; - } : function (obj) { - return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; - }, module.exports.__esModule = true, module.exports["default"] = module.exports), _typeof(obj); -} -module.exports = _typeof, module.exports.__esModule = true, module.exports["default"] = module.exports; - -/***/ }) - -/******/ }); -/************************************************************************/ -/******/ // The module cache -/******/ var __webpack_module_cache__ = {}; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ // Check if module is in cache -/******/ var cachedModule = __webpack_module_cache__[moduleId]; -/******/ if (cachedModule !== undefined) { -/******/ return cachedModule.exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = __webpack_module_cache__[moduleId] = { -/******/ // no module.id needed -/******/ // no module.loaded needed -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/************************************************************************/ -/******/ /* webpack/runtime/define property getters */ -/******/ (() => { -/******/ // define getter functions for harmony exports -/******/ __webpack_require__.d = (exports, definition) => { -/******/ for(var key in definition) { -/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { -/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); -/******/ } -/******/ } -/******/ }; -/******/ })(); -/******/ -/******/ /* webpack/runtime/hasOwnProperty shorthand */ -/******/ (() => { -/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) -/******/ })(); -/******/ -/******/ /* webpack/runtime/make namespace object */ -/******/ (() => { -/******/ // define __esModule on exports -/******/ __webpack_require__.r = (exports) => { -/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { -/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); -/******/ } -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ })(); -/******/ -/************************************************************************/ -var __webpack_exports__ = {}; -// This entry need to be wrapped in an IIFE because it need to be in strict mode. -(() => { -"use strict"; -/*!******************************************************!*\ - !*** ./src/Resources/public/js/c4g_visualization.js ***! - \******************************************************/ -/* - * This file is part of con4gis, the gis-kit for Contao CMS. - * @package con4gis - * @version 8 - * @author con4gis contributors (see "authors.txt") - * @license LGPL-3.0-or-later - * @copyright (c) 2010-2022, by Küstenschmiede GmbH Software & Design - * @link https://www.con4gis.org - */ - - - -var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "./node_modules/@babel/runtime/helpers/interopRequireDefault.js"); -var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js"); -var _classCallCheck2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "./node_modules/@babel/runtime/helpers/classCallCheck.js")); -var _createClass2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/createClass */ "./node_modules/@babel/runtime/helpers/createClass.js")); -var _c = _interopRequireDefault(__webpack_require__(/*! c3 */ "./node_modules/c3/c3.js")); -var d3 = _interopRequireWildcard(__webpack_require__(/*! d3 */ "./node_modules/d3/index.js")); -function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } -function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } -var Vis = /*#__PURE__*/function () { - function Vis() { - (0, _classCallCheck2["default"])(this, Vis); - this.elements = document.getElementsByClassName('c4g_chart'); - this.charts = []; - } - (0, _createClass2["default"])(Vis, [{ - key: "generateCharts", - value: function generateCharts() { - var _this = this; - var scope = this; - var elIndex = 0; - - // var deLocaleDef = { - // "dateTime": "%A, der %e. %B %Y, %X", - // "date": "%d.%m.%Y", - // "time": "%H:%M:%S", - // "periods": ["vormittags", "nachmittags"], - // "days": ["Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"], - // "shortDays": ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"], - // "months": ["Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"], - // "shortMonths": ["Jan", "Feb", "Mrz", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dez"], - // "decimal": ",", - // "thousands": "'", - // "grouping": [3], - // "currency": ["", "\u00a0EUR"] - // }; - // - // var deLocale = d3.locale(deLocaleDef); - var _loop = function _loop() { - var element = _this.elements.item(elIndex); - if (element && element.dataset && element.dataset.chart) { - var url = '/visualization-api/fetchChart/' + element.dataset.chart; - fetch(url).then(function (response) { - return response.json(); - }).then(function (responseJson) { - responseJson = _this.setTickConfigForYAxis(responseJson); - var chart = { - bindto: '#' + element.id, - base: responseJson, - json: {}, - range: function range(_range) { - document.querySelectorAll('.c4g_chart_range_button').forEach(function (element) { - if (element.getAttribute('data-range') === _range) { - element.classList.add("range-active"); - } else { - element.classList.remove("range-active"); - } - }); - this.json = scope.parseJson(this.bindto, this.base, this, _range); - }, - update: function update() { - // console.log(this.json); - this.chart = _c["default"].generate(this.json); - // this.chart.pie. - } - }; - - chart.json = scope.parseJson('#' + element.id, responseJson, chart); - - // set format for x axis - if (typeof responseJson.axis.x.tick !== 'undefined' && typeof responseJson.axis.x.tick.format !== 'undefined') { - chart.format = responseJson.axis.x.tick.format; - chart.json.axis.x.tick.format = function (x) { - var chrt = scope.getChartByBindId(element.id); - return chrt.format[x]; - }; - } - if (typeof responseJson.axis.x.tick !== 'undefined' && typeof responseJson.axis.x.tick.rotate === '1') { - chart.rotate = responseJson.axis.x.tick.rotate; - chart.json.axis.x.tick.rotate = function (x) { - var chrt = scope.getChartByBindId(element.id); - return chrt.rotate[x]; - }; - } - scope.charts.push(chart); - chart.update(); - }); - } - elIndex += 1; - }; - while (elIndex < this.elements.length) { - _loop(); - } - } - }, { - key: "setTickConfigForYAxis", - value: function setTickConfigForYAxis(json) { - if (json.axis.y.tickFormat) { - if (!json.axis.y.tick) { - json.axis.y.tick = {}; - } - json.axis.y.tick.format = function (d) { - var roundedVal = parseFloat(d).toFixed(3); // ToDo set parameter from config - return roundedVal + json.axis.y.tickFormat; - }; - } - if (json.axis.y.labelCount) { - if (!json.axis.y.tick) { - json.axis.y.tick = {}; - } - var labelCount = parseInt(json.axis.y.labelCount, 10); - if (labelCount > 0) { - json.axis.y.tick.count = labelCount; - } - } - if (json.axis.y2.tickFormat) { - if (!json.axis.y2.tick) { - json.axis.y2.tick = {}; - } - json.axis.y2.tick.format = function (d) { - var roundedVal = parseFloat(d).toFixed(3); // ToDo set parameter from config - return roundedVal + json.axis.y2.tickFormat; - }; - } - if (json.axis.y2.labelCount) { - if (!json.axis.y2.tick) { - json.axis.y2.tick = {}; - } - var _labelCount = parseInt(json.axis.y2.labelCount, 10); - if (_labelCount > 0) { - json.axis.y2.tick.count = _labelCount; - } - } - return json; - } - }, { - key: "parseJson", - value: function parseJson(bindto, json, chart) { - var range = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'range_default'; - //console.log(range); - var c3json = { - bindto: bindto, - data: { - xs: {}, - columns: [], - types: {}, - colors: {}, - names: {}, - groups: [], - redirects: {} - }, - axis: {}, - tooltip: { - format: {} - }, - zoom: { - enabled: false - }, - points: { - enabled: true - }, - legend: { - enabled: true - }, - tooltips: { - enabled: true - }, - labels: { - enabled: false - }, - oneLabelPerElement: { - enabled: false - }, - grid: { - x: { - show: false - }, - y: { - show: false - } - } - }; - var index = 0; - while (index < json.colors.length) { - c3json.data.colors['y' + index] = json.colors[index]; - c3json.data.colors[json.data[index].name] = json.colors[index]; - index += 1; - } - if (typeof json.axis !== 'undefined') { - c3json.axis = json.axis; - } - var rangeLowerBound; - var rangeUpperBound; - if (range !== 'range_all') { - c3json.axis.x.tick.values = c3json.axis.x.tick.singleValues; - c3json.axis.x.tick.format = function (value) { - return c3json.axis.x.tick.singleFormat[value]; - }; - if (typeof json.ranges[range] === 'undefined') { - range = 'range_all'; - } else { - rangeLowerBound = json.ranges[range].lowerBound; - rangeUpperBound = json.ranges[range].upperBound; - if (json.ranges[range].yMin) { - c3json.axis.y.min = json.ranges[range].yMin; - } - if (json.ranges[range].y2Min) { - c3json.axis.y2.min = json.ranges[range].y2Min; - } - if (json.ranges[range].yMax) { - c3json.axis.y.max = json.ranges[range].yMax; - } - if (json.ranges[range].y2Max) { - c3json.axis.y2.max = json.ranges[range].y2Max; - } - //console.log(rangeLowerBound + "/" + rangeUpperBound); - } - } else { - c3json.axis.x.tick.values = c3json.axis.x.tick.valuesAll; - c3json.axis.x.tick.format = function (value) { - return c3json.axis.x.tick.formatAll[value]; - }; - } - index = 0; - var hasCustomTooltip = false; - while (index < json.data.length) { - var x = []; - var y = []; - var i = 0; - if (json.data[index].type === "line") { - if (typeof json.data[index].name !== 'undefined') { - x.push('x' + index); - y.push(json.data[index].name); - c3json.data.xs[json.data[index].name] = 'x' + index; - } else { - x.push('x' + index); - y.push('y' + index); - c3json.data.xs['y' + index] = 'x' + index; - } - } else { - c3json.data.xs['y' + index] = 'x' + index; - x.push('x' + index); - y.push('y' + index); - } - if (!c3json.data.axes) { - c3json.data.axes = {}; - } - if (!c3json.data.axes[json.data[index].name]) { - c3json.data.axes[json.data[index].name] = json.data[index].target; - } - while (i < json.data[index].dataPoints.length) { - var chartTypeCondition = json.data[index].type === 'pie' || json.data[index].type === 'donut' || json.data[index].type === 'gauge'; - var rangeCondition = range === 'range_all' || json.data[index].dataPoints[i].x >= rangeLowerBound && json.data[index].dataPoints[i].x <= rangeUpperBound; - if (chartTypeCondition || rangeCondition) { - x.push(json.data[index].dataPoints[i].x); - y.push(json.data[index].dataPoints[i].y); - } - i += 1; - } - c3json.data.columns.push(x, y); - if (json.data[index].type == 'areaspline') { - json.data[index].type = 'area-spline'; - } - var type = json.data[index].type !== 'gantt' ? json.data[index].type : 'line'; - c3json.data.types['y' + index] = type; - if (typeof json.data[index].name !== 'undefined') { - c3json.data.names['y' + index] = json.data[index].name; - } - if (typeof json.data[index].group !== 'undefined') { - while (typeof c3json.data.groups[json.data[index].group] === 'undefined') { - c3json.data.groups.push([]); - } - c3json.data.groups[json.data[index].group].push('y' + index); - } - if (typeof json.data[index].group !== 'undefined') { - while (typeof c3json.data.groups[json.data[index].group] === 'undefined') { - c3json.data.groups.push([]); - } - c3json.data.groups[json.data[index].group].push('y' + index); - } - - //ToDo - if (typeof json.data[index].dataPoints[0].redirect !== 'undefined') { - c3json.data.redirects['y' + index] = json.data[index].dataPoints[0].redirect; - } - if (json.data[index].tooltipExtension) { - hasCustomTooltip = true; - } - index += 1; - } - if (typeof json.grid !== 'undefined') { - if (json.grid.x.show) { - c3json.grid.x.show = true; - } - if (json.grid.y.show) { - c3json.grid.y.show = true; - } - } - if (typeof json.subchart !== 'undefined') { - c3json.subchart = json.subchart; - } - if (typeof json.zoom !== 'undefined' && typeof json.zoom.enabled !== 'undefined') { - c3json.zoom.enabled = json.zoom.enabled; - c3json.zoom.type = 'scroll'; - } - if (typeof json.points !== 'undefined' && typeof json.points.enabled !== 'undefined') { - c3json.point = { - show: json.points.enabled - }; - } - if (typeof json.legend !== 'undefined' && typeof json.legend.enabled !== 'undefined') { - c3json.legend = { - hide: !json.legend.enabled - }; - } - if (typeof json.labels !== 'undefined' && typeof json.labels.enabled !== 'undefined') { - c3json.data.labels = json.labels.enabled; - if (json.data[0].type === "pie") { - if (!c3json.pie) { - c3json.pie = {}; - } - c3json.pie.label = { - show: json.labels.enabled - }; - } - if (typeof json.oneLabelPerElement !== 'undefined' && typeof json.oneLabelPerElement.enabled !== 'undefined' && json.oneLabelPerElement.enabled) { - var _scope = this; - c3json.data.labels = { - format: function format(v, id, i, j) { - var chrt = _scope.getChartByBindId(bindto.substr(1, bindto.length)); - if (id && i == 0) { - return chrt.json.data.names[id]; - } else { - return ''; - } - } - }; - } - } - if (typeof json.tooltips !== 'undefined' && typeof json.tooltips.enabled !== 'undefined' && json.tooltips.enabled && typeof json.tooltip !== 'undefined' && typeof json.tooltip.format !== 'undefined' && typeof json.tooltip.format.title !== 'undefined') { - chart.tooltipformattitle = json.tooltip.format.title; - var _scope2 = this; - c3json.tooltip.format.title = function (x) { - var chrt = _scope2.getChartByBindId(bindto.substr(1, bindto.length)); - return chrt.tooltipformattitle[x]; - }; - } else { - c3json.tooltip.show = json.tooltips.enabled && json.tooltips.enabled !== 'undefined'; - } - c3json.tooltip.format.value = function (value, ratio, id, index) { - if (id === "y0") { - return value + " " + c3json.axis.y.tickFormat; - } else if (id === "y1" && c3json.axis.y2.show) { - return value + " " + c3json.axis.y2.tickFormat; - } else if (c3json.data.axes[id]) { - return value + " " + c3json.axis[c3json.data.axes[id]].tickFormat; - } - return value; - }; - - // check for custom tooltip - if (hasCustomTooltip) { - if (json.data[0].type === 'line') { - c3json.tooltip.contents = function (data, defaultTitleFormat, defaultValueFormat, color) { - var valueDiv = "
"; - if (json.data[0].xType === "datetime") { - // js works with microseconds - var value = new Date(data[0].x * 1000); - value = value.toLocaleDateString("de"); - valueDiv += "
" + value + "
"; - } else { - valueDiv += "
" + data[0].x + "
"; - } - valueDiv += "
"; - for (var _i = 0; _i < data.length; _i++) { - var axisName = c3json.data.axes[data[_i].name]; - valueDiv += "
"; - valueDiv += "
"; - valueDiv += "
" + data[_i].name + ": " + defaultValueFormat(data[_i].value, 1.0, axisName) + "
"; - valueDiv += "
" + json.data[_i].tooltipExtension + "
"; - valueDiv += "
"; - } - valueDiv += "
"; // close c3-tooltip-container - valueDiv += "
"; // close c3-tooltip - - return valueDiv; - }; - } else { - c3json.tooltip.contents = function (data, defaultTitleFormat, defaultValueFormat, color) { - var valueDiv = "
"; - valueDiv += "
"; - for (var _i2 = 0; _i2 < data.length; _i2++) { - var _index = data[_i2].index; - valueDiv += "
" + json.data[_index].tooltipExtension + "
"; - valueDiv += "
"; - } - valueDiv += "
"; // close c3-tooltip-container - valueDiv += ""; // close c3-tooltip - - return valueDiv; - }; - } - } - var scope = this; - c3json.data.onclick = function (d, element) { - var chrt = scope.getChartByBindId(bindto.substr(1, bindto.length)); - var redirect = chrt.json.data.redirects[d.id]; - if (redirect && redirect != 0) { - window.location = chrt.json.data.redirects[d.id]; - } - }; - - // console.log(c3json); - return c3json; - } - }, { - key: "getChartByBindId", - value: function getChartByBindId(id) { - var index = 0; - while (index < this.charts.length) { - if (this.charts[index].bindto === '#' + id) { - return this.charts[index]; - } - index += 1; - } - return null; - } - }, { - key: "addClickListeners", - value: function addClickListeners() { - var scope = this; - var buttons = document.getElementsByClassName('c4g_chart_range_button'); - var index = 0; - while (index < buttons.length) { - buttons.item(index).addEventListener('click', function () { - var chart = scope.getChartByBindId(this.dataset.target); - chart.range(this.dataset.range); - chart.update(); - }); - index += 1; - } - } - }]); - return Vis; -}(); -var vis = new Vis(); -vis.generateCharts(); -vis.addClickListeners(); -})(); - -/******/ })() -; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsUUFBUTtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBLHVCQUF1QjtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QjtBQUN2QjtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QjtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBLHVCQUF1QjtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QjtBQUN2QjtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QjtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QjtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQix1Q0FBdUM7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQ0FBc0M7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLFdBQVc7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QztBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnREFBZ0Q7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZixXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLHVCQUF1QjtBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZixXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0VBQWdFO0FBQ2hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkI7QUFDM0I7QUFDQTtBQUNBLG1CQUFtQjtBQUNuQjtBQUNBLFdBQVc7QUFDWCxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0NBQStDO0FBQy9DO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLDRCQUE0QjtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEM7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNENBQTRDO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0ZBQWtGO0FBQ2xGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQywwQkFBMEI7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixxREFBcUQ7QUFDM0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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V0FBNlc7QUFDN1c7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdEQUFnRDtBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLGdCQUFnQjtBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9FQUFvRTtBQUNwRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsa0JBQWtCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLG1CQUFtQjtBQUM5Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQjtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZ0ZBQWdGLHNCQUFzQjtBQUN0RztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixxREFBcUQ7QUFDM0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IscURBQXFEO0FBQzNFO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLG9EQUFvRDtBQUM5RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLG9EQUFvRDtBQUMxRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWCxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMENBQTBDO0FBQzFDO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQix5QkFBeUI7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyx5QkFBeUI7QUFDNUQ7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsZ0JBQWdCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsZ0JBQWdCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseURBQXlELFdBQVc7QUFDcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQixtQkFBbUI7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQztBQUN0QywyQ0FBMkM7QUFDM0MseUNBQXlDO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDO0FBQ3RDLHFDQUFxQztBQUNyQyxtQ0FBbUM7QUFDbkMsb0NBQW9DO0FBQ3BDLGlDQUFpQztBQUNqQyxxQ0FBcUM7QUFDckM7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1gsd0JBQXdCO0FBQ3hCLDBCQUEwQjtBQUMxQjtBQUNBLHVCQUF1QjtBQUN2QjtBQUNBLHdCQUF3QjtBQUN4Qix5QkFBeUI7QUFDekI7QUFDQSwwQkFBMEI7QUFDMUI7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QztBQUN2QywyQ0FBMkM7QUFDM0MsMENBQTBDO0FBQzFDLDBDQUEwQztBQUMxQyw0Q0FBNEM7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQ0FBMkM7QUFDM0M7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEI7QUFDNUI7QUFDQTtBQUNBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkI7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEI7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZixXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEIsZUFBZTtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQyx1Q0FBdUM7QUFDM0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkIsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0EsV0FBVztBQUNYLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMENBQTBDLGFBQWEsY0FBYywyQkFBMkI7QUFDaEc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnREFBZ0Q7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLFNBQVM7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLFFBQVE7QUFDckIsYUFBYSxPQUFPO0FBQ3BCLGFBQWEsT0FBTztBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QztBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtDQUErQywyQ0FBMkM7QUFDMUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EscURBQXFEO0FBQ3JEO0FBQ0Esc0JBQXNCLCtCQUErQjtBQUNyRDtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsa0NBQWtDO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1gsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0Isb0JBQW9CO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IscUJBQXFCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLGNBQWM7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsUUFBUTtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxVQUFVO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1Qyx1QkFBdUI7QUFDOUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0RBQWdELGtCQUFrQjtBQUNsRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDLG1CQUFtQjtBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwRUFBMEUsbURBQW1EO0FBQzdIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QyxtQkFBbUI7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkMsbUJBQW1CO0FBQ2hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxvQ0FBb0MscUVBQXFFO0FBQ3pHLG9DQUFvQyxxRUFBcUU7QUFDekc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0MscUVBQXFFO0FBQ3pHLG9DQUFvQyxxRUFBcUU7QUFDekc7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DLG9DQUFvQztBQUN4RSxvQ0FBb0Msb0NBQW9DO0FBQ3hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQixzQ0FBc0M7QUFDaEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQztBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsY0FBYztBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1EQUFtRDtBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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Ozs7Ozs7Ozs7O0FDdENuQiw2QkFBZSxvQ0FBUztBQUN4QjtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ0oyQzs7QUFFcEM7O0FBRUE7QUFDQTs7QUFFUDtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsSUFBSTtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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OztBQUVuRCw2QkFBZSxvQ0FBUztBQUN4QixTQUFTLHdEQUFtQjtBQUM1Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ0prQztBQUNKOztBQUV2QjtBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxrREFBTTs7QUFFWixpRUFBZSxvREFBSSxRQUFRLEVBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNiTTtBQUNKOztBQUV2QjtBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxrREFBTTs7QUFFWixpRUFBZSxvREFBSSxRQUFRLEVBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNiTTtBQUNKOztBQUV2QjtBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxrREFBTTs7QUFFWixpRUFBZSxvREFBSSxRQUFRLEVBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNiTTtBQUNKOztBQUV2QjtBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxrREFBTTs7QUFFWixpRUFBZSxvREFBSSxRQUFRLEVBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNiTTtBQUNKOztBQUV2QjtBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxrREFBTTs7QUFFWixpRUFBZSxvREFBSSxRQUFRLEVBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNiTTtBQUNKOztBQUV2QjtBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxrREFBTTs7QUFFWixpRUFBZSxvREFBSSxRQUFRLEVBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNiTTtBQUNKOztBQUV2QjtBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxrREFBTTs7QUFFWixpRUFBZSxvREFBSSxRQUFRLEVBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNiTTtBQUNKOztBQUV2QjtBQUNQO0FBQ0E7QUFDQTtBQUNBO0FB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Q0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQztBQUNoQztBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsZ0NBQWdDO0FBQ2hDO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxnQ0FBZ0M7QUFDaEM7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLGdDQUFnQztBQUNoQztBQUNBO0FBQ0E7QUFDQTs7QUFFQSxZQUFZLDRCQUE0QjtBQUN4QztBQUNBO0FBQ0Esa0NBQWtDOztBQUVsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7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QSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsMEJBQTBCLGdCQUFnQjs7QUFFMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTs7QUFFTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFD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O0lBQUE7SUFBQSxPQUVELDZCQUFvQjtNQUNsQixJQUFNakUsS0FBSyxHQUFHLElBQUk7TUFDbEIsSUFBSXNILE9BQU8sR0FBR3pILFFBQVEsQ0FBQ0Msc0JBQXNCLENBQUMsd0JBQXdCLENBQUM7TUFDdkUsSUFBSW1FLEtBQUssR0FBRyxDQUFDO01BQ2IsT0FBT0EsS0FBSyxHQUFHcUQsT0FBTyxDQUFDbkYsTUFBTSxFQUFFO1FBQzdCbUYsT0FBTyxDQUFDbkgsSUFBSSxDQUFDOEQsS0FBSyxDQUFDLENBQUNzRCxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsWUFBVztVQUN2RCxJQUFJbEgsS0FBSyxHQUFHTCxLQUFLLENBQUNnQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUM1QixPQUFPLENBQUNvRixNQUFNLENBQUM7VUFDdkRuRixLQUFLLENBQUNXLEtBQUssQ0FBQyxJQUFJLENBQUNaLE9BQU8sQ0FBQ1ksS0FBSyxDQUFDO1VBQy9CWCxLQUFLLENBQUNtQixNQUFNLEVBQUU7UUFDaEIsQ0FBQyxDQUFDO1FBQ0Z5QyxLQUFLLElBQUksQ0FBQztNQUNaO0lBQ0Y7RUFBQztFQUFBO0FBQUE7QUFHSCxJQUFJdUQsR0FBRyxHQUFHLElBQUk3SCxHQUFHLEVBQUU7QUFDbkI2SCxHQUFHLENBQUNDLGNBQWMsRUFBRTtBQUNwQkQsR0FBRyxDQUFDRSxpQkFBaUIsRUFBRSxDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9jMy9jMy5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9hcnJheS5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9hc2NlbmRpbmcuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvYmlzZWN0LmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2Jpc2VjdG9yLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2NvbnN0YW50LmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2Nyb3NzLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2Rlc2NlbmRpbmcuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvZGV2aWF0aW9uLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2V4dGVudC5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9oaXN0b2dyYW0uanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvaWRlbnRpdHkuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvbWF4LmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL21lYW4uanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvbWVkaWFuLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL21lcmdlLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL21pbi5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9udW1iZXIuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvcGFpcnMuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvcGVybXV0ZS5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9xdWFudGlsZS5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9yYW5nZS5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9zY2FuLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL3NodWZmbGUuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvc3VtLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL3RocmVzaG9sZC9mcmVlZG1hbkRpYWNvbmlzLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL3RocmVzaG9sZC9zY290dC5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy90aHJlc2hvbGQvc3R1cmdlcy5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy90aWNrcy5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy90cmFuc3Bvc2UuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvdmFyaWFuY2UuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvemlwLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtYXhpcy9zcmMvYXJyYXkuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1heGlzL3NyYy9heGlzLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtYXhpcy9zcmMvaWRlbnRpdHkuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1heGlzL3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWJydXNoL3NyYy9icnVzaC5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWJydXNoL3NyYy9jb25zdGFudC5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWJydXNoL3NyYy9ldmVudC5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWJydXNoL3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWJydXNoL3NyYy9ub2V2ZW50LmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtY2hvcmQvc3JjL2FycmF5LmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtY2hvcmQvc3JjL2Nob3JkLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtY2hvcmQvc3JjL2NvbnN0YW50LmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtY2hvcmQvc3JjL2luZGV4LmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtY2hvcmQvc3JjL21hdGguanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1jaG9yZC9zcmMvcmliYm9uLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtY29sbGVjdGlvbi9zcmMvZW50cmllcy5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWNvbGxlY3Rpb24vc3JjL2luZGV4LmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtY29sbGVjdGlvbi9zcmMva2V5cy5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWNvbGxlY3Rpb24vc3JjL21hcC5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWNvbGxlY3Rpb24vc3JjL25lc3QuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1jb2xsZWN0aW9uL3NyYy9zZXQuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1jb2xsZWN0aW9uL3NyYy92YWx1ZXMuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1jb2xvci9zcmMvY29sb3IuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1jb2xvci9zcmMvY3ViZWhlbGl4LmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtY29sb3Ivc3JjL2RlZmluZS5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWNvbG9yL3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWNvbG9yL3NyYy9sYWIuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1jb2xvci9zcmMvbWF0aC5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWNvbnRvdXIvc3JjL2FyZWEuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1jb250b3VyL3NyYy9hcnJheS5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWNvbnRvdXIvc3JjL2FzY2VuZGluZy5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWNvbnRvdXIvc3JjL2JsdXIuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1jb250b3VyL3NyYy9jb25zdGFudC5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWNvbnRvdXIvc3JjL2NvbnRhaW5zLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtY29udG91ci9zcmMvY29udG91cnMuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1jb250b3VyL3NyYy9kZW5zaXR5LmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtY29udG91ci9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1jb250b3VyL3NyYy9ub29wLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtZGlzcGF0Y2gvc3JjL2Rpc3BhdGNoLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtZGlzcGF0Y2gvc3JjL2luZGV4LmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtZHJhZy9zcmMvY29uc3RhbnQuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1kcmFnL3NyYy9kcmFnLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtZHJhZy9zcmMvZXZlbnQuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1kcmFnL3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWRyYWcvc3JjL25vZHJhZy5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWRyYWcvc3JjL25vZXZlbnQuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1kc3Yvc3JjL2F1dG9UeXBlLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtZHN2L3NyYy9jc3YuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1kc3Yvc3JjL2Rzdi5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWRzdi9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1kc3Yvc3JjL3Rzdi5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWVhc2Uvc3JjL2JhY2suanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1lYXNlL3NyYy9ib3VuY2UuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1lYXNlL3NyYy9jaXJjbGUuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1lYXNlL3NyYy9jdWJpYy5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWVhc2Uvc3JjL2VsYXN0aWMuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1lYXNlL3NyYy9leHAuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1lYXNlL3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWVhc2Uvc3JjL2xpbmVhci5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWVhc2Uvc3JjL21hdGguanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1lYXNlL3NyYy9wb2x5LmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtZWFzZS9zcmMvcXVhZC5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWVhc2Uvc3JjL3Npbi5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWZldGNoL3NyYy9ibG9iLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtZmV0Y2gvc3JjL2J1ZmZlci5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWZldGNoL3NyYy9kc3YuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1mZXRjaC9zcmMvaW1hZ2UuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1mZXRjaC9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1mZXRjaC9zcmMvanNvbi5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWZldGNoL3NyYy90ZXh0LmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtZmV0Y2gvc3JjL3htbC5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWZvcmNlL3NyYy9jZW50ZXIuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1mb3JjZS9zcmMvY29sbGlkZS5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWZvcmNlL3NyYy9jb25zdGFudC5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWZvcmNlL3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWZvcmNlL3NyYy9qaWdnbGUuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1mb3JjZS9zcmMvbGluay5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWZvcmNlL3NyYy9tYW55Qm9keS5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWZvcmNlL3NyYy9yYWRpYWwuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1mb3JjZS9zcmMvc2ltdWxhdGlvbi5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWZvcmNlL3NyYy94LmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtZm9yY2Uvc3JjL3kuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2RlZmF1bHRMb2NhbGUuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2V4cG9uZW50LmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9mb3JtYXREZWNpbWFsLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9mb3JtYXRHcm91cC5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZm9ybWF0TnVtZXJhbHMuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdFByZWZpeEF1dG8uanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdFJvdW5kZWQuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdFNwZWNpZmllci5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZm9ybWF0VHJpbS5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZm9ybWF0VHlwZXMuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2lkZW50aXR5LmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvbG9jYWxlLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9wcmVjaXNpb25GaXhlZC5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvcHJlY2lzaW9uUHJlZml4LmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9wcmVjaXNpb25Sb3VuZC5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvYWRkZXIuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL2FyZWEuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL2JvdW5kcy5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvY2FydGVzaWFuLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9jZW50cm9pZC5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvY2lyY2xlLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9jbGlwL2FudGltZXJpZGlhbi5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvY2xpcC9idWZmZXIuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL2NsaXAvY2lyY2xlLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9jbGlwL2V4dGVudC5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvY2xpcC9pbmRleC5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvY2xpcC9saW5lLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9jbGlwL3JlY3RhbmdsZS5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvY2xpcC9yZWpvaW4uanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL2NvbXBvc2UuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL2NvbnN0YW50LmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9jb250YWlucy5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvZGlzdGFuY2UuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL2dyYXRpY3VsZS5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvaWRlbnRpdHkuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL2luZGV4LmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9pbnRlcnBvbGF0ZS5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvbGVuZ3RoLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9tYXRoLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9ub29wLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9wYXRoL2FyZWEuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3BhdGgvYm91bmRzLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9wYXRoL2NlbnRyb2lkLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9wYXRoL2NvbnRleHQuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3BhdGgvaW5kZXguanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3BhdGgvbWVhc3VyZS5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcGF0aC9zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3BvaW50RXF1YWwuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3BvbHlnb25Db250YWlucy5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9hbGJlcnMuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3Byb2plY3Rpb24vYWxiZXJzVXNhLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9wcm9qZWN0aW9uL2F6aW11dGhhbC5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9hemltdXRoYWxFcXVhbEFyZWEuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3Byb2plY3Rpb24vYXppbXV0aGFsRXF1aWRpc3RhbnQuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3Byb2plY3Rpb24vY29uaWMuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3Byb2plY3Rpb24vY29uaWNDb25mb3JtYWwuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3Byb2plY3Rpb24vY29uaWNFcXVhbEFyZWEuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3Byb2plY3Rpb24vY29uaWNFcXVpZGlzdGFudC5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9jeWxpbmRyaWNhbEVxdWFsQXJlYS5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9lcXVhbEVhcnRoLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9wcm9qZWN0aW9uL2VxdWlyZWN0YW5ndWxhci5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9maXQuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3Byb2plY3Rpb24vZ25vbW9uaWMuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3Byb2plY3Rpb24vaWRlbnRpdHkuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3Byb2plY3Rpb24vaW5kZXguanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3Byb2plY3Rpb24vbWVyY2F0b3IuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3Byb2plY3Rpb24vbmF0dXJhbEVhcnRoMS5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9vcnRob2dyYXBoaWMuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3Byb2plY3Rpb24vcmVzYW1wbGUuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3Byb2plY3Rpb24vc3RlcmVvZ3JhcGhpYy5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi90cmFuc3ZlcnNlTWVyY2F0b3IuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3JvdGF0aW9uLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9zdHJlYW0uanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3RyYW5zZm9ybS5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvYWNjZXNzb3JzLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9hcnJheS5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvY2x1c3Rlci5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvY29uc3RhbnQuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2hpZXJhcmNoeS9hbmNlc3RvcnMuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2hpZXJhcmNoeS9jb3VudC5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvaGllcmFyY2h5L2Rlc2NlbmRhbnRzLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9oaWVyYXJjaHkvZWFjaC5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvaGllcmFyY2h5L2VhY2hBZnRlci5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvaGllcmFyY2h5L2VhY2hCZWZvcmUuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2hpZXJhcmNoeS9pbmRleC5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvaGllcmFyY2h5L2xlYXZlcy5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvaGllcmFyY2h5L2xpbmtzLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9oaWVyYXJjaHkvcGF0aC5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvaGllcmFyY2h5L3NvcnQuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2hpZXJhcmNoeS9zdW0uanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2luZGV4LmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9wYWNrL2VuY2xvc2UuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL3BhY2svaW5kZXguanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL3BhY2svc2libGluZ3MuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL3BhcnRpdGlvbi5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvc3RyYXRpZnkuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL3RyZWUuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL3RyZWVtYXAvYmluYXJ5LmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy90cmVlbWFwL2RpY2UuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL3RyZWVtYXAvaW5kZXguanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL3RyZWVtYXAvcmVzcXVhcmlmeS5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvdHJlZW1hcC9yb3VuZC5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvdHJlZW1hcC9zbGljZS5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvdHJlZW1hcC9zbGljZURpY2UuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL3RyZWVtYXAvc3F1YXJpZnkuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvYXJyYXkuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvYmFzaXMuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvYmFzaXNDbG9zZWQuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvY29sb3IuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvY29uc3RhbnQuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvY3ViZWhlbGl4LmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL2RhdGUuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvZGlzY3JldGUuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvaGNsLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL2hzbC5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9odWUuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvbGFiLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL251bWJlci5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9udW1iZXJBcnJheS5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9vYmplY3QuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvcGllY2V3aXNlLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3F1YW50aXplLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3JnYi5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9yb3VuZC5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvdHJhbnNmb3JtL2RlY29tcG9zZS5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy90cmFuc2Zvcm0vaW5kZXguanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvdHJhbnNmb3JtL3BhcnNlLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3ZhbHVlLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3pvb20uanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1wYXRoL3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXBhdGgvc3JjL3BhdGguanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1wb2x5Z29uL3NyYy9hcmVhLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtcG9seWdvbi9zcmMvY2VudHJvaWQuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1wb2x5Z29uL3NyYy9jb250YWlucy5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXBvbHlnb24vc3JjL2Nyb3NzLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtcG9seWdvbi9zcmMvaHVsbC5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXBvbHlnb24vc3JjL2luZGV4LmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtcG9seWdvbi9zcmMvbGVuZ3RoLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtcXVhZHRyZWUvc3JjL2FkZC5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXF1YWR0cmVlL3NyYy9jb3Zlci5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXF1YWR0cmVlL3NyYy9kYXRhLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtcXVhZHRyZWUvc3JjL2V4dGVudC5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXF1YWR0cmVlL3NyYy9maW5kLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtcXVhZHRyZWUvc3JjL2luZGV4LmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtcXVhZHRyZWUvc3JjL3F1YWQuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1xdWFkdHJlZS9zcmMvcXVhZHRyZWUuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1xdWFkdHJlZS9zcmMvcmVtb3ZlLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtcXVhZHRyZWUvc3JjL3Jvb3QuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1xdWFkdHJlZS9zcmMvc2l6ZS5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXF1YWR0cmVlL3NyYy92aXNpdC5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXF1YWR0cmVlL3NyYy92aXNpdEFmdGVyLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtcXVhZHRyZWUvc3JjL3guanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1xdWFkdHJlZS9zcmMveS5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXJhbmRvbS9zcmMvYmF0ZXMuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1yYW5kb20vc3JjL2RlZmF1bHRTb3VyY2UuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1yYW5kb20vc3JjL2V4cG9uZW50aWFsLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtcmFuZG9tL3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXJhbmRvbS9zcmMvaXJ3aW5IYWxsLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtcmFuZG9tL3NyYy9sb2dOb3JtYWwuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1yYW5kb20vc3JjL25vcm1hbC5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXJhbmRvbS9zcmMvdW5pZm9ybS5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvY2F0ZWdvcmljYWwvQWNjZW50LmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9jYXRlZ29yaWNhbC9EYXJrMi5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvY2F0ZWdvcmljYWwvUGFpcmVkLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9jYXRlZ29yaWNhbC9QYXN0ZWwxLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9jYXRlZ29yaWNhbC9QYXN0ZWwyLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9jYXRlZ29yaWNhbC9TZXQxLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9jYXRlZ29yaWNhbC9TZXQyLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9jYXRlZ29yaWNhbC9TZXQzLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9jYXRlZ29yaWNhbC9UYWJsZWF1MTAuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2NhdGVnb3JpY2FsL2NhdGVnb3J5MTAuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2NvbG9ycy5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvZGl2ZXJnaW5nL0JyQkcuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2RpdmVyZ2luZy9QUkduLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9kaXZlcmdpbmcvUGlZRy5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvZGl2ZXJnaW5nL1B1T3IuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2RpdmVyZ2luZy9SZEJ1LmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9kaXZlcmdpbmcvUmRHeS5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvZGl2ZXJnaW5nL1JkWWxCdS5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvZGl2ZXJnaW5nL1JkWWxHbi5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvZGl2ZXJnaW5nL1NwZWN0cmFsLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvcmFtcC5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1tdWx0aS9CdUduLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLW11bHRpL0J1UHUuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3NlcXVlbnRpYWwtbXVsdGkvR25CdS5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1tdWx0aS9PclJkLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLW11bHRpL1B1QnUuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3NlcXVlbnRpYWwtbXVsdGkvUHVCdUduLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLW11bHRpL1B1UmQuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3NlcXVlbnRpYWwtbXVsdGkvUmRQdS5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1tdWx0aS9ZbEduLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLW11bHRpL1lsR25CdS5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1tdWx0aS9ZbE9yQnIuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3NlcXVlbnRpYWwtbXVsdGkvWWxPclJkLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLW11bHRpL2NpdmlkaXMuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3NlcXVlbnRpYWwtbXVsdGkvY3ViZWhlbGl4LmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLW11bHRpL3JhaW5ib3cuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3NlcXVlbnRpYWwtbXVsdGkvc2luZWJvdy5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1tdWx0aS90dXJiby5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1tdWx0aS92aXJpZGlzLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLXNpbmdsZS9CbHVlcy5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1zaW5nbGUvR3JlZW5zLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLXNpbmdsZS9HcmV5cy5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1zaW5nbGUvT3Jhbmdlcy5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1zaW5nbGUvUHVycGxlcy5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvc2VxdWVudGlhbC1zaW5nbGUvUmVkcy5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9hcnJheS5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9iYW5kLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2NvbnN0YW50LmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2NvbnRpbnVvdXMuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvZGl2ZXJnaW5nLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2lkZW50aXR5LmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2luZGV4LmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2luaXQuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvbGluZWFyLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2xvZy5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9uaWNlLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL251bWJlci5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9vcmRpbmFsLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL3Bvdy5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9xdWFudGlsZS5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9xdWFudGl6ZS5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9zZXF1ZW50aWFsLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL3NlcXVlbnRpYWxRdWFudGlsZS5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9zeW1sb2cuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvdGhyZXNob2xkLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL3RpY2tGb3JtYXQuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvdGltZS5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy91dGNUaW1lLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9jb25zdGFudC5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvY3JlYXRlLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9jcmVhdG9yLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvbG9jYWwuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL21hdGNoZXIuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL21vdXNlLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9uYW1lc3BhY2UuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL25hbWVzcGFjZXMuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3BvaW50LmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3QuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdEFsbC5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2FwcGVuZC5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2F0dHIuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9jYWxsLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vY2xhc3NlZC5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2Nsb25lLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZGF0YS5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2RhdHVtLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZGlzcGF0Y2guanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9lYWNoLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZW1wdHkuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9lbnRlci5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2V4aXQuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9maWx0ZXIuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9odG1sLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vaW5kZXguanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9pbnNlcnQuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9qb2luLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vbG93ZXIuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9tZXJnZS5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL25vZGUuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9ub2Rlcy5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL29uLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vb3JkZXIuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3JhaXNlLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vcmVtb3ZlLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vc2VsZWN0LmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vc2VsZWN0QWxsLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vc2l6ZS5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3NvcnQuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9zcGFyc2UuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9zdHlsZS5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3RleHQuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdG9yLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3RvckFsbC5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc291cmNlRXZlbnQuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3RvdWNoLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy90b3VjaGVzLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy93aW5kb3cuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvYXJjLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2FyZWEuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvYXJlYVJhZGlhbC5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9hcnJheS5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jb25zdGFudC5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9iYXNpcy5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9iYXNpc0Nsb3NlZC5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9iYXNpc09wZW4uanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvY3VydmUvYnVuZGxlLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2N1cnZlL2NhcmRpbmFsLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2N1cnZlL2NhcmRpbmFsQ2xvc2VkLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2N1cnZlL2NhcmRpbmFsT3Blbi5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9jYXRtdWxsUm9tLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2N1cnZlL2NhdG11bGxSb21DbG9zZWQuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvY3VydmUvY2F0bXVsbFJvbU9wZW4uanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvY3VydmUvbGluZWFyLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2N1cnZlL2xpbmVhckNsb3NlZC5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9tb25vdG9uZS5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9uYXR1cmFsLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2N1cnZlL3JhZGlhbC5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9zdGVwLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2Rlc2NlbmRpbmcuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvaWRlbnRpdHkuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvbGluZS5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9saW5lUmFkaWFsLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2xpbmsvaW5kZXguanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvbWF0aC5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9ub29wLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL29mZnNldC9kaXZlcmdpbmcuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvb2Zmc2V0L2V4cGFuZC5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9vZmZzZXQvbm9uZS5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9vZmZzZXQvc2lsaG91ZXR0ZS5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9vZmZzZXQvd2lnZ2xlLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL29yZGVyL2FwcGVhcmFuY2UuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvb3JkZXIvYXNjZW5kaW5nLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL29yZGVyL2Rlc2NlbmRpbmcuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvb3JkZXIvaW5zaWRlT3V0LmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL29yZGVyL25vbmUuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvb3JkZXIvcmV2ZXJzZS5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9waWUuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvcG9pbnQuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvcG9pbnRSYWRpYWwuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvc3RhY2suanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvc3ltYm9sLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL3N5bWJvbC9jaXJjbGUuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvc3ltYm9sL2Nyb3NzLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL3N5bWJvbC9kaWFtb25kLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL3N5bWJvbC9zcXVhcmUuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvc3ltYm9sL3N0YXIuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvc3ltYm9sL3RyaWFuZ2xlLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL3N5bWJvbC93eWUuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy10aW1lLWZvcm1hdC9zcmMvZGVmYXVsdExvY2FsZS5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXRpbWUtZm9ybWF0L3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXRpbWUtZm9ybWF0L3NyYy9pc29Gb3JtYXQuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy10aW1lLWZvcm1hdC9zcmMvaXNvUGFyc2UuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy10aW1lLWZvcm1hdC9zcmMvbG9jYWxlLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvZGF5LmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvZHVyYXRpb24uanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy9ob3VyLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy9pbnRlcnZhbC5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL21pbGxpc2Vjb25kLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvbWludXRlLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvbW9udGguanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy9zZWNvbmQuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy91dGNEYXkuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy91dGNIb3VyLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvdXRjTWludXRlLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvdXRjTW9udGguanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy91dGNXZWVrLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvdXRjWWVhci5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL3dlZWsuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy95ZWFyLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtdGltZXIvc3JjL2luZGV4LmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtdGltZXIvc3JjL2ludGVydmFsLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtdGltZXIvc3JjL3RpbWVvdXQuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy10aW1lci9zcmMvdGltZXIuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy9hY3RpdmUuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL2ludGVycnVwdC5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3NlbGVjdGlvbi9pbmRleC5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3NlbGVjdGlvbi9pbnRlcnJ1cHQuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy9zZWxlY3Rpb24vdHJhbnNpdGlvbi5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vYXR0ci5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vYXR0clR3ZWVuLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9kZWxheS5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vZHVyYXRpb24uanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL2Vhc2UuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL2VuZC5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vZmlsdGVyLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9pbmRleC5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vaW50ZXJwb2xhdGUuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL21lcmdlLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9vbi5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vcmVtb3ZlLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9zY2hlZHVsZS5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vc2VsZWN0LmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9zZWxlY3RBbGwuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3NlbGVjdGlvbi5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vc3R5bGUuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3N0eWxlVHdlZW4uanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3RleHQuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3RleHRUd2Vlbi5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vdHJhbnNpdGlvbi5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vdHdlZW4uanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy12b3Jvbm9pL3NyYy9CZWFjaC5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXZvcm9ub2kvc3JjL0NlbGwuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy12b3Jvbm9pL3NyYy9DaXJjbGUuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy12b3Jvbm9pL3NyYy9EaWFncmFtLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtdm9yb25vaS9zcmMvRWRnZS5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXZvcm9ub2kvc3JjL1JlZEJsYWNrVHJlZS5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXZvcm9ub2kvc3JjL2NvbnN0YW50LmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtdm9yb25vaS9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy12b3Jvbm9pL3NyYy9wb2ludC5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXZvcm9ub2kvc3JjL3Zvcm9ub2kuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy16b29tL3NyYy9jb25zdGFudC5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzLXpvb20vc3JjL2V2ZW50LmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtem9vbS9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9kMy16b29tL3NyYy9ub2V2ZW50LmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtem9vbS9zcmMvdHJhbnNmb3JtLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvZDMtem9vbS9zcmMvem9vbS5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzL2Rpc3QvcGFja2FnZS5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL2QzL2luZGV4LmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdC5qcyIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdHlwZW9mLmpzIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vdmlzdWFsaXphdGlvbmJ1bmRsZS93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL3Zpc3VhbGl6YXRpb25idW5kbGUvd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly92aXN1YWxpemF0aW9uYnVuZGxlLy4vc3JjL1Jlc291cmNlcy9wdWJsaWMvanMvYzRnX3Zpc3VhbGl6YXRpb24uanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogQGxpY2Vuc2UgQzMuanMgdjAuNy4yMCB8IChjKSBDMyBUZWFtIGFuZCBvdGhlciBjb250cmlidXRvcnMgfCBodHRwOi8vYzNqcy5vcmcvICovXG4oZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKSA6XG4gIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShmYWN0b3J5KSA6XG4gIChnbG9iYWwgPSBnbG9iYWwgfHwgc2VsZiwgZ2xvYmFsLmMzID0gZmFjdG9yeSgpKTtcbn0odGhpcywgKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gIGZ1bmN0aW9uIENoYXJ0SW50ZXJuYWwoYXBpKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXM7XHJcbiAgICAgIC8vIE5vdGU6IFRoaXMgcGFydCB3aWxsIGJlIHJlcGxhY2VkIGJ5IHJvbGx1cC1wbHVnaW4tbW9kaWZ5XHJcbiAgICAgIC8vIFdoZW4gYnVuZGxpbmcgZXNtIG91dHB1dC4gQmV3YXJlIG9mIGNoYW5naW5nIHRoaXMgbGluZS5cclxuICAgICAgLy8gVE9ETzogTWF5YmUgd2Ugc2hvdWxkIGNoZWNrIHRoYXQgdGhlIG1vZGlmaWNhdGlvbiBieSByb2xsdXAtcGx1Z2luLW1vZGlmeVxyXG4gICAgICAvLyBpcyB2YWxpZCBkdXJpbmcgdW5pdCB0ZXN0cy5cclxuICAgICAgJCQuZDMgPSB3aW5kb3cuZDNcclxuICAgICAgICAgID8gd2luZG93LmQzXHJcbiAgICAgICAgICA6IHR5cGVvZiByZXF1aXJlICE9PSAndW5kZWZpbmVkJ1xyXG4gICAgICAgICAgICAgID8gcmVxdWlyZSgnZDMnKVxyXG4gICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xyXG4gICAgICAkJC5hcGkgPSBhcGk7XHJcbiAgICAgICQkLmNvbmZpZyA9ICQkLmdldERlZmF1bHRDb25maWcoKTtcclxuICAgICAgJCQuZGF0YSA9IHt9O1xyXG4gICAgICAkJC5jYWNoZSA9IHt9O1xyXG4gICAgICAkJC5heGVzID0ge307XHJcbiAgfVxuXG4gIC8qKlxyXG4gICAqIFRoZSBDaGFydCBjbGFzc1xyXG4gICAqXHJcbiAgICogVGhlIG1ldGhvZHMgb2YgdGhpcyBjbGFzcyBpcyB0aGUgcHVibGljIEFQSXMgb2YgdGhlIGNoYXJ0IG9iamVjdC5cclxuICAgKi9cclxuICBmdW5jdGlvbiBDaGFydChjb25maWcpIHtcclxuICAgICAgdGhpcy5pbnRlcm5hbCA9IG5ldyBDaGFydEludGVybmFsKHRoaXMpO1xyXG4gICAgICB0aGlzLmludGVybmFsLmxvYWRDb25maWcoY29uZmlnKTtcclxuICAgICAgdGhpcy5pbnRlcm5hbC5iZWZvcmVJbml0KGNvbmZpZyk7XHJcbiAgICAgIHRoaXMuaW50ZXJuYWwuaW5pdCgpO1xyXG4gICAgICB0aGlzLmludGVybmFsLmFmdGVySW5pdChjb25maWcpO1xyXG4gICAgICAoZnVuY3Rpb24gYmluZFRoaXMoZm4sIHRhcmdldCwgYXJnVGhpcykge1xyXG4gICAgICAgICAgT2JqZWN0LmtleXMoZm4pLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgICAgICAgIHRhcmdldFtrZXldID0gZm5ba2V5XS5iaW5kKGFyZ1RoaXMpO1xyXG4gICAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhmbltrZXldKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgIGJpbmRUaGlzKGZuW2tleV0sIHRhcmdldFtrZXldLCBhcmdUaGlzKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfSkoQ2hhcnQucHJvdG90eXBlLCB0aGlzLCB0aGlzKTtcclxuICB9XG5cbiAgdmFyIGFzSGFsZlBpeGVsID0gZnVuY3Rpb24gKG4pIHtcclxuICAgICAgcmV0dXJuIE1hdGguY2VpbChuKSArIDAuNTtcclxuICB9O1xyXG4gIHZhciBjZWlsMTAgPSBmdW5jdGlvbiAodikge1xyXG4gICAgICByZXR1cm4gTWF0aC5jZWlsKHYgLyAxMCkgKiAxMDtcclxuICB9O1xyXG4gIHZhciBkaWZmRG9tYWluID0gZnVuY3Rpb24gKGQpIHtcclxuICAgICAgcmV0dXJuIGRbMV0gLSBkWzBdO1xyXG4gIH07XHJcbiAgdmFyIGdldE9wdGlvbiA9IGZ1bmN0aW9uIChvcHRpb25zLCBrZXksIGRlZmF1bHRWYWx1ZSkge1xyXG4gICAgICByZXR1cm4gaXNEZWZpbmVkKG9wdGlvbnNba2V5XSkgPyBvcHRpb25zW2tleV0gOiBkZWZhdWx0VmFsdWU7XHJcbiAgfTtcclxuICB2YXIgZ2V0UGF0aEJveCA9IGZ1bmN0aW9uIChwYXRoKSB7XHJcbiAgICAgIHZhciBib3ggPSBnZXRCQm94KHBhdGgpLCBpdGVtcyA9IFtwYXRoLnBhdGhTZWdMaXN0LmdldEl0ZW0oMCksIHBhdGgucGF0aFNlZ0xpc3QuZ2V0SXRlbSgxKV0sIG1pblggPSBpdGVtc1swXS54LCBtaW5ZID0gTWF0aC5taW4oaXRlbXNbMF0ueSwgaXRlbXNbMV0ueSk7XHJcbiAgICAgIHJldHVybiB7IHg6IG1pblgsIHk6IG1pblksIHdpZHRoOiBib3gud2lkdGgsIGhlaWdodDogYm94LmhlaWdodCB9O1xyXG4gIH07XHJcbiAgdmFyIGdldEJCb3ggPSBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgICAgcmV0dXJuIGVsZW1lbnQuZ2V0QkJveCgpO1xyXG4gICAgICB9XHJcbiAgICAgIGNhdGNoIChpZ25vcmUpIHtcclxuICAgICAgICAgIC8vIEZpcmVmb3ggd2lsbCB0aHJvdyBhbiBleGNlcHRpb24gaWYgZ2V0QkJveCgpIGlzIGNhbGxlZCB3aGVyZWFzIHRoZVxyXG4gICAgICAgICAgLy8gZWxlbWVudCBpcyByZW5kZXJlZCB3aXRoIGRpc3BsYXk6bm9uZVxyXG4gICAgICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9jM2pzL2MzL2lzc3Vlcy8yNjkyXHJcbiAgICAgICAgICAvLyBUaGUgcHJldmlvdXMgY29kZSB3YXMgdXNpbmcgYGdldEJvdW5kaW5nQ2xpZW50UmVjdGAgd2hpY2ggd2FzIHJldHVybmluZ1xyXG4gICAgICAgICAgLy8gZXZlcnl0aGluZyBhdCAwIGluIHRoaXMgY2FzZSBzbyBsZXQncyByZXByb2R1Y2UgdGhpcyBiZWhhdmlvciBoZXJlLlxyXG4gICAgICAgICAgcmV0dXJuIHsgeDogMCwgeTogMCwgd2lkdGg6IDAsIGhlaWdodDogMCB9O1xyXG4gICAgICB9XHJcbiAgfTtcclxuICB2YXIgaGFzVmFsdWUgPSBmdW5jdGlvbiAoZGljdCwgdmFsdWUpIHtcclxuICAgICAgdmFyIGZvdW5kID0gZmFsc2U7XHJcbiAgICAgIE9iamVjdC5rZXlzKGRpY3QpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgICAgaWYgKGRpY3Rba2V5XSA9PT0gdmFsdWUpIHtcclxuICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gZm91bmQ7XHJcbiAgfTtcclxuICB2YXIgaXNBcnJheSA9IGZ1bmN0aW9uIChvKSB7XHJcbiAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KG8pO1xyXG4gIH07XHJcbiAgdmFyIGlzRGVmaW5lZCA9IGZ1bmN0aW9uICh2KSB7XHJcbiAgICAgIHJldHVybiB0eXBlb2YgdiAhPT0gJ3VuZGVmaW5lZCc7XHJcbiAgfTtcclxuICB2YXIgaXNFbXB0eSA9IGZ1bmN0aW9uIChvKSB7XHJcbiAgICAgIHJldHVybiAodHlwZW9mIG8gPT09ICd1bmRlZmluZWQnIHx8XHJcbiAgICAgICAgICBvID09PSBudWxsIHx8XHJcbiAgICAgICAgICAoaXNTdHJpbmcobykgJiYgby5sZW5ndGggPT09IDApIHx8XHJcbiAgICAgICAgICAodHlwZW9mIG8gPT09ICdvYmplY3QnICYmIE9iamVjdC5rZXlzKG8pLmxlbmd0aCA9PT0gMCkpO1xyXG4gIH07XHJcbiAgdmFyIGlzRnVuY3Rpb24gPSBmdW5jdGlvbiAobykge1xyXG4gICAgICByZXR1cm4gdHlwZW9mIG8gPT09ICdmdW5jdGlvbic7XHJcbiAgfTtcclxuICB2YXIgaXNOdW1iZXIgPSBmdW5jdGlvbiAobykge1xyXG4gICAgICByZXR1cm4gdHlwZW9mIG8gPT09ICdudW1iZXInO1xyXG4gIH07XHJcbiAgdmFyIGlzU3RyaW5nID0gZnVuY3Rpb24gKG8pIHtcclxuICAgICAgcmV0dXJuIHR5cGVvZiBvID09PSAnc3RyaW5nJztcclxuICB9O1xyXG4gIHZhciBpc1VuZGVmaW5lZCA9IGZ1bmN0aW9uICh2KSB7XHJcbiAgICAgIHJldHVybiB0eXBlb2YgdiA9PT0gJ3VuZGVmaW5lZCc7XHJcbiAgfTtcclxuICB2YXIgaXNWYWx1ZSA9IGZ1bmN0aW9uICh2KSB7XHJcbiAgICAgIHJldHVybiB2IHx8IHYgPT09IDA7XHJcbiAgfTtcclxuICB2YXIgbm90RW1wdHkgPSBmdW5jdGlvbiAobykge1xyXG4gICAgICByZXR1cm4gIWlzRW1wdHkobyk7XHJcbiAgfTtcclxuICB2YXIgc2FuaXRpc2UgPSBmdW5jdGlvbiAoc3RyKSB7XHJcbiAgICAgIHJldHVybiB0eXBlb2Ygc3RyID09PSAnc3RyaW5nJ1xyXG4gICAgICAgICAgPyBzdHIucmVwbGFjZSgvPC9nLCAnJmx0OycpLnJlcGxhY2UoLz4vZywgJyZndDsnKVxyXG4gICAgICAgICAgOiBzdHI7XHJcbiAgfTtcclxuICB2YXIgZmxhdHRlbkFycmF5ID0gZnVuY3Rpb24gKGFycikge1xyXG4gICAgICByZXR1cm4gQXJyYXkuaXNBcnJheShhcnIpID8gW10uY29uY2F0LmFwcGx5KFtdLCBhcnIpIDogW107XHJcbiAgfTtcclxuICAvKipcclxuICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIHBvaW50IGlzIHdpdGhpbiB0aGUgZ2l2ZW4gYm94LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtBcnJheX0gcG9pbnQgQW4gW3gseV0gY29vcmRpbmF0ZVxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBib3ggQW4gb2JqZWN0IHdpdGgge3gsIHksIHdpZHRoLCBoZWlnaHR9IGtleXNcclxuICAgKiBAcGFyYW0ge051bWJlcn0gc2Vuc2l0aXZpdHkgQW4gb2Zmc2V0IHRvIGVhc2UgY2hlY2sgb24gdmVyeSBzbWFsbCBib3hlc1xyXG4gICAqL1xyXG4gIHZhciBpc1dpdGhpbkJveCA9IGZ1bmN0aW9uIChwb2ludCwgYm94LCBzZW5zaXRpdml0eSkge1xyXG4gICAgICBpZiAoc2Vuc2l0aXZpdHkgPT09IHZvaWQgMCkgeyBzZW5zaXRpdml0eSA9IDA7IH1cclxuICAgICAgdmFyIHhTdGFydCA9IGJveC54IC0gc2Vuc2l0aXZpdHk7XHJcbiAgICAgIHZhciB4RW5kID0gYm94LnggKyBib3gud2lkdGggKyBzZW5zaXRpdml0eTtcclxuICAgICAgdmFyIHlTdGFydCA9IGJveC55ICsgYm94LmhlaWdodCArIHNlbnNpdGl2aXR5O1xyXG4gICAgICB2YXIgeUVuZCA9IGJveC55IC0gc2Vuc2l0aXZpdHk7XHJcbiAgICAgIHJldHVybiAoeFN0YXJ0IDwgcG9pbnRbMF0gJiYgcG9pbnRbMF0gPCB4RW5kICYmIHlFbmQgPCBwb2ludFsxXSAmJiBwb2ludFsxXSA8IHlTdGFydCk7XHJcbiAgfTtcclxuICAvKipcclxuICAgKiBSZXR1cm5zIEludGVybmV0IEV4cGxvcmVyIHZlcnNpb24gbnVtYmVyIChvciBmYWxzZSBpZiBubyBJbnRlcm5ldCBFeHBsb3JlciB1c2VkKS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBzdHJpbmcgYWdlbnQgT3B0aW9uYWwgcGFyYW1ldGVyIHRvIHNwZWNpZnkgdXNlciBhZ2VudFxyXG4gICAqL1xyXG4gIHZhciBnZXRJRVZlcnNpb24gPSBmdW5jdGlvbiAoYWdlbnQpIHtcclxuICAgICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTk5OTkzODgvY2hlY2staWYtdXNlci1pcy11c2luZy1pZVxyXG4gICAgICBpZiAodHlwZW9mIGFnZW50ID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgYWdlbnQgPSB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudDtcclxuICAgICAgfVxyXG4gICAgICB2YXIgcG9zID0gYWdlbnQuaW5kZXhPZignTVNJRSAnKTsgLy8gdXAgdG8gSUUxMFxyXG4gICAgICBpZiAocG9zID4gMCkge1xyXG4gICAgICAgICAgcmV0dXJuIHBhcnNlSW50KGFnZW50LnN1YnN0cmluZyhwb3MgKyA1LCBhZ2VudC5pbmRleE9mKCcuJywgcG9zKSksIDEwKTtcclxuICAgICAgfVxyXG4gICAgICBwb3MgPSBhZ2VudC5pbmRleE9mKCdUcmlkZW50LycpOyAvLyBJRTExXHJcbiAgICAgIGlmIChwb3MgPiAwKSB7XHJcbiAgICAgICAgICBwb3MgPSBhZ2VudC5pbmRleE9mKCdydjonKTtcclxuICAgICAgICAgIHJldHVybiBwYXJzZUludChhZ2VudC5zdWJzdHJpbmcocG9zICsgMywgYWdlbnQuaW5kZXhPZignLicsIHBvcykpLCAxMCk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gIH07XHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB3aGV0aGVyIHRoZSB1c2VkIGJyb3dzZXIgaXMgSW50ZXJuZXQgRXhwbG9yZXIuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gdmVyc2lvbiBPcHRpb25hbCBwYXJhbWV0ZXIgdG8gc3BlY2lmeSBJRSB2ZXJzaW9uXHJcbiAgICovXHJcbiAgdmFyIGlzSUUgPSBmdW5jdGlvbiAodmVyc2lvbikge1xyXG4gICAgICB2YXIgdmVyID0gZ2V0SUVWZXJzaW9uKCk7XHJcbiAgICAgIGlmICh0eXBlb2YgdmVyc2lvbiA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgIHJldHVybiAhIXZlcjtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdmVyc2lvbiA9PT0gdmVyO1xyXG4gIH07XG5cbiAgZnVuY3Rpb24gQXhpc0ludGVybmFsKGNvbXBvbmVudCwgcGFyYW1zKSB7XHJcbiAgICAgIHZhciBpbnRlcm5hbCA9IHRoaXM7XHJcbiAgICAgIGludGVybmFsLmNvbXBvbmVudCA9IGNvbXBvbmVudDtcclxuICAgICAgaW50ZXJuYWwucGFyYW1zID0gcGFyYW1zIHx8IHt9O1xyXG4gICAgICBpbnRlcm5hbC5kMyA9IGNvbXBvbmVudC5kMztcclxuICAgICAgaW50ZXJuYWwuc2NhbGUgPSBpbnRlcm5hbC5kMy5zY2FsZUxpbmVhcigpO1xyXG4gICAgICBpbnRlcm5hbC5yYW5nZTtcclxuICAgICAgaW50ZXJuYWwub3JpZW50ID0gJ2JvdHRvbSc7XHJcbiAgICAgIGludGVybmFsLmlubmVyVGlja1NpemUgPSA2O1xyXG4gICAgICBpbnRlcm5hbC5vdXRlclRpY2tTaXplID0gdGhpcy5wYXJhbXMud2l0aE91dGVyVGljayA/IDYgOiAwO1xyXG4gICAgICBpbnRlcm5hbC50aWNrUGFkZGluZyA9IDM7XHJcbiAgICAgIGludGVybmFsLnRpY2tWYWx1ZXMgPSBudWxsO1xyXG4gICAgICBpbnRlcm5hbC50aWNrRm9ybWF0O1xyXG4gICAgICBpbnRlcm5hbC50aWNrQXJndW1lbnRzO1xyXG4gICAgICBpbnRlcm5hbC50aWNrT2Zmc2V0ID0gMDtcclxuICAgICAgaW50ZXJuYWwudGlja0N1bGxpbmcgPSB0cnVlO1xyXG4gICAgICBpbnRlcm5hbC50aWNrQ2VudGVyZWQ7XHJcbiAgICAgIGludGVybmFsLnRpY2tUZXh0Q2hhclNpemU7XHJcbiAgICAgIGludGVybmFsLnRpY2tUZXh0Um90YXRlID0gaW50ZXJuYWwucGFyYW1zLnRpY2tUZXh0Um90YXRlO1xyXG4gICAgICBpbnRlcm5hbC50aWNrTGVuZ3RoO1xyXG4gICAgICBpbnRlcm5hbC5heGlzID0gaW50ZXJuYWwuZ2VuZXJhdGVBeGlzKCk7XHJcbiAgfVxyXG4gIEF4aXNJbnRlcm5hbC5wcm90b3R5cGUuYXhpc1ggPSBmdW5jdGlvbiAoc2VsZWN0aW9uLCB4LCB0aWNrT2Zmc2V0KSB7XHJcbiAgICAgIHNlbGVjdGlvbi5hdHRyKCd0cmFuc2Zvcm0nLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgcmV0dXJuICd0cmFuc2xhdGUoJyArIE1hdGguY2VpbCh4KGQpICsgdGlja09mZnNldCkgKyAnLCAwKSc7XHJcbiAgICAgIH0pO1xyXG4gIH07XHJcbiAgQXhpc0ludGVybmFsLnByb3RvdHlwZS5heGlzWSA9IGZ1bmN0aW9uIChzZWxlY3Rpb24sIHkpIHtcclxuICAgICAgc2VsZWN0aW9uLmF0dHIoJ3RyYW5zZm9ybScsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICByZXR1cm4gJ3RyYW5zbGF0ZSgwLCcgKyBNYXRoLmNlaWwoeShkKSkgKyAnKSc7XHJcbiAgICAgIH0pO1xyXG4gIH07XHJcbiAgQXhpc0ludGVybmFsLnByb3RvdHlwZS5zY2FsZUV4dGVudCA9IGZ1bmN0aW9uIChkb21haW4pIHtcclxuICAgICAgdmFyIHN0YXJ0ID0gZG9tYWluWzBdLCBzdG9wID0gZG9tYWluW2RvbWFpbi5sZW5ndGggLSAxXTtcclxuICAgICAgcmV0dXJuIHN0YXJ0IDwgc3RvcCA/IFtzdGFydCwgc3RvcF0gOiBbc3RvcCwgc3RhcnRdO1xyXG4gIH07XHJcbiAgQXhpc0ludGVybmFsLnByb3RvdHlwZS5nZW5lcmF0ZVRpY2tzID0gZnVuY3Rpb24gKHNjYWxlKSB7XHJcbiAgICAgIHZhciBpbnRlcm5hbCA9IHRoaXM7XHJcbiAgICAgIHZhciBpLCBkb21haW4sIHRpY2tzID0gW107XHJcbiAgICAgIGlmIChzY2FsZS50aWNrcykge1xyXG4gICAgICAgICAgcmV0dXJuIHNjYWxlLnRpY2tzLmFwcGx5KHNjYWxlLCBpbnRlcm5hbC50aWNrQXJndW1lbnRzKTtcclxuICAgICAgfVxyXG4gICAgICBkb21haW4gPSBzY2FsZS5kb21haW4oKTtcclxuICAgICAgZm9yIChpID0gTWF0aC5jZWlsKGRvbWFpblswXSk7IGkgPCBkb21haW5bMV07IGkrKykge1xyXG4gICAgICAgICAgdGlja3MucHVzaChpKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGlja3MubGVuZ3RoID4gMCAmJiB0aWNrc1swXSA+IDApIHtcclxuICAgICAgICAgIHRpY2tzLnVuc2hpZnQodGlja3NbMF0gLSAodGlja3NbMV0gLSB0aWNrc1swXSkpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0aWNrcztcclxuICB9O1xyXG4gIEF4aXNJbnRlcm5hbC5wcm90b3R5cGUuY29weVNjYWxlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgaW50ZXJuYWwgPSB0aGlzO1xyXG4gICAgICB2YXIgbmV3U2NhbGUgPSBpbnRlcm5hbC5zY2FsZS5jb3B5KCksIGRvbWFpbjtcclxuICAgICAgaWYgKGludGVybmFsLnBhcmFtcy5pc0NhdGVnb3J5KSB7XHJcbiAgICAgICAgICBkb21haW4gPSBpbnRlcm5hbC5zY2FsZS5kb21haW4oKTtcclxuICAgICAgICAgIG5ld1NjYWxlLmRvbWFpbihbZG9tYWluWzBdLCBkb21haW5bMV0gLSAxXSk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIG5ld1NjYWxlO1xyXG4gIH07XHJcbiAgQXhpc0ludGVybmFsLnByb3RvdHlwZS50ZXh0Rm9ybWF0dGVkID0gZnVuY3Rpb24gKHYpIHtcclxuICAgICAgdmFyIGludGVybmFsID0gdGhpcywgZm9ybWF0dGVkID0gaW50ZXJuYWwudGlja0Zvcm1hdCA/IGludGVybmFsLnRpY2tGb3JtYXQodikgOiB2O1xyXG4gICAgICByZXR1cm4gdHlwZW9mIGZvcm1hdHRlZCAhPT0gJ3VuZGVmaW5lZCcgPyBmb3JtYXR0ZWQgOiAnJztcclxuICB9O1xyXG4gIEF4aXNJbnRlcm5hbC5wcm90b3R5cGUudXBkYXRlUmFuZ2UgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHZhciBpbnRlcm5hbCA9IHRoaXM7XHJcbiAgICAgIGludGVybmFsLnJhbmdlID0gaW50ZXJuYWwuc2NhbGUucmFuZ2VFeHRlbnRcclxuICAgICAgICAgID8gaW50ZXJuYWwuc2NhbGUucmFuZ2VFeHRlbnQoKVxyXG4gICAgICAgICAgOiBpbnRlcm5hbC5zY2FsZUV4dGVudChpbnRlcm5hbC5zY2FsZS5yYW5nZSgpKTtcclxuICAgICAgcmV0dXJuIGludGVybmFsLnJhbmdlO1xyXG4gIH07XHJcbiAgQXhpc0ludGVybmFsLnByb3RvdHlwZS51cGRhdGVUaWNrVGV4dENoYXJTaXplID0gZnVuY3Rpb24gKHRpY2spIHtcclxuICAgICAgdmFyIGludGVybmFsID0gdGhpcztcclxuICAgICAgaWYgKGludGVybmFsLnRpY2tUZXh0Q2hhclNpemUpIHtcclxuICAgICAgICAgIHJldHVybiBpbnRlcm5hbC50aWNrVGV4dENoYXJTaXplO1xyXG4gICAgICB9XHJcbiAgICAgIHZhciBzaXplID0ge1xyXG4gICAgICAgICAgaDogMTEuNSxcclxuICAgICAgICAgIHc6IDUuNVxyXG4gICAgICB9O1xyXG4gICAgICB0aWNrXHJcbiAgICAgICAgICAuc2VsZWN0KCd0ZXh0JylcclxuICAgICAgICAgIC50ZXh0KGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICByZXR1cm4gaW50ZXJuYWwudGV4dEZvcm1hdHRlZChkKTtcclxuICAgICAgfSlcclxuICAgICAgICAgIC5lYWNoKGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICB2YXIgYm94ID0gZ2V0QkJveCh0aGlzKSwgdGV4dCA9IGludGVybmFsLnRleHRGb3JtYXR0ZWQoZCksIGggPSBib3guaGVpZ2h0LCB3ID0gdGV4dCA/IGJveC53aWR0aCAvIHRleHQubGVuZ3RoIDogdW5kZWZpbmVkO1xyXG4gICAgICAgICAgaWYgKGggJiYgdykge1xyXG4gICAgICAgICAgICAgIHNpemUuaCA9IGg7XHJcbiAgICAgICAgICAgICAgc2l6ZS53ID0gdztcclxuICAgICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgICAgIC50ZXh0KCcnKTtcclxuICAgICAgaW50ZXJuYWwudGlja1RleHRDaGFyU2l6ZSA9IHNpemU7XHJcbiAgICAgIHJldHVybiBzaXplO1xyXG4gIH07XHJcbiAgQXhpc0ludGVybmFsLnByb3RvdHlwZS5pc1ZlcnRpY2FsID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5vcmllbnQgPT09ICdsZWZ0JyB8fCB0aGlzLm9yaWVudCA9PT0gJ3JpZ2h0JztcclxuICB9O1xyXG4gIEF4aXNJbnRlcm5hbC5wcm90b3R5cGUudHNwYW5EYXRhID0gZnVuY3Rpb24gKGQsIGksIHNjYWxlKSB7XHJcbiAgICAgIHZhciBpbnRlcm5hbCA9IHRoaXM7XHJcbiAgICAgIHZhciBzcGxpdHRlZCA9IGludGVybmFsLnBhcmFtcy50aWNrTXVsdGlsaW5lXHJcbiAgICAgICAgICA/IGludGVybmFsLnNwbGl0VGlja1RleHQoZCwgc2NhbGUpXHJcbiAgICAgICAgICA6IFtdLmNvbmNhdChpbnRlcm5hbC50ZXh0Rm9ybWF0dGVkKGQpKTtcclxuICAgICAgaWYgKGludGVybmFsLnBhcmFtcy50aWNrTXVsdGlsaW5lICYmIGludGVybmFsLnBhcmFtcy50aWNrTXVsdGlsaW5lTWF4ID4gMCkge1xyXG4gICAgICAgICAgc3BsaXR0ZWQgPSBpbnRlcm5hbC5lbGxpcHNpZnkoc3BsaXR0ZWQsIGludGVybmFsLnBhcmFtcy50aWNrTXVsdGlsaW5lTWF4KTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gc3BsaXR0ZWQubWFwKGZ1bmN0aW9uIChzKSB7XHJcbiAgICAgICAgICByZXR1cm4geyBpbmRleDogaSwgc3BsaXR0ZWQ6IHMsIGxlbmd0aDogc3BsaXR0ZWQubGVuZ3RoIH07XHJcbiAgICAgIH0pO1xyXG4gIH07XHJcbiAgQXhpc0ludGVybmFsLnByb3RvdHlwZS5zcGxpdFRpY2tUZXh0ID0gZnVuY3Rpb24gKGQsIHNjYWxlKSB7XHJcbiAgICAgIHZhciBpbnRlcm5hbCA9IHRoaXMsIHRpY2tUZXh0ID0gaW50ZXJuYWwudGV4dEZvcm1hdHRlZChkKSwgbWF4V2lkdGggPSBpbnRlcm5hbC5wYXJhbXMudGlja1dpZHRoLCBzdWJ0ZXh0LCBzcGFjZUluZGV4LCB0ZXh0V2lkdGgsIHNwbGl0dGVkID0gW107XHJcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodGlja1RleHQpID09PSAnW29iamVjdCBBcnJheV0nKSB7XHJcbiAgICAgICAgICByZXR1cm4gdGlja1RleHQ7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCFtYXhXaWR0aCB8fCBtYXhXaWR0aCA8PSAwKSB7XHJcbiAgICAgICAgICBtYXhXaWR0aCA9IGludGVybmFsLmlzVmVydGljYWwoKVxyXG4gICAgICAgICAgICAgID8gOTVcclxuICAgICAgICAgICAgICA6IGludGVybmFsLnBhcmFtcy5pc0NhdGVnb3J5XHJcbiAgICAgICAgICAgICAgICAgID8gTWF0aC5jZWlsKHNjYWxlKDEpIC0gc2NhbGUoMCkpIC0gMTJcclxuICAgICAgICAgICAgICAgICAgOiAxMTA7XHJcbiAgICAgIH1cclxuICAgICAgZnVuY3Rpb24gc3BsaXQoc3BsaXR0ZWQsIHRleHQpIHtcclxuICAgICAgICAgIHNwYWNlSW5kZXggPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IHRleHQubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICBpZiAodGV4dC5jaGFyQXQoaSkgPT09ICcgJykge1xyXG4gICAgICAgICAgICAgICAgICBzcGFjZUluZGV4ID0gaTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgc3VidGV4dCA9IHRleHQuc3Vic3RyKDAsIGkgKyAxKTtcclxuICAgICAgICAgICAgICB0ZXh0V2lkdGggPSBpbnRlcm5hbC50aWNrVGV4dENoYXJTaXplLncgKiBzdWJ0ZXh0Lmxlbmd0aDtcclxuICAgICAgICAgICAgICAvLyBpZiB0ZXh0IHdpZHRoIGdldHMgb3ZlciB0aWNrIHdpZHRoLCBzcGxpdCBieSBzcGFjZSBpbmRleCBvciBjcnJlbnQgaW5kZXhcclxuICAgICAgICAgICAgICBpZiAobWF4V2lkdGggPCB0ZXh0V2lkdGgpIHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHNwbGl0KHNwbGl0dGVkLmNvbmNhdCh0ZXh0LnN1YnN0cigwLCBzcGFjZUluZGV4ID8gc3BhY2VJbmRleCA6IGkpKSwgdGV4dC5zbGljZShzcGFjZUluZGV4ID8gc3BhY2VJbmRleCArIDEgOiBpKSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHNwbGl0dGVkLmNvbmNhdCh0ZXh0KTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gc3BsaXQoc3BsaXR0ZWQsIHRpY2tUZXh0ICsgJycpO1xyXG4gIH07XHJcbiAgQXhpc0ludGVybmFsLnByb3RvdHlwZS5lbGxpcHNpZnkgPSBmdW5jdGlvbiAoc3BsaXR0ZWQsIG1heCkge1xyXG4gICAgICBpZiAoc3BsaXR0ZWQubGVuZ3RoIDw9IG1heCkge1xyXG4gICAgICAgICAgcmV0dXJuIHNwbGl0dGVkO1xyXG4gICAgICB9XHJcbiAgICAgIHZhciBlbGxpcHNpZmllZCA9IHNwbGl0dGVkLnNsaWNlKDAsIG1heCk7XHJcbiAgICAgIHZhciByZW1haW5pbmcgPSAzO1xyXG4gICAgICBmb3IgKHZhciBpID0gbWF4IC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICAgIHZhciBhdmFpbGFibGUgPSBlbGxpcHNpZmllZFtpXS5sZW5ndGg7XHJcbiAgICAgICAgICBlbGxpcHNpZmllZFtpXSA9IGVsbGlwc2lmaWVkW2ldXHJcbiAgICAgICAgICAgICAgLnN1YnN0cigwLCBhdmFpbGFibGUgLSByZW1haW5pbmcpXHJcbiAgICAgICAgICAgICAgLnBhZEVuZChhdmFpbGFibGUsICcuJyk7XHJcbiAgICAgICAgICByZW1haW5pbmcgLT0gYXZhaWxhYmxlO1xyXG4gICAgICAgICAgaWYgKHJlbWFpbmluZyA8PSAwKSB7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGVsbGlwc2lmaWVkO1xyXG4gIH07XHJcbiAgQXhpc0ludGVybmFsLnByb3RvdHlwZS51cGRhdGVUaWNrTGVuZ3RoID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgaW50ZXJuYWwgPSB0aGlzO1xyXG4gICAgICBpbnRlcm5hbC50aWNrTGVuZ3RoID1cclxuICAgICAgICAgIE1hdGgubWF4KGludGVybmFsLmlubmVyVGlja1NpemUsIDApICsgaW50ZXJuYWwudGlja1BhZGRpbmc7XHJcbiAgfTtcclxuICBBeGlzSW50ZXJuYWwucHJvdG90eXBlLmxpbmVZMiA9IGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgIHZhciBpbnRlcm5hbCA9IHRoaXMsIHRpY2tQb3NpdGlvbiA9IGludGVybmFsLnNjYWxlKGQpICsgKGludGVybmFsLnRpY2tDZW50ZXJlZCA/IDAgOiBpbnRlcm5hbC50aWNrT2Zmc2V0KTtcclxuICAgICAgcmV0dXJuIGludGVybmFsLnJhbmdlWzBdIDwgdGlja1Bvc2l0aW9uICYmIHRpY2tQb3NpdGlvbiA8IGludGVybmFsLnJhbmdlWzFdXHJcbiAgICAgICAgICA/IGludGVybmFsLmlubmVyVGlja1NpemVcclxuICAgICAgICAgIDogMDtcclxuICB9O1xyXG4gIEF4aXNJbnRlcm5hbC5wcm90b3R5cGUudGV4dFkgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHZhciBpbnRlcm5hbCA9IHRoaXMsIHJvdGF0ZSA9IGludGVybmFsLnRpY2tUZXh0Um90YXRlO1xyXG4gICAgICByZXR1cm4gcm90YXRlXHJcbiAgICAgICAgICA/IDExLjUgLSAyLjUgKiAocm90YXRlIC8gMTUpICogKHJvdGF0ZSA+IDAgPyAxIDogLTEpXHJcbiAgICAgICAgICA6IGludGVybmFsLnRpY2tMZW5ndGg7XHJcbiAgfTtcclxuICBBeGlzSW50ZXJuYWwucHJvdG90eXBlLnRleHRUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHZhciBpbnRlcm5hbCA9IHRoaXMsIHJvdGF0ZSA9IGludGVybmFsLnRpY2tUZXh0Um90YXRlO1xyXG4gICAgICByZXR1cm4gcm90YXRlID8gJ3JvdGF0ZSgnICsgcm90YXRlICsgJyknIDogJyc7XHJcbiAgfTtcclxuICBBeGlzSW50ZXJuYWwucHJvdG90eXBlLnRleHRUZXh0QW5jaG9yID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgaW50ZXJuYWwgPSB0aGlzLCByb3RhdGUgPSBpbnRlcm5hbC50aWNrVGV4dFJvdGF0ZTtcclxuICAgICAgcmV0dXJuIHJvdGF0ZSA/IChyb3RhdGUgPiAwID8gJ3N0YXJ0JyA6ICdlbmQnKSA6ICdtaWRkbGUnO1xyXG4gIH07XHJcbiAgQXhpc0ludGVybmFsLnByb3RvdHlwZS50c3BhbkR4ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgaW50ZXJuYWwgPSB0aGlzLCByb3RhdGUgPSBpbnRlcm5hbC50aWNrVGV4dFJvdGF0ZTtcclxuICAgICAgcmV0dXJuIHJvdGF0ZSA/IDggKiBNYXRoLnNpbihNYXRoLlBJICogKHJvdGF0ZSAvIDE4MCkpIDogMDtcclxuICB9O1xyXG4gIEF4aXNJbnRlcm5hbC5wcm90b3R5cGUudHNwYW5EeSA9IGZ1bmN0aW9uIChkLCBpKSB7XHJcbiAgICAgIHZhciBpbnRlcm5hbCA9IHRoaXMsIGR5ID0gaW50ZXJuYWwudGlja1RleHRDaGFyU2l6ZS5oO1xyXG4gICAgICBpZiAoaSA9PT0gMCkge1xyXG4gICAgICAgICAgaWYgKGludGVybmFsLmlzVmVydGljYWwoKSkge1xyXG4gICAgICAgICAgICAgIGR5ID0gLSgoZC5sZW5ndGggLSAxKSAqIChpbnRlcm5hbC50aWNrVGV4dENoYXJTaXplLmggLyAyKSAtIDMpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgZHkgPSAnLjcxZW0nO1xyXG4gICAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBkeTtcclxuICB9O1xyXG4gIEF4aXNJbnRlcm5hbC5wcm90b3R5cGUuZ2VuZXJhdGVBeGlzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgaW50ZXJuYWwgPSB0aGlzLCBkMyA9IGludGVybmFsLmQzLCBwYXJhbXMgPSBpbnRlcm5hbC5wYXJhbXM7XHJcbiAgICAgIGZ1bmN0aW9uIGF4aXMoZywgdHJhbnNpdGlvbikge1xyXG4gICAgICAgICAgdmFyIHNlbGY7XHJcbiAgICAgICAgICBnLmVhY2goZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgIHZhciBnID0gKGF4aXMuZyA9IGQzLnNlbGVjdCh0aGlzKSk7XHJcbiAgICAgICAgICAgICAgdmFyIHNjYWxlMCA9IHRoaXMuX19jaGFydF9fIHx8IGludGVybmFsLnNjYWxlLCBzY2FsZTEgPSAodGhpcy5fX2NoYXJ0X18gPSBpbnRlcm5hbC5jb3B5U2NhbGUoKSk7XHJcbiAgICAgICAgICAgICAgdmFyIHRpY2tzVmFsdWVzID0gaW50ZXJuYWwudGlja1ZhbHVlc1xyXG4gICAgICAgICAgICAgICAgICA/IGludGVybmFsLnRpY2tWYWx1ZXNcclxuICAgICAgICAgICAgICAgICAgOiBpbnRlcm5hbC5nZW5lcmF0ZVRpY2tzKHNjYWxlMSksIHRpY2tzID0gZy5zZWxlY3RBbGwoJy50aWNrJykuZGF0YSh0aWNrc1ZhbHVlcywgc2NhbGUxKSwgdGlja0VudGVyID0gdGlja3NcclxuICAgICAgICAgICAgICAgICAgLmVudGVyKClcclxuICAgICAgICAgICAgICAgICAgLmluc2VydCgnZycsICcuZG9tYWluJylcclxuICAgICAgICAgICAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ3RpY2snKVxyXG4gICAgICAgICAgICAgICAgICAuc3R5bGUoJ29wYWNpdHknLCAxZS02KSwgXHJcbiAgICAgICAgICAgICAgLy8gTUVNTzogTm8gZXhpdCB0cmFuc2l0aW9uLiBUaGUgcmVhc29uIGlzIHRoaXMgdHJhbnNpdGlvbiBhZmZlY3RzIG1heCB0aWNrIHdpZHRoIGNhbGN1bGF0aW9uIGJlY2F1c2Ugb2xkIHRpY2sgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgdGlja3MuXHJcbiAgICAgICAgICAgICAgdGlja0V4aXQgPSB0aWNrcy5leGl0KCkucmVtb3ZlKCksIHRpY2tVcGRhdGUgPSB0aWNrcy5tZXJnZSh0aWNrRW50ZXIpLCB0aWNrVHJhbnNmb3JtLCB0aWNrWCwgdGlja1k7XHJcbiAgICAgICAgICAgICAgaWYgKHBhcmFtcy5pc0NhdGVnb3J5KSB7XHJcbiAgICAgICAgICAgICAgICAgIGludGVybmFsLnRpY2tPZmZzZXQgPSBNYXRoLmNlaWwoKHNjYWxlMSgxKSAtIHNjYWxlMSgwKSkgLyAyKTtcclxuICAgICAgICAgICAgICAgICAgdGlja1ggPSBpbnRlcm5hbC50aWNrQ2VudGVyZWQgPyAwIDogaW50ZXJuYWwudGlja09mZnNldDtcclxuICAgICAgICAgICAgICAgICAgdGlja1kgPSBpbnRlcm5hbC50aWNrQ2VudGVyZWQgPyBpbnRlcm5hbC50aWNrT2Zmc2V0IDogMDtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIGludGVybmFsLnRpY2tPZmZzZXQgPSB0aWNrWCA9IDA7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGludGVybmFsLnVwZGF0ZVJhbmdlKCk7XHJcbiAgICAgICAgICAgICAgaW50ZXJuYWwudXBkYXRlVGlja0xlbmd0aCgpO1xyXG4gICAgICAgICAgICAgIGludGVybmFsLnVwZGF0ZVRpY2tUZXh0Q2hhclNpemUoZy5zZWxlY3QoJy50aWNrJykpO1xyXG4gICAgICAgICAgICAgIHZhciBsaW5lVXBkYXRlID0gdGlja1VwZGF0ZVxyXG4gICAgICAgICAgICAgICAgICAuc2VsZWN0KCdsaW5lJylcclxuICAgICAgICAgICAgICAgICAgLm1lcmdlKHRpY2tFbnRlci5hcHBlbmQoJ2xpbmUnKSksIHRleHRVcGRhdGUgPSB0aWNrVXBkYXRlLnNlbGVjdCgndGV4dCcpLm1lcmdlKHRpY2tFbnRlci5hcHBlbmQoJ3RleHQnKSk7XHJcbiAgICAgICAgICAgICAgdmFyIHRzcGFucyA9IHRpY2tVcGRhdGVcclxuICAgICAgICAgICAgICAgICAgLnNlbGVjdEFsbCgndGV4dCcpXHJcbiAgICAgICAgICAgICAgICAgIC5zZWxlY3RBbGwoJ3RzcGFuJylcclxuICAgICAgICAgICAgICAgICAgLmRhdGEoZnVuY3Rpb24gKGQsIGkpIHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGludGVybmFsLnRzcGFuRGF0YShkLCBpLCBzY2FsZTEpO1xyXG4gICAgICAgICAgICAgIH0pLCB0c3BhbkVudGVyID0gdHNwYW5zLmVudGVyKCkuYXBwZW5kKCd0c3BhbicpLCB0c3BhblVwZGF0ZSA9IHRzcGFuRW50ZXIubWVyZ2UodHNwYW5zKS50ZXh0KGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiBkLnNwbGl0dGVkO1xyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIHRzcGFucy5leGl0KCkucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgICAgdmFyIHBhdGggPSBnLnNlbGVjdEFsbCgnLmRvbWFpbicpLmRhdGEoWzBdKSwgcGF0aFVwZGF0ZSA9IHBhdGhcclxuICAgICAgICAgICAgICAgICAgLmVudGVyKClcclxuICAgICAgICAgICAgICAgICAgLmFwcGVuZCgncGF0aCcpXHJcbiAgICAgICAgICAgICAgICAgIC5tZXJnZShwYXRoKVxyXG4gICAgICAgICAgICAgICAgICAuYXR0cignY2xhc3MnLCAnZG9tYWluJyk7XHJcbiAgICAgICAgICAgICAgLy8gVE9ETzogZWFjaCBhdHRyIHNob3VsZCBiZSBvbmUgZnVuY3Rpb24gYW5kIGNoYW5nZSBpdHMgYmVoYXZpb3IgYnkgaW50ZXJuYWwub3JpZW50LCBwcm9iYWJseVxyXG4gICAgICAgICAgICAgIHN3aXRjaCAoaW50ZXJuYWwub3JpZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgIGNhc2UgJ2JvdHRvbSc6IHtcclxuICAgICAgICAgICAgICAgICAgICAgIHRpY2tUcmFuc2Zvcm0gPSBpbnRlcm5hbC5heGlzWDtcclxuICAgICAgICAgICAgICAgICAgICAgIGxpbmVVcGRhdGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAuYXR0cigneDEnLCB0aWNrWClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAuYXR0cigneDInLCB0aWNrWClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAuYXR0cigneTInLCBmdW5jdGlvbiAoZCwgaSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbC5saW5lWTIoZCwgaSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgIHRleHRVcGRhdGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAuYXR0cigneCcsIDApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ3knLCBmdW5jdGlvbiAoZCwgaSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbC50ZXh0WShkLCBpKTtcclxuICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIGZ1bmN0aW9uIChkLCBpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGludGVybmFsLnRleHRUcmFuc2Zvcm0oZCwgaSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5zdHlsZSgndGV4dC1hbmNob3InLCBmdW5jdGlvbiAoZCwgaSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbC50ZXh0VGV4dEFuY2hvcihkLCBpKTtcclxuICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgdHNwYW5VcGRhdGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAuYXR0cigneCcsIDApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ2R5JywgZnVuY3Rpb24gKGQsIGkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWwudHNwYW5EeShkLCBpKTtcclxuICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ2R4JywgZnVuY3Rpb24gKGQsIGkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWwudHNwYW5EeChkLCBpKTtcclxuICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgcGF0aFVwZGF0ZS5hdHRyKCdkJywgJ00nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbC5yYW5nZVswXSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJywnICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbC5vdXRlclRpY2tTaXplICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAnVjBIJyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWwucmFuZ2VbMV0gK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdWJyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWwub3V0ZXJUaWNrU2l6ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBjYXNlICd0b3AnOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiByb3RhdGVkIHRpY2sgdGV4dFxyXG4gICAgICAgICAgICAgICAgICAgICAgdGlja1RyYW5zZm9ybSA9IGludGVybmFsLmF4aXNYO1xyXG4gICAgICAgICAgICAgICAgICAgICAgbGluZVVwZGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5hdHRyKCd4MScsIHRpY2tYKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5hdHRyKCd4MicsIHRpY2tYKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5hdHRyKCd5MicsIGZ1bmN0aW9uIChkLCBpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xICogaW50ZXJuYWwubGluZVkyKGQsIGkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0ZXh0VXBkYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ3gnLCAwKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5hdHRyKCd5JywgZnVuY3Rpb24gKGQsIGkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKC0xICogaW50ZXJuYWwudGV4dFkoZCwgaSkgLVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGFyYW1zLmlzQ2F0ZWdvcnkgPyAyIDogaW50ZXJuYWwudGlja0xlbmd0aCAtIDIpKTtcclxuICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIGZ1bmN0aW9uIChkLCBpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGludGVybmFsLnRleHRUcmFuc2Zvcm0oZCwgaSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5zdHlsZSgndGV4dC1hbmNob3InLCBmdW5jdGlvbiAoZCwgaSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbC50ZXh0VGV4dEFuY2hvcihkLCBpKTtcclxuICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgdHNwYW5VcGRhdGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAuYXR0cigneCcsIDApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ2R5JywgZnVuY3Rpb24gKGQsIGkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWwudHNwYW5EeShkLCBpKTtcclxuICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ2R4JywgZnVuY3Rpb24gKGQsIGkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWwudHNwYW5EeChkLCBpKTtcclxuICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgcGF0aFVwZGF0ZS5hdHRyKCdkJywgJ00nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbC5yYW5nZVswXSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJywnICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAtaW50ZXJuYWwub3V0ZXJUaWNrU2l6ZSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ1YwSCcgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGludGVybmFsLnJhbmdlWzFdICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAnVicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC1pbnRlcm5hbC5vdXRlclRpY2tTaXplKTtcclxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGNhc2UgJ2xlZnQnOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aWNrVHJhbnNmb3JtID0gaW50ZXJuYWwuYXhpc1k7XHJcbiAgICAgICAgICAgICAgICAgICAgICBsaW5lVXBkYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ3gyJywgLWludGVybmFsLmlubmVyVGlja1NpemUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ3kxJywgdGlja1kpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ3kyJywgdGlja1kpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGV4dFVwZGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5hdHRyKCd4JywgLWludGVybmFsLnRpY2tMZW5ndGgpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ3knLCBpbnRlcm5hbC50aWNrT2Zmc2V0KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5zdHlsZSgndGV4dC1hbmNob3InLCAnZW5kJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0c3BhblVwZGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5hdHRyKCd4JywgLWludGVybmFsLnRpY2tMZW5ndGgpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ2R5JywgZnVuY3Rpb24gKGQsIGkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWwudHNwYW5EeShkLCBpKTtcclxuICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgcGF0aFVwZGF0ZS5hdHRyKCdkJywgJ00nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAtaW50ZXJuYWwub3V0ZXJUaWNrU2l6ZSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJywnICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbC5yYW5nZVswXSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ0gwVicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGludGVybmFsLnJhbmdlWzFdICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAnSCcgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC1pbnRlcm5hbC5vdXRlclRpY2tTaXplKTtcclxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGNhc2UgJ3JpZ2h0Jzoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGlja1RyYW5zZm9ybSA9IGludGVybmFsLmF4aXNZO1xyXG4gICAgICAgICAgICAgICAgICAgICAgbGluZVVwZGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5hdHRyKCd4MicsIGludGVybmFsLmlubmVyVGlja1NpemUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ3kxJywgdGlja1kpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ3kyJywgdGlja1kpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGV4dFVwZGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5hdHRyKCd4JywgaW50ZXJuYWwudGlja0xlbmd0aClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAuYXR0cigneScsIGludGVybmFsLnRpY2tPZmZzZXQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLnN0eWxlKCd0ZXh0LWFuY2hvcicsICdzdGFydCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgdHNwYW5VcGRhdGUuYXR0cigneCcsIGludGVybmFsLnRpY2tMZW5ndGgpLmF0dHIoJ2R5JywgZnVuY3Rpb24gKGQsIGkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWwudHNwYW5EeShkLCBpKTtcclxuICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgcGF0aFVwZGF0ZS5hdHRyKCdkJywgJ00nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbC5vdXRlclRpY2tTaXplICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAnLCcgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGludGVybmFsLnJhbmdlWzBdICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAnSDBWJyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWwucmFuZ2VbMV0gK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdIJyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWwub3V0ZXJUaWNrU2l6ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAoc2NhbGUxLnJhbmdlQmFuZCkge1xyXG4gICAgICAgICAgICAgICAgICB2YXIgeCA9IHNjYWxlMSwgZHggPSB4LnJhbmdlQmFuZCgpIC8gMjtcclxuICAgICAgICAgICAgICAgICAgc2NhbGUwID0gc2NhbGUxID0gZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB4KGQpICsgZHg7XHJcbiAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2UgaWYgKHNjYWxlMC5yYW5nZUJhbmQpIHtcclxuICAgICAgICAgICAgICAgICAgc2NhbGUwID0gc2NhbGUxO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgdGlja0V4aXQuY2FsbCh0aWNrVHJhbnNmb3JtLCBzY2FsZTEsIGludGVybmFsLnRpY2tPZmZzZXQpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB0aWNrRW50ZXIuY2FsbCh0aWNrVHJhbnNmb3JtLCBzY2FsZTAsIGludGVybmFsLnRpY2tPZmZzZXQpO1xyXG4gICAgICAgICAgICAgIHNlbGYgPSAodHJhbnNpdGlvbiA/IHRpY2tVcGRhdGUudHJhbnNpdGlvbih0cmFuc2l0aW9uKSA6IHRpY2tVcGRhdGUpXHJcbiAgICAgICAgICAgICAgICAgIC5zdHlsZSgnb3BhY2l0eScsIDEpXHJcbiAgICAgICAgICAgICAgICAgIC5jYWxsKHRpY2tUcmFuc2Zvcm0sIHNjYWxlMSwgaW50ZXJuYWwudGlja09mZnNldCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHJldHVybiBzZWxmO1xyXG4gICAgICB9XHJcbiAgICAgIGF4aXMuc2NhbGUgPSBmdW5jdGlvbiAoeCkge1xyXG4gICAgICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGludGVybmFsLnNjYWxlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaW50ZXJuYWwuc2NhbGUgPSB4O1xyXG4gICAgICAgICAgcmV0dXJuIGF4aXM7XHJcbiAgICAgIH07XHJcbiAgICAgIGF4aXMub3JpZW50ID0gZnVuY3Rpb24gKHgpIHtcclxuICAgICAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbC5vcmllbnQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpbnRlcm5hbC5vcmllbnQgPVxyXG4gICAgICAgICAgICAgIHggaW4geyB0b3A6IDEsIHJpZ2h0OiAxLCBib3R0b206IDEsIGxlZnQ6IDEgfSA/IHggKyAnJyA6ICdib3R0b20nO1xyXG4gICAgICAgICAgcmV0dXJuIGF4aXM7XHJcbiAgICAgIH07XHJcbiAgICAgIGF4aXMudGlja0Zvcm1hdCA9IGZ1bmN0aW9uIChmb3JtYXQpIHtcclxuICAgICAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbC50aWNrRm9ybWF0O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaW50ZXJuYWwudGlja0Zvcm1hdCA9IGZvcm1hdDtcclxuICAgICAgICAgIHJldHVybiBheGlzO1xyXG4gICAgICB9O1xyXG4gICAgICBheGlzLnRpY2tDZW50ZXJlZCA9IGZ1bmN0aW9uIChpc0NlbnRlcmVkKSB7XHJcbiAgICAgICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWwudGlja0NlbnRlcmVkO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaW50ZXJuYWwudGlja0NlbnRlcmVkID0gaXNDZW50ZXJlZDtcclxuICAgICAgICAgIHJldHVybiBheGlzO1xyXG4gICAgICB9O1xyXG4gICAgICBheGlzLnRpY2tPZmZzZXQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICByZXR1cm4gaW50ZXJuYWwudGlja09mZnNldDtcclxuICAgICAgfTtcclxuICAgICAgYXhpcy50aWNrSW50ZXJ2YWwgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICB2YXIgaW50ZXJ2YWwsIGxlbmd0aDtcclxuICAgICAgICAgIGlmIChwYXJhbXMuaXNDYXRlZ29yeSkge1xyXG4gICAgICAgICAgICAgIGludGVydmFsID0gaW50ZXJuYWwudGlja09mZnNldCAqIDI7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICBsZW5ndGggPVxyXG4gICAgICAgICAgICAgICAgICBheGlzLmdcclxuICAgICAgICAgICAgICAgICAgICAgIC5zZWxlY3QoJ3BhdGguZG9tYWluJylcclxuICAgICAgICAgICAgICAgICAgICAgIC5ub2RlKClcclxuICAgICAgICAgICAgICAgICAgICAgIC5nZXRUb3RhbExlbmd0aCgpIC1cclxuICAgICAgICAgICAgICAgICAgICAgIGludGVybmFsLm91dGVyVGlja1NpemUgKiAyO1xyXG4gICAgICAgICAgICAgIGludGVydmFsID0gbGVuZ3RoIC8gYXhpcy5nLnNlbGVjdEFsbCgnbGluZScpLnNpemUoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBpbnRlcnZhbCA9PT0gSW5maW5pdHkgPyAwIDogaW50ZXJ2YWw7XHJcbiAgICAgIH07XHJcbiAgICAgIGF4aXMudGlja3MgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWwudGlja0FyZ3VtZW50cztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGludGVybmFsLnRpY2tBcmd1bWVudHMgPSBhcmd1bWVudHM7XHJcbiAgICAgICAgICByZXR1cm4gYXhpcztcclxuICAgICAgfTtcclxuICAgICAgYXhpcy50aWNrQ3VsbGluZyA9IGZ1bmN0aW9uIChjdWxsaW5nKSB7XHJcbiAgICAgICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWwudGlja0N1bGxpbmc7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpbnRlcm5hbC50aWNrQ3VsbGluZyA9IGN1bGxpbmc7XHJcbiAgICAgICAgICByZXR1cm4gYXhpcztcclxuICAgICAgfTtcclxuICAgICAgYXhpcy50aWNrVmFsdWVzID0gZnVuY3Rpb24gKHgpIHtcclxuICAgICAgICAgIGlmICh0eXBlb2YgeCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgIGludGVybmFsLnRpY2tWYWx1ZXMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiB4KGludGVybmFsLnNjYWxlLmRvbWFpbigpKTtcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbC50aWNrVmFsdWVzO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpbnRlcm5hbC50aWNrVmFsdWVzID0geDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBheGlzO1xyXG4gICAgICB9O1xyXG4gICAgICByZXR1cm4gYXhpcztcclxuICB9O1xuXG4gIHZhciBDTEFTUyA9IHtcclxuICAgICAgdGFyZ2V0OiAnYzMtdGFyZ2V0JyxcclxuICAgICAgY2hhcnQ6ICdjMy1jaGFydCcsXHJcbiAgICAgIGNoYXJ0TGluZTogJ2MzLWNoYXJ0LWxpbmUnLFxyXG4gICAgICBjaGFydExpbmVzOiAnYzMtY2hhcnQtbGluZXMnLFxyXG4gICAgICBjaGFydEJhcjogJ2MzLWNoYXJ0LWJhcicsXHJcbiAgICAgIGNoYXJ0QmFyczogJ2MzLWNoYXJ0LWJhcnMnLFxyXG4gICAgICBjaGFydFRleHQ6ICdjMy1jaGFydC10ZXh0JyxcclxuICAgICAgY2hhcnRUZXh0czogJ2MzLWNoYXJ0LXRleHRzJyxcclxuICAgICAgY2hhcnRBcmM6ICdjMy1jaGFydC1hcmMnLFxyXG4gICAgICBjaGFydEFyY3M6ICdjMy1jaGFydC1hcmNzJyxcclxuICAgICAgY2hhcnRBcmNzVGl0bGU6ICdjMy1jaGFydC1hcmNzLXRpdGxlJyxcclxuICAgICAgY2hhcnRBcmNzQmFja2dyb3VuZDogJ2MzLWNoYXJ0LWFyY3MtYmFja2dyb3VuZCcsXHJcbiAgICAgIGNoYXJ0QXJjc0dhdWdlVW5pdDogJ2MzLWNoYXJ0LWFyY3MtZ2F1Z2UtdW5pdCcsXHJcbiAgICAgIGNoYXJ0QXJjc0dhdWdlTWF4OiAnYzMtY2hhcnQtYXJjcy1nYXVnZS1tYXgnLFxyXG4gICAgICBjaGFydEFyY3NHYXVnZU1pbjogJ2MzLWNoYXJ0LWFyY3MtZ2F1Z2UtbWluJyxcclxuICAgICAgc2VsZWN0ZWRDaXJjbGU6ICdjMy1zZWxlY3RlZC1jaXJjbGUnLFxyXG4gICAgICBzZWxlY3RlZENpcmNsZXM6ICdjMy1zZWxlY3RlZC1jaXJjbGVzJyxcclxuICAgICAgZXZlbnRSZWN0OiAnYzMtZXZlbnQtcmVjdCcsXHJcbiAgICAgIGV2ZW50UmVjdHM6ICdjMy1ldmVudC1yZWN0cycsXHJcbiAgICAgIGV2ZW50UmVjdHNTaW5nbGU6ICdjMy1ldmVudC1yZWN0cy1zaW5nbGUnLFxyXG4gICAgICBldmVudFJlY3RzTXVsdGlwbGU6ICdjMy1ldmVudC1yZWN0cy1tdWx0aXBsZScsXHJcbiAgICAgIHpvb21SZWN0OiAnYzMtem9vbS1yZWN0JyxcclxuICAgICAgYnJ1c2g6ICdjMy1icnVzaCcsXHJcbiAgICAgIGRyYWdab29tOiAnYzMtZHJhZy16b29tJyxcclxuICAgICAgZm9jdXNlZDogJ2MzLWZvY3VzZWQnLFxyXG4gICAgICBkZWZvY3VzZWQ6ICdjMy1kZWZvY3VzZWQnLFxyXG4gICAgICByZWdpb246ICdjMy1yZWdpb24nLFxyXG4gICAgICByZWdpb25zOiAnYzMtcmVnaW9ucycsXHJcbiAgICAgIHRpdGxlOiAnYzMtdGl0bGUnLFxyXG4gICAgICB0b29sdGlwQ29udGFpbmVyOiAnYzMtdG9vbHRpcC1jb250YWluZXInLFxyXG4gICAgICB0b29sdGlwOiAnYzMtdG9vbHRpcCcsXHJcbiAgICAgIHRvb2x0aXBOYW1lOiAnYzMtdG9vbHRpcC1uYW1lJyxcclxuICAgICAgc2hhcGU6ICdjMy1zaGFwZScsXHJcbiAgICAgIHNoYXBlczogJ2MzLXNoYXBlcycsXHJcbiAgICAgIGxpbmU6ICdjMy1saW5lJyxcclxuICAgICAgbGluZXM6ICdjMy1saW5lcycsXHJcbiAgICAgIGJhcjogJ2MzLWJhcicsXHJcbiAgICAgIGJhcnM6ICdjMy1iYXJzJyxcclxuICAgICAgY2lyY2xlOiAnYzMtY2lyY2xlJyxcclxuICAgICAgY2lyY2xlczogJ2MzLWNpcmNsZXMnLFxyXG4gICAgICBhcmM6ICdjMy1hcmMnLFxyXG4gICAgICBhcmNMYWJlbExpbmU6ICdjMy1hcmMtbGFiZWwtbGluZScsXHJcbiAgICAgIGFyY3M6ICdjMy1hcmNzJyxcclxuICAgICAgYXJlYTogJ2MzLWFyZWEnLFxyXG4gICAgICBhcmVhczogJ2MzLWFyZWFzJyxcclxuICAgICAgZW1wdHk6ICdjMy1lbXB0eScsXHJcbiAgICAgIHRleHQ6ICdjMy10ZXh0JyxcclxuICAgICAgdGV4dHM6ICdjMy10ZXh0cycsXHJcbiAgICAgIGdhdWdlVmFsdWU6ICdjMy1nYXVnZS12YWx1ZScsXHJcbiAgICAgIGdyaWQ6ICdjMy1ncmlkJyxcclxuICAgICAgZ3JpZExpbmVzOiAnYzMtZ3JpZC1saW5lcycsXHJcbiAgICAgIHhncmlkOiAnYzMteGdyaWQnLFxyXG4gICAgICB4Z3JpZHM6ICdjMy14Z3JpZHMnLFxyXG4gICAgICB4Z3JpZExpbmU6ICdjMy14Z3JpZC1saW5lJyxcclxuICAgICAgeGdyaWRMaW5lczogJ2MzLXhncmlkLWxpbmVzJyxcclxuICAgICAgeGdyaWRGb2N1czogJ2MzLXhncmlkLWZvY3VzJyxcclxuICAgICAgeWdyaWQ6ICdjMy15Z3JpZCcsXHJcbiAgICAgIHlncmlkczogJ2MzLXlncmlkcycsXHJcbiAgICAgIHlncmlkTGluZTogJ2MzLXlncmlkLWxpbmUnLFxyXG4gICAgICB5Z3JpZExpbmVzOiAnYzMteWdyaWQtbGluZXMnLFxyXG4gICAgICBjb2xvclNjYWxlOiAnYzMtY29sb3JzY2FsZScsXHJcbiAgICAgIHN0YW5mb3JkRWxlbWVudHM6ICdjMy1zdGFuZm9yZC1lbGVtZW50cycsXHJcbiAgICAgIHN0YW5mb3JkTGluZTogJ2MzLXN0YW5mb3JkLWxpbmUnLFxyXG4gICAgICBzdGFuZm9yZExpbmVzOiAnYzMtc3RhbmZvcmQtbGluZXMnLFxyXG4gICAgICBzdGFuZm9yZFJlZ2lvbjogJ2MzLXN0YW5mb3JkLXJlZ2lvbicsXHJcbiAgICAgIHN0YW5mb3JkUmVnaW9uczogJ2MzLXN0YW5mb3JkLXJlZ2lvbnMnLFxyXG4gICAgICBzdGFuZm9yZFRleHQ6ICdjMy1zdGFuZm9yZC10ZXh0JyxcclxuICAgICAgc3RhbmZvcmRUZXh0czogJ2MzLXN0YW5mb3JkLXRleHRzJyxcclxuICAgICAgYXhpczogJ2MzLWF4aXMnLFxyXG4gICAgICBheGlzWDogJ2MzLWF4aXMteCcsXHJcbiAgICAgIGF4aXNYTGFiZWw6ICdjMy1heGlzLXgtbGFiZWwnLFxyXG4gICAgICBheGlzWTogJ2MzLWF4aXMteScsXHJcbiAgICAgIGF4aXNZTGFiZWw6ICdjMy1heGlzLXktbGFiZWwnLFxyXG4gICAgICBheGlzWTI6ICdjMy1heGlzLXkyJyxcclxuICAgICAgYXhpc1kyTGFiZWw6ICdjMy1heGlzLXkyLWxhYmVsJyxcclxuICAgICAgbGVnZW5kQmFja2dyb3VuZDogJ2MzLWxlZ2VuZC1iYWNrZ3JvdW5kJyxcclxuICAgICAgbGVnZW5kSXRlbTogJ2MzLWxlZ2VuZC1pdGVtJyxcclxuICAgICAgbGVnZW5kSXRlbUV2ZW50OiAnYzMtbGVnZW5kLWl0ZW0tZXZlbnQnLFxyXG4gICAgICBsZWdlbmRJdGVtVGlsZTogJ2MzLWxlZ2VuZC1pdGVtLXRpbGUnLFxyXG4gICAgICBsZWdlbmRJdGVtSGlkZGVuOiAnYzMtbGVnZW5kLWl0ZW0taGlkZGVuJyxcclxuICAgICAgbGVnZW5kSXRlbUZvY3VzZWQ6ICdjMy1sZWdlbmQtaXRlbS1mb2N1c2VkJyxcclxuICAgICAgZHJhZ2FyZWE6ICdjMy1kcmFnYXJlYScsXHJcbiAgICAgIEVYUEFOREVEOiAnX2V4cGFuZGVkXycsXHJcbiAgICAgIFNFTEVDVEVEOiAnX3NlbGVjdGVkXycsXHJcbiAgICAgIElOQ0xVREVEOiAnX2luY2x1ZGVkXydcclxuICB9O1xuXG4gIHZhciBBeGlzQ2xhc3MgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICAgIGZ1bmN0aW9uIEF4aXNDbGFzcyhvd25lcikge1xyXG4gICAgICAgICAgdGhpcy5vd25lciA9IG93bmVyO1xyXG4gICAgICAgICAgdGhpcy5kMyA9IG93bmVyLmQzO1xyXG4gICAgICAgICAgdGhpcy5pbnRlcm5hbCA9IEF4aXNJbnRlcm5hbDtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gQXhpc0NsYXNzO1xyXG4gIH0oKSk7XHJcbiAgdmFyIEF4aXMgPSBBeGlzQ2xhc3M7XHJcbiAgQXhpcy5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uIGluaXQoKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXMub3duZXIsIGNvbmZpZyA9ICQkLmNvbmZpZywgbWFpbiA9ICQkLm1haW47XHJcbiAgICAgICQkLmF4ZXMueCA9IG1haW5cclxuICAgICAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAgICAgLmF0dHIoJ2NsYXNzJywgQ0xBU1MuYXhpcyArICcgJyArIENMQVNTLmF4aXNYKVxyXG4gICAgICAgICAgLmF0dHIoJ2NsaXAtcGF0aCcsIGNvbmZpZy5heGlzX3hfaW5uZXIgPyAnJyA6ICQkLmNsaXBQYXRoRm9yWEF4aXMpXHJcbiAgICAgICAgICAuYXR0cigndHJhbnNmb3JtJywgJCQuZ2V0VHJhbnNsYXRlKCd4JykpXHJcbiAgICAgICAgICAuc3R5bGUoJ3Zpc2liaWxpdHknLCBjb25maWcuYXhpc194X3Nob3cgPyAndmlzaWJsZScgOiAnaGlkZGVuJyk7XHJcbiAgICAgICQkLmF4ZXMueFxyXG4gICAgICAgICAgLmFwcGVuZCgndGV4dCcpXHJcbiAgICAgICAgICAuYXR0cignY2xhc3MnLCBDTEFTUy5heGlzWExhYmVsKVxyXG4gICAgICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIGNvbmZpZy5heGlzX3JvdGF0ZWQgPyAncm90YXRlKC05MCknIDogJycpXHJcbiAgICAgICAgICAuc3R5bGUoJ3RleHQtYW5jaG9yJywgdGhpcy50ZXh0QW5jaG9yRm9yWEF4aXNMYWJlbC5iaW5kKHRoaXMpKTtcclxuICAgICAgJCQuYXhlcy55ID0gbWFpblxyXG4gICAgICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgICAgICAuYXR0cignY2xhc3MnLCBDTEFTUy5heGlzICsgJyAnICsgQ0xBU1MuYXhpc1kpXHJcbiAgICAgICAgICAuYXR0cignY2xpcC1wYXRoJywgY29uZmlnLmF4aXNfeV9pbm5lciA/ICcnIDogJCQuY2xpcFBhdGhGb3JZQXhpcylcclxuICAgICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAkJC5nZXRUcmFuc2xhdGUoJ3knKSlcclxuICAgICAgICAgIC5zdHlsZSgndmlzaWJpbGl0eScsIGNvbmZpZy5heGlzX3lfc2hvdyA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nKTtcclxuICAgICAgJCQuYXhlcy55XHJcbiAgICAgICAgICAuYXBwZW5kKCd0ZXh0JylcclxuICAgICAgICAgIC5hdHRyKCdjbGFzcycsIENMQVNTLmF4aXNZTGFiZWwpXHJcbiAgICAgICAgICAuYXR0cigndHJhbnNmb3JtJywgY29uZmlnLmF4aXNfcm90YXRlZCA/ICcnIDogJ3JvdGF0ZSgtOTApJylcclxuICAgICAgICAgIC5zdHlsZSgndGV4dC1hbmNob3InLCB0aGlzLnRleHRBbmNob3JGb3JZQXhpc0xhYmVsLmJpbmQodGhpcykpO1xyXG4gICAgICAkJC5heGVzLnkyID0gbWFpblxyXG4gICAgICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgICAgICAuYXR0cignY2xhc3MnLCBDTEFTUy5heGlzICsgJyAnICsgQ0xBU1MuYXhpc1kyKVxyXG4gICAgICAgICAgLy8gY2xpcC1wYXRoP1xyXG4gICAgICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsICQkLmdldFRyYW5zbGF0ZSgneTInKSlcclxuICAgICAgICAgIC5zdHlsZSgndmlzaWJpbGl0eScsIGNvbmZpZy5heGlzX3kyX3Nob3cgPyAndmlzaWJsZScgOiAnaGlkZGVuJyk7XHJcbiAgICAgICQkLmF4ZXMueTJcclxuICAgICAgICAgIC5hcHBlbmQoJ3RleHQnKVxyXG4gICAgICAgICAgLmF0dHIoJ2NsYXNzJywgQ0xBU1MuYXhpc1kyTGFiZWwpXHJcbiAgICAgICAgICAuYXR0cigndHJhbnNmb3JtJywgY29uZmlnLmF4aXNfcm90YXRlZCA/ICcnIDogJ3JvdGF0ZSgtOTApJylcclxuICAgICAgICAgIC5zdHlsZSgndGV4dC1hbmNob3InLCB0aGlzLnRleHRBbmNob3JGb3JZMkF4aXNMYWJlbC5iaW5kKHRoaXMpKTtcclxuICB9O1xyXG4gIEF4aXMucHJvdG90eXBlLmdldFhBeGlzID0gZnVuY3Rpb24gZ2V0WEF4aXMoc2NhbGUsIG9yaWVudCwgdGlja0Zvcm1hdCwgdGlja1ZhbHVlcywgd2l0aE91dGVyVGljaywgd2l0aG91dFRyYW5zaXRpb24sIHdpdGhvdXRSb3RhdGVUaWNrVGV4dCkge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzLm93bmVyLCBjb25maWcgPSAkJC5jb25maWcsIGF4aXNQYXJhbXMgPSB7XHJcbiAgICAgICAgICBpc0NhdGVnb3J5OiAkJC5pc0NhdGVnb3JpemVkKCksXHJcbiAgICAgICAgICB3aXRoT3V0ZXJUaWNrOiB3aXRoT3V0ZXJUaWNrLFxyXG4gICAgICAgICAgdGlja011bHRpbGluZTogY29uZmlnLmF4aXNfeF90aWNrX211bHRpbGluZSxcclxuICAgICAgICAgIHRpY2tNdWx0aWxpbmVNYXg6IGNvbmZpZy5heGlzX3hfdGlja19tdWx0aWxpbmVcclxuICAgICAgICAgICAgICA/IE51bWJlcihjb25maWcuYXhpc194X3RpY2tfbXVsdGlsaW5lTWF4KVxyXG4gICAgICAgICAgICAgIDogMCxcclxuICAgICAgICAgIHRpY2tXaWR0aDogY29uZmlnLmF4aXNfeF90aWNrX3dpZHRoLFxyXG4gICAgICAgICAgdGlja1RleHRSb3RhdGU6IHdpdGhvdXRSb3RhdGVUaWNrVGV4dCA/IDAgOiBjb25maWcuYXhpc194X3RpY2tfcm90YXRlLFxyXG4gICAgICAgICAgd2l0aG91dFRyYW5zaXRpb246IHdpdGhvdXRUcmFuc2l0aW9uXHJcbiAgICAgIH0sIGF4aXMgPSBuZXcgdGhpcy5pbnRlcm5hbCh0aGlzLCBheGlzUGFyYW1zKS5heGlzLnNjYWxlKHNjYWxlKS5vcmllbnQob3JpZW50KTtcclxuICAgICAgaWYgKCQkLmlzVGltZVNlcmllcygpICYmIHRpY2tWYWx1ZXMgJiYgdHlwZW9mIHRpY2tWYWx1ZXMgIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgIHRpY2tWYWx1ZXMgPSB0aWNrVmFsdWVzLm1hcChmdW5jdGlvbiAodikge1xyXG4gICAgICAgICAgICAgIHJldHVybiAkJC5wYXJzZURhdGUodik7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICAvLyBTZXQgdGlja1xyXG4gICAgICBheGlzLnRpY2tGb3JtYXQodGlja0Zvcm1hdCkudGlja1ZhbHVlcyh0aWNrVmFsdWVzKTtcclxuICAgICAgaWYgKCQkLmlzQ2F0ZWdvcml6ZWQoKSkge1xyXG4gICAgICAgICAgYXhpcy50aWNrQ2VudGVyZWQoY29uZmlnLmF4aXNfeF90aWNrX2NlbnRlcmVkKTtcclxuICAgICAgICAgIGlmIChpc0VtcHR5KGNvbmZpZy5heGlzX3hfdGlja19jdWxsaW5nKSkge1xyXG4gICAgICAgICAgICAgIGNvbmZpZy5heGlzX3hfdGlja19jdWxsaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGF4aXM7XHJcbiAgfTtcclxuICBBeGlzLnByb3RvdHlwZS51cGRhdGVYQXhpc1RpY2tWYWx1ZXMgPSBmdW5jdGlvbiB1cGRhdGVYQXhpc1RpY2tWYWx1ZXModGFyZ2V0cywgYXhpcykge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzLm93bmVyLCBjb25maWcgPSAkJC5jb25maWcsIHRpY2tWYWx1ZXM7XHJcbiAgICAgIGlmIChjb25maWcuYXhpc194X3RpY2tfZml0IHx8IGNvbmZpZy5heGlzX3hfdGlja19jb3VudCkge1xyXG4gICAgICAgICAgdGlja1ZhbHVlcyA9IHRoaXMuZ2VuZXJhdGVUaWNrVmFsdWVzKCQkLm1hcFRhcmdldHNUb1VuaXF1ZVhzKHRhcmdldHMpLCBjb25maWcuYXhpc194X3RpY2tfY291bnQsICQkLmlzVGltZVNlcmllcygpKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoYXhpcykge1xyXG4gICAgICAgICAgYXhpcy50aWNrVmFsdWVzKHRpY2tWYWx1ZXMpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgJCQueEF4aXMudGlja1ZhbHVlcyh0aWNrVmFsdWVzKTtcclxuICAgICAgICAgICQkLnN1YlhBeGlzLnRpY2tWYWx1ZXModGlja1ZhbHVlcyk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRpY2tWYWx1ZXM7XHJcbiAgfTtcclxuICBBeGlzLnByb3RvdHlwZS5nZXRZQXhpcyA9IGZ1bmN0aW9uIGdldFlBeGlzKGF4aXNJZCwgc2NhbGUsIG9yaWVudCwgdGlja1ZhbHVlcywgd2l0aE91dGVyVGljaywgd2l0aG91dFRyYW5zaXRpb24sIHdpdGhvdXRSb3RhdGVUaWNrVGV4dCkge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzLm93bmVyO1xyXG4gICAgICB2YXIgY29uZmlnID0gJCQuY29uZmlnO1xyXG4gICAgICB2YXIgdGlja0Zvcm1hdCA9IGNvbmZpZ1tcImF4aXNfXCIgKyBheGlzSWQgKyBcIl90aWNrX2Zvcm1hdFwiXTtcclxuICAgICAgaWYgKCF0aWNrRm9ybWF0ICYmICQkLmlzQXhpc05vcm1hbGl6ZWQoYXhpc0lkKSkge1xyXG4gICAgICAgICAgdGlja0Zvcm1hdCA9IGZ1bmN0aW9uICh4KSB7IHJldHVybiB4ICsgXCIlXCI7IH07XHJcbiAgICAgIH1cclxuICAgICAgdmFyIGF4aXMgPSBuZXcgdGhpcy5pbnRlcm5hbCh0aGlzLCB7XHJcbiAgICAgICAgICB3aXRoT3V0ZXJUaWNrOiB3aXRoT3V0ZXJUaWNrLFxyXG4gICAgICAgICAgd2l0aG91dFRyYW5zaXRpb246IHdpdGhvdXRUcmFuc2l0aW9uLFxyXG4gICAgICAgICAgdGlja1RleHRSb3RhdGU6IHdpdGhvdXRSb3RhdGVUaWNrVGV4dCA/IDAgOiBjb25maWcuYXhpc195X3RpY2tfcm90YXRlXHJcbiAgICAgIH0pLmF4aXNcclxuICAgICAgICAgIC5zY2FsZShzY2FsZSlcclxuICAgICAgICAgIC5vcmllbnQob3JpZW50KTtcclxuICAgICAgaWYgKHRpY2tGb3JtYXQpIHtcclxuICAgICAgICAgIGF4aXMudGlja0Zvcm1hdCh0aWNrRm9ybWF0KTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoJCQuaXNUaW1lU2VyaWVzWSgpKSB7XHJcbiAgICAgICAgICBheGlzLnRpY2tzKGNvbmZpZy5heGlzX3lfdGlja190aW1lX3R5cGUsIGNvbmZpZy5heGlzX3lfdGlja190aW1lX2ludGVydmFsKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICAgIGF4aXMudGlja1ZhbHVlcyh0aWNrVmFsdWVzKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gYXhpcztcclxuICB9O1xyXG4gIEF4aXMucHJvdG90eXBlLmdldElkID0gZnVuY3Rpb24gZ2V0SWQoaWQpIHtcclxuICAgICAgdmFyIGNvbmZpZyA9IHRoaXMub3duZXIuY29uZmlnO1xyXG4gICAgICByZXR1cm4gaWQgaW4gY29uZmlnLmRhdGFfYXhlcyA/IGNvbmZpZy5kYXRhX2F4ZXNbaWRdIDogJ3knO1xyXG4gIH07XHJcbiAgQXhpcy5wcm90b3R5cGUuZ2V0WEF4aXNUaWNrRm9ybWF0ID0gZnVuY3Rpb24gZ2V0WEF4aXNUaWNrRm9ybWF0KCkge1xyXG4gICAgICAvLyAjMjI1MSBwcmV2aW91c2x5IHNldCBhbnkgbmVnYXRpdmUgdmFsdWVzIHRvIGEgd2hvbGUgbnVtYmVyLFxyXG4gICAgICAvLyBob3dldmVyIGJvdGggc2hvdWxkIGJlIHRydW5jYXRlZCBhY2NvcmRpbmcgdG8gdGhlIHVzZXJzIGZvcm1hdCBzcGVjaWZpY2F0aW9uXHJcbiAgICAgIHZhciAkJCA9IHRoaXMub3duZXIsIGNvbmZpZyA9ICQkLmNvbmZpZztcclxuICAgICAgdmFyIGZvcm1hdCA9ICQkLmlzVGltZVNlcmllcygpXHJcbiAgICAgICAgICA/ICQkLmRlZmF1bHRBeGlzVGltZUZvcm1hdFxyXG4gICAgICAgICAgOiAkJC5pc0NhdGVnb3JpemVkKClcclxuICAgICAgICAgICAgICA/ICQkLmNhdGVnb3J5TmFtZVxyXG4gICAgICAgICAgICAgIDogZnVuY3Rpb24gKHYpIHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHY7XHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgaWYgKGNvbmZpZy5heGlzX3hfdGlja19mb3JtYXQpIHtcclxuICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKGNvbmZpZy5heGlzX3hfdGlja19mb3JtYXQpKSB7XHJcbiAgICAgICAgICAgICAgZm9ybWF0ID0gY29uZmlnLmF4aXNfeF90aWNrX2Zvcm1hdDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2UgaWYgKCQkLmlzVGltZVNlcmllcygpKSB7XHJcbiAgICAgICAgICAgICAgZm9ybWF0ID0gZnVuY3Rpb24gKGRhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGUgPyAkJC5heGlzVGltZUZvcm1hdChjb25maWcuYXhpc194X3RpY2tfZm9ybWF0KShkYXRlKSA6ICcnO1xyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGlzRnVuY3Rpb24oZm9ybWF0KVxyXG4gICAgICAgICAgPyBmdW5jdGlvbiAodikge1xyXG4gICAgICAgICAgICAgIHJldHVybiBmb3JtYXQuY2FsbCgkJCwgdik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICA6IGZvcm1hdDtcclxuICB9O1xyXG4gIEF4aXMucHJvdG90eXBlLmdldFRpY2tWYWx1ZXMgPSBmdW5jdGlvbiBnZXRUaWNrVmFsdWVzKHRpY2tWYWx1ZXMsIGF4aXMpIHtcclxuICAgICAgcmV0dXJuIHRpY2tWYWx1ZXMgPyB0aWNrVmFsdWVzIDogYXhpcyA/IGF4aXMudGlja1ZhbHVlcygpIDogdW5kZWZpbmVkO1xyXG4gIH07XHJcbiAgQXhpcy5wcm90b3R5cGUuZ2V0WEF4aXNUaWNrVmFsdWVzID0gZnVuY3Rpb24gZ2V0WEF4aXNUaWNrVmFsdWVzKCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5nZXRUaWNrVmFsdWVzKHRoaXMub3duZXIuY29uZmlnLmF4aXNfeF90aWNrX3ZhbHVlcywgdGhpcy5vd25lci54QXhpcyk7XHJcbiAgfTtcclxuICBBeGlzLnByb3RvdHlwZS5nZXRZQXhpc1RpY2tWYWx1ZXMgPSBmdW5jdGlvbiBnZXRZQXhpc1RpY2tWYWx1ZXMoKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmdldFRpY2tWYWx1ZXModGhpcy5vd25lci5jb25maWcuYXhpc195X3RpY2tfdmFsdWVzLCB0aGlzLm93bmVyLnlBeGlzKTtcclxuICB9O1xyXG4gIEF4aXMucHJvdG90eXBlLmdldFkyQXhpc1RpY2tWYWx1ZXMgPSBmdW5jdGlvbiBnZXRZMkF4aXNUaWNrVmFsdWVzKCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5nZXRUaWNrVmFsdWVzKHRoaXMub3duZXIuY29uZmlnLmF4aXNfeTJfdGlja192YWx1ZXMsIHRoaXMub3duZXIueTJBeGlzKTtcclxuICB9O1xyXG4gIEF4aXMucHJvdG90eXBlLmdldExhYmVsT3B0aW9uQnlBeGlzSWQgPSBmdW5jdGlvbiBnZXRMYWJlbE9wdGlvbkJ5QXhpc0lkKGF4aXNJZCkge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzLm93bmVyLCBjb25maWcgPSAkJC5jb25maWcsIG9wdGlvbjtcclxuICAgICAgaWYgKGF4aXNJZCA9PT0gJ3knKSB7XHJcbiAgICAgICAgICBvcHRpb24gPSBjb25maWcuYXhpc195X2xhYmVsO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKGF4aXNJZCA9PT0gJ3kyJykge1xyXG4gICAgICAgICAgb3B0aW9uID0gY29uZmlnLmF4aXNfeTJfbGFiZWw7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoYXhpc0lkID09PSAneCcpIHtcclxuICAgICAgICAgIG9wdGlvbiA9IGNvbmZpZy5heGlzX3hfbGFiZWw7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIG9wdGlvbjtcclxuICB9O1xyXG4gIEF4aXMucHJvdG90eXBlLmdldExhYmVsVGV4dCA9IGZ1bmN0aW9uIGdldExhYmVsVGV4dChheGlzSWQpIHtcclxuICAgICAgdmFyIG9wdGlvbiA9IHRoaXMuZ2V0TGFiZWxPcHRpb25CeUF4aXNJZChheGlzSWQpO1xyXG4gICAgICByZXR1cm4gaXNTdHJpbmcob3B0aW9uKSA/IG9wdGlvbiA6IG9wdGlvbiA/IG9wdGlvbi50ZXh0IDogbnVsbDtcclxuICB9O1xyXG4gIEF4aXMucHJvdG90eXBlLnNldExhYmVsVGV4dCA9IGZ1bmN0aW9uIHNldExhYmVsVGV4dChheGlzSWQsIHRleHQpIHtcclxuICAgICAgdmFyICQkID0gdGhpcy5vd25lciwgY29uZmlnID0gJCQuY29uZmlnLCBvcHRpb24gPSB0aGlzLmdldExhYmVsT3B0aW9uQnlBeGlzSWQoYXhpc0lkKTtcclxuICAgICAgaWYgKGlzU3RyaW5nKG9wdGlvbikpIHtcclxuICAgICAgICAgIGlmIChheGlzSWQgPT09ICd5Jykge1xyXG4gICAgICAgICAgICAgIGNvbmZpZy5heGlzX3lfbGFiZWwgPSB0ZXh0O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSBpZiAoYXhpc0lkID09PSAneTInKSB7XHJcbiAgICAgICAgICAgICAgY29uZmlnLmF4aXNfeTJfbGFiZWwgPSB0ZXh0O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSBpZiAoYXhpc0lkID09PSAneCcpIHtcclxuICAgICAgICAgICAgICBjb25maWcuYXhpc194X2xhYmVsID0gdGV4dDtcclxuICAgICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChvcHRpb24pIHtcclxuICAgICAgICAgIG9wdGlvbi50ZXh0ID0gdGV4dDtcclxuICAgICAgfVxyXG4gIH07XHJcbiAgQXhpcy5wcm90b3R5cGUuZ2V0TGFiZWxQb3NpdGlvbiA9IGZ1bmN0aW9uIGdldExhYmVsUG9zaXRpb24oYXhpc0lkLCBkZWZhdWx0UG9zaXRpb24pIHtcclxuICAgICAgdmFyIG9wdGlvbiA9IHRoaXMuZ2V0TGFiZWxPcHRpb25CeUF4aXNJZChheGlzSWQpLCBwb3NpdGlvbiA9IG9wdGlvbiAmJiB0eXBlb2Ygb3B0aW9uID09PSAnb2JqZWN0JyAmJiBvcHRpb24ucG9zaXRpb25cclxuICAgICAgICAgID8gb3B0aW9uLnBvc2l0aW9uXHJcbiAgICAgICAgICA6IGRlZmF1bHRQb3NpdGlvbjtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIGlzSW5uZXI6IHBvc2l0aW9uLmluZGV4T2YoJ2lubmVyJykgPj0gMCxcclxuICAgICAgICAgIGlzT3V0ZXI6IHBvc2l0aW9uLmluZGV4T2YoJ291dGVyJykgPj0gMCxcclxuICAgICAgICAgIGlzTGVmdDogcG9zaXRpb24uaW5kZXhPZignbGVmdCcpID49IDAsXHJcbiAgICAgICAgICBpc0NlbnRlcjogcG9zaXRpb24uaW5kZXhPZignY2VudGVyJykgPj0gMCxcclxuICAgICAgICAgIGlzUmlnaHQ6IHBvc2l0aW9uLmluZGV4T2YoJ3JpZ2h0JykgPj0gMCxcclxuICAgICAgICAgIGlzVG9wOiBwb3NpdGlvbi5pbmRleE9mKCd0b3AnKSA+PSAwLFxyXG4gICAgICAgICAgaXNNaWRkbGU6IHBvc2l0aW9uLmluZGV4T2YoJ21pZGRsZScpID49IDAsXHJcbiAgICAgICAgICBpc0JvdHRvbTogcG9zaXRpb24uaW5kZXhPZignYm90dG9tJykgPj0gMFxyXG4gICAgICB9O1xyXG4gIH07XHJcbiAgQXhpcy5wcm90b3R5cGUuZ2V0WEF4aXNMYWJlbFBvc2l0aW9uID0gZnVuY3Rpb24gZ2V0WEF4aXNMYWJlbFBvc2l0aW9uKCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5nZXRMYWJlbFBvc2l0aW9uKCd4JywgdGhpcy5vd25lci5jb25maWcuYXhpc19yb3RhdGVkID8gJ2lubmVyLXRvcCcgOiAnaW5uZXItcmlnaHQnKTtcclxuICB9O1xyXG4gIEF4aXMucHJvdG90eXBlLmdldFlBeGlzTGFiZWxQb3NpdGlvbiA9IGZ1bmN0aW9uIGdldFlBeGlzTGFiZWxQb3NpdGlvbigpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZ2V0TGFiZWxQb3NpdGlvbigneScsIHRoaXMub3duZXIuY29uZmlnLmF4aXNfcm90YXRlZCA/ICdpbm5lci1yaWdodCcgOiAnaW5uZXItdG9wJyk7XHJcbiAgfTtcclxuICBBeGlzLnByb3RvdHlwZS5nZXRZMkF4aXNMYWJlbFBvc2l0aW9uID0gZnVuY3Rpb24gZ2V0WTJBeGlzTGFiZWxQb3NpdGlvbigpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZ2V0TGFiZWxQb3NpdGlvbigneTInLCB0aGlzLm93bmVyLmNvbmZpZy5heGlzX3JvdGF0ZWQgPyAnaW5uZXItcmlnaHQnIDogJ2lubmVyLXRvcCcpO1xyXG4gIH07XHJcbiAgQXhpcy5wcm90b3R5cGUuZ2V0TGFiZWxQb3NpdGlvbkJ5SWQgPSBmdW5jdGlvbiBnZXRMYWJlbFBvc2l0aW9uQnlJZChpZCkge1xyXG4gICAgICByZXR1cm4gaWQgPT09ICd5MidcclxuICAgICAgICAgID8gdGhpcy5nZXRZMkF4aXNMYWJlbFBvc2l0aW9uKClcclxuICAgICAgICAgIDogaWQgPT09ICd5J1xyXG4gICAgICAgICAgICAgID8gdGhpcy5nZXRZQXhpc0xhYmVsUG9zaXRpb24oKVxyXG4gICAgICAgICAgICAgIDogdGhpcy5nZXRYQXhpc0xhYmVsUG9zaXRpb24oKTtcclxuICB9O1xyXG4gIEF4aXMucHJvdG90eXBlLnRleHRGb3JYQXhpc0xhYmVsID0gZnVuY3Rpb24gdGV4dEZvclhBeGlzTGFiZWwoKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmdldExhYmVsVGV4dCgneCcpO1xyXG4gIH07XHJcbiAgQXhpcy5wcm90b3R5cGUudGV4dEZvcllBeGlzTGFiZWwgPSBmdW5jdGlvbiB0ZXh0Rm9yWUF4aXNMYWJlbCgpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZ2V0TGFiZWxUZXh0KCd5Jyk7XHJcbiAgfTtcclxuICBBeGlzLnByb3RvdHlwZS50ZXh0Rm9yWTJBeGlzTGFiZWwgPSBmdW5jdGlvbiB0ZXh0Rm9yWTJBeGlzTGFiZWwoKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmdldExhYmVsVGV4dCgneTInKTtcclxuICB9O1xyXG4gIEF4aXMucHJvdG90eXBlLnhGb3JBeGlzTGFiZWwgPSBmdW5jdGlvbiB4Rm9yQXhpc0xhYmVsKGZvckhvcml6b250YWwsIHBvc2l0aW9uKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXMub3duZXI7XHJcbiAgICAgIGlmIChmb3JIb3Jpem9udGFsKSB7XHJcbiAgICAgICAgICByZXR1cm4gcG9zaXRpb24uaXNMZWZ0ID8gMCA6IHBvc2l0aW9uLmlzQ2VudGVyID8gJCQud2lkdGggLyAyIDogJCQud2lkdGg7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgICByZXR1cm4gcG9zaXRpb24uaXNCb3R0b21cclxuICAgICAgICAgICAgICA/IC0kJC5oZWlnaHRcclxuICAgICAgICAgICAgICA6IHBvc2l0aW9uLmlzTWlkZGxlXHJcbiAgICAgICAgICAgICAgICAgID8gLSQkLmhlaWdodCAvIDJcclxuICAgICAgICAgICAgICAgICAgOiAwO1xyXG4gICAgICB9XHJcbiAgfTtcclxuICBBeGlzLnByb3RvdHlwZS5keEZvckF4aXNMYWJlbCA9IGZ1bmN0aW9uIGR4Rm9yQXhpc0xhYmVsKGZvckhvcml6b250YWwsIHBvc2l0aW9uKSB7XHJcbiAgICAgIGlmIChmb3JIb3Jpem9udGFsKSB7XHJcbiAgICAgICAgICByZXR1cm4gcG9zaXRpb24uaXNMZWZ0ID8gJzAuNWVtJyA6IHBvc2l0aW9uLmlzUmlnaHQgPyAnLTAuNWVtJyA6ICcwJztcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICAgIHJldHVybiBwb3NpdGlvbi5pc1RvcCA/ICctMC41ZW0nIDogcG9zaXRpb24uaXNCb3R0b20gPyAnMC41ZW0nIDogJzAnO1xyXG4gICAgICB9XHJcbiAgfTtcclxuICBBeGlzLnByb3RvdHlwZS50ZXh0QW5jaG9yRm9yQXhpc0xhYmVsID0gZnVuY3Rpb24gdGV4dEFuY2hvckZvckF4aXNMYWJlbChmb3JIb3Jpem9udGFsLCBwb3NpdGlvbikge1xyXG4gICAgICBpZiAoZm9ySG9yaXpvbnRhbCkge1xyXG4gICAgICAgICAgcmV0dXJuIHBvc2l0aW9uLmlzTGVmdCA/ICdzdGFydCcgOiBwb3NpdGlvbi5pc0NlbnRlciA/ICdtaWRkbGUnIDogJ2VuZCc7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgICByZXR1cm4gcG9zaXRpb24uaXNCb3R0b20gPyAnc3RhcnQnIDogcG9zaXRpb24uaXNNaWRkbGUgPyAnbWlkZGxlJyA6ICdlbmQnO1xyXG4gICAgICB9XHJcbiAgfTtcclxuICBBeGlzLnByb3RvdHlwZS54Rm9yWEF4aXNMYWJlbCA9IGZ1bmN0aW9uIHhGb3JYQXhpc0xhYmVsKCkge1xyXG4gICAgICByZXR1cm4gdGhpcy54Rm9yQXhpc0xhYmVsKCF0aGlzLm93bmVyLmNvbmZpZy5heGlzX3JvdGF0ZWQsIHRoaXMuZ2V0WEF4aXNMYWJlbFBvc2l0aW9uKCkpO1xyXG4gIH07XHJcbiAgQXhpcy5wcm90b3R5cGUueEZvcllBeGlzTGFiZWwgPSBmdW5jdGlvbiB4Rm9yWUF4aXNMYWJlbCgpIHtcclxuICAgICAgcmV0dXJuIHRoaXMueEZvckF4aXNMYWJlbCh0aGlzLm93bmVyLmNvbmZpZy5heGlzX3JvdGF0ZWQsIHRoaXMuZ2V0WUF4aXNMYWJlbFBvc2l0aW9uKCkpO1xyXG4gIH07XHJcbiAgQXhpcy5wcm90b3R5cGUueEZvclkyQXhpc0xhYmVsID0gZnVuY3Rpb24geEZvclkyQXhpc0xhYmVsKCkge1xyXG4gICAgICByZXR1cm4gdGhpcy54Rm9yQXhpc0xhYmVsKHRoaXMub3duZXIuY29uZmlnLmF4aXNfcm90YXRlZCwgdGhpcy5nZXRZMkF4aXNMYWJlbFBvc2l0aW9uKCkpO1xyXG4gIH07XHJcbiAgQXhpcy5wcm90b3R5cGUuZHhGb3JYQXhpc0xhYmVsID0gZnVuY3Rpb24gZHhGb3JYQXhpc0xhYmVsKCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5keEZvckF4aXNMYWJlbCghdGhpcy5vd25lci5jb25maWcuYXhpc19yb3RhdGVkLCB0aGlzLmdldFhBeGlzTGFiZWxQb3NpdGlvbigpKTtcclxuICB9O1xyXG4gIEF4aXMucHJvdG90eXBlLmR4Rm9yWUF4aXNMYWJlbCA9IGZ1bmN0aW9uIGR4Rm9yWUF4aXNMYWJlbCgpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZHhGb3JBeGlzTGFiZWwodGhpcy5vd25lci5jb25maWcuYXhpc19yb3RhdGVkLCB0aGlzLmdldFlBeGlzTGFiZWxQb3NpdGlvbigpKTtcclxuICB9O1xyXG4gIEF4aXMucHJvdG90eXBlLmR4Rm9yWTJBeGlzTGFiZWwgPSBmdW5jdGlvbiBkeEZvclkyQXhpc0xhYmVsKCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5keEZvckF4aXNMYWJlbCh0aGlzLm93bmVyLmNvbmZpZy5heGlzX3JvdGF0ZWQsIHRoaXMuZ2V0WTJBeGlzTGFiZWxQb3NpdGlvbigpKTtcclxuICB9O1xyXG4gIEF4aXMucHJvdG90eXBlLmR5Rm9yWEF4aXNMYWJlbCA9IGZ1bmN0aW9uIGR5Rm9yWEF4aXNMYWJlbCgpIHtcclxuICAgICAgdmFyICQkID0gdGhpcy5vd25lciwgY29uZmlnID0gJCQuY29uZmlnLCBwb3NpdGlvbiA9IHRoaXMuZ2V0WEF4aXNMYWJlbFBvc2l0aW9uKCk7XHJcbiAgICAgIGlmIChjb25maWcuYXhpc19yb3RhdGVkKSB7XHJcbiAgICAgICAgICByZXR1cm4gcG9zaXRpb24uaXNJbm5lclxyXG4gICAgICAgICAgICAgID8gJzEuMmVtJ1xyXG4gICAgICAgICAgICAgIDogLTI1IC0gKCQkLmNvbmZpZy5heGlzX3hfaW5uZXIgPyAwIDogdGhpcy5nZXRNYXhUaWNrV2lkdGgoJ3gnKSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgICByZXR1cm4gcG9zaXRpb24uaXNJbm5lciA/ICctMC41ZW0nIDogJCQuZ2V0SG9yaXpvbnRhbEF4aXNIZWlnaHQoJ3gnKSAtIDEwO1xyXG4gICAgICB9XHJcbiAgfTtcclxuICBBeGlzLnByb3RvdHlwZS5keUZvcllBeGlzTGFiZWwgPSBmdW5jdGlvbiBkeUZvcllBeGlzTGFiZWwoKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXMub3duZXIsIHBvc2l0aW9uID0gdGhpcy5nZXRZQXhpc0xhYmVsUG9zaXRpb24oKTtcclxuICAgICAgaWYgKCQkLmNvbmZpZy5heGlzX3JvdGF0ZWQpIHtcclxuICAgICAgICAgIHJldHVybiBwb3NpdGlvbi5pc0lubmVyID8gJy0wLjVlbScgOiAnM2VtJztcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICAgIHJldHVybiBwb3NpdGlvbi5pc0lubmVyXHJcbiAgICAgICAgICAgICAgPyAnMS4yZW0nXHJcbiAgICAgICAgICAgICAgOiAtMTAgLSAoJCQuY29uZmlnLmF4aXNfeV9pbm5lciA/IDAgOiB0aGlzLmdldE1heFRpY2tXaWR0aCgneScpICsgMTApO1xyXG4gICAgICB9XHJcbiAgfTtcclxuICBBeGlzLnByb3RvdHlwZS5keUZvclkyQXhpc0xhYmVsID0gZnVuY3Rpb24gZHlGb3JZMkF4aXNMYWJlbCgpIHtcclxuICAgICAgdmFyICQkID0gdGhpcy5vd25lciwgcG9zaXRpb24gPSB0aGlzLmdldFkyQXhpc0xhYmVsUG9zaXRpb24oKTtcclxuICAgICAgaWYgKCQkLmNvbmZpZy5heGlzX3JvdGF0ZWQpIHtcclxuICAgICAgICAgIHJldHVybiBwb3NpdGlvbi5pc0lubmVyID8gJzEuMmVtJyA6ICctMi4yZW0nO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuIHBvc2l0aW9uLmlzSW5uZXJcclxuICAgICAgICAgICAgICA/ICctMC41ZW0nXHJcbiAgICAgICAgICAgICAgOiAxNSArICgkJC5jb25maWcuYXhpc195Ml9pbm5lciA/IDAgOiB0aGlzLmdldE1heFRpY2tXaWR0aCgneTInKSArIDE1KTtcclxuICAgICAgfVxyXG4gIH07XHJcbiAgQXhpcy5wcm90b3R5cGUudGV4dEFuY2hvckZvclhBeGlzTGFiZWwgPSBmdW5jdGlvbiB0ZXh0QW5jaG9yRm9yWEF4aXNMYWJlbCgpIHtcclxuICAgICAgdmFyICQkID0gdGhpcy5vd25lcjtcclxuICAgICAgcmV0dXJuIHRoaXMudGV4dEFuY2hvckZvckF4aXNMYWJlbCghJCQuY29uZmlnLmF4aXNfcm90YXRlZCwgdGhpcy5nZXRYQXhpc0xhYmVsUG9zaXRpb24oKSk7XHJcbiAgfTtcclxuICBBeGlzLnByb3RvdHlwZS50ZXh0QW5jaG9yRm9yWUF4aXNMYWJlbCA9IGZ1bmN0aW9uIHRleHRBbmNob3JGb3JZQXhpc0xhYmVsKCkge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzLm93bmVyO1xyXG4gICAgICByZXR1cm4gdGhpcy50ZXh0QW5jaG9yRm9yQXhpc0xhYmVsKCQkLmNvbmZpZy5heGlzX3JvdGF0ZWQsIHRoaXMuZ2V0WUF4aXNMYWJlbFBvc2l0aW9uKCkpO1xyXG4gIH07XHJcbiAgQXhpcy5wcm90b3R5cGUudGV4dEFuY2hvckZvclkyQXhpc0xhYmVsID0gZnVuY3Rpb24gdGV4dEFuY2hvckZvclkyQXhpc0xhYmVsKCkge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzLm93bmVyO1xyXG4gICAgICByZXR1cm4gdGhpcy50ZXh0QW5jaG9yRm9yQXhpc0xhYmVsKCQkLmNvbmZpZy5heGlzX3JvdGF0ZWQsIHRoaXMuZ2V0WTJBeGlzTGFiZWxQb3NpdGlvbigpKTtcclxuICB9O1xyXG4gIEF4aXMucHJvdG90eXBlLmdldE1heFRpY2tXaWR0aCA9IGZ1bmN0aW9uIGdldE1heFRpY2tXaWR0aChpZCwgd2l0aG91dFJlY29tcHV0ZSkge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzLm93bmVyLCBtYXhXaWR0aCA9IDAsIHRhcmdldHNUb1Nob3csIHNjYWxlLCBheGlzLCBkdW1teSwgc3ZnO1xyXG4gICAgICBpZiAod2l0aG91dFJlY29tcHV0ZSAmJiAkJC5jdXJyZW50TWF4VGlja1dpZHRoc1tpZF0pIHtcclxuICAgICAgICAgIHJldHVybiAkJC5jdXJyZW50TWF4VGlja1dpZHRoc1tpZF07XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCQkLnN2Zykge1xyXG4gICAgICAgICAgdGFyZ2V0c1RvU2hvdyA9ICQkLmZpbHRlclRhcmdldHNUb1Nob3coJCQuZGF0YS50YXJnZXRzKTtcclxuICAgICAgICAgIGlmIChpZCA9PT0gJ3knKSB7XHJcbiAgICAgICAgICAgICAgc2NhbGUgPSAkJC55LmNvcHkoKS5kb21haW4oJCQuZ2V0WURvbWFpbih0YXJnZXRzVG9TaG93LCAneScpKTtcclxuICAgICAgICAgICAgICBheGlzID0gdGhpcy5nZXRZQXhpcyhpZCwgc2NhbGUsICQkLnlPcmllbnQsICQkLnlBeGlzVGlja1ZhbHVlcywgZmFsc2UsIHRydWUsIHRydWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSBpZiAoaWQgPT09ICd5MicpIHtcclxuICAgICAgICAgICAgICBzY2FsZSA9ICQkLnkyLmNvcHkoKS5kb21haW4oJCQuZ2V0WURvbWFpbih0YXJnZXRzVG9TaG93LCAneTInKSk7XHJcbiAgICAgICAgICAgICAgYXhpcyA9IHRoaXMuZ2V0WUF4aXMoaWQsIHNjYWxlLCAkJC55Mk9yaWVudCwgJCQueTJBeGlzVGlja1ZhbHVlcywgZmFsc2UsIHRydWUsIHRydWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgc2NhbGUgPSAkJC54LmNvcHkoKS5kb21haW4oJCQuZ2V0WERvbWFpbih0YXJnZXRzVG9TaG93KSk7XHJcbiAgICAgICAgICAgICAgYXhpcyA9IHRoaXMuZ2V0WEF4aXMoc2NhbGUsICQkLnhPcmllbnQsICQkLnhBeGlzVGlja0Zvcm1hdCwgJCQueEF4aXNUaWNrVmFsdWVzLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgdGhpcy51cGRhdGVYQXhpc1RpY2tWYWx1ZXModGFyZ2V0c1RvU2hvdywgYXhpcyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBkdW1teSA9ICQkLmQzXHJcbiAgICAgICAgICAgICAgLnNlbGVjdCgnYm9keScpXHJcbiAgICAgICAgICAgICAgLmFwcGVuZCgnZGl2JylcclxuICAgICAgICAgICAgICAuY2xhc3NlZCgnYzMnLCB0cnVlKTtcclxuICAgICAgICAgIChzdmcgPSBkdW1teVxyXG4gICAgICAgICAgICAgIC5hcHBlbmQoJ3N2ZycpXHJcbiAgICAgICAgICAgICAgLnN0eWxlKCd2aXNpYmlsaXR5JywgJ2hpZGRlbicpXHJcbiAgICAgICAgICAgICAgLnN0eWxlKCdwb3NpdGlvbicsICdmaXhlZCcpXHJcbiAgICAgICAgICAgICAgLnN0eWxlKCd0b3AnLCAwKVxyXG4gICAgICAgICAgICAgIC5zdHlsZSgnbGVmdCcsIDApKSxcclxuICAgICAgICAgICAgICBzdmdcclxuICAgICAgICAgICAgICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgICAgICAgICAgICAgIC5jYWxsKGF4aXMpXHJcbiAgICAgICAgICAgICAgICAgIC5lYWNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgJCQuZDNcclxuICAgICAgICAgICAgICAgICAgICAgIC5zZWxlY3QodGhpcylcclxuICAgICAgICAgICAgICAgICAgICAgIC5zZWxlY3RBbGwoJ3RleHQnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgLmVhY2goZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdmFyIGJveCA9IGdldEJCb3godGhpcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBpZiAobWF4V2lkdGggPCBib3gud2lkdGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhXaWR0aCA9IGJveC53aWR0aDtcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgIGR1bW15LnJlbW92ZSgpO1xyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgICQkLmN1cnJlbnRNYXhUaWNrV2lkdGhzW2lkXSA9XHJcbiAgICAgICAgICBtYXhXaWR0aCA8PSAwID8gJCQuY3VycmVudE1heFRpY2tXaWR0aHNbaWRdIDogbWF4V2lkdGg7XHJcbiAgICAgIHJldHVybiAkJC5jdXJyZW50TWF4VGlja1dpZHRoc1tpZF07XHJcbiAgfTtcclxuICBBeGlzLnByb3RvdHlwZS51cGRhdGVMYWJlbHMgPSBmdW5jdGlvbiB1cGRhdGVMYWJlbHMod2l0aFRyYW5zaXRpb24pIHtcclxuICAgICAgdmFyICQkID0gdGhpcy5vd25lcjtcclxuICAgICAgdmFyIGF4aXNYTGFiZWwgPSAkJC5tYWluLnNlbGVjdCgnLicgKyBDTEFTUy5heGlzWCArICcgLicgKyBDTEFTUy5heGlzWExhYmVsKSwgYXhpc1lMYWJlbCA9ICQkLm1haW4uc2VsZWN0KCcuJyArIENMQVNTLmF4aXNZICsgJyAuJyArIENMQVNTLmF4aXNZTGFiZWwpLCBheGlzWTJMYWJlbCA9ICQkLm1haW4uc2VsZWN0KCcuJyArIENMQVNTLmF4aXNZMiArICcgLicgKyBDTEFTUy5heGlzWTJMYWJlbCk7XHJcbiAgICAgICh3aXRoVHJhbnNpdGlvbiA/IGF4aXNYTGFiZWwudHJhbnNpdGlvbigpIDogYXhpc1hMYWJlbClcclxuICAgICAgICAgIC5hdHRyKCd4JywgdGhpcy54Rm9yWEF4aXNMYWJlbC5iaW5kKHRoaXMpKVxyXG4gICAgICAgICAgLmF0dHIoJ2R4JywgdGhpcy5keEZvclhBeGlzTGFiZWwuYmluZCh0aGlzKSlcclxuICAgICAgICAgIC5hdHRyKCdkeScsIHRoaXMuZHlGb3JYQXhpc0xhYmVsLmJpbmQodGhpcykpXHJcbiAgICAgICAgICAudGV4dCh0aGlzLnRleHRGb3JYQXhpc0xhYmVsLmJpbmQodGhpcykpO1xyXG4gICAgICAod2l0aFRyYW5zaXRpb24gPyBheGlzWUxhYmVsLnRyYW5zaXRpb24oKSA6IGF4aXNZTGFiZWwpXHJcbiAgICAgICAgICAuYXR0cigneCcsIHRoaXMueEZvcllBeGlzTGFiZWwuYmluZCh0aGlzKSlcclxuICAgICAgICAgIC5hdHRyKCdkeCcsIHRoaXMuZHhGb3JZQXhpc0xhYmVsLmJpbmQodGhpcykpXHJcbiAgICAgICAgICAuYXR0cignZHknLCB0aGlzLmR5Rm9yWUF4aXNMYWJlbC5iaW5kKHRoaXMpKVxyXG4gICAgICAgICAgLnRleHQodGhpcy50ZXh0Rm9yWUF4aXNMYWJlbC5iaW5kKHRoaXMpKTtcclxuICAgICAgKHdpdGhUcmFuc2l0aW9uID8gYXhpc1kyTGFiZWwudHJhbnNpdGlvbigpIDogYXhpc1kyTGFiZWwpXHJcbiAgICAgICAgICAuYXR0cigneCcsIHRoaXMueEZvclkyQXhpc0xhYmVsLmJpbmQodGhpcykpXHJcbiAgICAgICAgICAuYXR0cignZHgnLCB0aGlzLmR4Rm9yWTJBeGlzTGFiZWwuYmluZCh0aGlzKSlcclxuICAgICAgICAgIC5hdHRyKCdkeScsIHRoaXMuZHlGb3JZMkF4aXNMYWJlbC5iaW5kKHRoaXMpKVxyXG4gICAgICAgICAgLnRleHQodGhpcy50ZXh0Rm9yWTJBeGlzTGFiZWwuYmluZCh0aGlzKSk7XHJcbiAgfTtcclxuICBBeGlzLnByb3RvdHlwZS5nZXRQYWRkaW5nID0gZnVuY3Rpb24gZ2V0UGFkZGluZyhwYWRkaW5nLCBrZXksIGRlZmF1bHRWYWx1ZSwgZG9tYWluTGVuZ3RoKSB7XHJcbiAgICAgIHZhciBwID0gdHlwZW9mIHBhZGRpbmcgPT09ICdudW1iZXInID8gcGFkZGluZyA6IHBhZGRpbmdba2V5XTtcclxuICAgICAgaWYgKCFpc1ZhbHVlKHApKSB7XHJcbiAgICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChwYWRkaW5nLnVuaXQgPT09ICdyYXRpbycpIHtcclxuICAgICAgICAgIHJldHVybiBwYWRkaW5nW2tleV0gKiBkb21haW5MZW5ndGg7XHJcbiAgICAgIH1cclxuICAgICAgLy8gYXNzdW1lIHBhZGRpbmcgaXMgcGl4ZWxzIGlmIHVuaXQgaXMgbm90IHNwZWNpZmllZFxyXG4gICAgICByZXR1cm4gdGhpcy5jb252ZXJ0UGl4ZWxzVG9BeGlzUGFkZGluZyhwLCBkb21haW5MZW5ndGgpO1xyXG4gIH07XHJcbiAgQXhpcy5wcm90b3R5cGUuY29udmVydFBpeGVsc1RvQXhpc1BhZGRpbmcgPSBmdW5jdGlvbiBjb252ZXJ0UGl4ZWxzVG9BeGlzUGFkZGluZyhwaXhlbHMsIGRvbWFpbkxlbmd0aCkge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzLm93bmVyLCBsZW5ndGggPSAkJC5jb25maWcuYXhpc19yb3RhdGVkID8gJCQud2lkdGggOiAkJC5oZWlnaHQ7XHJcbiAgICAgIHJldHVybiBkb21haW5MZW5ndGggKiAocGl4ZWxzIC8gbGVuZ3RoKTtcclxuICB9O1xyXG4gIEF4aXMucHJvdG90eXBlLmdlbmVyYXRlVGlja1ZhbHVlcyA9IGZ1bmN0aW9uIGdlbmVyYXRlVGlja1ZhbHVlcyh2YWx1ZXMsIHRpY2tDb3VudCwgZm9yVGltZVNlcmllcykge1xyXG4gICAgICB2YXIgdGlja1ZhbHVlcyA9IHZhbHVlcywgdGFyZ2V0Q291bnQsIHN0YXJ0LCBlbmQsIGNvdW50LCBpbnRlcnZhbCwgaSwgdGlja1ZhbHVlO1xyXG4gICAgICBpZiAodGlja0NvdW50KSB7XHJcbiAgICAgICAgICB0YXJnZXRDb3VudCA9IGlzRnVuY3Rpb24odGlja0NvdW50KSA/IHRpY2tDb3VudCgpIDogdGlja0NvdW50O1xyXG4gICAgICAgICAgLy8gY29tcHV0ZSB0aWNrcyBhY2NvcmRpbmcgdG8gdGlja0NvdW50XHJcbiAgICAgICAgICBpZiAodGFyZ2V0Q291bnQgPT09IDEpIHtcclxuICAgICAgICAgICAgICB0aWNrVmFsdWVzID0gW3ZhbHVlc1swXV07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIGlmICh0YXJnZXRDb3VudCA9PT0gMikge1xyXG4gICAgICAgICAgICAgIHRpY2tWYWx1ZXMgPSBbdmFsdWVzWzBdLCB2YWx1ZXNbdmFsdWVzLmxlbmd0aCAtIDFdXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2UgaWYgKHRhcmdldENvdW50ID4gMikge1xyXG4gICAgICAgICAgICAgIGNvdW50ID0gdGFyZ2V0Q291bnQgLSAyO1xyXG4gICAgICAgICAgICAgIHN0YXJ0ID0gdmFsdWVzWzBdO1xyXG4gICAgICAgICAgICAgIGVuZCA9IHZhbHVlc1t2YWx1ZXMubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgICAgICAgaW50ZXJ2YWwgPSAoZW5kIC0gc3RhcnQpIC8gKGNvdW50ICsgMSk7XHJcbiAgICAgICAgICAgICAgLy8gcmUtY29uc3RydWN0IHVuaXF1ZSB2YWx1ZXNcclxuICAgICAgICAgICAgICB0aWNrVmFsdWVzID0gW3N0YXJ0XTtcclxuICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICB0aWNrVmFsdWUgPSArc3RhcnQgKyBpbnRlcnZhbCAqIChpICsgMSk7XHJcbiAgICAgICAgICAgICAgICAgIHRpY2tWYWx1ZXMucHVzaChmb3JUaW1lU2VyaWVzID8gbmV3IERhdGUodGlja1ZhbHVlKSA6IHRpY2tWYWx1ZSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHRpY2tWYWx1ZXMucHVzaChlbmQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmICghZm9yVGltZVNlcmllcykge1xyXG4gICAgICAgICAgdGlja1ZhbHVlcyA9IHRpY2tWYWx1ZXMuc29ydChmdW5jdGlvbiAoYSwgYikge1xyXG4gICAgICAgICAgICAgIHJldHVybiBhIC0gYjtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0aWNrVmFsdWVzO1xyXG4gIH07XHJcbiAgQXhpcy5wcm90b3R5cGUuZ2VuZXJhdGVUcmFuc2l0aW9ucyA9IGZ1bmN0aW9uIGdlbmVyYXRlVHJhbnNpdGlvbnMoZHVyYXRpb24pIHtcclxuICAgICAgdmFyICQkID0gdGhpcy5vd25lciwgYXhlcyA9ICQkLmF4ZXM7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICBheGlzWDogZHVyYXRpb24gPyBheGVzLngudHJhbnNpdGlvbigpLmR1cmF0aW9uKGR1cmF0aW9uKSA6IGF4ZXMueCxcclxuICAgICAgICAgIGF4aXNZOiBkdXJhdGlvbiA/IGF4ZXMueS50cmFuc2l0aW9uKCkuZHVyYXRpb24oZHVyYXRpb24pIDogYXhlcy55LFxyXG4gICAgICAgICAgYXhpc1kyOiBkdXJhdGlvbiA/IGF4ZXMueTIudHJhbnNpdGlvbigpLmR1cmF0aW9uKGR1cmF0aW9uKSA6IGF4ZXMueTIsXHJcbiAgICAgICAgICBheGlzU3ViWDogZHVyYXRpb24gPyBheGVzLnN1YngudHJhbnNpdGlvbigpLmR1cmF0aW9uKGR1cmF0aW9uKSA6IGF4ZXMuc3VieFxyXG4gICAgICB9O1xyXG4gIH07XHJcbiAgQXhpcy5wcm90b3R5cGUucmVkcmF3ID0gZnVuY3Rpb24gcmVkcmF3KGR1cmF0aW9uLCBpc0hpZGRlbikge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzLm93bmVyLCB0cmFuc2l0aW9uID0gZHVyYXRpb24gPyAkJC5kMy50cmFuc2l0aW9uKCkuZHVyYXRpb24oZHVyYXRpb24pIDogbnVsbDtcclxuICAgICAgJCQuYXhlcy54LnN0eWxlKCdvcGFjaXR5JywgaXNIaWRkZW4gPyAwIDogMSkuY2FsbCgkJC54QXhpcywgdHJhbnNpdGlvbik7XHJcbiAgICAgICQkLmF4ZXMueS5zdHlsZSgnb3BhY2l0eScsIGlzSGlkZGVuID8gMCA6IDEpLmNhbGwoJCQueUF4aXMsIHRyYW5zaXRpb24pO1xyXG4gICAgICAkJC5heGVzLnkyLnN0eWxlKCdvcGFjaXR5JywgaXNIaWRkZW4gPyAwIDogMSkuY2FsbCgkJC55MkF4aXMsIHRyYW5zaXRpb24pO1xyXG4gICAgICAkJC5heGVzLnN1Ynguc3R5bGUoJ29wYWNpdHknLCBpc0hpZGRlbiA/IDAgOiAxKS5jYWxsKCQkLnN1YlhBeGlzLCB0cmFuc2l0aW9uKTtcclxuICB9O1xuXG4gIHZhciBjMyA9IHtcclxuICAgICAgdmVyc2lvbjogJzAuNy4yMCcsXHJcbiAgICAgIGNoYXJ0OiB7XHJcbiAgICAgICAgICBmbjogQ2hhcnQucHJvdG90eXBlLFxyXG4gICAgICAgICAgaW50ZXJuYWw6IHtcclxuICAgICAgICAgICAgICBmbjogQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUsXHJcbiAgICAgICAgICAgICAgYXhpczoge1xyXG4gICAgICAgICAgICAgICAgICBmbjogQXhpc0NsYXNzLnByb3RvdHlwZSxcclxuICAgICAgICAgICAgICAgICAgaW50ZXJuYWw6IHtcclxuICAgICAgICAgICAgICAgICAgICAgIGZuOiBBeGlzSW50ZXJuYWwucHJvdG90eXBlXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIGdlbmVyYXRlOiBmdW5jdGlvbiAoY29uZmlnKSB7XHJcbiAgICAgICAgICByZXR1cm4gbmV3IENoYXJ0KGNvbmZpZyk7XHJcbiAgICAgIH1cclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmJlZm9yZUluaXQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIC8vIGNhbiBkbyBzb21ldGhpbmdcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmFmdGVySW5pdCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgLy8gY2FuIGRvIHNvbWV0aGluZ1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgdmFyICQkID0gdGhpcywgY29uZmlnID0gJCQuY29uZmlnO1xyXG4gICAgICAkJC5pbml0UGFyYW1zKCk7XHJcbiAgICAgIGlmIChjb25maWcuZGF0YV91cmwpIHtcclxuICAgICAgICAgICQkLmNvbnZlcnRVcmxUb0RhdGEoY29uZmlnLmRhdGFfdXJsLCBjb25maWcuZGF0YV9taW1lVHlwZSwgY29uZmlnLmRhdGFfaGVhZGVycywgY29uZmlnLmRhdGFfa2V5cywgJCQuaW5pdFdpdGhEYXRhKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChjb25maWcuZGF0YV9qc29uKSB7XHJcbiAgICAgICAgICAkJC5pbml0V2l0aERhdGEoJCQuY29udmVydEpzb25Ub0RhdGEoY29uZmlnLmRhdGFfanNvbiwgY29uZmlnLmRhdGFfa2V5cykpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKGNvbmZpZy5kYXRhX3Jvd3MpIHtcclxuICAgICAgICAgICQkLmluaXRXaXRoRGF0YSgkJC5jb252ZXJ0Um93c1RvRGF0YShjb25maWcuZGF0YV9yb3dzKSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoY29uZmlnLmRhdGFfY29sdW1ucykge1xyXG4gICAgICAgICAgJCQuaW5pdFdpdGhEYXRhKCQkLmNvbnZlcnRDb2x1bW5zVG9EYXRhKGNvbmZpZy5kYXRhX2NvbHVtbnMpKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICAgIHRocm93IEVycm9yKCd1cmwgb3IganNvbiBvciByb3dzIG9yIGNvbHVtbnMgaXMgcmVxdWlyZWQuJyk7XHJcbiAgICAgIH1cclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmluaXRQYXJhbXMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXMsIGQzID0gJCQuZDMsIGNvbmZpZyA9ICQkLmNvbmZpZztcclxuICAgICAgLy8gTUVNTzogY2xpcElkIG5lZWRzIHRvIGJlIHVuaXF1ZSBiZWNhdXNlIGl0IGNvbmZsaWN0cyB3aGVuIG11bHRpcGxlIGNoYXJ0cyBleGlzdFxyXG4gICAgICAkJC5jbGlwSWQgPSAnYzMtJyArIG5ldyBEYXRlKCkudmFsdWVPZigpICsgJy1jbGlwJztcclxuICAgICAgJCQuY2xpcElkRm9yWEF4aXMgPSAkJC5jbGlwSWQgKyAnLXhheGlzJztcclxuICAgICAgJCQuY2xpcElkRm9yWUF4aXMgPSAkJC5jbGlwSWQgKyAnLXlheGlzJztcclxuICAgICAgJCQuY2xpcElkRm9yR3JpZCA9ICQkLmNsaXBJZCArICctZ3JpZCc7XHJcbiAgICAgICQkLmNsaXBJZEZvclN1YmNoYXJ0ID0gJCQuY2xpcElkICsgJy1zdWJjaGFydCc7XHJcbiAgICAgICQkLmNsaXBQYXRoID0gJCQuZ2V0Q2xpcFBhdGgoJCQuY2xpcElkKTtcclxuICAgICAgJCQuY2xpcFBhdGhGb3JYQXhpcyA9ICQkLmdldENsaXBQYXRoKCQkLmNsaXBJZEZvclhBeGlzKTtcclxuICAgICAgJCQuY2xpcFBhdGhGb3JZQXhpcyA9ICQkLmdldENsaXBQYXRoKCQkLmNsaXBJZEZvcllBeGlzKTtcclxuICAgICAgJCQuY2xpcFBhdGhGb3JHcmlkID0gJCQuZ2V0Q2xpcFBhdGgoJCQuY2xpcElkRm9yR3JpZCk7XHJcbiAgICAgICQkLmNsaXBQYXRoRm9yU3ViY2hhcnQgPSAkJC5nZXRDbGlwUGF0aCgkJC5jbGlwSWRGb3JTdWJjaGFydCk7XHJcbiAgICAgICQkLmRyYWdTdGFydCA9IG51bGw7XHJcbiAgICAgICQkLmRyYWdnaW5nID0gZmFsc2U7XHJcbiAgICAgICQkLmZsb3dpbmcgPSBmYWxzZTtcclxuICAgICAgJCQuY2FuY2VsQ2xpY2sgPSBmYWxzZTtcclxuICAgICAgJCQubW91c2VvdmVyID0gdW5kZWZpbmVkO1xyXG4gICAgICAkJC50cmFuc2l0aW5nID0gZmFsc2U7XHJcbiAgICAgICQkLmNvbG9yID0gJCQuZ2VuZXJhdGVDb2xvcigpO1xyXG4gICAgICAkJC5sZXZlbENvbG9yID0gJCQuZ2VuZXJhdGVMZXZlbENvbG9yKCk7XHJcbiAgICAgICQkLmRhdGFUaW1lUGFyc2UgPSAoY29uZmlnLmRhdGFfeExvY2FsdGltZSA/IGQzLnRpbWVQYXJzZSA6IGQzLnV0Y1BhcnNlKSgkJC5jb25maWcuZGF0YV94Rm9ybWF0KTtcclxuICAgICAgJCQuYXhpc1RpbWVGb3JtYXQgPSBjb25maWcuYXhpc194X2xvY2FsdGltZSA/IGQzLnRpbWVGb3JtYXQgOiBkMy51dGNGb3JtYXQ7XHJcbiAgICAgICQkLmRlZmF1bHRBeGlzVGltZUZvcm1hdCA9IGZ1bmN0aW9uIChkYXRlKSB7XHJcbiAgICAgICAgICBpZiAoZGF0ZS5nZXRNaWxsaXNlY29uZHMoKSkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBkMy50aW1lRm9ybWF0KCcuJUwnKShkYXRlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChkYXRlLmdldFNlY29uZHMoKSkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBkMy50aW1lRm9ybWF0KCc6JVMnKShkYXRlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChkYXRlLmdldE1pbnV0ZXMoKSkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBkMy50aW1lRm9ybWF0KCclSTolTScpKGRhdGUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGRhdGUuZ2V0SG91cnMoKSkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBkMy50aW1lRm9ybWF0KCclSSAlcCcpKGRhdGUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGRhdGUuZ2V0RGF5KCkgJiYgZGF0ZS5nZXREYXRlKCkgIT09IDEpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gZDMudGltZUZvcm1hdCgnJS1tLyUtZCcpKGRhdGUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGRhdGUuZ2V0RGF0ZSgpICE9PSAxKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGQzLnRpbWVGb3JtYXQoJyUtbS8lLWQnKShkYXRlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChkYXRlLmdldE1vbnRoKCkpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gZDMudGltZUZvcm1hdCgnJS1tLyUtZCcpKGRhdGUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIGQzLnRpbWVGb3JtYXQoJyVZLyUtbS8lLWQnKShkYXRlKTtcclxuICAgICAgfTtcclxuICAgICAgJCQuaGlkZGVuVGFyZ2V0SWRzID0gW107XHJcbiAgICAgICQkLmhpZGRlbkxlZ2VuZElkcyA9IFtdO1xyXG4gICAgICAkJC5mb2N1c2VkVGFyZ2V0SWRzID0gW107XHJcbiAgICAgICQkLmRlZm9jdXNlZFRhcmdldElkcyA9IFtdO1xyXG4gICAgICAkJC54T3JpZW50ID0gY29uZmlnLmF4aXNfcm90YXRlZFxyXG4gICAgICAgICAgPyBjb25maWcuYXhpc194X2lubmVyXHJcbiAgICAgICAgICAgICAgPyAncmlnaHQnXHJcbiAgICAgICAgICAgICAgOiAnbGVmdCdcclxuICAgICAgICAgIDogY29uZmlnLmF4aXNfeF9pbm5lclxyXG4gICAgICAgICAgICAgID8gJ3RvcCdcclxuICAgICAgICAgICAgICA6ICdib3R0b20nO1xyXG4gICAgICAkJC55T3JpZW50ID0gY29uZmlnLmF4aXNfcm90YXRlZFxyXG4gICAgICAgICAgPyBjb25maWcuYXhpc195X2lubmVyXHJcbiAgICAgICAgICAgICAgPyAndG9wJ1xyXG4gICAgICAgICAgICAgIDogJ2JvdHRvbSdcclxuICAgICAgICAgIDogY29uZmlnLmF4aXNfeV9pbm5lclxyXG4gICAgICAgICAgICAgID8gJ3JpZ2h0J1xyXG4gICAgICAgICAgICAgIDogJ2xlZnQnO1xyXG4gICAgICAkJC55Mk9yaWVudCA9IGNvbmZpZy5heGlzX3JvdGF0ZWRcclxuICAgICAgICAgID8gY29uZmlnLmF4aXNfeTJfaW5uZXJcclxuICAgICAgICAgICAgICA/ICdib3R0b20nXHJcbiAgICAgICAgICAgICAgOiAndG9wJ1xyXG4gICAgICAgICAgOiBjb25maWcuYXhpc195Ml9pbm5lclxyXG4gICAgICAgICAgICAgID8gJ2xlZnQnXHJcbiAgICAgICAgICAgICAgOiAncmlnaHQnO1xyXG4gICAgICAkJC5zdWJYT3JpZW50ID0gY29uZmlnLmF4aXNfcm90YXRlZCA/ICdsZWZ0JyA6ICdib3R0b20nO1xyXG4gICAgICAkJC5pc0xlZ2VuZFJpZ2h0ID0gY29uZmlnLmxlZ2VuZF9wb3NpdGlvbiA9PT0gJ3JpZ2h0JztcclxuICAgICAgJCQuaXNMZWdlbmRJbnNldCA9IGNvbmZpZy5sZWdlbmRfcG9zaXRpb24gPT09ICdpbnNldCc7XHJcbiAgICAgICQkLmlzTGVnZW5kVG9wID1cclxuICAgICAgICAgIGNvbmZpZy5sZWdlbmRfaW5zZXRfYW5jaG9yID09PSAndG9wLWxlZnQnIHx8XHJcbiAgICAgICAgICAgICAgY29uZmlnLmxlZ2VuZF9pbnNldF9hbmNob3IgPT09ICd0b3AtcmlnaHQnO1xyXG4gICAgICAkJC5pc0xlZ2VuZExlZnQgPVxyXG4gICAgICAgICAgY29uZmlnLmxlZ2VuZF9pbnNldF9hbmNob3IgPT09ICd0b3AtbGVmdCcgfHxcclxuICAgICAgICAgICAgICBjb25maWcubGVnZW5kX2luc2V0X2FuY2hvciA9PT0gJ2JvdHRvbS1sZWZ0JztcclxuICAgICAgJCQubGVnZW5kU3RlcCA9IDA7XHJcbiAgICAgICQkLmxlZ2VuZEl0ZW1XaWR0aCA9IDA7XHJcbiAgICAgICQkLmxlZ2VuZEl0ZW1IZWlnaHQgPSAwO1xyXG4gICAgICAkJC5jdXJyZW50TWF4VGlja1dpZHRocyA9IHtcclxuICAgICAgICAgIHg6IDAsXHJcbiAgICAgICAgICB5OiAwLFxyXG4gICAgICAgICAgeTI6IDBcclxuICAgICAgfTtcclxuICAgICAgJCQucm90YXRlZF9wYWRkaW5nX2xlZnQgPSAzMDtcclxuICAgICAgJCQucm90YXRlZF9wYWRkaW5nX3JpZ2h0ID0gY29uZmlnLmF4aXNfcm90YXRlZCAmJiAhY29uZmlnLmF4aXNfeF9zaG93ID8gMCA6IDMwO1xyXG4gICAgICAkJC5yb3RhdGVkX3BhZGRpbmdfdG9wID0gNTtcclxuICAgICAgJCQud2l0aG91dEZhZGVJbiA9IHt9O1xyXG4gICAgICAkJC5pbnRlcnZhbEZvck9ic2VydmVJbnNlcnRlZCA9IHVuZGVmaW5lZDtcclxuICAgICAgJCQuYXhlcy5zdWJ4ID0gZDMuc2VsZWN0QWxsKFtdKTsgLy8gbmVlZHMgd2hlbiBleGNsdWRpbmcgc3ViY2hhcnQuanNcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmluaXRDaGFydEVsZW1lbnRzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICBpZiAodGhpcy5pbml0QmFyKSB7XHJcbiAgICAgICAgICB0aGlzLmluaXRCYXIoKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5pbml0TGluZSkge1xyXG4gICAgICAgICAgdGhpcy5pbml0TGluZSgpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmluaXRBcmMpIHtcclxuICAgICAgICAgIHRoaXMuaW5pdEFyYygpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmluaXRHYXVnZSkge1xyXG4gICAgICAgICAgdGhpcy5pbml0R2F1Z2UoKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5pbml0VGV4dCkge1xyXG4gICAgICAgICAgdGhpcy5pbml0VGV4dCgpO1xyXG4gICAgICB9XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5pbml0V2l0aERhdGEgPSBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzLCBkMyA9ICQkLmQzLCBjb25maWcgPSAkJC5jb25maWc7XHJcbiAgICAgIHZhciBkZWZzLCBtYWluLCBiaW5kaW5nID0gdHJ1ZTtcclxuICAgICAgJCQuYXhpcyA9IG5ldyBBeGlzQ2xhc3MoJCQpO1xyXG4gICAgICBpZiAoIWNvbmZpZy5iaW5kdG8pIHtcclxuICAgICAgICAgICQkLnNlbGVjdENoYXJ0ID0gZDMuc2VsZWN0QWxsKFtdKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0eXBlb2YgY29uZmlnLmJpbmR0by5ub2RlID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAkJC5zZWxlY3RDaGFydCA9IGNvbmZpZy5iaW5kdG87XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAkJC5zZWxlY3RDaGFydCA9IGQzLnNlbGVjdChjb25maWcuYmluZHRvKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoJCQuc2VsZWN0Q2hhcnQuZW1wdHkoKSkge1xyXG4gICAgICAgICAgJCQuc2VsZWN0Q2hhcnQgPSBkM1xyXG4gICAgICAgICAgICAgIC5zZWxlY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpXHJcbiAgICAgICAgICAgICAgLnN0eWxlKCdvcGFjaXR5JywgMCk7XHJcbiAgICAgICAgICAkJC5vYnNlcnZlSW5zZXJ0ZWQoJCQuc2VsZWN0Q2hhcnQpO1xyXG4gICAgICAgICAgYmluZGluZyA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgICQkLnNlbGVjdENoYXJ0Lmh0bWwoJycpLmNsYXNzZWQoJ2MzJywgdHJ1ZSk7XHJcbiAgICAgIC8vIEluaXQgZGF0YSBhcyB0YXJnZXRzXHJcbiAgICAgICQkLmRhdGEueHMgPSB7fTtcclxuICAgICAgJCQuZGF0YS50YXJnZXRzID0gJCQuY29udmVydERhdGFUb1RhcmdldHMoZGF0YSk7XHJcbiAgICAgIGlmIChjb25maWcuZGF0YV9maWx0ZXIpIHtcclxuICAgICAgICAgICQkLmRhdGEudGFyZ2V0cyA9ICQkLmRhdGEudGFyZ2V0cy5maWx0ZXIoY29uZmlnLmRhdGFfZmlsdGVyKTtcclxuICAgICAgfVxyXG4gICAgICAvLyBTZXQgdGFyZ2V0cyB0byBoaWRlIGlmIG5lZWRlZFxyXG4gICAgICBpZiAoY29uZmlnLmRhdGFfaGlkZSkge1xyXG4gICAgICAgICAgJCQuYWRkSGlkZGVuVGFyZ2V0SWRzKGNvbmZpZy5kYXRhX2hpZGUgPT09IHRydWVcclxuICAgICAgICAgICAgICA/ICQkLm1hcFRvSWRzKCQkLmRhdGEudGFyZ2V0cylcclxuICAgICAgICAgICAgICA6IGNvbmZpZy5kYXRhX2hpZGUpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcubGVnZW5kX2hpZGUpIHtcclxuICAgICAgICAgICQkLmFkZEhpZGRlbkxlZ2VuZElkcyhjb25maWcubGVnZW5kX2hpZGUgPT09IHRydWVcclxuICAgICAgICAgICAgICA/ICQkLm1hcFRvSWRzKCQkLmRhdGEudGFyZ2V0cylcclxuICAgICAgICAgICAgICA6IGNvbmZpZy5sZWdlbmRfaGlkZSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCQkLmlzU3RhbmZvcmRHcmFwaFR5cGUoKSkge1xyXG4gICAgICAgICAgJCQuaW5pdFN0YW5mb3JkRGF0YSgpO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIEluaXQgc2l6ZXMgYW5kIHNjYWxlc1xyXG4gICAgICAkJC51cGRhdGVTaXplcygpO1xyXG4gICAgICAkJC51cGRhdGVTY2FsZXMoKTtcclxuICAgICAgLy8gU2V0IGRvbWFpbnMgZm9yIGVhY2ggc2NhbGVcclxuICAgICAgJCQueC5kb21haW4oZDMuZXh0ZW50KCQkLmdldFhEb21haW4oJCQuZGF0YS50YXJnZXRzKSkpO1xyXG4gICAgICAkJC55LmRvbWFpbigkJC5nZXRZRG9tYWluKCQkLmRhdGEudGFyZ2V0cywgJ3knKSk7XHJcbiAgICAgICQkLnkyLmRvbWFpbigkJC5nZXRZRG9tYWluKCQkLmRhdGEudGFyZ2V0cywgJ3kyJykpO1xyXG4gICAgICAkJC5zdWJYLmRvbWFpbigkJC54LmRvbWFpbigpKTtcclxuICAgICAgJCQuc3ViWS5kb21haW4oJCQueS5kb21haW4oKSk7XHJcbiAgICAgICQkLnN1YlkyLmRvbWFpbigkJC55Mi5kb21haW4oKSk7XHJcbiAgICAgIC8vIFNhdmUgb3JpZ2luYWwgeCBkb21haW4gZm9yIHpvb20gdXBkYXRlXHJcbiAgICAgICQkLm9yZ1hEb21haW4gPSAkJC54LmRvbWFpbigpO1xyXG4gICAgICAvKi0tIEJhc2ljIEVsZW1lbnRzIC0tKi9cclxuICAgICAgLy8gRGVmaW5lIHN2Z3NcclxuICAgICAgJCQuc3ZnID0gJCQuc2VsZWN0Q2hhcnRcclxuICAgICAgICAgIC5hcHBlbmQoJ3N2ZycpXHJcbiAgICAgICAgICAuc3R5bGUoJ292ZXJmbG93JywgJ2hpZGRlbicpXHJcbiAgICAgICAgICAub24oJ21vdXNlZW50ZXInLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICByZXR1cm4gY29uZmlnLm9ubW91c2VvdmVyLmNhbGwoJCQpO1xyXG4gICAgICB9KVxyXG4gICAgICAgICAgLm9uKCdtb3VzZWxlYXZlJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgcmV0dXJuIGNvbmZpZy5vbm1vdXNlb3V0LmNhbGwoJCQpO1xyXG4gICAgICB9KTtcclxuICAgICAgaWYgKCQkLmNvbmZpZy5zdmdfY2xhc3NuYW1lKSB7XHJcbiAgICAgICAgICAkJC5zdmcuYXR0cignY2xhc3MnLCAkJC5jb25maWcuc3ZnX2NsYXNzbmFtZSk7XHJcbiAgICAgIH1cclxuICAgICAgLy8gRGVmaW5lIGRlZnNcclxuICAgICAgZGVmcyA9ICQkLnN2Zy5hcHBlbmQoJ2RlZnMnKTtcclxuICAgICAgJCQuY2xpcENoYXJ0ID0gJCQuYXBwZW5kQ2xpcChkZWZzLCAkJC5jbGlwSWQpO1xyXG4gICAgICAkJC5jbGlwWEF4aXMgPSAkJC5hcHBlbmRDbGlwKGRlZnMsICQkLmNsaXBJZEZvclhBeGlzKTtcclxuICAgICAgJCQuY2xpcFlBeGlzID0gJCQuYXBwZW5kQ2xpcChkZWZzLCAkJC5jbGlwSWRGb3JZQXhpcyk7XHJcbiAgICAgICQkLmNsaXBHcmlkID0gJCQuYXBwZW5kQ2xpcChkZWZzLCAkJC5jbGlwSWRGb3JHcmlkKTtcclxuICAgICAgJCQuY2xpcFN1YmNoYXJ0ID0gJCQuYXBwZW5kQ2xpcChkZWZzLCAkJC5jbGlwSWRGb3JTdWJjaGFydCk7XHJcbiAgICAgICQkLnVwZGF0ZVN2Z1NpemUoKTtcclxuICAgICAgLy8gRGVmaW5lIHJlZ2lvbnNcclxuICAgICAgbWFpbiA9ICQkLm1haW4gPSAkJC5zdmcuYXBwZW5kKCdnJykuYXR0cigndHJhbnNmb3JtJywgJCQuZ2V0VHJhbnNsYXRlKCdtYWluJykpO1xyXG4gICAgICBpZiAoJCQuaW5pdFBpZSkge1xyXG4gICAgICAgICAgJCQuaW5pdFBpZSgpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICgkJC5pbml0RHJhZ1pvb20pIHtcclxuICAgICAgICAgICQkLmluaXREcmFnWm9vbSgpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuc3ViY2hhcnRfc2hvdyAmJiAkJC5pbml0U3ViY2hhcnQpIHtcclxuICAgICAgICAgICQkLmluaXRTdWJjaGFydCgpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICgkJC5pbml0VG9vbHRpcCkge1xyXG4gICAgICAgICAgJCQuaW5pdFRvb2x0aXAoKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoJCQuaW5pdExlZ2VuZCkge1xyXG4gICAgICAgICAgJCQuaW5pdExlZ2VuZCgpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICgkJC5pbml0VGl0bGUpIHtcclxuICAgICAgICAgICQkLmluaXRUaXRsZSgpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICgkJC5pbml0Wm9vbSkge1xyXG4gICAgICAgICAgJCQuaW5pdFpvb20oKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoJCQuaXNTdGFuZm9yZEdyYXBoVHlwZSgpKSB7XHJcbiAgICAgICAgICAkJC5kcmF3Q29sb3JTY2FsZSgpO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIFVwZGF0ZSBzZWxlY3Rpb24gYmFzZWQgb24gc2l6ZSBhbmQgc2NhbGVcclxuICAgICAgLy8gVE9ETzogY3VycmVudGx5IHRoaXMgbXVzdCBiZSBjYWxsZWQgYWZ0ZXIgaW5pdExlZ2VuZCBiZWNhdXNlIG9mIHVwZGF0ZSBvZiBzaXplcywgYnV0IGl0IHNob3VsZCBiZSBkb25lIGluIGluaXRTdWJjaGFydC5cclxuICAgICAgaWYgKGNvbmZpZy5zdWJjaGFydF9zaG93ICYmICQkLmluaXRTdWJjaGFydEJydXNoKSB7XHJcbiAgICAgICAgICAkJC5pbml0U3ViY2hhcnRCcnVzaCgpO1xyXG4gICAgICB9XHJcbiAgICAgIC8qLS0gTWFpbiBSZWdpb24gLS0qL1xyXG4gICAgICAvLyB0ZXh0IHdoZW4gZW1wdHlcclxuICAgICAgbWFpblxyXG4gICAgICAgICAgLmFwcGVuZCgndGV4dCcpXHJcbiAgICAgICAgICAuYXR0cignY2xhc3MnLCBDTEFTUy50ZXh0ICsgJyAnICsgQ0xBU1MuZW1wdHkpXHJcbiAgICAgICAgICAuYXR0cigndGV4dC1hbmNob3InLCAnbWlkZGxlJykgLy8gaG9yaXpvbnRhbCBjZW50ZXJpbmcgb2YgdGV4dCBhdCB4IHBvc2l0aW9uIGluIGFsbCBicm93c2Vycy5cclxuICAgICAgICAgIC5hdHRyKCdkb21pbmFudC1iYXNlbGluZScsICdtaWRkbGUnKTsgLy8gdmVydGljYWwgY2VudGVyaW5nIG9mIHRleHQgYXQgeSBwb3NpdGlvbiBpbiBhbGwgYnJvd3NlcnMsIGV4Y2VwdCBJRS5cclxuICAgICAgLy8gUmVnaW9uc1xyXG4gICAgICAkJC5pbml0UmVnaW9uKCk7XHJcbiAgICAgIC8vIEdyaWRzXHJcbiAgICAgICQkLmluaXRHcmlkKCk7XHJcbiAgICAgIC8vIERlZmluZSBnIGZvciBjaGFydCBhcmVhXHJcbiAgICAgIG1haW5cclxuICAgICAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAgICAgLmF0dHIoJ2NsaXAtcGF0aCcsICQkLmNsaXBQYXRoKVxyXG4gICAgICAgICAgLmF0dHIoJ2NsYXNzJywgQ0xBU1MuY2hhcnQpO1xyXG4gICAgICAvLyBHcmlkIGxpbmVzXHJcbiAgICAgIGlmIChjb25maWcuZ3JpZF9saW5lc19mcm9udCkge1xyXG4gICAgICAgICAgJCQuaW5pdEdyaWRMaW5lcygpO1xyXG4gICAgICB9XHJcbiAgICAgICQkLmluaXRTdGFuZm9yZEVsZW1lbnRzKCk7XHJcbiAgICAgIC8vIENvdmVyIHdob2xlIHdpdGggcmVjdHMgZm9yIGV2ZW50c1xyXG4gICAgICAkJC5pbml0RXZlbnRSZWN0KCk7XHJcbiAgICAgIC8vIERlZmluZSBnIGZvciBjaGFydFxyXG4gICAgICAkJC5pbml0Q2hhcnRFbGVtZW50cygpO1xyXG4gICAgICAvLyBBZGQgQXhpc1xyXG4gICAgICAkJC5heGlzLmluaXQoKTtcclxuICAgICAgLy8gU2V0IHRhcmdldHNcclxuICAgICAgJCQudXBkYXRlVGFyZ2V0cygkJC5kYXRhLnRhcmdldHMpO1xyXG4gICAgICAvLyBTZXQgZGVmYXVsdCBleHRlbnQgaWYgZGVmaW5lZFxyXG4gICAgICBpZiAoY29uZmlnLmF4aXNfeF9zZWxlY3Rpb24pIHtcclxuICAgICAgICAgICQkLmJydXNoLnNlbGVjdGlvbkFzVmFsdWUoJCQuZ2V0RGVmYXVsdFNlbGVjdGlvbigpKTtcclxuICAgICAgfVxyXG4gICAgICAvLyBEcmF3IHdpdGggdGFyZ2V0c1xyXG4gICAgICBpZiAoYmluZGluZykge1xyXG4gICAgICAgICAgJCQudXBkYXRlRGltZW5zaW9uKCk7XHJcbiAgICAgICAgICAkJC5jb25maWcub25pbml0LmNhbGwoJCQpO1xyXG4gICAgICAgICAgJCQucmVkcmF3KHtcclxuICAgICAgICAgICAgICB3aXRoVHJhbnNpdGlvbjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgd2l0aFRyYW5zZm9ybTogdHJ1ZSxcclxuICAgICAgICAgICAgICB3aXRoVXBkYXRlWERvbWFpbjogdHJ1ZSxcclxuICAgICAgICAgICAgICB3aXRoVXBkYXRlT3JnWERvbWFpbjogdHJ1ZSxcclxuICAgICAgICAgICAgICB3aXRoVHJhbnNpdGlvbkZvckF4aXM6IGZhbHNlXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICAvLyBCaW5kIHRvIHJlc2l6ZSBldmVudFxyXG4gICAgICAkJC5iaW5kUmVzaXplKCk7XHJcbiAgICAgIC8vIEJpbmQgdG8gd2luZG93IGZvY3VzIGV2ZW50XHJcbiAgICAgICQkLmJpbmRXaW5kb3dGb2N1cygpO1xyXG4gICAgICAvLyBleHBvcnQgZWxlbWVudCBvZiB0aGUgY2hhcnRcclxuICAgICAgJCQuYXBpLmVsZW1lbnQgPSAkJC5zZWxlY3RDaGFydC5ub2RlKCk7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5zbW9vdGhMaW5lcyA9IGZ1bmN0aW9uIChlbCwgdHlwZSkge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzO1xyXG4gICAgICBpZiAodHlwZSA9PT0gJ2dyaWQnKSB7XHJcbiAgICAgICAgICBlbC5lYWNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICB2YXIgZyA9ICQkLmQzLnNlbGVjdCh0aGlzKSwgeDEgPSBnLmF0dHIoJ3gxJyksIHgyID0gZy5hdHRyKCd4MicpLCB5MSA9IGcuYXR0cigneTEnKSwgeTIgPSBnLmF0dHIoJ3kyJyk7XHJcbiAgICAgICAgICAgICAgZy5hdHRyKHtcclxuICAgICAgICAgICAgICAgICAgeDE6IE1hdGguY2VpbCh4MSksXHJcbiAgICAgICAgICAgICAgICAgIHgyOiBNYXRoLmNlaWwoeDIpLFxyXG4gICAgICAgICAgICAgICAgICB5MTogTWF0aC5jZWlsKHkxKSxcclxuICAgICAgICAgICAgICAgICAgeTI6IE1hdGguY2VpbCh5MilcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS51cGRhdGVTaXplcyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgdmFyICQkID0gdGhpcywgY29uZmlnID0gJCQuY29uZmlnO1xyXG4gICAgICB2YXIgbGVnZW5kSGVpZ2h0ID0gJCQubGVnZW5kID8gJCQuZ2V0TGVnZW5kSGVpZ2h0KCkgOiAwLCBsZWdlbmRXaWR0aCA9ICQkLmxlZ2VuZCA/ICQkLmdldExlZ2VuZFdpZHRoKCkgOiAwLCBsZWdlbmRIZWlnaHRGb3JCb3R0b20gPSAkJC5pc0xlZ2VuZFJpZ2h0IHx8ICQkLmlzTGVnZW5kSW5zZXQgPyAwIDogbGVnZW5kSGVpZ2h0LCBoYXNBcmMgPSAkJC5oYXNBcmNUeXBlKCksIHhBeGlzSGVpZ2h0ID0gY29uZmlnLmF4aXNfcm90YXRlZCB8fCBoYXNBcmMgPyAwIDogJCQuZ2V0SG9yaXpvbnRhbEF4aXNIZWlnaHQoJ3gnKSwgc3ViY2hhcnRYQXhpc0hlaWdodCA9IGNvbmZpZy5heGlzX3JvdGF0ZWQgfHwgaGFzQXJjID8gMCA6ICQkLmdldEhvcml6b250YWxBeGlzSGVpZ2h0KCd4JywgdHJ1ZSksIHN1YmNoYXJ0SGVpZ2h0ID0gY29uZmlnLnN1YmNoYXJ0X3Nob3cgJiYgIWhhc0FyY1xyXG4gICAgICAgICAgPyBjb25maWcuc3ViY2hhcnRfc2l6ZV9oZWlnaHQgKyBzdWJjaGFydFhBeGlzSGVpZ2h0XHJcbiAgICAgICAgICA6IDA7XHJcbiAgICAgICQkLmN1cnJlbnRXaWR0aCA9ICQkLmdldEN1cnJlbnRXaWR0aCgpO1xyXG4gICAgICAkJC5jdXJyZW50SGVpZ2h0ID0gJCQuZ2V0Q3VycmVudEhlaWdodCgpO1xyXG4gICAgICAvLyBmb3IgbWFpblxyXG4gICAgICAkJC5tYXJnaW4gPSBjb25maWcuYXhpc19yb3RhdGVkXHJcbiAgICAgICAgICA/IHtcclxuICAgICAgICAgICAgICB0b3A6ICQkLmdldEhvcml6b250YWxBeGlzSGVpZ2h0KCd5MicpICsgJCQuZ2V0Q3VycmVudFBhZGRpbmdUb3AoKSxcclxuICAgICAgICAgICAgICByaWdodDogaGFzQXJjID8gMCA6ICQkLmdldEN1cnJlbnRQYWRkaW5nUmlnaHQoKSxcclxuICAgICAgICAgICAgICBib3R0b206ICQkLmdldEhvcml6b250YWxBeGlzSGVpZ2h0KCd5JykgK1xyXG4gICAgICAgICAgICAgICAgICBsZWdlbmRIZWlnaHRGb3JCb3R0b20gK1xyXG4gICAgICAgICAgICAgICAgICAkJC5nZXRDdXJyZW50UGFkZGluZ0JvdHRvbSgpLFxyXG4gICAgICAgICAgICAgIGxlZnQ6IHN1YmNoYXJ0SGVpZ2h0ICsgKGhhc0FyYyA/IDAgOiAkJC5nZXRDdXJyZW50UGFkZGluZ0xlZnQoKSlcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIDoge1xyXG4gICAgICAgICAgICAgIHRvcDogNCArICQkLmdldEN1cnJlbnRQYWRkaW5nVG9wKCksXHJcbiAgICAgICAgICAgICAgcmlnaHQ6IGhhc0FyYyA/IDAgOiAkJC5nZXRDdXJyZW50UGFkZGluZ1JpZ2h0KCksXHJcbiAgICAgICAgICAgICAgYm90dG9tOiB4QXhpc0hlaWdodCArXHJcbiAgICAgICAgICAgICAgICAgIHN1YmNoYXJ0SGVpZ2h0ICtcclxuICAgICAgICAgICAgICAgICAgbGVnZW5kSGVpZ2h0Rm9yQm90dG9tICtcclxuICAgICAgICAgICAgICAgICAgJCQuZ2V0Q3VycmVudFBhZGRpbmdCb3R0b20oKSxcclxuICAgICAgICAgICAgICBsZWZ0OiBoYXNBcmMgPyAwIDogJCQuZ2V0Q3VycmVudFBhZGRpbmdMZWZ0KClcclxuICAgICAgICAgIH07XHJcbiAgICAgIC8vIGZvciBzdWJjaGFydFxyXG4gICAgICAkJC5tYXJnaW4yID0gY29uZmlnLmF4aXNfcm90YXRlZFxyXG4gICAgICAgICAgPyB7XHJcbiAgICAgICAgICAgICAgdG9wOiAkJC5tYXJnaW4udG9wLFxyXG4gICAgICAgICAgICAgIHJpZ2h0OiBOYU4sXHJcbiAgICAgICAgICAgICAgYm90dG9tOiAyMCArIGxlZ2VuZEhlaWdodEZvckJvdHRvbSxcclxuICAgICAgICAgICAgICBsZWZ0OiAkJC5yb3RhdGVkX3BhZGRpbmdfbGVmdFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgOiB7XHJcbiAgICAgICAgICAgICAgdG9wOiAkJC5jdXJyZW50SGVpZ2h0IC0gc3ViY2hhcnRIZWlnaHQgLSBsZWdlbmRIZWlnaHRGb3JCb3R0b20sXHJcbiAgICAgICAgICAgICAgcmlnaHQ6IE5hTixcclxuICAgICAgICAgICAgICBib3R0b206IHN1YmNoYXJ0WEF4aXNIZWlnaHQgKyBsZWdlbmRIZWlnaHRGb3JCb3R0b20sXHJcbiAgICAgICAgICAgICAgbGVmdDogJCQubWFyZ2luLmxlZnRcclxuICAgICAgICAgIH07XHJcbiAgICAgIC8vIGZvciBsZWdlbmRcclxuICAgICAgJCQubWFyZ2luMyA9IHtcclxuICAgICAgICAgIHRvcDogMCxcclxuICAgICAgICAgIHJpZ2h0OiBOYU4sXHJcbiAgICAgICAgICBib3R0b206IDAsXHJcbiAgICAgICAgICBsZWZ0OiAwXHJcbiAgICAgIH07XHJcbiAgICAgIGlmICgkJC51cGRhdGVTaXplRm9yTGVnZW5kKSB7XHJcbiAgICAgICAgICAkJC51cGRhdGVTaXplRm9yTGVnZW5kKGxlZ2VuZEhlaWdodCwgbGVnZW5kV2lkdGgpO1xyXG4gICAgICB9XHJcbiAgICAgICQkLndpZHRoID0gJCQuY3VycmVudFdpZHRoIC0gJCQubWFyZ2luLmxlZnQgLSAkJC5tYXJnaW4ucmlnaHQ7XHJcbiAgICAgICQkLmhlaWdodCA9ICQkLmN1cnJlbnRIZWlnaHQgLSAkJC5tYXJnaW4udG9wIC0gJCQubWFyZ2luLmJvdHRvbTtcclxuICAgICAgaWYgKCQkLndpZHRoIDwgMCkge1xyXG4gICAgICAgICAgJCQud2lkdGggPSAwO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICgkJC5oZWlnaHQgPCAwKSB7XHJcbiAgICAgICAgICAkJC5oZWlnaHQgPSAwO1xyXG4gICAgICB9XHJcbiAgICAgICQkLndpZHRoMiA9IGNvbmZpZy5heGlzX3JvdGF0ZWRcclxuICAgICAgICAgID8gJCQubWFyZ2luLmxlZnQgLSAkJC5yb3RhdGVkX3BhZGRpbmdfbGVmdCAtICQkLnJvdGF0ZWRfcGFkZGluZ19yaWdodFxyXG4gICAgICAgICAgOiAkJC53aWR0aDtcclxuICAgICAgJCQuaGVpZ2h0MiA9IGNvbmZpZy5heGlzX3JvdGF0ZWRcclxuICAgICAgICAgID8gJCQuaGVpZ2h0XHJcbiAgICAgICAgICA6ICQkLmN1cnJlbnRIZWlnaHQgLSAkJC5tYXJnaW4yLnRvcCAtICQkLm1hcmdpbjIuYm90dG9tO1xyXG4gICAgICBpZiAoJCQud2lkdGgyIDwgMCkge1xyXG4gICAgICAgICAgJCQud2lkdGgyID0gMDtcclxuICAgICAgfVxyXG4gICAgICBpZiAoJCQuaGVpZ2h0MiA8IDApIHtcclxuICAgICAgICAgICQkLmhlaWdodDIgPSAwO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIGZvciBhcmNcclxuICAgICAgJCQuYXJjV2lkdGggPSAkJC53aWR0aCAtICgkJC5pc0xlZ2VuZFJpZ2h0ID8gbGVnZW5kV2lkdGggKyAxMCA6IDApO1xyXG4gICAgICAkJC5hcmNIZWlnaHQgPSAkJC5oZWlnaHQgLSAoJCQuaXNMZWdlbmRSaWdodCA/IDAgOiAxMCk7XHJcbiAgICAgIGlmICgkJC5oYXNUeXBlKCdnYXVnZScpICYmICFjb25maWcuZ2F1Z2VfZnVsbENpcmNsZSkge1xyXG4gICAgICAgICAgJCQuYXJjSGVpZ2h0ICs9ICQkLmhlaWdodCAtICQkLmdldEdhdWdlTGFiZWxIZWlnaHQoKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoJCQudXBkYXRlUmFkaXVzKSB7XHJcbiAgICAgICAgICAkJC51cGRhdGVSYWRpdXMoKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoJCQuaXNMZWdlbmRSaWdodCAmJiBoYXNBcmMpIHtcclxuICAgICAgICAgICQkLm1hcmdpbjMubGVmdCA9ICQkLmFyY1dpZHRoIC8gMiArICQkLnJhZGl1c0V4cGFuZGVkICogMS4xO1xyXG4gICAgICB9XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS51cGRhdGVUYXJnZXRzID0gZnVuY3Rpb24gKHRhcmdldHMpIHtcclxuICAgICAgdmFyICQkID0gdGhpcywgY29uZmlnID0gJCQuY29uZmlnO1xyXG4gICAgICAvKi0tIE1haW4gLS0qL1xyXG4gICAgICAvLy0tIFRleHQgLS0vL1xyXG4gICAgICAkJC51cGRhdGVUYXJnZXRzRm9yVGV4dCh0YXJnZXRzKTtcclxuICAgICAgLy8tLSBCYXIgLS0vL1xyXG4gICAgICAkJC51cGRhdGVUYXJnZXRzRm9yQmFyKHRhcmdldHMpO1xyXG4gICAgICAvLy0tIExpbmUgLS0vL1xyXG4gICAgICAkJC51cGRhdGVUYXJnZXRzRm9yTGluZSh0YXJnZXRzKTtcclxuICAgICAgLy8tLSBBcmMgLS0vL1xyXG4gICAgICBpZiAoJCQuaGFzQXJjVHlwZSgpICYmICQkLnVwZGF0ZVRhcmdldHNGb3JBcmMpIHtcclxuICAgICAgICAgICQkLnVwZGF0ZVRhcmdldHNGb3JBcmModGFyZ2V0cyk7XHJcbiAgICAgIH1cclxuICAgICAgLyotLSBTdWIgLS0qL1xyXG4gICAgICBpZiAoY29uZmlnLnN1YmNoYXJ0X3Nob3cgJiYgJCQudXBkYXRlVGFyZ2V0c0ZvclN1YmNoYXJ0KSB7XHJcbiAgICAgICAgICAkJC51cGRhdGVUYXJnZXRzRm9yU3ViY2hhcnQodGFyZ2V0cyk7XHJcbiAgICAgIH1cclxuICAgICAgLy8gRmFkZS1pbiBlYWNoIGNoYXJ0XHJcbiAgICAgICQkLnNob3dUYXJnZXRzKCk7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5zaG93VGFyZ2V0cyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgdmFyICQkID0gdGhpcztcclxuICAgICAgJCQuc3ZnXHJcbiAgICAgICAgICAuc2VsZWN0QWxsKCcuJyArIENMQVNTLnRhcmdldClcclxuICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIHJldHVybiAkJC5pc1RhcmdldFRvU2hvdyhkLmlkKTtcclxuICAgICAgfSlcclxuICAgICAgICAgIC50cmFuc2l0aW9uKClcclxuICAgICAgICAgIC5kdXJhdGlvbigkJC5jb25maWcudHJhbnNpdGlvbl9kdXJhdGlvbilcclxuICAgICAgICAgIC5zdHlsZSgnb3BhY2l0eScsIDEpO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUucmVkcmF3ID0gZnVuY3Rpb24gKG9wdGlvbnMsIHRyYW5zaXRpb25zKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXMsIG1haW4gPSAkJC5tYWluLCBkMyA9ICQkLmQzLCBjb25maWcgPSAkJC5jb25maWc7XHJcbiAgICAgIHZhciBhcmVhSW5kaWNlcyA9ICQkLmdldFNoYXBlSW5kaWNlcygkJC5pc0FyZWFUeXBlKSwgYmFySW5kaWNlcyA9ICQkLmdldFNoYXBlSW5kaWNlcygkJC5pc0JhclR5cGUpLCBsaW5lSW5kaWNlcyA9ICQkLmdldFNoYXBlSW5kaWNlcygkJC5pc0xpbmVUeXBlKTtcclxuICAgICAgdmFyIHdpdGhZLCB3aXRoU3ViY2hhcnQsIHdpdGhUcmFuc2l0aW9uLCB3aXRoVHJhbnNpdGlvbkZvckV4aXQsIHdpdGhUcmFuc2l0aW9uRm9yQXhpcywgd2l0aFRyYW5zZm9ybSwgd2l0aFVwZGF0ZVhEb21haW4sIHdpdGhVcGRhdGVPcmdYRG9tYWluLCB3aXRoVHJpbVhEb21haW4sIHdpdGhMZWdlbmQsIHdpdGhFdmVudFJlY3QsIHdpdGhEaW1lbnNpb24sIHdpdGhVcGRhdGVYQXhpcztcclxuICAgICAgdmFyIGhpZGVBeGlzID0gJCQuaGFzQXJjVHlwZSgpO1xyXG4gICAgICB2YXIgZHJhd0FyZWEsIGRyYXdCYXIsIGRyYXdMaW5lLCB4Rm9yVGV4dCwgeUZvclRleHQ7XHJcbiAgICAgIHZhciBkdXJhdGlvbiwgZHVyYXRpb25Gb3JFeGl0LCBkdXJhdGlvbkZvckF4aXM7XHJcbiAgICAgIHZhciB0cmFuc2l0aW9uc1RvV2FpdCwgd2FpdEZvckRyYXcsIGZsb3csIHRyYW5zaXRpb247XHJcbiAgICAgIHZhciB0YXJnZXRzVG9TaG93ID0gJCQuZmlsdGVyVGFyZ2V0c1RvU2hvdygkJC5kYXRhLnRhcmdldHMpLCB0aWNrVmFsdWVzLCBpLCBpbnRlcnZhbEZvckN1bGxpbmcsIHhEb21haW5Gb3Jab29tO1xyXG4gICAgICB2YXIgeHYgPSAkJC54di5iaW5kKCQkKSwgY3gsIGN5O1xyXG4gICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcclxuICAgICAgd2l0aFkgPSBnZXRPcHRpb24ob3B0aW9ucywgJ3dpdGhZJywgdHJ1ZSk7XHJcbiAgICAgIHdpdGhTdWJjaGFydCA9IGdldE9wdGlvbihvcHRpb25zLCAnd2l0aFN1YmNoYXJ0JywgdHJ1ZSk7XHJcbiAgICAgIHdpdGhUcmFuc2l0aW9uID0gZ2V0T3B0aW9uKG9wdGlvbnMsICd3aXRoVHJhbnNpdGlvbicsIHRydWUpO1xyXG4gICAgICB3aXRoVHJhbnNmb3JtID0gZ2V0T3B0aW9uKG9wdGlvbnMsICd3aXRoVHJhbnNmb3JtJywgZmFsc2UpO1xyXG4gICAgICB3aXRoVXBkYXRlWERvbWFpbiA9IGdldE9wdGlvbihvcHRpb25zLCAnd2l0aFVwZGF0ZVhEb21haW4nLCBmYWxzZSk7XHJcbiAgICAgIHdpdGhVcGRhdGVPcmdYRG9tYWluID0gZ2V0T3B0aW9uKG9wdGlvbnMsICd3aXRoVXBkYXRlT3JnWERvbWFpbicsIGZhbHNlKTtcclxuICAgICAgd2l0aFRyaW1YRG9tYWluID0gZ2V0T3B0aW9uKG9wdGlvbnMsICd3aXRoVHJpbVhEb21haW4nLCB0cnVlKTtcclxuICAgICAgd2l0aFVwZGF0ZVhBeGlzID0gZ2V0T3B0aW9uKG9wdGlvbnMsICd3aXRoVXBkYXRlWEF4aXMnLCB3aXRoVXBkYXRlWERvbWFpbik7XHJcbiAgICAgIHdpdGhMZWdlbmQgPSBnZXRPcHRpb24ob3B0aW9ucywgJ3dpdGhMZWdlbmQnLCBmYWxzZSk7XHJcbiAgICAgIHdpdGhFdmVudFJlY3QgPSBnZXRPcHRpb24ob3B0aW9ucywgJ3dpdGhFdmVudFJlY3QnLCB0cnVlKTtcclxuICAgICAgd2l0aERpbWVuc2lvbiA9IGdldE9wdGlvbihvcHRpb25zLCAnd2l0aERpbWVuc2lvbicsIHRydWUpO1xyXG4gICAgICB3aXRoVHJhbnNpdGlvbkZvckV4aXQgPSBnZXRPcHRpb24ob3B0aW9ucywgJ3dpdGhUcmFuc2l0aW9uRm9yRXhpdCcsIHdpdGhUcmFuc2l0aW9uKTtcclxuICAgICAgd2l0aFRyYW5zaXRpb25Gb3JBeGlzID0gZ2V0T3B0aW9uKG9wdGlvbnMsICd3aXRoVHJhbnNpdGlvbkZvckF4aXMnLCB3aXRoVHJhbnNpdGlvbik7XHJcbiAgICAgIGR1cmF0aW9uID0gd2l0aFRyYW5zaXRpb24gPyBjb25maWcudHJhbnNpdGlvbl9kdXJhdGlvbiA6IDA7XHJcbiAgICAgIGR1cmF0aW9uRm9yRXhpdCA9IHdpdGhUcmFuc2l0aW9uRm9yRXhpdCA/IGR1cmF0aW9uIDogMDtcclxuICAgICAgZHVyYXRpb25Gb3JBeGlzID0gd2l0aFRyYW5zaXRpb25Gb3JBeGlzID8gZHVyYXRpb24gOiAwO1xyXG4gICAgICB0cmFuc2l0aW9ucyA9IHRyYW5zaXRpb25zIHx8ICQkLmF4aXMuZ2VuZXJhdGVUcmFuc2l0aW9ucyhkdXJhdGlvbkZvckF4aXMpO1xyXG4gICAgICAvLyB1cGRhdGUgbGVnZW5kIGFuZCB0cmFuc2Zvcm0gZWFjaCBnXHJcbiAgICAgIGlmICh3aXRoTGVnZW5kICYmIGNvbmZpZy5sZWdlbmRfc2hvdykge1xyXG4gICAgICAgICAgJCQudXBkYXRlTGVnZW5kKCQkLm1hcFRvSWRzKCQkLmRhdGEudGFyZ2V0cyksIG9wdGlvbnMsIHRyYW5zaXRpb25zKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh3aXRoRGltZW5zaW9uKSB7XHJcbiAgICAgICAgICAvLyBuZWVkIHRvIHVwZGF0ZSBkaW1lbnNpb24gKGUuZy4gYXhpcy55LnRpY2sudmFsdWVzKSBiZWNhdXNlIHkgdGljayB2YWx1ZXMgc2hvdWxkIGNoYW5nZVxyXG4gICAgICAgICAgLy8gbm8gbmVlZCB0byB1cGRhdGUgYXhpcyBpbiBpdCBiZWNhdXNlIHRoZXkgd2lsbCBiZSB1cGRhdGVkIGluIHJlZHJhdygpXHJcbiAgICAgICAgICAkJC51cGRhdGVEaW1lbnNpb24odHJ1ZSk7XHJcbiAgICAgIH1cclxuICAgICAgLy8gTUVNTzogbmVlZGVkIGZvciBncmlkcyBjYWxjdWxhdGlvblxyXG4gICAgICBpZiAoJCQuaXNDYXRlZ29yaXplZCgpICYmIHRhcmdldHNUb1Nob3cubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAkJC54LmRvbWFpbihbMCwgJCQuYXhlcy54LnNlbGVjdEFsbCgnLnRpY2snKS5zaXplKCldKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGFyZ2V0c1RvU2hvdy5sZW5ndGgpIHtcclxuICAgICAgICAgICQkLnVwZGF0ZVhEb21haW4odGFyZ2V0c1RvU2hvdywgd2l0aFVwZGF0ZVhEb21haW4sIHdpdGhVcGRhdGVPcmdYRG9tYWluLCB3aXRoVHJpbVhEb21haW4pO1xyXG4gICAgICAgICAgaWYgKCFjb25maWcuYXhpc194X3RpY2tfdmFsdWVzKSB7XHJcbiAgICAgICAgICAgICAgdGlja1ZhbHVlcyA9ICQkLmF4aXMudXBkYXRlWEF4aXNUaWNrVmFsdWVzKHRhcmdldHNUb1Nob3cpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgJCQueEF4aXMudGlja1ZhbHVlcyhbXSk7XHJcbiAgICAgICAgICAkJC5zdWJYQXhpcy50aWNrVmFsdWVzKFtdKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLnpvb21fcmVzY2FsZSAmJiAhb3B0aW9ucy5mbG93KSB7XHJcbiAgICAgICAgICB4RG9tYWluRm9yWm9vbSA9ICQkLngub3JnRG9tYWluKCk7XHJcbiAgICAgIH1cclxuICAgICAgJCQueS5kb21haW4oJCQuZ2V0WURvbWFpbih0YXJnZXRzVG9TaG93LCAneScsIHhEb21haW5Gb3Jab29tKSk7XHJcbiAgICAgICQkLnkyLmRvbWFpbigkJC5nZXRZRG9tYWluKHRhcmdldHNUb1Nob3csICd5MicsIHhEb21haW5Gb3Jab29tKSk7XHJcbiAgICAgIGlmICghY29uZmlnLmF4aXNfeV90aWNrX3ZhbHVlcyAmJiBjb25maWcuYXhpc195X3RpY2tfY291bnQpIHtcclxuICAgICAgICAgICQkLnlBeGlzLnRpY2tWYWx1ZXMoJCQuYXhpcy5nZW5lcmF0ZVRpY2tWYWx1ZXMoJCQueS5kb21haW4oKSwgY29uZmlnLmF4aXNfeV90aWNrX2NvdW50KSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCFjb25maWcuYXhpc195Ml90aWNrX3ZhbHVlcyAmJiBjb25maWcuYXhpc195Ml90aWNrX2NvdW50KSB7XHJcbiAgICAgICAgICAkJC55MkF4aXMudGlja1ZhbHVlcygkJC5heGlzLmdlbmVyYXRlVGlja1ZhbHVlcygkJC55Mi5kb21haW4oKSwgY29uZmlnLmF4aXNfeTJfdGlja19jb3VudCkpO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIGF4ZXNcclxuICAgICAgJCQuYXhpcy5yZWRyYXcoZHVyYXRpb25Gb3JBeGlzLCBoaWRlQXhpcyk7XHJcbiAgICAgIC8vIFVwZGF0ZSBheGlzIGxhYmVsXHJcbiAgICAgICQkLmF4aXMudXBkYXRlTGFiZWxzKHdpdGhUcmFuc2l0aW9uKTtcclxuICAgICAgLy8gc2hvdy9oaWRlIGlmIG1hbnVhbCBjdWxsaW5nIG5lZWRlZFxyXG4gICAgICBpZiAoKHdpdGhVcGRhdGVYRG9tYWluIHx8IHdpdGhVcGRhdGVYQXhpcykgJiYgdGFyZ2V0c1RvU2hvdy5sZW5ndGgpIHtcclxuICAgICAgICAgIGlmIChjb25maWcuYXhpc194X3RpY2tfY3VsbGluZyAmJiB0aWNrVmFsdWVzKSB7XHJcbiAgICAgICAgICAgICAgZm9yIChpID0gMTsgaSA8IHRpY2tWYWx1ZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKHRpY2tWYWx1ZXMubGVuZ3RoIC8gaSA8IGNvbmZpZy5heGlzX3hfdGlja19jdWxsaW5nX21heCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgaW50ZXJ2YWxGb3JDdWxsaW5nID0gaTtcclxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICQkLnN2Zy5zZWxlY3RBbGwoJy4nICsgQ0xBU1MuYXhpc1ggKyAnIC50aWNrIHRleHQnKS5lYWNoKGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IHRpY2tWYWx1ZXMuaW5kZXhPZihlKTtcclxuICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID49IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGQzLnNlbGVjdCh0aGlzKS5zdHlsZSgnZGlzcGxheScsIGluZGV4ICUgaW50ZXJ2YWxGb3JDdWxsaW5nID8gJ25vbmUnIDogJ2Jsb2NrJyk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICQkLnN2Z1xyXG4gICAgICAgICAgICAgICAgICAuc2VsZWN0QWxsKCcuJyArIENMQVNTLmF4aXNYICsgJyAudGljayB0ZXh0JylcclxuICAgICAgICAgICAgICAgICAgLnN0eWxlKCdkaXNwbGF5JywgJ2Jsb2NrJyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgLy8gc2V0dXAgZHJhd2VyIC0gTUVNTzogdGhlc2UgbXVzdCBiZSBjYWxsZWQgYWZ0ZXIgYXhpcyB1cGRhdGVkXHJcbiAgICAgIGRyYXdBcmVhID0gJCQuZ2VuZXJhdGVEcmF3QXJlYVxyXG4gICAgICAgICAgPyAkJC5nZW5lcmF0ZURyYXdBcmVhKGFyZWFJbmRpY2VzLCBmYWxzZSlcclxuICAgICAgICAgIDogdW5kZWZpbmVkO1xyXG4gICAgICBkcmF3QmFyID0gJCQuZ2VuZXJhdGVEcmF3QmFyID8gJCQuZ2VuZXJhdGVEcmF3QmFyKGJhckluZGljZXMpIDogdW5kZWZpbmVkO1xyXG4gICAgICBkcmF3TGluZSA9ICQkLmdlbmVyYXRlRHJhd0xpbmVcclxuICAgICAgICAgID8gJCQuZ2VuZXJhdGVEcmF3TGluZShsaW5lSW5kaWNlcywgZmFsc2UpXHJcbiAgICAgICAgICA6IHVuZGVmaW5lZDtcclxuICAgICAgeEZvclRleHQgPSAkJC5nZW5lcmF0ZVhZRm9yVGV4dChhcmVhSW5kaWNlcywgYmFySW5kaWNlcywgbGluZUluZGljZXMsIHRydWUpO1xyXG4gICAgICB5Rm9yVGV4dCA9ICQkLmdlbmVyYXRlWFlGb3JUZXh0KGFyZWFJbmRpY2VzLCBiYXJJbmRpY2VzLCBsaW5lSW5kaWNlcywgZmFsc2UpO1xyXG4gICAgICAvLyB1cGRhdGUgY2lyY2xlWSBiYXNlZCBvbiB1cGRhdGVkIHBhcmFtZXRlcnNcclxuICAgICAgJCQudXBkYXRlQ2lyY2xlWSgpO1xyXG4gICAgICAvLyBnZW5lcmF0ZSBjaXJjbGUgeC95IGZ1bmN0aW9ucyBkZXBlbmRpbmcgb24gdXBkYXRlZCBwYXJhbXNcclxuICAgICAgY3ggPSAoJCQuY29uZmlnLmF4aXNfcm90YXRlZCA/ICQkLmNpcmNsZVkgOiAkJC5jaXJjbGVYKS5iaW5kKCQkKTtcclxuICAgICAgY3kgPSAoJCQuY29uZmlnLmF4aXNfcm90YXRlZCA/ICQkLmNpcmNsZVggOiAkJC5jaXJjbGVZKS5iaW5kKCQkKTtcclxuICAgICAgLy8gVXBkYXRlIHN1YiBkb21haW5cclxuICAgICAgaWYgKHdpdGhZKSB7XHJcbiAgICAgICAgICAkJC5zdWJZLmRvbWFpbigkJC5nZXRZRG9tYWluKHRhcmdldHNUb1Nob3csICd5JykpO1xyXG4gICAgICAgICAgJCQuc3ViWTIuZG9tYWluKCQkLmdldFlEb21haW4odGFyZ2V0c1RvU2hvdywgJ3kyJykpO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIHhncmlkIGZvY3VzXHJcbiAgICAgICQkLnVwZGF0ZVhncmlkRm9jdXMoKTtcclxuICAgICAgLy8gRGF0YSBlbXB0eSBsYWJlbCBwb3NpdGlvbmluZyBhbmQgdGV4dC5cclxuICAgICAgbWFpblxyXG4gICAgICAgICAgLnNlbGVjdCgndGV4dC4nICsgQ0xBU1MudGV4dCArICcuJyArIENMQVNTLmVtcHR5KVxyXG4gICAgICAgICAgLmF0dHIoJ3gnLCAkJC53aWR0aCAvIDIpXHJcbiAgICAgICAgICAuYXR0cigneScsICQkLmhlaWdodCAvIDIpXHJcbiAgICAgICAgICAudGV4dChjb25maWcuZGF0YV9lbXB0eV9sYWJlbF90ZXh0KVxyXG4gICAgICAgICAgLnRyYW5zaXRpb24oKVxyXG4gICAgICAgICAgLnN0eWxlKCdvcGFjaXR5JywgdGFyZ2V0c1RvU2hvdy5sZW5ndGggPyAwIDogMSk7XHJcbiAgICAgIC8vIGV2ZW50IHJlY3RcclxuICAgICAgaWYgKHdpdGhFdmVudFJlY3QpIHtcclxuICAgICAgICAgICQkLnJlZHJhd0V2ZW50UmVjdCgpO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIGdyaWRcclxuICAgICAgJCQudXBkYXRlR3JpZChkdXJhdGlvbik7XHJcbiAgICAgICQkLnVwZGF0ZVN0YW5mb3JkRWxlbWVudHMoZHVyYXRpb24pO1xyXG4gICAgICAvLyByZWN0IGZvciByZWdpb25zXHJcbiAgICAgICQkLnVwZGF0ZVJlZ2lvbihkdXJhdGlvbik7XHJcbiAgICAgIC8vIGJhcnNcclxuICAgICAgJCQudXBkYXRlQmFyKGR1cmF0aW9uRm9yRXhpdCk7XHJcbiAgICAgIC8vIGxpbmVzLCBhcmVhcyBhbmQgY2lyY2xlc1xyXG4gICAgICAkJC51cGRhdGVMaW5lKGR1cmF0aW9uRm9yRXhpdCk7XHJcbiAgICAgICQkLnVwZGF0ZUFyZWEoZHVyYXRpb25Gb3JFeGl0KTtcclxuICAgICAgJCQudXBkYXRlQ2lyY2xlKGN4LCBjeSk7XHJcbiAgICAgIC8vIHRleHRcclxuICAgICAgaWYgKCQkLmhhc0RhdGFMYWJlbCgpKSB7XHJcbiAgICAgICAgICAkJC51cGRhdGVUZXh0KHhGb3JUZXh0LCB5Rm9yVGV4dCwgZHVyYXRpb25Gb3JFeGl0KTtcclxuICAgICAgfVxyXG4gICAgICAvLyB0aXRsZVxyXG4gICAgICBpZiAoJCQucmVkcmF3VGl0bGUpIHtcclxuICAgICAgICAgICQkLnJlZHJhd1RpdGxlKCk7XHJcbiAgICAgIH1cclxuICAgICAgLy8gYXJjXHJcbiAgICAgIGlmICgkJC5yZWRyYXdBcmMpIHtcclxuICAgICAgICAgICQkLnJlZHJhd0FyYyhkdXJhdGlvbiwgZHVyYXRpb25Gb3JFeGl0LCB3aXRoVHJhbnNmb3JtKTtcclxuICAgICAgfVxyXG4gICAgICAvLyBzdWJjaGFydFxyXG4gICAgICBpZiAoY29uZmlnLnN1YmNoYXJ0X3Nob3cgJiYgJCQucmVkcmF3U3ViY2hhcnQpIHtcclxuICAgICAgICAgICQkLnJlZHJhd1N1YmNoYXJ0KHdpdGhTdWJjaGFydCwgdHJhbnNpdGlvbnMsIGR1cmF0aW9uLCBkdXJhdGlvbkZvckV4aXQsIGFyZWFJbmRpY2VzLCBiYXJJbmRpY2VzLCBsaW5lSW5kaWNlcyk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCQkLmlzU3RhbmZvcmRHcmFwaFR5cGUoKSkge1xyXG4gICAgICAgICAgJCQuZHJhd0NvbG9yU2NhbGUoKTtcclxuICAgICAgfVxyXG4gICAgICAvLyBjaXJjbGVzIGZvciBzZWxlY3RcclxuICAgICAgbWFpblxyXG4gICAgICAgICAgLnNlbGVjdEFsbCgnLicgKyBDTEFTUy5zZWxlY3RlZENpcmNsZXMpXHJcbiAgICAgICAgICAuZmlsdGVyKCQkLmlzQmFyVHlwZS5iaW5kKCQkKSlcclxuICAgICAgICAgIC5zZWxlY3RBbGwoJ2NpcmNsZScpXHJcbiAgICAgICAgICAucmVtb3ZlKCk7XHJcbiAgICAgIGlmIChvcHRpb25zLmZsb3cpIHtcclxuICAgICAgICAgIGZsb3cgPSAkJC5nZW5lcmF0ZUZsb3coe1xyXG4gICAgICAgICAgICAgIHRhcmdldHM6IHRhcmdldHNUb1Nob3csXHJcbiAgICAgICAgICAgICAgZmxvdzogb3B0aW9ucy5mbG93LFxyXG4gICAgICAgICAgICAgIGR1cmF0aW9uOiBvcHRpb25zLmZsb3cuZHVyYXRpb24sXHJcbiAgICAgICAgICAgICAgZHJhd0JhcjogZHJhd0JhcixcclxuICAgICAgICAgICAgICBkcmF3TGluZTogZHJhd0xpbmUsXHJcbiAgICAgICAgICAgICAgZHJhd0FyZWE6IGRyYXdBcmVhLFxyXG4gICAgICAgICAgICAgIGN4OiBjeCxcclxuICAgICAgICAgICAgICBjeTogY3ksXHJcbiAgICAgICAgICAgICAgeHY6IHh2LFxyXG4gICAgICAgICAgICAgIHhGb3JUZXh0OiB4Rm9yVGV4dCxcclxuICAgICAgICAgICAgICB5Rm9yVGV4dDogeUZvclRleHRcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChkdXJhdGlvbiAmJiAkJC5pc1RhYlZpc2libGUoKSkge1xyXG4gICAgICAgICAgLy8gT25seSB1c2UgdHJhbnNpdGlvbiBpZiB0YWIgdmlzaWJsZS4gU2VlICM5MzguXHJcbiAgICAgICAgICAvLyB0cmFuc2l0aW9uIHNob3VsZCBiZSBkZXJpdmVkIGZyb20gb25lIHRyYW5zaXRpb25cclxuICAgICAgICAgIHRyYW5zaXRpb24gPSBkMy50cmFuc2l0aW9uKCkuZHVyYXRpb24oZHVyYXRpb24pO1xyXG4gICAgICAgICAgdHJhbnNpdGlvbnNUb1dhaXQgPSBbXTtcclxuICAgICAgICAgIFtcclxuICAgICAgICAgICAgICAkJC5yZWRyYXdCYXIoZHJhd0JhciwgdHJ1ZSwgdHJhbnNpdGlvbiksXHJcbiAgICAgICAgICAgICAgJCQucmVkcmF3TGluZShkcmF3TGluZSwgdHJ1ZSwgdHJhbnNpdGlvbiksXHJcbiAgICAgICAgICAgICAgJCQucmVkcmF3QXJlYShkcmF3QXJlYSwgdHJ1ZSwgdHJhbnNpdGlvbiksXHJcbiAgICAgICAgICAgICAgJCQucmVkcmF3Q2lyY2xlKGN4LCBjeSwgdHJ1ZSwgdHJhbnNpdGlvbiksXHJcbiAgICAgICAgICAgICAgJCQucmVkcmF3VGV4dCh4Rm9yVGV4dCwgeUZvclRleHQsIG9wdGlvbnMuZmxvdywgdHJ1ZSwgdHJhbnNpdGlvbiksXHJcbiAgICAgICAgICAgICAgJCQucmVkcmF3UmVnaW9uKHRydWUsIHRyYW5zaXRpb24pLFxyXG4gICAgICAgICAgICAgICQkLnJlZHJhd0dyaWQodHJ1ZSwgdHJhbnNpdGlvbilcclxuICAgICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAodHJhbnNpdGlvbnMpIHtcclxuICAgICAgICAgICAgICB0cmFuc2l0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uICh0cmFuc2l0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25zVG9XYWl0LnB1c2godHJhbnNpdGlvbik7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIC8vIFdhaXQgZm9yIGVuZCBvZiB0cmFuc2l0aW9ucyB0byBjYWxsIGZsb3cgYW5kIG9ucmVuZGVyZWQgY2FsbGJhY2tcclxuICAgICAgICAgIHdhaXRGb3JEcmF3ID0gJCQuZ2VuZXJhdGVXYWl0KCk7XHJcbiAgICAgICAgICB0cmFuc2l0aW9uc1RvV2FpdC5mb3JFYWNoKGZ1bmN0aW9uICh0KSB7XHJcbiAgICAgICAgICAgICAgd2FpdEZvckRyYXcuYWRkKHQpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICB3YWl0Rm9yRHJhdyhmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGZsb3cpIHtcclxuICAgICAgICAgICAgICAgICAgZmxvdygpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAoY29uZmlnLm9ucmVuZGVyZWQpIHtcclxuICAgICAgICAgICAgICAgICAgY29uZmlnLm9ucmVuZGVyZWQuY2FsbCgkJCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAkJC5yZWRyYXdCYXIoZHJhd0Jhcik7XHJcbiAgICAgICAgICAkJC5yZWRyYXdMaW5lKGRyYXdMaW5lKTtcclxuICAgICAgICAgICQkLnJlZHJhd0FyZWEoZHJhd0FyZWEpO1xyXG4gICAgICAgICAgJCQucmVkcmF3Q2lyY2xlKGN4LCBjeSk7XHJcbiAgICAgICAgICAkJC5yZWRyYXdUZXh0KHhGb3JUZXh0LCB5Rm9yVGV4dCwgb3B0aW9ucy5mbG93KTtcclxuICAgICAgICAgICQkLnJlZHJhd1JlZ2lvbigpO1xyXG4gICAgICAgICAgJCQucmVkcmF3R3JpZCgpO1xyXG4gICAgICAgICAgaWYgKGZsb3cpIHtcclxuICAgICAgICAgICAgICBmbG93KCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoY29uZmlnLm9ucmVuZGVyZWQpIHtcclxuICAgICAgICAgICAgICBjb25maWcub25yZW5kZXJlZC5jYWxsKCQkKTtcclxuICAgICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICAvLyB1cGRhdGUgZmFkZWluIGNvbmRpdGlvblxyXG4gICAgICAkJC5tYXBUb0lkcygkJC5kYXRhLnRhcmdldHMpLmZvckVhY2goZnVuY3Rpb24gKGlkKSB7XHJcbiAgICAgICAgICAkJC53aXRob3V0RmFkZUluW2lkXSA9IHRydWU7XHJcbiAgICAgIH0pO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUudXBkYXRlQW5kUmVkcmF3ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcclxuICAgICAgdmFyICQkID0gdGhpcywgY29uZmlnID0gJCQuY29uZmlnLCB0cmFuc2l0aW9ucztcclxuICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XHJcbiAgICAgIC8vIHNhbWUgd2l0aCByZWRyYXdcclxuICAgICAgb3B0aW9ucy53aXRoVHJhbnNpdGlvbiA9IGdldE9wdGlvbihvcHRpb25zLCAnd2l0aFRyYW5zaXRpb24nLCB0cnVlKTtcclxuICAgICAgb3B0aW9ucy53aXRoVHJhbnNmb3JtID0gZ2V0T3B0aW9uKG9wdGlvbnMsICd3aXRoVHJhbnNmb3JtJywgZmFsc2UpO1xyXG4gICAgICBvcHRpb25zLndpdGhMZWdlbmQgPSBnZXRPcHRpb24ob3B0aW9ucywgJ3dpdGhMZWdlbmQnLCBmYWxzZSk7XHJcbiAgICAgIC8vIE5PVCBzYW1lIHdpdGggcmVkcmF3XHJcbiAgICAgIG9wdGlvbnMud2l0aFVwZGF0ZVhEb21haW4gPSBnZXRPcHRpb24ob3B0aW9ucywgJ3dpdGhVcGRhdGVYRG9tYWluJywgdHJ1ZSk7XHJcbiAgICAgIG9wdGlvbnMud2l0aFVwZGF0ZU9yZ1hEb21haW4gPSBnZXRPcHRpb24ob3B0aW9ucywgJ3dpdGhVcGRhdGVPcmdYRG9tYWluJywgdHJ1ZSk7XHJcbiAgICAgIG9wdGlvbnMud2l0aFRyYW5zaXRpb25Gb3JFeGl0ID0gZmFsc2U7XHJcbiAgICAgIG9wdGlvbnMud2l0aFRyYW5zaXRpb25Gb3JUcmFuc2Zvcm0gPSBnZXRPcHRpb24ob3B0aW9ucywgJ3dpdGhUcmFuc2l0aW9uRm9yVHJhbnNmb3JtJywgb3B0aW9ucy53aXRoVHJhbnNpdGlvbik7XHJcbiAgICAgIC8vIE1FTU86IHRoaXMgbmVlZHMgdG8gYmUgY2FsbGVkIGJlZm9yZSB1cGRhdGVMZWdlbmQgYW5kIGl0IG1lYW5zIHRoaXMgQUxXQVlTIG5lZWRzIHRvIGJlIGNhbGxlZClcclxuICAgICAgJCQudXBkYXRlU2l6ZXMoKTtcclxuICAgICAgLy8gTUVNTzogY2FsbGVkIGluIHVwZGF0ZUxlZ2VuZCBpbiByZWRyYXcgaWYgd2l0aExlZ2VuZFxyXG4gICAgICBpZiAoIShvcHRpb25zLndpdGhMZWdlbmQgJiYgY29uZmlnLmxlZ2VuZF9zaG93KSkge1xyXG4gICAgICAgICAgdHJhbnNpdGlvbnMgPSAkJC5heGlzLmdlbmVyYXRlVHJhbnNpdGlvbnMob3B0aW9ucy53aXRoVHJhbnNpdGlvbkZvckF4aXMgPyBjb25maWcudHJhbnNpdGlvbl9kdXJhdGlvbiA6IDApO1xyXG4gICAgICAgICAgLy8gVXBkYXRlIHNjYWxlc1xyXG4gICAgICAgICAgJCQudXBkYXRlU2NhbGVzKCk7XHJcbiAgICAgICAgICAkJC51cGRhdGVTdmdTaXplKCk7XHJcbiAgICAgICAgICAvLyBVcGRhdGUgZyBwb3NpdGlvbnNcclxuICAgICAgICAgICQkLnRyYW5zZm9ybUFsbChvcHRpb25zLndpdGhUcmFuc2l0aW9uRm9yVHJhbnNmb3JtLCB0cmFuc2l0aW9ucyk7XHJcbiAgICAgIH1cclxuICAgICAgLy8gRHJhdyB3aXRoIG5ldyBzaXplcyAmIHNjYWxlc1xyXG4gICAgICAkJC5yZWRyYXcob3B0aW9ucywgdHJhbnNpdGlvbnMpO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUucmVkcmF3V2l0aG91dFJlc2NhbGUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHRoaXMucmVkcmF3KHtcclxuICAgICAgICAgIHdpdGhZOiBmYWxzZSxcclxuICAgICAgICAgIHdpdGhTdWJjaGFydDogZmFsc2UsXHJcbiAgICAgICAgICB3aXRoRXZlbnRSZWN0OiBmYWxzZSxcclxuICAgICAgICAgIHdpdGhUcmFuc2l0aW9uRm9yQXhpczogZmFsc2VcclxuICAgICAgfSk7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5pc1RpbWVTZXJpZXMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmNvbmZpZy5heGlzX3hfdHlwZSA9PT0gJ3RpbWVzZXJpZXMnO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuaXNDYXRlZ29yaXplZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuY29uZmlnLmF4aXNfeF90eXBlLmluZGV4T2YoJ2NhdGVnb3InKSA+PSAwO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuaXNDdXN0b21YID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzLCBjb25maWcgPSAkJC5jb25maWc7XHJcbiAgICAgIHJldHVybiAhJCQuaXNUaW1lU2VyaWVzKCkgJiYgKGNvbmZpZy5kYXRhX3ggfHwgbm90RW1wdHkoY29uZmlnLmRhdGFfeHMpKTtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmlzVGltZVNlcmllc1kgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmNvbmZpZy5heGlzX3lfdHlwZSA9PT0gJ3RpbWVzZXJpZXMnO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuZ2V0VHJhbnNsYXRlID0gZnVuY3Rpb24gKHRhcmdldCkge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzLCBjb25maWcgPSAkJC5jb25maWcsIHgsIHk7XHJcbiAgICAgIGlmICh0YXJnZXQgPT09ICdtYWluJykge1xyXG4gICAgICAgICAgeCA9IGFzSGFsZlBpeGVsKCQkLm1hcmdpbi5sZWZ0KTtcclxuICAgICAgICAgIHkgPSBhc0hhbGZQaXhlbCgkJC5tYXJnaW4udG9wKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0YXJnZXQgPT09ICdjb250ZXh0Jykge1xyXG4gICAgICAgICAgeCA9IGFzSGFsZlBpeGVsKCQkLm1hcmdpbjIubGVmdCk7XHJcbiAgICAgICAgICB5ID0gYXNIYWxmUGl4ZWwoJCQubWFyZ2luMi50b3ApO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHRhcmdldCA9PT0gJ2xlZ2VuZCcpIHtcclxuICAgICAgICAgIHggPSAkJC5tYXJnaW4zLmxlZnQ7XHJcbiAgICAgICAgICB5ID0gJCQubWFyZ2luMy50b3A7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodGFyZ2V0ID09PSAneCcpIHtcclxuICAgICAgICAgIHggPSAwO1xyXG4gICAgICAgICAgeSA9IGNvbmZpZy5heGlzX3JvdGF0ZWQgPyAwIDogJCQuaGVpZ2h0O1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHRhcmdldCA9PT0gJ3knKSB7XHJcbiAgICAgICAgICB4ID0gMDtcclxuICAgICAgICAgIHkgPSBjb25maWcuYXhpc19yb3RhdGVkID8gJCQuaGVpZ2h0IDogMDtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0YXJnZXQgPT09ICd5MicpIHtcclxuICAgICAgICAgIHggPSBjb25maWcuYXhpc19yb3RhdGVkID8gMCA6ICQkLndpZHRoO1xyXG4gICAgICAgICAgeSA9IGNvbmZpZy5heGlzX3JvdGF0ZWQgPyAxIDogMDtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0YXJnZXQgPT09ICdzdWJ4Jykge1xyXG4gICAgICAgICAgeCA9IDA7XHJcbiAgICAgICAgICB5ID0gY29uZmlnLmF4aXNfcm90YXRlZCA/IDAgOiAkJC5oZWlnaHQyO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHRhcmdldCA9PT0gJ2FyYycpIHtcclxuICAgICAgICAgIHggPSAkJC5hcmNXaWR0aCAvIDI7XHJcbiAgICAgICAgICB5ID0gJCQuYXJjSGVpZ2h0IC8gMiAtICgkJC5oYXNUeXBlKCdnYXVnZScpID8gNiA6IDApOyAvLyB0byBwcmV2ZW50IHdyb25nIGRpc3BsYXkgb2YgbWluIGFuZCBtYXggbGFiZWxcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gJ3RyYW5zbGF0ZSgnICsgeCArICcsJyArIHkgKyAnKSc7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5pbml0aWFsT3BhY2l0eSA9IGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgIHJldHVybiBkLnZhbHVlICE9PSBudWxsICYmIHRoaXMud2l0aG91dEZhZGVJbltkLmlkXSA/IDEgOiAwO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuaW5pdGlhbE9wYWNpdHlGb3JDaXJjbGUgPSBmdW5jdGlvbiAoZCkge1xyXG4gICAgICByZXR1cm4gZC52YWx1ZSAhPT0gbnVsbCAmJiB0aGlzLndpdGhvdXRGYWRlSW5bZC5pZF1cclxuICAgICAgICAgID8gdGhpcy5vcGFjaXR5Rm9yQ2lyY2xlKGQpXHJcbiAgICAgICAgICA6IDA7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5vcGFjaXR5Rm9yQ2lyY2xlID0gZnVuY3Rpb24gKGQpIHtcclxuICAgICAgdmFyIGlzUG9pbnRTaG91bGRCZVNob3duID0gaXNGdW5jdGlvbih0aGlzLmNvbmZpZy5wb2ludF9zaG93KVxyXG4gICAgICAgICAgPyB0aGlzLmNvbmZpZy5wb2ludF9zaG93KGQpXHJcbiAgICAgICAgICA6IHRoaXMuY29uZmlnLnBvaW50X3Nob3c7XHJcbiAgICAgIHZhciBvcGFjaXR5ID0gaXNQb2ludFNob3VsZEJlU2hvd24gfHwgdGhpcy5pc1N0YW5mb3JkVHlwZShkKSA/IDEgOiAwO1xyXG4gICAgICByZXR1cm4gaXNWYWx1ZShkLnZhbHVlKSA/ICh0aGlzLmlzU2NhdHRlclR5cGUoZCkgPyAwLjUgOiBvcGFjaXR5KSA6IDA7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5vcGFjaXR5Rm9yVGV4dCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuaGFzRGF0YUxhYmVsKCkgPyAxIDogMDtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLnh4ID0gZnVuY3Rpb24gKGQpIHtcclxuICAgICAgcmV0dXJuIGQgPyB0aGlzLngoZC54KSA6IG51bGw7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS54dkN1c3RvbSA9IGZ1bmN0aW9uIChkLCB4eVZhbHVlKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXMsIHZhbHVlID0geHlWYWx1ZSA/IGRbeHlWYWx1ZV0gOiBkLnZhbHVlO1xyXG4gICAgICBpZiAoJCQuaXNUaW1lU2VyaWVzKCkpIHtcclxuICAgICAgICAgIHZhbHVlID0gJCQucGFyc2VEYXRlKGQudmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKCQkLmlzQ2F0ZWdvcml6ZWQoKSAmJiB0eXBlb2YgZC52YWx1ZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgIHZhbHVlID0gJCQuY29uZmlnLmF4aXNfeF9jYXRlZ29yaWVzLmluZGV4T2YoZC52YWx1ZSk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIE1hdGguY2VpbCgkJC54KHZhbHVlKSk7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS55dkN1c3RvbSA9IGZ1bmN0aW9uIChkLCB4eVZhbHVlKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXMsIHlTY2FsZSA9IGQuYXhpcyAmJiBkLmF4aXMgPT09ICd5MicgPyAkJC55MiA6ICQkLnksIHZhbHVlID0geHlWYWx1ZSA/IGRbeHlWYWx1ZV0gOiBkLnZhbHVlO1xyXG4gICAgICByZXR1cm4gTWF0aC5jZWlsKHlTY2FsZSh2YWx1ZSkpO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUueHYgPSBmdW5jdGlvbiAoZCkge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzLCB2YWx1ZSA9IGQudmFsdWU7XHJcbiAgICAgIGlmICgkJC5pc1RpbWVTZXJpZXMoKSkge1xyXG4gICAgICAgICAgdmFsdWUgPSAkJC5wYXJzZURhdGUoZC52YWx1ZSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoJCQuaXNDYXRlZ29yaXplZCgpICYmIHR5cGVvZiBkLnZhbHVlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgdmFsdWUgPSAkJC5jb25maWcuYXhpc194X2NhdGVnb3JpZXMuaW5kZXhPZihkLnZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gTWF0aC5jZWlsKCQkLngodmFsdWUpKTtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLnl2ID0gZnVuY3Rpb24gKGQpIHtcclxuICAgICAgdmFyICQkID0gdGhpcywgeVNjYWxlID0gZC5heGlzICYmIGQuYXhpcyA9PT0gJ3kyJyA/ICQkLnkyIDogJCQueTtcclxuICAgICAgcmV0dXJuIE1hdGguY2VpbCh5U2NhbGUoZC52YWx1ZSkpO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuc3VieHggPSBmdW5jdGlvbiAoZCkge1xyXG4gICAgICByZXR1cm4gZCA/IHRoaXMuc3ViWChkLngpIDogbnVsbDtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLnRyYW5zZm9ybU1haW4gPSBmdW5jdGlvbiAod2l0aFRyYW5zaXRpb24sIHRyYW5zaXRpb25zKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXMsIHhBeGlzLCB5QXhpcywgeTJBeGlzO1xyXG4gICAgICBpZiAodHJhbnNpdGlvbnMgJiYgdHJhbnNpdGlvbnMuYXhpc1gpIHtcclxuICAgICAgICAgIHhBeGlzID0gdHJhbnNpdGlvbnMuYXhpc1g7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB4QXhpcyA9ICQkLm1haW4uc2VsZWN0KCcuJyArIENMQVNTLmF4aXNYKTtcclxuICAgICAgICAgIGlmICh3aXRoVHJhbnNpdGlvbikge1xyXG4gICAgICAgICAgICAgIHhBeGlzID0geEF4aXMudHJhbnNpdGlvbigpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmICh0cmFuc2l0aW9ucyAmJiB0cmFuc2l0aW9ucy5heGlzWSkge1xyXG4gICAgICAgICAgeUF4aXMgPSB0cmFuc2l0aW9ucy5heGlzWTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICAgIHlBeGlzID0gJCQubWFpbi5zZWxlY3QoJy4nICsgQ0xBU1MuYXhpc1kpO1xyXG4gICAgICAgICAgaWYgKHdpdGhUcmFuc2l0aW9uKSB7XHJcbiAgICAgICAgICAgICAgeUF4aXMgPSB5QXhpcy50cmFuc2l0aW9uKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRyYW5zaXRpb25zICYmIHRyYW5zaXRpb25zLmF4aXNZMikge1xyXG4gICAgICAgICAgeTJBeGlzID0gdHJhbnNpdGlvbnMuYXhpc1kyO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgeTJBeGlzID0gJCQubWFpbi5zZWxlY3QoJy4nICsgQ0xBU1MuYXhpc1kyKTtcclxuICAgICAgICAgIGlmICh3aXRoVHJhbnNpdGlvbikge1xyXG4gICAgICAgICAgICAgIHkyQXhpcyA9IHkyQXhpcy50cmFuc2l0aW9uKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgKHdpdGhUcmFuc2l0aW9uID8gJCQubWFpbi50cmFuc2l0aW9uKCkgOiAkJC5tYWluKS5hdHRyKCd0cmFuc2Zvcm0nLCAkJC5nZXRUcmFuc2xhdGUoJ21haW4nKSk7XHJcbiAgICAgIHhBeGlzLmF0dHIoJ3RyYW5zZm9ybScsICQkLmdldFRyYW5zbGF0ZSgneCcpKTtcclxuICAgICAgeUF4aXMuYXR0cigndHJhbnNmb3JtJywgJCQuZ2V0VHJhbnNsYXRlKCd5JykpO1xyXG4gICAgICB5MkF4aXMuYXR0cigndHJhbnNmb3JtJywgJCQuZ2V0VHJhbnNsYXRlKCd5MicpKTtcclxuICAgICAgJCQubWFpblxyXG4gICAgICAgICAgLnNlbGVjdCgnLicgKyBDTEFTUy5jaGFydEFyY3MpXHJcbiAgICAgICAgICAuYXR0cigndHJhbnNmb3JtJywgJCQuZ2V0VHJhbnNsYXRlKCdhcmMnKSk7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS50cmFuc2Zvcm1BbGwgPSBmdW5jdGlvbiAod2l0aFRyYW5zaXRpb24sIHRyYW5zaXRpb25zKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXM7XHJcbiAgICAgICQkLnRyYW5zZm9ybU1haW4od2l0aFRyYW5zaXRpb24sIHRyYW5zaXRpb25zKTtcclxuICAgICAgaWYgKCQkLmNvbmZpZy5zdWJjaGFydF9zaG93KSB7XHJcbiAgICAgICAgICAkJC50cmFuc2Zvcm1Db250ZXh0KHdpdGhUcmFuc2l0aW9uLCB0cmFuc2l0aW9ucyk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCQkLmxlZ2VuZCkge1xyXG4gICAgICAgICAgJCQudHJhbnNmb3JtTGVnZW5kKHdpdGhUcmFuc2l0aW9uKTtcclxuICAgICAgfVxyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUudXBkYXRlU3ZnU2l6ZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgdmFyICQkID0gdGhpcywgYnJ1c2ggPSAkJC5zdmcuc2VsZWN0KFwiLlwiICsgQ0xBU1MuYnJ1c2ggKyBcIiAub3ZlcmxheVwiKTtcclxuICAgICAgJCQuc3ZnLmF0dHIoJ3dpZHRoJywgJCQuY3VycmVudFdpZHRoKS5hdHRyKCdoZWlnaHQnLCAkJC5jdXJyZW50SGVpZ2h0KTtcclxuICAgICAgJCQuc3ZnXHJcbiAgICAgICAgICAuc2VsZWN0QWxsKFsnIycgKyAkJC5jbGlwSWQsICcjJyArICQkLmNsaXBJZEZvckdyaWRdKVxyXG4gICAgICAgICAgLnNlbGVjdCgncmVjdCcpXHJcbiAgICAgICAgICAuYXR0cignd2lkdGgnLCAkJC53aWR0aClcclxuICAgICAgICAgIC5hdHRyKCdoZWlnaHQnLCAkJC5oZWlnaHQpO1xyXG4gICAgICAkJC5zdmdcclxuICAgICAgICAgIC5zZWxlY3QoJyMnICsgJCQuY2xpcElkRm9yWEF4aXMpXHJcbiAgICAgICAgICAuc2VsZWN0KCdyZWN0JylcclxuICAgICAgICAgIC5hdHRyKCd4JywgJCQuZ2V0WEF4aXNDbGlwWC5iaW5kKCQkKSlcclxuICAgICAgICAgIC5hdHRyKCd5JywgJCQuZ2V0WEF4aXNDbGlwWS5iaW5kKCQkKSlcclxuICAgICAgICAgIC5hdHRyKCd3aWR0aCcsICQkLmdldFhBeGlzQ2xpcFdpZHRoLmJpbmQoJCQpKVxyXG4gICAgICAgICAgLmF0dHIoJ2hlaWdodCcsICQkLmdldFhBeGlzQ2xpcEhlaWdodC5iaW5kKCQkKSk7XHJcbiAgICAgICQkLnN2Z1xyXG4gICAgICAgICAgLnNlbGVjdCgnIycgKyAkJC5jbGlwSWRGb3JZQXhpcylcclxuICAgICAgICAgIC5zZWxlY3QoJ3JlY3QnKVxyXG4gICAgICAgICAgLmF0dHIoJ3gnLCAkJC5nZXRZQXhpc0NsaXBYLmJpbmQoJCQpKVxyXG4gICAgICAgICAgLmF0dHIoJ3knLCAkJC5nZXRZQXhpc0NsaXBZLmJpbmQoJCQpKVxyXG4gICAgICAgICAgLmF0dHIoJ3dpZHRoJywgJCQuZ2V0WUF4aXNDbGlwV2lkdGguYmluZCgkJCkpXHJcbiAgICAgICAgICAuYXR0cignaGVpZ2h0JywgJCQuZ2V0WUF4aXNDbGlwSGVpZ2h0LmJpbmQoJCQpKTtcclxuICAgICAgJCQuc3ZnXHJcbiAgICAgICAgICAuc2VsZWN0KCcjJyArICQkLmNsaXBJZEZvclN1YmNoYXJ0KVxyXG4gICAgICAgICAgLnNlbGVjdCgncmVjdCcpXHJcbiAgICAgICAgICAuYXR0cignd2lkdGgnLCAkJC53aWR0aClcclxuICAgICAgICAgIC5hdHRyKCdoZWlnaHQnLCAoYnJ1c2guc2l6ZSgpICYmIGJydXNoLmF0dHIoJ2hlaWdodCcpKSB8fCAwKTtcclxuICAgICAgLy8gTUVNTzogcGFyZW50IGRpdidzIGhlaWdodCB3aWxsIGJlIGJpZ2dlciB0aGFuIHN2ZyB3aGVuIDwhRE9DVFlQRSBodG1sPlxyXG4gICAgICAkJC5zZWxlY3RDaGFydC5zdHlsZSgnbWF4LWhlaWdodCcsICQkLmN1cnJlbnRIZWlnaHQgKyAncHgnKTtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLnVwZGF0ZURpbWVuc2lvbiA9IGZ1bmN0aW9uICh3aXRob3V0QXhpcykge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzO1xyXG4gICAgICBpZiAoIXdpdGhvdXRBeGlzKSB7XHJcbiAgICAgICAgICBpZiAoJCQuY29uZmlnLmF4aXNfcm90YXRlZCkge1xyXG4gICAgICAgICAgICAgICQkLmF4ZXMueC5jYWxsKCQkLnhBeGlzKTtcclxuICAgICAgICAgICAgICAkJC5heGVzLnN1YnguY2FsbCgkJC5zdWJYQXhpcyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAkJC5heGVzLnkuY2FsbCgkJC55QXhpcyk7XHJcbiAgICAgICAgICAgICAgJCQuYXhlcy55Mi5jYWxsKCQkLnkyQXhpcyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgJCQudXBkYXRlU2l6ZXMoKTtcclxuICAgICAgJCQudXBkYXRlU2NhbGVzKCk7XHJcbiAgICAgICQkLnVwZGF0ZVN2Z1NpemUoKTtcclxuICAgICAgJCQudHJhbnNmb3JtQWxsKGZhbHNlKTtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLm9ic2VydmVJbnNlcnRlZCA9IGZ1bmN0aW9uIChzZWxlY3Rpb24pIHtcclxuICAgICAgdmFyICQkID0gdGhpcywgb2JzZXJ2ZXI7XHJcbiAgICAgIGlmICh0eXBlb2YgTXV0YXRpb25PYnNlcnZlciA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgIHdpbmRvdy5jb25zb2xlLmVycm9yKCdNdXRhdGlvbk9ic2VydmVyIG5vdCBkZWZpbmVkLicpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24gKG11dGF0aW9ucykge1xyXG4gICAgICAgICAgbXV0YXRpb25zLmZvckVhY2goZnVuY3Rpb24gKG11dGF0aW9uKSB7XHJcbiAgICAgICAgICAgICAgaWYgKG11dGF0aW9uLnR5cGUgPT09ICdjaGlsZExpc3QnICYmIG11dGF0aW9uLnByZXZpb3VzU2libGluZykge1xyXG4gICAgICAgICAgICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7XHJcbiAgICAgICAgICAgICAgICAgIC8vIG5lZWQgdG8gd2FpdCBmb3IgY29tcGxldGlvbiBvZiBsb2FkIGJlY2F1c2Ugc2l6ZSBjYWxjdWxhdGlvbiByZXF1aXJlcyB0aGUgYWN0dWFsIHNpemVzIGRldGVybWluZWQgYWZ0ZXIgdGhhdCBjb21wbGV0aW9uXHJcbiAgICAgICAgICAgICAgICAgICQkLmludGVydmFsRm9yT2JzZXJ2ZUluc2VydGVkID0gd2luZG93LnNldEludGVydmFsKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIC8vIHBhcmVudE5vZGUgd2lsbCBOT1QgYmUgbnVsbCB3aGVuIGNvbXBsZXRlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdGlvbi5ub2RlKCkucGFyZW50Tm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5jbGVhckludGVydmFsKCQkLmludGVydmFsRm9yT2JzZXJ2ZUluc2VydGVkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAkJC51cGRhdGVEaW1lbnNpb24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJCQuYnJ1c2gpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCQuYnJ1c2gudXBkYXRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICQkLmNvbmZpZy5vbmluaXQuY2FsbCgkJCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJCQucmVkcmF3KHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aFRyYW5zZm9ybTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aFVwZGF0ZVhEb21haW46IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhVcGRhdGVPcmdYRG9tYWluOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoVHJhbnNpdGlvbjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhUcmFuc2l0aW9uRm9yVHJhbnNmb3JtOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aExlZ2VuZDogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbi50cmFuc2l0aW9uKCkuc3R5bGUoJ29wYWNpdHknLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfSwgMTApO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShzZWxlY3Rpb24ubm9kZSgpLCB7XHJcbiAgICAgICAgICBhdHRyaWJ1dGVzOiB0cnVlLFxyXG4gICAgICAgICAgY2hpbGRMaXN0OiB0cnVlLFxyXG4gICAgICAgICAgY2hhcmFjdGVyRGF0YTogdHJ1ZVxyXG4gICAgICB9KTtcclxuICB9O1xyXG4gIC8qKlxyXG4gICAqIEJpbmRzIGhhbmRsZXJzIHRvIHRoZSB3aW5kb3cgcmVzaXplIGV2ZW50LlxyXG4gICAqL1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmJpbmRSZXNpemUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXMsIGNvbmZpZyA9ICQkLmNvbmZpZztcclxuICAgICAgJCQucmVzaXplRnVuY3Rpb24gPSAkJC5nZW5lcmF0ZVJlc2l6ZSgpOyAvLyBuZWVkIHRvIGNhbGwgLnJlbW92ZVxyXG4gICAgICAkJC5yZXNpemVGdW5jdGlvbi5hZGQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgY29uZmlnLm9ucmVzaXplLmNhbGwoJCQpO1xyXG4gICAgICB9KTtcclxuICAgICAgaWYgKGNvbmZpZy5yZXNpemVfYXV0bykge1xyXG4gICAgICAgICAgJCQucmVzaXplRnVuY3Rpb24uYWRkKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICBpZiAoJCQucmVzaXplVGltZW91dCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQoJCQucmVzaXplVGltZW91dCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICQkLnJlc2l6ZVRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgIGRlbGV0ZSAkJC5yZXNpemVUaW1lb3V0O1xyXG4gICAgICAgICAgICAgICAgICAkJC51cGRhdGVBbmRSZWRyYXcoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgd2l0aFVwZGF0ZVhEb21haW46IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgd2l0aFVwZGF0ZU9yZ1hEb21haW46IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgd2l0aFRyYW5zaXRpb246IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgd2l0aFRyYW5zaXRpb25Gb3JUcmFuc2Zvcm06IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgd2l0aExlZ2VuZDogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgaWYgKCQkLmJydXNoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAkJC5icnVzaC51cGRhdGUoKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0sIDEwMCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICAkJC5yZXNpemVGdW5jdGlvbi5hZGQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgY29uZmlnLm9ucmVzaXplZC5jYWxsKCQkKTtcclxuICAgICAgfSk7XHJcbiAgICAgICQkLnJlc2l6ZUlmRWxlbWVudERpc3BsYXllZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgIC8vIGlmIGVsZW1lbnQgbm90IGRpc3BsYXllZCBza2lwIGl0XHJcbiAgICAgICAgICBpZiAoJCQuYXBpID09IG51bGwgfHwgISQkLmFwaS5lbGVtZW50Lm9mZnNldFBhcmVudCkge1xyXG4gICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgICQkLnJlc2l6ZUZ1bmN0aW9uKCk7XHJcbiAgICAgIH07XHJcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCAkJC5yZXNpemVJZkVsZW1lbnREaXNwbGF5ZWQsIGZhbHNlKTtcclxuICB9O1xyXG4gIC8qKlxyXG4gICAqIEJpbmRzIGhhbmRsZXJzIHRvIHRoZSB3aW5kb3cgZm9jdXMgZXZlbnQuXHJcbiAgICovXHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuYmluZFdpbmRvd0ZvY3VzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICBpZiAodGhpcy53aW5kb3dGb2N1c0hhbmRsZXIpIHtcclxuICAgICAgICAgIC8vIFRoZSBoYW5kbGVyIGlzIGFscmVhZHkgc2V0XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy53aW5kb3dGb2N1c0hhbmRsZXIgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICBfdGhpcy5yZWRyYXcoKTtcclxuICAgICAgfTtcclxuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgdGhpcy53aW5kb3dGb2N1c0hhbmRsZXIpO1xyXG4gIH07XHJcbiAgLyoqXHJcbiAgICogVW5iaW5kcyBmcm9tIHRoZSB3aW5kb3cgZm9jdXMgZXZlbnQuXHJcbiAgICovXHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUudW5iaW5kV2luZG93Rm9jdXMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdmb2N1cycsIHRoaXMud2luZG93Rm9jdXNIYW5kbGVyKTtcclxuICAgICAgZGVsZXRlIHRoaXMud2luZG93Rm9jdXNIYW5kbGVyO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuZ2VuZXJhdGVSZXNpemUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHZhciByZXNpemVGdW5jdGlvbnMgPSBbXTtcclxuICAgICAgZnVuY3Rpb24gY2FsbFJlc2l6ZUZ1bmN0aW9ucygpIHtcclxuICAgICAgICAgIHJlc2l6ZUZ1bmN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChmKSB7XHJcbiAgICAgICAgICAgICAgZigpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgY2FsbFJlc2l6ZUZ1bmN0aW9ucy5hZGQgPSBmdW5jdGlvbiAoZikge1xyXG4gICAgICAgICAgcmVzaXplRnVuY3Rpb25zLnB1c2goZik7XHJcbiAgICAgIH07XHJcbiAgICAgIGNhbGxSZXNpemVGdW5jdGlvbnMucmVtb3ZlID0gZnVuY3Rpb24gKGYpIHtcclxuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzaXplRnVuY3Rpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgaWYgKHJlc2l6ZUZ1bmN0aW9uc1tpXSA9PT0gZikge1xyXG4gICAgICAgICAgICAgICAgICByZXNpemVGdW5jdGlvbnMuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgIH07XHJcbiAgICAgIHJldHVybiBjYWxsUmVzaXplRnVuY3Rpb25zO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuZW5kYWxsID0gZnVuY3Rpb24gKHRyYW5zaXRpb24sIGNhbGxiYWNrKSB7XHJcbiAgICAgIHZhciBuID0gMDtcclxuICAgICAgdHJhbnNpdGlvblxyXG4gICAgICAgICAgLmVhY2goZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgKytuO1xyXG4gICAgICB9KVxyXG4gICAgICAgICAgLm9uKCdlbmQnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICBpZiAoIS0tbikge1xyXG4gICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuZ2VuZXJhdGVXYWl0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzO1xyXG4gICAgICB2YXIgdHJhbnNpdGlvbnNUb1dhaXQgPSBbXSwgZiA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xyXG4gICAgICAgICAgdmFyIHRpbWVyID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgIGlmICghJCQuaXNUYWJWaXNpYmxlKCkpIHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB2YXIgZG9uZSA9IDA7XHJcbiAgICAgICAgICAgICAgdHJhbnNpdGlvbnNUb1dhaXQuZm9yRWFjaChmdW5jdGlvbiAodCkge1xyXG4gICAgICAgICAgICAgICAgICBpZiAodC5lbXB0eSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBkb25lICs9IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgIHQudHJhbnNpdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBkb25lICs9IDE7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICBpZiAoZG9uZSA9PT0gdHJhbnNpdGlvbnNUb1dhaXQubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGltZXIpO1xyXG4gICAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2spIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LCA1MCk7XHJcbiAgICAgIH07XHJcbiAgICAgIGYuYWRkID0gZnVuY3Rpb24gKHRyYW5zaXRpb24pIHtcclxuICAgICAgICAgIHRyYW5zaXRpb25zVG9XYWl0LnB1c2godHJhbnNpdGlvbik7XHJcbiAgICAgIH07XHJcbiAgICAgIHJldHVybiBmO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUucGFyc2VEYXRlID0gZnVuY3Rpb24gKGRhdGUpIHtcclxuICAgICAgdmFyICQkID0gdGhpcywgcGFyc2VkRGF0ZTtcclxuICAgICAgaWYgKGRhdGUgaW5zdGFuY2VvZiBEYXRlKSB7XHJcbiAgICAgICAgICBwYXJzZWREYXRlID0gZGF0ZTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0eXBlb2YgZGF0ZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgIHBhcnNlZERhdGUgPSAkJC5kYXRhVGltZVBhcnNlKGRhdGUpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHR5cGVvZiBkYXRlID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgcGFyc2VkRGF0ZSA9IG5ldyBEYXRlKCtkYXRlKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0eXBlb2YgZGF0ZSA9PT0gJ251bWJlcicgJiYgIWlzTmFOKGRhdGUpKSB7XHJcbiAgICAgICAgICBwYXJzZWREYXRlID0gbmV3IERhdGUoK2RhdGUpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICghcGFyc2VkRGF0ZSB8fCBpc05hTigrcGFyc2VkRGF0ZSkpIHtcclxuICAgICAgICAgIHdpbmRvdy5jb25zb2xlLmVycm9yKFwiRmFpbGVkIHRvIHBhcnNlIHggJ1wiICsgZGF0ZSArIFwiJyB0byBEYXRlIG9iamVjdFwiKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gcGFyc2VkRGF0ZTtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmlzVGFiVmlzaWJsZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgcmV0dXJuICFkb2N1bWVudC5oaWRkZW47XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5nZXRQYXRoQm94ID0gZ2V0UGF0aEJveDtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5DTEFTUyA9IENMQVNTO1xuXG4gIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cclxuICAoZnVuY3Rpb24gKCkge1xyXG4gICAgICBpZiAoISgnU1ZHUGF0aFNlZycgaW4gd2luZG93KSkge1xyXG4gICAgICAgICAgLy8gU3BlYzogaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHMTEvc2luZ2xlLXBhZ2UuaHRtbCNwYXRocy1JbnRlcmZhY2VTVkdQYXRoU2VnXHJcbiAgICAgICAgICB3aW5kb3cuU1ZHUGF0aFNlZyA9IGZ1bmN0aW9uICh0eXBlLCB0eXBlQXNMZXR0ZXIsIG93bmluZ1BhdGhTZWdMaXN0KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5wYXRoU2VnVHlwZSA9IHR5cGU7XHJcbiAgICAgICAgICAgICAgdGhpcy5wYXRoU2VnVHlwZUFzTGV0dGVyID0gdHlwZUFzTGV0dGVyO1xyXG4gICAgICAgICAgICAgIHRoaXMuX293bmluZ1BhdGhTZWdMaXN0ID0gb3duaW5nUGF0aFNlZ0xpc3Q7XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgd2luZG93LlNWR1BhdGhTZWcucHJvdG90eXBlLmNsYXNzbmFtZSA9ICdTVkdQYXRoU2VnJztcclxuICAgICAgICAgIHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfVU5LTk9XTiA9IDA7XHJcbiAgICAgICAgICB3aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX0NMT1NFUEFUSCA9IDE7XHJcbiAgICAgICAgICB3aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX01PVkVUT19BQlMgPSAyO1xyXG4gICAgICAgICAgd2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19NT1ZFVE9fUkVMID0gMztcclxuICAgICAgICAgIHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfTElORVRPX0FCUyA9IDQ7XHJcbiAgICAgICAgICB3aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX0xJTkVUT19SRUwgPSA1O1xyXG4gICAgICAgICAgd2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19DVVJWRVRPX0NVQklDX0FCUyA9IDY7XHJcbiAgICAgICAgICB3aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX0NVUlZFVE9fQ1VCSUNfUkVMID0gNztcclxuICAgICAgICAgIHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfQ1VSVkVUT19RVUFEUkFUSUNfQUJTID0gODtcclxuICAgICAgICAgIHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfQ1VSVkVUT19RVUFEUkFUSUNfUkVMID0gOTtcclxuICAgICAgICAgIHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfQVJDX0FCUyA9IDEwO1xyXG4gICAgICAgICAgd2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19BUkNfUkVMID0gMTE7XHJcbiAgICAgICAgICB3aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX0xJTkVUT19IT1JJWk9OVEFMX0FCUyA9IDEyO1xyXG4gICAgICAgICAgd2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19MSU5FVE9fSE9SSVpPTlRBTF9SRUwgPSAxMztcclxuICAgICAgICAgIHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfTElORVRPX1ZFUlRJQ0FMX0FCUyA9IDE0O1xyXG4gICAgICAgICAgd2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19MSU5FVE9fVkVSVElDQUxfUkVMID0gMTU7XHJcbiAgICAgICAgICB3aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX0NVUlZFVE9fQ1VCSUNfU01PT1RIX0FCUyA9IDE2O1xyXG4gICAgICAgICAgd2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19DVVJWRVRPX0NVQklDX1NNT09USF9SRUwgPSAxNztcclxuICAgICAgICAgIHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfQ1VSVkVUT19RVUFEUkFUSUNfU01PT1RIX0FCUyA9IDE4O1xyXG4gICAgICAgICAgd2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19DVVJWRVRPX1FVQURSQVRJQ19TTU9PVEhfUkVMID0gMTk7XHJcbiAgICAgICAgICAvLyBOb3RpZnkgb3duaW5nIFBhdGhTZWdMaXN0IG9uIGFueSBjaGFuZ2VzIHNvIHRoZXkgY2FuIGJlIHN5bmNocm9uaXplZCBiYWNrIHRvIHRoZSBwYXRoIGVsZW1lbnQuXHJcbiAgICAgICAgICB3aW5kb3cuU1ZHUGF0aFNlZy5wcm90b3R5cGUuX3NlZ21lbnRDaGFuZ2VkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLl9vd25pbmdQYXRoU2VnTGlzdClcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fb3duaW5nUGF0aFNlZ0xpc3Quc2VnbWVudENoYW5nZWQodGhpcyk7XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgd2luZG93LlNWR1BhdGhTZWdDbG9zZVBhdGggPSBmdW5jdGlvbiAob3duaW5nUGF0aFNlZ0xpc3QpIHtcclxuICAgICAgICAgICAgICB3aW5kb3cuU1ZHUGF0aFNlZy5jYWxsKHRoaXMsIHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfQ0xPU0VQQVRILCAneicsIG93bmluZ1BhdGhTZWdMaXN0KTtcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICB3aW5kb3cuU1ZHUGF0aFNlZ0Nsb3NlUGF0aC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHdpbmRvdy5TVkdQYXRoU2VnLnByb3RvdHlwZSk7XHJcbiAgICAgICAgICB3aW5kb3cuU1ZHUGF0aFNlZ0Nsb3NlUGF0aC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuICdbb2JqZWN0IFNWR1BhdGhTZWdDbG9zZVBhdGhdJztcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICB3aW5kb3cuU1ZHUGF0aFNlZ0Nsb3NlUGF0aC5wcm90b3R5cGUuX2FzUGF0aFN0cmluZyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXRoU2VnVHlwZUFzTGV0dGVyO1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHdpbmRvdy5TVkdQYXRoU2VnQ2xvc2VQYXRoLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gbmV3IHdpbmRvdy5TVkdQYXRoU2VnQ2xvc2VQYXRoKHVuZGVmaW5lZCk7XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgd2luZG93LlNWR1BhdGhTZWdNb3ZldG9BYnMgPSBmdW5jdGlvbiAob3duaW5nUGF0aFNlZ0xpc3QsIHgsIHkpIHtcclxuICAgICAgICAgICAgICB3aW5kb3cuU1ZHUGF0aFNlZy5jYWxsKHRoaXMsIHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfTU9WRVRPX0FCUywgJ00nLCBvd25pbmdQYXRoU2VnTGlzdCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5feCA9IHg7XHJcbiAgICAgICAgICAgICAgdGhpcy5feSA9IHk7XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgd2luZG93LlNWR1BhdGhTZWdNb3ZldG9BYnMucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSh3aW5kb3cuU1ZHUGF0aFNlZy5wcm90b3R5cGUpO1xyXG4gICAgICAgICAgd2luZG93LlNWR1BhdGhTZWdNb3ZldG9BYnMucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiAnW29iamVjdCBTVkdQYXRoU2VnTW92ZXRvQWJzXSc7XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgd2luZG93LlNWR1BhdGhTZWdNb3ZldG9BYnMucHJvdG90eXBlLl9hc1BhdGhTdHJpbmcgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGF0aFNlZ1R5cGVBc0xldHRlciArICcgJyArIHRoaXMuX3ggKyAnICcgKyB0aGlzLl95O1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHdpbmRvdy5TVkdQYXRoU2VnTW92ZXRvQWJzLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gbmV3IHdpbmRvdy5TVkdQYXRoU2VnTW92ZXRvQWJzKHVuZGVmaW5lZCwgdGhpcy5feCwgdGhpcy5feSk7XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TVkdQYXRoU2VnTW92ZXRvQWJzLnByb3RvdHlwZSwgJ3gnLCB7XHJcbiAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl94O1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAoeCkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl94ID0geDtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fc2VnbWVudENoYW5nZWQoKTtcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWVcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TVkdQYXRoU2VnTW92ZXRvQWJzLnByb3RvdHlwZSwgJ3knLCB7XHJcbiAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl95O1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAoeSkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl95ID0geTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fc2VnbWVudENoYW5nZWQoKTtcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWVcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgd2luZG93LlNWR1BhdGhTZWdNb3ZldG9SZWwgPSBmdW5jdGlvbiAob3duaW5nUGF0aFNlZ0xpc3QsIHgsIHkpIHtcclxuICAgICAgICAgICAgICB3aW5kb3cuU1ZHUGF0aFNlZy5jYWxsKHRoaXMsIHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfTU9WRVRPX1JFTCwgJ20nLCBvd25pbmdQYXRoU2VnTGlzdCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5feCA9IHg7XHJcbiAgICAgICAgICAgICAgdGhpcy5feSA9IHk7XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgd2luZG93LlNWR1BhdGhTZWdNb3ZldG9SZWwucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSh3aW5kb3cuU1ZHUGF0aFNlZy5wcm90b3R5cGUpO1xyXG4gICAgICAgICAgd2luZG93LlNWR1BhdGhTZWdNb3ZldG9SZWwucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiAnW29iamVjdCBTVkdQYXRoU2VnTW92ZXRvUmVsXSc7XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgd2luZG93LlNWR1BhdGhTZWdNb3ZldG9SZWwucHJvdG90eXBlLl9hc1BhdGhTdHJpbmcgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGF0aFNlZ1R5cGVBc0xldHRlciArICcgJyArIHRoaXMuX3ggKyAnICcgKyB0aGlzLl95O1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHdpbmRvdy5TVkdQYXRoU2VnTW92ZXRvUmVsLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gbmV3IHdpbmRvdy5TVkdQYXRoU2VnTW92ZXRvUmVsKHVuZGVmaW5lZCwgdGhpcy5feCwgdGhpcy5feSk7XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TVkdQYXRoU2VnTW92ZXRvUmVsLnByb3RvdHlwZSwgJ3gnLCB7XHJcbiAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl94O1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAoeCkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl94ID0geDtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fc2VnbWVudENoYW5nZWQoKTtcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWVcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TVkdQYXRoU2VnTW92ZXRvUmVsLnByb3RvdHlwZSwgJ3knLCB7XHJcbiAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl95O1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAoeSkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl95ID0geTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fc2VnbWVudENoYW5nZWQoKTtcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWVcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgd2luZG93LlNWR1BhdGhTZWdMaW5ldG9BYnMgPSBmdW5jdGlvbiAob3duaW5nUGF0aFNlZ0xpc3QsIHgsIHkpIHtcclxuICAgICAgICAgICAgICB3aW5kb3cuU1ZHUGF0aFNlZy5jYWxsKHRoaXMsIHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfTElORVRPX0FCUywgJ0wnLCBvd25pbmdQYXRoU2VnTGlzdCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5feCA9IHg7XHJcbiAgICAgICAgICAgICAgdGhpcy5feSA9IHk7XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgd2luZG93LlNWR1BhdGhTZWdMaW5ldG9BYnMucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSh3aW5kb3cuU1ZHUGF0aFNlZy5wcm90b3R5cGUpO1xyXG4gICAgICAgICAgd2luZG93LlNWR1BhdGhTZWdMaW5ldG9BYnMucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiAnW29iamVjdCBTVkdQYXRoU2VnTGluZXRvQWJzXSc7XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgd2luZG93LlNWR1BhdGhTZWdMaW5ldG9BYnMucHJvdG90eXBlLl9hc1BhdGhTdHJpbmcgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGF0aFNlZ1R5cGVBc0xldHRlciArICcgJyArIHRoaXMuX3ggKyAnICcgKyB0aGlzLl95O1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHdpbmRvdy5TVkdQYXRoU2VnTGluZXRvQWJzLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gbmV3IHdpbmRvdy5TVkdQYXRoU2VnTGluZXRvQWJzKHVuZGVmaW5lZCwgdGhpcy5feCwgdGhpcy5feSk7XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TVkdQYXRoU2VnTGluZXRvQWJzLnByb3RvdHlwZSwgJ3gnLCB7XHJcbiAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl94O1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAoeCkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl94ID0geDtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fc2VnbWVudENoYW5nZWQoKTtcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWVcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TVkdQYXRoU2VnTGluZXRvQWJzLnByb3RvdHlwZSwgJ3knLCB7XHJcbiAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl95O1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAoeSkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl95ID0geTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fc2VnbWVudENoYW5nZWQoKTtcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWVcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgd2luZG93LlNWR1BhdGhTZWdMaW5ldG9SZWwgPSBmdW5jdGlvbiAob3duaW5nUGF0aFNlZ0xpc3QsIHgsIHkpIHtcclxuICAgICAgICAgICAgICB3aW5kb3cuU1ZHUGF0aFNlZy5jYWxsKHRoaXMsIHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfTElORVRPX1JFTCwgJ2wnLCBvd25pbmdQYXRoU2VnTGlzdCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5feCA9IHg7XHJcbiAgICAgICAgICAgICAgdGhpcy5feSA9IHk7XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgd2luZG93LlNWR1BhdGhTZWdMaW5ldG9SZWwucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSh3aW5kb3cuU1ZHUGF0aFNlZy5wcm90b3R5cGUpO1xyXG4gICAgICAgICAgd2luZG93LlNWR1BhdGhTZWdMaW5ldG9SZWwucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiAnW29iamVjdCBTVkdQYXRoU2VnTGluZXRvUmVsXSc7XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgd2luZG93LlNWR1BhdGhTZWdMaW5ldG9SZWwucHJvdG90eXBlLl9hc1BhdGhTdHJpbmcgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGF0aFNlZ1R5cGVBc0xldHRlciArICcgJyArIHRoaXMuX3ggKyAnICcgKyB0aGlzLl95O1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHdpbmRvdy5TVkdQYXRoU2VnTGluZXRvUmVsLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gbmV3IHdpbmRvdy5TVkdQYXRoU2VnTGluZXRvUmVsKHVuZGVmaW5lZCwgdGhpcy5feCwgdGhpcy5feSk7XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TVkdQYXRoU2VnTGluZXRvUmVsLnByb3RvdHlwZSwgJ3gnLCB7XHJcbiAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl94O1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAoeCkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl94ID0geDtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fc2VnbWVudENoYW5nZWQoKTtcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWVcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TVkdQYXRoU2VnTGluZXRvUmVsLnByb3RvdHlwZSwgJ3knLCB7XHJcbiAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl95O1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAoeSkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl95ID0geTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fc2VnbWVudENoYW5nZWQoKTtcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWVcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgd2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNBYnMgPSBmdW5jdGlvbiAob3duaW5nUGF0aFNlZ0xpc3QsIHgsIHksIHgxLCB5MSwgeDIsIHkyKSB7XHJcbiAgICAgICAgICAgICAgd2luZG93LlNWR1BhdGhTZWcuY2FsbCh0aGlzLCB3aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX0NVUlZFVE9fQ1VCSUNfQUJTLCAnQycsIG93bmluZ1BhdGhTZWdMaXN0KTtcclxuICAgICAgICAgICAgICB0aGlzLl94ID0geDtcclxuICAgICAgICAgICAgICB0aGlzLl95ID0geTtcclxuICAgICAgICAgICAgICB0aGlzLl94MSA9IHgxO1xyXG4gICAgICAgICAgICAgIHRoaXMuX3kxID0geTE7XHJcbiAgICAgICAgICAgICAgdGhpcy5feDIgPSB4MjtcclxuICAgICAgICAgICAgICB0aGlzLl95MiA9IHkyO1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b0N1YmljQWJzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUod2luZG93LlNWR1BhdGhTZWcucHJvdG90eXBlKTtcclxuICAgICAgICAgIHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b0N1YmljQWJzLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gJ1tvYmplY3QgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Fic10nO1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b0N1YmljQWJzLnByb3RvdHlwZS5fYXNQYXRoU3RyaW5nID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiAodGhpcy5wYXRoU2VnVHlwZUFzTGV0dGVyICtcclxuICAgICAgICAgICAgICAgICAgJyAnICtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5feDEgK1xyXG4gICAgICAgICAgICAgICAgICAnICcgK1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl95MSArXHJcbiAgICAgICAgICAgICAgICAgICcgJyArXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3gyICtcclxuICAgICAgICAgICAgICAgICAgJyAnICtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5feTIgK1xyXG4gICAgICAgICAgICAgICAgICAnICcgK1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl94ICtcclxuICAgICAgICAgICAgICAgICAgJyAnICtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5feSk7XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgd2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNBYnMucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBuZXcgd2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNBYnModW5kZWZpbmVkLCB0aGlzLl94LCB0aGlzLl95LCB0aGlzLl94MSwgdGhpcy5feTEsIHRoaXMuX3gyLCB0aGlzLl95Mik7XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b0N1YmljQWJzLnByb3RvdHlwZSwgJ3gnLCB7XHJcbiAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl94O1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAoeCkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl94ID0geDtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fc2VnbWVudENoYW5nZWQoKTtcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWVcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b0N1YmljQWJzLnByb3RvdHlwZSwgJ3knLCB7XHJcbiAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl95O1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAoeSkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl95ID0geTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fc2VnbWVudENoYW5nZWQoKTtcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWVcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b0N1YmljQWJzLnByb3RvdHlwZSwgJ3gxJywge1xyXG4gICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5feDE7XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uICh4MSkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl94MSA9IHgxO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9zZWdtZW50Q2hhbmdlZCgpO1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNBYnMucHJvdG90eXBlLCAneTEnLCB7XHJcbiAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl95MTtcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKHkxKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3kxID0geTE7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3NlZ21lbnRDaGFuZ2VkKCk7XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3cuU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Ficy5wcm90b3R5cGUsICd4MicsIHtcclxuICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3gyO1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAoeDIpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5feDIgPSB4MjtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fc2VnbWVudENoYW5nZWQoKTtcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWVcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b0N1YmljQWJzLnByb3RvdHlwZSwgJ3kyJywge1xyXG4gICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5feTI7XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uICh5Mikge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl95MiA9IHkyO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9zZWdtZW50Q2hhbmdlZCgpO1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICB3aW5kb3cuU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1JlbCA9IGZ1bmN0aW9uIChvd25pbmdQYXRoU2VnTGlzdCwgeCwgeSwgeDEsIHkxLCB4MiwgeTIpIHtcclxuICAgICAgICAgICAgICB3aW5kb3cuU1ZHUGF0aFNlZy5jYWxsKHRoaXMsIHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfQ1VSVkVUT19DVUJJQ19SRUwsICdjJywgb3duaW5nUGF0aFNlZ0xpc3QpO1xyXG4gICAgICAgICAgICAgIHRoaXMuX3ggPSB4O1xyXG4gICAgICAgICAgICAgIHRoaXMuX3kgPSB5O1xyXG4gICAgICAgICAgICAgIHRoaXMuX3gxID0geDE7XHJcbiAgICAgICAgICAgICAgdGhpcy5feTEgPSB5MTtcclxuICAgICAgICAgICAgICB0aGlzLl94MiA9IHgyO1xyXG4gICAgICAgICAgICAgIHRoaXMuX3kyID0geTI7XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgd2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNSZWwucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSh3aW5kb3cuU1ZHUGF0aFNlZy5wcm90b3R5cGUpO1xyXG4gICAgICAgICAgd2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNSZWwucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiAnW29iamVjdCBTVkdQYXRoU2VnQ3VydmV0b0N1YmljUmVsXSc7XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgd2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNSZWwucHJvdG90eXBlLl9hc1BhdGhTdHJpbmcgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuICh0aGlzLnBhdGhTZWdUeXBlQXNMZXR0ZXIgK1xyXG4gICAgICAgICAgICAgICAgICAnICcgK1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl94MSArXHJcbiAgICAgICAgICAgICAgICAgICcgJyArXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3kxICtcclxuICAgICAgICAgICAgICAgICAgJyAnICtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5feDIgK1xyXG4gICAgICAgICAgICAgICAgICAnICcgK1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl95MiArXHJcbiAgICAgICAgICAgICAgICAgICcgJyArXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3ggK1xyXG4gICAgICAgICAgICAgICAgICAnICcgK1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl95KTtcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICB3aW5kb3cuU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1JlbC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIG5ldyB3aW5kb3cuU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1JlbCh1bmRlZmluZWQsIHRoaXMuX3gsIHRoaXMuX3ksIHRoaXMuX3gxLCB0aGlzLl95MSwgdGhpcy5feDIsIHRoaXMuX3kyKTtcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNSZWwucHJvdG90eXBlLCAneCcsIHtcclxuICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3g7XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uICh4KSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3ggPSB4O1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9zZWdtZW50Q2hhbmdlZCgpO1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNSZWwucHJvdG90eXBlLCAneScsIHtcclxuICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3k7XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uICh5KSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3kgPSB5O1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9zZWdtZW50Q2hhbmdlZCgpO1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNSZWwucHJvdG90eXBlLCAneDEnLCB7XHJcbiAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl94MTtcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKHgxKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3gxID0geDE7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3NlZ21lbnRDaGFuZ2VkKCk7XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3cuU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1JlbC5wcm90b3R5cGUsICd5MScsIHtcclxuICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3kxO1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAoeTEpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5feTEgPSB5MTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fc2VnbWVudENoYW5nZWQoKTtcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWVcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b0N1YmljUmVsLnByb3RvdHlwZSwgJ3gyJywge1xyXG4gICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5feDI7XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uICh4Mikge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl94MiA9IHgyO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9zZWdtZW50Q2hhbmdlZCgpO1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNSZWwucHJvdG90eXBlLCAneTInLCB7XHJcbiAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl95MjtcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKHkyKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3kyID0geTI7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3NlZ21lbnRDaGFuZ2VkKCk7XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0FicyA9IGZ1bmN0aW9uIChvd25pbmdQYXRoU2VnTGlzdCwgeCwgeSwgeDEsIHkxKSB7XHJcbiAgICAgICAgICAgICAgd2luZG93LlNWR1BhdGhTZWcuY2FsbCh0aGlzLCB3aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX0NVUlZFVE9fUVVBRFJBVElDX0FCUywgJ1EnLCBvd25pbmdQYXRoU2VnTGlzdCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5feCA9IHg7XHJcbiAgICAgICAgICAgICAgdGhpcy5feSA9IHk7XHJcbiAgICAgICAgICAgICAgdGhpcy5feDEgPSB4MTtcclxuICAgICAgICAgICAgICB0aGlzLl95MSA9IHkxO1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0Ficy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHdpbmRvdy5TVkdQYXRoU2VnLnByb3RvdHlwZSk7XHJcbiAgICAgICAgICB3aW5kb3cuU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNBYnMucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiAnW29iamVjdCBTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0Fic10nO1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0Ficy5wcm90b3R5cGUuX2FzUGF0aFN0cmluZyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gKHRoaXMucGF0aFNlZ1R5cGVBc0xldHRlciArXHJcbiAgICAgICAgICAgICAgICAgICcgJyArXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3gxICtcclxuICAgICAgICAgICAgICAgICAgJyAnICtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5feTEgK1xyXG4gICAgICAgICAgICAgICAgICAnICcgK1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl94ICtcclxuICAgICAgICAgICAgICAgICAgJyAnICtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5feSk7XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgd2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljQWJzLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gbmV3IHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0Ficyh1bmRlZmluZWQsIHRoaXMuX3gsIHRoaXMuX3ksIHRoaXMuX3gxLCB0aGlzLl95MSk7XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0Ficy5wcm90b3R5cGUsICd4Jywge1xyXG4gICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5feDtcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKHgpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5feCA9IHg7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3NlZ21lbnRDaGFuZ2VkKCk7XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3cuU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNBYnMucHJvdG90eXBlLCAneScsIHtcclxuICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3k7XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uICh5KSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3kgPSB5O1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9zZWdtZW50Q2hhbmdlZCgpO1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljQWJzLnByb3RvdHlwZSwgJ3gxJywge1xyXG4gICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5feDE7XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uICh4MSkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl94MSA9IHgxO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9zZWdtZW50Q2hhbmdlZCgpO1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljQWJzLnByb3RvdHlwZSwgJ3kxJywge1xyXG4gICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5feTE7XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uICh5MSkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl95MSA9IHkxO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9zZWdtZW50Q2hhbmdlZCgpO1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICB3aW5kb3cuU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNSZWwgPSBmdW5jdGlvbiAob3duaW5nUGF0aFNlZ0xpc3QsIHgsIHksIHgxLCB5MSkge1xyXG4gICAgICAgICAgICAgIHdpbmRvdy5TVkdQYXRoU2VnLmNhbGwodGhpcywgd2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19DVVJWRVRPX1FVQURSQVRJQ19SRUwsICdxJywgb3duaW5nUGF0aFNlZ0xpc3QpO1xyXG4gICAgICAgICAgICAgIHRoaXMuX3ggPSB4O1xyXG4gICAgICAgICAgICAgIHRoaXMuX3kgPSB5O1xyXG4gICAgICAgICAgICAgIHRoaXMuX3gxID0geDE7XHJcbiAgICAgICAgICAgICAgdGhpcy5feTEgPSB5MTtcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICB3aW5kb3cuU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNSZWwucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSh3aW5kb3cuU1ZHUGF0aFNlZy5wcm90b3R5cGUpO1xyXG4gICAgICAgICAgd2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljUmVsLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gJ1tvYmplY3QgU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNSZWxdJztcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICB3aW5kb3cuU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNSZWwucHJvdG90eXBlLl9hc1BhdGhTdHJpbmcgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuICh0aGlzLnBhdGhTZWdUeXBlQXNMZXR0ZXIgK1xyXG4gICAgICAgICAgICAgICAgICAnICcgK1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl94MSArXHJcbiAgICAgICAgICAgICAgICAgICcgJyArXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3kxICtcclxuICAgICAgICAgICAgICAgICAgJyAnICtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5feCArXHJcbiAgICAgICAgICAgICAgICAgICcgJyArXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3kpO1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1JlbC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIG5ldyB3aW5kb3cuU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNSZWwodW5kZWZpbmVkLCB0aGlzLl94LCB0aGlzLl95LCB0aGlzLl94MSwgdGhpcy5feTEpO1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3cuU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNSZWwucHJvdG90eXBlLCAneCcsIHtcclxuICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3g7XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uICh4KSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3ggPSB4O1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9zZWdtZW50Q2hhbmdlZCgpO1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljUmVsLnByb3RvdHlwZSwgJ3knLCB7XHJcbiAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl95O1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAoeSkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl95ID0geTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fc2VnbWVudENoYW5nZWQoKTtcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWVcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1JlbC5wcm90b3R5cGUsICd4MScsIHtcclxuICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3gxO1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAoeDEpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5feDEgPSB4MTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fc2VnbWVudENoYW5nZWQoKTtcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWVcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1JlbC5wcm90b3R5cGUsICd5MScsIHtcclxuICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3kxO1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAoeTEpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5feTEgPSB5MTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fc2VnbWVudENoYW5nZWQoKTtcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWVcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgd2luZG93LlNWR1BhdGhTZWdBcmNBYnMgPSBmdW5jdGlvbiAob3duaW5nUGF0aFNlZ0xpc3QsIHgsIHksIHIxLCByMiwgYW5nbGUsIGxhcmdlQXJjRmxhZywgc3dlZXBGbGFnKSB7XHJcbiAgICAgICAgICAgICAgd2luZG93LlNWR1BhdGhTZWcuY2FsbCh0aGlzLCB3aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX0FSQ19BQlMsICdBJywgb3duaW5nUGF0aFNlZ0xpc3QpO1xyXG4gICAgICAgICAgICAgIHRoaXMuX3ggPSB4O1xyXG4gICAgICAgICAgICAgIHRoaXMuX3kgPSB5O1xyXG4gICAgICAgICAgICAgIHRoaXMuX3IxID0gcjE7XHJcbiAgICAgICAgICAgICAgdGhpcy5fcjIgPSByMjtcclxuICAgICAgICAgICAgICB0aGlzLl9hbmdsZSA9IGFuZ2xlO1xyXG4gICAgICAgICAgICAgIHRoaXMuX2xhcmdlQXJjRmxhZyA9IGxhcmdlQXJjRmxhZztcclxuICAgICAgICAgICAgICB0aGlzLl9zd2VlcEZsYWcgPSBzd2VlcEZsYWc7XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgd2luZG93LlNWR1BhdGhTZWdBcmNBYnMucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSh3aW5kb3cuU1ZHUGF0aFNlZy5wcm90b3R5cGUpO1xyXG4gICAgICAgICAgd2luZG93LlNWR1BhdGhTZWdBcmNBYnMucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiAnW29iamVjdCBTVkdQYXRoU2VnQXJjQWJzXSc7XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgd2luZG93LlNWR1BhdGhTZWdBcmNBYnMucHJvdG90eXBlLl9hc1BhdGhTdHJpbmcgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuICh0aGlzLnBhdGhTZWdUeXBlQXNMZXR0ZXIgK1xyXG4gICAgICAgICAgICAgICAgICAnICcgK1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9yMSArXHJcbiAgICAgICAgICAgICAgICAgICcgJyArXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3IyICtcclxuICAgICAgICAgICAgICAgICAgJyAnICtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fYW5nbGUgK1xyXG4gICAgICAgICAgICAgICAgICAnICcgK1xyXG4gICAgICAgICAgICAgICAgICAodGhpcy5fbGFyZ2VBcmNGbGFnID8gJzEnIDogJzAnKSArXHJcbiAgICAgICAgICAgICAgICAgICcgJyArXHJcbiAgICAgICAgICAgICAgICAgICh0aGlzLl9zd2VlcEZsYWcgPyAnMScgOiAnMCcpICtcclxuICAgICAgICAgICAgICAgICAgJyAnICtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5feCArXHJcbiAgICAgICAgICAgICAgICAgICcgJyArXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3kpO1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHdpbmRvdy5TVkdQYXRoU2VnQXJjQWJzLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gbmV3IHdpbmRvdy5TVkdQYXRoU2VnQXJjQWJzKHVuZGVmaW5lZCwgdGhpcy5feCwgdGhpcy5feSwgdGhpcy5fcjEsIHRoaXMuX3IyLCB0aGlzLl9hbmdsZSwgdGhpcy5fbGFyZ2VBcmNGbGFnLCB0aGlzLl9zd2VlcEZsYWcpO1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3cuU1ZHUGF0aFNlZ0FyY0Ficy5wcm90b3R5cGUsICd4Jywge1xyXG4gICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5feDtcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKHgpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5feCA9IHg7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3NlZ21lbnRDaGFuZ2VkKCk7XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3cuU1ZHUGF0aFNlZ0FyY0Ficy5wcm90b3R5cGUsICd5Jywge1xyXG4gICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5feTtcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKHkpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5feSA9IHk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3NlZ21lbnRDaGFuZ2VkKCk7XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3cuU1ZHUGF0aFNlZ0FyY0Ficy5wcm90b3R5cGUsICdyMScsIHtcclxuICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3IxO1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAocjEpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fcjEgPSByMTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fc2VnbWVudENoYW5nZWQoKTtcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWVcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TVkdQYXRoU2VnQXJjQWJzLnByb3RvdHlwZSwgJ3IyJywge1xyXG4gICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcjI7XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uIChyMikge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9yMiA9IHIyO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9zZWdtZW50Q2hhbmdlZCgpO1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNWR1BhdGhTZWdBcmNBYnMucHJvdG90eXBlLCAnYW5nbGUnLCB7XHJcbiAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9hbmdsZTtcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKGFuZ2xlKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2FuZ2xlID0gYW5nbGU7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3NlZ21lbnRDaGFuZ2VkKCk7XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3cuU1ZHUGF0aFNlZ0FyY0Ficy5wcm90b3R5cGUsICdsYXJnZUFyY0ZsYWcnLCB7XHJcbiAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9sYXJnZUFyY0ZsYWc7XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uIChsYXJnZUFyY0ZsYWcpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fbGFyZ2VBcmNGbGFnID0gbGFyZ2VBcmNGbGFnO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9zZWdtZW50Q2hhbmdlZCgpO1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNWR1BhdGhTZWdBcmNBYnMucHJvdG90eXBlLCAnc3dlZXBGbGFnJywge1xyXG4gICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3dlZXBGbGFnO1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAoc3dlZXBGbGFnKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3N3ZWVwRmxhZyA9IHN3ZWVwRmxhZztcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fc2VnbWVudENoYW5nZWQoKTtcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWVcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgd2luZG93LlNWR1BhdGhTZWdBcmNSZWwgPSBmdW5jdGlvbiAob3duaW5nUGF0aFNlZ0xpc3QsIHgsIHksIHIxLCByMiwgYW5nbGUsIGxhcmdlQXJjRmxhZywgc3dlZXBGbGFnKSB7XHJcbiAgICAgICAgICAgICAgd2luZG93LlNWR1BhdGhTZWcuY2FsbCh0aGlzLCB3aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX0FSQ19SRUwsICdhJywgb3duaW5nUGF0aFNlZ0xpc3QpO1xyXG4gICAgICAgICAgICAgIHRoaXMuX3ggPSB4O1xyXG4gICAgICAgICAgICAgIHRoaXMuX3kgPSB5O1xyXG4gICAgICAgICAgICAgIHRoaXMuX3IxID0gcjE7XHJcbiAgICAgICAgICAgICAgdGhpcy5fcjIgPSByMjtcclxuICAgICAgICAgICAgICB0aGlzLl9hbmdsZSA9IGFuZ2xlO1xyXG4gICAgICAgICAgICAgIHRoaXMuX2xhcmdlQXJjRmxhZyA9IGxhcmdlQXJjRmxhZztcclxuICAgICAgICAgICAgICB0aGlzLl9zd2VlcEZsYWcgPSBzd2VlcEZsYWc7XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgd2luZG93LlNWR1BhdGhTZWdBcmNSZWwucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSh3aW5kb3cuU1ZHUGF0aFNlZy5wcm90b3R5cGUpO1xyXG4gICAgICAgICAgd2luZG93LlNWR1BhdGhTZWdBcmNSZWwucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiAnW29iamVjdCBTVkdQYXRoU2VnQXJjUmVsXSc7XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgd2luZG93LlNWR1BhdGhTZWdBcmNSZWwucHJvdG90eXBlLl9hc1BhdGhTdHJpbmcgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuICh0aGlzLnBhdGhTZWdUeXBlQXNMZXR0ZXIgK1xyXG4gICAgICAgICAgICAgICAgICAnICcgK1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9yMSArXHJcbiAgICAgICAgICAgICAgICAgICcgJyArXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3IyICtcclxuICAgICAgICAgICAgICAgICAgJyAnICtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fYW5nbGUgK1xyXG4gICAgICAgICAgICAgICAgICAnICcgK1xyXG4gICAgICAgICAgICAgICAgICAodGhpcy5fbGFyZ2VBcmNGbGFnID8gJzEnIDogJzAnKSArXHJcbiAgICAgICAgICAgICAgICAgICcgJyArXHJcbiAgICAgICAgICAgICAgICAgICh0aGlzLl9zd2VlcEZsYWcgPyAnMScgOiAnMCcpICtcclxuICAgICAgICAgICAgICAgICAgJyAnICtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5feCArXHJcbiAgICAgICAgICAgICAgICAgICcgJyArXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3kpO1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHdpbmRvdy5TVkdQYXRoU2VnQXJjUmVsLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gbmV3IHdpbmRvdy5TVkdQYXRoU2VnQXJjUmVsKHVuZGVmaW5lZCwgdGhpcy5feCwgdGhpcy5feSwgdGhpcy5fcjEsIHRoaXMuX3IyLCB0aGlzLl9hbmdsZSwgdGhpcy5fbGFyZ2VBcmNGbGFnLCB0aGlzLl9zd2VlcEZsYWcpO1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3cuU1ZHUGF0aFNlZ0FyY1JlbC5wcm90b3R5cGUsICd4Jywge1xyXG4gICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5feDtcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKHgpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5feCA9IHg7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3NlZ21lbnRDaGFuZ2VkKCk7XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3cuU1ZHUGF0aFNlZ0FyY1JlbC5wcm90b3R5cGUsICd5Jywge1xyXG4gICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5feTtcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKHkpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5feSA9IHk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3NlZ21lbnRDaGFuZ2VkKCk7XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3cuU1ZHUGF0aFNlZ0FyY1JlbC5wcm90b3R5cGUsICdyMScsIHtcclxuICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3IxO1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAocjEpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fcjEgPSByMTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fc2VnbWVudENoYW5nZWQoKTtcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWVcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TVkdQYXRoU2VnQXJjUmVsLnByb3RvdHlwZSwgJ3IyJywge1xyXG4gICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcjI7XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uIChyMikge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9yMiA9IHIyO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9zZWdtZW50Q2hhbmdlZCgpO1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNWR1BhdGhTZWdBcmNSZWwucHJvdG90eXBlLCAnYW5nbGUnLCB7XHJcbiAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9hbmdsZTtcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKGFuZ2xlKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2FuZ2xlID0gYW5nbGU7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3NlZ21lbnRDaGFuZ2VkKCk7XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3cuU1ZHUGF0aFNlZ0FyY1JlbC5wcm90b3R5cGUsICdsYXJnZUFyY0ZsYWcnLCB7XHJcbiAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9sYXJnZUFyY0ZsYWc7XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uIChsYXJnZUFyY0ZsYWcpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fbGFyZ2VBcmNGbGFnID0gbGFyZ2VBcmNGbGFnO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9zZWdtZW50Q2hhbmdlZCgpO1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNWR1BhdGhTZWdBcmNSZWwucHJvdG90eXBlLCAnc3dlZXBGbGFnJywge1xyXG4gICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3dlZXBGbGFnO1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAoc3dlZXBGbGFnKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3N3ZWVwRmxhZyA9IHN3ZWVwRmxhZztcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fc2VnbWVudENoYW5nZWQoKTtcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWVcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgd2luZG93LlNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsQWJzID0gZnVuY3Rpb24gKG93bmluZ1BhdGhTZWdMaXN0LCB4KSB7XHJcbiAgICAgICAgICAgICAgd2luZG93LlNWR1BhdGhTZWcuY2FsbCh0aGlzLCB3aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX0xJTkVUT19IT1JJWk9OVEFMX0FCUywgJ0gnLCBvd25pbmdQYXRoU2VnTGlzdCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5feCA9IHg7XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgd2luZG93LlNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsQWJzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUod2luZG93LlNWR1BhdGhTZWcucHJvdG90eXBlKTtcclxuICAgICAgICAgIHdpbmRvdy5TVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbEFicy5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuICdbb2JqZWN0IFNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsQWJzXSc7XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgd2luZG93LlNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsQWJzLnByb3RvdHlwZS5fYXNQYXRoU3RyaW5nID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhdGhTZWdUeXBlQXNMZXR0ZXIgKyAnICcgKyB0aGlzLl94O1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHdpbmRvdy5TVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbEFicy5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIG5ldyB3aW5kb3cuU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxBYnModW5kZWZpbmVkLCB0aGlzLl94KTtcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsQWJzLnByb3RvdHlwZSwgJ3gnLCB7XHJcbiAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl94O1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAoeCkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl94ID0geDtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fc2VnbWVudENoYW5nZWQoKTtcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWVcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgd2luZG93LlNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsUmVsID0gZnVuY3Rpb24gKG93bmluZ1BhdGhTZWdMaXN0LCB4KSB7XHJcbiAgICAgICAgICAgICAgd2luZG93LlNWR1BhdGhTZWcuY2FsbCh0aGlzLCB3aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX0xJTkVUT19IT1JJWk9OVEFMX1JFTCwgJ2gnLCBvd25pbmdQYXRoU2VnTGlzdCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5feCA9IHg7XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgd2luZG93LlNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsUmVsLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUod2luZG93LlNWR1BhdGhTZWcucHJvdG90eXBlKTtcclxuICAgICAgICAgIHdpbmRvdy5TVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbFJlbC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuICdbb2JqZWN0IFNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsUmVsXSc7XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgd2luZG93LlNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsUmVsLnByb3RvdHlwZS5fYXNQYXRoU3RyaW5nID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhdGhTZWdUeXBlQXNMZXR0ZXIgKyAnICcgKyB0aGlzLl94O1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHdpbmRvdy5TVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbFJlbC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIG5ldyB3aW5kb3cuU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxSZWwodW5kZWZpbmVkLCB0aGlzLl94KTtcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsUmVsLnByb3RvdHlwZSwgJ3gnLCB7XHJcbiAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl94O1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAoeCkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl94ID0geDtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fc2VnbWVudENoYW5nZWQoKTtcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWVcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgd2luZG93LlNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbEFicyA9IGZ1bmN0aW9uIChvd25pbmdQYXRoU2VnTGlzdCwgeSkge1xyXG4gICAgICAgICAgICAgIHdpbmRvdy5TVkdQYXRoU2VnLmNhbGwodGhpcywgd2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19MSU5FVE9fVkVSVElDQUxfQUJTLCAnVicsIG93bmluZ1BhdGhTZWdMaXN0KTtcclxuICAgICAgICAgICAgICB0aGlzLl95ID0geTtcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICB3aW5kb3cuU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsQWJzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUod2luZG93LlNWR1BhdGhTZWcucHJvdG90eXBlKTtcclxuICAgICAgICAgIHdpbmRvdy5TVkdQYXRoU2VnTGluZXRvVmVydGljYWxBYnMucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiAnW29iamVjdCBTVkdQYXRoU2VnTGluZXRvVmVydGljYWxBYnNdJztcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICB3aW5kb3cuU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsQWJzLnByb3RvdHlwZS5fYXNQYXRoU3RyaW5nID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhdGhTZWdUeXBlQXNMZXR0ZXIgKyAnICcgKyB0aGlzLl95O1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHdpbmRvdy5TVkdQYXRoU2VnTGluZXRvVmVydGljYWxBYnMucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBuZXcgd2luZG93LlNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbEFicyh1bmRlZmluZWQsIHRoaXMuX3kpO1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3cuU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsQWJzLnByb3RvdHlwZSwgJ3knLCB7XHJcbiAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl95O1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAoeSkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl95ID0geTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fc2VnbWVudENoYW5nZWQoKTtcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWVcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgd2luZG93LlNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbFJlbCA9IGZ1bmN0aW9uIChvd25pbmdQYXRoU2VnTGlzdCwgeSkge1xyXG4gICAgICAgICAgICAgIHdpbmRvdy5TVkdQYXRoU2VnLmNhbGwodGhpcywgd2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19MSU5FVE9fVkVSVElDQUxfUkVMLCAndicsIG93bmluZ1BhdGhTZWdMaXN0KTtcclxuICAgICAgICAgICAgICB0aGlzLl95ID0geTtcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICB3aW5kb3cuU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsUmVsLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUod2luZG93LlNWR1BhdGhTZWcucHJvdG90eXBlKTtcclxuICAgICAgICAgIHdpbmRvdy5TVkdQYXRoU2VnTGluZXRvVmVydGljYWxSZWwucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiAnW29iamVjdCBTVkdQYXRoU2VnTGluZXRvVmVydGljYWxSZWxdJztcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICB3aW5kb3cuU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsUmVsLnByb3RvdHlwZS5fYXNQYXRoU3RyaW5nID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhdGhTZWdUeXBlQXNMZXR0ZXIgKyAnICcgKyB0aGlzLl95O1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHdpbmRvdy5TVkdQYXRoU2VnTGluZXRvVmVydGljYWxSZWwucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBuZXcgd2luZG93LlNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbFJlbCh1bmRlZmluZWQsIHRoaXMuX3kpO1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3cuU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsUmVsLnByb3RvdHlwZSwgJ3knLCB7XHJcbiAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl95O1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAoeSkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl95ID0geTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fc2VnbWVudENoYW5nZWQoKTtcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWVcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgd2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhBYnMgPSBmdW5jdGlvbiAob3duaW5nUGF0aFNlZ0xpc3QsIHgsIHksIHgyLCB5Mikge1xyXG4gICAgICAgICAgICAgIHdpbmRvdy5TVkdQYXRoU2VnLmNhbGwodGhpcywgd2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19DVVJWRVRPX0NVQklDX1NNT09USF9BQlMsICdTJywgb3duaW5nUGF0aFNlZ0xpc3QpO1xyXG4gICAgICAgICAgICAgIHRoaXMuX3ggPSB4O1xyXG4gICAgICAgICAgICAgIHRoaXMuX3kgPSB5O1xyXG4gICAgICAgICAgICAgIHRoaXMuX3gyID0geDI7XHJcbiAgICAgICAgICAgICAgdGhpcy5feTIgPSB5MjtcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICB3aW5kb3cuU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aEFicy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHdpbmRvdy5TVkdQYXRoU2VnLnByb3RvdHlwZSk7XHJcbiAgICAgICAgICB3aW5kb3cuU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aEFicy5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuICdbb2JqZWN0IFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhBYnNdJztcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICB3aW5kb3cuU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aEFicy5wcm90b3R5cGUuX2FzUGF0aFN0cmluZyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gKHRoaXMucGF0aFNlZ1R5cGVBc0xldHRlciArXHJcbiAgICAgICAgICAgICAgICAgICcgJyArXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3gyICtcclxuICAgICAgICAgICAgICAgICAgJyAnICtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5feTIgK1xyXG4gICAgICAgICAgICAgICAgICAnICcgK1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl94ICtcclxuICAgICAgICAgICAgICAgICAgJyAnICtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5feSk7XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgd2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhBYnMucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBuZXcgd2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhBYnModW5kZWZpbmVkLCB0aGlzLl94LCB0aGlzLl95LCB0aGlzLl94MiwgdGhpcy5feTIpO1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3cuU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aEFicy5wcm90b3R5cGUsICd4Jywge1xyXG4gICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5feDtcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKHgpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5feCA9IHg7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3NlZ21lbnRDaGFuZ2VkKCk7XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3cuU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aEFicy5wcm90b3R5cGUsICd5Jywge1xyXG4gICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5feTtcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKHkpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5feSA9IHk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3NlZ21lbnRDaGFuZ2VkKCk7XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3cuU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aEFicy5wcm90b3R5cGUsICd4MicsIHtcclxuICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3gyO1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAoeDIpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5feDIgPSB4MjtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fc2VnbWVudENoYW5nZWQoKTtcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWVcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoQWJzLnByb3RvdHlwZSwgJ3kyJywge1xyXG4gICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5feTI7XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uICh5Mikge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl95MiA9IHkyO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9zZWdtZW50Q2hhbmdlZCgpO1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICB3aW5kb3cuU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aFJlbCA9IGZ1bmN0aW9uIChvd25pbmdQYXRoU2VnTGlzdCwgeCwgeSwgeDIsIHkyKSB7XHJcbiAgICAgICAgICAgICAgd2luZG93LlNWR1BhdGhTZWcuY2FsbCh0aGlzLCB3aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX0NVUlZFVE9fQ1VCSUNfU01PT1RIX1JFTCwgJ3MnLCBvd25pbmdQYXRoU2VnTGlzdCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5feCA9IHg7XHJcbiAgICAgICAgICAgICAgdGhpcy5feSA9IHk7XHJcbiAgICAgICAgICAgICAgdGhpcy5feDIgPSB4MjtcclxuICAgICAgICAgICAgICB0aGlzLl95MiA9IHkyO1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoUmVsLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUod2luZG93LlNWR1BhdGhTZWcucHJvdG90eXBlKTtcclxuICAgICAgICAgIHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoUmVsLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gJ1tvYmplY3QgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aFJlbF0nO1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoUmVsLnByb3RvdHlwZS5fYXNQYXRoU3RyaW5nID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiAodGhpcy5wYXRoU2VnVHlwZUFzTGV0dGVyICtcclxuICAgICAgICAgICAgICAgICAgJyAnICtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5feDIgK1xyXG4gICAgICAgICAgICAgICAgICAnICcgK1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl95MiArXHJcbiAgICAgICAgICAgICAgICAgICcgJyArXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3ggK1xyXG4gICAgICAgICAgICAgICAgICAnICcgK1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl95KTtcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICB3aW5kb3cuU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aFJlbC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIG5ldyB3aW5kb3cuU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aFJlbCh1bmRlZmluZWQsIHRoaXMuX3gsIHRoaXMuX3ksIHRoaXMuX3gyLCB0aGlzLl95Mik7XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoUmVsLnByb3RvdHlwZSwgJ3gnLCB7XHJcbiAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl94O1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAoeCkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl94ID0geDtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fc2VnbWVudENoYW5nZWQoKTtcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWVcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoUmVsLnByb3RvdHlwZSwgJ3knLCB7XHJcbiAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl95O1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAoeSkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl95ID0geTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fc2VnbWVudENoYW5nZWQoKTtcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWVcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoUmVsLnByb3RvdHlwZSwgJ3gyJywge1xyXG4gICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5feDI7XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uICh4Mikge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl94MiA9IHgyO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9zZWdtZW50Q2hhbmdlZCgpO1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhSZWwucHJvdG90eXBlLCAneTInLCB7XHJcbiAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl95MjtcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKHkyKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3kyID0geTI7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3NlZ21lbnRDaGFuZ2VkKCk7XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aEFicyA9IGZ1bmN0aW9uIChvd25pbmdQYXRoU2VnTGlzdCwgeCwgeSkge1xyXG4gICAgICAgICAgICAgIHdpbmRvdy5TVkdQYXRoU2VnLmNhbGwodGhpcywgd2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19DVVJWRVRPX1FVQURSQVRJQ19TTU9PVEhfQUJTLCAnVCcsIG93bmluZ1BhdGhTZWdMaXN0KTtcclxuICAgICAgICAgICAgICB0aGlzLl94ID0geDtcclxuICAgICAgICAgICAgICB0aGlzLl95ID0geTtcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICB3aW5kb3cuU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhBYnMucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSh3aW5kb3cuU1ZHUGF0aFNlZy5wcm90b3R5cGUpO1xyXG4gICAgICAgICAgd2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoQWJzLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gJ1tvYmplY3QgU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhBYnNdJztcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICB3aW5kb3cuU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhBYnMucHJvdG90eXBlLl9hc1BhdGhTdHJpbmcgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGF0aFNlZ1R5cGVBc0xldHRlciArICcgJyArIHRoaXMuX3ggKyAnICcgKyB0aGlzLl95O1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aEFicy5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIG5ldyB3aW5kb3cuU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhBYnModW5kZWZpbmVkLCB0aGlzLl94LCB0aGlzLl95KTtcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoQWJzLnByb3RvdHlwZSwgJ3gnLCB7XHJcbiAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl94O1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAoeCkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl94ID0geDtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fc2VnbWVudENoYW5nZWQoKTtcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWVcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aEFicy5wcm90b3R5cGUsICd5Jywge1xyXG4gICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5feTtcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKHkpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5feSA9IHk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3NlZ21lbnRDaGFuZ2VkKCk7XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aFJlbCA9IGZ1bmN0aW9uIChvd25pbmdQYXRoU2VnTGlzdCwgeCwgeSkge1xyXG4gICAgICAgICAgICAgIHdpbmRvdy5TVkdQYXRoU2VnLmNhbGwodGhpcywgd2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19DVVJWRVRPX1FVQURSQVRJQ19TTU9PVEhfUkVMLCAndCcsIG93bmluZ1BhdGhTZWdMaXN0KTtcclxuICAgICAgICAgICAgICB0aGlzLl94ID0geDtcclxuICAgICAgICAgICAgICB0aGlzLl95ID0geTtcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICB3aW5kb3cuU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhSZWwucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSh3aW5kb3cuU1ZHUGF0aFNlZy5wcm90b3R5cGUpO1xyXG4gICAgICAgICAgd2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoUmVsLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gJ1tvYmplY3QgU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhSZWxdJztcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICB3aW5kb3cuU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhSZWwucHJvdG90eXBlLl9hc1BhdGhTdHJpbmcgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGF0aFNlZ1R5cGVBc0xldHRlciArICcgJyArIHRoaXMuX3ggKyAnICcgKyB0aGlzLl95O1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aFJlbC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIG5ldyB3aW5kb3cuU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhSZWwodW5kZWZpbmVkLCB0aGlzLl94LCB0aGlzLl95KTtcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoUmVsLnByb3RvdHlwZSwgJ3gnLCB7XHJcbiAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl94O1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAoeCkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl94ID0geDtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fc2VnbWVudENoYW5nZWQoKTtcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWVcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aFJlbC5wcm90b3R5cGUsICd5Jywge1xyXG4gICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5feTtcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKHkpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5feSA9IHk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3NlZ21lbnRDaGFuZ2VkKCk7XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIC8vIEFkZCBjcmVhdGVTVkdQYXRoU2VnKiBmdW5jdGlvbnMgdG8gd2luZG93LlNWR1BhdGhFbGVtZW50LlxyXG4gICAgICAgICAgLy8gU3BlYzogaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHMTEvc2luZ2xlLXBhZ2UuaHRtbCNwYXRocy1JbnRlcmZhY2V3aW5kb3cuU1ZHUGF0aEVsZW1lbnQuXHJcbiAgICAgICAgICB3aW5kb3cuU1ZHUGF0aEVsZW1lbnQucHJvdG90eXBlLmNyZWF0ZVNWR1BhdGhTZWdDbG9zZVBhdGggPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIG5ldyB3aW5kb3cuU1ZHUGF0aFNlZ0Nsb3NlUGF0aCh1bmRlZmluZWQpO1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHdpbmRvdy5TVkdQYXRoRWxlbWVudC5wcm90b3R5cGUuY3JlYXRlU1ZHUGF0aFNlZ01vdmV0b0FicyA9IGZ1bmN0aW9uICh4LCB5KSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIG5ldyB3aW5kb3cuU1ZHUGF0aFNlZ01vdmV0b0Ficyh1bmRlZmluZWQsIHgsIHkpO1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHdpbmRvdy5TVkdQYXRoRWxlbWVudC5wcm90b3R5cGUuY3JlYXRlU1ZHUGF0aFNlZ01vdmV0b1JlbCA9IGZ1bmN0aW9uICh4LCB5KSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIG5ldyB3aW5kb3cuU1ZHUGF0aFNlZ01vdmV0b1JlbCh1bmRlZmluZWQsIHgsIHkpO1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHdpbmRvdy5TVkdQYXRoRWxlbWVudC5wcm90b3R5cGUuY3JlYXRlU1ZHUGF0aFNlZ0xpbmV0b0FicyA9IGZ1bmN0aW9uICh4LCB5KSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIG5ldyB3aW5kb3cuU1ZHUGF0aFNlZ0xpbmV0b0Ficyh1bmRlZmluZWQsIHgsIHkpO1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHdpbmRvdy5TVkdQYXRoRWxlbWVudC5wcm90b3R5cGUuY3JlYXRlU1ZHUGF0aFNlZ0xpbmV0b1JlbCA9IGZ1bmN0aW9uICh4LCB5KSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIG5ldyB3aW5kb3cuU1ZHUGF0aFNlZ0xpbmV0b1JlbCh1bmRlZmluZWQsIHgsIHkpO1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHdpbmRvdy5TVkdQYXRoRWxlbWVudC5wcm90b3R5cGUuY3JlYXRlU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0FicyA9IGZ1bmN0aW9uICh4LCB5LCB4MSwgeTEsIHgyLCB5Mikge1xyXG4gICAgICAgICAgICAgIHJldHVybiBuZXcgd2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNBYnModW5kZWZpbmVkLCB4LCB5LCB4MSwgeTEsIHgyLCB5Mik7XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgd2luZG93LlNWR1BhdGhFbGVtZW50LnByb3RvdHlwZS5jcmVhdGVTVkdQYXRoU2VnQ3VydmV0b0N1YmljUmVsID0gZnVuY3Rpb24gKHgsIHksIHgxLCB5MSwgeDIsIHkyKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIG5ldyB3aW5kb3cuU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1JlbCh1bmRlZmluZWQsIHgsIHksIHgxLCB5MSwgeDIsIHkyKTtcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICB3aW5kb3cuU1ZHUGF0aEVsZW1lbnQucHJvdG90eXBlLmNyZWF0ZVNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljQWJzID0gZnVuY3Rpb24gKHgsIHksIHgxLCB5MSkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBuZXcgd2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljQWJzKHVuZGVmaW5lZCwgeCwgeSwgeDEsIHkxKTtcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICB3aW5kb3cuU1ZHUGF0aEVsZW1lbnQucHJvdG90eXBlLmNyZWF0ZVNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljUmVsID0gZnVuY3Rpb24gKHgsIHksIHgxLCB5MSkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBuZXcgd2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljUmVsKHVuZGVmaW5lZCwgeCwgeSwgeDEsIHkxKTtcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICB3aW5kb3cuU1ZHUGF0aEVsZW1lbnQucHJvdG90eXBlLmNyZWF0ZVNWR1BhdGhTZWdBcmNBYnMgPSBmdW5jdGlvbiAoeCwgeSwgcjEsIHIyLCBhbmdsZSwgbGFyZ2VBcmNGbGFnLCBzd2VlcEZsYWcpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gbmV3IHdpbmRvdy5TVkdQYXRoU2VnQXJjQWJzKHVuZGVmaW5lZCwgeCwgeSwgcjEsIHIyLCBhbmdsZSwgbGFyZ2VBcmNGbGFnLCBzd2VlcEZsYWcpO1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHdpbmRvdy5TVkdQYXRoRWxlbWVudC5wcm90b3R5cGUuY3JlYXRlU1ZHUGF0aFNlZ0FyY1JlbCA9IGZ1bmN0aW9uICh4LCB5LCByMSwgcjIsIGFuZ2xlLCBsYXJnZUFyY0ZsYWcsIHN3ZWVwRmxhZykge1xyXG4gICAgICAgICAgICAgIHJldHVybiBuZXcgd2luZG93LlNWR1BhdGhTZWdBcmNSZWwodW5kZWZpbmVkLCB4LCB5LCByMSwgcjIsIGFuZ2xlLCBsYXJnZUFyY0ZsYWcsIHN3ZWVwRmxhZyk7XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgd2luZG93LlNWR1BhdGhFbGVtZW50LnByb3RvdHlwZS5jcmVhdGVTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbEFicyA9IGZ1bmN0aW9uICh4KSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIG5ldyB3aW5kb3cuU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxBYnModW5kZWZpbmVkLCB4KTtcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICB3aW5kb3cuU1ZHUGF0aEVsZW1lbnQucHJvdG90eXBlLmNyZWF0ZVNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsUmVsID0gZnVuY3Rpb24gKHgpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gbmV3IHdpbmRvdy5TVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbFJlbCh1bmRlZmluZWQsIHgpO1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHdpbmRvdy5TVkdQYXRoRWxlbWVudC5wcm90b3R5cGUuY3JlYXRlU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsQWJzID0gZnVuY3Rpb24gKHkpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gbmV3IHdpbmRvdy5TVkdQYXRoU2VnTGluZXRvVmVydGljYWxBYnModW5kZWZpbmVkLCB5KTtcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICB3aW5kb3cuU1ZHUGF0aEVsZW1lbnQucHJvdG90eXBlLmNyZWF0ZVNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbFJlbCA9IGZ1bmN0aW9uICh5KSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIG5ldyB3aW5kb3cuU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsUmVsKHVuZGVmaW5lZCwgeSk7XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgd2luZG93LlNWR1BhdGhFbGVtZW50LnByb3RvdHlwZS5jcmVhdGVTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoQWJzID0gZnVuY3Rpb24gKHgsIHksIHgyLCB5Mikge1xyXG4gICAgICAgICAgICAgIHJldHVybiBuZXcgd2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhBYnModW5kZWZpbmVkLCB4LCB5LCB4MiwgeTIpO1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHdpbmRvdy5TVkdQYXRoRWxlbWVudC5wcm90b3R5cGUuY3JlYXRlU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aFJlbCA9IGZ1bmN0aW9uICh4LCB5LCB4MiwgeTIpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gbmV3IHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoUmVsKHVuZGVmaW5lZCwgeCwgeSwgeDIsIHkyKTtcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICB3aW5kb3cuU1ZHUGF0aEVsZW1lbnQucHJvdG90eXBlLmNyZWF0ZVNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoQWJzID0gZnVuY3Rpb24gKHgsIHkpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gbmV3IHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aEFicyh1bmRlZmluZWQsIHgsIHkpO1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHdpbmRvdy5TVkdQYXRoRWxlbWVudC5wcm90b3R5cGUuY3JlYXRlU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhSZWwgPSBmdW5jdGlvbiAoeCwgeSkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBuZXcgd2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoUmVsKHVuZGVmaW5lZCwgeCwgeSk7XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgaWYgKCEoJ2dldFBhdGhTZWdBdExlbmd0aCcgaW4gd2luZG93LlNWR1BhdGhFbGVtZW50LnByb3RvdHlwZSkpIHtcclxuICAgICAgICAgICAgICAvLyBBZGQgZ2V0UGF0aFNlZ0F0TGVuZ3RoIHRvIFNWR1BhdGhFbGVtZW50LlxyXG4gICAgICAgICAgICAgIC8vIFNwZWM6IGh0dHBzOi8vd3d3LnczLm9yZy9UUi9TVkcxMS9zaW5nbGUtcGFnZS5odG1sI3BhdGhzLV9fc3ZnX19TVkdQYXRoRWxlbWVudF9fZ2V0UGF0aFNlZ0F0TGVuZ3RoXHJcbiAgICAgICAgICAgICAgLy8gVGhpcyBwb2x5ZmlsbCByZXF1aXJlcyBTVkdQYXRoRWxlbWVudC5nZXRUb3RhbExlbmd0aCB0byBpbXBsZW1lbnQgdGhlIGRpc3RhbmNlLWFsb25nLWEtcGF0aCBhbGdvcml0aG0uXHJcbiAgICAgICAgICAgICAgd2luZG93LlNWR1BhdGhFbGVtZW50LnByb3RvdHlwZS5nZXRQYXRoU2VnQXRMZW5ndGggPSBmdW5jdGlvbiAoZGlzdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKGRpc3RhbmNlID09PSB1bmRlZmluZWQgfHwgIWlzRmluaXRlKGRpc3RhbmNlKSlcclxuICAgICAgICAgICAgICAgICAgICAgIHRocm93ICdJbnZhbGlkIGFyZ3VtZW50cy4nO1xyXG4gICAgICAgICAgICAgICAgICB2YXIgbWVhc3VyZW1lbnRFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdwYXRoJyk7XHJcbiAgICAgICAgICAgICAgICAgIG1lYXN1cmVtZW50RWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2QnLCB0aGlzLmdldEF0dHJpYnV0ZSgnZCcpKTtcclxuICAgICAgICAgICAgICAgICAgdmFyIGxhc3RQYXRoU2VnbWVudCA9IG1lYXN1cmVtZW50RWxlbWVudC5wYXRoU2VnTGlzdC5udW1iZXJPZkl0ZW1zIC0gMTtcclxuICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHBhdGggaXMgZW1wdHksIHJldHVybiAwLlxyXG4gICAgICAgICAgICAgICAgICBpZiAobGFzdFBhdGhTZWdtZW50IDw9IDApXHJcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICAgICAgICAgICAgZG8ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgbWVhc3VyZW1lbnRFbGVtZW50LnBhdGhTZWdMaXN0LnJlbW92ZUl0ZW0obGFzdFBhdGhTZWdtZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgIGlmIChkaXN0YW5jZSA+IG1lYXN1cmVtZW50RWxlbWVudC5nZXRUb3RhbExlbmd0aCgpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgbGFzdFBhdGhTZWdtZW50LS07XHJcbiAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKGxhc3RQYXRoU2VnbWVudCA+IDApO1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gbGFzdFBhdGhTZWdtZW50O1xyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCEoJ1NWR1BhdGhTZWdMaXN0JyBpbiB3aW5kb3cpKSB7XHJcbiAgICAgICAgICAvLyBTcGVjOiBodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcxMS9zaW5nbGUtcGFnZS5odG1sI3BhdGhzLUludGVyZmFjZVNWR1BhdGhTZWdMaXN0XHJcbiAgICAgICAgICB3aW5kb3cuU1ZHUGF0aFNlZ0xpc3QgPSBmdW5jdGlvbiAocGF0aEVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICB0aGlzLl9wYXRoRWxlbWVudCA9IHBhdGhFbGVtZW50O1xyXG4gICAgICAgICAgICAgIHRoaXMuX2xpc3QgPSB0aGlzLl9wYXJzZVBhdGgodGhpcy5fcGF0aEVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkJykpO1xyXG4gICAgICAgICAgICAgIC8vIFVzZSBhIE11dGF0aW9uT2JzZXJ2ZXIgdG8gY2F0Y2ggY2hhbmdlcyB0byB0aGUgcGF0aCdzIFwiZFwiIGF0dHJpYnV0ZS5cclxuICAgICAgICAgICAgICB0aGlzLl9tdXRhdGlvbk9ic2VydmVyQ29uZmlnID0ge1xyXG4gICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVGaWx0ZXI6IFsnZCddXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICB0aGlzLl9wYXRoRWxlbWVudE11dGF0aW9uT2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcih0aGlzLl91cGRhdGVMaXN0RnJvbVBhdGhNdXRhdGlvbnMuYmluZCh0aGlzKSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5fcGF0aEVsZW1lbnRNdXRhdGlvbk9ic2VydmVyLm9ic2VydmUodGhpcy5fcGF0aEVsZW1lbnQsIHRoaXMuX211dGF0aW9uT2JzZXJ2ZXJDb25maWcpO1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHdpbmRvdy5TVkdQYXRoU2VnTGlzdC5wcm90b3R5cGUuY2xhc3NuYW1lID0gJ1NWR1BhdGhTZWdMaXN0JztcclxuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3cuU1ZHUGF0aFNlZ0xpc3QucHJvdG90eXBlLCAnbnVtYmVyT2ZJdGVtcycsIHtcclxuICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fY2hlY2tQYXRoU3luY2hyb25pemVkVG9MaXN0KCk7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9saXN0Lmxlbmd0aDtcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWVcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgLy8gQWRkIHRoZSBwYXRoU2VnTGlzdCBhY2Nlc3NvcnMgdG8gd2luZG93LlNWR1BhdGhFbGVtZW50LlxyXG4gICAgICAgICAgLy8gU3BlYzogaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHMTEvc2luZ2xlLXBhZ2UuaHRtbCNwYXRocy1JbnRlcmZhY2VTVkdBbmltYXRlZFBhdGhEYXRhXHJcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNWR1BhdGhFbGVtZW50LnByb3RvdHlwZSwgJ3BhdGhTZWdMaXN0Jywge1xyXG4gICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX3BhdGhTZWdMaXN0KVxyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcGF0aFNlZ0xpc3QgPSBuZXcgd2luZG93LlNWR1BhdGhTZWdMaXN0KHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGF0aFNlZ0xpc3Q7XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIC8vIEZJWE1FOiBUaGUgZm9sbG93aW5nIGFyZSBub3QgaW1wbGVtZW50ZWQgYW5kIHNpbXBseSByZXR1cm4gd2luZG93LlNWR1BhdGhFbGVtZW50LnBhdGhTZWdMaXN0LlxyXG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TVkdQYXRoRWxlbWVudC5wcm90b3R5cGUsICdub3JtYWxpemVkUGF0aFNlZ0xpc3QnLCB7XHJcbiAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhdGhTZWdMaXN0O1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNWR1BhdGhFbGVtZW50LnByb3RvdHlwZSwgJ2FuaW1hdGVkUGF0aFNlZ0xpc3QnLCB7XHJcbiAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhdGhTZWdMaXN0O1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNWR1BhdGhFbGVtZW50LnByb3RvdHlwZSwgJ2FuaW1hdGVkTm9ybWFsaXplZFBhdGhTZWdMaXN0Jywge1xyXG4gICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXRoU2VnTGlzdDtcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWVcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgLy8gUHJvY2VzcyBhbnkgcGVuZGluZyBtdXRhdGlvbnMgdG8gdGhlIHBhdGggZWxlbWVudCBhbmQgdXBkYXRlIHRoZSBsaXN0IGFzIG5lZWRlZC5cclxuICAgICAgICAgIC8vIFRoaXMgc2hvdWxkIGJlIHRoZSBmaXJzdCBjYWxsIG9mIGFsbCBwdWJsaWMgZnVuY3Rpb25zIGFuZCBpcyBuZWVkZWQgYmVjYXVzZVxyXG4gICAgICAgICAgLy8gTXV0YXRpb25PYnNlcnZlcnMgYXJlIG5vdCBzeW5jaHJvbm91cyBzbyB3ZSBjYW4gaGF2ZSBwZW5kaW5nIGFzeW5jaHJvbm91cyBtdXRhdGlvbnMuXHJcbiAgICAgICAgICB3aW5kb3cuU1ZHUGF0aFNlZ0xpc3QucHJvdG90eXBlLl9jaGVja1BhdGhTeW5jaHJvbml6ZWRUb0xpc3QgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fdXBkYXRlTGlzdEZyb21QYXRoTXV0YXRpb25zKHRoaXMuX3BhdGhFbGVtZW50TXV0YXRpb25PYnNlcnZlci50YWtlUmVjb3JkcygpKTtcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICB3aW5kb3cuU1ZHUGF0aFNlZ0xpc3QucHJvdG90eXBlLl91cGRhdGVMaXN0RnJvbVBhdGhNdXRhdGlvbnMgPSBmdW5jdGlvbiAobXV0YXRpb25SZWNvcmRzKSB7XHJcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLl9wYXRoRWxlbWVudClcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgIHZhciBoYXNQYXRoTXV0YXRpb25zID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgbXV0YXRpb25SZWNvcmRzLmZvckVhY2goZnVuY3Rpb24gKHJlY29yZCkge1xyXG4gICAgICAgICAgICAgICAgICBpZiAocmVjb3JkLmF0dHJpYnV0ZU5hbWUgPT0gJ2QnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgaGFzUGF0aE11dGF0aW9ucyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgaWYgKGhhc1BhdGhNdXRhdGlvbnMpXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2xpc3QgPSB0aGlzLl9wYXJzZVBhdGgodGhpcy5fcGF0aEVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkJykpO1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIC8vIFNlcmlhbGl6ZSB0aGUgbGlzdCBhbmQgdXBkYXRlIHRoZSBwYXRoJ3MgJ2QnIGF0dHJpYnV0ZS5cclxuICAgICAgICAgIHdpbmRvdy5TVkdQYXRoU2VnTGlzdC5wcm90b3R5cGUuX3dyaXRlTGlzdFRvUGF0aCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICB0aGlzLl9wYXRoRWxlbWVudE11dGF0aW9uT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xyXG4gICAgICAgICAgICAgIHRoaXMuX3BhdGhFbGVtZW50LnNldEF0dHJpYnV0ZSgnZCcsIHdpbmRvdy5TVkdQYXRoU2VnTGlzdC5fcGF0aFNlZ0FycmF5QXNTdHJpbmcodGhpcy5fbGlzdCkpO1xyXG4gICAgICAgICAgICAgIHRoaXMuX3BhdGhFbGVtZW50TXV0YXRpb25PYnNlcnZlci5vYnNlcnZlKHRoaXMuX3BhdGhFbGVtZW50LCB0aGlzLl9tdXRhdGlvbk9ic2VydmVyQ29uZmlnKTtcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICAvLyBXaGVuIGEgcGF0aCBzZWdtZW50IGNoYW5nZXMgdGhlIGxpc3QgbmVlZHMgdG8gYmUgc3luY2hyb25pemVkIGJhY2sgdG8gdGhlIHBhdGggZWxlbWVudC5cclxuICAgICAgICAgIHdpbmRvdy5TVkdQYXRoU2VnTGlzdC5wcm90b3R5cGUuc2VnbWVudENoYW5nZWQgPSBmdW5jdGlvbiAocGF0aFNlZykge1xyXG4gICAgICAgICAgICAgIHRoaXMuX3dyaXRlTGlzdFRvUGF0aCgpO1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHdpbmRvdy5TVkdQYXRoU2VnTGlzdC5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fY2hlY2tQYXRoU3luY2hyb25pemVkVG9MaXN0KCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5fbGlzdC5mb3JFYWNoKGZ1bmN0aW9uIChwYXRoU2VnKSB7XHJcbiAgICAgICAgICAgICAgICAgIHBhdGhTZWcuX293bmluZ1BhdGhTZWdMaXN0ID0gbnVsbDtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB0aGlzLl9saXN0ID0gW107XHJcbiAgICAgICAgICAgICAgdGhpcy5fd3JpdGVMaXN0VG9QYXRoKCk7XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgd2luZG93LlNWR1BhdGhTZWdMaXN0LnByb3RvdHlwZS5pbml0aWFsaXplID0gZnVuY3Rpb24gKG5ld0l0ZW0pIHtcclxuICAgICAgICAgICAgICB0aGlzLl9jaGVja1BhdGhTeW5jaHJvbml6ZWRUb0xpc3QoKTtcclxuICAgICAgICAgICAgICB0aGlzLl9saXN0ID0gW25ld0l0ZW1dO1xyXG4gICAgICAgICAgICAgIG5ld0l0ZW0uX293bmluZ1BhdGhTZWdMaXN0ID0gdGhpcztcclxuICAgICAgICAgICAgICB0aGlzLl93cml0ZUxpc3RUb1BhdGgoKTtcclxuICAgICAgICAgICAgICByZXR1cm4gbmV3SXRlbTtcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICB3aW5kb3cuU1ZHUGF0aFNlZ0xpc3QucHJvdG90eXBlLl9jaGVja1ZhbGlkSW5kZXggPSBmdW5jdGlvbiAoaW5kZXgpIHtcclxuICAgICAgICAgICAgICBpZiAoaXNOYU4oaW5kZXgpIHx8IGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aGlzLm51bWJlck9mSXRlbXMpXHJcbiAgICAgICAgICAgICAgICAgIHRocm93ICdJTkRFWF9TSVpFX0VSUic7XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgd2luZG93LlNWR1BhdGhTZWdMaXN0LnByb3RvdHlwZS5nZXRJdGVtID0gZnVuY3Rpb24gKGluZGV4KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fY2hlY2tQYXRoU3luY2hyb25pemVkVG9MaXN0KCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5fY2hlY2tWYWxpZEluZGV4KGluZGV4KTtcclxuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbGlzdFtpbmRleF07XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgd2luZG93LlNWR1BhdGhTZWdMaXN0LnByb3RvdHlwZS5pbnNlcnRJdGVtQmVmb3JlID0gZnVuY3Rpb24gKG5ld0l0ZW0sIGluZGV4KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fY2hlY2tQYXRoU3luY2hyb25pemVkVG9MaXN0KCk7XHJcbiAgICAgICAgICAgICAgLy8gU3BlYzogSWYgdGhlIGluZGV4IGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBudW1iZXJPZkl0ZW1zLCB0aGVuIHRoZSBuZXcgaXRlbSBpcyBhcHBlbmRlZCB0byB0aGUgZW5kIG9mIHRoZSBsaXN0LlxyXG4gICAgICAgICAgICAgIGlmIChpbmRleCA+IHRoaXMubnVtYmVyT2ZJdGVtcylcclxuICAgICAgICAgICAgICAgICAgaW5kZXggPSB0aGlzLm51bWJlck9mSXRlbXM7XHJcbiAgICAgICAgICAgICAgaWYgKG5ld0l0ZW0uX293bmluZ1BhdGhTZWdMaXN0KSB7XHJcbiAgICAgICAgICAgICAgICAgIC8vIFNWRzIgc3BlYyBzYXlzIHRvIG1ha2UgYSBjb3B5LlxyXG4gICAgICAgICAgICAgICAgICBuZXdJdGVtID0gbmV3SXRlbS5jbG9uZSgpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB0aGlzLl9saXN0LnNwbGljZShpbmRleCwgMCwgbmV3SXRlbSk7XHJcbiAgICAgICAgICAgICAgbmV3SXRlbS5fb3duaW5nUGF0aFNlZ0xpc3QgPSB0aGlzO1xyXG4gICAgICAgICAgICAgIHRoaXMuX3dyaXRlTGlzdFRvUGF0aCgpO1xyXG4gICAgICAgICAgICAgIHJldHVybiBuZXdJdGVtO1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHdpbmRvdy5TVkdQYXRoU2VnTGlzdC5wcm90b3R5cGUucmVwbGFjZUl0ZW0gPSBmdW5jdGlvbiAobmV3SXRlbSwgaW5kZXgpIHtcclxuICAgICAgICAgICAgICB0aGlzLl9jaGVja1BhdGhTeW5jaHJvbml6ZWRUb0xpc3QoKTtcclxuICAgICAgICAgICAgICBpZiAobmV3SXRlbS5fb3duaW5nUGF0aFNlZ0xpc3QpIHtcclxuICAgICAgICAgICAgICAgICAgLy8gU1ZHMiBzcGVjIHNheXMgdG8gbWFrZSBhIGNvcHkuXHJcbiAgICAgICAgICAgICAgICAgIG5ld0l0ZW0gPSBuZXdJdGVtLmNsb25lKCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHRoaXMuX2NoZWNrVmFsaWRJbmRleChpbmRleCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5fbGlzdFtpbmRleF0gPSBuZXdJdGVtO1xyXG4gICAgICAgICAgICAgIG5ld0l0ZW0uX293bmluZ1BhdGhTZWdMaXN0ID0gdGhpcztcclxuICAgICAgICAgICAgICB0aGlzLl93cml0ZUxpc3RUb1BhdGgoKTtcclxuICAgICAgICAgICAgICByZXR1cm4gbmV3SXRlbTtcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICB3aW5kb3cuU1ZHUGF0aFNlZ0xpc3QucHJvdG90eXBlLnJlbW92ZUl0ZW0gPSBmdW5jdGlvbiAoaW5kZXgpIHtcclxuICAgICAgICAgICAgICB0aGlzLl9jaGVja1BhdGhTeW5jaHJvbml6ZWRUb0xpc3QoKTtcclxuICAgICAgICAgICAgICB0aGlzLl9jaGVja1ZhbGlkSW5kZXgoaW5kZXgpO1xyXG4gICAgICAgICAgICAgIHZhciBpdGVtID0gdGhpcy5fbGlzdFtpbmRleF07XHJcbiAgICAgICAgICAgICAgdGhpcy5fbGlzdC5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgIHRoaXMuX3dyaXRlTGlzdFRvUGF0aCgpO1xyXG4gICAgICAgICAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHdpbmRvdy5TVkdQYXRoU2VnTGlzdC5wcm90b3R5cGUuYXBwZW5kSXRlbSA9IGZ1bmN0aW9uIChuZXdJdGVtKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fY2hlY2tQYXRoU3luY2hyb25pemVkVG9MaXN0KCk7XHJcbiAgICAgICAgICAgICAgaWYgKG5ld0l0ZW0uX293bmluZ1BhdGhTZWdMaXN0KSB7XHJcbiAgICAgICAgICAgICAgICAgIC8vIFNWRzIgc3BlYyBzYXlzIHRvIG1ha2UgYSBjb3B5LlxyXG4gICAgICAgICAgICAgICAgICBuZXdJdGVtID0gbmV3SXRlbS5jbG9uZSgpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB0aGlzLl9saXN0LnB1c2gobmV3SXRlbSk7XHJcbiAgICAgICAgICAgICAgbmV3SXRlbS5fb3duaW5nUGF0aFNlZ0xpc3QgPSB0aGlzO1xyXG4gICAgICAgICAgICAgIC8vIFRPRE86IE9wdGltaXplIHRoaXMgdG8ganVzdCBhcHBlbmQgdG8gdGhlIGV4aXN0aW5nIGF0dHJpYnV0ZS5cclxuICAgICAgICAgICAgICB0aGlzLl93cml0ZUxpc3RUb1BhdGgoKTtcclxuICAgICAgICAgICAgICByZXR1cm4gbmV3SXRlbTtcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICB3aW5kb3cuU1ZHUGF0aFNlZ0xpc3QuX3BhdGhTZWdBcnJheUFzU3RyaW5nID0gZnVuY3Rpb24gKHBhdGhTZWdBcnJheSkge1xyXG4gICAgICAgICAgICAgIHZhciBzdHJpbmcgPSAnJztcclxuICAgICAgICAgICAgICB2YXIgZmlyc3QgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHBhdGhTZWdBcnJheS5mb3JFYWNoKGZ1bmN0aW9uIChwYXRoU2VnKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChmaXJzdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgZmlyc3QgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyArPSBwYXRoU2VnLl9hc1BhdGhTdHJpbmcoKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyArPSAnICcgKyBwYXRoU2VnLl9hc1BhdGhTdHJpbmcoKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIHJldHVybiBzdHJpbmc7XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgLy8gVGhpcyBjbG9zZWx5IGZvbGxvd3MgU1ZHUGF0aFBhcnNlcjo6cGFyc2VQYXRoIGZyb20gU291cmNlL2NvcmUvc3ZnL1NWR1BhdGhQYXJzZXIuY3BwLlxyXG4gICAgICAgICAgd2luZG93LlNWR1BhdGhTZWdMaXN0LnByb3RvdHlwZS5fcGFyc2VQYXRoID0gZnVuY3Rpb24gKHN0cmluZykge1xyXG4gICAgICAgICAgICAgIGlmICghc3RyaW5nIHx8IHN0cmluZy5sZW5ndGggPT0gMClcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgICAgICAgIHZhciBvd25pbmdQYXRoU2VnTGlzdCA9IHRoaXM7XHJcbiAgICAgICAgICAgICAgdmFyIEJ1aWxkZXIgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucGF0aFNlZ0xpc3QgPSBbXTtcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIEJ1aWxkZXIucHJvdG90eXBlLmFwcGVuZFNlZ21lbnQgPSBmdW5jdGlvbiAocGF0aFNlZykge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnBhdGhTZWdMaXN0LnB1c2gocGF0aFNlZyk7XHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICB2YXIgU291cmNlID0gZnVuY3Rpb24gKHN0cmluZykge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9zdHJpbmcgPSBzdHJpbmc7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRJbmRleCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2VuZEluZGV4ID0gdGhpcy5fc3RyaW5nLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fcHJldmlvdXNDb21tYW5kID0gd2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19VTktOT1dOO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9za2lwT3B0aW9uYWxTcGFjZXMoKTtcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIFNvdXJjZS5wcm90b3R5cGUuX2lzQ3VycmVudFNwYWNlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICB2YXIgY2hhcmFjdGVyID0gdGhpcy5fc3RyaW5nW3RoaXMuX2N1cnJlbnRJbmRleF07XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiAoY2hhcmFjdGVyIDw9ICcgJyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgKGNoYXJhY3RlciA9PSAnICcgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXIgPT0gJ1xcbicgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXIgPT0gJ1xcdCcgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXIgPT0gJ1xccicgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXIgPT0gJ1xcZicpKTtcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIFNvdXJjZS5wcm90b3R5cGUuX3NraXBPcHRpb25hbFNwYWNlcyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgd2hpbGUgKHRoaXMuX2N1cnJlbnRJbmRleCA8IHRoaXMuX2VuZEluZGV4ICYmIHRoaXMuX2lzQ3VycmVudFNwYWNlKCkpXHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jdXJyZW50SW5kZXgrKztcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRJbmRleCA8IHRoaXMuX2VuZEluZGV4O1xyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgU291cmNlLnByb3RvdHlwZS5fc2tpcE9wdGlvbmFsU3BhY2VzT3JEZWxpbWl0ZXIgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50SW5kZXggPCB0aGlzLl9lbmRJbmRleCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgIXRoaXMuX2lzQ3VycmVudFNwYWNlKCkgJiZcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0cmluZy5jaGFyQXQodGhpcy5fY3VycmVudEluZGV4KSAhPSAnLCcpXHJcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9za2lwT3B0aW9uYWxTcGFjZXMoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRJbmRleCA8IHRoaXMuX2VuZEluZGV4ICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RyaW5nLmNoYXJBdCh0aGlzLl9jdXJyZW50SW5kZXgpID09ICcsJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRJbmRleCsrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NraXBPcHRpb25hbFNwYWNlcygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50SW5kZXggPCB0aGlzLl9lbmRJbmRleDtcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIFNvdXJjZS5wcm90b3R5cGUuaGFzTW9yZURhdGEgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50SW5kZXggPCB0aGlzLl9lbmRJbmRleDtcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIFNvdXJjZS5wcm90b3R5cGUucGVla1NlZ21lbnRUeXBlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICB2YXIgbG9va2FoZWFkID0gdGhpcy5fc3RyaW5nW3RoaXMuX2N1cnJlbnRJbmRleF07XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9wYXRoU2VnVHlwZUZyb21DaGFyKGxvb2thaGVhZCk7XHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICBTb3VyY2UucHJvdG90eXBlLl9wYXRoU2VnVHlwZUZyb21DaGFyID0gZnVuY3Rpb24gKGxvb2thaGVhZCkge1xyXG4gICAgICAgICAgICAgICAgICBzd2l0Y2ggKGxvb2thaGVhZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSAnWic6XHJcbiAgICAgICAgICAgICAgICAgICAgICBjYXNlICd6JzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gd2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19DTE9TRVBBVEg7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjYXNlICdNJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gd2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19NT1ZFVE9fQUJTO1xyXG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbSc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfTU9WRVRPX1JFTDtcclxuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0wnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX0xJTkVUT19BQlM7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjYXNlICdsJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gd2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19MSU5FVE9fUkVMO1xyXG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSAnQyc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfQ1VSVkVUT19DVUJJQ19BQlM7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjYXNlICdjJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gd2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19DVVJWRVRPX0NVQklDX1JFTDtcclxuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1EnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX0NVUlZFVE9fUVVBRFJBVElDX0FCUztcclxuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3EnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX0NVUlZFVE9fUVVBRFJBVElDX1JFTDtcclxuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0EnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX0FSQ19BQlM7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjYXNlICdhJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gd2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19BUkNfUkVMO1xyXG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSAnSCc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfTElORVRPX0hPUklaT05UQUxfQUJTO1xyXG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSAnaCc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfTElORVRPX0hPUklaT05UQUxfUkVMO1xyXG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSAnVic6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfTElORVRPX1ZFUlRJQ0FMX0FCUztcclxuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3YnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX0xJTkVUT19WRVJUSUNBTF9SRUw7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjYXNlICdTJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gd2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19DVVJWRVRPX0NVQklDX1NNT09USF9BQlM7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjYXNlICdzJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gd2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19DVVJWRVRPX0NVQklDX1NNT09USF9SRUw7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjYXNlICdUJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gd2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19DVVJWRVRPX1FVQURSQVRJQ19TTU9PVEhfQUJTO1xyXG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSAndCc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfQ1VSVkVUT19RVUFEUkFUSUNfU01PT1RIX1JFTDtcclxuICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfVU5LTk9XTjtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgU291cmNlLnByb3RvdHlwZS5fbmV4dENvbW1hbmRIZWxwZXIgPSBmdW5jdGlvbiAobG9va2FoZWFkLCBwcmV2aW91c0NvbW1hbmQpIHtcclxuICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIHJlbWFpbmluZyBjb29yZGluYXRlcyBpbiB0aGUgY3VycmVudCBjb21tYW5kLlxyXG4gICAgICAgICAgICAgICAgICBpZiAoKGxvb2thaGVhZCA9PSAnKycgfHxcclxuICAgICAgICAgICAgICAgICAgICAgIGxvb2thaGVhZCA9PSAnLScgfHxcclxuICAgICAgICAgICAgICAgICAgICAgIGxvb2thaGVhZCA9PSAnLicgfHxcclxuICAgICAgICAgICAgICAgICAgICAgIChsb29rYWhlYWQgPj0gJzAnICYmIGxvb2thaGVhZCA8PSAnOScpKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNDb21tYW5kICE9IHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfQ0xPU0VQQVRIKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNDb21tYW5kID09IHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfTU9WRVRPX0FCUylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gd2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19MSU5FVE9fQUJTO1xyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzQ29tbWFuZCA9PSB3aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX01PVkVUT19SRUwpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfTElORVRPX1JFTDtcclxuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmV2aW91c0NvbW1hbmQ7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfVU5LTk9XTjtcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIFNvdXJjZS5wcm90b3R5cGUuaW5pdGlhbENvbW1hbmRJc01vdmVUbyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHBhdGggaXMgZW1wdHkgaXQgaXMgc3RpbGwgdmFsaWQsIHNvIHJldHVybiB0cnVlLlxyXG4gICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaGFzTW9yZURhdGEoKSlcclxuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICB2YXIgY29tbWFuZCA9IHRoaXMucGVla1NlZ21lbnRUeXBlKCk7XHJcbiAgICAgICAgICAgICAgICAgIC8vIFBhdGggbXVzdCBzdGFydCB3aXRoIG1vdmVUby5cclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIChjb21tYW5kID09IHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfTU9WRVRPX0FCUyB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgY29tbWFuZCA9PSB3aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX01PVkVUT19SRUwpO1xyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgLy8gUGFyc2UgYSBudW1iZXIgZnJvbSBhbiBTVkcgcGF0aC4gVGhpcyB2ZXJ5IGNsb3NlbHkgZm9sbG93cyBnZW5lcmljUGFyc2VOdW1iZXIoLi4uKSBmcm9tIFNvdXJjZS9jb3JlL3N2Zy9TVkdQYXJzZXJVdGlsaXRpZXMuY3BwLlxyXG4gICAgICAgICAgICAgIC8vIFNwZWM6IGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL3NpbmdsZS1wYWdlLmh0bWwjcGF0aHMtUGF0aERhdGFCTkZcclxuICAgICAgICAgICAgICBTb3VyY2UucHJvdG90eXBlLl9wYXJzZU51bWJlciA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgdmFyIGV4cG9uZW50ID0gMDtcclxuICAgICAgICAgICAgICAgICAgdmFyIGludGVnZXIgPSAwO1xyXG4gICAgICAgICAgICAgICAgICB2YXIgZnJhYyA9IDE7XHJcbiAgICAgICAgICAgICAgICAgIHZhciBkZWNpbWFsID0gMDtcclxuICAgICAgICAgICAgICAgICAgdmFyIHNpZ24gPSAxO1xyXG4gICAgICAgICAgICAgICAgICB2YXIgZXhwc2lnbiA9IDE7XHJcbiAgICAgICAgICAgICAgICAgIHZhciBzdGFydEluZGV4ID0gdGhpcy5fY3VycmVudEluZGV4O1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9za2lwT3B0aW9uYWxTcGFjZXMoKTtcclxuICAgICAgICAgICAgICAgICAgLy8gUmVhZCB0aGUgc2lnbi5cclxuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRJbmRleCA8IHRoaXMuX2VuZEluZGV4ICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdHJpbmcuY2hhckF0KHRoaXMuX2N1cnJlbnRJbmRleCkgPT0gJysnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY3VycmVudEluZGV4Kys7XHJcbiAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuX2N1cnJlbnRJbmRleCA8IHRoaXMuX2VuZEluZGV4ICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdHJpbmcuY2hhckF0KHRoaXMuX2N1cnJlbnRJbmRleCkgPT0gJy0nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jdXJyZW50SW5kZXgrKztcclxuICAgICAgICAgICAgICAgICAgICAgIHNpZ24gPSAtMTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudEluZGV4ID09IHRoaXMuX2VuZEluZGV4IHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAoKHRoaXMuX3N0cmluZy5jaGFyQXQodGhpcy5fY3VycmVudEluZGV4KSA8ICcwJyB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0cmluZy5jaGFyQXQodGhpcy5fY3VycmVudEluZGV4KSA+ICc5JykgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdHJpbmcuY2hhckF0KHRoaXMuX2N1cnJlbnRJbmRleCkgIT0gJy4nKSlcclxuICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgYSBudW1iZXIgbXVzdCBiZSBvbmUgb2YgWzAtOSstLl0uXHJcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgICAvLyBSZWFkIHRoZSBpbnRlZ2VyIHBhcnQsIGJ1aWxkIHJpZ2h0LXRvLWxlZnQuXHJcbiAgICAgICAgICAgICAgICAgIHZhciBzdGFydEludFBhcnRJbmRleCA9IHRoaXMuX2N1cnJlbnRJbmRleDtcclxuICAgICAgICAgICAgICAgICAgd2hpbGUgKHRoaXMuX2N1cnJlbnRJbmRleCA8IHRoaXMuX2VuZEluZGV4ICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdHJpbmcuY2hhckF0KHRoaXMuX2N1cnJlbnRJbmRleCkgPj0gJzAnICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdHJpbmcuY2hhckF0KHRoaXMuX2N1cnJlbnRJbmRleCkgPD0gJzknKVxyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY3VycmVudEluZGV4Kys7IC8vIEFkdmFuY2UgdG8gZmlyc3Qgbm9uLWRpZ2l0LlxyXG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudEluZGV4ICE9IHN0YXJ0SW50UGFydEluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB2YXIgc2NhbkludFBhcnRJbmRleCA9IHRoaXMuX2N1cnJlbnRJbmRleCAtIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICB2YXIgbXVsdGlwbGllciA9IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoc2NhbkludFBhcnRJbmRleCA+PSBzdGFydEludFBhcnRJbmRleCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGludGVnZXIgKz1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGllciAqICh0aGlzLl9zdHJpbmcuY2hhckF0KHNjYW5JbnRQYXJ0SW5kZXgtLSkgLSAnMCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpcGxpZXIgKj0gMTA7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgLy8gUmVhZCB0aGUgZGVjaW1hbHMuXHJcbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50SW5kZXggPCB0aGlzLl9lbmRJbmRleCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RyaW5nLmNoYXJBdCh0aGlzLl9jdXJyZW50SW5kZXgpID09ICcuJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY3VycmVudEluZGV4Kys7XHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyBUaGVyZSBtdXN0IGJlIGEgbGVhc3Qgb25lIGRpZ2l0IGZvbGxvd2luZyB0aGUgLlxyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRJbmRleCA+PSB0aGlzLl9lbmRJbmRleCB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0cmluZy5jaGFyQXQodGhpcy5fY3VycmVudEluZGV4KSA8ICcwJyB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0cmluZy5jaGFyQXQodGhpcy5fY3VycmVudEluZGV4KSA+ICc5JylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHRoaXMuX2N1cnJlbnRJbmRleCA8IHRoaXMuX2VuZEluZGV4ICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RyaW5nLmNoYXJBdCh0aGlzLl9jdXJyZW50SW5kZXgpID49ICcwJyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0cmluZy5jaGFyQXQodGhpcy5fY3VycmVudEluZGV4KSA8PSAnOScpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFjICo9IDEwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRlY2ltYWwgKz0gKHRoaXMuX3N0cmluZy5jaGFyQXQodGhpcy5fY3VycmVudEluZGV4KSAtICcwJykgLyBmcmFjO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRJbmRleCArPSAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIC8vIFJlYWQgdGhlIGV4cG9uZW50IHBhcnQuXHJcbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50SW5kZXggIT0gc3RhcnRJbmRleCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY3VycmVudEluZGV4ICsgMSA8IHRoaXMuX2VuZEluZGV4ICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAodGhpcy5fc3RyaW5nLmNoYXJBdCh0aGlzLl9jdXJyZW50SW5kZXgpID09ICdlJyB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0cmluZy5jaGFyQXQodGhpcy5fY3VycmVudEluZGV4KSA9PSAnRScpICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdHJpbmcuY2hhckF0KHRoaXMuX2N1cnJlbnRJbmRleCArIDEpICE9ICd4JyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RyaW5nLmNoYXJBdCh0aGlzLl9jdXJyZW50SW5kZXggKyAxKSAhPSAnbScpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRJbmRleCsrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gUmVhZCB0aGUgc2lnbiBvZiB0aGUgZXhwb25lbnQuXHJcbiAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fc3RyaW5nLmNoYXJBdCh0aGlzLl9jdXJyZW50SW5kZXgpID09ICcrJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRJbmRleCsrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5fc3RyaW5nLmNoYXJBdCh0aGlzLl9jdXJyZW50SW5kZXgpID09ICctJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRJbmRleCsrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHNpZ24gPSAtMTtcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZXJlIG11c3QgYmUgYW4gZXhwb25lbnQuXHJcbiAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudEluZGV4ID49IHRoaXMuX2VuZEluZGV4IHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RyaW5nLmNoYXJBdCh0aGlzLl9jdXJyZW50SW5kZXgpIDwgJzAnIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RyaW5nLmNoYXJBdCh0aGlzLl9jdXJyZW50SW5kZXgpID4gJzknKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAodGhpcy5fY3VycmVudEluZGV4IDwgdGhpcy5fZW5kSW5kZXggJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdHJpbmcuY2hhckF0KHRoaXMuX2N1cnJlbnRJbmRleCkgPj0gJzAnICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RyaW5nLmNoYXJBdCh0aGlzLl9jdXJyZW50SW5kZXgpIDw9ICc5Jykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9uZW50ICo9IDEwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9uZW50ICs9IHRoaXMuX3N0cmluZy5jaGFyQXQodGhpcy5fY3VycmVudEluZGV4KSAtICcwJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jdXJyZW50SW5kZXgrKztcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB2YXIgbnVtYmVyID0gaW50ZWdlciArIGRlY2ltYWw7XHJcbiAgICAgICAgICAgICAgICAgIG51bWJlciAqPSBzaWduO1xyXG4gICAgICAgICAgICAgICAgICBpZiAoZXhwb25lbnQpXHJcbiAgICAgICAgICAgICAgICAgICAgICBudW1iZXIgKj0gTWF0aC5wb3coMTAsIGV4cHNpZ24gKiBleHBvbmVudCk7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChzdGFydEluZGV4ID09IHRoaXMuX2N1cnJlbnRJbmRleClcclxuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3NraXBPcHRpb25hbFNwYWNlc09yRGVsaW1pdGVyKCk7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXI7XHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICBTb3VyY2UucHJvdG90eXBlLl9wYXJzZUFyY0ZsYWcgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50SW5kZXggPj0gdGhpcy5fZW5kSW5kZXgpXHJcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgICB2YXIgZmxhZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICB2YXIgZmxhZ0NoYXIgPSB0aGlzLl9zdHJpbmcuY2hhckF0KHRoaXMuX2N1cnJlbnRJbmRleCsrKTtcclxuICAgICAgICAgICAgICAgICAgaWYgKGZsYWdDaGFyID09ICcwJylcclxuICAgICAgICAgICAgICAgICAgICAgIGZsYWcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZmxhZ0NoYXIgPT0gJzEnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgZmxhZyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3NraXBPcHRpb25hbFNwYWNlc09yRGVsaW1pdGVyKCk7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiBmbGFnO1xyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgU291cmNlLnByb3RvdHlwZS5wYXJzZVNlZ21lbnQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgIHZhciBsb29rYWhlYWQgPSB0aGlzLl9zdHJpbmdbdGhpcy5fY3VycmVudEluZGV4XTtcclxuICAgICAgICAgICAgICAgICAgdmFyIGNvbW1hbmQgPSB0aGlzLl9wYXRoU2VnVHlwZUZyb21DaGFyKGxvb2thaGVhZCk7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChjb21tYW5kID09IHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfVU5LTk9XTikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gUG9zc2libHkgYW4gaW1wbGljaXQgY29tbWFuZC4gTm90IGFsbG93ZWQgaWYgdGhpcyBpcyB0aGUgZmlyc3QgY29tbWFuZC5cclxuICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9wcmV2aW91c0NvbW1hbmQgPT0gd2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19VTktOT1dOKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgY29tbWFuZCA9IHRoaXMuX25leHRDb21tYW5kSGVscGVyKGxvb2thaGVhZCwgdGhpcy5fcHJldmlvdXNDb21tYW5kKTtcclxuICAgICAgICAgICAgICAgICAgICAgIGlmIChjb21tYW5kID09IHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfVU5LTk9XTilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRJbmRleCsrO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3ByZXZpb3VzQ29tbWFuZCA9IGNvbW1hbmQ7XHJcbiAgICAgICAgICAgICAgICAgIHN3aXRjaCAoY29tbWFuZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSB3aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX01PVkVUT19SRUw6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyB3aW5kb3cuU1ZHUGF0aFNlZ01vdmV0b1JlbChvd25pbmdQYXRoU2VnTGlzdCwgdGhpcy5fcGFyc2VOdW1iZXIoKSwgdGhpcy5fcGFyc2VOdW1iZXIoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfTU9WRVRPX0FCUzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IHdpbmRvdy5TVkdQYXRoU2VnTW92ZXRvQWJzKG93bmluZ1BhdGhTZWdMaXN0LCB0aGlzLl9wYXJzZU51bWJlcigpLCB0aGlzLl9wYXJzZU51bWJlcigpKTtcclxuICAgICAgICAgICAgICAgICAgICAgIGNhc2Ugd2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19MSU5FVE9fUkVMOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgd2luZG93LlNWR1BhdGhTZWdMaW5ldG9SZWwob3duaW5nUGF0aFNlZ0xpc3QsIHRoaXMuX3BhcnNlTnVtYmVyKCksIHRoaXMuX3BhcnNlTnVtYmVyKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSB3aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX0xJTkVUT19BQlM6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyB3aW5kb3cuU1ZHUGF0aFNlZ0xpbmV0b0Ficyhvd25pbmdQYXRoU2VnTGlzdCwgdGhpcy5fcGFyc2VOdW1iZXIoKSwgdGhpcy5fcGFyc2VOdW1iZXIoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfTElORVRPX0hPUklaT05UQUxfUkVMOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgd2luZG93LlNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsUmVsKG93bmluZ1BhdGhTZWdMaXN0LCB0aGlzLl9wYXJzZU51bWJlcigpKTtcclxuICAgICAgICAgICAgICAgICAgICAgIGNhc2Ugd2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19MSU5FVE9fSE9SSVpPTlRBTF9BQlM6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyB3aW5kb3cuU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxBYnMob3duaW5nUGF0aFNlZ0xpc3QsIHRoaXMuX3BhcnNlTnVtYmVyKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSB3aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX0xJTkVUT19WRVJUSUNBTF9SRUw6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyB3aW5kb3cuU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsUmVsKG93bmluZ1BhdGhTZWdMaXN0LCB0aGlzLl9wYXJzZU51bWJlcigpKTtcclxuICAgICAgICAgICAgICAgICAgICAgIGNhc2Ugd2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19MSU5FVE9fVkVSVElDQUxfQUJTOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgd2luZG93LlNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbEFicyhvd25pbmdQYXRoU2VnTGlzdCwgdGhpcy5fcGFyc2VOdW1iZXIoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfQ0xPU0VQQVRIOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NraXBPcHRpb25hbFNwYWNlcygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgd2luZG93LlNWR1BhdGhTZWdDbG9zZVBhdGgob3duaW5nUGF0aFNlZ0xpc3QpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSB3aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX0NVUlZFVE9fQ1VCSUNfUkVMOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwb2ludHMgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgxOiB0aGlzLl9wYXJzZU51bWJlcigpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5MTogdGhpcy5fcGFyc2VOdW1iZXIoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDI6IHRoaXMuX3BhcnNlTnVtYmVyKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkyOiB0aGlzLl9wYXJzZU51bWJlcigpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4OiB0aGlzLl9wYXJzZU51bWJlcigpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5OiB0aGlzLl9wYXJzZU51bWJlcigpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b0N1YmljUmVsKG93bmluZ1BhdGhTZWdMaXN0LCBwb2ludHMueCwgcG9pbnRzLnksIHBvaW50cy54MSwgcG9pbnRzLnkxLCBwb2ludHMueDIsIHBvaW50cy55Mik7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfQ1VSVkVUT19DVUJJQ19BQlM6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBvaW50cyA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDE6IHRoaXMuX3BhcnNlTnVtYmVyKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkxOiB0aGlzLl9wYXJzZU51bWJlcigpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4MjogdGhpcy5fcGFyc2VOdW1iZXIoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTI6IHRoaXMuX3BhcnNlTnVtYmVyKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6IHRoaXMuX3BhcnNlTnVtYmVyKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHk6IHRoaXMuX3BhcnNlTnVtYmVyKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgd2luZG93LlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNBYnMob3duaW5nUGF0aFNlZ0xpc3QsIHBvaW50cy54LCBwb2ludHMueSwgcG9pbnRzLngxLCBwb2ludHMueTEsIHBvaW50cy54MiwgcG9pbnRzLnkyKTtcclxuICAgICAgICAgICAgICAgICAgICAgIGNhc2Ugd2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19DVVJWRVRPX0NVQklDX1NNT09USF9SRUw6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBvaW50cyA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDI6IHRoaXMuX3BhcnNlTnVtYmVyKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkyOiB0aGlzLl9wYXJzZU51bWJlcigpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4OiB0aGlzLl9wYXJzZU51bWJlcigpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5OiB0aGlzLl9wYXJzZU51bWJlcigpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoUmVsKG93bmluZ1BhdGhTZWdMaXN0LCBwb2ludHMueCwgcG9pbnRzLnksIHBvaW50cy54MiwgcG9pbnRzLnkyKTtcclxuICAgICAgICAgICAgICAgICAgICAgIGNhc2Ugd2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19DVVJWRVRPX0NVQklDX1NNT09USF9BQlM6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBvaW50cyA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDI6IHRoaXMuX3BhcnNlTnVtYmVyKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkyOiB0aGlzLl9wYXJzZU51bWJlcigpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4OiB0aGlzLl9wYXJzZU51bWJlcigpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5OiB0aGlzLl9wYXJzZU51bWJlcigpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoQWJzKG93bmluZ1BhdGhTZWdMaXN0LCBwb2ludHMueCwgcG9pbnRzLnksIHBvaW50cy54MiwgcG9pbnRzLnkyKTtcclxuICAgICAgICAgICAgICAgICAgICAgIGNhc2Ugd2luZG93LlNWR1BhdGhTZWcuUEFUSFNFR19DVVJWRVRPX1FVQURSQVRJQ19SRUw6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBvaW50cyA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDE6IHRoaXMuX3BhcnNlTnVtYmVyKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkxOiB0aGlzLl9wYXJzZU51bWJlcigpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4OiB0aGlzLl9wYXJzZU51bWJlcigpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5OiB0aGlzLl9wYXJzZU51bWJlcigpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IHdpbmRvdy5TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1JlbChvd25pbmdQYXRoU2VnTGlzdCwgcG9pbnRzLngsIHBvaW50cy55LCBwb2ludHMueDEsIHBvaW50cy55MSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIHdpbmRvdy5TVkdQYXRoU2VnLlBBVEhTRUdfQ1VSVkVUT19RVUFEUkFUSUNfQUJTOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwb2ludHMgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgxOiB0aGlzLl9wYXJzZU51bWJlcigpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5MTogdGhpcy5fcGFyc2VOdW1iZXIoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDogdGhpcy5fcGFyc2VOdW1iZXIoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTogdGhpcy5fcGFyc2VOdW1iZXIoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyB3aW5kb3cuU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNBYnMob3duaW5nUGF0aFNlZ0xpc3QsIHBvaW50cy54LCBwb2ludHMueSwgcG9pbnRzLngxLCBwb2ludHMueTEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSB3aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX0NVUlZFVE9fUVVBRFJBVElDX1NNT09USF9SRUw6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyB3aW5kb3cuU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhSZWwob3duaW5nUGF0aFNlZ0xpc3QsIHRoaXMuX3BhcnNlTnVtYmVyKCksIHRoaXMuX3BhcnNlTnVtYmVyKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSB3aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX0NVUlZFVE9fUVVBRFJBVElDX1NNT09USF9BQlM6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyB3aW5kb3cuU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhBYnMob3duaW5nUGF0aFNlZ0xpc3QsIHRoaXMuX3BhcnNlTnVtYmVyKCksIHRoaXMuX3BhcnNlTnVtYmVyKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSB3aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX0FSQ19SRUw6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBvaW50cyA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDE6IHRoaXMuX3BhcnNlTnVtYmVyKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkxOiB0aGlzLl9wYXJzZU51bWJlcigpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmNBbmdsZTogdGhpcy5fcGFyc2VOdW1iZXIoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJjTGFyZ2U6IHRoaXMuX3BhcnNlQXJjRmxhZygpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmNTd2VlcDogdGhpcy5fcGFyc2VBcmNGbGFnKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6IHRoaXMuX3BhcnNlTnVtYmVyKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHk6IHRoaXMuX3BhcnNlTnVtYmVyKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgd2luZG93LlNWR1BhdGhTZWdBcmNSZWwob3duaW5nUGF0aFNlZ0xpc3QsIHBvaW50cy54LCBwb2ludHMueSwgcG9pbnRzLngxLCBwb2ludHMueTEsIHBvaW50cy5hcmNBbmdsZSwgcG9pbnRzLmFyY0xhcmdlLCBwb2ludHMuYXJjU3dlZXApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSB3aW5kb3cuU1ZHUGF0aFNlZy5QQVRIU0VHX0FSQ19BQlM6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBvaW50cyA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDE6IHRoaXMuX3BhcnNlTnVtYmVyKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkxOiB0aGlzLl9wYXJzZU51bWJlcigpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmNBbmdsZTogdGhpcy5fcGFyc2VOdW1iZXIoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJjTGFyZ2U6IHRoaXMuX3BhcnNlQXJjRmxhZygpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmNTd2VlcDogdGhpcy5fcGFyc2VBcmNGbGFnKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6IHRoaXMuX3BhcnNlTnVtYmVyKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHk6IHRoaXMuX3BhcnNlTnVtYmVyKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgd2luZG93LlNWR1BhdGhTZWdBcmNBYnMob3duaW5nUGF0aFNlZ0xpc3QsIHBvaW50cy54LCBwb2ludHMueSwgcG9pbnRzLngxLCBwb2ludHMueTEsIHBvaW50cy5hcmNBbmdsZSwgcG9pbnRzLmFyY0xhcmdlLCBwb2ludHMuYXJjU3dlZXApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyAnVW5rbm93biBwYXRoIHNlZyB0eXBlLic7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIHZhciBidWlsZGVyID0gbmV3IEJ1aWxkZXIoKTtcclxuICAgICAgICAgICAgICB2YXIgc291cmNlID0gbmV3IFNvdXJjZShzdHJpbmcpO1xyXG4gICAgICAgICAgICAgIGlmICghc291cmNlLmluaXRpYWxDb21tYW5kSXNNb3ZlVG8oKSlcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgICAgICAgIHdoaWxlIChzb3VyY2UuaGFzTW9yZURhdGEoKSkge1xyXG4gICAgICAgICAgICAgICAgICB2YXIgcGF0aFNlZyA9IHNvdXJjZS5wYXJzZVNlZ21lbnQoKTtcclxuICAgICAgICAgICAgICAgICAgaWYgKCFwYXRoU2VnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZFNlZ21lbnQocGF0aFNlZyk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHJldHVybiBidWlsZGVyLnBhdGhTZWdMaXN0O1xyXG4gICAgICAgICAgfTtcclxuICAgICAgfVxyXG4gIH0pKCk7XHJcbiAgLy8gU3RyaW5nLnBhZEVuZCBwb2x5ZmlsbCBmb3IgSUUxMVxyXG4gIC8vXHJcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3V4aXR0ZW4vcG9seWZpbGwvYmxvYi9tYXN0ZXIvc3RyaW5nLnBvbHlmaWxsLmpzXHJcbiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvU3RyaW5nL3BhZEVuZFxyXG4gIGlmICghU3RyaW5nLnByb3RvdHlwZS5wYWRFbmQpIHtcclxuICAgICAgU3RyaW5nLnByb3RvdHlwZS5wYWRFbmQgPSBmdW5jdGlvbiBwYWRFbmQodGFyZ2V0TGVuZ3RoLCBwYWRTdHJpbmcpIHtcclxuICAgICAgICAgIHRhcmdldExlbmd0aCA9IHRhcmdldExlbmd0aCA+PiAwOyAvL2Zsb29yIGlmIG51bWJlciBvciBjb252ZXJ0IG5vbi1udW1iZXIgdG8gMDtcclxuICAgICAgICAgIHBhZFN0cmluZyA9IFN0cmluZyh0eXBlb2YgcGFkU3RyaW5nICE9PSAndW5kZWZpbmVkJyA/IHBhZFN0cmluZyA6ICcgJyk7XHJcbiAgICAgICAgICBpZiAodGhpcy5sZW5ndGggPiB0YXJnZXRMZW5ndGgpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRoaXMpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGFyZ2V0TGVuZ3RoID0gdGFyZ2V0TGVuZ3RoIC0gdGhpcy5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgaWYgKHRhcmdldExlbmd0aCA+IHBhZFN0cmluZy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgcGFkU3RyaW5nICs9IHBhZFN0cmluZy5yZXBlYXQodGFyZ2V0TGVuZ3RoIC8gcGFkU3RyaW5nLmxlbmd0aCk7IC8vYXBwZW5kIHRvIG9yaWdpbmFsIHRvIGVuc3VyZSB3ZSBhcmUgbG9uZ2VyIHRoYW4gbmVlZGVkXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHJldHVybiBTdHJpbmcodGhpcykgKyBwYWRTdHJpbmcuc2xpY2UoMCwgdGFyZ2V0TGVuZ3RoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgfTtcclxuICB9XHJcbiAgLy8gT2JqZWN0LmFzc2lnbiBwb2x5ZmlsbCBmb3IgSUUxMVxyXG4gIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdC9hc3NpZ24jUG9seWZpbGxcclxuICBpZiAodHlwZW9mIE9iamVjdC5hc3NpZ24gIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgLy8gTXVzdCBiZSB3cml0YWJsZTogdHJ1ZSwgZW51bWVyYWJsZTogZmFsc2UsIGNvbmZpZ3VyYWJsZTogdHJ1ZVxyXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoT2JqZWN0LCAnYXNzaWduJywge1xyXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGFzc2lnbih0YXJnZXQsIHZhckFyZ3MpIHtcclxuICAgICAgICAgICAgICBpZiAodGFyZ2V0ID09PSBudWxsIHx8IHRhcmdldCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IHVuZGVmaW5lZCBvciBudWxsIHRvIG9iamVjdCcpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB2YXIgdG8gPSBPYmplY3QodGFyZ2V0KTtcclxuICAgICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDE7IGluZGV4IDwgYXJndW1lbnRzLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgICAgICAgICAgICB2YXIgbmV4dFNvdXJjZSA9IGFyZ3VtZW50c1tpbmRleF07XHJcbiAgICAgICAgICAgICAgICAgIGlmIChuZXh0U291cmNlICE9PSBudWxsICYmIG5leHRTb3VyY2UgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgbmV4dEtleSBpbiBuZXh0U291cmNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXZvaWQgYnVncyB3aGVuIGhhc093blByb3BlcnR5IGlzIHNoYWRvd2VkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuZXh0U291cmNlLCBuZXh0S2V5KSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b1tuZXh0S2V5XSA9IG5leHRTb3VyY2VbbmV4dEtleV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHJldHVybiB0bztcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcclxuICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxyXG4gICAgICB9KTtcclxuICB9XHJcbiAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cblxuICBDaGFydC5wcm90b3R5cGUuYXhpcyA9IGZ1bmN0aW9uICgpIHsgfTtcclxuICBDaGFydC5wcm90b3R5cGUuYXhpcy5sYWJlbHMgPSBmdW5jdGlvbiAobGFiZWxzKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXMuaW50ZXJuYWw7XHJcbiAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICBPYmplY3Qua2V5cyhsYWJlbHMpLmZvckVhY2goZnVuY3Rpb24gKGF4aXNJZCkge1xyXG4gICAgICAgICAgICAgICQkLmF4aXMuc2V0TGFiZWxUZXh0KGF4aXNJZCwgbGFiZWxzW2F4aXNJZF0pO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICAkJC5heGlzLnVwZGF0ZUxhYmVscygpO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIFRPRE86IHJldHVybiBzb21lIHZhbHVlcz9cclxuICB9O1xyXG4gIENoYXJ0LnByb3RvdHlwZS5heGlzLm1heCA9IGZ1bmN0aW9uIChtYXgpIHtcclxuICAgICAgdmFyICQkID0gdGhpcy5pbnRlcm5hbCwgY29uZmlnID0gJCQuY29uZmlnO1xyXG4gICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgaWYgKHR5cGVvZiBtYXggPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGlzVmFsdWUobWF4LngpKSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbmZpZy5heGlzX3hfbWF4ID0gbWF4Lng7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmIChpc1ZhbHVlKG1heC55KSkge1xyXG4gICAgICAgICAgICAgICAgICBjb25maWcuYXhpc195X21heCA9IG1heC55O1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAoaXNWYWx1ZShtYXgueTIpKSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbmZpZy5heGlzX3kyX21heCA9IG1heC55MjtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICBjb25maWcuYXhpc195X21heCA9IGNvbmZpZy5heGlzX3kyX21heCA9IG1heDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgICQkLnJlZHJhdyh7IHdpdGhVcGRhdGVPcmdYRG9tYWluOiB0cnVlLCB3aXRoVXBkYXRlWERvbWFpbjogdHJ1ZSB9KTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgeDogY29uZmlnLmF4aXNfeF9tYXgsXHJcbiAgICAgICAgICAgICAgeTogY29uZmlnLmF4aXNfeV9tYXgsXHJcbiAgICAgICAgICAgICAgeTI6IGNvbmZpZy5heGlzX3kyX21heFxyXG4gICAgICAgICAgfTtcclxuICAgICAgfVxyXG4gIH07XHJcbiAgQ2hhcnQucHJvdG90eXBlLmF4aXMubWluID0gZnVuY3Rpb24gKG1pbikge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzLmludGVybmFsLCBjb25maWcgPSAkJC5jb25maWc7XHJcbiAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICBpZiAodHlwZW9mIG1pbiA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgICBpZiAoaXNWYWx1ZShtaW4ueCkpIHtcclxuICAgICAgICAgICAgICAgICAgY29uZmlnLmF4aXNfeF9taW4gPSBtaW4ueDtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKGlzVmFsdWUobWluLnkpKSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbmZpZy5heGlzX3lfbWluID0gbWluLnk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmIChpc1ZhbHVlKG1pbi55MikpIHtcclxuICAgICAgICAgICAgICAgICAgY29uZmlnLmF4aXNfeTJfbWluID0gbWluLnkyO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIGNvbmZpZy5heGlzX3lfbWluID0gY29uZmlnLmF4aXNfeTJfbWluID0gbWluO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgJCQucmVkcmF3KHsgd2l0aFVwZGF0ZU9yZ1hEb21haW46IHRydWUsIHdpdGhVcGRhdGVYRG9tYWluOiB0cnVlIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICB4OiBjb25maWcuYXhpc194X21pbixcclxuICAgICAgICAgICAgICB5OiBjb25maWcuYXhpc195X21pbixcclxuICAgICAgICAgICAgICB5MjogY29uZmlnLmF4aXNfeTJfbWluXHJcbiAgICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgfTtcclxuICBDaGFydC5wcm90b3R5cGUuYXhpcy5yYW5nZSA9IGZ1bmN0aW9uIChyYW5nZSkge1xyXG4gICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgaWYgKGlzRGVmaW5lZChyYW5nZS5tYXgpKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5heGlzLm1heChyYW5nZS5tYXgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGlzRGVmaW5lZChyYW5nZS5taW4pKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5heGlzLm1pbihyYW5nZS5taW4pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICBtYXg6IHRoaXMuYXhpcy5tYXgoKSxcclxuICAgICAgICAgICAgICBtaW46IHRoaXMuYXhpcy5taW4oKVxyXG4gICAgICAgICAgfTtcclxuICAgICAgfVxyXG4gIH07XHJcbiAgQ2hhcnQucHJvdG90eXBlLmF4aXMudHlwZXMgPSBmdW5jdGlvbiAodHlwZXMpIHtcclxuICAgICAgdmFyICQkID0gdGhpcy5pbnRlcm5hbDtcclxuICAgICAgaWYgKHR5cGVzID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgeTogJCQuY29uZmlnLmF4aXNfeV90eXBlLFxyXG4gICAgICAgICAgICAgIHkyOiAkJC5jb25maWcuYXhpc195Ml90eXBlXHJcbiAgICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgaWYgKGlzRGVmaW5lZCh0eXBlcy55KSkge1xyXG4gICAgICAgICAgICAgICQkLmNvbmZpZy5heGlzX3lfdHlwZSA9IHR5cGVzLnk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoaXNEZWZpbmVkKHR5cGVzLnkyKSkge1xyXG4gICAgICAgICAgICAgICQkLmNvbmZpZy5heGlzX3kyX3R5cGUgPSB0eXBlcy55MjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgICQkLnVwZGF0ZVNjYWxlcygpO1xyXG4gICAgICAgICAgJCQucmVkcmF3KCk7XHJcbiAgICAgIH1cclxuICB9O1xuXG4gIENoYXJ0LnByb3RvdHlwZS5jYXRlZ29yeSA9IGZ1bmN0aW9uIChpLCBjYXRlZ29yeSkge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzLmludGVybmFsLCBjb25maWcgPSAkJC5jb25maWc7XHJcbiAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgY29uZmlnLmF4aXNfeF9jYXRlZ29yaWVzW2ldID0gY2F0ZWdvcnk7XHJcbiAgICAgICAgICAkJC5yZWRyYXcoKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gY29uZmlnLmF4aXNfeF9jYXRlZ29yaWVzW2ldO1xyXG4gIH07XHJcbiAgQ2hhcnQucHJvdG90eXBlLmNhdGVnb3JpZXMgPSBmdW5jdGlvbiAoY2F0ZWdvcmllcykge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzLmludGVybmFsLCBjb25maWcgPSAkJC5jb25maWc7XHJcbiAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgcmV0dXJuIGNvbmZpZy5heGlzX3hfY2F0ZWdvcmllcztcclxuICAgICAgfVxyXG4gICAgICBjb25maWcuYXhpc194X2NhdGVnb3JpZXMgPSBjYXRlZ29yaWVzO1xyXG4gICAgICAkJC5yZWRyYXcoKTtcclxuICAgICAgcmV0dXJuIGNvbmZpZy5heGlzX3hfY2F0ZWdvcmllcztcclxuICB9O1xuXG4gIENoYXJ0LnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAoc2l6ZSkge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzLmludGVybmFsLCBjb25maWcgPSAkJC5jb25maWc7XHJcbiAgICAgIGNvbmZpZy5zaXplX3dpZHRoID0gc2l6ZSA/IHNpemUud2lkdGggOiBudWxsO1xyXG4gICAgICBjb25maWcuc2l6ZV9oZWlnaHQgPSBzaXplID8gc2l6ZS5oZWlnaHQgOiBudWxsO1xyXG4gICAgICB0aGlzLmZsdXNoKCk7XHJcbiAgfTtcclxuICBDaGFydC5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXMuaW50ZXJuYWw7XHJcbiAgICAgICQkLnVwZGF0ZUFuZFJlZHJhdyh7XHJcbiAgICAgICAgICB3aXRoTGVnZW5kOiB0cnVlLFxyXG4gICAgICAgICAgd2l0aFRyYW5zaXRpb246IGZhbHNlLFxyXG4gICAgICAgICAgd2l0aFRyYW5zaXRpb25Gb3JUcmFuc2Zvcm06IGZhbHNlXHJcbiAgICAgIH0pO1xyXG4gIH07XHJcbiAgQ2hhcnQucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXMuaW50ZXJuYWw7XHJcbiAgICAgIHdpbmRvdy5jbGVhckludGVydmFsKCQkLmludGVydmFsRm9yT2JzZXJ2ZUluc2VydGVkKTtcclxuICAgICAgaWYgKCQkLnJlc2l6ZVRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgd2luZG93LmNsZWFyVGltZW91dCgkJC5yZXNpemVUaW1lb3V0KTtcclxuICAgICAgfVxyXG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgJCQucmVzaXplSWZFbGVtZW50RGlzcGxheWVkKTtcclxuICAgICAgLy8gUmVtb3ZlcyB0aGUgaW5uZXIgcmVzaXplIGZ1bmN0aW9uc1xyXG4gICAgICAkJC5yZXNpemVGdW5jdGlvbi5yZW1vdmUoKTtcclxuICAgICAgLy8gVW5iaW5kcyBmcm9tIHRoZSB3aW5kb3cgZm9jdXMgZXZlbnRcclxuICAgICAgJCQudW5iaW5kV2luZG93Rm9jdXMoKTtcclxuICAgICAgJCQuc2VsZWN0Q2hhcnQuY2xhc3NlZCgnYzMnLCBmYWxzZSkuaHRtbCgnJyk7XHJcbiAgICAgIC8vIE1FTU86IHRoaXMgaXMgbmVlZGVkIGJlY2F1c2UgdGhlIHJlZmVyZW5jZSBvZiBzb21lIGVsZW1lbnRzIHdpbGwgbm90IGJlIHJlbGVhc2VkLCB0aGVuIG1lbW9yeSBsZWFrIHdpbGwgaGFwcGVuLlxyXG4gICAgICBPYmplY3Qua2V5cygkJCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICAgICAgICAkJFtrZXldID0gbnVsbDtcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gIH07XG5cbiAgLy8gVE9ETzogZml4XHJcbiAgQ2hhcnQucHJvdG90eXBlLmNvbG9yID0gZnVuY3Rpb24gKGlkKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXMuaW50ZXJuYWw7XHJcbiAgICAgIHJldHVybiAkJC5jb2xvcihpZCk7IC8vIG1vcmUgcGF0dGVybnNcclxuICB9O1xuXG4gIENoYXJ0LnByb3RvdHlwZS5kYXRhID0gZnVuY3Rpb24gKHRhcmdldElkcykge1xyXG4gICAgICB2YXIgdGFyZ2V0cyA9IHRoaXMuaW50ZXJuYWwuZGF0YS50YXJnZXRzO1xyXG4gICAgICByZXR1cm4gdHlwZW9mIHRhcmdldElkcyA9PT0gJ3VuZGVmaW5lZCdcclxuICAgICAgICAgID8gdGFyZ2V0c1xyXG4gICAgICAgICAgOiB0YXJnZXRzLmZpbHRlcihmdW5jdGlvbiAodCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBbXS5jb25jYXQodGFyZ2V0SWRzKS5pbmRleE9mKHQuaWQpID49IDA7XHJcbiAgICAgICAgICB9KTtcclxuICB9O1xyXG4gIENoYXJ0LnByb3RvdHlwZS5kYXRhLnNob3duID0gZnVuY3Rpb24gKHRhcmdldElkcykge1xyXG4gICAgICByZXR1cm4gdGhpcy5pbnRlcm5hbC5maWx0ZXJUYXJnZXRzVG9TaG93KHRoaXMuZGF0YSh0YXJnZXRJZHMpKTtcclxuICB9O1xyXG4gIC8qKlxyXG4gICAqIEdldCB2YWx1ZXMgb2YgdGhlIGRhdGEgbG9hZGVkIGluIHRoZSBjaGFydC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7U3RyaW5nfEFycmF5fSB0YXJnZXRJZCBUaGlzIEFQSSByZXR1cm5zIHRoZSB2YWx1ZSBvZiBzcGVjaWZpZWQgdGFyZ2V0LlxyXG4gICAqIEBwYXJhbSBmbGF0XHJcbiAgICogQHJldHVybiB7QXJyYXl9IERhdGEgdmFsdWVzXHJcbiAgICovXHJcbiAgQ2hhcnQucHJvdG90eXBlLmRhdGEudmFsdWVzID0gZnVuY3Rpb24gKHRhcmdldElkLCBmbGF0KSB7XHJcbiAgICAgIGlmIChmbGF0ID09PSB2b2lkIDApIHsgZmxhdCA9IHRydWU7IH1cclxuICAgICAgdmFyIHZhbHVlcyA9IG51bGw7XHJcbiAgICAgIGlmICh0YXJnZXRJZCkge1xyXG4gICAgICAgICAgdmFyIHRhcmdldHMgPSB0aGlzLmRhdGEodGFyZ2V0SWQpO1xyXG4gICAgICAgICAgaWYgKHRhcmdldHMgJiYgaXNBcnJheSh0YXJnZXRzKSkge1xyXG4gICAgICAgICAgICAgIHZhbHVlcyA9IHRhcmdldHMucmVkdWNlKGZ1bmN0aW9uIChyZXQsIHYpIHtcclxuICAgICAgICAgICAgICAgICAgdmFyIGRhdGFWYWx1ZSA9IHYudmFsdWVzLm1hcChmdW5jdGlvbiAoZCkgeyByZXR1cm4gZC52YWx1ZTsgfSk7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChmbGF0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICByZXQgPSByZXQuY29uY2F0KGRhdGFWYWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICByZXQucHVzaChkYXRhVmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7XHJcbiAgICAgICAgICAgICAgfSwgW10pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB2YWx1ZXM7XHJcbiAgfTtcclxuICBDaGFydC5wcm90b3R5cGUuZGF0YS5uYW1lcyA9IGZ1bmN0aW9uIChuYW1lcykge1xyXG4gICAgICB0aGlzLmludGVybmFsLmNsZWFyTGVnZW5kSXRlbVRleHRCb3hDYWNoZSgpO1xyXG4gICAgICByZXR1cm4gdGhpcy5pbnRlcm5hbC51cGRhdGVEYXRhQXR0cmlidXRlcygnbmFtZXMnLCBuYW1lcyk7XHJcbiAgfTtcclxuICBDaGFydC5wcm90b3R5cGUuZGF0YS5jb2xvcnMgPSBmdW5jdGlvbiAoY29sb3JzKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmludGVybmFsLnVwZGF0ZURhdGFBdHRyaWJ1dGVzKCdjb2xvcnMnLCBjb2xvcnMpO1xyXG4gIH07XHJcbiAgQ2hhcnQucHJvdG90eXBlLmRhdGEuYXhlcyA9IGZ1bmN0aW9uIChheGVzKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmludGVybmFsLnVwZGF0ZURhdGFBdHRyaWJ1dGVzKCdheGVzJywgYXhlcyk7XHJcbiAgfTtcclxuICBDaGFydC5wcm90b3R5cGUuZGF0YS5zdGFja05vcm1hbGl6ZWQgPSBmdW5jdGlvbiAobm9ybWFsaXplZCkge1xyXG4gICAgICBpZiAobm9ybWFsaXplZCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5pbnRlcm5hbC5pc1N0YWNrTm9ybWFsaXplZCgpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuaW50ZXJuYWwuY29uZmlnLmRhdGFfc3RhY2tfbm9ybWFsaXplID0gISFub3JtYWxpemVkO1xyXG4gICAgICB0aGlzLmludGVybmFsLnJlZHJhdygpO1xyXG4gIH07XG5cbiAgQ2hhcnQucHJvdG90eXBlLmRvbnV0ID0gZnVuY3Rpb24gKCkgeyB9O1xyXG4gIENoYXJ0LnByb3RvdHlwZS5kb251dC5wYWRBbmdsZSA9IGZ1bmN0aW9uIChwYWRBbmdsZSkge1xyXG4gICAgICBpZiAocGFkQW5nbGUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuaW50ZXJuYWwuY29uZmlnLmRvbnV0X3BhZEFuZ2xlO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuaW50ZXJuYWwuY29uZmlnLmRvbnV0X3BhZEFuZ2xlID0gcGFkQW5nbGU7XHJcbiAgICAgIHRoaXMuZmx1c2goKTtcclxuICB9O1xuXG4gIENoYXJ0LnByb3RvdHlwZS5mbG93ID0gZnVuY3Rpb24gKGFyZ3MpIHtcclxuICAgICAgdmFyICQkID0gdGhpcy5pbnRlcm5hbCwgdGFyZ2V0cywgZGF0YSwgbm90Zm91bmRJZHMgPSBbXSwgb3JnRGF0YUNvdW50ID0gJCQuZ2V0TWF4RGF0YUNvdW50KCksIGRhdGFDb3VudCwgZG9tYWluLCBiYXNlVGFyZ2V0LCBiYXNlVmFsdWUsIGxlbmd0aCA9IDAsIHRhaWwgPSAwLCBkaWZmLCB0bztcclxuICAgICAgaWYgKGFyZ3MuanNvbikge1xyXG4gICAgICAgICAgZGF0YSA9ICQkLmNvbnZlcnRKc29uVG9EYXRhKGFyZ3MuanNvbiwgYXJncy5rZXlzKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChhcmdzLnJvd3MpIHtcclxuICAgICAgICAgIGRhdGEgPSAkJC5jb252ZXJ0Um93c1RvRGF0YShhcmdzLnJvd3MpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKGFyZ3MuY29sdW1ucykge1xyXG4gICAgICAgICAgZGF0YSA9ICQkLmNvbnZlcnRDb2x1bW5zVG9EYXRhKGFyZ3MuY29sdW1ucyk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdGFyZ2V0cyA9ICQkLmNvbnZlcnREYXRhVG9UYXJnZXRzKGRhdGEsIHRydWUpO1xyXG4gICAgICAvLyBVcGRhdGUvQWRkIGRhdGFcclxuICAgICAgJCQuZGF0YS50YXJnZXRzLmZvckVhY2goZnVuY3Rpb24gKHQpIHtcclxuICAgICAgICAgIHZhciBmb3VuZCA9IGZhbHNlLCBpLCBqO1xyXG4gICAgICAgICAgZm9yIChpID0gMDsgaSA8IHRhcmdldHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICBpZiAodC5pZCA9PT0gdGFyZ2V0c1tpXS5pZCkge1xyXG4gICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgIGlmICh0LnZhbHVlc1t0LnZhbHVlcy5sZW5ndGggLSAxXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGFpbCA9IHQudmFsdWVzW3QudmFsdWVzLmxlbmd0aCAtIDFdLmluZGV4ICsgMTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBsZW5ndGggPSB0YXJnZXRzW2ldLnZhbHVlcy5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBsZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0c1tpXS52YWx1ZXNbal0uaW5kZXggPSB0YWlsICsgajtcclxuICAgICAgICAgICAgICAgICAgICAgIGlmICghJCQuaXNUaW1lU2VyaWVzKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRzW2ldLnZhbHVlc1tqXS54ID0gdGFpbCArIGo7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgdC52YWx1ZXMgPSB0LnZhbHVlcy5jb25jYXQodGFyZ2V0c1tpXS52YWx1ZXMpO1xyXG4gICAgICAgICAgICAgICAgICB0YXJnZXRzLnNwbGljZShpLCAxKTtcclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKCFmb3VuZCkge1xyXG4gICAgICAgICAgICAgIG5vdGZvdW5kSWRzLnB1c2godC5pZCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICAvLyBBcHBlbmQgbnVsbCBmb3Igbm90IGZvdW5kIHRhcmdldHNcclxuICAgICAgJCQuZGF0YS50YXJnZXRzLmZvckVhY2goZnVuY3Rpb24gKHQpIHtcclxuICAgICAgICAgIHZhciBpLCBqO1xyXG4gICAgICAgICAgZm9yIChpID0gMDsgaSA8IG5vdGZvdW5kSWRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgaWYgKHQuaWQgPT09IG5vdGZvdW5kSWRzW2ldKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRhaWwgPSB0LnZhbHVlc1t0LnZhbHVlcy5sZW5ndGggLSAxXS5pbmRleCArIDE7XHJcbiAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBsZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdC52YWx1ZXMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHQuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IHRhaWwgKyBqLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHg6ICQkLmlzVGltZVNlcmllcygpID8gJCQuZ2V0T3RoZXJUYXJnZXRYKHRhaWwgKyBqKSA6IHRhaWwgKyBqLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIC8vIEdlbmVyYXRlIG51bGwgdmFsdWVzIGZvciBuZXcgdGFyZ2V0XHJcbiAgICAgIGlmICgkJC5kYXRhLnRhcmdldHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICB0YXJnZXRzLmZvckVhY2goZnVuY3Rpb24gKHQpIHtcclxuICAgICAgICAgICAgICB2YXIgaSwgbWlzc2luZyA9IFtdO1xyXG4gICAgICAgICAgICAgIGZvciAoaSA9ICQkLmRhdGEudGFyZ2V0c1swXS52YWx1ZXNbMF0uaW5kZXg7IGkgPCB0YWlsOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgbWlzc2luZy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgIGlkOiB0LmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGksXHJcbiAgICAgICAgICAgICAgICAgICAgICB4OiAkJC5pc1RpbWVTZXJpZXMoKSA/ICQkLmdldE90aGVyVGFyZ2V0WChpKSA6IGksXHJcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbnVsbFxyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgdC52YWx1ZXMuZm9yRWFjaChmdW5jdGlvbiAodikge1xyXG4gICAgICAgICAgICAgICAgICB2LmluZGV4ICs9IHRhaWw7XHJcbiAgICAgICAgICAgICAgICAgIGlmICghJCQuaXNUaW1lU2VyaWVzKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHYueCArPSB0YWlsO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgdC52YWx1ZXMgPSBtaXNzaW5nLmNvbmNhdCh0LnZhbHVlcyk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICAkJC5kYXRhLnRhcmdldHMgPSAkJC5kYXRhLnRhcmdldHMuY29uY2F0KHRhcmdldHMpOyAvLyBhZGQgcmVtYWluZWRcclxuICAgICAgLy8gY2hlY2sgZGF0YSBjb3VudCBiZWNhdXNlIGJlaGF2aW9yIG5lZWRzIHRvIGNoYW5nZSB3aGVuIGl0J3Mgb25seSBvbmVcclxuICAgICAgZGF0YUNvdW50ID0gJCQuZ2V0TWF4RGF0YUNvdW50KCk7XHJcbiAgICAgIGJhc2VUYXJnZXQgPSAkJC5kYXRhLnRhcmdldHNbMF07XHJcbiAgICAgIGJhc2VWYWx1ZSA9IGJhc2VUYXJnZXQudmFsdWVzWzBdO1xyXG4gICAgICAvLyBVcGRhdGUgbGVuZ3RoIHRvIGZsb3cgaWYgbmVlZGVkXHJcbiAgICAgIGlmIChpc0RlZmluZWQoYXJncy50bykpIHtcclxuICAgICAgICAgIGxlbmd0aCA9IDA7XHJcbiAgICAgICAgICB0byA9ICQkLmlzVGltZVNlcmllcygpID8gJCQucGFyc2VEYXRlKGFyZ3MudG8pIDogYXJncy50bztcclxuICAgICAgICAgIGJhc2VUYXJnZXQudmFsdWVzLmZvckVhY2goZnVuY3Rpb24gKHYpIHtcclxuICAgICAgICAgICAgICBpZiAodi54IDwgdG8pIHtcclxuICAgICAgICAgICAgICAgICAgbGVuZ3RoKys7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoaXNEZWZpbmVkKGFyZ3MubGVuZ3RoKSkge1xyXG4gICAgICAgICAgbGVuZ3RoID0gYXJncy5sZW5ndGg7XHJcbiAgICAgIH1cclxuICAgICAgLy8gSWYgb25seSBvbmUgZGF0YSwgdXBkYXRlIHRoZSBkb21haW4gdG8gZmxvdyBmcm9tIGxlZnQgZWRnZSBvZiB0aGUgY2hhcnRcclxuICAgICAgaWYgKCFvcmdEYXRhQ291bnQpIHtcclxuICAgICAgICAgIGlmICgkJC5pc1RpbWVTZXJpZXMoKSkge1xyXG4gICAgICAgICAgICAgIGlmIChiYXNlVGFyZ2V0LnZhbHVlcy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgICAgICAgIGRpZmYgPSBiYXNlVGFyZ2V0LnZhbHVlc1tiYXNlVGFyZ2V0LnZhbHVlcy5sZW5ndGggLSAxXS54IC0gYmFzZVZhbHVlLng7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBkaWZmID0gYmFzZVZhbHVlLnggLSAkJC5nZXRYRG9tYWluKCQkLmRhdGEudGFyZ2V0cylbMF07XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgZGlmZiA9IDE7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBkb21haW4gPSBbYmFzZVZhbHVlLnggLSBkaWZmLCBiYXNlVmFsdWUueF07XHJcbiAgICAgICAgICAkJC51cGRhdGVYRG9tYWluKG51bGwsIHRydWUsIHRydWUsIGZhbHNlLCBkb21haW4pO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKG9yZ0RhdGFDb3VudCA9PT0gMSkge1xyXG4gICAgICAgICAgaWYgKCQkLmlzVGltZVNlcmllcygpKSB7XHJcbiAgICAgICAgICAgICAgZGlmZiA9XHJcbiAgICAgICAgICAgICAgICAgIChiYXNlVGFyZ2V0LnZhbHVlc1tiYXNlVGFyZ2V0LnZhbHVlcy5sZW5ndGggLSAxXS54IC0gYmFzZVZhbHVlLngpIC8gMjtcclxuICAgICAgICAgICAgICBkb21haW4gPSBbbmV3IERhdGUoK2Jhc2VWYWx1ZS54IC0gZGlmZiksIG5ldyBEYXRlKCtiYXNlVmFsdWUueCArIGRpZmYpXTtcclxuICAgICAgICAgICAgICAkJC51cGRhdGVYRG9tYWluKG51bGwsIHRydWUsIHRydWUsIGZhbHNlLCBkb21haW4pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIC8vIFNldCB0YXJnZXRzXHJcbiAgICAgICQkLnVwZGF0ZVRhcmdldHMoJCQuZGF0YS50YXJnZXRzKTtcclxuICAgICAgLy8gUmVkcmF3IHdpdGggbmV3IHRhcmdldHNcclxuICAgICAgJCQucmVkcmF3KHtcclxuICAgICAgICAgIGZsb3c6IHtcclxuICAgICAgICAgICAgICBpbmRleDogYmFzZVZhbHVlLmluZGV4LFxyXG4gICAgICAgICAgICAgIGxlbmd0aDogbGVuZ3RoLFxyXG4gICAgICAgICAgICAgIGR1cmF0aW9uOiBpc1ZhbHVlKGFyZ3MuZHVyYXRpb24pXHJcbiAgICAgICAgICAgICAgICAgID8gYXJncy5kdXJhdGlvblxyXG4gICAgICAgICAgICAgICAgICA6ICQkLmNvbmZpZy50cmFuc2l0aW9uX2R1cmF0aW9uLFxyXG4gICAgICAgICAgICAgIGRvbmU6IGFyZ3MuZG9uZSxcclxuICAgICAgICAgICAgICBvcmdEYXRhQ291bnQ6IG9yZ0RhdGFDb3VudFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHdpdGhMZWdlbmQ6IHRydWUsXHJcbiAgICAgICAgICB3aXRoVHJhbnNpdGlvbjogb3JnRGF0YUNvdW50ID4gMSxcclxuICAgICAgICAgIHdpdGhUcmltWERvbWFpbjogZmFsc2UsXHJcbiAgICAgICAgICB3aXRoVXBkYXRlWEF4aXM6IHRydWVcclxuICAgICAgfSk7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5nZW5lcmF0ZUZsb3cgPSBmdW5jdGlvbiAoYXJncykge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzLCBjb25maWcgPSAkJC5jb25maWcsIGQzID0gJCQuZDM7XHJcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICB2YXIgdGFyZ2V0cyA9IGFyZ3MudGFyZ2V0cywgZmxvdyA9IGFyZ3MuZmxvdywgZHJhd0JhciA9IGFyZ3MuZHJhd0JhciwgZHJhd0xpbmUgPSBhcmdzLmRyYXdMaW5lLCBkcmF3QXJlYSA9IGFyZ3MuZHJhd0FyZWEsIGN4ID0gYXJncy5jeCwgY3kgPSBhcmdzLmN5LCB4diA9IGFyZ3MueHYsIHhGb3JUZXh0ID0gYXJncy54Rm9yVGV4dCwgeUZvclRleHQgPSBhcmdzLnlGb3JUZXh0LCBkdXJhdGlvbiA9IGFyZ3MuZHVyYXRpb247XHJcbiAgICAgICAgICB2YXIgdHJhbnNsYXRlWCwgc2NhbGVYID0gMSwgdHJhbnNmb3JtLCBmbG93SW5kZXggPSBmbG93LmluZGV4LCBmbG93TGVuZ3RoID0gZmxvdy5sZW5ndGgsIGZsb3dTdGFydCA9ICQkLmdldFZhbHVlT25JbmRleCgkJC5kYXRhLnRhcmdldHNbMF0udmFsdWVzLCBmbG93SW5kZXgpLCBmbG93RW5kID0gJCQuZ2V0VmFsdWVPbkluZGV4KCQkLmRhdGEudGFyZ2V0c1swXS52YWx1ZXMsIGZsb3dJbmRleCArIGZsb3dMZW5ndGgpLCBvcmdEb21haW4gPSAkJC54LmRvbWFpbigpLCBkb21haW4sIGR1cmF0aW9uRm9yRmxvdyA9IGZsb3cuZHVyYXRpb24gfHwgZHVyYXRpb24sIGRvbmUgPSBmbG93LmRvbmUgfHwgZnVuY3Rpb24gKCkgeyB9LCB3YWl0ID0gJCQuZ2VuZXJhdGVXYWl0KCk7XHJcbiAgICAgICAgICB2YXIgeGdyaWQsIHhncmlkTGluZXMsIG1haW5SZWdpb24sIG1haW5UZXh0LCBtYWluQmFyLCBtYWluTGluZSwgbWFpbkFyZWEsIG1haW5DaXJjbGU7XHJcbiAgICAgICAgICAvLyBzZXQgZmxhZ1xyXG4gICAgICAgICAgJCQuZmxvd2luZyA9IHRydWU7XHJcbiAgICAgICAgICAvLyByZW1vdmUgaGVhZCBkYXRhIGFmdGVyIHJlbmRlcmVkXHJcbiAgICAgICAgICAkJC5kYXRhLnRhcmdldHMuZm9yRWFjaChmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICAgIGQudmFsdWVzLnNwbGljZSgwLCBmbG93TGVuZ3RoKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgLy8gdXBkYXRlIHggZG9tYWluIHRvIGdlbmVyYXRlIGF4aXMgZWxlbWVudHMgZm9yIGZsb3dcclxuICAgICAgICAgIGRvbWFpbiA9ICQkLnVwZGF0ZVhEb21haW4odGFyZ2V0cywgdHJ1ZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAvLyB1cGRhdGUgZWxlbWVudHMgcmVsYXRlZCB0byB4IHNjYWxlXHJcbiAgICAgICAgICBpZiAoJCQudXBkYXRlWEdyaWQpIHtcclxuICAgICAgICAgICAgICAkJC51cGRhdGVYR3JpZCh0cnVlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHhncmlkID0gJCQueGdyaWQgfHwgZDMuc2VsZWN0QWxsKFtdKTsgLy8geGdyaWQgbmVlZHMgdG8gYmUgb2J0YWluZWQgYWZ0ZXIgdXBkYXRlWEdyaWRcclxuICAgICAgICAgIHhncmlkTGluZXMgPSAkJC54Z3JpZExpbmVzIHx8IGQzLnNlbGVjdEFsbChbXSk7XHJcbiAgICAgICAgICBtYWluUmVnaW9uID0gJCQubWFpblJlZ2lvbiB8fCBkMy5zZWxlY3RBbGwoW10pO1xyXG4gICAgICAgICAgbWFpblRleHQgPSAkJC5tYWluVGV4dCB8fCBkMy5zZWxlY3RBbGwoW10pO1xyXG4gICAgICAgICAgbWFpbkJhciA9ICQkLm1haW5CYXIgfHwgZDMuc2VsZWN0QWxsKFtdKTtcclxuICAgICAgICAgIG1haW5MaW5lID0gJCQubWFpbkxpbmUgfHwgZDMuc2VsZWN0QWxsKFtdKTtcclxuICAgICAgICAgIG1haW5BcmVhID0gJCQubWFpbkFyZWEgfHwgZDMuc2VsZWN0QWxsKFtdKTtcclxuICAgICAgICAgIG1haW5DaXJjbGUgPSAkJC5tYWluQ2lyY2xlIHx8IGQzLnNlbGVjdEFsbChbXSk7XHJcbiAgICAgICAgICAvLyBnZW5lcmF0ZSB0cmFuc2Zvcm0gdG8gZmxvd1xyXG4gICAgICAgICAgaWYgKCFmbG93Lm9yZ0RhdGFDb3VudCkge1xyXG4gICAgICAgICAgICAgIC8vIGlmIGVtcHR5XHJcbiAgICAgICAgICAgICAgaWYgKCQkLmRhdGEudGFyZ2V0c1swXS52YWx1ZXMubGVuZ3RoICE9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZVggPSAkJC54KG9yZ0RvbWFpblswXSkgLSAkJC54KGRvbWFpblswXSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoJCQuaXNUaW1lU2VyaWVzKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGZsb3dTdGFydCA9ICQkLmdldFZhbHVlT25JbmRleCgkJC5kYXRhLnRhcmdldHNbMF0udmFsdWVzLCAwKTtcclxuICAgICAgICAgICAgICAgICAgICAgIGZsb3dFbmQgPSAkJC5nZXRWYWx1ZU9uSW5kZXgoJCQuZGF0YS50YXJnZXRzWzBdLnZhbHVlcywgJCQuZGF0YS50YXJnZXRzWzBdLnZhbHVlcy5sZW5ndGggLSAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZVggPSAkJC54KGZsb3dTdGFydC54KSAtICQkLngoZmxvd0VuZC54KTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZVggPSBkaWZmRG9tYWluKGRvbWFpbikgLyAyO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSBpZiAoZmxvdy5vcmdEYXRhQ291bnQgPT09IDEgfHxcclxuICAgICAgICAgICAgICAoZmxvd1N0YXJ0ICYmIGZsb3dTdGFydC54KSA9PT0gKGZsb3dFbmQgJiYgZmxvd0VuZC54KSkge1xyXG4gICAgICAgICAgICAgIHRyYW5zbGF0ZVggPSAkJC54KG9yZ0RvbWFpblswXSkgLSAkJC54KGRvbWFpblswXSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICBpZiAoJCQuaXNUaW1lU2VyaWVzKCkpIHtcclxuICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlWCA9ICQkLngob3JnRG9tYWluWzBdKSAtICQkLngoZG9tYWluWzBdKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZVggPSAkJC54KGZsb3dTdGFydC54KSAtICQkLngoZmxvd0VuZC54KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBzY2FsZVggPSBkaWZmRG9tYWluKG9yZ0RvbWFpbikgLyBkaWZmRG9tYWluKGRvbWFpbik7XHJcbiAgICAgICAgICB0cmFuc2Zvcm0gPSAndHJhbnNsYXRlKCcgKyB0cmFuc2xhdGVYICsgJywwKSBzY2FsZSgnICsgc2NhbGVYICsgJywxKSc7XHJcbiAgICAgICAgICAkJC5oaWRlWEdyaWRGb2N1cygpO1xyXG4gICAgICAgICAgdmFyIGZsb3dUcmFuc2l0aW9uID0gZDNcclxuICAgICAgICAgICAgICAudHJhbnNpdGlvbigpXHJcbiAgICAgICAgICAgICAgLmVhc2UoZDMuZWFzZUxpbmVhcilcclxuICAgICAgICAgICAgICAuZHVyYXRpb24oZHVyYXRpb25Gb3JGbG93KTtcclxuICAgICAgICAgIHdhaXQuYWRkKCQkLnhBeGlzKCQkLmF4ZXMueCwgZmxvd1RyYW5zaXRpb24pKTtcclxuICAgICAgICAgIHdhaXQuYWRkKG1haW5CYXIudHJhbnNpdGlvbihmbG93VHJhbnNpdGlvbikuYXR0cigndHJhbnNmb3JtJywgdHJhbnNmb3JtKSk7XHJcbiAgICAgICAgICB3YWl0LmFkZChtYWluTGluZS50cmFuc2l0aW9uKGZsb3dUcmFuc2l0aW9uKS5hdHRyKCd0cmFuc2Zvcm0nLCB0cmFuc2Zvcm0pKTtcclxuICAgICAgICAgIHdhaXQuYWRkKG1haW5BcmVhLnRyYW5zaXRpb24oZmxvd1RyYW5zaXRpb24pLmF0dHIoJ3RyYW5zZm9ybScsIHRyYW5zZm9ybSkpO1xyXG4gICAgICAgICAgd2FpdC5hZGQobWFpbkNpcmNsZS50cmFuc2l0aW9uKGZsb3dUcmFuc2l0aW9uKS5hdHRyKCd0cmFuc2Zvcm0nLCB0cmFuc2Zvcm0pKTtcclxuICAgICAgICAgIHdhaXQuYWRkKG1haW5UZXh0LnRyYW5zaXRpb24oZmxvd1RyYW5zaXRpb24pLmF0dHIoJ3RyYW5zZm9ybScsIHRyYW5zZm9ybSkpO1xyXG4gICAgICAgICAgd2FpdC5hZGQobWFpblJlZ2lvblxyXG4gICAgICAgICAgICAgIC5maWx0ZXIoJCQuaXNSZWdpb25PblgpXHJcbiAgICAgICAgICAgICAgLnRyYW5zaXRpb24oZmxvd1RyYW5zaXRpb24pXHJcbiAgICAgICAgICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIHRyYW5zZm9ybSkpO1xyXG4gICAgICAgICAgd2FpdC5hZGQoeGdyaWQudHJhbnNpdGlvbihmbG93VHJhbnNpdGlvbikuYXR0cigndHJhbnNmb3JtJywgdHJhbnNmb3JtKSk7XHJcbiAgICAgICAgICB3YWl0LmFkZCh4Z3JpZExpbmVzLnRyYW5zaXRpb24oZmxvd1RyYW5zaXRpb24pLmF0dHIoJ3RyYW5zZm9ybScsIHRyYW5zZm9ybSkpO1xyXG4gICAgICAgICAgd2FpdChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgdmFyIGksIHNoYXBlcyA9IFtdLCB0ZXh0cyA9IFtdO1xyXG4gICAgICAgICAgICAgIC8vIHJlbW92ZSBmbG93ZWQgZWxlbWVudHNcclxuICAgICAgICAgICAgICBpZiAoZmxvd0xlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZmxvd0xlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBzaGFwZXMucHVzaCgnLicgKyBDTEFTUy5zaGFwZSArICctJyArIChmbG93SW5kZXggKyBpKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0ZXh0cy5wdXNoKCcuJyArIENMQVNTLnRleHQgKyAnLScgKyAoZmxvd0luZGV4ICsgaSkpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICQkLnN2Z1xyXG4gICAgICAgICAgICAgICAgICAgICAgLnNlbGVjdEFsbCgnLicgKyBDTEFTUy5zaGFwZXMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAuc2VsZWN0QWxsKHNoYXBlcylcclxuICAgICAgICAgICAgICAgICAgICAgIC5yZW1vdmUoKTtcclxuICAgICAgICAgICAgICAgICAgJCQuc3ZnXHJcbiAgICAgICAgICAgICAgICAgICAgICAuc2VsZWN0QWxsKCcuJyArIENMQVNTLnRleHRzKVxyXG4gICAgICAgICAgICAgICAgICAgICAgLnNlbGVjdEFsbCh0ZXh0cylcclxuICAgICAgICAgICAgICAgICAgICAgIC5yZW1vdmUoKTtcclxuICAgICAgICAgICAgICAgICAgJCQuc3ZnLnNlbGVjdCgnLicgKyBDTEFTUy54Z3JpZCkucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIC8vIGRyYXcgYWdhaW4gZm9yIHJlbW92aW5nIGZsb3dlZCBlbGVtZW50cyBhbmQgcmV2ZXJ0aW5nIGF0dHJcclxuICAgICAgICAgICAgICB4Z3JpZFxyXG4gICAgICAgICAgICAgICAgICAuYXR0cigndHJhbnNmb3JtJywgbnVsbClcclxuICAgICAgICAgICAgICAgICAgLmF0dHIoJ3gxJywgJCQueGdyaWRBdHRyLngxKVxyXG4gICAgICAgICAgICAgICAgICAuYXR0cigneDInLCAkJC54Z3JpZEF0dHIueDIpXHJcbiAgICAgICAgICAgICAgICAgIC5hdHRyKCd5MScsICQkLnhncmlkQXR0ci55MSlcclxuICAgICAgICAgICAgICAgICAgLmF0dHIoJ3kyJywgJCQueGdyaWRBdHRyLnkyKVxyXG4gICAgICAgICAgICAgICAgICAuc3R5bGUoJ29wYWNpdHknLCAkJC54Z3JpZEF0dHIub3BhY2l0eSk7XHJcbiAgICAgICAgICAgICAgeGdyaWRMaW5lcy5hdHRyKCd0cmFuc2Zvcm0nLCBudWxsKTtcclxuICAgICAgICAgICAgICB4Z3JpZExpbmVzXHJcbiAgICAgICAgICAgICAgICAgIC5zZWxlY3QoJ2xpbmUnKVxyXG4gICAgICAgICAgICAgICAgICAuYXR0cigneDEnLCBjb25maWcuYXhpc19yb3RhdGVkID8gMCA6IHh2KVxyXG4gICAgICAgICAgICAgICAgICAuYXR0cigneDInLCBjb25maWcuYXhpc19yb3RhdGVkID8gJCQud2lkdGggOiB4dik7XHJcbiAgICAgICAgICAgICAgeGdyaWRMaW5lc1xyXG4gICAgICAgICAgICAgICAgICAuc2VsZWN0KCd0ZXh0JylcclxuICAgICAgICAgICAgICAgICAgLmF0dHIoJ3gnLCBjb25maWcuYXhpc19yb3RhdGVkID8gJCQud2lkdGggOiAwKVxyXG4gICAgICAgICAgICAgICAgICAuYXR0cigneScsIHh2KTtcclxuICAgICAgICAgICAgICBtYWluQmFyLmF0dHIoJ3RyYW5zZm9ybScsIG51bGwpLmF0dHIoJ2QnLCBkcmF3QmFyKTtcclxuICAgICAgICAgICAgICBtYWluTGluZS5hdHRyKCd0cmFuc2Zvcm0nLCBudWxsKS5hdHRyKCdkJywgZHJhd0xpbmUpO1xyXG4gICAgICAgICAgICAgIG1haW5BcmVhLmF0dHIoJ3RyYW5zZm9ybScsIG51bGwpLmF0dHIoJ2QnLCBkcmF3QXJlYSk7XHJcbiAgICAgICAgICAgICAgbWFpbkNpcmNsZVxyXG4gICAgICAgICAgICAgICAgICAuYXR0cigndHJhbnNmb3JtJywgbnVsbClcclxuICAgICAgICAgICAgICAgICAgLmF0dHIoJ2N4JywgY3gpXHJcbiAgICAgICAgICAgICAgICAgIC5hdHRyKCdjeScsIGN5KTtcclxuICAgICAgICAgICAgICBtYWluVGV4dFxyXG4gICAgICAgICAgICAgICAgICAuYXR0cigndHJhbnNmb3JtJywgbnVsbClcclxuICAgICAgICAgICAgICAgICAgLmF0dHIoJ3gnLCB4Rm9yVGV4dClcclxuICAgICAgICAgICAgICAgICAgLmF0dHIoJ3knLCB5Rm9yVGV4dClcclxuICAgICAgICAgICAgICAgICAgLnN0eWxlKCdmaWxsLW9wYWNpdHknLCAkJC5vcGFjaXR5Rm9yVGV4dC5iaW5kKCQkKSk7XHJcbiAgICAgICAgICAgICAgbWFpblJlZ2lvbi5hdHRyKCd0cmFuc2Zvcm0nLCBudWxsKTtcclxuICAgICAgICAgICAgICBtYWluUmVnaW9uXHJcbiAgICAgICAgICAgICAgICAgIC5maWx0ZXIoJCQuaXNSZWdpb25PblgpXHJcbiAgICAgICAgICAgICAgICAgIC5hdHRyKCd4JywgJCQucmVnaW9uWC5iaW5kKCQkKSlcclxuICAgICAgICAgICAgICAgICAgLmF0dHIoJ3dpZHRoJywgJCQucmVnaW9uV2lkdGguYmluZCgkJCkpO1xyXG4gICAgICAgICAgICAgIC8vIGNhbGxiYWNrIGZvciBlbmQgb2YgZmxvd1xyXG4gICAgICAgICAgICAgIGRvbmUoKTtcclxuICAgICAgICAgICAgICAkJC5mbG93aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfTtcclxuICB9O1xuXG4gIENoYXJ0LnByb3RvdHlwZS5mb2N1cyA9IGZ1bmN0aW9uICh0YXJnZXRJZHMpIHtcclxuICAgICAgdmFyICQkID0gdGhpcy5pbnRlcm5hbCwgY2FuZGlkYXRlcztcclxuICAgICAgdGFyZ2V0SWRzID0gJCQubWFwVG9UYXJnZXRJZHModGFyZ2V0SWRzKTtcclxuICAgICAgKGNhbmRpZGF0ZXMgPSAkJC5zdmcuc2VsZWN0QWxsKCQkLnNlbGVjdG9yVGFyZ2V0cyh0YXJnZXRJZHMuZmlsdGVyKCQkLmlzVGFyZ2V0VG9TaG93LCAkJCkpKSksXHJcbiAgICAgICAgICB0aGlzLnJldmVydCgpO1xyXG4gICAgICB0aGlzLmRlZm9jdXMoKTtcclxuICAgICAgY2FuZGlkYXRlcy5jbGFzc2VkKENMQVNTLmZvY3VzZWQsIHRydWUpLmNsYXNzZWQoQ0xBU1MuZGVmb2N1c2VkLCBmYWxzZSk7XHJcbiAgICAgIGlmICgkJC5oYXNBcmNUeXBlKCkpIHtcclxuICAgICAgICAgICQkLmV4cGFuZEFyYyh0YXJnZXRJZHMpO1xyXG4gICAgICB9XHJcbiAgICAgICQkLnRvZ2dsZUZvY3VzTGVnZW5kKHRhcmdldElkcywgdHJ1ZSk7XHJcbiAgICAgICQkLmZvY3VzZWRUYXJnZXRJZHMgPSB0YXJnZXRJZHM7XHJcbiAgICAgICQkLmRlZm9jdXNlZFRhcmdldElkcyA9ICQkLmRlZm9jdXNlZFRhcmdldElkcy5maWx0ZXIoZnVuY3Rpb24gKGlkKSB7XHJcbiAgICAgICAgICByZXR1cm4gdGFyZ2V0SWRzLmluZGV4T2YoaWQpIDwgMDtcclxuICAgICAgfSk7XHJcbiAgfTtcclxuICBDaGFydC5wcm90b3R5cGUuZGVmb2N1cyA9IGZ1bmN0aW9uICh0YXJnZXRJZHMpIHtcclxuICAgICAgdmFyICQkID0gdGhpcy5pbnRlcm5hbCwgY2FuZGlkYXRlcztcclxuICAgICAgdGFyZ2V0SWRzID0gJCQubWFwVG9UYXJnZXRJZHModGFyZ2V0SWRzKTtcclxuICAgICAgKGNhbmRpZGF0ZXMgPSAkJC5zdmcuc2VsZWN0QWxsKCQkLnNlbGVjdG9yVGFyZ2V0cyh0YXJnZXRJZHMuZmlsdGVyKCQkLmlzVGFyZ2V0VG9TaG93LCAkJCkpKSksXHJcbiAgICAgICAgICBjYW5kaWRhdGVzLmNsYXNzZWQoQ0xBU1MuZm9jdXNlZCwgZmFsc2UpLmNsYXNzZWQoQ0xBU1MuZGVmb2N1c2VkLCB0cnVlKTtcclxuICAgICAgaWYgKCQkLmhhc0FyY1R5cGUoKSkge1xyXG4gICAgICAgICAgJCQudW5leHBhbmRBcmModGFyZ2V0SWRzKTtcclxuICAgICAgfVxyXG4gICAgICAkJC50b2dnbGVGb2N1c0xlZ2VuZCh0YXJnZXRJZHMsIGZhbHNlKTtcclxuICAgICAgJCQuZm9jdXNlZFRhcmdldElkcyA9ICQkLmZvY3VzZWRUYXJnZXRJZHMuZmlsdGVyKGZ1bmN0aW9uIChpZCkge1xyXG4gICAgICAgICAgcmV0dXJuIHRhcmdldElkcy5pbmRleE9mKGlkKSA8IDA7XHJcbiAgICAgIH0pO1xyXG4gICAgICAkJC5kZWZvY3VzZWRUYXJnZXRJZHMgPSB0YXJnZXRJZHM7XHJcbiAgfTtcclxuICBDaGFydC5wcm90b3R5cGUucmV2ZXJ0ID0gZnVuY3Rpb24gKHRhcmdldElkcykge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzLmludGVybmFsLCBjYW5kaWRhdGVzO1xyXG4gICAgICB0YXJnZXRJZHMgPSAkJC5tYXBUb1RhcmdldElkcyh0YXJnZXRJZHMpO1xyXG4gICAgICBjYW5kaWRhdGVzID0gJCQuc3ZnLnNlbGVjdEFsbCgkJC5zZWxlY3RvclRhcmdldHModGFyZ2V0SWRzKSk7IC8vIHNob3VsZCBiZSBmb3IgYWxsIHRhcmdldHNcclxuICAgICAgY2FuZGlkYXRlcy5jbGFzc2VkKENMQVNTLmZvY3VzZWQsIGZhbHNlKS5jbGFzc2VkKENMQVNTLmRlZm9jdXNlZCwgZmFsc2UpO1xyXG4gICAgICBpZiAoJCQuaGFzQXJjVHlwZSgpKSB7XHJcbiAgICAgICAgICAkJC51bmV4cGFuZEFyYyh0YXJnZXRJZHMpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICgkJC5jb25maWcubGVnZW5kX3Nob3cpIHtcclxuICAgICAgICAgICQkLnNob3dMZWdlbmQodGFyZ2V0SWRzLmZpbHRlcigkJC5pc0xlZ2VuZFRvU2hvdy5iaW5kKCQkKSkpO1xyXG4gICAgICAgICAgJCQubGVnZW5kXHJcbiAgICAgICAgICAgICAgLnNlbGVjdEFsbCgkJC5zZWxlY3RvckxlZ2VuZHModGFyZ2V0SWRzKSlcclxuICAgICAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gJCQuZDMuc2VsZWN0KHRoaXMpLmNsYXNzZWQoQ0xBU1MubGVnZW5kSXRlbUZvY3VzZWQpO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAuY2xhc3NlZChDTEFTUy5sZWdlbmRJdGVtRm9jdXNlZCwgZmFsc2UpO1xyXG4gICAgICB9XHJcbiAgICAgICQkLmZvY3VzZWRUYXJnZXRJZHMgPSBbXTtcclxuICAgICAgJCQuZGVmb2N1c2VkVGFyZ2V0SWRzID0gW107XHJcbiAgfTtcblxuICBDaGFydC5wcm90b3R5cGUueGdyaWRzID0gZnVuY3Rpb24gKGdyaWRzKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXMuaW50ZXJuYWwsIGNvbmZpZyA9ICQkLmNvbmZpZztcclxuICAgICAgaWYgKCFncmlkcykge1xyXG4gICAgICAgICAgcmV0dXJuIGNvbmZpZy5ncmlkX3hfbGluZXM7XHJcbiAgICAgIH1cclxuICAgICAgY29uZmlnLmdyaWRfeF9saW5lcyA9IGdyaWRzO1xyXG4gICAgICAkJC5yZWRyYXdXaXRob3V0UmVzY2FsZSgpO1xyXG4gICAgICByZXR1cm4gY29uZmlnLmdyaWRfeF9saW5lcztcclxuICB9O1xyXG4gIENoYXJ0LnByb3RvdHlwZS54Z3JpZHMuYWRkID0gZnVuY3Rpb24gKGdyaWRzKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXMuaW50ZXJuYWw7XHJcbiAgICAgIHJldHVybiB0aGlzLnhncmlkcygkJC5jb25maWcuZ3JpZF94X2xpbmVzLmNvbmNhdChncmlkcyA/IGdyaWRzIDogW10pKTtcclxuICB9O1xyXG4gIENoYXJ0LnByb3RvdHlwZS54Z3JpZHMucmVtb3ZlID0gZnVuY3Rpb24gKHBhcmFtcykge1xyXG4gICAgICAvLyBUT0RPOiBtdWx0aXBsZVxyXG4gICAgICB2YXIgJCQgPSB0aGlzLmludGVybmFsO1xyXG4gICAgICAkJC5yZW1vdmVHcmlkTGluZXMocGFyYW1zLCB0cnVlKTtcclxuICB9O1xyXG4gIENoYXJ0LnByb3RvdHlwZS55Z3JpZHMgPSBmdW5jdGlvbiAoZ3JpZHMpIHtcclxuICAgICAgdmFyICQkID0gdGhpcy5pbnRlcm5hbCwgY29uZmlnID0gJCQuY29uZmlnO1xyXG4gICAgICBpZiAoIWdyaWRzKSB7XHJcbiAgICAgICAgICByZXR1cm4gY29uZmlnLmdyaWRfeV9saW5lcztcclxuICAgICAgfVxyXG4gICAgICBjb25maWcuZ3JpZF95X2xpbmVzID0gZ3JpZHM7XHJcbiAgICAgICQkLnJlZHJhd1dpdGhvdXRSZXNjYWxlKCk7XHJcbiAgICAgIHJldHVybiBjb25maWcuZ3JpZF95X2xpbmVzO1xyXG4gIH07XHJcbiAgQ2hhcnQucHJvdG90eXBlLnlncmlkcy5hZGQgPSBmdW5jdGlvbiAoZ3JpZHMpIHtcclxuICAgICAgdmFyICQkID0gdGhpcy5pbnRlcm5hbDtcclxuICAgICAgcmV0dXJuIHRoaXMueWdyaWRzKCQkLmNvbmZpZy5ncmlkX3lfbGluZXMuY29uY2F0KGdyaWRzID8gZ3JpZHMgOiBbXSkpO1xyXG4gIH07XHJcbiAgQ2hhcnQucHJvdG90eXBlLnlncmlkcy5yZW1vdmUgPSBmdW5jdGlvbiAocGFyYW1zKSB7XHJcbiAgICAgIC8vIFRPRE86IG11bHRpcGxlXHJcbiAgICAgIHZhciAkJCA9IHRoaXMuaW50ZXJuYWw7XHJcbiAgICAgICQkLnJlbW92ZUdyaWRMaW5lcyhwYXJhbXMsIGZhbHNlKTtcclxuICB9O1xuXG4gIENoYXJ0LnByb3RvdHlwZS5ncm91cHMgPSBmdW5jdGlvbiAoZ3JvdXBzKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXMuaW50ZXJuYWwsIGNvbmZpZyA9ICQkLmNvbmZpZztcclxuICAgICAgaWYgKGlzVW5kZWZpbmVkKGdyb3VwcykpIHtcclxuICAgICAgICAgIHJldHVybiBjb25maWcuZGF0YV9ncm91cHM7XHJcbiAgICAgIH1cclxuICAgICAgY29uZmlnLmRhdGFfZ3JvdXBzID0gZ3JvdXBzO1xyXG4gICAgICAkJC5yZWRyYXcoKTtcclxuICAgICAgcmV0dXJuIGNvbmZpZy5kYXRhX2dyb3VwcztcclxuICB9O1xuXG4gIENoYXJ0LnByb3RvdHlwZS5sZWdlbmQgPSBmdW5jdGlvbiAoKSB7IH07XHJcbiAgQ2hhcnQucHJvdG90eXBlLmxlZ2VuZC5zaG93ID0gZnVuY3Rpb24gKHRhcmdldElkcykge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzLmludGVybmFsO1xyXG4gICAgICAkJC5zaG93TGVnZW5kKCQkLm1hcFRvVGFyZ2V0SWRzKHRhcmdldElkcykpO1xyXG4gICAgICAkJC51cGRhdGVBbmRSZWRyYXcoeyB3aXRoTGVnZW5kOiB0cnVlIH0pO1xyXG4gIH07XHJcbiAgQ2hhcnQucHJvdG90eXBlLmxlZ2VuZC5oaWRlID0gZnVuY3Rpb24gKHRhcmdldElkcykge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzLmludGVybmFsO1xyXG4gICAgICAkJC5oaWRlTGVnZW5kKCQkLm1hcFRvVGFyZ2V0SWRzKHRhcmdldElkcykpO1xyXG4gICAgICAkJC51cGRhdGVBbmRSZWRyYXcoeyB3aXRoTGVnZW5kOiBmYWxzZSB9KTtcclxuICB9O1xuXG4gIENoYXJ0LnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24gKGFyZ3MpIHtcclxuICAgICAgdmFyICQkID0gdGhpcy5pbnRlcm5hbCwgY29uZmlnID0gJCQuY29uZmlnO1xyXG4gICAgICAvLyB1cGRhdGUgeHMgaWYgc3BlY2lmaWVkXHJcbiAgICAgIGlmIChhcmdzLnhzKSB7XHJcbiAgICAgICAgICAkJC5hZGRYcyhhcmdzLnhzKTtcclxuICAgICAgfVxyXG4gICAgICAvLyB1cGRhdGUgbmFtZXMgaWYgZXhpc3RzXHJcbiAgICAgIGlmICgnbmFtZXMnIGluIGFyZ3MpIHtcclxuICAgICAgICAgIENoYXJ0LnByb3RvdHlwZS5kYXRhLm5hbWVzLmJpbmQodGhpcykoYXJncy5uYW1lcyk7XHJcbiAgICAgIH1cclxuICAgICAgLy8gdXBkYXRlIGNsYXNzZXMgaWYgZXhpc3RzXHJcbiAgICAgIGlmICgnY2xhc3NlcycgaW4gYXJncykge1xyXG4gICAgICAgICAgT2JqZWN0LmtleXMoYXJncy5jbGFzc2VzKS5mb3JFYWNoKGZ1bmN0aW9uIChpZCkge1xyXG4gICAgICAgICAgICAgIGNvbmZpZy5kYXRhX2NsYXNzZXNbaWRdID0gYXJncy5jbGFzc2VzW2lkXTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIHVwZGF0ZSBjYXRlZ29yaWVzIGlmIGV4aXN0c1xyXG4gICAgICBpZiAoJ2NhdGVnb3JpZXMnIGluIGFyZ3MgJiYgJCQuaXNDYXRlZ29yaXplZCgpKSB7XHJcbiAgICAgICAgICBjb25maWcuYXhpc194X2NhdGVnb3JpZXMgPSBhcmdzLmNhdGVnb3JpZXM7XHJcbiAgICAgIH1cclxuICAgICAgLy8gdXBkYXRlIGF4ZXMgaWYgZXhpc3RzXHJcbiAgICAgIGlmICgnYXhlcycgaW4gYXJncykge1xyXG4gICAgICAgICAgT2JqZWN0LmtleXMoYXJncy5heGVzKS5mb3JFYWNoKGZ1bmN0aW9uIChpZCkge1xyXG4gICAgICAgICAgICAgIGNvbmZpZy5kYXRhX2F4ZXNbaWRdID0gYXJncy5heGVzW2lkXTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIHVwZGF0ZSBjb2xvcnMgaWYgZXhpc3RzXHJcbiAgICAgIGlmICgnY29sb3JzJyBpbiBhcmdzKSB7XHJcbiAgICAgICAgICBPYmplY3Qua2V5cyhhcmdzLmNvbG9ycykuZm9yRWFjaChmdW5jdGlvbiAoaWQpIHtcclxuICAgICAgICAgICAgICBjb25maWcuZGF0YV9jb2xvcnNbaWRdID0gYXJncy5jb2xvcnNbaWRdO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgLy8gdXNlIGNhY2hlIGlmIGV4aXN0c1xyXG4gICAgICBpZiAoJ2NhY2hlSWRzJyBpbiBhcmdzICYmICQkLmhhc0NhY2hlcyhhcmdzLmNhY2hlSWRzKSkge1xyXG4gICAgICAgICAgJCQubG9hZCgkJC5nZXRDYWNoZXMoYXJncy5jYWNoZUlkcyksIGFyZ3MuZG9uZSk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgLy8gdW5sb2FkIGlmIG5lZWRlZFxyXG4gICAgICBpZiAoYXJncy51bmxvYWQpIHtcclxuICAgICAgICAgIC8vIFRPRE86IGRvIG5vdCB1bmxvYWQgaWYgdGFyZ2V0IHdpbGwgbG9hZCAoaW5jbHVkZWQgaW4gdXJsL3Jvd3MvY29sdW1ucylcclxuICAgICAgICAgICQkLnVubG9hZCgkJC5tYXBUb1RhcmdldElkcyhhcmdzLnVubG9hZCA9PT0gdHJ1ZSA/IG51bGwgOiBhcmdzLnVubG9hZCksIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAkJC5sb2FkRnJvbUFyZ3MoYXJncyk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICAgICQkLmxvYWRGcm9tQXJncyhhcmdzKTtcclxuICAgICAgfVxyXG4gIH07XHJcbiAgQ2hhcnQucHJvdG90eXBlLnVubG9hZCA9IGZ1bmN0aW9uIChhcmdzKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXMuaW50ZXJuYWw7XHJcbiAgICAgIGFyZ3MgPSBhcmdzIHx8IHt9O1xyXG4gICAgICBpZiAoYXJncyBpbnN0YW5jZW9mIEFycmF5KSB7XHJcbiAgICAgICAgICBhcmdzID0geyBpZHM6IGFyZ3MgfTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0eXBlb2YgYXJncyA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgIGFyZ3MgPSB7IGlkczogW2FyZ3NdIH07XHJcbiAgICAgIH1cclxuICAgICAgJCQudW5sb2FkKCQkLm1hcFRvVGFyZ2V0SWRzKGFyZ3MuaWRzKSwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgJCQucmVkcmF3KHtcclxuICAgICAgICAgICAgICB3aXRoVXBkYXRlT3JnWERvbWFpbjogdHJ1ZSxcclxuICAgICAgICAgICAgICB3aXRoVXBkYXRlWERvbWFpbjogdHJ1ZSxcclxuICAgICAgICAgICAgICB3aXRoTGVnZW5kOiB0cnVlXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIGlmIChhcmdzLmRvbmUpIHtcclxuICAgICAgICAgICAgICBhcmdzLmRvbmUoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfTtcblxuICBDaGFydC5wcm90b3R5cGUucGllID0gZnVuY3Rpb24gKCkgeyB9O1xyXG4gIENoYXJ0LnByb3RvdHlwZS5waWUucGFkQW5nbGUgPSBmdW5jdGlvbiAocGFkQW5nbGUpIHtcclxuICAgICAgaWYgKHBhZEFuZ2xlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmludGVybmFsLmNvbmZpZy5waWVfcGFkQW5nbGU7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5pbnRlcm5hbC5jb25maWcucGllX3BhZEFuZ2xlID0gcGFkQW5nbGU7XHJcbiAgICAgIHRoaXMuZmx1c2goKTtcclxuICB9O1xuXG4gIENoYXJ0LnByb3RvdHlwZS5yZWdpb25zID0gZnVuY3Rpb24gKHJlZ2lvbnMpIHtcclxuICAgICAgdmFyICQkID0gdGhpcy5pbnRlcm5hbCwgY29uZmlnID0gJCQuY29uZmlnO1xyXG4gICAgICBpZiAoIXJlZ2lvbnMpIHtcclxuICAgICAgICAgIHJldHVybiBjb25maWcucmVnaW9ucztcclxuICAgICAgfVxyXG4gICAgICBjb25maWcucmVnaW9ucyA9IHJlZ2lvbnM7XHJcbiAgICAgICQkLnJlZHJhd1dpdGhvdXRSZXNjYWxlKCk7XHJcbiAgICAgIHJldHVybiBjb25maWcucmVnaW9ucztcclxuICB9O1xyXG4gIENoYXJ0LnByb3RvdHlwZS5yZWdpb25zLmFkZCA9IGZ1bmN0aW9uIChyZWdpb25zKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXMuaW50ZXJuYWwsIGNvbmZpZyA9ICQkLmNvbmZpZztcclxuICAgICAgaWYgKCFyZWdpb25zKSB7XHJcbiAgICAgICAgICByZXR1cm4gY29uZmlnLnJlZ2lvbnM7XHJcbiAgICAgIH1cclxuICAgICAgY29uZmlnLnJlZ2lvbnMgPSBjb25maWcucmVnaW9ucy5jb25jYXQocmVnaW9ucyk7XHJcbiAgICAgICQkLnJlZHJhd1dpdGhvdXRSZXNjYWxlKCk7XHJcbiAgICAgIHJldHVybiBjb25maWcucmVnaW9ucztcclxuICB9O1xyXG4gIENoYXJ0LnByb3RvdHlwZS5yZWdpb25zLnJlbW92ZSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXMuaW50ZXJuYWwsIGNvbmZpZyA9ICQkLmNvbmZpZywgZHVyYXRpb24sIGNsYXNzZXMsIHJlZ2lvbnM7XHJcbiAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xyXG4gICAgICBkdXJhdGlvbiA9IGdldE9wdGlvbihvcHRpb25zLCAnZHVyYXRpb24nLCBjb25maWcudHJhbnNpdGlvbl9kdXJhdGlvbik7XHJcbiAgICAgIGNsYXNzZXMgPSBnZXRPcHRpb24ob3B0aW9ucywgJ2NsYXNzZXMnLCBbQ0xBU1MucmVnaW9uXSk7XHJcbiAgICAgIHJlZ2lvbnMgPSAkJC5tYWluLnNlbGVjdCgnLicgKyBDTEFTUy5yZWdpb25zKS5zZWxlY3RBbGwoY2xhc3Nlcy5tYXAoZnVuY3Rpb24gKGMpIHtcclxuICAgICAgICAgIHJldHVybiAnLicgKyBjO1xyXG4gICAgICB9KSk7XHJcbiAgICAgIChkdXJhdGlvbiA/IHJlZ2lvbnMudHJhbnNpdGlvbigpLmR1cmF0aW9uKGR1cmF0aW9uKSA6IHJlZ2lvbnMpXHJcbiAgICAgICAgICAuc3R5bGUoJ29wYWNpdHknLCAwKVxyXG4gICAgICAgICAgLnJlbW92ZSgpO1xyXG4gICAgICBjb25maWcucmVnaW9ucyA9IGNvbmZpZy5yZWdpb25zLmZpbHRlcihmdW5jdGlvbiAocmVnaW9uKSB7XHJcbiAgICAgICAgICB2YXIgZm91bmQgPSBmYWxzZTtcclxuICAgICAgICAgIGlmICghcmVnaW9uWydjbGFzcyddKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZWdpb25bJ2NsYXNzJ10uc3BsaXQoJyAnKS5mb3JFYWNoKGZ1bmN0aW9uIChjKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGNsYXNzZXMuaW5kZXhPZihjKSA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHJldHVybiAhZm91bmQ7XHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gY29uZmlnLnJlZ2lvbnM7XHJcbiAgfTtcblxuICBDaGFydC5wcm90b3R5cGUuc2VsZWN0ZWQgPSBmdW5jdGlvbiAodGFyZ2V0SWQpIHtcclxuICAgICAgdmFyICQkID0gdGhpcy5pbnRlcm5hbCwgZDMgPSAkJC5kMztcclxuICAgICAgcmV0dXJuICQkLm1haW5cclxuICAgICAgICAgIC5zZWxlY3RBbGwoJy4nICsgQ0xBU1Muc2hhcGVzICsgJCQuZ2V0VGFyZ2V0U2VsZWN0b3JTdWZmaXgodGFyZ2V0SWQpKVxyXG4gICAgICAgICAgLnNlbGVjdEFsbCgnLicgKyBDTEFTUy5zaGFwZSlcclxuICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgcmV0dXJuIGQzLnNlbGVjdCh0aGlzKS5jbGFzc2VkKENMQVNTLlNFTEVDVEVEKTtcclxuICAgICAgfSlcclxuICAgICAgICAgIC5ub2RlcygpXHJcbiAgICAgICAgICAubWFwKGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICB2YXIgZGF0YSA9IGQuX19kYXRhX187XHJcbiAgICAgICAgICByZXR1cm4gZGF0YS5kYXRhID8gZGF0YS5kYXRhIDogZGF0YTtcclxuICAgICAgfSk7XHJcbiAgfTtcclxuICBDaGFydC5wcm90b3R5cGUuc2VsZWN0ID0gZnVuY3Rpb24gKGlkcywgaW5kaWNlcywgcmVzZXRPdGhlcikge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzLmludGVybmFsLCBkMyA9ICQkLmQzLCBjb25maWcgPSAkJC5jb25maWc7XHJcbiAgICAgIGlmICghY29uZmlnLmRhdGFfc2VsZWN0aW9uX2VuYWJsZWQpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICAkJC5tYWluXHJcbiAgICAgICAgICAuc2VsZWN0QWxsKCcuJyArIENMQVNTLnNoYXBlcylcclxuICAgICAgICAgIC5zZWxlY3RBbGwoJy4nICsgQ0xBU1Muc2hhcGUpXHJcbiAgICAgICAgICAuZWFjaChmdW5jdGlvbiAoZCwgaSkge1xyXG4gICAgICAgICAgdmFyIHNoYXBlID0gZDMuc2VsZWN0KHRoaXMpLCBpZCA9IGQuZGF0YSA/IGQuZGF0YS5pZCA6IGQuaWQsIHRvZ2dsZSA9ICQkLmdldFRvZ2dsZSh0aGlzLCBkKS5iaW5kKCQkKSwgaXNUYXJnZXRJZCA9IGNvbmZpZy5kYXRhX3NlbGVjdGlvbl9ncm91cGVkIHx8ICFpZHMgfHwgaWRzLmluZGV4T2YoaWQpID49IDAsIGlzVGFyZ2V0SW5kZXggPSAhaW5kaWNlcyB8fCBpbmRpY2VzLmluZGV4T2YoaSkgPj0gMCwgaXNTZWxlY3RlZCA9IHNoYXBlLmNsYXNzZWQoQ0xBU1MuU0VMRUNURUQpO1xyXG4gICAgICAgICAgLy8gbGluZS9hcmVhIHNlbGVjdGlvbiBub3Qgc3VwcG9ydGVkIHlldFxyXG4gICAgICAgICAgaWYgKHNoYXBlLmNsYXNzZWQoQ0xBU1MubGluZSkgfHwgc2hhcGUuY2xhc3NlZChDTEFTUy5hcmVhKSkge1xyXG4gICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChpc1RhcmdldElkICYmIGlzVGFyZ2V0SW5kZXgpIHtcclxuICAgICAgICAgICAgICBpZiAoY29uZmlnLmRhdGFfc2VsZWN0aW9uX2lzc2VsZWN0YWJsZShkKSAmJiAhaXNTZWxlY3RlZCkge1xyXG4gICAgICAgICAgICAgICAgICB0b2dnbGUodHJ1ZSwgc2hhcGUuY2xhc3NlZChDTEFTUy5TRUxFQ1RFRCwgdHJ1ZSksIGQsIGkpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2UgaWYgKGlzRGVmaW5lZChyZXNldE90aGVyKSAmJiByZXNldE90aGVyKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGlzU2VsZWN0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgdG9nZ2xlKGZhbHNlLCBzaGFwZS5jbGFzc2VkKENMQVNTLlNFTEVDVEVELCBmYWxzZSksIGQsIGkpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfTtcclxuICBDaGFydC5wcm90b3R5cGUudW5zZWxlY3QgPSBmdW5jdGlvbiAoaWRzLCBpbmRpY2VzKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXMuaW50ZXJuYWwsIGQzID0gJCQuZDMsIGNvbmZpZyA9ICQkLmNvbmZpZztcclxuICAgICAgaWYgKCFjb25maWcuZGF0YV9zZWxlY3Rpb25fZW5hYmxlZCkge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgICQkLm1haW5cclxuICAgICAgICAgIC5zZWxlY3RBbGwoJy4nICsgQ0xBU1Muc2hhcGVzKVxyXG4gICAgICAgICAgLnNlbGVjdEFsbCgnLicgKyBDTEFTUy5zaGFwZSlcclxuICAgICAgICAgIC5lYWNoKGZ1bmN0aW9uIChkLCBpKSB7XHJcbiAgICAgICAgICB2YXIgc2hhcGUgPSBkMy5zZWxlY3QodGhpcyksIGlkID0gZC5kYXRhID8gZC5kYXRhLmlkIDogZC5pZCwgdG9nZ2xlID0gJCQuZ2V0VG9nZ2xlKHRoaXMsIGQpLmJpbmQoJCQpLCBpc1RhcmdldElkID0gY29uZmlnLmRhdGFfc2VsZWN0aW9uX2dyb3VwZWQgfHwgIWlkcyB8fCBpZHMuaW5kZXhPZihpZCkgPj0gMCwgaXNUYXJnZXRJbmRleCA9ICFpbmRpY2VzIHx8IGluZGljZXMuaW5kZXhPZihpKSA+PSAwLCBpc1NlbGVjdGVkID0gc2hhcGUuY2xhc3NlZChDTEFTUy5TRUxFQ1RFRCk7XHJcbiAgICAgICAgICAvLyBsaW5lL2FyZWEgc2VsZWN0aW9uIG5vdCBzdXBwb3J0ZWQgeWV0XHJcbiAgICAgICAgICBpZiAoc2hhcGUuY2xhc3NlZChDTEFTUy5saW5lKSB8fCBzaGFwZS5jbGFzc2VkKENMQVNTLmFyZWEpKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGlzVGFyZ2V0SWQgJiYgaXNUYXJnZXRJbmRleCkge1xyXG4gICAgICAgICAgICAgIGlmIChjb25maWcuZGF0YV9zZWxlY3Rpb25faXNzZWxlY3RhYmxlKGQpKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChpc1NlbGVjdGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0b2dnbGUoZmFsc2UsIHNoYXBlLmNsYXNzZWQoQ0xBU1MuU0VMRUNURUQsIGZhbHNlKSwgZCwgaSk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH07XG5cbiAgQ2hhcnQucHJvdG90eXBlLnNob3cgPSBmdW5jdGlvbiAodGFyZ2V0SWRzLCBvcHRpb25zKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXMuaW50ZXJuYWwsIHRhcmdldHM7XHJcbiAgICAgIHRhcmdldElkcyA9ICQkLm1hcFRvVGFyZ2V0SWRzKHRhcmdldElkcyk7XHJcbiAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xyXG4gICAgICAkJC5yZW1vdmVIaWRkZW5UYXJnZXRJZHModGFyZ2V0SWRzKTtcclxuICAgICAgdGFyZ2V0cyA9ICQkLnN2Zy5zZWxlY3RBbGwoJCQuc2VsZWN0b3JUYXJnZXRzKHRhcmdldElkcykpO1xyXG4gICAgICB0YXJnZXRzXHJcbiAgICAgICAgICAudHJhbnNpdGlvbigpXHJcbiAgICAgICAgICAuc3R5bGUoJ2Rpc3BsYXknLCBpc0lFKCkgPyAnYmxvY2snIDogJ2luaXRpYWwnLCAnaW1wb3J0YW50JylcclxuICAgICAgICAgIC5zdHlsZSgnb3BhY2l0eScsIDEsICdpbXBvcnRhbnQnKVxyXG4gICAgICAgICAgLmNhbGwoJCQuZW5kYWxsLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICB0YXJnZXRzLnN0eWxlKCdvcGFjaXR5JywgbnVsbCkuc3R5bGUoJ29wYWNpdHknLCAxKTtcclxuICAgICAgfSk7XHJcbiAgICAgIGlmIChvcHRpb25zLndpdGhMZWdlbmQpIHtcclxuICAgICAgICAgICQkLnNob3dMZWdlbmQodGFyZ2V0SWRzKTtcclxuICAgICAgfVxyXG4gICAgICAkJC5yZWRyYXcoe1xyXG4gICAgICAgICAgd2l0aFVwZGF0ZU9yZ1hEb21haW46IHRydWUsXHJcbiAgICAgICAgICB3aXRoVXBkYXRlWERvbWFpbjogdHJ1ZSxcclxuICAgICAgICAgIHdpdGhMZWdlbmQ6IHRydWVcclxuICAgICAgfSk7XHJcbiAgfTtcclxuICBDaGFydC5wcm90b3R5cGUuaGlkZSA9IGZ1bmN0aW9uICh0YXJnZXRJZHMsIG9wdGlvbnMpIHtcclxuICAgICAgdmFyICQkID0gdGhpcy5pbnRlcm5hbCwgdGFyZ2V0cztcclxuICAgICAgdGFyZ2V0SWRzID0gJCQubWFwVG9UYXJnZXRJZHModGFyZ2V0SWRzKTtcclxuICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XHJcbiAgICAgICQkLmFkZEhpZGRlblRhcmdldElkcyh0YXJnZXRJZHMpO1xyXG4gICAgICB0YXJnZXRzID0gJCQuc3ZnLnNlbGVjdEFsbCgkJC5zZWxlY3RvclRhcmdldHModGFyZ2V0SWRzKSk7XHJcbiAgICAgIHRhcmdldHNcclxuICAgICAgICAgIC50cmFuc2l0aW9uKClcclxuICAgICAgICAgIC5zdHlsZSgnb3BhY2l0eScsIDAsICdpbXBvcnRhbnQnKVxyXG4gICAgICAgICAgLmNhbGwoJCQuZW5kYWxsLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICB0YXJnZXRzLnN0eWxlKCdvcGFjaXR5JywgbnVsbCkuc3R5bGUoJ29wYWNpdHknLCAwKTtcclxuICAgICAgICAgIHRhcmdldHMuc3R5bGUoJ2Rpc3BsYXknLCAnbm9uZScpO1xyXG4gICAgICB9KTtcclxuICAgICAgaWYgKG9wdGlvbnMud2l0aExlZ2VuZCkge1xyXG4gICAgICAgICAgJCQuaGlkZUxlZ2VuZCh0YXJnZXRJZHMpO1xyXG4gICAgICB9XHJcbiAgICAgICQkLnJlZHJhdyh7XHJcbiAgICAgICAgICB3aXRoVXBkYXRlT3JnWERvbWFpbjogdHJ1ZSxcclxuICAgICAgICAgIHdpdGhVcGRhdGVYRG9tYWluOiB0cnVlLFxyXG4gICAgICAgICAgd2l0aExlZ2VuZDogdHJ1ZVxyXG4gICAgICB9KTtcclxuICB9O1xyXG4gIENoYXJ0LnByb3RvdHlwZS50b2dnbGUgPSBmdW5jdGlvbiAodGFyZ2V0SWRzLCBvcHRpb25zKSB7XHJcbiAgICAgIHZhciB0aGF0ID0gdGhpcywgJCQgPSB0aGlzLmludGVybmFsO1xyXG4gICAgICAkJC5tYXBUb1RhcmdldElkcyh0YXJnZXRJZHMpLmZvckVhY2goZnVuY3Rpb24gKHRhcmdldElkKSB7XHJcbiAgICAgICAgICAkJC5pc1RhcmdldFRvU2hvdyh0YXJnZXRJZClcclxuICAgICAgICAgICAgICA/IHRoYXQuaGlkZSh0YXJnZXRJZCwgb3B0aW9ucylcclxuICAgICAgICAgICAgICA6IHRoYXQuc2hvdyh0YXJnZXRJZCwgb3B0aW9ucyk7XHJcbiAgICAgIH0pO1xyXG4gIH07XG5cbiAgQ2hhcnQucHJvdG90eXBlLnN1YmNoYXJ0ID0gZnVuY3Rpb24gKCkgeyB9O1xyXG4gIENoYXJ0LnByb3RvdHlwZS5zdWJjaGFydC5pc1Nob3duID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzLmludGVybmFsO1xyXG4gICAgICByZXR1cm4gJCQuY29uZmlnLnN1YmNoYXJ0X3Nob3c7XHJcbiAgfTtcclxuICBDaGFydC5wcm90b3R5cGUuc3ViY2hhcnQuc2hvdyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgdmFyICQkID0gdGhpcy5pbnRlcm5hbDtcclxuICAgICAgaWYgKCQkLmNvbmZpZy5zdWJjaGFydF9zaG93KSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgJCQuY29uZmlnLnN1YmNoYXJ0X3Nob3cgPSB0cnVlO1xyXG4gICAgICAvLyBpbnNlcnQgRE9NXHJcbiAgICAgICQkLmluaXRTdWJjaGFydCgpO1xyXG4gICAgICAvLyB1cGRhdGUgZGltZW5zaW9ucyB3aXRoIHN1YiBjaGFydCBub3cgdmlzaWJsZVxyXG4gICAgICAkJC51cGRhdGVEaW1lbnNpb24oKTtcclxuICAgICAgLy8gaW5zZXJ0IGJydXNoIChkZXBlbmRzIG9uIHNpemVzIHByZXZpb3VzbHkgdXBkYXRlZClcclxuICAgICAgJCQuaW5pdFN1YmNoYXJ0QnJ1c2goKTtcclxuICAgICAgLy8gYXR0YWNoIGRhdGFcclxuICAgICAgJCQudXBkYXRlVGFyZ2V0c0ZvclN1YmNoYXJ0KCQkLmdldFRhcmdldHMoKSk7XHJcbiAgICAgIC8vIHJlc2V0IGZhZGUtaW4gc3RhdGVcclxuICAgICAgJCQubWFwVG9JZHMoJCQuZGF0YS50YXJnZXRzKS5mb3JFYWNoKGZ1bmN0aW9uIChpZCkge1xyXG4gICAgICAgICAgJCQud2l0aG91dEZhZGVJbltpZF0gPSBmYWxzZTtcclxuICAgICAgfSk7XHJcbiAgICAgIC8vIHJlZHJhdyBjaGFydCAhXHJcbiAgICAgICQkLnVwZGF0ZUFuZFJlZHJhdygpO1xyXG4gICAgICAvLyB1cGRhdGUgdmlzaWJsZSB0YXJnZXRzICFcclxuICAgICAgJCQuc2hvd1RhcmdldHMoKTtcclxuICB9O1xyXG4gIENoYXJ0LnByb3RvdHlwZS5zdWJjaGFydC5oaWRlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzLmludGVybmFsO1xyXG4gICAgICBpZiAoISQkLmNvbmZpZy5zdWJjaGFydF9zaG93KSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgJCQuY29uZmlnLnN1YmNoYXJ0X3Nob3cgPSBmYWxzZTtcclxuICAgICAgLy8gcmVtb3ZlIERPTVxyXG4gICAgICAkJC5yZW1vdmVTdWJjaGFydCgpO1xyXG4gICAgICAvLyByZS1yZW5kZXIgY2hhcnRcclxuICAgICAgJCQucmVkcmF3KCk7XHJcbiAgfTtcblxuICBDaGFydC5wcm90b3R5cGUudG9vbHRpcCA9IGZ1bmN0aW9uICgpIHsgfTtcclxuICBDaGFydC5wcm90b3R5cGUudG9vbHRpcC5zaG93ID0gZnVuY3Rpb24gKGFyZ3MpIHtcclxuICAgICAgdmFyICQkID0gdGhpcy5pbnRlcm5hbCwgdGFyZ2V0cywgZGF0YSwgbW91c2UgPSB7fTtcclxuICAgICAgLy8gZGV0ZXJtaW5lIG1vdXNlIHBvc2l0aW9uIG9uIHRoZSBjaGFydFxyXG4gICAgICBpZiAoYXJncy5tb3VzZSkge1xyXG4gICAgICAgICAgbW91c2UgPSBhcmdzLm1vdXNlO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgLy8gZGV0ZXJtaW5lIGZvY3VzIGRhdGFcclxuICAgICAgICAgIGlmIChhcmdzLmRhdGEpIHtcclxuICAgICAgICAgICAgICBkYXRhID0gYXJncy5kYXRhO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSBpZiAodHlwZW9mIGFyZ3MueCAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgICBpZiAoYXJncy5pZCkge1xyXG4gICAgICAgICAgICAgICAgICB0YXJnZXRzID0gJCQuZGF0YS50YXJnZXRzLmZpbHRlcihmdW5jdGlvbiAodCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHQuaWQgPT09IGFyZ3MuaWQ7XHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgdGFyZ2V0cyA9ICQkLmRhdGEudGFyZ2V0cztcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZGF0YSA9ICQkLmZpbHRlckJ5WCh0YXJnZXRzLCBhcmdzLngpLnNsaWNlKDAsIDEpWzBdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgbW91c2UgPSBkYXRhID8gJCQuZ2V0TW91c2VQb3NpdGlvbihkYXRhKSA6IG51bGw7XHJcbiAgICAgIH1cclxuICAgICAgLy8gZW11bGF0ZSBtb3VzZSBldmVudHMgdG8gc2hvd1xyXG4gICAgICAkJC5kaXNwYXRjaEV2ZW50KCdtb3VzZW1vdmUnLCBtb3VzZSk7XHJcbiAgICAgICQkLmNvbmZpZy50b29sdGlwX29uc2hvdy5jYWxsKCQkLCBkYXRhKTtcclxuICB9O1xyXG4gIENoYXJ0LnByb3RvdHlwZS50b29sdGlwLmhpZGUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIC8vIFRPRE86IGdldCB0YXJnZXQgZGF0YSBieSBjaGVja2luZyB0aGUgc3RhdGUgb2YgZm9jdXNcclxuICAgICAgdGhpcy5pbnRlcm5hbC5kaXNwYXRjaEV2ZW50KCdtb3VzZW91dCcsIDApO1xyXG4gICAgICB0aGlzLmludGVybmFsLmNvbmZpZy50b29sdGlwX29uaGlkZS5jYWxsKHRoaXMpO1xyXG4gIH07XG5cbiAgQ2hhcnQucHJvdG90eXBlLnRyYW5zZm9ybSA9IGZ1bmN0aW9uICh0eXBlLCB0YXJnZXRJZHMpIHtcclxuICAgICAgdmFyICQkID0gdGhpcy5pbnRlcm5hbCwgb3B0aW9ucyA9IFsncGllJywgJ2RvbnV0J10uaW5kZXhPZih0eXBlKSA+PSAwID8geyB3aXRoVHJhbnNmb3JtOiB0cnVlIH0gOiBudWxsO1xyXG4gICAgICAkJC50cmFuc2Zvcm1Ubyh0YXJnZXRJZHMsIHR5cGUsIG9wdGlvbnMpO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUudHJhbnNmb3JtVG8gPSBmdW5jdGlvbiAodGFyZ2V0SWRzLCB0eXBlLCBvcHRpb25zRm9yUmVkcmF3KSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXMsIHdpdGhUcmFuc2l0aW9uRm9yQXhpcyA9ICEkJC5oYXNBcmNUeXBlKCksIG9wdGlvbnMgPSBvcHRpb25zRm9yUmVkcmF3IHx8IHtcclxuICAgICAgICAgIHdpdGhUcmFuc2l0aW9uRm9yQXhpczogd2l0aFRyYW5zaXRpb25Gb3JBeGlzXHJcbiAgICAgIH07XHJcbiAgICAgIG9wdGlvbnMud2l0aFRyYW5zaXRpb25Gb3JUcmFuc2Zvcm0gPSBmYWxzZTtcclxuICAgICAgJCQudHJhbnNpdGluZyA9IGZhbHNlO1xyXG4gICAgICAkJC5zZXRUYXJnZXRUeXBlKHRhcmdldElkcywgdHlwZSk7XHJcbiAgICAgICQkLnVwZGF0ZVRhcmdldHMoJCQuZGF0YS50YXJnZXRzKTsgLy8gdGhpcyBpcyBuZWVkZWQgd2hlbiB0cmFuc2Zvcm1pbmcgdG8gYXJjXHJcbiAgICAgICQkLnVwZGF0ZUFuZFJlZHJhdyhvcHRpb25zKTtcclxuICB9O1xuXG4gIENoYXJ0LnByb3RvdHlwZS54ID0gZnVuY3Rpb24gKHgpIHtcclxuICAgICAgdmFyICQkID0gdGhpcy5pbnRlcm5hbDtcclxuICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGgpIHtcclxuICAgICAgICAgICQkLnVwZGF0ZVRhcmdldFgoJCQuZGF0YS50YXJnZXRzLCB4KTtcclxuICAgICAgICAgICQkLnJlZHJhdyh7IHdpdGhVcGRhdGVPcmdYRG9tYWluOiB0cnVlLCB3aXRoVXBkYXRlWERvbWFpbjogdHJ1ZSB9KTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gJCQuZGF0YS54cztcclxuICB9O1xyXG4gIENoYXJ0LnByb3RvdHlwZS54cyA9IGZ1bmN0aW9uICh4cykge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzLmludGVybmFsO1xyXG4gICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgJCQudXBkYXRlVGFyZ2V0WHMoJCQuZGF0YS50YXJnZXRzLCB4cyk7XHJcbiAgICAgICAgICAkJC5yZWRyYXcoeyB3aXRoVXBkYXRlT3JnWERvbWFpbjogdHJ1ZSwgd2l0aFVwZGF0ZVhEb21haW46IHRydWUgfSk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuICQkLmRhdGEueHM7XHJcbiAgfTtcblxuICBDaGFydC5wcm90b3R5cGUuem9vbSA9IGZ1bmN0aW9uIChkb21haW4pIHtcclxuICAgICAgdmFyICQkID0gdGhpcy5pbnRlcm5hbDtcclxuICAgICAgaWYgKGRvbWFpbikge1xyXG4gICAgICAgICAgaWYgKCQkLmlzVGltZVNlcmllcygpKSB7XHJcbiAgICAgICAgICAgICAgZG9tYWluID0gZG9tYWluLm1hcChmdW5jdGlvbiAoeCkge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gJCQucGFyc2VEYXRlKHgpO1xyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKCQkLmNvbmZpZy5zdWJjaGFydF9zaG93KSB7XHJcbiAgICAgICAgICAgICAgJCQuYnJ1c2guc2VsZWN0aW9uQXNWYWx1ZShkb21haW4sIHRydWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgJCQudXBkYXRlWERvbWFpbihudWxsLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGRvbWFpbik7XHJcbiAgICAgICAgICAgICAgJCQucmVkcmF3KHsgd2l0aFk6ICQkLmNvbmZpZy56b29tX3Jlc2NhbGUsIHdpdGhTdWJjaGFydDogZmFsc2UgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAkJC5jb25maWcuem9vbV9vbnpvb20uY2FsbCh0aGlzLCAkJC54Lm9yZ0RvbWFpbigpKTtcclxuICAgICAgICAgIHJldHVybiBkb21haW47XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgICByZXR1cm4gJCQueC5kb21haW4oKTtcclxuICAgICAgfVxyXG4gIH07XHJcbiAgQ2hhcnQucHJvdG90eXBlLnpvb20uZW5hYmxlID0gZnVuY3Rpb24gKGVuYWJsZWQpIHtcclxuICAgICAgdmFyICQkID0gdGhpcy5pbnRlcm5hbDtcclxuICAgICAgJCQuY29uZmlnLnpvb21fZW5hYmxlZCA9IGVuYWJsZWQ7XHJcbiAgICAgICQkLnVwZGF0ZUFuZFJlZHJhdygpO1xyXG4gIH07XHJcbiAgQ2hhcnQucHJvdG90eXBlLnVuem9vbSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgdmFyICQkID0gdGhpcy5pbnRlcm5hbDtcclxuICAgICAgaWYgKCQkLmNvbmZpZy5zdWJjaGFydF9zaG93KSB7XHJcbiAgICAgICAgICAkJC5icnVzaC5jbGVhcigpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgJCQudXBkYXRlWERvbWFpbihudWxsLCB0cnVlLCBmYWxzZSwgZmFsc2UsICQkLnN1YlguZG9tYWluKCkpO1xyXG4gICAgICAgICAgJCQucmVkcmF3KHsgd2l0aFk6ICQkLmNvbmZpZy56b29tX3Jlc2NhbGUsIHdpdGhTdWJjaGFydDogZmFsc2UgfSk7XHJcbiAgICAgIH1cclxuICB9O1xyXG4gIENoYXJ0LnByb3RvdHlwZS56b29tLm1heCA9IGZ1bmN0aW9uIChtYXgpIHtcclxuICAgICAgdmFyICQkID0gdGhpcy5pbnRlcm5hbCwgY29uZmlnID0gJCQuY29uZmlnLCBkMyA9ICQkLmQzO1xyXG4gICAgICBpZiAobWF4ID09PSAwIHx8IG1heCkge1xyXG4gICAgICAgICAgY29uZmlnLnpvb21feF9tYXggPSBkMy5tYXgoWyQkLm9yZ1hEb21haW5bMV0sIG1heF0pO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuIGNvbmZpZy56b29tX3hfbWF4O1xyXG4gICAgICB9XHJcbiAgfTtcclxuICBDaGFydC5wcm90b3R5cGUuem9vbS5taW4gPSBmdW5jdGlvbiAobWluKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXMuaW50ZXJuYWwsIGNvbmZpZyA9ICQkLmNvbmZpZywgZDMgPSAkJC5kMztcclxuICAgICAgaWYgKG1pbiA9PT0gMCB8fCBtaW4pIHtcclxuICAgICAgICAgIGNvbmZpZy56b29tX3hfbWluID0gZDMubWluKFskJC5vcmdYRG9tYWluWzBdLCBtaW5dKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICAgIHJldHVybiBjb25maWcuem9vbV94X21pbjtcclxuICAgICAgfVxyXG4gIH07XHJcbiAgQ2hhcnQucHJvdG90eXBlLnpvb20ucmFuZ2UgPSBmdW5jdGlvbiAocmFuZ2UpIHtcclxuICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGgpIHtcclxuICAgICAgICAgIGlmIChpc0RlZmluZWQocmFuZ2UubWF4KSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuZG9tYWluLm1heChyYW5nZS5tYXgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGlzRGVmaW5lZChyYW5nZS5taW4pKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5kb21haW4ubWluKHJhbmdlLm1pbik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgIG1heDogdGhpcy5kb21haW4ubWF4KCksXHJcbiAgICAgICAgICAgICAgbWluOiB0aGlzLmRvbWFpbi5taW4oKVxyXG4gICAgICAgICAgfTtcclxuICAgICAgfVxyXG4gIH07XG5cbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuaW5pdFBpZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgdmFyICQkID0gdGhpcywgZDMgPSAkJC5kMztcclxuICAgICAgJCQucGllID0gZDNcclxuICAgICAgICAgIC5waWUoKVxyXG4gICAgICAgICAgLnBhZEFuZ2xlKHRoaXMuZ2V0UGFkQW5nbGUuYmluZCh0aGlzKSlcclxuICAgICAgICAgIC52YWx1ZShmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgcmV0dXJuIGQudmFsdWVzLnJlZHVjZShmdW5jdGlvbiAoYSwgYikge1xyXG4gICAgICAgICAgICAgIHJldHVybiBhICsgYi52YWx1ZTtcclxuICAgICAgICAgIH0sIDApO1xyXG4gICAgICB9KTtcclxuICAgICAgdmFyIG9yZGVyRmN0ID0gJCQuZ2V0T3JkZXJGdW5jdGlvbigpO1xyXG4gICAgICAvLyB3ZSBuZWVkIHRvIHJldmVyc2UgdGhlIHJldHVybmVkIG9yZGVyIGlmIGFzYyBvciBkZXNjIHRvIGhhdmUgdGhlIHNsaWNlIGluIGV4cGVjdGVkIG9yZGVyLlxyXG4gICAgICBpZiAob3JkZXJGY3QgJiYgKCQkLmlzT3JkZXJBc2MoKSB8fCAkJC5pc09yZGVyRGVzYygpKSkge1xyXG4gICAgICAgICAgdmFyIGRlZmF1bHRTb3J0XzEgPSBvcmRlckZjdDtcclxuICAgICAgICAgIG9yZGVyRmN0ID0gZnVuY3Rpb24gKHQxLCB0MikgeyByZXR1cm4gZGVmYXVsdFNvcnRfMSh0MSwgdDIpICogLTE7IH07XHJcbiAgICAgIH1cclxuICAgICAgJCQucGllLnNvcnQob3JkZXJGY3QgfHwgbnVsbCk7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS51cGRhdGVSYWRpdXMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXMsIGNvbmZpZyA9ICQkLmNvbmZpZywgdyA9IGNvbmZpZy5nYXVnZV93aWR0aCB8fCBjb25maWcuZG9udXRfd2lkdGgsIGdhdWdlQXJjV2lkdGggPSAkJC5maWx0ZXJUYXJnZXRzVG9TaG93KCQkLmRhdGEudGFyZ2V0cykubGVuZ3RoICpcclxuICAgICAgICAgICQkLmNvbmZpZy5nYXVnZV9hcmNzX21pbldpZHRoO1xyXG4gICAgICAkJC5yYWRpdXNFeHBhbmRlZCA9XHJcbiAgICAgICAgICAoTWF0aC5taW4oJCQuYXJjV2lkdGgsICQkLmFyY0hlaWdodCkgLyAyKSAqICgkJC5oYXNUeXBlKCdnYXVnZScpID8gMC44NSA6IDEpO1xyXG4gICAgICAkJC5yYWRpdXMgPSAkJC5yYWRpdXNFeHBhbmRlZCAqIDAuOTU7XHJcbiAgICAgICQkLmlubmVyUmFkaXVzUmF0aW8gPSB3ID8gKCQkLnJhZGl1cyAtIHcpIC8gJCQucmFkaXVzIDogMC42O1xyXG4gICAgICAkJC5pbm5lclJhZGl1cyA9XHJcbiAgICAgICAgICAkJC5oYXNUeXBlKCdkb251dCcpIHx8ICQkLmhhc1R5cGUoJ2dhdWdlJylcclxuICAgICAgICAgICAgICA/ICQkLnJhZGl1cyAqICQkLmlubmVyUmFkaXVzUmF0aW9cclxuICAgICAgICAgICAgICA6IDA7XHJcbiAgICAgICQkLmdhdWdlQXJjV2lkdGggPSB3XHJcbiAgICAgICAgICA/IHdcclxuICAgICAgICAgIDogZ2F1Z2VBcmNXaWR0aCA8PSAkJC5yYWRpdXMgLSAkJC5pbm5lclJhZGl1c1xyXG4gICAgICAgICAgICAgID8gJCQucmFkaXVzIC0gJCQuaW5uZXJSYWRpdXNcclxuICAgICAgICAgICAgICA6IGdhdWdlQXJjV2lkdGggPD0gJCQucmFkaXVzXHJcbiAgICAgICAgICAgICAgICAgID8gZ2F1Z2VBcmNXaWR0aFxyXG4gICAgICAgICAgICAgICAgICA6ICQkLnJhZGl1cztcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmdldFBhZEFuZ2xlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICBpZiAodGhpcy5oYXNUeXBlKCdwaWUnKSkge1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29uZmlnLnBpZV9wYWRBbmdsZSB8fCAwO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMuaGFzVHlwZSgnZG9udXQnKSkge1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29uZmlnLmRvbnV0X3BhZEFuZ2xlIHx8IDA7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgfVxyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUudXBkYXRlQXJjID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzO1xyXG4gICAgICAkJC5zdmdBcmMgPSAkJC5nZXRTdmdBcmMoKTtcclxuICAgICAgJCQuc3ZnQXJjRXhwYW5kZWQgPSAkJC5nZXRTdmdBcmNFeHBhbmRlZCgpO1xyXG4gICAgICAkJC5zdmdBcmNFeHBhbmRlZFN1YiA9ICQkLmdldFN2Z0FyY0V4cGFuZGVkKDAuOTgpO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUudXBkYXRlQW5nbGUgPSBmdW5jdGlvbiAoZCkge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzLCBjb25maWcgPSAkJC5jb25maWcsIGZvdW5kID0gZmFsc2UsIGluZGV4ID0gMCwgZ01pbiwgZ01heCwgZ1RpYywgZ1ZhbHVlO1xyXG4gICAgICBpZiAoIWNvbmZpZykge1xyXG4gICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIH1cclxuICAgICAgJCQucGllKCQkLmZpbHRlclRhcmdldHNUb1Nob3coJCQuZGF0YS50YXJnZXRzKSkuZm9yRWFjaChmdW5jdGlvbiAodCkge1xyXG4gICAgICAgICAgaWYgKCFmb3VuZCAmJiB0LmRhdGEuaWQgPT09IGQuZGF0YS5pZCkge1xyXG4gICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTtcclxuICAgICAgICAgICAgICBkID0gdDtcclxuICAgICAgICAgICAgICBkLmluZGV4ID0gaW5kZXg7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpbmRleCsrO1xyXG4gICAgICB9KTtcclxuICAgICAgaWYgKGlzTmFOKGQuc3RhcnRBbmdsZSkpIHtcclxuICAgICAgICAgIGQuc3RhcnRBbmdsZSA9IDA7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGlzTmFOKGQuZW5kQW5nbGUpKSB7XHJcbiAgICAgICAgICBkLmVuZEFuZ2xlID0gZC5zdGFydEFuZ2xlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICgkJC5pc0dhdWdlVHlwZShkLmRhdGEpKSB7XHJcbiAgICAgICAgICBnTWluID0gY29uZmlnLmdhdWdlX21pbjtcclxuICAgICAgICAgIGdNYXggPSBjb25maWcuZ2F1Z2VfbWF4O1xyXG4gICAgICAgICAgZ1RpYyA9IChNYXRoLlBJICogKGNvbmZpZy5nYXVnZV9mdWxsQ2lyY2xlID8gMiA6IDEpKSAvIChnTWF4IC0gZ01pbik7XHJcbiAgICAgICAgICBnVmFsdWUgPSBkLnZhbHVlIDwgZ01pbiA/IDAgOiBkLnZhbHVlIDwgZ01heCA/IGQudmFsdWUgLSBnTWluIDogZ01heCAtIGdNaW47XHJcbiAgICAgICAgICBkLnN0YXJ0QW5nbGUgPSBjb25maWcuZ2F1Z2Vfc3RhcnRpbmdBbmdsZTtcclxuICAgICAgICAgIGQuZW5kQW5nbGUgPSBkLnN0YXJ0QW5nbGUgKyBnVGljICogZ1ZhbHVlO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBmb3VuZCA/IGQgOiBudWxsO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuZ2V0U3ZnQXJjID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzLCBoYXNHYXVnZVR5cGUgPSAkJC5oYXNUeXBlKCdnYXVnZScpLCBzaW5nbGVBcmNXaWR0aCA9ICQkLmdhdWdlQXJjV2lkdGggLyAkJC5maWx0ZXJUYXJnZXRzVG9TaG93KCQkLmRhdGEudGFyZ2V0cykubGVuZ3RoLCBhcmMgPSAkJC5kM1xyXG4gICAgICAgICAgLmFyYygpXHJcbiAgICAgICAgICAub3V0ZXJSYWRpdXMoZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIHJldHVybiBoYXNHYXVnZVR5cGUgPyAkJC5yYWRpdXMgLSBzaW5nbGVBcmNXaWR0aCAqIGQuaW5kZXggOiAkJC5yYWRpdXM7XHJcbiAgICAgIH0pXHJcbiAgICAgICAgICAuaW5uZXJSYWRpdXMoZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIHJldHVybiBoYXNHYXVnZVR5cGVcclxuICAgICAgICAgICAgICA/ICQkLnJhZGl1cyAtIHNpbmdsZUFyY1dpZHRoICogKGQuaW5kZXggKyAxKVxyXG4gICAgICAgICAgICAgIDogJCQuaW5uZXJSYWRpdXM7XHJcbiAgICAgIH0pLCBuZXdBcmMgPSBmdW5jdGlvbiAoZCwgd2l0aG91dFVwZGF0ZSkge1xyXG4gICAgICAgICAgdmFyIHVwZGF0ZWQ7XHJcbiAgICAgICAgICBpZiAod2l0aG91dFVwZGF0ZSkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBhcmMoZCk7XHJcbiAgICAgICAgICB9IC8vIGZvciBpbnRlcnBvbGF0ZVxyXG4gICAgICAgICAgdXBkYXRlZCA9ICQkLnVwZGF0ZUFuZ2xlKGQpO1xyXG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZWQgPyBhcmModXBkYXRlZCkgOiAnTSAwIDAnO1xyXG4gICAgICB9O1xyXG4gICAgICBuZXdBcmMuY2VudHJvaWQgPSBhcmMuY2VudHJvaWQ7XHJcbiAgICAgIHJldHVybiBuZXdBcmM7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5nZXRTdmdBcmNFeHBhbmRlZCA9IGZ1bmN0aW9uIChyYXRlKSB7XHJcbiAgICAgIHJhdGUgPSByYXRlIHx8IDE7XHJcbiAgICAgIHZhciAkJCA9IHRoaXMsIGhhc0dhdWdlVHlwZSA9ICQkLmhhc1R5cGUoJ2dhdWdlJyksIHNpbmdsZUFyY1dpZHRoID0gJCQuZ2F1Z2VBcmNXaWR0aCAvICQkLmZpbHRlclRhcmdldHNUb1Nob3coJCQuZGF0YS50YXJnZXRzKS5sZW5ndGgsIGV4cGFuZFdpZHRoID0gTWF0aC5taW4oJCQucmFkaXVzRXhwYW5kZWQgKiByYXRlIC0gJCQucmFkaXVzLCBzaW5nbGVBcmNXaWR0aCAqIDAuOCAtICgxIC0gcmF0ZSkgKiAxMDApLCBhcmMgPSAkJC5kM1xyXG4gICAgICAgICAgLmFyYygpXHJcbiAgICAgICAgICAub3V0ZXJSYWRpdXMoZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIHJldHVybiBoYXNHYXVnZVR5cGVcclxuICAgICAgICAgICAgICA/ICQkLnJhZGl1cyAtIHNpbmdsZUFyY1dpZHRoICogZC5pbmRleCArIGV4cGFuZFdpZHRoXHJcbiAgICAgICAgICAgICAgOiAkJC5yYWRpdXNFeHBhbmRlZCAqIHJhdGU7XHJcbiAgICAgIH0pXHJcbiAgICAgICAgICAuaW5uZXJSYWRpdXMoZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIHJldHVybiBoYXNHYXVnZVR5cGVcclxuICAgICAgICAgICAgICA/ICQkLnJhZGl1cyAtIHNpbmdsZUFyY1dpZHRoICogKGQuaW5kZXggKyAxKVxyXG4gICAgICAgICAgICAgIDogJCQuaW5uZXJSYWRpdXM7XHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIHZhciB1cGRhdGVkID0gJCQudXBkYXRlQW5nbGUoZCk7XHJcbiAgICAgICAgICByZXR1cm4gdXBkYXRlZCA/IGFyYyh1cGRhdGVkKSA6ICdNIDAgMCc7XHJcbiAgICAgIH07XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5nZXRBcmMgPSBmdW5jdGlvbiAoZCwgd2l0aG91dFVwZGF0ZSwgZm9yY2UpIHtcclxuICAgICAgcmV0dXJuIGZvcmNlIHx8IHRoaXMuaXNBcmNUeXBlKGQuZGF0YSlcclxuICAgICAgICAgID8gdGhpcy5zdmdBcmMoZCwgd2l0aG91dFVwZGF0ZSlcclxuICAgICAgICAgIDogJ00gMCAwJztcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLnRyYW5zZm9ybUZvckFyY0xhYmVsID0gZnVuY3Rpb24gKGQpIHtcclxuICAgICAgdmFyICQkID0gdGhpcywgY29uZmlnID0gJCQuY29uZmlnLCB1cGRhdGVkID0gJCQudXBkYXRlQW5nbGUoZCksIGMsIHgsIHksIGgsIHJhdGlvLCB0cmFuc2xhdGUgPSAnJywgaGFzR2F1Z2UgPSAkJC5oYXNUeXBlKCdnYXVnZScpO1xyXG4gICAgICBpZiAodXBkYXRlZCAmJiAhaGFzR2F1Z2UpIHtcclxuICAgICAgICAgIGMgPSB0aGlzLnN2Z0FyYy5jZW50cm9pZCh1cGRhdGVkKTtcclxuICAgICAgICAgIHggPSBpc05hTihjWzBdKSA/IDAgOiBjWzBdO1xyXG4gICAgICAgICAgeSA9IGlzTmFOKGNbMV0pID8gMCA6IGNbMV07XHJcbiAgICAgICAgICBoID0gTWF0aC5zcXJ0KHggKiB4ICsgeSAqIHkpO1xyXG4gICAgICAgICAgaWYgKCQkLmhhc1R5cGUoJ2RvbnV0JykgJiYgY29uZmlnLmRvbnV0X2xhYmVsX3JhdGlvKSB7XHJcbiAgICAgICAgICAgICAgcmF0aW8gPSBpc0Z1bmN0aW9uKGNvbmZpZy5kb251dF9sYWJlbF9yYXRpbylcclxuICAgICAgICAgICAgICAgICAgPyBjb25maWcuZG9udXRfbGFiZWxfcmF0aW8oZCwgJCQucmFkaXVzLCBoKVxyXG4gICAgICAgICAgICAgICAgICA6IGNvbmZpZy5kb251dF9sYWJlbF9yYXRpbztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2UgaWYgKCQkLmhhc1R5cGUoJ3BpZScpICYmIGNvbmZpZy5waWVfbGFiZWxfcmF0aW8pIHtcclxuICAgICAgICAgICAgICByYXRpbyA9IGlzRnVuY3Rpb24oY29uZmlnLnBpZV9sYWJlbF9yYXRpbylcclxuICAgICAgICAgICAgICAgICAgPyBjb25maWcucGllX2xhYmVsX3JhdGlvKGQsICQkLnJhZGl1cywgaClcclxuICAgICAgICAgICAgICAgICAgOiBjb25maWcucGllX2xhYmVsX3JhdGlvO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgcmF0aW8gPVxyXG4gICAgICAgICAgICAgICAgICAkJC5yYWRpdXMgJiYgaFxyXG4gICAgICAgICAgICAgICAgICAgICAgPyAoKDM2IC8gJCQucmFkaXVzID4gMC4zNzUgPyAxLjE3NSAtIDM2IC8gJCQucmFkaXVzIDogMC44KSAqXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJCQucmFkaXVzKSAvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaFxyXG4gICAgICAgICAgICAgICAgICAgICAgOiAwO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdHJhbnNsYXRlID0gJ3RyYW5zbGF0ZSgnICsgeCAqIHJhdGlvICsgJywnICsgeSAqIHJhdGlvICsgJyknO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHVwZGF0ZWQgJiZcclxuICAgICAgICAgIGhhc0dhdWdlICYmXHJcbiAgICAgICAgICAkJC5maWx0ZXJUYXJnZXRzVG9TaG93KCQkLmRhdGEudGFyZ2V0cykubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgdmFyIHkxID0gTWF0aC5zaW4odXBkYXRlZC5lbmRBbmdsZSAtIE1hdGguUEkgLyAyKTtcclxuICAgICAgICAgIHggPSBNYXRoLmNvcyh1cGRhdGVkLmVuZEFuZ2xlIC0gTWF0aC5QSSAvIDIpICogKCQkLnJhZGl1c0V4cGFuZGVkICsgMjUpO1xyXG4gICAgICAgICAgeSA9IHkxICogKCQkLnJhZGl1c0V4cGFuZGVkICsgMTUgLSBNYXRoLmFicyh5MSAqIDEwKSkgKyAzO1xyXG4gICAgICAgICAgdHJhbnNsYXRlID0gJ3RyYW5zbGF0ZSgnICsgeCArICcsJyArIHkgKyAnKSc7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRyYW5zbGF0ZTtcclxuICB9O1xyXG4gIC8qKlxyXG4gICAqIEBkZXByZWNhdGVkIFVzZSBgZ2V0UmF0aW8oJ2FyYycsIGQpYCBpbnN0ZWFkLlxyXG4gICAqL1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmdldEFyY1JhdGlvID0gZnVuY3Rpb24gKGQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZ2V0UmF0aW8oJ2FyYycsIGQpO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuY29udmVydFRvQXJjRGF0YSA9IGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmFkZE5hbWUoe1xyXG4gICAgICAgICAgaWQ6IGQuZGF0YS5pZCxcclxuICAgICAgICAgIHZhbHVlOiBkLnZhbHVlLFxyXG4gICAgICAgICAgcmF0aW86IHRoaXMuZ2V0UmF0aW8oJ2FyYycsIGQpLFxyXG4gICAgICAgICAgaW5kZXg6IGQuaW5kZXhcclxuICAgICAgfSk7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS50ZXh0Rm9yQXJjTGFiZWwgPSBmdW5jdGlvbiAoZCkge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzLCB1cGRhdGVkLCB2YWx1ZSwgcmF0aW8sIGlkLCBmb3JtYXQ7XHJcbiAgICAgIGlmICghJCQuc2hvdWxkU2hvd0FyY0xhYmVsKCkpIHtcclxuICAgICAgICAgIHJldHVybiAnJztcclxuICAgICAgfVxyXG4gICAgICB1cGRhdGVkID0gJCQudXBkYXRlQW5nbGUoZCk7XHJcbiAgICAgIHZhbHVlID0gdXBkYXRlZCA/IHVwZGF0ZWQudmFsdWUgOiBudWxsO1xyXG4gICAgICByYXRpbyA9ICQkLmdldFJhdGlvKCdhcmMnLCB1cGRhdGVkKTtcclxuICAgICAgaWQgPSBkLmRhdGEuaWQ7XHJcbiAgICAgIGlmICghJCQuaGFzVHlwZSgnZ2F1Z2UnKSAmJiAhJCQubWVldHNBcmNMYWJlbFRocmVzaG9sZChyYXRpbykpIHtcclxuICAgICAgICAgIHJldHVybiAnJztcclxuICAgICAgfVxyXG4gICAgICBmb3JtYXQgPSAkJC5nZXRBcmNMYWJlbEZvcm1hdCgpO1xyXG4gICAgICByZXR1cm4gZm9ybWF0XHJcbiAgICAgICAgICA/IGZvcm1hdCh2YWx1ZSwgcmF0aW8sIGlkKVxyXG4gICAgICAgICAgOiAkJC5kZWZhdWx0QXJjVmFsdWVGb3JtYXQodmFsdWUsIHJhdGlvKTtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLnRleHRGb3JHYXVnZU1pbk1heCA9IGZ1bmN0aW9uICh2YWx1ZSwgaXNNYXgpIHtcclxuICAgICAgdmFyICQkID0gdGhpcywgZm9ybWF0ID0gJCQuZ2V0R2F1Z2VMYWJlbEV4dGVudHMoKTtcclxuICAgICAgcmV0dXJuIGZvcm1hdCA/IGZvcm1hdCh2YWx1ZSwgaXNNYXgpIDogdmFsdWU7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5leHBhbmRBcmMgPSBmdW5jdGlvbiAodGFyZ2V0SWRzKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXMsIGludGVydmFsO1xyXG4gICAgICAvLyBNRU1POiBhdm9pZCB0byBjYW5jZWwgdHJhbnNpdGlvblxyXG4gICAgICBpZiAoJCQudHJhbnNpdGluZykge1xyXG4gICAgICAgICAgaW50ZXJ2YWwgPSB3aW5kb3cuc2V0SW50ZXJ2YWwoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgIGlmICghJCQudHJhbnNpdGluZykge1xyXG4gICAgICAgICAgICAgICAgICB3aW5kb3cuY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7XHJcbiAgICAgICAgICAgICAgICAgIGlmICgkJC5sZWdlbmQuc2VsZWN0QWxsKCcuYzMtbGVnZW5kLWl0ZW0tZm9jdXNlZCcpLnNpemUoKSA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICQkLmV4cGFuZEFyYyh0YXJnZXRJZHMpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSwgMTApO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIHRhcmdldElkcyA9ICQkLm1hcFRvVGFyZ2V0SWRzKHRhcmdldElkcyk7XHJcbiAgICAgICQkLnN2Z1xyXG4gICAgICAgICAgLnNlbGVjdEFsbCgkJC5zZWxlY3RvclRhcmdldHModGFyZ2V0SWRzLCAnLicgKyBDTEFTUy5jaGFydEFyYykpXHJcbiAgICAgICAgICAuZWFjaChmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgaWYgKCEkJC5zaG91bGRFeHBhbmQoZC5kYXRhLmlkKSkge1xyXG4gICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgICQkLmQzXHJcbiAgICAgICAgICAgICAgLnNlbGVjdCh0aGlzKVxyXG4gICAgICAgICAgICAgIC5zZWxlY3RBbGwoJ3BhdGgnKVxyXG4gICAgICAgICAgICAgIC50cmFuc2l0aW9uKClcclxuICAgICAgICAgICAgICAuZHVyYXRpb24oJCQuZXhwYW5kRHVyYXRpb24oZC5kYXRhLmlkKSlcclxuICAgICAgICAgICAgICAuYXR0cignZCcsICQkLnN2Z0FyY0V4cGFuZGVkKVxyXG4gICAgICAgICAgICAgIC50cmFuc2l0aW9uKClcclxuICAgICAgICAgICAgICAuZHVyYXRpb24oJCQuZXhwYW5kRHVyYXRpb24oZC5kYXRhLmlkKSAqIDIpXHJcbiAgICAgICAgICAgICAgLmF0dHIoJ2QnLCAkJC5zdmdBcmNFeHBhbmRlZFN1YilcclxuICAgICAgICAgICAgICAuZWFjaChmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICAgIGlmICgkJC5pc0RvbnV0VHlwZShkLmRhdGEpKSA7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS51bmV4cGFuZEFyYyA9IGZ1bmN0aW9uICh0YXJnZXRJZHMpIHtcclxuICAgICAgdmFyICQkID0gdGhpcztcclxuICAgICAgaWYgKCQkLnRyYW5zaXRpbmcpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICB0YXJnZXRJZHMgPSAkJC5tYXBUb1RhcmdldElkcyh0YXJnZXRJZHMpO1xyXG4gICAgICAkJC5zdmdcclxuICAgICAgICAgIC5zZWxlY3RBbGwoJCQuc2VsZWN0b3JUYXJnZXRzKHRhcmdldElkcywgJy4nICsgQ0xBU1MuY2hhcnRBcmMpKVxyXG4gICAgICAgICAgLnNlbGVjdEFsbCgncGF0aCcpXHJcbiAgICAgICAgICAudHJhbnNpdGlvbigpXHJcbiAgICAgICAgICAuZHVyYXRpb24oZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIHJldHVybiAkJC5leHBhbmREdXJhdGlvbihkLmRhdGEuaWQpO1xyXG4gICAgICB9KVxyXG4gICAgICAgICAgLmF0dHIoJ2QnLCAkJC5zdmdBcmMpO1xyXG4gICAgICAkJC5zdmcuc2VsZWN0QWxsKCcuJyArIENMQVNTLmFyYyk7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5leHBhbmREdXJhdGlvbiA9IGZ1bmN0aW9uIChpZCkge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzLCBjb25maWcgPSAkJC5jb25maWc7XHJcbiAgICAgIGlmICgkJC5pc0RvbnV0VHlwZShpZCkpIHtcclxuICAgICAgICAgIHJldHVybiBjb25maWcuZG9udXRfZXhwYW5kX2R1cmF0aW9uO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKCQkLmlzR2F1Z2VUeXBlKGlkKSkge1xyXG4gICAgICAgICAgcmV0dXJuIGNvbmZpZy5nYXVnZV9leHBhbmRfZHVyYXRpb247XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoJCQuaXNQaWVUeXBlKGlkKSkge1xyXG4gICAgICAgICAgcmV0dXJuIGNvbmZpZy5waWVfZXhwYW5kX2R1cmF0aW9uO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuIDUwO1xyXG4gICAgICB9XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5zaG91bGRFeHBhbmQgPSBmdW5jdGlvbiAoaWQpIHtcclxuICAgICAgdmFyICQkID0gdGhpcywgY29uZmlnID0gJCQuY29uZmlnO1xyXG4gICAgICByZXR1cm4gKCgkJC5pc0RvbnV0VHlwZShpZCkgJiYgY29uZmlnLmRvbnV0X2V4cGFuZCkgfHxcclxuICAgICAgICAgICgkJC5pc0dhdWdlVHlwZShpZCkgJiYgY29uZmlnLmdhdWdlX2V4cGFuZCkgfHxcclxuICAgICAgICAgICgkJC5pc1BpZVR5cGUoaWQpICYmIGNvbmZpZy5waWVfZXhwYW5kKSk7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5zaG91bGRTaG93QXJjTGFiZWwgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXMsIGNvbmZpZyA9ICQkLmNvbmZpZywgc2hvdWxkU2hvdyA9IHRydWU7XHJcbiAgICAgIGlmICgkJC5oYXNUeXBlKCdkb251dCcpKSB7XHJcbiAgICAgICAgICBzaG91bGRTaG93ID0gY29uZmlnLmRvbnV0X2xhYmVsX3Nob3c7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoJCQuaGFzVHlwZSgncGllJykpIHtcclxuICAgICAgICAgIHNob3VsZFNob3cgPSBjb25maWcucGllX2xhYmVsX3Nob3c7XHJcbiAgICAgIH1cclxuICAgICAgLy8gd2hlbiBnYXVnZSwgYWx3YXlzIHRydWVcclxuICAgICAgcmV0dXJuIHNob3VsZFNob3c7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5tZWV0c0FyY0xhYmVsVGhyZXNob2xkID0gZnVuY3Rpb24gKHJhdGlvKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXMsIGNvbmZpZyA9ICQkLmNvbmZpZywgdGhyZXNob2xkID0gJCQuaGFzVHlwZSgnZG9udXQnKVxyXG4gICAgICAgICAgPyBjb25maWcuZG9udXRfbGFiZWxfdGhyZXNob2xkXHJcbiAgICAgICAgICA6IGNvbmZpZy5waWVfbGFiZWxfdGhyZXNob2xkO1xyXG4gICAgICByZXR1cm4gcmF0aW8gPj0gdGhyZXNob2xkO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuZ2V0QXJjTGFiZWxGb3JtYXQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXMsIGNvbmZpZyA9ICQkLmNvbmZpZywgZm9ybWF0ID0gY29uZmlnLnBpZV9sYWJlbF9mb3JtYXQ7XHJcbiAgICAgIGlmICgkJC5oYXNUeXBlKCdnYXVnZScpKSB7XHJcbiAgICAgICAgICBmb3JtYXQgPSBjb25maWcuZ2F1Z2VfbGFiZWxfZm9ybWF0O1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKCQkLmhhc1R5cGUoJ2RvbnV0JykpIHtcclxuICAgICAgICAgIGZvcm1hdCA9IGNvbmZpZy5kb251dF9sYWJlbF9mb3JtYXQ7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGZvcm1hdDtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmdldEdhdWdlTGFiZWxFeHRlbnRzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzLCBjb25maWcgPSAkJC5jb25maWc7XHJcbiAgICAgIHJldHVybiBjb25maWcuZ2F1Z2VfbGFiZWxfZXh0ZW50cztcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmdldEFyY1RpdGxlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzO1xyXG4gICAgICByZXR1cm4gJCQuaGFzVHlwZSgnZG9udXQnKSA/ICQkLmNvbmZpZy5kb251dF90aXRsZSA6ICcnO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUudXBkYXRlVGFyZ2V0c0ZvckFyYyA9IGZ1bmN0aW9uICh0YXJnZXRzKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXMsIG1haW4gPSAkJC5tYWluLCBtYWluUGllcywgbWFpblBpZUVudGVyLCBjbGFzc0NoYXJ0QXJjID0gJCQuY2xhc3NDaGFydEFyYy5iaW5kKCQkKSwgY2xhc3NBcmNzID0gJCQuY2xhc3NBcmNzLmJpbmQoJCQpLCBjbGFzc0ZvY3VzID0gJCQuY2xhc3NGb2N1cy5iaW5kKCQkKTtcclxuICAgICAgbWFpblBpZXMgPSBtYWluXHJcbiAgICAgICAgICAuc2VsZWN0KCcuJyArIENMQVNTLmNoYXJ0QXJjcylcclxuICAgICAgICAgIC5zZWxlY3RBbGwoJy4nICsgQ0xBU1MuY2hhcnRBcmMpXHJcbiAgICAgICAgICAuZGF0YSgkJC5waWUodGFyZ2V0cykpXHJcbiAgICAgICAgICAuYXR0cignY2xhc3MnLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgcmV0dXJuIGNsYXNzQ2hhcnRBcmMoZCkgKyBjbGFzc0ZvY3VzKGQuZGF0YSk7XHJcbiAgICAgIH0pO1xyXG4gICAgICBtYWluUGllRW50ZXIgPSBtYWluUGllc1xyXG4gICAgICAgICAgLmVudGVyKClcclxuICAgICAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAgICAgLmF0dHIoJ2NsYXNzJywgY2xhc3NDaGFydEFyYyk7XHJcbiAgICAgIG1haW5QaWVFbnRlci5hcHBlbmQoJ2cnKS5hdHRyKCdjbGFzcycsIGNsYXNzQXJjcyk7XHJcbiAgICAgIG1haW5QaWVFbnRlclxyXG4gICAgICAgICAgLmFwcGVuZCgndGV4dCcpXHJcbiAgICAgICAgICAuYXR0cignZHknLCAkJC5oYXNUeXBlKCdnYXVnZScpID8gJy0uMWVtJyA6ICcuMzVlbScpXHJcbiAgICAgICAgICAuc3R5bGUoJ29wYWNpdHknLCAwKVxyXG4gICAgICAgICAgLnN0eWxlKCd0ZXh0LWFuY2hvcicsICdtaWRkbGUnKVxyXG4gICAgICAgICAgLnN0eWxlKCdwb2ludGVyLWV2ZW50cycsICdub25lJyk7XHJcbiAgICAgIC8vIE1FTU86IGNhbiBub3Qga2VlcCBzYW1lIGNvbG9yLi4uLCBidXQgbm90IGJhZCB0byB1cGRhdGUgY29sb3IgaW4gcmVkcmF3XHJcbiAgICAgIC8vbWFpblBpZVVwZGF0ZS5leGl0KCkucmVtb3ZlKCk7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5pbml0QXJjID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzO1xyXG4gICAgICAkJC5hcmNzID0gJCQubWFpblxyXG4gICAgICAgICAgLnNlbGVjdCgnLicgKyBDTEFTUy5jaGFydClcclxuICAgICAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAgICAgLmF0dHIoJ2NsYXNzJywgQ0xBU1MuY2hhcnRBcmNzKVxyXG4gICAgICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsICQkLmdldFRyYW5zbGF0ZSgnYXJjJykpO1xyXG4gICAgICAkJC5hcmNzXHJcbiAgICAgICAgICAuYXBwZW5kKCd0ZXh0JylcclxuICAgICAgICAgIC5hdHRyKCdjbGFzcycsIENMQVNTLmNoYXJ0QXJjc1RpdGxlKVxyXG4gICAgICAgICAgLnN0eWxlKCd0ZXh0LWFuY2hvcicsICdtaWRkbGUnKVxyXG4gICAgICAgICAgLnRleHQoJCQuZ2V0QXJjVGl0bGUoKSk7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5yZWRyYXdBcmMgPSBmdW5jdGlvbiAoZHVyYXRpb24sIGR1cmF0aW9uRm9yRXhpdCwgd2l0aFRyYW5zZm9ybSkge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzLCBkMyA9ICQkLmQzLCBjb25maWcgPSAkJC5jb25maWcsIG1haW4gPSAkJC5tYWluLCBhcmNzLCBtYWluQXJjLCBhcmNMYWJlbExpbmVzLCBtYWluQXJjTGFiZWxMaW5lLCBoYXNHYXVnZVR5cGUgPSAkJC5oYXNUeXBlKCdnYXVnZScpO1xyXG4gICAgICBhcmNzID0gbWFpblxyXG4gICAgICAgICAgLnNlbGVjdEFsbCgnLicgKyBDTEFTUy5hcmNzKVxyXG4gICAgICAgICAgLnNlbGVjdEFsbCgnLicgKyBDTEFTUy5hcmMpXHJcbiAgICAgICAgICAuZGF0YSgkJC5hcmNEYXRhLmJpbmQoJCQpKTtcclxuICAgICAgbWFpbkFyYyA9IGFyY3NcclxuICAgICAgICAgIC5lbnRlcigpXHJcbiAgICAgICAgICAuYXBwZW5kKCdwYXRoJylcclxuICAgICAgICAgIC5hdHRyKCdjbGFzcycsICQkLmNsYXNzQXJjLmJpbmQoJCQpKVxyXG4gICAgICAgICAgLnN0eWxlKCdmaWxsJywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIHJldHVybiAkJC5jb2xvcihkLmRhdGEpO1xyXG4gICAgICB9KVxyXG4gICAgICAgICAgLnN0eWxlKCdjdXJzb3InLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgcmV0dXJuIGNvbmZpZy5pbnRlcmFjdGlvbl9lbmFibGVkICYmIGNvbmZpZy5kYXRhX3NlbGVjdGlvbl9pc3NlbGVjdGFibGUoZClcclxuICAgICAgICAgICAgICA/ICdwb2ludGVyJ1xyXG4gICAgICAgICAgICAgIDogbnVsbDtcclxuICAgICAgfSlcclxuICAgICAgICAgIC5lYWNoKGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICBpZiAoJCQuaXNHYXVnZVR5cGUoZC5kYXRhKSkge1xyXG4gICAgICAgICAgICAgIGQuc3RhcnRBbmdsZSA9IGQuZW5kQW5nbGUgPSBjb25maWcuZ2F1Z2Vfc3RhcnRpbmdBbmdsZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuX2N1cnJlbnQgPSBkO1xyXG4gICAgICB9KVxyXG4gICAgICAgICAgLm1lcmdlKGFyY3MpO1xyXG4gICAgICBpZiAoaGFzR2F1Z2VUeXBlKSB7XHJcbiAgICAgICAgICBhcmNMYWJlbExpbmVzID0gbWFpblxyXG4gICAgICAgICAgICAgIC5zZWxlY3RBbGwoJy4nICsgQ0xBU1MuYXJjcylcclxuICAgICAgICAgICAgICAuc2VsZWN0QWxsKCcuJyArIENMQVNTLmFyY0xhYmVsTGluZSlcclxuICAgICAgICAgICAgICAuZGF0YSgkJC5hcmNEYXRhLmJpbmQoJCQpKTtcclxuICAgICAgICAgIG1haW5BcmNMYWJlbExpbmUgPSBhcmNMYWJlbExpbmVzXHJcbiAgICAgICAgICAgICAgLmVudGVyKClcclxuICAgICAgICAgICAgICAuYXBwZW5kKCdyZWN0JylcclxuICAgICAgICAgICAgICAuYXR0cignY2xhc3MnLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiAoQ0xBU1MuYXJjTGFiZWxMaW5lICtcclxuICAgICAgICAgICAgICAgICAgJyAnICtcclxuICAgICAgICAgICAgICAgICAgQ0xBU1MudGFyZ2V0ICtcclxuICAgICAgICAgICAgICAgICAgJyAnICtcclxuICAgICAgICAgICAgICAgICAgQ0xBU1MudGFyZ2V0ICtcclxuICAgICAgICAgICAgICAgICAgJy0nICtcclxuICAgICAgICAgICAgICAgICAgZC5kYXRhLmlkKTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgLm1lcmdlKGFyY0xhYmVsTGluZXMpO1xyXG4gICAgICAgICAgaWYgKCQkLmZpbHRlclRhcmdldHNUb1Nob3coJCQuZGF0YS50YXJnZXRzKS5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgICAgICBtYWluQXJjTGFiZWxMaW5lLnN0eWxlKCdkaXNwbGF5JywgJ25vbmUnKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIG1haW5BcmNMYWJlbExpbmVcclxuICAgICAgICAgICAgICAgICAgLnN0eWxlKCdmaWxsJywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuICQkLmxldmVsQ29sb3JcclxuICAgICAgICAgICAgICAgICAgICAgID8gJCQubGV2ZWxDb2xvcihkLmRhdGEudmFsdWVzLnJlZHVjZShmdW5jdGlvbiAodG90YWwsIGl0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG90YWwgKyBpdGVtLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfSwgMCkpXHJcbiAgICAgICAgICAgICAgICAgICAgICA6ICQkLmNvbG9yKGQuZGF0YSk7XHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgLnN0eWxlKCdkaXNwbGF5JywgY29uZmlnLmdhdWdlX2xhYmVsTGluZV9zaG93ID8gJycgOiAnbm9uZScpXHJcbiAgICAgICAgICAgICAgICAgIC5lYWNoKGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICAgICAgICAgIHZhciBsaW5lTGVuZ3RoID0gMCwgbGluZVRoaWNrbmVzcyA9IDIsIHggPSAwLCB5ID0gMCwgdHJhbnNmb3JtID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgIGlmICgkJC5oaWRkZW5UYXJnZXRJZHMuaW5kZXhPZihkLmRhdGEuaWQpIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdmFyIHVwZGF0ZWQgPSAkJC51cGRhdGVBbmdsZShkKSwgaW5uZXJMaW5lTGVuZ3RoID0gKCQkLmdhdWdlQXJjV2lkdGggL1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICQkLmZpbHRlclRhcmdldHNUb1Nob3coJCQuZGF0YS50YXJnZXRzKS5sZW5ndGgpICpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAodXBkYXRlZC5pbmRleCArIDEpLCBsaW5lQW5nbGUgPSB1cGRhdGVkLmVuZEFuZ2xlIC0gTWF0aC5QSSAvIDIsIGFyY0lubmVyUmFkaXVzID0gJCQucmFkaXVzIC0gaW5uZXJMaW5lTGVuZ3RoLCBsaW5lUG9zaXRpb25pbmdBbmdsZSA9IGxpbmVBbmdsZSAtIChhcmNJbm5lclJhZGl1cyA9PT0gMCA/IDAgOiAxIC8gYXJjSW5uZXJSYWRpdXMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgbGluZUxlbmd0aCA9ICQkLnJhZGl1c0V4cGFuZGVkIC0gJCQucmFkaXVzICsgaW5uZXJMaW5lTGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgeCA9IE1hdGguY29zKGxpbmVQb3NpdGlvbmluZ0FuZ2xlKSAqIGFyY0lubmVyUmFkaXVzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgeSA9IE1hdGguc2luKGxpbmVQb3NpdGlvbmluZ0FuZ2xlKSAqIGFyY0lubmVyUmFkaXVzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAncm90YXRlKCcgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZUFuZ2xlICogMTgwKSAvIE1hdGguUEkgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLCAnICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcsICcgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyknO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGQzLnNlbGVjdCh0aGlzKVxyXG4gICAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ3gnLCB4KVxyXG4gICAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ3knLCB5KVxyXG4gICAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ3dpZHRoJywgbGluZUxlbmd0aClcclxuICAgICAgICAgICAgICAgICAgICAgIC5hdHRyKCdoZWlnaHQnLCBsaW5lVGhpY2tuZXNzKVxyXG4gICAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIHRyYW5zZm9ybSlcclxuICAgICAgICAgICAgICAgICAgICAgIC5zdHlsZSgnc3Ryb2tlLWRhc2hhcnJheScsICcwLCAnICsgKGxpbmVMZW5ndGggKyBsaW5lVGhpY2tuZXNzKSArICcsIDAnKTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBtYWluQXJjXHJcbiAgICAgICAgICAuYXR0cigndHJhbnNmb3JtJywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIHJldHVybiAhJCQuaXNHYXVnZVR5cGUoZC5kYXRhKSAmJiB3aXRoVHJhbnNmb3JtID8gJ3NjYWxlKDApJyA6ICcnO1xyXG4gICAgICB9KVxyXG4gICAgICAgICAgLm9uKCdtb3VzZW92ZXInLCBjb25maWcuaW50ZXJhY3Rpb25fZW5hYmxlZFxyXG4gICAgICAgICAgPyBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICAgIHZhciB1cGRhdGVkLCBhcmNEYXRhO1xyXG4gICAgICAgICAgICAgIGlmICgkJC50cmFuc2l0aW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgIC8vIHNraXAgd2hpbGUgdHJhbnNpdGluZ1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHVwZGF0ZWQgPSAkJC51cGRhdGVBbmdsZShkKTtcclxuICAgICAgICAgICAgICBpZiAodXBkYXRlZCkge1xyXG4gICAgICAgICAgICAgICAgICBhcmNEYXRhID0gJCQuY29udmVydFRvQXJjRGF0YSh1cGRhdGVkKTtcclxuICAgICAgICAgICAgICAgICAgLy8gdHJhbnNpdGlvbnNcclxuICAgICAgICAgICAgICAgICAgJCQuZXhwYW5kQXJjKHVwZGF0ZWQuZGF0YS5pZCk7XHJcbiAgICAgICAgICAgICAgICAgICQkLmFwaS5mb2N1cyh1cGRhdGVkLmRhdGEuaWQpO1xyXG4gICAgICAgICAgICAgICAgICAkJC50b2dnbGVGb2N1c0xlZ2VuZCh1cGRhdGVkLmRhdGEuaWQsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAkJC5jb25maWcuZGF0YV9vbm1vdXNlb3ZlcihhcmNEYXRhLCB0aGlzKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICA6IG51bGwpXHJcbiAgICAgICAgICAub24oJ21vdXNlbW92ZScsIGNvbmZpZy5pbnRlcmFjdGlvbl9lbmFibGVkXHJcbiAgICAgICAgICA/IGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICAgICAgdmFyIHVwZGF0ZWQgPSAkJC51cGRhdGVBbmdsZShkKSwgYXJjRGF0YSwgc2VsZWN0ZWREYXRhO1xyXG4gICAgICAgICAgICAgIGlmICh1cGRhdGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgIChhcmNEYXRhID0gJCQuY29udmVydFRvQXJjRGF0YSh1cGRhdGVkKSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0ZWREYXRhID0gW2FyY0RhdGFdKTtcclxuICAgICAgICAgICAgICAgICAgJCQuc2hvd1Rvb2x0aXAoc2VsZWN0ZWREYXRhLCB0aGlzKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICA6IG51bGwpXHJcbiAgICAgICAgICAub24oJ21vdXNlb3V0JywgY29uZmlnLmludGVyYWN0aW9uX2VuYWJsZWRcclxuICAgICAgICAgID8gZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgICAgICB2YXIgdXBkYXRlZCwgYXJjRGF0YTtcclxuICAgICAgICAgICAgICBpZiAoJCQudHJhbnNpdGluZykge1xyXG4gICAgICAgICAgICAgICAgICAvLyBza2lwIHdoaWxlIHRyYW5zaXRpbmdcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB1cGRhdGVkID0gJCQudXBkYXRlQW5nbGUoZCk7XHJcbiAgICAgICAgICAgICAgaWYgKHVwZGF0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgYXJjRGF0YSA9ICQkLmNvbnZlcnRUb0FyY0RhdGEodXBkYXRlZCk7XHJcbiAgICAgICAgICAgICAgICAgIC8vIHRyYW5zaXRpb25zXHJcbiAgICAgICAgICAgICAgICAgICQkLnVuZXhwYW5kQXJjKHVwZGF0ZWQuZGF0YS5pZCk7XHJcbiAgICAgICAgICAgICAgICAgICQkLmFwaS5yZXZlcnQoKTtcclxuICAgICAgICAgICAgICAgICAgJCQucmV2ZXJ0TGVnZW5kKCk7XHJcbiAgICAgICAgICAgICAgICAgICQkLmhpZGVUb29sdGlwKCk7XHJcbiAgICAgICAgICAgICAgICAgICQkLmNvbmZpZy5kYXRhX29ubW91c2VvdXQoYXJjRGF0YSwgdGhpcyk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgOiBudWxsKVxyXG4gICAgICAgICAgLm9uKCdjbGljaycsIGNvbmZpZy5pbnRlcmFjdGlvbl9lbmFibGVkXHJcbiAgICAgICAgICA/IGZ1bmN0aW9uIChkLCBpKSB7XHJcbiAgICAgICAgICAgICAgdmFyIHVwZGF0ZWQgPSAkJC51cGRhdGVBbmdsZShkKSwgYXJjRGF0YTtcclxuICAgICAgICAgICAgICBpZiAodXBkYXRlZCkge1xyXG4gICAgICAgICAgICAgICAgICBhcmNEYXRhID0gJCQuY29udmVydFRvQXJjRGF0YSh1cGRhdGVkKTtcclxuICAgICAgICAgICAgICAgICAgaWYgKCQkLnRvZ2dsZVNoYXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAkJC50b2dnbGVTaGFwZSh0aGlzLCBhcmNEYXRhLCBpKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAkJC5jb25maWcuZGF0YV9vbmNsaWNrLmNhbGwoJCQuYXBpLCBhcmNEYXRhLCB0aGlzKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICA6IG51bGwpXHJcbiAgICAgICAgICAuZWFjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAkJC50cmFuc2l0aW5nID0gdHJ1ZTtcclxuICAgICAgfSlcclxuICAgICAgICAgIC50cmFuc2l0aW9uKClcclxuICAgICAgICAgIC5kdXJhdGlvbihkdXJhdGlvbilcclxuICAgICAgICAgIC5hdHRyVHdlZW4oJ2QnLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgdmFyIHVwZGF0ZWQgPSAkJC51cGRhdGVBbmdsZShkKSwgaW50ZXJwb2xhdGU7XHJcbiAgICAgICAgICBpZiAoIXVwZGF0ZWQpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gJ00gMCAwJztcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnQgPT09IGQpIHtcclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICB0aGlzLl9jdXJyZW50ID0ge1xyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICBzdGFydEFuZ2xlOiBNYXRoLlBJKjIsXHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgIGVuZEFuZ2xlOiBNYXRoLlBJKjIsXHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChpc05hTih0aGlzLl9jdXJyZW50LnN0YXJ0QW5nbGUpKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fY3VycmVudC5zdGFydEFuZ2xlID0gMDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChpc05hTih0aGlzLl9jdXJyZW50LmVuZEFuZ2xlKSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnQuZW5kQW5nbGUgPSB0aGlzLl9jdXJyZW50LnN0YXJ0QW5nbGU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpbnRlcnBvbGF0ZSA9IGQzLmludGVycG9sYXRlKHRoaXMuX2N1cnJlbnQsIHVwZGF0ZWQpO1xyXG4gICAgICAgICAgdGhpcy5fY3VycmVudCA9IGludGVycG9sYXRlKDApO1xyXG4gICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh0KSB7XHJcbiAgICAgICAgICAgICAgLy8gcHJldmVudHMgY3Jhc2hpbmcgdGhlIGNoYXJ0cyBvbmNlIGluIHRyYW5zaXRpb24gYW5kIGNoYXJ0LmRlc3Ryb3koKSBoYXMgYmVlbiBjYWxsZWRcclxuICAgICAgICAgICAgICBpZiAoJCQuY29uZmlnID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiAnTSAwIDAnO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB2YXIgaW50ZXJwb2xhdGVkID0gaW50ZXJwb2xhdGUodCk7XHJcbiAgICAgICAgICAgICAgaW50ZXJwb2xhdGVkLmRhdGEgPSBkLmRhdGE7IC8vIGRhdGEuaWQgd2lsbCBiZSB1cGRhdGVkIGJ5IGludGVycG9yYXRvclxyXG4gICAgICAgICAgICAgIHJldHVybiAkJC5nZXRBcmMoaW50ZXJwb2xhdGVkLCB0cnVlKTtcclxuICAgICAgICAgIH07XHJcbiAgICAgIH0pXHJcbiAgICAgICAgICAuYXR0cigndHJhbnNmb3JtJywgd2l0aFRyYW5zZm9ybSA/ICdzY2FsZSgxKScgOiAnJylcclxuICAgICAgICAgIC5zdHlsZSgnZmlsbCcsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICByZXR1cm4gJCQubGV2ZWxDb2xvclxyXG4gICAgICAgICAgICAgID8gJCQubGV2ZWxDb2xvcihkLmRhdGEudmFsdWVzLnJlZHVjZShmdW5jdGlvbiAodG90YWwsIGl0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRvdGFsICsgaXRlbS52YWx1ZTtcclxuICAgICAgICAgICAgICB9LCAwKSlcclxuICAgICAgICAgICAgICA6ICQkLmNvbG9yKGQuZGF0YS5pZCk7XHJcbiAgICAgIH0pIC8vIFdoZXJlIGdhdWdlIHJlYWRpbmcgY29sb3Igd291bGQgcmVjZWl2ZSBjdXN0b21pemF0aW9uLlxyXG4gICAgICAgICAgLmNhbGwoJCQuZW5kYWxsLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAkJC50cmFuc2l0aW5nID0gZmFsc2U7XHJcbiAgICAgIH0pO1xyXG4gICAgICBhcmNzXHJcbiAgICAgICAgICAuZXhpdCgpXHJcbiAgICAgICAgICAudHJhbnNpdGlvbigpXHJcbiAgICAgICAgICAuZHVyYXRpb24oZHVyYXRpb25Gb3JFeGl0KVxyXG4gICAgICAgICAgLnN0eWxlKCdvcGFjaXR5JywgMClcclxuICAgICAgICAgIC5yZW1vdmUoKTtcclxuICAgICAgbWFpblxyXG4gICAgICAgICAgLnNlbGVjdEFsbCgnLicgKyBDTEFTUy5jaGFydEFyYylcclxuICAgICAgICAgIC5zZWxlY3QoJ3RleHQnKVxyXG4gICAgICAgICAgLnN0eWxlKCdvcGFjaXR5JywgMClcclxuICAgICAgICAgIC5hdHRyKCdjbGFzcycsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICByZXR1cm4gJCQuaXNHYXVnZVR5cGUoZC5kYXRhKSA/IENMQVNTLmdhdWdlVmFsdWUgOiAnJztcclxuICAgICAgfSlcclxuICAgICAgICAgIC50ZXh0KCQkLnRleHRGb3JBcmNMYWJlbC5iaW5kKCQkKSlcclxuICAgICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAkJC50cmFuc2Zvcm1Gb3JBcmNMYWJlbC5iaW5kKCQkKSlcclxuICAgICAgICAgIC5zdHlsZSgnZm9udC1zaXplJywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIHJldHVybiAkJC5pc0dhdWdlVHlwZShkLmRhdGEpICYmXHJcbiAgICAgICAgICAgICAgJCQuZmlsdGVyVGFyZ2V0c1RvU2hvdygkJC5kYXRhLnRhcmdldHMpLmxlbmd0aCA9PT0gMVxyXG4gICAgICAgICAgICAgID8gTWF0aC5yb3VuZCgkJC5yYWRpdXMgLyA1KSArICdweCdcclxuICAgICAgICAgICAgICA6ICcnO1xyXG4gICAgICB9KVxyXG4gICAgICAgICAgLnRyYW5zaXRpb24oKVxyXG4gICAgICAgICAgLmR1cmF0aW9uKGR1cmF0aW9uKVxyXG4gICAgICAgICAgLnN0eWxlKCdvcGFjaXR5JywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIHJldHVybiAkJC5pc1RhcmdldFRvU2hvdyhkLmRhdGEuaWQpICYmICQkLmlzQXJjVHlwZShkLmRhdGEpID8gMSA6IDA7XHJcbiAgICAgIH0pO1xyXG4gICAgICBtYWluXHJcbiAgICAgICAgICAuc2VsZWN0KCcuJyArIENMQVNTLmNoYXJ0QXJjc1RpdGxlKVxyXG4gICAgICAgICAgLnN0eWxlKCdvcGFjaXR5JywgJCQuaGFzVHlwZSgnZG9udXQnKSB8fCBoYXNHYXVnZVR5cGUgPyAxIDogMCk7XHJcbiAgICAgIGlmIChoYXNHYXVnZVR5cGUpIHtcclxuICAgICAgICAgIHZhciBpbmRleF8xID0gMDtcclxuICAgICAgICAgIHZhciBiYWNrZ3JvdW5kQXJjID0gJCQuYXJjc1xyXG4gICAgICAgICAgICAgIC5zZWxlY3QoJ2cuJyArIENMQVNTLmNoYXJ0QXJjc0JhY2tncm91bmQpXHJcbiAgICAgICAgICAgICAgLnNlbGVjdEFsbCgncGF0aC4nICsgQ0xBU1MuY2hhcnRBcmNzQmFja2dyb3VuZClcclxuICAgICAgICAgICAgICAuZGF0YSgkJC5kYXRhLnRhcmdldHMpO1xyXG4gICAgICAgICAgYmFja2dyb3VuZEFyY1xyXG4gICAgICAgICAgICAgIC5lbnRlcigpXHJcbiAgICAgICAgICAgICAgLmFwcGVuZCgncGF0aCcpXHJcbiAgICAgICAgICAgICAgLmF0dHIoJ2NsYXNzJywgZnVuY3Rpb24gKGQsIGkpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gQ0xBU1MuY2hhcnRBcmNzQmFja2dyb3VuZCArICcgJyArIENMQVNTLmNoYXJ0QXJjc0JhY2tncm91bmQgKyAnLScgKyBpO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAubWVyZ2UoYmFja2dyb3VuZEFyYylcclxuICAgICAgICAgICAgICAuYXR0cignZCcsIGZ1bmN0aW9uIChkMSkge1xyXG4gICAgICAgICAgICAgIGlmICgkJC5oaWRkZW5UYXJnZXRJZHMuaW5kZXhPZihkMS5pZCkgPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gJ00gMCAwJztcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgdmFyIGQgPSB7XHJcbiAgICAgICAgICAgICAgICAgIGRhdGE6IFt7IHZhbHVlOiBjb25maWcuZ2F1Z2VfbWF4IH1dLFxyXG4gICAgICAgICAgICAgICAgICBzdGFydEFuZ2xlOiBjb25maWcuZ2F1Z2Vfc3RhcnRpbmdBbmdsZSxcclxuICAgICAgICAgICAgICAgICAgZW5kQW5nbGU6IC0xICpcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5nYXVnZV9zdGFydGluZ0FuZ2xlICpcclxuICAgICAgICAgICAgICAgICAgICAgIChjb25maWcuZ2F1Z2VfZnVsbENpcmNsZSA/IE1hdGguUEkgOiAxKSxcclxuICAgICAgICAgICAgICAgICAgaW5kZXg6IGluZGV4XzErK1xyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgcmV0dXJuICQkLmdldEFyYyhkLCB0cnVlLCB0cnVlKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgYmFja2dyb3VuZEFyYy5leGl0KCkucmVtb3ZlKCk7XHJcbiAgICAgICAgICAkJC5hcmNzXHJcbiAgICAgICAgICAgICAgLnNlbGVjdCgnLicgKyBDTEFTUy5jaGFydEFyY3NHYXVnZVVuaXQpXHJcbiAgICAgICAgICAgICAgLmF0dHIoJ2R5JywgJy43NWVtJylcclxuICAgICAgICAgICAgICAudGV4dChjb25maWcuZ2F1Z2VfbGFiZWxfc2hvdyA/IGNvbmZpZy5nYXVnZV91bml0cyA6ICcnKTtcclxuICAgICAgICAgICQkLmFyY3NcclxuICAgICAgICAgICAgICAuc2VsZWN0KCcuJyArIENMQVNTLmNoYXJ0QXJjc0dhdWdlTWluKVxyXG4gICAgICAgICAgICAgIC5hdHRyKCdkeCcsIC0xICpcclxuICAgICAgICAgICAgICAoJCQuaW5uZXJSYWRpdXMgK1xyXG4gICAgICAgICAgICAgICAgICAoJCQucmFkaXVzIC0gJCQuaW5uZXJSYWRpdXMpIC8gKGNvbmZpZy5nYXVnZV9mdWxsQ2lyY2xlID8gMSA6IDIpKSArXHJcbiAgICAgICAgICAgICAgJ3B4JylcclxuICAgICAgICAgICAgICAuYXR0cignZHknLCAnMS4yZW0nKVxyXG4gICAgICAgICAgICAgIC50ZXh0KGNvbmZpZy5nYXVnZV9sYWJlbF9zaG93XHJcbiAgICAgICAgICAgICAgPyAkJC50ZXh0Rm9yR2F1Z2VNaW5NYXgoY29uZmlnLmdhdWdlX21pbiwgZmFsc2UpXHJcbiAgICAgICAgICAgICAgOiAnJyk7XHJcbiAgICAgICAgICAkJC5hcmNzXHJcbiAgICAgICAgICAgICAgLnNlbGVjdCgnLicgKyBDTEFTUy5jaGFydEFyY3NHYXVnZU1heClcclxuICAgICAgICAgICAgICAuYXR0cignZHgnLCAkJC5pbm5lclJhZGl1cyArXHJcbiAgICAgICAgICAgICAgKCQkLnJhZGl1cyAtICQkLmlubmVyUmFkaXVzKSAvIChjb25maWcuZ2F1Z2VfZnVsbENpcmNsZSA/IDEgOiAyKSArXHJcbiAgICAgICAgICAgICAgJ3B4JylcclxuICAgICAgICAgICAgICAuYXR0cignZHknLCAnMS4yZW0nKVxyXG4gICAgICAgICAgICAgIC50ZXh0KGNvbmZpZy5nYXVnZV9sYWJlbF9zaG93XHJcbiAgICAgICAgICAgICAgPyAkJC50ZXh0Rm9yR2F1Z2VNaW5NYXgoY29uZmlnLmdhdWdlX21heCwgdHJ1ZSlcclxuICAgICAgICAgICAgICA6ICcnKTtcclxuICAgICAgfVxyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuaW5pdEdhdWdlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgYXJjcyA9IHRoaXMuYXJjcztcclxuICAgICAgaWYgKHRoaXMuaGFzVHlwZSgnZ2F1Z2UnKSkge1xyXG4gICAgICAgICAgYXJjcy5hcHBlbmQoJ2cnKS5hdHRyKCdjbGFzcycsIENMQVNTLmNoYXJ0QXJjc0JhY2tncm91bmQpO1xyXG4gICAgICAgICAgYXJjc1xyXG4gICAgICAgICAgICAgIC5hcHBlbmQoJ3RleHQnKVxyXG4gICAgICAgICAgICAgIC5hdHRyKCdjbGFzcycsIENMQVNTLmNoYXJ0QXJjc0dhdWdlVW5pdClcclxuICAgICAgICAgICAgICAuc3R5bGUoJ3RleHQtYW5jaG9yJywgJ21pZGRsZScpXHJcbiAgICAgICAgICAgICAgLnN0eWxlKCdwb2ludGVyLWV2ZW50cycsICdub25lJyk7XHJcbiAgICAgICAgICBhcmNzXHJcbiAgICAgICAgICAgICAgLmFwcGVuZCgndGV4dCcpXHJcbiAgICAgICAgICAgICAgLmF0dHIoJ2NsYXNzJywgQ0xBU1MuY2hhcnRBcmNzR2F1Z2VNaW4pXHJcbiAgICAgICAgICAgICAgLnN0eWxlKCd0ZXh0LWFuY2hvcicsICdtaWRkbGUnKVxyXG4gICAgICAgICAgICAgIC5zdHlsZSgncG9pbnRlci1ldmVudHMnLCAnbm9uZScpO1xyXG4gICAgICAgICAgYXJjc1xyXG4gICAgICAgICAgICAgIC5hcHBlbmQoJ3RleHQnKVxyXG4gICAgICAgICAgICAgIC5hdHRyKCdjbGFzcycsIENMQVNTLmNoYXJ0QXJjc0dhdWdlTWF4KVxyXG4gICAgICAgICAgICAgIC5zdHlsZSgndGV4dC1hbmNob3InLCAnbWlkZGxlJylcclxuICAgICAgICAgICAgICAuc3R5bGUoJ3BvaW50ZXItZXZlbnRzJywgJ25vbmUnKTtcclxuICAgICAgfVxyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuZ2V0R2F1Z2VMYWJlbEhlaWdodCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuY29uZmlnLmdhdWdlX2xhYmVsX3Nob3cgPyAyMCA6IDA7XHJcbiAgfTtcblxuICAvKipcclxuICAgKiBTdG9yZSB2YWx1ZSBpbnRvIGNhY2hlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ga2V5XHJcbiAgICogQHBhcmFtIHZhbHVlXHJcbiAgICovXHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuYWRkVG9DYWNoZSA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XHJcbiAgICAgIHRoaXMuY2FjaGVbXCIkXCIgKyBrZXldID0gdmFsdWU7XHJcbiAgfTtcclxuICAvKipcclxuICAgKiBSZXR1cm5zIGEgY2FjaGVkIHZhbHVlIG9yIHVuZGVmaW5lZFxyXG4gICAqXHJcbiAgICogQHBhcmFtIGtleVxyXG4gICAqIEByZXR1cm4geyp9XHJcbiAgICovXHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuZ2V0RnJvbUNhY2hlID0gZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5jYWNoZVtcIiRcIiArIGtleV07XHJcbiAgfTtcclxuICAvKipcclxuICAgKiBSZXNldCBjYWNoZWQgZGF0YVxyXG4gICAqL1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLnJlc2V0Q2FjaGUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgIE9iamVjdC5rZXlzKHRoaXMuY2FjaGUpXHJcbiAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIC9eXFwkLy50ZXN0KGtleSk7IH0pXHJcbiAgICAgICAgICAuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICAgICAgICBkZWxldGUgX3RoaXMuY2FjaGVba2V5XTtcclxuICAgICAgfSk7XHJcbiAgfTtcclxuICAvLyBPbGQgQVBJIHRoYXQgc3RvcmVzIFRhcmdldHNcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5oYXNDYWNoZXMgPSBmdW5jdGlvbiAoaWRzKSB7XHJcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBpZiAoIShpZHNbaV0gaW4gdGhpcy5jYWNoZSkpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5hZGRDYWNoZSA9IGZ1bmN0aW9uIChpZCwgdGFyZ2V0KSB7XHJcbiAgICAgIHRoaXMuY2FjaGVbaWRdID0gdGhpcy5jbG9uZVRhcmdldCh0YXJnZXQpO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuZ2V0Q2FjaGVzID0gZnVuY3Rpb24gKGlkcykge1xyXG4gICAgICB2YXIgdGFyZ2V0cyA9IFtdLCBpO1xyXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBpZiAoaWRzW2ldIGluIHRoaXMuY2FjaGUpIHtcclxuICAgICAgICAgICAgICB0YXJnZXRzLnB1c2godGhpcy5jbG9uZVRhcmdldCh0aGlzLmNhY2hlW2lkc1tpXV0pKTtcclxuICAgICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdGFyZ2V0cztcclxuICB9O1xuXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmNhdGVnb3J5TmFtZSA9IGZ1bmN0aW9uIChpKSB7XHJcbiAgICAgIHZhciBjb25maWcgPSB0aGlzLmNvbmZpZztcclxuICAgICAgcmV0dXJuIGkgPCBjb25maWcuYXhpc194X2NhdGVnb3JpZXMubGVuZ3RoID8gY29uZmlnLmF4aXNfeF9jYXRlZ29yaWVzW2ldIDogaTtcclxuICB9O1xuXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmdlbmVyYXRlVGFyZ2V0Q2xhc3MgPSBmdW5jdGlvbiAodGFyZ2V0SWQpIHtcclxuICAgICAgcmV0dXJuIHRhcmdldElkIHx8IHRhcmdldElkID09PSAwID8gKCctJyArIHRhcmdldElkKS5yZXBsYWNlKC9cXHMvZywgJy0nKSA6ICcnO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuZ2VuZXJhdGVDbGFzcyA9IGZ1bmN0aW9uIChwcmVmaXgsIHRhcmdldElkKSB7XHJcbiAgICAgIHJldHVybiAnICcgKyBwcmVmaXggKyAnICcgKyBwcmVmaXggKyB0aGlzLmdlbmVyYXRlVGFyZ2V0Q2xhc3ModGFyZ2V0SWQpO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuY2xhc3NUZXh0ID0gZnVuY3Rpb24gKGQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZ2VuZXJhdGVDbGFzcyhDTEFTUy50ZXh0LCBkLmluZGV4KTtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmNsYXNzVGV4dHMgPSBmdW5jdGlvbiAoZCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5nZW5lcmF0ZUNsYXNzKENMQVNTLnRleHRzLCBkLmlkKTtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmNsYXNzU2hhcGUgPSBmdW5jdGlvbiAoZCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5nZW5lcmF0ZUNsYXNzKENMQVNTLnNoYXBlLCBkLmluZGV4KTtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmNsYXNzU2hhcGVzID0gZnVuY3Rpb24gKGQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZ2VuZXJhdGVDbGFzcyhDTEFTUy5zaGFwZXMsIGQuaWQpO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuY2xhc3NMaW5lID0gZnVuY3Rpb24gKGQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuY2xhc3NTaGFwZShkKSArIHRoaXMuZ2VuZXJhdGVDbGFzcyhDTEFTUy5saW5lLCBkLmlkKTtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmNsYXNzTGluZXMgPSBmdW5jdGlvbiAoZCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5jbGFzc1NoYXBlcyhkKSArIHRoaXMuZ2VuZXJhdGVDbGFzcyhDTEFTUy5saW5lcywgZC5pZCk7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5jbGFzc0NpcmNsZSA9IGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmNsYXNzU2hhcGUoZCkgKyB0aGlzLmdlbmVyYXRlQ2xhc3MoQ0xBU1MuY2lyY2xlLCBkLmluZGV4KTtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmNsYXNzQ2lyY2xlcyA9IGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmNsYXNzU2hhcGVzKGQpICsgdGhpcy5nZW5lcmF0ZUNsYXNzKENMQVNTLmNpcmNsZXMsIGQuaWQpO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuY2xhc3NCYXIgPSBmdW5jdGlvbiAoZCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5jbGFzc1NoYXBlKGQpICsgdGhpcy5nZW5lcmF0ZUNsYXNzKENMQVNTLmJhciwgZC5pbmRleCk7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5jbGFzc0JhcnMgPSBmdW5jdGlvbiAoZCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5jbGFzc1NoYXBlcyhkKSArIHRoaXMuZ2VuZXJhdGVDbGFzcyhDTEFTUy5iYXJzLCBkLmlkKTtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmNsYXNzQXJjID0gZnVuY3Rpb24gKGQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuY2xhc3NTaGFwZShkLmRhdGEpICsgdGhpcy5nZW5lcmF0ZUNsYXNzKENMQVNTLmFyYywgZC5kYXRhLmlkKTtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmNsYXNzQXJjcyA9IGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmNsYXNzU2hhcGVzKGQuZGF0YSkgKyB0aGlzLmdlbmVyYXRlQ2xhc3MoQ0xBU1MuYXJjcywgZC5kYXRhLmlkKTtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmNsYXNzQXJlYSA9IGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmNsYXNzU2hhcGUoZCkgKyB0aGlzLmdlbmVyYXRlQ2xhc3MoQ0xBU1MuYXJlYSwgZC5pZCk7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5jbGFzc0FyZWFzID0gZnVuY3Rpb24gKGQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuY2xhc3NTaGFwZXMoZCkgKyB0aGlzLmdlbmVyYXRlQ2xhc3MoQ0xBU1MuYXJlYXMsIGQuaWQpO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuY2xhc3NSZWdpb24gPSBmdW5jdGlvbiAoZCwgaSkge1xyXG4gICAgICByZXR1cm4gKHRoaXMuZ2VuZXJhdGVDbGFzcyhDTEFTUy5yZWdpb24sIGkpICsgJyAnICsgKCdjbGFzcycgaW4gZCA/IGRbJ2NsYXNzJ10gOiAnJykpO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuY2xhc3NFdmVudCA9IGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmdlbmVyYXRlQ2xhc3MoQ0xBU1MuZXZlbnRSZWN0LCBkLmluZGV4KTtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmNsYXNzVGFyZ2V0ID0gZnVuY3Rpb24gKGlkKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXM7XHJcbiAgICAgIHZhciBhZGRpdGlvbmFsQ2xhc3NTdWZmaXggPSAkJC5jb25maWcuZGF0YV9jbGFzc2VzW2lkXSwgYWRkaXRpb25hbENsYXNzID0gJyc7XHJcbiAgICAgIGlmIChhZGRpdGlvbmFsQ2xhc3NTdWZmaXgpIHtcclxuICAgICAgICAgIGFkZGl0aW9uYWxDbGFzcyA9ICcgJyArIENMQVNTLnRhcmdldCArICctJyArIGFkZGl0aW9uYWxDbGFzc1N1ZmZpeDtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gJCQuZ2VuZXJhdGVDbGFzcyhDTEFTUy50YXJnZXQsIGlkKSArIGFkZGl0aW9uYWxDbGFzcztcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmNsYXNzRm9jdXMgPSBmdW5jdGlvbiAoZCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5jbGFzc0ZvY3VzZWQoZCkgKyB0aGlzLmNsYXNzRGVmb2N1c2VkKGQpO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuY2xhc3NGb2N1c2VkID0gZnVuY3Rpb24gKGQpIHtcclxuICAgICAgcmV0dXJuICcgJyArICh0aGlzLmZvY3VzZWRUYXJnZXRJZHMuaW5kZXhPZihkLmlkKSA+PSAwID8gQ0xBU1MuZm9jdXNlZCA6ICcnKTtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmNsYXNzRGVmb2N1c2VkID0gZnVuY3Rpb24gKGQpIHtcclxuICAgICAgcmV0dXJuICgnICcgKyAodGhpcy5kZWZvY3VzZWRUYXJnZXRJZHMuaW5kZXhPZihkLmlkKSA+PSAwID8gQ0xBU1MuZGVmb2N1c2VkIDogJycpKTtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmNsYXNzQ2hhcnRUZXh0ID0gZnVuY3Rpb24gKGQpIHtcclxuICAgICAgcmV0dXJuIENMQVNTLmNoYXJ0VGV4dCArIHRoaXMuY2xhc3NUYXJnZXQoZC5pZCk7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5jbGFzc0NoYXJ0TGluZSA9IGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgIHJldHVybiBDTEFTUy5jaGFydExpbmUgKyB0aGlzLmNsYXNzVGFyZ2V0KGQuaWQpO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuY2xhc3NDaGFydEJhciA9IGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgIHJldHVybiBDTEFTUy5jaGFydEJhciArIHRoaXMuY2xhc3NUYXJnZXQoZC5pZCk7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5jbGFzc0NoYXJ0QXJjID0gZnVuY3Rpb24gKGQpIHtcclxuICAgICAgcmV0dXJuIENMQVNTLmNoYXJ0QXJjICsgdGhpcy5jbGFzc1RhcmdldChkLmRhdGEuaWQpO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuZ2V0VGFyZ2V0U2VsZWN0b3JTdWZmaXggPSBmdW5jdGlvbiAodGFyZ2V0SWQpIHtcclxuICAgICAgdmFyIHRhcmdldENsYXNzID0gdGhpcy5nZW5lcmF0ZVRhcmdldENsYXNzKHRhcmdldElkKTtcclxuICAgICAgaWYgKHdpbmRvdy5DU1MgJiYgd2luZG93LkNTUy5lc2NhcGUpIHtcclxuICAgICAgICAgIHJldHVybiB3aW5kb3cuQ1NTLmVzY2FwZSh0YXJnZXRDbGFzcyk7XHJcbiAgICAgIH1cclxuICAgICAgLy8gZmFsbGJhY2sgb24gaW1wZXJmZWN0IG1ldGhvZCBmb3Igb2xkIGJyb3dzZXJzIChkb2VzIG5vdCBoYW5kbGVzIHVuaWNvZGUpXHJcbiAgICAgIHJldHVybiB0YXJnZXRDbGFzcy5yZXBsYWNlKC8oWz8hQCMkJV4mKigpPSssLjw+J1wiOjtcXFtcXF1cXC98fmB7fVxcXFxdKS9nLCAnXFxcXCQxJyk7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5zZWxlY3RvclRhcmdldCA9IGZ1bmN0aW9uIChpZCwgcHJlZml4KSB7XHJcbiAgICAgIHJldHVybiAocHJlZml4IHx8ICcnKSArICcuJyArIENMQVNTLnRhcmdldCArIHRoaXMuZ2V0VGFyZ2V0U2VsZWN0b3JTdWZmaXgoaWQpO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuc2VsZWN0b3JUYXJnZXRzID0gZnVuY3Rpb24gKGlkcywgcHJlZml4KSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXM7XHJcbiAgICAgIGlkcyA9IGlkcyB8fCBbXTtcclxuICAgICAgcmV0dXJuIGlkcy5sZW5ndGhcclxuICAgICAgICAgID8gaWRzLm1hcChmdW5jdGlvbiAoaWQpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gJCQuc2VsZWN0b3JUYXJnZXQoaWQsIHByZWZpeCk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgOiBudWxsO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuc2VsZWN0b3JMZWdlbmQgPSBmdW5jdGlvbiAoaWQpIHtcclxuICAgICAgcmV0dXJuICcuJyArIENMQVNTLmxlZ2VuZEl0ZW0gKyB0aGlzLmdldFRhcmdldFNlbGVjdG9yU3VmZml4KGlkKTtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLnNlbGVjdG9yTGVnZW5kcyA9IGZ1bmN0aW9uIChpZHMpIHtcclxuICAgICAgdmFyICQkID0gdGhpcztcclxuICAgICAgcmV0dXJuIGlkcyAmJiBpZHMubGVuZ3RoXHJcbiAgICAgICAgICA/IGlkcy5tYXAoZnVuY3Rpb24gKGlkKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuICQkLnNlbGVjdG9yTGVnZW5kKGlkKTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICA6IG51bGw7XHJcbiAgfTtcblxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5nZXRDbGlwUGF0aCA9IGZ1bmN0aW9uIChpZCkge1xyXG4gICAgICByZXR1cm4gJ3VybCgnICsgKGlzSUUoOSkgPyAnJyA6IGRvY3VtZW50LlVSTC5zcGxpdCgnIycpWzBdKSArICcjJyArIGlkICsgJyknO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuYXBwZW5kQ2xpcCA9IGZ1bmN0aW9uIChwYXJlbnQsIGlkKSB7XHJcbiAgICAgIHJldHVybiBwYXJlbnRcclxuICAgICAgICAgIC5hcHBlbmQoJ2NsaXBQYXRoJylcclxuICAgICAgICAgIC5hdHRyKCdpZCcsIGlkKVxyXG4gICAgICAgICAgLmFwcGVuZCgncmVjdCcpO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuZ2V0QXhpc0NsaXBYID0gZnVuY3Rpb24gKGZvckhvcml6b250YWwpIHtcclxuICAgICAgLy8gYXhpcyBsaW5lIHdpZHRoICsgcGFkZGluZyBmb3IgbGVmdFxyXG4gICAgICB2YXIgbGVmdCA9IE1hdGgubWF4KDMwLCB0aGlzLm1hcmdpbi5sZWZ0KTtcclxuICAgICAgcmV0dXJuIGZvckhvcml6b250YWwgPyAtKDEgKyBsZWZ0KSA6IC0obGVmdCAtIDEpO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuZ2V0QXhpc0NsaXBZID0gZnVuY3Rpb24gKGZvckhvcml6b250YWwpIHtcclxuICAgICAgcmV0dXJuIGZvckhvcml6b250YWwgPyAtMjAgOiAtdGhpcy5tYXJnaW4udG9wO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuZ2V0WEF4aXNDbGlwWCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgdmFyICQkID0gdGhpcztcclxuICAgICAgcmV0dXJuICQkLmdldEF4aXNDbGlwWCghJCQuY29uZmlnLmF4aXNfcm90YXRlZCk7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5nZXRYQXhpc0NsaXBZID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzO1xyXG4gICAgICByZXR1cm4gJCQuZ2V0QXhpc0NsaXBZKCEkJC5jb25maWcuYXhpc19yb3RhdGVkKTtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmdldFlBeGlzQ2xpcFggPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXM7XHJcbiAgICAgIHJldHVybiAkJC5jb25maWcuYXhpc195X2lubmVyID8gLTEgOiAkJC5nZXRBeGlzQ2xpcFgoJCQuY29uZmlnLmF4aXNfcm90YXRlZCk7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5nZXRZQXhpc0NsaXBZID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzO1xyXG4gICAgICByZXR1cm4gJCQuZ2V0QXhpc0NsaXBZKCQkLmNvbmZpZy5heGlzX3JvdGF0ZWQpO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuZ2V0QXhpc0NsaXBXaWR0aCA9IGZ1bmN0aW9uIChmb3JIb3Jpem9udGFsKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXMsIGxlZnQgPSBNYXRoLm1heCgzMCwgJCQubWFyZ2luLmxlZnQpLCByaWdodCA9IE1hdGgubWF4KDMwLCAkJC5tYXJnaW4ucmlnaHQpO1xyXG4gICAgICAvLyB3aWR0aCArIGF4aXMgbGluZSB3aWR0aCArIHBhZGRpbmcgZm9yIGxlZnQvcmlnaHRcclxuICAgICAgcmV0dXJuIGZvckhvcml6b250YWwgPyAkJC53aWR0aCArIDIgKyBsZWZ0ICsgcmlnaHQgOiAkJC5tYXJnaW4ubGVmdCArIDIwO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuZ2V0QXhpc0NsaXBIZWlnaHQgPSBmdW5jdGlvbiAoZm9ySG9yaXpvbnRhbCkge1xyXG4gICAgICAvLyBsZXNzIHRoYW4gMjAgaXMgbm90IGVub3VnaCB0byBzaG93IHRoZSBheGlzIGxhYmVsICdvdXRlcicgd2l0aG91dCBsZWdlbmRcclxuICAgICAgcmV0dXJuICgoZm9ySG9yaXpvbnRhbCA/IHRoaXMubWFyZ2luLmJvdHRvbSA6IHRoaXMubWFyZ2luLnRvcCArIHRoaXMuaGVpZ2h0KSArIDIwKTtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmdldFhBeGlzQ2xpcFdpZHRoID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzO1xyXG4gICAgICByZXR1cm4gJCQuZ2V0QXhpc0NsaXBXaWR0aCghJCQuY29uZmlnLmF4aXNfcm90YXRlZCk7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5nZXRYQXhpc0NsaXBIZWlnaHQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXM7XHJcbiAgICAgIHJldHVybiAkJC5nZXRBeGlzQ2xpcEhlaWdodCghJCQuY29uZmlnLmF4aXNfcm90YXRlZCk7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5nZXRZQXhpc0NsaXBXaWR0aCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgdmFyICQkID0gdGhpcztcclxuICAgICAgcmV0dXJuICgkJC5nZXRBeGlzQ2xpcFdpZHRoKCQkLmNvbmZpZy5heGlzX3JvdGF0ZWQpICtcclxuICAgICAgICAgICgkJC5jb25maWcuYXhpc195X2lubmVyID8gMjAgOiAwKSk7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5nZXRZQXhpc0NsaXBIZWlnaHQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXM7XHJcbiAgICAgIHJldHVybiAkJC5nZXRBeGlzQ2xpcEhlaWdodCgkJC5jb25maWcuYXhpc19yb3RhdGVkKTtcclxuICB9O1xuXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmdlbmVyYXRlQ29sb3IgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXMsIGNvbmZpZyA9ICQkLmNvbmZpZywgZDMgPSAkJC5kMywgY29sb3JzID0gY29uZmlnLmRhdGFfY29sb3JzLCBwYXR0ZXJuID0gbm90RW1wdHkoY29uZmlnLmNvbG9yX3BhdHRlcm4pXHJcbiAgICAgICAgICA/IGNvbmZpZy5jb2xvcl9wYXR0ZXJuXHJcbiAgICAgICAgICA6IGQzLnNjaGVtZUNhdGVnb3J5MTAsIGNhbGxiYWNrID0gY29uZmlnLmRhdGFfY29sb3IsIGlkcyA9IFtdO1xyXG4gICAgICByZXR1cm4gZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIHZhciBpZCA9IGQuaWQgfHwgKGQuZGF0YSAmJiBkLmRhdGEuaWQpIHx8IGQsIGNvbG9yO1xyXG4gICAgICAgICAgLy8gaWYgY2FsbGJhY2sgZnVuY3Rpb24gaXMgcHJvdmlkZWRcclxuICAgICAgICAgIGlmIChjb2xvcnNbaWRdIGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcclxuICAgICAgICAgICAgICBjb2xvciA9IGNvbG9yc1tpZF0oZCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvLyBpZiBzcGVjaWZpZWQsIGNob29zZSB0aGF0IGNvbG9yXHJcbiAgICAgICAgICBlbHNlIGlmIChjb2xvcnNbaWRdKSB7XHJcbiAgICAgICAgICAgICAgY29sb3IgPSBjb2xvcnNbaWRdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gaWYgbm90IHNwZWNpZmllZCwgY2hvb3NlIGZyb20gcGF0dGVyblxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgaWYgKGlkcy5pbmRleE9mKGlkKSA8IDApIHtcclxuICAgICAgICAgICAgICAgICAgaWRzLnB1c2goaWQpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBjb2xvciA9IHBhdHRlcm5baWRzLmluZGV4T2YoaWQpICUgcGF0dGVybi5sZW5ndGhdO1xyXG4gICAgICAgICAgICAgIGNvbG9yc1tpZF0gPSBjb2xvcjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBjYWxsYmFjayBpbnN0YW5jZW9mIEZ1bmN0aW9uID8gY2FsbGJhY2soY29sb3IsIGQpIDogY29sb3I7XHJcbiAgICAgIH07XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5nZW5lcmF0ZUxldmVsQ29sb3IgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXMsIGNvbmZpZyA9ICQkLmNvbmZpZywgY29sb3JzID0gY29uZmlnLmNvbG9yX3BhdHRlcm4sIHRocmVzaG9sZCA9IGNvbmZpZy5jb2xvcl90aHJlc2hvbGQsIGFzVmFsdWUgPSB0aHJlc2hvbGQudW5pdCA9PT0gJ3ZhbHVlJywgdmFsdWVzID0gdGhyZXNob2xkLnZhbHVlcyAmJiB0aHJlc2hvbGQudmFsdWVzLmxlbmd0aCA/IHRocmVzaG9sZC52YWx1ZXMgOiBbXSwgbWF4ID0gdGhyZXNob2xkLm1heCB8fCAxMDA7XHJcbiAgICAgIHJldHVybiBub3RFbXB0eSh0aHJlc2hvbGQpICYmIG5vdEVtcHR5KGNvbG9ycylcclxuICAgICAgICAgID8gZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgdmFyIGksIHYsIGNvbG9yID0gY29sb3JzW2NvbG9ycy5sZW5ndGggLSAxXTtcclxuICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgIHYgPSBhc1ZhbHVlID8gdmFsdWUgOiAodmFsdWUgKiAxMDApIC8gbWF4O1xyXG4gICAgICAgICAgICAgICAgICBpZiAodiA8IHZhbHVlc1tpXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgY29sb3IgPSBjb2xvcnNbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICByZXR1cm4gY29sb3I7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICA6IG51bGw7XHJcbiAgfTtcblxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5nZXREZWZhdWx0Q29uZmlnID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgY29uZmlnID0ge1xyXG4gICAgICAgICAgYmluZHRvOiAnI2NoYXJ0JyxcclxuICAgICAgICAgIHN2Z19jbGFzc25hbWU6IHVuZGVmaW5lZCxcclxuICAgICAgICAgIHNpemVfd2lkdGg6IHVuZGVmaW5lZCxcclxuICAgICAgICAgIHNpemVfaGVpZ2h0OiB1bmRlZmluZWQsXHJcbiAgICAgICAgICBwYWRkaW5nX2xlZnQ6IHVuZGVmaW5lZCxcclxuICAgICAgICAgIHBhZGRpbmdfcmlnaHQ6IHVuZGVmaW5lZCxcclxuICAgICAgICAgIHBhZGRpbmdfdG9wOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICBwYWRkaW5nX2JvdHRvbTogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgcmVzaXplX2F1dG86IHRydWUsXHJcbiAgICAgICAgICB6b29tX2VuYWJsZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgem9vbV9pbml0aWFsUmFuZ2U6IHVuZGVmaW5lZCxcclxuICAgICAgICAgIHpvb21fdHlwZTogJ3Njcm9sbCcsXHJcbiAgICAgICAgICB6b29tX2Rpc2FibGVEZWZhdWx0QmVoYXZpb3I6IGZhbHNlLFxyXG4gICAgICAgICAgem9vbV9wcml2aWxlZ2VkOiBmYWxzZSxcclxuICAgICAgICAgIHpvb21fcmVzY2FsZTogZmFsc2UsXHJcbiAgICAgICAgICB6b29tX29uem9vbTogZnVuY3Rpb24gKCkgeyB9LFxyXG4gICAgICAgICAgem9vbV9vbnpvb21zdGFydDogZnVuY3Rpb24gKCkgeyB9LFxyXG4gICAgICAgICAgem9vbV9vbnpvb21lbmQ6IGZ1bmN0aW9uICgpIHsgfSxcclxuICAgICAgICAgIHpvb21feF9taW46IHVuZGVmaW5lZCxcclxuICAgICAgICAgIHpvb21feF9tYXg6IHVuZGVmaW5lZCxcclxuICAgICAgICAgIGludGVyYWN0aW9uX2JyaWdodGVuOiB0cnVlLFxyXG4gICAgICAgICAgaW50ZXJhY3Rpb25fZW5hYmxlZDogdHJ1ZSxcclxuICAgICAgICAgIG9ubW91c2VvdmVyOiBmdW5jdGlvbiAoKSB7IH0sXHJcbiAgICAgICAgICBvbm1vdXNlb3V0OiBmdW5jdGlvbiAoKSB7IH0sXHJcbiAgICAgICAgICBvbnJlc2l6ZTogZnVuY3Rpb24gKCkgeyB9LFxyXG4gICAgICAgICAgb25yZXNpemVkOiBmdW5jdGlvbiAoKSB7IH0sXHJcbiAgICAgICAgICBvbmluaXQ6IGZ1bmN0aW9uICgpIHsgfSxcclxuICAgICAgICAgIG9ucmVuZGVyZWQ6IGZ1bmN0aW9uICgpIHsgfSxcclxuICAgICAgICAgIHRyYW5zaXRpb25fZHVyYXRpb246IDM1MCxcclxuICAgICAgICAgIGRhdGFfZXBvY2hzOiAnZXBvY2hzJyxcclxuICAgICAgICAgIGRhdGFfeDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgZGF0YV94czoge30sXHJcbiAgICAgICAgICBkYXRhX3hGb3JtYXQ6ICclWS0lbS0lZCcsXHJcbiAgICAgICAgICBkYXRhX3hMb2NhbHRpbWU6IHRydWUsXHJcbiAgICAgICAgICBkYXRhX3hTb3J0OiB0cnVlLFxyXG4gICAgICAgICAgZGF0YV9pZENvbnZlcnRlcjogZnVuY3Rpb24gKGlkKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGlkO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGRhdGFfbmFtZXM6IHt9LFxyXG4gICAgICAgICAgZGF0YV9jbGFzc2VzOiB7fSxcclxuICAgICAgICAgIGRhdGFfZ3JvdXBzOiBbXSxcclxuICAgICAgICAgIGRhdGFfYXhlczoge30sXHJcbiAgICAgICAgICBkYXRhX3R5cGU6IHVuZGVmaW5lZCxcclxuICAgICAgICAgIGRhdGFfdHlwZXM6IHt9LFxyXG4gICAgICAgICAgZGF0YV9sYWJlbHM6IHt9LFxyXG4gICAgICAgICAgZGF0YV9vcmRlcjogJ2Rlc2MnLFxyXG4gICAgICAgICAgZGF0YV9yZWdpb25zOiB7fSxcclxuICAgICAgICAgIGRhdGFfY29sb3I6IHVuZGVmaW5lZCxcclxuICAgICAgICAgIGRhdGFfY29sb3JzOiB7fSxcclxuICAgICAgICAgIGRhdGFfaGlkZTogZmFsc2UsXHJcbiAgICAgICAgICBkYXRhX2ZpbHRlcjogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgZGF0YV9zZWxlY3Rpb25fZW5hYmxlZDogZmFsc2UsXHJcbiAgICAgICAgICBkYXRhX3NlbGVjdGlvbl9ncm91cGVkOiBmYWxzZSxcclxuICAgICAgICAgIGRhdGFfc2VsZWN0aW9uX2lzc2VsZWN0YWJsZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGRhdGFfc2VsZWN0aW9uX211bHRpcGxlOiB0cnVlLFxyXG4gICAgICAgICAgZGF0YV9zZWxlY3Rpb25fZHJhZ2dhYmxlOiBmYWxzZSxcclxuICAgICAgICAgIGRhdGFfc3RhY2tfbm9ybWFsaXplOiBmYWxzZSxcclxuICAgICAgICAgIGRhdGFfb25jbGljazogZnVuY3Rpb24gKCkgeyB9LFxyXG4gICAgICAgICAgZGF0YV9vbm1vdXNlb3ZlcjogZnVuY3Rpb24gKCkgeyB9LFxyXG4gICAgICAgICAgZGF0YV9vbm1vdXNlb3V0OiBmdW5jdGlvbiAoKSB7IH0sXHJcbiAgICAgICAgICBkYXRhX29uc2VsZWN0ZWQ6IGZ1bmN0aW9uICgpIHsgfSxcclxuICAgICAgICAgIGRhdGFfb251bnNlbGVjdGVkOiBmdW5jdGlvbiAoKSB7IH0sXHJcbiAgICAgICAgICBkYXRhX3VybDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgZGF0YV9oZWFkZXJzOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICBkYXRhX2pzb246IHVuZGVmaW5lZCxcclxuICAgICAgICAgIGRhdGFfcm93czogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgZGF0YV9jb2x1bW5zOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICBkYXRhX21pbWVUeXBlOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICBkYXRhX2tleXM6IHVuZGVmaW5lZCxcclxuICAgICAgICAgIC8vIGNvbmZpZ3VyYXRpb24gZm9yIG5vIHBsb3QtYWJsZSBkYXRhIHN1cHBsaWVkLlxyXG4gICAgICAgICAgZGF0YV9lbXB0eV9sYWJlbF90ZXh0OiAnJyxcclxuICAgICAgICAgIC8vIHN1YmNoYXJ0XHJcbiAgICAgICAgICBzdWJjaGFydF9zaG93OiBmYWxzZSxcclxuICAgICAgICAgIHN1YmNoYXJ0X3NpemVfaGVpZ2h0OiA2MCxcclxuICAgICAgICAgIHN1YmNoYXJ0X2F4aXNfeF9zaG93OiB0cnVlLFxyXG4gICAgICAgICAgc3ViY2hhcnRfb25icnVzaDogZnVuY3Rpb24gKCkgeyB9LFxyXG4gICAgICAgICAgLy8gY29sb3JcclxuICAgICAgICAgIGNvbG9yX3BhdHRlcm46IFtdLFxyXG4gICAgICAgICAgY29sb3JfdGhyZXNob2xkOiB7fSxcclxuICAgICAgICAgIC8vIGxlZ2VuZFxyXG4gICAgICAgICAgbGVnZW5kX3Nob3c6IHRydWUsXHJcbiAgICAgICAgICBsZWdlbmRfaGlkZTogZmFsc2UsXHJcbiAgICAgICAgICBsZWdlbmRfcG9zaXRpb246ICdib3R0b20nLFxyXG4gICAgICAgICAgbGVnZW5kX2luc2V0X2FuY2hvcjogJ3RvcC1sZWZ0JyxcclxuICAgICAgICAgIGxlZ2VuZF9pbnNldF94OiAxMCxcclxuICAgICAgICAgIGxlZ2VuZF9pbnNldF95OiAwLFxyXG4gICAgICAgICAgbGVnZW5kX2luc2V0X3N0ZXA6IHVuZGVmaW5lZCxcclxuICAgICAgICAgIGxlZ2VuZF9pdGVtX29uY2xpY2s6IHVuZGVmaW5lZCxcclxuICAgICAgICAgIGxlZ2VuZF9pdGVtX29ubW91c2VvdmVyOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICBsZWdlbmRfaXRlbV9vbm1vdXNlb3V0OiB1bmRlZmluZWQsXHJcbiAgICAgICAgICBsZWdlbmRfZXF1YWxseTogZmFsc2UsXHJcbiAgICAgICAgICBsZWdlbmRfcGFkZGluZzogMCxcclxuICAgICAgICAgIGxlZ2VuZF9pdGVtX3RpbGVfd2lkdGg6IDEwLFxyXG4gICAgICAgICAgbGVnZW5kX2l0ZW1fdGlsZV9oZWlnaHQ6IDEwLFxyXG4gICAgICAgICAgLy8gYXhpc1xyXG4gICAgICAgICAgYXhpc19yb3RhdGVkOiBmYWxzZSxcclxuICAgICAgICAgIGF4aXNfeF9zaG93OiB0cnVlLFxyXG4gICAgICAgICAgYXhpc194X3R5cGU6ICdpbmRleGVkJyxcclxuICAgICAgICAgIGF4aXNfeF9sb2NhbHRpbWU6IHRydWUsXHJcbiAgICAgICAgICBheGlzX3hfY2F0ZWdvcmllczogW10sXHJcbiAgICAgICAgICBheGlzX3hfdGlja19jZW50ZXJlZDogZmFsc2UsXHJcbiAgICAgICAgICBheGlzX3hfdGlja19mb3JtYXQ6IHVuZGVmaW5lZCxcclxuICAgICAgICAgIGF4aXNfeF90aWNrX2N1bGxpbmc6IHt9LFxyXG4gICAgICAgICAgYXhpc194X3RpY2tfY3VsbGluZ19tYXg6IDEwLFxyXG4gICAgICAgICAgYXhpc194X3RpY2tfY291bnQ6IHVuZGVmaW5lZCxcclxuICAgICAgICAgIGF4aXNfeF90aWNrX2ZpdDogdHJ1ZSxcclxuICAgICAgICAgIGF4aXNfeF90aWNrX3ZhbHVlczogbnVsbCxcclxuICAgICAgICAgIGF4aXNfeF90aWNrX3JvdGF0ZTogMCxcclxuICAgICAgICAgIGF4aXNfeF90aWNrX291dGVyOiB0cnVlLFxyXG4gICAgICAgICAgYXhpc194X3RpY2tfbXVsdGlsaW5lOiB0cnVlLFxyXG4gICAgICAgICAgYXhpc194X3RpY2tfbXVsdGlsaW5lTWF4OiAwLFxyXG4gICAgICAgICAgYXhpc194X3RpY2tfd2lkdGg6IG51bGwsXHJcbiAgICAgICAgICBheGlzX3hfbWF4OiB1bmRlZmluZWQsXHJcbiAgICAgICAgICBheGlzX3hfbWluOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICBheGlzX3hfcGFkZGluZzoge30sXHJcbiAgICAgICAgICBheGlzX3hfaGVpZ2h0OiB1bmRlZmluZWQsXHJcbiAgICAgICAgICBheGlzX3hfc2VsZWN0aW9uOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICBheGlzX3hfbGFiZWw6IHt9LFxyXG4gICAgICAgICAgYXhpc194X2lubmVyOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICBheGlzX3lfc2hvdzogdHJ1ZSxcclxuICAgICAgICAgIGF4aXNfeV90eXBlOiAnbGluZWFyJyxcclxuICAgICAgICAgIGF4aXNfeV9tYXg6IHVuZGVmaW5lZCxcclxuICAgICAgICAgIGF4aXNfeV9taW46IHVuZGVmaW5lZCxcclxuICAgICAgICAgIGF4aXNfeV9pbnZlcnRlZDogZmFsc2UsXHJcbiAgICAgICAgICBheGlzX3lfY2VudGVyOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICBheGlzX3lfaW5uZXI6IHVuZGVmaW5lZCxcclxuICAgICAgICAgIGF4aXNfeV9sYWJlbDoge30sXHJcbiAgICAgICAgICBheGlzX3lfdGlja19mb3JtYXQ6IHVuZGVmaW5lZCxcclxuICAgICAgICAgIGF4aXNfeV90aWNrX291dGVyOiB0cnVlLFxyXG4gICAgICAgICAgYXhpc195X3RpY2tfdmFsdWVzOiBudWxsLFxyXG4gICAgICAgICAgYXhpc195X3RpY2tfcm90YXRlOiAwLFxyXG4gICAgICAgICAgYXhpc195X3RpY2tfY291bnQ6IHVuZGVmaW5lZCxcclxuICAgICAgICAgIGF4aXNfeV90aWNrX3RpbWVfdHlwZTogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgYXhpc195X3RpY2tfdGltZV9pbnRlcnZhbDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgYXhpc195X3BhZGRpbmc6IHt9LFxyXG4gICAgICAgICAgYXhpc195X2RlZmF1bHQ6IHVuZGVmaW5lZCxcclxuICAgICAgICAgIGF4aXNfeTJfc2hvdzogZmFsc2UsXHJcbiAgICAgICAgICBheGlzX3kyX3R5cGU6ICdsaW5lYXInLFxyXG4gICAgICAgICAgYXhpc195Ml9tYXg6IHVuZGVmaW5lZCxcclxuICAgICAgICAgIGF4aXNfeTJfbWluOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICBheGlzX3kyX2ludmVydGVkOiBmYWxzZSxcclxuICAgICAgICAgIGF4aXNfeTJfY2VudGVyOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICBheGlzX3kyX2lubmVyOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICBheGlzX3kyX2xhYmVsOiB7fSxcclxuICAgICAgICAgIGF4aXNfeTJfdGlja19mb3JtYXQ6IHVuZGVmaW5lZCxcclxuICAgICAgICAgIGF4aXNfeTJfdGlja19vdXRlcjogdHJ1ZSxcclxuICAgICAgICAgIGF4aXNfeTJfdGlja192YWx1ZXM6IG51bGwsXHJcbiAgICAgICAgICBheGlzX3kyX3RpY2tfY291bnQ6IHVuZGVmaW5lZCxcclxuICAgICAgICAgIGF4aXNfeTJfcGFkZGluZzoge30sXHJcbiAgICAgICAgICBheGlzX3kyX2RlZmF1bHQ6IHVuZGVmaW5lZCxcclxuICAgICAgICAgIC8vIGdyaWRcclxuICAgICAgICAgIGdyaWRfeF9zaG93OiBmYWxzZSxcclxuICAgICAgICAgIGdyaWRfeF90eXBlOiAndGljaycsXHJcbiAgICAgICAgICBncmlkX3hfbGluZXM6IFtdLFxyXG4gICAgICAgICAgZ3JpZF95X3Nob3c6IGZhbHNlLFxyXG4gICAgICAgICAgLy8gbm90IHVzZWRcclxuICAgICAgICAgIC8vIGdyaWRfeV90eXBlOiAndGljaycsXHJcbiAgICAgICAgICBncmlkX3lfbGluZXM6IFtdLFxyXG4gICAgICAgICAgZ3JpZF95X3RpY2tzOiAxMCxcclxuICAgICAgICAgIGdyaWRfZm9jdXNfc2hvdzogdHJ1ZSxcclxuICAgICAgICAgIGdyaWRfbGluZXNfZnJvbnQ6IHRydWUsXHJcbiAgICAgICAgICAvLyBwb2ludCAtIHBvaW50IG9mIGVhY2ggZGF0YVxyXG4gICAgICAgICAgcG9pbnRfc2hvdzogdHJ1ZSxcclxuICAgICAgICAgIHBvaW50X3I6IDIuNSxcclxuICAgICAgICAgIHBvaW50X3NlbnNpdGl2aXR5OiAxMCxcclxuICAgICAgICAgIHBvaW50X2ZvY3VzX2V4cGFuZF9lbmFibGVkOiB0cnVlLFxyXG4gICAgICAgICAgcG9pbnRfZm9jdXNfZXhwYW5kX3I6IHVuZGVmaW5lZCxcclxuICAgICAgICAgIHBvaW50X3NlbGVjdF9yOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAvLyBsaW5lXHJcbiAgICAgICAgICBsaW5lX2Nvbm5lY3ROdWxsOiBmYWxzZSxcclxuICAgICAgICAgIGxpbmVfc3RlcF90eXBlOiAnc3RlcCcsXHJcbiAgICAgICAgICAvLyBiYXJcclxuICAgICAgICAgIGJhcl93aWR0aDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgYmFyX3dpZHRoX3JhdGlvOiAwLjYsXHJcbiAgICAgICAgICBiYXJfd2lkdGhfbWF4OiB1bmRlZmluZWQsXHJcbiAgICAgICAgICBiYXJfemVyb2Jhc2VkOiB0cnVlLFxyXG4gICAgICAgICAgYmFyX3NwYWNlOiAwLFxyXG4gICAgICAgICAgLy8gYXJlYVxyXG4gICAgICAgICAgYXJlYV96ZXJvYmFzZWQ6IHRydWUsXHJcbiAgICAgICAgICBhcmVhX2Fib3ZlOiBmYWxzZSxcclxuICAgICAgICAgIC8vIHBpZVxyXG4gICAgICAgICAgcGllX2xhYmVsX3Nob3c6IHRydWUsXHJcbiAgICAgICAgICBwaWVfbGFiZWxfZm9ybWF0OiB1bmRlZmluZWQsXHJcbiAgICAgICAgICBwaWVfbGFiZWxfdGhyZXNob2xkOiAwLjA1LFxyXG4gICAgICAgICAgcGllX2xhYmVsX3JhdGlvOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICBwaWVfZXhwYW5kOiB7fSxcclxuICAgICAgICAgIHBpZV9leHBhbmRfZHVyYXRpb246IDUwLFxyXG4gICAgICAgICAgcGllX3BhZEFuZ2xlOiAwLFxyXG4gICAgICAgICAgLy8gZ2F1Z2VcclxuICAgICAgICAgIGdhdWdlX2Z1bGxDaXJjbGU6IGZhbHNlLFxyXG4gICAgICAgICAgZ2F1Z2VfbGFiZWxfc2hvdzogdHJ1ZSxcclxuICAgICAgICAgIGdhdWdlX2xhYmVsTGluZV9zaG93OiB0cnVlLFxyXG4gICAgICAgICAgZ2F1Z2VfbGFiZWxfZm9ybWF0OiB1bmRlZmluZWQsXHJcbiAgICAgICAgICBnYXVnZV9taW46IDAsXHJcbiAgICAgICAgICBnYXVnZV9tYXg6IDEwMCxcclxuICAgICAgICAgIGdhdWdlX3N0YXJ0aW5nQW5nbGU6ICgtMSAqIE1hdGguUEkpIC8gMixcclxuICAgICAgICAgIGdhdWdlX2xhYmVsX2V4dGVudHM6IHVuZGVmaW5lZCxcclxuICAgICAgICAgIGdhdWdlX3VuaXRzOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICBnYXVnZV93aWR0aDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgZ2F1Z2VfYXJjc19taW5XaWR0aDogNSxcclxuICAgICAgICAgIGdhdWdlX2V4cGFuZDoge30sXHJcbiAgICAgICAgICBnYXVnZV9leHBhbmRfZHVyYXRpb246IDUwLFxyXG4gICAgICAgICAgLy8gZG9udXRcclxuICAgICAgICAgIGRvbnV0X2xhYmVsX3Nob3c6IHRydWUsXHJcbiAgICAgICAgICBkb251dF9sYWJlbF9mb3JtYXQ6IHVuZGVmaW5lZCxcclxuICAgICAgICAgIGRvbnV0X2xhYmVsX3RocmVzaG9sZDogMC4wNSxcclxuICAgICAgICAgIGRvbnV0X2xhYmVsX3JhdGlvOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICBkb251dF93aWR0aDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgZG9udXRfdGl0bGU6ICcnLFxyXG4gICAgICAgICAgZG9udXRfZXhwYW5kOiB7fSxcclxuICAgICAgICAgIGRvbnV0X2V4cGFuZF9kdXJhdGlvbjogNTAsXHJcbiAgICAgICAgICBkb251dF9wYWRBbmdsZTogMCxcclxuICAgICAgICAgIC8vIHNwbGluZVxyXG4gICAgICAgICAgc3BsaW5lX2ludGVycG9sYXRpb25fdHlwZTogJ2NhcmRpbmFsJyxcclxuICAgICAgICAgIC8vIHN0YW5mb3JkXHJcbiAgICAgICAgICBzdGFuZm9yZF9saW5lczogW10sXHJcbiAgICAgICAgICBzdGFuZm9yZF9yZWdpb25zOiBbXSxcclxuICAgICAgICAgIHN0YW5mb3JkX3RleHRzOiBbXSxcclxuICAgICAgICAgIHN0YW5mb3JkX3NjYWxlTWluOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICBzdGFuZm9yZF9zY2FsZU1heDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgc3RhbmZvcmRfc2NhbGVXaWR0aDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgc3RhbmZvcmRfc2NhbGVGb3JtYXQ6IHVuZGVmaW5lZCxcclxuICAgICAgICAgIHN0YW5mb3JkX3NjYWxlVmFsdWVzOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICBzdGFuZm9yZF9jb2xvcnM6IHVuZGVmaW5lZCxcclxuICAgICAgICAgIHN0YW5mb3JkX3BhZGRpbmc6IHtcclxuICAgICAgICAgICAgICB0b3A6IDAsXHJcbiAgICAgICAgICAgICAgcmlnaHQ6IDAsXHJcbiAgICAgICAgICAgICAgYm90dG9tOiAwLFxyXG4gICAgICAgICAgICAgIGxlZnQ6IDBcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICAvLyByZWdpb24gLSByZWdpb24gdG8gY2hhbmdlIHN0eWxlXHJcbiAgICAgICAgICByZWdpb25zOiBbXSxcclxuICAgICAgICAgIC8vIHRvb2x0aXAgLSBzaG93IHdoZW4gbW91c2VvdmVyIG9uIGVhY2ggZGF0YVxyXG4gICAgICAgICAgdG9vbHRpcF9zaG93OiB0cnVlLFxyXG4gICAgICAgICAgdG9vbHRpcF9ncm91cGVkOiB0cnVlLFxyXG4gICAgICAgICAgdG9vbHRpcF9vcmRlcjogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgdG9vbHRpcF9mb3JtYXRfdGl0bGU6IHVuZGVmaW5lZCxcclxuICAgICAgICAgIHRvb2x0aXBfZm9ybWF0X25hbWU6IHVuZGVmaW5lZCxcclxuICAgICAgICAgIHRvb2x0aXBfZm9ybWF0X3ZhbHVlOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICB0b29sdGlwX2hvcml6b250YWw6IHVuZGVmaW5lZCxcclxuICAgICAgICAgIHRvb2x0aXBfcG9zaXRpb246IHVuZGVmaW5lZCxcclxuICAgICAgICAgIHRvb2x0aXBfY29udGVudHM6IGZ1bmN0aW9uIChkLCBkZWZhdWx0VGl0bGVGb3JtYXQsIGRlZmF1bHRWYWx1ZUZvcm1hdCwgY29sb3IpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRUb29sdGlwQ29udGVudFxyXG4gICAgICAgICAgICAgICAgICA/IHRoaXMuZ2V0VG9vbHRpcENvbnRlbnQoZCwgZGVmYXVsdFRpdGxlRm9ybWF0LCBkZWZhdWx0VmFsdWVGb3JtYXQsIGNvbG9yKVxyXG4gICAgICAgICAgICAgICAgICA6ICcnO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHRvb2x0aXBfaW5pdF9zaG93OiBmYWxzZSxcclxuICAgICAgICAgIHRvb2x0aXBfaW5pdF94OiAwLFxyXG4gICAgICAgICAgdG9vbHRpcF9pbml0X3Bvc2l0aW9uOiB7IHRvcDogJzBweCcsIGxlZnQ6ICc1MHB4JyB9LFxyXG4gICAgICAgICAgdG9vbHRpcF9vbnNob3c6IGZ1bmN0aW9uICgpIHsgfSxcclxuICAgICAgICAgIHRvb2x0aXBfb25oaWRlOiBmdW5jdGlvbiAoKSB7IH0sXHJcbiAgICAgICAgICAvLyB0aXRsZVxyXG4gICAgICAgICAgdGl0bGVfdGV4dDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgdGl0bGVfcGFkZGluZzoge1xyXG4gICAgICAgICAgICAgIHRvcDogMCxcclxuICAgICAgICAgICAgICByaWdodDogMCxcclxuICAgICAgICAgICAgICBib3R0b206IDAsXHJcbiAgICAgICAgICAgICAgbGVmdDogMFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHRpdGxlX3Bvc2l0aW9uOiAndG9wLWNlbnRlcidcclxuICAgICAgfTtcclxuICAgICAgT2JqZWN0LmtleXModGhpcy5hZGRpdGlvbmFsQ29uZmlnKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcclxuICAgICAgICAgIGNvbmZpZ1trZXldID0gdGhpcy5hZGRpdGlvbmFsQ29uZmlnW2tleV07XHJcbiAgICAgIH0sIHRoaXMpO1xyXG4gICAgICByZXR1cm4gY29uZmlnO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuYWRkaXRpb25hbENvbmZpZyA9IHt9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmxvYWRDb25maWcgPSBmdW5jdGlvbiAoY29uZmlnKSB7XHJcbiAgICAgIHZhciB0aGlzX2NvbmZpZyA9IHRoaXMuY29uZmlnLCB0YXJnZXQsIGtleXMsIHJlYWQ7XHJcbiAgICAgIGZ1bmN0aW9uIGZpbmQoKSB7XHJcbiAgICAgICAgICB2YXIga2V5ID0ga2V5cy5zaGlmdCgpO1xyXG4gICAgICAgICAgLy8gICAgICAgIGNvbnNvbGUubG9nKFwia2V5ID0+XCIsIGtleSwgXCIsIHRhcmdldCA9PlwiLCB0YXJnZXQpO1xyXG4gICAgICAgICAgaWYgKGtleSAmJiB0YXJnZXQgJiYgdHlwZW9mIHRhcmdldCA9PT0gJ29iamVjdCcgJiYga2V5IGluIHRhcmdldCkge1xyXG4gICAgICAgICAgICAgIHRhcmdldCA9IHRhcmdldFtrZXldO1xyXG4gICAgICAgICAgICAgIHJldHVybiBmaW5kKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIGlmICgha2V5KSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgT2JqZWN0LmtleXModGhpc19jb25maWcpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgICAgdGFyZ2V0ID0gY29uZmlnO1xyXG4gICAgICAgICAga2V5cyA9IGtleS5zcGxpdCgnXycpO1xyXG4gICAgICAgICAgcmVhZCA9IGZpbmQoKTtcclxuICAgICAgICAgIC8vICAgICAgICBjb25zb2xlLmxvZyhcIkNPTkZJRyA6IFwiLCBrZXksIHJlYWQpO1xyXG4gICAgICAgICAgaWYgKGlzRGVmaW5lZChyZWFkKSkge1xyXG4gICAgICAgICAgICAgIHRoaXNfY29uZmlnW2tleV0gPSByZWFkO1xyXG4gICAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9O1xuXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmNvbnZlcnRVcmxUb0RhdGEgPSBmdW5jdGlvbiAodXJsLCBtaW1lVHlwZSwgaGVhZGVycywga2V5cywgZG9uZSkge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzLCB0eXBlID0gbWltZVR5cGUgPyBtaW1lVHlwZSA6ICdjc3YnLCBmLCBjb252ZXJ0ZXI7XHJcbiAgICAgIGlmICh0eXBlID09PSAnanNvbicpIHtcclxuICAgICAgICAgIGYgPSAkJC5kMy5qc29uO1xyXG4gICAgICAgICAgY29udmVydGVyID0gJCQuY29udmVydEpzb25Ub0RhdGE7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodHlwZSA9PT0gJ3RzdicpIHtcclxuICAgICAgICAgIGYgPSAkJC5kMy50c3Y7XHJcbiAgICAgICAgICBjb252ZXJ0ZXIgPSAkJC5jb252ZXJ0WHN2VG9EYXRhO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgZiA9ICQkLmQzLmNzdjtcclxuICAgICAgICAgIGNvbnZlcnRlciA9ICQkLmNvbnZlcnRYc3ZUb0RhdGE7XHJcbiAgICAgIH1cclxuICAgICAgZih1cmwsIGhlYWRlcnMpXHJcbiAgICAgICAgICAudGhlbihmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgICAgZG9uZS5jYWxsKCQkLCBjb252ZXJ0ZXIuY2FsbCgkJCwgZGF0YSwga2V5cykpO1xyXG4gICAgICB9KVxyXG4gICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xyXG4gICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgIH0pO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuY29udmVydFhzdlRvRGF0YSA9IGZ1bmN0aW9uICh4c3YpIHtcclxuICAgICAgdmFyIGtleXMgPSB4c3YuY29sdW1ucywgcm93cyA9IHhzdjtcclxuICAgICAgaWYgKHJvd3MubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgIGtleXM6IGtleXMsXHJcbiAgICAgICAgICAgICAgcm93czogW2tleXMucmVkdWNlKGZ1bmN0aW9uIChyb3csIGtleSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdmFyIF9hO1xyXG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24ocm93LCAoX2EgPSB7fSwgX2Fba2V5XSA9IG51bGwsIF9hKSk7XHJcbiAgICAgICAgICAgICAgICAgIH0sIHt9KV1cclxuICAgICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAvLyBbXS5jb25jYXQoKSBpcyB0byBjb252ZXJ0IHJlc3VsdCBpbnRvIGEgcGxhaW4gYXJyYXkgb3RoZXJ3aXNlXHJcbiAgICAgICAgICAvLyB0ZXN0IGlzIG5vdCBoYXBweSBiZWNhdXNlIHJvd3MgaGF2ZSBwcm9wZXJ0aWVzLlxyXG4gICAgICAgICAgcmV0dXJuIHsga2V5czoga2V5cywgcm93czogW10uY29uY2F0KHhzdikgfTtcclxuICAgICAgfVxyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuY29udmVydEpzb25Ub0RhdGEgPSBmdW5jdGlvbiAoanNvbiwga2V5cykge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzLCBuZXdfcm93cyA9IFtdLCB0YXJnZXRLZXlzLCBkYXRhO1xyXG4gICAgICBpZiAoa2V5cykge1xyXG4gICAgICAgICAgLy8gd2hlbiBrZXlzIHNwZWNpZmllZCwganNvbiB3b3VsZCBiZSBhbiBhcnJheSB0aGF0IGluY2x1ZGVzIG9iamVjdHNcclxuICAgICAgICAgIGlmIChrZXlzLngpIHtcclxuICAgICAgICAgICAgICB0YXJnZXRLZXlzID0ga2V5cy52YWx1ZS5jb25jYXQoa2V5cy54KTtcclxuICAgICAgICAgICAgICAkJC5jb25maWcuZGF0YV94ID0ga2V5cy54O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGFyZ2V0S2V5cyA9IGtleXMudmFsdWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBuZXdfcm93cy5wdXNoKHRhcmdldEtleXMpO1xyXG4gICAgICAgICAganNvbi5mb3JFYWNoKGZ1bmN0aW9uIChvKSB7XHJcbiAgICAgICAgICAgICAgdmFyIG5ld19yb3cgPSBbXTtcclxuICAgICAgICAgICAgICB0YXJnZXRLZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgICAgICAgICAgICAvLyBjb252ZXJ0IHVuZGVmaW5lZCB0byBudWxsIGJlY2F1c2UgdW5kZWZpbmVkIGRhdGEgd2lsbCBiZSByZW1vdmVkIGluIGNvbnZlcnREYXRhVG9UYXJnZXRzKClcclxuICAgICAgICAgICAgICAgICAgdmFyIHYgPSAkJC5maW5kVmFsdWVJbkpzb24obywga2V5KTtcclxuICAgICAgICAgICAgICAgICAgaWYgKGlzVW5kZWZpbmVkKHYpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB2ID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBuZXdfcm93LnB1c2godik7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgbmV3X3Jvd3MucHVzaChuZXdfcm93KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgZGF0YSA9ICQkLmNvbnZlcnRSb3dzVG9EYXRhKG5ld19yb3dzKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICAgIE9iamVjdC5rZXlzKGpzb24pLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgICAgICAgIG5ld19yb3dzLnB1c2goW2tleV0uY29uY2F0KGpzb25ba2V5XSkpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBkYXRhID0gJCQuY29udmVydENvbHVtbnNUb0RhdGEobmV3X3Jvd3MpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBkYXRhO1xyXG4gIH07XHJcbiAgLyoqXHJcbiAgICogRmluZHMgdmFsdWUgZnJvbSB0aGUgZ2l2ZW4gbmVzdGVkIG9iamVjdCBieSB0aGUgZ2l2ZW4gcGF0aC5cclxuICAgKiBJZiBpdCdzIG5vdCBmb3VuZCwgdGhlbiB0aGlzIHJldHVybnMgdW5kZWZpbmVkLlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgdGhlIG9iamVjdFxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIHRoZSBwYXRoXHJcbiAgICovXHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuZmluZFZhbHVlSW5Kc29uID0gZnVuY3Rpb24gKG9iamVjdCwgcGF0aCkge1xyXG4gICAgICBpZiAocGF0aCBpbiBvYmplY3QpIHtcclxuICAgICAgICAgIC8vIElmIG9iamVjdCBoYXMgYSBrZXkgdGhhdCBjb250YWlucyAuIG9yIFtdLCByZXR1cm4gdGhlIGtleSdzIHZhbHVlXHJcbiAgICAgICAgICAvLyBpbnN0ZWFkIG9mIHNlYXJjaGluZyBmb3IgYW4gaW5uZXIgb2JqZWN0LlxyXG4gICAgICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9jM2pzL2MzL2lzc3Vlcy8xNjkxIGZvciBkZXRhaWxzLlxyXG4gICAgICAgICAgcmV0dXJuIG9iamVjdFtwYXRoXTtcclxuICAgICAgfVxyXG4gICAgICBwYXRoID0gcGF0aC5yZXBsYWNlKC9cXFsoXFx3KylcXF0vZywgJy4kMScpOyAvLyBjb252ZXJ0IGluZGV4ZXMgdG8gcHJvcGVydGllcyAocmVwbGFjZSBbXSB3aXRoIC4pXHJcbiAgICAgIHBhdGggPSBwYXRoLnJlcGxhY2UoL15cXC4vLCAnJyk7IC8vIHN0cmlwIGEgbGVhZGluZyBkb3RcclxuICAgICAgdmFyIHBhdGhBcnJheSA9IHBhdGguc3BsaXQoJy4nKTtcclxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXRoQXJyYXkubGVuZ3RoOyArK2kpIHtcclxuICAgICAgICAgIHZhciBrID0gcGF0aEFycmF5W2ldO1xyXG4gICAgICAgICAgaWYgKGsgaW4gb2JqZWN0KSB7XHJcbiAgICAgICAgICAgICAgb2JqZWN0ID0gb2JqZWN0W2tdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBvYmplY3Q7XHJcbiAgfTtcclxuICAvKipcclxuICAgKiBDb252ZXJ0cyB0aGUgcm93cyB0byBub3JtYWxpemVkIGRhdGEuXHJcbiAgICogQHBhcmFtIHthbnlbXVtdfSByb3dzIFRoZSByb3cgZGF0YVxyXG4gICAqIEByZXR1cm4ge09iamVjdH1cclxuICAgKi9cclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5jb252ZXJ0Um93c1RvRGF0YSA9IGZ1bmN0aW9uIChyb3dzKSB7XHJcbiAgICAgIHZhciBuZXdSb3dzID0gW107XHJcbiAgICAgIHZhciBrZXlzID0gcm93c1swXTtcclxuICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICB2YXIgbmV3Um93ID0ge307XHJcbiAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHJvd3NbaV0ubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICBpZiAoaXNVbmRlZmluZWQocm93c1tpXVtqXSkpIHtcclxuICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTb3VyY2UgZGF0YSBpcyBtaXNzaW5nIGEgY29tcG9uZW50IGF0ICgnICsgaSArICcsJyArIGogKyAnKSEnKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgbmV3Um93W2tleXNbal1dID0gcm93c1tpXVtqXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIG5ld1Jvd3MucHVzaChuZXdSb3cpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB7IGtleXM6IGtleXMsIHJvd3M6IG5ld1Jvd3MgfTtcclxuICB9O1xyXG4gIC8qKlxyXG4gICAqIENvbnZlcnRzIHRoZSBjb2x1bW5zIHRvIG5vcm1hbGl6ZWQgZGF0YS5cclxuICAgKiBAcGFyYW0ge2FueVtdW119IGNvbHVtbnMgVGhlIGNvbHVtbiBkYXRhXHJcbiAgICogQHJldHVybiB7T2JqZWN0fVxyXG4gICAqL1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmNvbnZlcnRDb2x1bW5zVG9EYXRhID0gZnVuY3Rpb24gKGNvbHVtbnMpIHtcclxuICAgICAgdmFyIG5ld1Jvd3MgPSBbXTtcclxuICAgICAgdmFyIGtleXMgPSBbXTtcclxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb2x1bW5zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICB2YXIga2V5ID0gY29sdW1uc1tpXVswXTtcclxuICAgICAgICAgIGZvciAodmFyIGogPSAxOyBqIDwgY29sdW1uc1tpXS5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgIGlmIChpc1VuZGVmaW5lZChuZXdSb3dzW2ogLSAxXSkpIHtcclxuICAgICAgICAgICAgICAgICAgbmV3Um93c1tqIC0gMV0gPSB7fTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKGlzVW5kZWZpbmVkKGNvbHVtbnNbaV1bal0pKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU291cmNlIGRhdGEgaXMgbWlzc2luZyBhIGNvbXBvbmVudCBhdCAoJyArIGkgKyAnLCcgKyBqICsgJykhJyk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIG5ld1Jvd3NbaiAtIDFdW2tleV0gPSBjb2x1bW5zW2ldW2pdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAga2V5cy5wdXNoKGtleSk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHsga2V5czoga2V5cywgcm93czogbmV3Um93cyB9O1xyXG4gIH07XHJcbiAgLyoqXHJcbiAgICogQ29udmVydHMgdGhlIGRhdGEgZm9ybWF0IGludG8gdGhlIHRhcmdldCBmb3JtYXQuXHJcbiAgICogQHBhcmFtIHshT2JqZWN0fSBkYXRhXHJcbiAgICogQHBhcmFtIHshQXJyYXl9IGRhdGEua2V5cyBPcmRlcmVkIGxpc3Qgb2YgdGFyZ2V0IElEcy5cclxuICAgKiBAcGFyYW0geyFBcnJheX0gZGF0YS5yb3dzIFJvd3Mgb2YgZGF0YSB0byBjb252ZXJ0LlxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gYXBwZW5kWHMgVHJ1ZSB0byBhcHBlbmQgdG8gJCQuZGF0YS54cywgRmFsc2UgdG8gcmVwbGFjZS5cclxuICAgKiBAcmV0dXJuIHshQXJyYXl9XHJcbiAgICovXHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuY29udmVydERhdGFUb1RhcmdldHMgPSBmdW5jdGlvbiAoZGF0YSwgYXBwZW5kWHMpIHtcclxuICAgICAgdmFyICQkID0gdGhpcywgY29uZmlnID0gJCQuY29uZmlnLCB0YXJnZXRzLCBpZHMsIHhzLCBrZXlzLCBlcG9jaHM7XHJcbiAgICAgIC8vIGhhbmRsZXMgZm9ybWF0IHdoZXJlIGtleXMgYXJlIG5vdCBvcmRlcmx5IHByb3ZpZGVkXHJcbiAgICAgIGlmIChpc0FycmF5KGRhdGEpKSB7XHJcbiAgICAgICAgICBrZXlzID0gT2JqZWN0LmtleXMoZGF0YVswXSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBrZXlzID0gZGF0YS5rZXlzO1xyXG4gICAgICAgICAgZGF0YSA9IGRhdGEucm93cztcclxuICAgICAgfVxyXG4gICAgICB4cyA9IGtleXMuZmlsdGVyKCQkLmlzWCwgJCQpO1xyXG4gICAgICBpZiAoISQkLmlzU3RhbmZvcmRHcmFwaFR5cGUoKSkge1xyXG4gICAgICAgICAgaWRzID0ga2V5cy5maWx0ZXIoJCQuaXNOb3RYLCAkJCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBlcG9jaHMgPSBrZXlzLmZpbHRlcigkJC5pc0Vwb2NocywgJCQpO1xyXG4gICAgICAgICAgaWRzID0ga2V5cy5maWx0ZXIoJCQuaXNOb3RYQW5kTm90RXBvY2hzLCAkJCk7XHJcbiAgICAgICAgICBpZiAoeHMubGVuZ3RoICE9PSAxIHx8IGVwb2Nocy5sZW5ndGggIT09IDEgfHwgaWRzLmxlbmd0aCAhPT0gMSkge1xyXG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIllvdSBtdXN0IGRlZmluZSB0aGUgJ3gnIGtleSBuYW1lIGFuZCB0aGUgJ2Vwb2NocycgZm9yIFN0YW5mb3JkIERpYWdyYW1zXCIpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIC8vIHNhdmUgeCBmb3IgdXBkYXRlIGRhdGEgYnkgbG9hZCB3aGVuIGN1c3RvbSB4IGFuZCBjMy54IEFQSVxyXG4gICAgICBpZHMuZm9yRWFjaChmdW5jdGlvbiAoaWQpIHtcclxuICAgICAgICAgIHZhciB4S2V5ID0gJCQuZ2V0WEtleShpZCk7XHJcbiAgICAgICAgICBpZiAoJCQuaXNDdXN0b21YKCkgfHwgJCQuaXNUaW1lU2VyaWVzKCkpIHtcclxuICAgICAgICAgICAgICAvLyBpZiBpbmNsdWRlZCBpbiBpbnB1dCBkYXRhXHJcbiAgICAgICAgICAgICAgaWYgKHhzLmluZGV4T2YoeEtleSkgPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAkJC5kYXRhLnhzW2lkXSA9IChhcHBlbmRYcyAmJiAkJC5kYXRhLnhzW2lkXVxyXG4gICAgICAgICAgICAgICAgICAgICAgPyAkJC5kYXRhLnhzW2lkXVxyXG4gICAgICAgICAgICAgICAgICAgICAgOiBbXSkuY29uY2F0KGRhdGFcclxuICAgICAgICAgICAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkW3hLZXldO1xyXG4gICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihpc1ZhbHVlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAocmF3WCwgaSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQkLmdlbmVyYXRlVGFyZ2V0WChyYXdYLCBpZCwgaSk7XHJcbiAgICAgICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgLy8gaWYgbm90IGluY2x1ZGVkIGluIGlucHV0IGRhdGEsIGZpbmQgZnJvbSBwcmVsb2FkZWQgZGF0YSBvZiBvdGhlciBpZCdzIHhcclxuICAgICAgICAgICAgICBlbHNlIGlmIChjb25maWcuZGF0YV94KSB7XHJcbiAgICAgICAgICAgICAgICAgICQkLmRhdGEueHNbaWRdID0gJCQuZ2V0T3RoZXJUYXJnZXRYcygpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAvLyBpZiBub3QgaW5jbHVkZWQgaW4gaW5wdXQgZGF0YSwgZmluZCBmcm9tIHByZWxvYWRlZCBkYXRhXHJcbiAgICAgICAgICAgICAgZWxzZSBpZiAobm90RW1wdHkoY29uZmlnLmRhdGFfeHMpKSB7XHJcbiAgICAgICAgICAgICAgICAgICQkLmRhdGEueHNbaWRdID0gJCQuZ2V0WFZhbHVlc09mWEtleSh4S2V5LCAkJC5kYXRhLnRhcmdldHMpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAvLyBNRU1POiBpZiBubyB4IGluY2x1ZGVkLCB1c2Ugc2FtZSB4IG9mIGN1cnJlbnQgd2lsbCBiZSB1c2VkXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAkJC5kYXRhLnhzW2lkXSA9IGRhdGEubWFwKGZ1bmN0aW9uIChkLCBpKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiBpO1xyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgLy8gY2hlY2sgeCBpcyBkZWZpbmVkXHJcbiAgICAgIGlkcy5mb3JFYWNoKGZ1bmN0aW9uIChpZCkge1xyXG4gICAgICAgICAgaWYgKCEkJC5kYXRhLnhzW2lkXSkge1xyXG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigneCBpcyBub3QgZGVmaW5lZCBmb3IgaWQgPSBcIicgKyBpZCArICdcIi4nKTtcclxuICAgICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIC8vIGNvbnZlcnQgdG8gdGFyZ2V0XHJcbiAgICAgIHRhcmdldHMgPSBpZHMubWFwKGZ1bmN0aW9uIChpZCwgaW5kZXgpIHtcclxuICAgICAgICAgIHZhciBjb252ZXJ0ZWRJZCA9IGNvbmZpZy5kYXRhX2lkQ29udmVydGVyKGlkKTtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgaWQ6IGNvbnZlcnRlZElkLFxyXG4gICAgICAgICAgICAgIGlkX29yZzogaWQsXHJcbiAgICAgICAgICAgICAgdmFsdWVzOiBkYXRhXHJcbiAgICAgICAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKGQsIGkpIHtcclxuICAgICAgICAgICAgICAgICAgdmFyIHhLZXkgPSAkJC5nZXRYS2V5KGlkKSwgcmF3WCA9IGRbeEtleV0sIHZhbHVlID0gZFtpZF0gIT09IG51bGwgJiYgIWlzTmFOKGRbaWRdKSA/ICtkW2lkXSA6IG51bGwsIHgsIHJldHVybkRhdGE7XHJcbiAgICAgICAgICAgICAgICAgIC8vIHVzZSB4IGFzIGNhdGVnb3JpZXMgaWYgY3VzdG9tIHggYW5kIGNhdGVnb3JpemVkXHJcbiAgICAgICAgICAgICAgICAgIGlmICgkJC5pc0N1c3RvbVgoKSAmJiAkJC5pc0NhdGVnb3JpemVkKCkgJiYgIWlzVW5kZWZpbmVkKHJhd1gpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT09IDAgJiYgaSA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5heGlzX3hfY2F0ZWdvcmllcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgeCA9IGNvbmZpZy5heGlzX3hfY2F0ZWdvcmllcy5pbmRleE9mKHJhd1gpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHggPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9IGNvbmZpZy5heGlzX3hfY2F0ZWdvcmllcy5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLmF4aXNfeF9jYXRlZ29yaWVzLnB1c2gocmF3WCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB4ID0gJCQuZ2VuZXJhdGVUYXJnZXRYKHJhd1gsIGlkLCBpKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAvLyBtYXJrIGFzIHggPSB1bmRlZmluZWQgaWYgdmFsdWUgaXMgdW5kZWZpbmVkIGFuZCBmaWx0ZXIgdG8gcmVtb3ZlIGFmdGVyIG1hcHBlZFxyXG4gICAgICAgICAgICAgICAgICBpZiAoaXNVbmRlZmluZWQoZFtpZF0pIHx8ICQkLmRhdGEueHNbaWRdLmxlbmd0aCA8PSBpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB4ID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybkRhdGEgPSB7IHg6IHgsIHZhbHVlOiB2YWx1ZSwgaWQ6IGNvbnZlcnRlZElkIH07XHJcbiAgICAgICAgICAgICAgICAgIGlmICgkJC5pc1N0YW5mb3JkR3JhcGhUeXBlKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHJldHVybkRhdGEuZXBvY2hzID0gZFtlcG9jaHNdO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiByZXR1cm5EYXRhO1xyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKHYpIHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGlzRGVmaW5lZCh2LngpO1xyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICB9O1xyXG4gICAgICB9KTtcclxuICAgICAgLy8gZmluaXNoIHRhcmdldHNcclxuICAgICAgdGFyZ2V0cy5mb3JFYWNoKGZ1bmN0aW9uICh0KSB7XHJcbiAgICAgICAgICB2YXIgaTtcclxuICAgICAgICAgIC8vIHNvcnQgdmFsdWVzIGJ5IGl0cyB4XHJcbiAgICAgICAgICBpZiAoY29uZmlnLmRhdGFfeFNvcnQpIHtcclxuICAgICAgICAgICAgICB0LnZhbHVlcyA9IHQudmFsdWVzLnNvcnQoZnVuY3Rpb24gKHYxLCB2Mikge1xyXG4gICAgICAgICAgICAgICAgICB2YXIgeDEgPSB2MS54IHx8IHYxLnggPT09IDAgPyB2MS54IDogSW5maW5pdHksIHgyID0gdjIueCB8fCB2Mi54ID09PSAwID8gdjIueCA6IEluZmluaXR5O1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4geDEgLSB4MjtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vIGluZGV4aW5nIGVhY2ggdmFsdWVcclxuICAgICAgICAgIGkgPSAwO1xyXG4gICAgICAgICAgdC52YWx1ZXMuZm9yRWFjaChmdW5jdGlvbiAodikge1xyXG4gICAgICAgICAgICAgIHYuaW5kZXggPSBpKys7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIC8vIHRoaXMgbmVlZHMgdG8gYmUgc29ydGVkIGJlY2F1c2UgaXRzIGluZGV4IGFuZCB2YWx1ZS5pbmRleCBpcyBpZGVudGljYWxcclxuICAgICAgICAgICQkLmRhdGEueHNbdC5pZF0uc29ydChmdW5jdGlvbiAodjEsIHYyKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHYxIC0gdjI7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICAgIC8vIGNhY2hlIGluZm9ybWF0aW9uIGFib3V0IHZhbHVlc1xyXG4gICAgICAkJC5oYXNOZWdhdGl2ZVZhbHVlID0gJCQuaGFzTmVnYXRpdmVWYWx1ZUluVGFyZ2V0cyh0YXJnZXRzKTtcclxuICAgICAgJCQuaGFzUG9zaXRpdmVWYWx1ZSA9ICQkLmhhc1Bvc2l0aXZlVmFsdWVJblRhcmdldHModGFyZ2V0cyk7XHJcbiAgICAgIC8vIHNldCB0YXJnZXQgdHlwZXNcclxuICAgICAgaWYgKGNvbmZpZy5kYXRhX3R5cGUpIHtcclxuICAgICAgICAgICQkLnNldFRhcmdldFR5cGUoJCQubWFwVG9JZHModGFyZ2V0cykuZmlsdGVyKGZ1bmN0aW9uIChpZCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiAhKGlkIGluIGNvbmZpZy5kYXRhX3R5cGVzKTtcclxuICAgICAgICAgIH0pLCBjb25maWcuZGF0YV90eXBlKTtcclxuICAgICAgfVxyXG4gICAgICAvLyBjYWNoZSBhcyBvcmlnaW5hbCBpZCBrZXllZFxyXG4gICAgICB0YXJnZXRzLmZvckVhY2goZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgICQkLmFkZENhY2hlKGQuaWRfb3JnLCBkKTtcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiB0YXJnZXRzO1xyXG4gIH07XG5cbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuaXNFcG9jaHMgPSBmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXMsIGNvbmZpZyA9ICQkLmNvbmZpZztcclxuICAgICAgcmV0dXJuIGNvbmZpZy5kYXRhX2Vwb2NocyAmJiBrZXkgPT09IGNvbmZpZy5kYXRhX2Vwb2NocztcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmlzWCA9IGZ1bmN0aW9uIChrZXkpIHtcclxuICAgICAgdmFyICQkID0gdGhpcywgY29uZmlnID0gJCQuY29uZmlnO1xyXG4gICAgICByZXR1cm4gKChjb25maWcuZGF0YV94ICYmIGtleSA9PT0gY29uZmlnLmRhdGFfeCkgfHxcclxuICAgICAgICAgIChub3RFbXB0eShjb25maWcuZGF0YV94cykgJiYgaGFzVmFsdWUoY29uZmlnLmRhdGFfeHMsIGtleSkpKTtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmlzTm90WCA9IGZ1bmN0aW9uIChrZXkpIHtcclxuICAgICAgcmV0dXJuICF0aGlzLmlzWChrZXkpO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuaXNOb3RYQW5kTm90RXBvY2hzID0gZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICByZXR1cm4gIXRoaXMuaXNYKGtleSkgJiYgIXRoaXMuaXNFcG9jaHMoa2V5KTtcclxuICB9O1xyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgd2hldGhlciB0aGUgbm9ybWFsaXplZCBzdGFjayBvcHRpb24gaXMgZW5hYmxlZCBvciBub3QuXHJcbiAgICpcclxuICAgKiBUbyBiZSBlbmFibGVkIGl0IG11c3QgYWxzbyBoYXZlIGRhdGEuZ3JvdXBzIGRlZmluZWQuXHJcbiAgICpcclxuICAgKiBAcmV0dXJuIHtib29sZWFufVxyXG4gICAqL1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmlzU3RhY2tOb3JtYWxpemVkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5jb25maWcuZGF0YV9zdGFja19ub3JtYWxpemUgJiYgdGhpcy5jb25maWcuZGF0YV9ncm91cHMubGVuZ3RoID4gMDtcclxuICB9O1xyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgd2hldGhlciB0aGUgYXhpcyBpcyBub3JtYWxpemVkIG9yIG5vdC5cclxuICAgKlxyXG4gICAqIEFuIGF4aXMgaXMgbm9ybWFsaXplZCBhcyBsb25nIGFzIG9uZSBvZiBpdHMgYXNzb2NpYXRlZCB0YXJnZXRcclxuICAgKiBpcyBub3JtYWxpemVkLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIGF4aXNJZCBBeGlzIElEICh5IG9yIHkyKVxyXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59XHJcbiAgICovXHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuaXNBeGlzTm9ybWFsaXplZCA9IGZ1bmN0aW9uIChheGlzSWQpIHtcclxuICAgICAgdmFyICQkID0gdGhpcztcclxuICAgICAgaWYgKCEkJC5pc1N0YWNrTm9ybWFsaXplZCgpKSB7XHJcbiAgICAgICAgICAvLyBzaG9ydGN1dFxyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiAkJC5kYXRhLnRhcmdldHNcclxuICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKHRhcmdldCkgeyByZXR1cm4gJCQuYXhpcy5nZXRJZCh0YXJnZXQuaWQpID09PSBheGlzSWQ7IH0pXHJcbiAgICAgICAgICAuc29tZShmdW5jdGlvbiAodGFyZ2V0KSB7IHJldHVybiAkJC5pc1RhcmdldE5vcm1hbGl6ZWQodGFyZ2V0LmlkKTsgfSk7XHJcbiAgfTtcclxuICAvKipcclxuICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIHZhbHVlcyBmb3IgdGhpcyB0YXJnZXQgSUQgaXMgbm9ybWFsaXplZCBvciBub3QuXHJcbiAgICpcclxuICAgKiBUbyBiZSBub3JtYWxpemVkIHRoZSBvcHRpb24gbmVlZHMgdG8gYmUgZW5hYmxlZCBhbmQgdGFyZ2V0IG5lZWRzXHJcbiAgICogdG8gYmUgZGVmaW5lZCBpbiBgZGF0YS5ncm91cHNgLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHRhcmdldElkIElEIG9mIHRoZSB0YXJnZXRcclxuICAgKiBAcmV0dXJuIHtCb29sZWFufSBUcnVlIGlmIHRoZSB0YXJnZXQgaXMgbm9ybWFsaXplZCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gICAqL1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmlzVGFyZ2V0Tm9ybWFsaXplZCA9IGZ1bmN0aW9uICh0YXJnZXRJZCkge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzO1xyXG4gICAgICByZXR1cm4gKCQkLmlzU3RhY2tOb3JtYWxpemVkKCkgJiZcclxuICAgICAgICAgICQkLmNvbmZpZy5kYXRhX2dyb3Vwcy5zb21lKGZ1bmN0aW9uIChncm91cCkgeyByZXR1cm4gZ3JvdXAuaW5jbHVkZXModGFyZ2V0SWQpOyB9KSk7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5nZXRYS2V5ID0gZnVuY3Rpb24gKGlkKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXMsIGNvbmZpZyA9ICQkLmNvbmZpZztcclxuICAgICAgcmV0dXJuIGNvbmZpZy5kYXRhX3hcclxuICAgICAgICAgID8gY29uZmlnLmRhdGFfeFxyXG4gICAgICAgICAgOiBub3RFbXB0eShjb25maWcuZGF0YV94cylcclxuICAgICAgICAgICAgICA/IGNvbmZpZy5kYXRhX3hzW2lkXVxyXG4gICAgICAgICAgICAgIDogbnVsbDtcclxuICB9O1xyXG4gIC8qKlxyXG4gICAqIEdldCBzdW0gb2YgdmlzaWJsZSBkYXRhIHBlciBpbmRleCBmb3IgZ2l2ZW4gYXhpcy5cclxuICAgKlxyXG4gICAqIEV4cGVjdCBheGlzSWQgdG8gYmUgZWl0aGVyICd5JyBvciAneTInLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKiBAcGFyYW0gYXhpc0lkIENvbXB1dGUgc3VtIGZvciBkYXRhIGFzc29jaWF0ZWQgdG8gZ2l2ZW4gYXhpcy5cclxuICAgKiBAcmV0dXJuIHtBcnJheX1cclxuICAgKi9cclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5nZXRUb3RhbFBlckluZGV4ID0gZnVuY3Rpb24gKGF4aXNJZCkge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzO1xyXG4gICAgICBpZiAoISQkLmlzU3RhY2tOb3JtYWxpemVkKCkpIHtcclxuICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9XHJcbiAgICAgIHZhciBjYWNoZWQgPSAkJC5nZXRGcm9tQ2FjaGUoJ2dldFRvdGFsUGVySW5kZXgnKTtcclxuICAgICAgaWYgKGNhY2hlZCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICByZXR1cm4gY2FjaGVkW2F4aXNJZF07XHJcbiAgICAgIH1cclxuICAgICAgdmFyIHN1bSA9IHsgeTogW10sIHkyOiBbXSB9O1xyXG4gICAgICAkJC5kYXRhLnRhcmdldHNcclxuICAgICAgICAgIC8vIGtlZXAgb25seSB0YXJnZXQgdGhhdCBhcmUgbm9ybWFsaXplZFxyXG4gICAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAodGFyZ2V0KSB7IHJldHVybiAkJC5pc1RhcmdldE5vcm1hbGl6ZWQodGFyZ2V0LmlkKTsgfSlcclxuICAgICAgICAgIC8vIGtlZXAgb25seSB0YXJnZXQgdGhhdCBhcmUgdmlzaWJsZVxyXG4gICAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAodGFyZ2V0KSB7IHJldHVybiAkJC5pc1RhcmdldFRvU2hvdyh0YXJnZXQuaWQpOyB9KVxyXG4gICAgICAgICAgLy8gY29tcHV0ZSBzdW0gcGVyIGF4aXNcclxuICAgICAgICAgIC5mb3JFYWNoKGZ1bmN0aW9uICh0YXJnZXQpIHtcclxuICAgICAgICAgIHZhciBzdW1CeUF4aXMgPSBzdW1bJCQuYXhpcy5nZXRJZCh0YXJnZXQuaWQpXTtcclxuICAgICAgICAgIHRhcmdldC52YWx1ZXMuZm9yRWFjaChmdW5jdGlvbiAodiwgaSkge1xyXG4gICAgICAgICAgICAgIGlmICghc3VtQnlBeGlzW2ldKSB7XHJcbiAgICAgICAgICAgICAgICAgIHN1bUJ5QXhpc1tpXSA9IDA7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHN1bUJ5QXhpc1tpXSArPSBpc051bWJlcih2LnZhbHVlKSA/IHYudmFsdWUgOiAwO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgICAkJC5hZGRUb0NhY2hlKCdnZXRUb3RhbFBlckluZGV4Jywgc3VtKTtcclxuICAgICAgcmV0dXJuIHN1bVtheGlzSWRdO1xyXG4gIH07XHJcbiAgLyoqXHJcbiAgICogR2V0IHN1bSBvZiB2aXNpYmxlIGRhdGEuXHJcbiAgICpcclxuICAgKiBTaG91bGQgYmUgdXNlZCBmb3Igbm9ybWFsaXNlZCBkYXRhIG9ubHkgc2luY2UgYWxsIHZhbHVlc1xyXG4gICAqIGFyZSBleHBlY3RlZCB0byBiZSBwb3NpdGl2ZS5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICogQHJldHVybiB7TnVtYmVyfVxyXG4gICAqL1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmdldFRvdGFsRGF0YVN1bSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgdmFyICQkID0gdGhpcztcclxuICAgICAgdmFyIGNhY2hlZCA9ICQkLmdldEZyb21DYWNoZSgnZ2V0VG90YWxEYXRhU3VtJyk7XHJcbiAgICAgIGlmIChjYWNoZWQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgcmV0dXJuIGNhY2hlZDtcclxuICAgICAgfVxyXG4gICAgICB2YXIgdG90YWxEYXRhU3VtID0gZmxhdHRlbkFycmF5KCQkLmRhdGEudGFyZ2V0c1xyXG4gICAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAodGFyZ2V0KSB7IHJldHVybiAkJC5pc1RhcmdldFRvU2hvdyh0YXJnZXQuaWQpOyB9KVxyXG4gICAgICAgICAgLm1hcChmdW5jdGlvbiAodGFyZ2V0KSB7IHJldHVybiB0YXJnZXQudmFsdWVzOyB9KSlcclxuICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKGQpIHsgcmV0dXJuIGQudmFsdWU7IH0pXHJcbiAgICAgICAgICAucmVkdWNlKGZ1bmN0aW9uIChwLCBjKSB7IHJldHVybiBwICsgYzsgfSwgMCk7XHJcbiAgICAgICQkLmFkZFRvQ2FjaGUoJ2dldFRvdGFsRGF0YVN1bScsIHRvdGFsRGF0YVN1bSk7XHJcbiAgICAgIHJldHVybiB0b3RhbERhdGFTdW07XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5nZXRYVmFsdWVzT2ZYS2V5ID0gZnVuY3Rpb24gKGtleSwgdGFyZ2V0cykge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzLCB4VmFsdWVzLCBpZHMgPSB0YXJnZXRzICYmIG5vdEVtcHR5KHRhcmdldHMpID8gJCQubWFwVG9JZHModGFyZ2V0cykgOiBbXTtcclxuICAgICAgaWRzLmZvckVhY2goZnVuY3Rpb24gKGlkKSB7XHJcbiAgICAgICAgICBpZiAoJCQuZ2V0WEtleShpZCkgPT09IGtleSkge1xyXG4gICAgICAgICAgICAgIHhWYWx1ZXMgPSAkJC5kYXRhLnhzW2lkXTtcclxuICAgICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiB4VmFsdWVzO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuZ2V0WFZhbHVlID0gZnVuY3Rpb24gKGlkLCBpKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXM7XHJcbiAgICAgIHJldHVybiBpZCBpbiAkJC5kYXRhLnhzICYmICQkLmRhdGEueHNbaWRdICYmIGlzVmFsdWUoJCQuZGF0YS54c1tpZF1baV0pXHJcbiAgICAgICAgICA/ICQkLmRhdGEueHNbaWRdW2ldXHJcbiAgICAgICAgICA6IGk7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5nZXRPdGhlclRhcmdldFhzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzLCBpZHNGb3JYID0gT2JqZWN0LmtleXMoJCQuZGF0YS54cyk7XHJcbiAgICAgIHJldHVybiBpZHNGb3JYLmxlbmd0aCA/ICQkLmRhdGEueHNbaWRzRm9yWFswXV0gOiBudWxsO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuZ2V0T3RoZXJUYXJnZXRYID0gZnVuY3Rpb24gKGluZGV4KSB7XHJcbiAgICAgIHZhciB4cyA9IHRoaXMuZ2V0T3RoZXJUYXJnZXRYcygpO1xyXG4gICAgICByZXR1cm4geHMgJiYgaW5kZXggPCB4cy5sZW5ndGggPyB4c1tpbmRleF0gOiBudWxsO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuYWRkWHMgPSBmdW5jdGlvbiAoeHMpIHtcclxuICAgICAgdmFyICQkID0gdGhpcztcclxuICAgICAgT2JqZWN0LmtleXMoeHMpLmZvckVhY2goZnVuY3Rpb24gKGlkKSB7XHJcbiAgICAgICAgICAkJC5jb25maWcuZGF0YV94c1tpZF0gPSB4c1tpZF07XHJcbiAgICAgIH0pO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuYWRkTmFtZSA9IGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXMsIG5hbWU7XHJcbiAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAgICAgICBuYW1lID0gJCQuY29uZmlnLmRhdGFfbmFtZXNbZGF0YS5pZF07XHJcbiAgICAgICAgICBkYXRhLm5hbWUgPSBuYW1lICE9PSB1bmRlZmluZWQgPyBuYW1lIDogZGF0YS5pZDtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZGF0YTtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmdldFZhbHVlT25JbmRleCA9IGZ1bmN0aW9uICh2YWx1ZXMsIGluZGV4KSB7XHJcbiAgICAgIHZhciB2YWx1ZU9uSW5kZXggPSB2YWx1ZXMuZmlsdGVyKGZ1bmN0aW9uICh2KSB7XHJcbiAgICAgICAgICByZXR1cm4gdi5pbmRleCA9PT0gaW5kZXg7XHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gdmFsdWVPbkluZGV4Lmxlbmd0aCA/IHZhbHVlT25JbmRleFswXSA6IG51bGw7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS51cGRhdGVUYXJnZXRYID0gZnVuY3Rpb24gKHRhcmdldHMsIHgpIHtcclxuICAgICAgdmFyICQkID0gdGhpcztcclxuICAgICAgdGFyZ2V0cy5mb3JFYWNoKGZ1bmN0aW9uICh0KSB7XHJcbiAgICAgICAgICB0LnZhbHVlcy5mb3JFYWNoKGZ1bmN0aW9uICh2LCBpKSB7XHJcbiAgICAgICAgICAgICAgdi54ID0gJCQuZ2VuZXJhdGVUYXJnZXRYKHhbaV0sIHQuaWQsIGkpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICAkJC5kYXRhLnhzW3QuaWRdID0geDtcclxuICAgICAgfSk7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS51cGRhdGVUYXJnZXRYcyA9IGZ1bmN0aW9uICh0YXJnZXRzLCB4cykge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzO1xyXG4gICAgICB0YXJnZXRzLmZvckVhY2goZnVuY3Rpb24gKHQpIHtcclxuICAgICAgICAgIGlmICh4c1t0LmlkXSkge1xyXG4gICAgICAgICAgICAgICQkLnVwZGF0ZVRhcmdldFgoW3RdLCB4c1t0LmlkXSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuZ2VuZXJhdGVUYXJnZXRYID0gZnVuY3Rpb24gKHJhd1gsIGlkLCBpbmRleCkge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzLCB4O1xyXG4gICAgICBpZiAoJCQuaXNUaW1lU2VyaWVzKCkpIHtcclxuICAgICAgICAgIHggPSByYXdYID8gJCQucGFyc2VEYXRlKHJhd1gpIDogJCQucGFyc2VEYXRlKCQkLmdldFhWYWx1ZShpZCwgaW5kZXgpKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICgkJC5pc0N1c3RvbVgoKSAmJiAhJCQuaXNDYXRlZ29yaXplZCgpKSB7XHJcbiAgICAgICAgICB4ID0gaXNWYWx1ZShyYXdYKSA/ICtyYXdYIDogJCQuZ2V0WFZhbHVlKGlkLCBpbmRleCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB4ID0gaW5kZXg7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHg7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5jbG9uZVRhcmdldCA9IGZ1bmN0aW9uICh0YXJnZXQpIHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIGlkOiB0YXJnZXQuaWQsXHJcbiAgICAgICAgICBpZF9vcmc6IHRhcmdldC5pZF9vcmcsXHJcbiAgICAgICAgICB2YWx1ZXM6IHRhcmdldC52YWx1ZXMubWFwKGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgeDogZC54LFxyXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogZC52YWx1ZSxcclxuICAgICAgICAgICAgICAgICAgaWQ6IGQuaWRcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfSlcclxuICAgICAgfTtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmdldE1heERhdGFDb3VudCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgdmFyICQkID0gdGhpcztcclxuICAgICAgcmV0dXJuICQkLmQzLm1heCgkJC5kYXRhLnRhcmdldHMsIGZ1bmN0aW9uICh0KSB7XHJcbiAgICAgICAgICByZXR1cm4gdC52YWx1ZXMubGVuZ3RoO1xyXG4gICAgICB9KTtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLm1hcFRvSWRzID0gZnVuY3Rpb24gKHRhcmdldHMpIHtcclxuICAgICAgcmV0dXJuIHRhcmdldHMubWFwKGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICByZXR1cm4gZC5pZDtcclxuICAgICAgfSk7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5tYXBUb1RhcmdldElkcyA9IGZ1bmN0aW9uIChpZHMpIHtcclxuICAgICAgdmFyICQkID0gdGhpcztcclxuICAgICAgcmV0dXJuIGlkcyA/IFtdLmNvbmNhdChpZHMpIDogJCQubWFwVG9JZHMoJCQuZGF0YS50YXJnZXRzKTtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmhhc1RhcmdldCA9IGZ1bmN0aW9uICh0YXJnZXRzLCBpZCkge1xyXG4gICAgICB2YXIgaWRzID0gdGhpcy5tYXBUb0lkcyh0YXJnZXRzKSwgaTtcclxuICAgICAgZm9yIChpID0gMDsgaSA8IGlkcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgaWYgKGlkc1tpXSA9PT0gaWQpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5pc1RhcmdldFRvU2hvdyA9IGZ1bmN0aW9uICh0YXJnZXRJZCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5oaWRkZW5UYXJnZXRJZHMuaW5kZXhPZih0YXJnZXRJZCkgPCAwO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuaXNMZWdlbmRUb1Nob3cgPSBmdW5jdGlvbiAodGFyZ2V0SWQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuaGlkZGVuTGVnZW5kSWRzLmluZGV4T2YodGFyZ2V0SWQpIDwgMDtcclxuICB9O1xyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgb25seSB2aXNpYmxlIHRhcmdldHMuXHJcbiAgICpcclxuICAgKiBUaGlzIGlzIHRoZSBzYW1lIGFzIGNhbGxpbmcge0BsaW5rIGZpbHRlclRhcmdldHNUb1Nob3d9IG9uICQkLmRhdGEudGFyZ2V0cy5cclxuICAgKlxyXG4gICAqIEByZXR1cm4ge0FycmF5fVxyXG4gICAqL1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmdldFRhcmdldHNUb1Nob3cgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXM7XHJcbiAgICAgIHJldHVybiAkJC5maWx0ZXJUYXJnZXRzVG9TaG93KCQkLmRhdGEudGFyZ2V0cyk7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5maWx0ZXJUYXJnZXRzVG9TaG93ID0gZnVuY3Rpb24gKHRhcmdldHMpIHtcclxuICAgICAgdmFyICQkID0gdGhpcztcclxuICAgICAgcmV0dXJuIHRhcmdldHMuZmlsdGVyKGZ1bmN0aW9uICh0KSB7XHJcbiAgICAgICAgICByZXR1cm4gJCQuaXNUYXJnZXRUb1Nob3codC5pZCk7XHJcbiAgICAgIH0pO1xyXG4gIH07XHJcbiAgLyoqXHJcbiAgICogQHJldHVybiB7QXJyYXl9IFJldHVybnMgYWxsIHRoZSB0YXJnZXRzIGF0dGFjaGVkIHRvIHRoZSBjaGFydCwgdmlzaWJsZSBvciBub3RcclxuICAgKi9cclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5nZXRUYXJnZXRzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzO1xyXG4gICAgICByZXR1cm4gJCQuZGF0YS50YXJnZXRzO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUubWFwVGFyZ2V0c1RvVW5pcXVlWHMgPSBmdW5jdGlvbiAodGFyZ2V0cykge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzO1xyXG4gICAgICB2YXIgeHMgPSAkJC5kM1xyXG4gICAgICAgICAgLnNldCgkJC5kMy5tZXJnZSh0YXJnZXRzLm1hcChmdW5jdGlvbiAodCkge1xyXG4gICAgICAgICAgcmV0dXJuIHQudmFsdWVzLm1hcChmdW5jdGlvbiAodikge1xyXG4gICAgICAgICAgICAgIHJldHVybiArdi54O1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH0pKSlcclxuICAgICAgICAgIC52YWx1ZXMoKTtcclxuICAgICAgeHMgPSAkJC5pc1RpbWVTZXJpZXMoKVxyXG4gICAgICAgICAgPyB4cy5tYXAoZnVuY3Rpb24gKHgpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoK3gpO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIDogeHMubWFwKGZ1bmN0aW9uICh4KSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuICt4O1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIHJldHVybiB4cy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XHJcbiAgICAgICAgICByZXR1cm4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IGEgPj0gYiA/IDAgOiBOYU47XHJcbiAgICAgIH0pO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuYWRkSGlkZGVuVGFyZ2V0SWRzID0gZnVuY3Rpb24gKHRhcmdldElkcykge1xyXG4gICAgICB0YXJnZXRJZHMgPSB0YXJnZXRJZHMgaW5zdGFuY2VvZiBBcnJheSA/IHRhcmdldElkcyA6IG5ldyBBcnJheSh0YXJnZXRJZHMpO1xyXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRhcmdldElkcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgaWYgKHRoaXMuaGlkZGVuVGFyZ2V0SWRzLmluZGV4T2YodGFyZ2V0SWRzW2ldKSA8IDApIHtcclxuICAgICAgICAgICAgICB0aGlzLmhpZGRlblRhcmdldElkcyA9IHRoaXMuaGlkZGVuVGFyZ2V0SWRzLmNvbmNhdCh0YXJnZXRJZHNbaV0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucmVzZXRDYWNoZSgpO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUucmVtb3ZlSGlkZGVuVGFyZ2V0SWRzID0gZnVuY3Rpb24gKHRhcmdldElkcykge1xyXG4gICAgICB0aGlzLmhpZGRlblRhcmdldElkcyA9IHRoaXMuaGlkZGVuVGFyZ2V0SWRzLmZpbHRlcihmdW5jdGlvbiAoaWQpIHtcclxuICAgICAgICAgIHJldHVybiB0YXJnZXRJZHMuaW5kZXhPZihpZCkgPCAwO1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5yZXNldENhY2hlKCk7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5hZGRIaWRkZW5MZWdlbmRJZHMgPSBmdW5jdGlvbiAodGFyZ2V0SWRzKSB7XHJcbiAgICAgIHRhcmdldElkcyA9IHRhcmdldElkcyBpbnN0YW5jZW9mIEFycmF5ID8gdGFyZ2V0SWRzIDogbmV3IEFycmF5KHRhcmdldElkcyk7XHJcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGFyZ2V0SWRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5oaWRkZW5MZWdlbmRJZHMuaW5kZXhPZih0YXJnZXRJZHNbaV0pIDwgMCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuaGlkZGVuTGVnZW5kSWRzID0gdGhpcy5oaWRkZW5MZWdlbmRJZHMuY29uY2F0KHRhcmdldElkc1tpXSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgIH1cclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLnJlbW92ZUhpZGRlbkxlZ2VuZElkcyA9IGZ1bmN0aW9uICh0YXJnZXRJZHMpIHtcclxuICAgICAgdGhpcy5oaWRkZW5MZWdlbmRJZHMgPSB0aGlzLmhpZGRlbkxlZ2VuZElkcy5maWx0ZXIoZnVuY3Rpb24gKGlkKSB7XHJcbiAgICAgICAgICByZXR1cm4gdGFyZ2V0SWRzLmluZGV4T2YoaWQpIDwgMDtcclxuICAgICAgfSk7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5nZXRWYWx1ZXNBc0lkS2V5ZWQgPSBmdW5jdGlvbiAodGFyZ2V0cykge1xyXG4gICAgICB2YXIgeXMgPSB7fTtcclxuICAgICAgdGFyZ2V0cy5mb3JFYWNoKGZ1bmN0aW9uICh0KSB7XHJcbiAgICAgICAgICB5c1t0LmlkXSA9IFtdO1xyXG4gICAgICAgICAgdC52YWx1ZXMuZm9yRWFjaChmdW5jdGlvbiAodikge1xyXG4gICAgICAgICAgICAgIHlzW3QuaWRdLnB1c2godi52YWx1ZSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiB5cztcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmNoZWNrVmFsdWVJblRhcmdldHMgPSBmdW5jdGlvbiAodGFyZ2V0cywgY2hlY2tlcikge1xyXG4gICAgICB2YXIgaWRzID0gT2JqZWN0LmtleXModGFyZ2V0cyksIGksIGosIHZhbHVlcztcclxuICAgICAgZm9yIChpID0gMDsgaSA8IGlkcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgdmFsdWVzID0gdGFyZ2V0c1tpZHNbaV1dLnZhbHVlcztcclxuICAgICAgICAgIGZvciAoaiA9IDA7IGogPCB2YWx1ZXMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICBpZiAoY2hlY2tlcih2YWx1ZXNbal0udmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5oYXNOZWdhdGl2ZVZhbHVlSW5UYXJnZXRzID0gZnVuY3Rpb24gKHRhcmdldHMpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuY2hlY2tWYWx1ZUluVGFyZ2V0cyh0YXJnZXRzLCBmdW5jdGlvbiAodikge1xyXG4gICAgICAgICAgcmV0dXJuIHYgPCAwO1xyXG4gICAgICB9KTtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmhhc1Bvc2l0aXZlVmFsdWVJblRhcmdldHMgPSBmdW5jdGlvbiAodGFyZ2V0cykge1xyXG4gICAgICByZXR1cm4gdGhpcy5jaGVja1ZhbHVlSW5UYXJnZXRzKHRhcmdldHMsIGZ1bmN0aW9uICh2KSB7XHJcbiAgICAgICAgICByZXR1cm4gdiA+IDA7XHJcbiAgICAgIH0pO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuaXNPcmRlckRlc2MgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHZhciBjb25maWcgPSB0aGlzLmNvbmZpZztcclxuICAgICAgcmV0dXJuICh0eXBlb2YgY29uZmlnLmRhdGFfb3JkZXIgPT09ICdzdHJpbmcnICYmXHJcbiAgICAgICAgICBjb25maWcuZGF0YV9vcmRlci50b0xvd2VyQ2FzZSgpID09PSAnZGVzYycpO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuaXNPcmRlckFzYyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgdmFyIGNvbmZpZyA9IHRoaXMuY29uZmlnO1xyXG4gICAgICByZXR1cm4gKHR5cGVvZiBjb25maWcuZGF0YV9vcmRlciA9PT0gJ3N0cmluZycgJiZcclxuICAgICAgICAgIGNvbmZpZy5kYXRhX29yZGVyLnRvTG93ZXJDYXNlKCkgPT09ICdhc2MnKTtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmdldE9yZGVyRnVuY3Rpb24gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXMsIGNvbmZpZyA9ICQkLmNvbmZpZywgb3JkZXJBc2MgPSAkJC5pc09yZGVyQXNjKCksIG9yZGVyRGVzYyA9ICQkLmlzT3JkZXJEZXNjKCk7XHJcbiAgICAgIGlmIChvcmRlckFzYyB8fCBvcmRlckRlc2MpIHtcclxuICAgICAgICAgIHZhciByZWR1Y2VyID0gZnVuY3Rpb24gKHAsIGMpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gcCArIE1hdGguYWJzKGMudmFsdWUpO1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAodDEsIHQyKSB7XHJcbiAgICAgICAgICAgICAgdmFyIHQxU3VtID0gdDEudmFsdWVzLnJlZHVjZShyZWR1Y2VyLCAwKSwgdDJTdW0gPSB0Mi52YWx1ZXMucmVkdWNlKHJlZHVjZXIsIDApO1xyXG4gICAgICAgICAgICAgIHJldHVybiBvcmRlckFzYyA/IHQyU3VtIC0gdDFTdW0gOiB0MVN1bSAtIHQyU3VtO1xyXG4gICAgICAgICAgfTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChpc0Z1bmN0aW9uKGNvbmZpZy5kYXRhX29yZGVyKSkge1xyXG4gICAgICAgICAgcmV0dXJuIGNvbmZpZy5kYXRhX29yZGVyO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKGlzQXJyYXkoY29uZmlnLmRhdGFfb3JkZXIpKSB7XHJcbiAgICAgICAgICB2YXIgb3JkZXIgPSBjb25maWcuZGF0YV9vcmRlcjtcclxuICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAodDEsIHQyKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIG9yZGVyLmluZGV4T2YodDEuaWQpIC0gb3JkZXIuaW5kZXhPZih0Mi5pZCk7XHJcbiAgICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5vcmRlclRhcmdldHMgPSBmdW5jdGlvbiAodGFyZ2V0cykge1xyXG4gICAgICB2YXIgZmN0ID0gdGhpcy5nZXRPcmRlckZ1bmN0aW9uKCk7XHJcbiAgICAgIGlmIChmY3QpIHtcclxuICAgICAgICAgIHRhcmdldHMuc29ydChmY3QpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0YXJnZXRzO1xyXG4gIH07XHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyBhbGwgdGhlIHZhbHVlcyBmcm9tIHRoZSBnaXZlbiB0YXJnZXRzIGF0IHRoZSBnaXZlbiBpbmRleC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7QXJyYXl9IHRhcmdldHNcclxuICAgKiBAcGFyYW0ge051bWJlcn0gaW5kZXhcclxuICAgKiBAcmV0dXJuIHtBcnJheX1cclxuICAgKi9cclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5maWx0ZXJCeUluZGV4ID0gZnVuY3Rpb24gKHRhcmdldHMsIGluZGV4KSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmQzLm1lcmdlKHRhcmdldHMubWFwKGZ1bmN0aW9uICh0KSB7IHJldHVybiB0LnZhbHVlcy5maWx0ZXIoZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHYuaW5kZXggPT09IGluZGV4OyB9KTsgfSkpO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuZmlsdGVyQnlYID0gZnVuY3Rpb24gKHRhcmdldHMsIHgpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZDNcclxuICAgICAgICAgIC5tZXJnZSh0YXJnZXRzLm1hcChmdW5jdGlvbiAodCkge1xyXG4gICAgICAgICAgcmV0dXJuIHQudmFsdWVzO1xyXG4gICAgICB9KSlcclxuICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKHYpIHtcclxuICAgICAgICAgIHJldHVybiB2LnggLSB4ID09PSAwO1xyXG4gICAgICB9KTtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmZpbHRlclJlbW92ZU51bGwgPSBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICByZXR1cm4gZGF0YS5maWx0ZXIoZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIHJldHVybiBpc1ZhbHVlKGQudmFsdWUpO1xyXG4gICAgICB9KTtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmZpbHRlckJ5WERvbWFpbiA9IGZ1bmN0aW9uICh0YXJnZXRzLCB4RG9tYWluKSB7XHJcbiAgICAgIHJldHVybiB0YXJnZXRzLm1hcChmdW5jdGlvbiAodCkge1xyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICBpZDogdC5pZCxcclxuICAgICAgICAgICAgICBpZF9vcmc6IHQuaWRfb3JnLFxyXG4gICAgICAgICAgICAgIHZhbHVlczogdC52YWx1ZXMuZmlsdGVyKGZ1bmN0aW9uICh2KSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiB4RG9tYWluWzBdIDw9IHYueCAmJiB2LnggPD0geERvbWFpblsxXTtcclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgfTtcclxuICAgICAgfSk7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5oYXNEYXRhTGFiZWwgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHZhciBjb25maWcgPSB0aGlzLmNvbmZpZztcclxuICAgICAgaWYgKHR5cGVvZiBjb25maWcuZGF0YV9sYWJlbHMgPT09ICdib29sZWFuJyAmJiBjb25maWcuZGF0YV9sYWJlbHMpIHtcclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHR5cGVvZiBjb25maWcuZGF0YV9sYWJlbHMgPT09ICdvYmplY3QnICYmXHJcbiAgICAgICAgICBub3RFbXB0eShjb25maWcuZGF0YV9sYWJlbHMpKSB7XHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5nZXREYXRhTGFiZWxMZW5ndGggPSBmdW5jdGlvbiAobWluLCBtYXgsIGtleSkge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzLCBsZW5ndGhzID0gWzAsIDBdLCBwYWRkaW5nQ29lZiA9IDEuMztcclxuICAgICAgJCQuc2VsZWN0Q2hhcnRcclxuICAgICAgICAgIC5zZWxlY3QoJ3N2ZycpXHJcbiAgICAgICAgICAuc2VsZWN0QWxsKCcuZHVtbXknKVxyXG4gICAgICAgICAgLmRhdGEoW21pbiwgbWF4XSlcclxuICAgICAgICAgIC5lbnRlcigpXHJcbiAgICAgICAgICAuYXBwZW5kKCd0ZXh0JylcclxuICAgICAgICAgIC50ZXh0KGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICByZXR1cm4gJCQuZGF0YUxhYmVsRm9ybWF0KGQuaWQpKGQpO1xyXG4gICAgICB9KVxyXG4gICAgICAgICAgLmVhY2goZnVuY3Rpb24gKGQsIGkpIHtcclxuICAgICAgICAgIGxlbmd0aHNbaV0gPSBnZXRCQm94KHRoaXMpW2tleV0gKiBwYWRkaW5nQ29lZjtcclxuICAgICAgfSlcclxuICAgICAgICAgIC5yZW1vdmUoKTtcclxuICAgICAgcmV0dXJuIGxlbmd0aHM7XHJcbiAgfTtcclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIGRhdGEgcG9pbnQgaXMgbm90IGFyYyB0eXBlLCBvdGhlcndpc2UgZmFsc2UuXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IGQgVGhlIGRhdGEgcG9pbnRcclxuICAgKiBAcmV0dXJuIHtib29sZWFufVxyXG4gICAqL1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmlzTm9uZUFyYyA9IGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmhhc1RhcmdldCh0aGlzLmRhdGEudGFyZ2V0cywgZC5pZCk7XHJcbiAgfTtcclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIGRhdGEgcG9pbnQgaXMgYXJjIHR5cGUsIG90aGVyd2lzZSBmYWxzZS5cclxuICAgKiBAcGFyYW0ge09iamVjdH0gZCBUaGUgZGF0YSBwb2ludFxyXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuaXNBcmMgPSBmdW5jdGlvbiAoZCkge1xyXG4gICAgICByZXR1cm4gJ2RhdGEnIGluIGQgJiYgdGhpcy5oYXNUYXJnZXQodGhpcy5kYXRhLnRhcmdldHMsIGQuZGF0YS5pZCk7XHJcbiAgfTtcclxuICAvKipcclxuICAgKiBGaW5kIHRoZSBjbG9zZXN0IHBvaW50IGZyb20gdGhlIGdpdmVuIHBvcyBhbW9uZyB0aGUgZ2l2ZW4gdGFyZ2V0cyBvclxyXG4gICAqIHVuZGVmaW5lZCBpZiBub25lIHNhdGlzZmllcyBjb25kaXRpb25zLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtBcnJheX0gdGFyZ2V0c1xyXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBvcyBBbiBbeCx5XSBjb29yZGluYXRlXHJcbiAgICogQHJldHVybiB7T2JqZWN0fHVuZGVmaW5lZH1cclxuICAgKi9cclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5maW5kQ2xvc2VzdEZyb21UYXJnZXRzID0gZnVuY3Rpb24gKHRhcmdldHMsIHBvcykge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzO1xyXG4gICAgICAvLyBmb3IgZWFjaCB0YXJnZXQsIGZpbmQgdGhlIGNsb3Nlc3QgcG9pbnRcclxuICAgICAgdmFyIGNhbmRpZGF0ZXMgPSB0YXJnZXRzXHJcbiAgICAgICAgICAubWFwKGZ1bmN0aW9uICh0KSB7XHJcbiAgICAgICAgICByZXR1cm4gJCQuZmluZENsb3Nlc3QodC52YWx1ZXMsIHBvcywgJCQuY29uZmlnLnRvb2x0aXBfaG9yaXpvbnRhbFxyXG4gICAgICAgICAgICAgID8gJCQuaG9yaXpvbnRhbERpc3RhbmNlLmJpbmQoJCQpXHJcbiAgICAgICAgICAgICAgOiAkJC5kaXN0LmJpbmQoJCQpLCAkJC5jb25maWcucG9pbnRfc2Vuc2l0aXZpdHkpO1xyXG4gICAgICB9KVxyXG4gICAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAodikgeyByZXR1cm4gdjsgfSk7XHJcbiAgICAgIC8vIHJldHVybnMgdGhlIGNsb3Nlc3Qgb2YgY2FuZGlkYXRlc1xyXG4gICAgICBpZiAoY2FuZGlkYXRlcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoY2FuZGlkYXRlcy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgIHJldHVybiBjYW5kaWRhdGVzWzBdO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuICQkLmZpbmRDbG9zZXN0KGNhbmRpZGF0ZXMsIHBvcywgJCQuZGlzdC5iaW5kKCQkKSk7XHJcbiAgICAgIH1cclxuICB9O1xyXG4gIC8qKlxyXG4gICAqIEZpbmQgdGhlIGNsb3Nlc3QgcG9pbnQgZnJvbSB0aGUgeCB2YWx1ZSBvciB1bmRlZmluZWQgaWYgbm9uZSBzYXRpc2ZpZXMgY29uZGl0aW9ucy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7QXJyYXl9IHRhcmdldHNcclxuICAgKiBAcGFyYW0ge0FycmF5fSB4IEEgdmFsdWUgb24gWCBheGlzXHJcbiAgICogQHJldHVybiB7T2JqZWN0fHVuZGVmaW5lZH1cclxuICAgKi9cclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5maW5kQ2xvc2VzdEZyb21UYXJnZXRzQnlYID0gZnVuY3Rpb24gKHRhcmdldHMsIHgpIHtcclxuICAgICAgdmFyIGNsb3Nlc3Q7XHJcbiAgICAgIHZhciBkaWZmO1xyXG4gICAgICB0YXJnZXRzLmZvckVhY2goZnVuY3Rpb24gKHQpIHtcclxuICAgICAgICAgIHQudmFsdWVzLmZvckVhY2goZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgICAgICB2YXIgbmV3RGlmZiA9IE1hdGguYWJzKHggLSBkLngpO1xyXG4gICAgICAgICAgICAgIGlmIChkaWZmID09PSB1bmRlZmluZWQgfHwgbmV3RGlmZiA8IGRpZmYpIHtcclxuICAgICAgICAgICAgICAgICAgY2xvc2VzdCA9IGQ7XHJcbiAgICAgICAgICAgICAgICAgIGRpZmYgPSBuZXdEaWZmO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIGNsb3Nlc3Q7XHJcbiAgfTtcclxuICAvKipcclxuICAgKiBVc2luZyBnaXZlbiBjb21wdXRlIGRpc3RhbmNlIG1ldGhvZCwgcmV0dXJucyB0aGUgY2xvc2VzdCBkYXRhIHBvaW50IGZyb20gdGhlXHJcbiAgICogZ2l2ZW4gcG9zaXRpb24uXHJcbiAgICpcclxuICAgKiBHaXZpbmcgb3B0aW9uYWxseSBhIG1pbmltdW0gZGlzdGFuY2UgdG8gc2F0aXNmeS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7QXJyYXl9IGRhdGFQb2ludHMgTGlzdCBvZiBEYXRhUG9pbnRzXHJcbiAgICogQHBhcmFtIHtBcnJheX0gcG9zIEFuIFt4LHldIGNvb3JkaW5hdGVcclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjb21wdXRlRGlzdCBGdW5jdGlvbiB0byBjb21wdXRlIGRpc3RhbmNlIGJldHdlZW4gMiBwb2ludHNcclxuICAgKiBAcGFyYW0ge051bWJlcn0gbWluRGlzdCBNaW5pbWFsIGRpc3RhbmNlIHRvIHNhdGlzZnlcclxuICAgKiBAcmV0dXJuIHtPYmplY3R8dW5kZWZpbmVkfSBDbG9zZXN0IGRhdGEgcG9pbnRcclxuICAgKi9cclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5maW5kQ2xvc2VzdCA9IGZ1bmN0aW9uIChkYXRhUG9pbnRzLCBwb3MsIGNvbXB1dGVEaXN0LCBtaW5EaXN0KSB7XHJcbiAgICAgIGlmIChtaW5EaXN0ID09PSB2b2lkIDApIHsgbWluRGlzdCA9IEluZmluaXR5OyB9XHJcbiAgICAgIHZhciAkJCA9IHRoaXM7XHJcbiAgICAgIHZhciBjbG9zZXN0O1xyXG4gICAgICAvLyBmaW5kIGNsb3Nlc3QgYmFyXHJcbiAgICAgIGRhdGFQb2ludHNcclxuICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHYgJiYgJCQuaXNCYXJUeXBlKHYuaWQpOyB9KVxyXG4gICAgICAgICAgLmZvckVhY2goZnVuY3Rpb24gKHYpIHtcclxuICAgICAgICAgIGlmICghY2xvc2VzdCkge1xyXG4gICAgICAgICAgICAgIHZhciBzaGFwZSA9ICQkLm1haW5cclxuICAgICAgICAgICAgICAgICAgLnNlbGVjdCgnLicgK1xyXG4gICAgICAgICAgICAgICAgICBDTEFTUy5iYXJzICtcclxuICAgICAgICAgICAgICAgICAgJCQuZ2V0VGFyZ2V0U2VsZWN0b3JTdWZmaXgodi5pZCkgK1xyXG4gICAgICAgICAgICAgICAgICAnIC4nICtcclxuICAgICAgICAgICAgICAgICAgQ0xBU1MuYmFyICtcclxuICAgICAgICAgICAgICAgICAgJy0nICtcclxuICAgICAgICAgICAgICAgICAgdi5pbmRleClcclxuICAgICAgICAgICAgICAgICAgLm5vZGUoKTtcclxuICAgICAgICAgICAgICBpZiAoJCQuaXNXaXRoaW5CYXIocG9zLCBzaGFwZSkpIHtcclxuICAgICAgICAgICAgICAgICAgY2xvc2VzdCA9IHY7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgLy8gZmluZCBjbG9zZXN0IHBvaW50IGZyb20gbm9uLWJhclxyXG4gICAgICBkYXRhUG9pbnRzXHJcbiAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uICh2KSB7IHJldHVybiB2ICYmICEkJC5pc0JhclR5cGUodi5pZCk7IH0pXHJcbiAgICAgICAgICAuZm9yRWFjaChmdW5jdGlvbiAodikge1xyXG4gICAgICAgICAgdmFyIGQgPSBjb21wdXRlRGlzdCh2LCBwb3MpO1xyXG4gICAgICAgICAgaWYgKGQgPCBtaW5EaXN0KSB7XHJcbiAgICAgICAgICAgICAgbWluRGlzdCA9IGQ7XHJcbiAgICAgICAgICAgICAgY2xvc2VzdCA9IHY7XHJcbiAgICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gY2xvc2VzdDtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmRpc3QgPSBmdW5jdGlvbiAoZGF0YSwgcG9zKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXMsIGNvbmZpZyA9ICQkLmNvbmZpZywgeEluZGV4ID0gY29uZmlnLmF4aXNfcm90YXRlZCA/IDEgOiAwLCB5SW5kZXggPSBjb25maWcuYXhpc19yb3RhdGVkID8gMCA6IDEsIHkgPSAkJC5jaXJjbGVZKGRhdGEsIGRhdGEuaW5kZXgpLCB4ID0gJCQueChkYXRhLngpO1xyXG4gICAgICByZXR1cm4gTWF0aC5zcXJ0KE1hdGgucG93KHggLSBwb3NbeEluZGV4XSwgMikgKyBNYXRoLnBvdyh5IC0gcG9zW3lJbmRleF0sIDIpKTtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmhvcml6b250YWxEaXN0YW5jZSA9IGZ1bmN0aW9uIChkYXRhLCBwb3MpIHtcclxuICAgICAgdmFyICQkID0gdGhpcywgY29uZmlnID0gJCQuY29uZmlnLCB4SW5kZXggPSBjb25maWcuYXhpc19yb3RhdGVkID8gMSA6IDAsIHggPSAkJC54KGRhdGEueCk7XHJcbiAgICAgIHJldHVybiBNYXRoLmFicyh4IC0gcG9zW3hJbmRleF0pO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuY29udmVydFZhbHVlc1RvU3RlcCA9IGZ1bmN0aW9uICh2YWx1ZXMpIHtcclxuICAgICAgdmFyIGNvbnZlcnRlZCA9IFtdLmNvbmNhdCh2YWx1ZXMpLCBpO1xyXG4gICAgICBpZiAoIXRoaXMuaXNDYXRlZ29yaXplZCgpKSB7XHJcbiAgICAgICAgICByZXR1cm4gdmFsdWVzO1xyXG4gICAgICB9XHJcbiAgICAgIGZvciAoaSA9IHZhbHVlcy5sZW5ndGggKyAxOyAwIDwgaTsgaS0tKSB7XHJcbiAgICAgICAgICBjb252ZXJ0ZWRbaV0gPSBjb252ZXJ0ZWRbaSAtIDFdO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnZlcnRlZFswXSA9IHtcclxuICAgICAgICAgIHg6IGNvbnZlcnRlZFswXS54IC0gMSxcclxuICAgICAgICAgIHZhbHVlOiBjb252ZXJ0ZWRbMF0udmFsdWUsXHJcbiAgICAgICAgICBpZDogY29udmVydGVkWzBdLmlkXHJcbiAgICAgIH07XHJcbiAgICAgIGNvbnZlcnRlZFt2YWx1ZXMubGVuZ3RoICsgMV0gPSB7XHJcbiAgICAgICAgICB4OiBjb252ZXJ0ZWRbdmFsdWVzLmxlbmd0aF0ueCArIDEsXHJcbiAgICAgICAgICB2YWx1ZTogY29udmVydGVkW3ZhbHVlcy5sZW5ndGhdLnZhbHVlLFxyXG4gICAgICAgICAgaWQ6IGNvbnZlcnRlZFt2YWx1ZXMubGVuZ3RoXS5pZFxyXG4gICAgICB9O1xyXG4gICAgICByZXR1cm4gY29udmVydGVkO1xyXG4gIH07XHJcbiAgLyoqXHJcbiAgICogR2V0IHJhdGlvIHZhbHVlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1N0cmluZ30gdHlwZSBSYXRpbyBmb3IgZ2l2ZW4gdHlwZVxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBkIERhdGEgdmFsdWUgb2JqZWN0XHJcbiAgICogQHBhcmFtIHtCb29sZWFufSBhc1BlcmNlbnQgQ29udmVydCB0aGUgcmV0dXJuIGFzIHBlcmNlbnQgb3Igbm90XHJcbiAgICogQHJldHVybiB7TnVtYmVyfSBSYXRpbyB2YWx1ZVxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuZ2V0UmF0aW8gPSBmdW5jdGlvbiAodHlwZSwgZCwgYXNQZXJjZW50KSB7XHJcbiAgICAgIGlmIChhc1BlcmNlbnQgPT09IHZvaWQgMCkgeyBhc1BlcmNlbnQgPSBmYWxzZTsgfVxyXG4gICAgICB2YXIgJCQgPSB0aGlzO1xyXG4gICAgICB2YXIgYXBpID0gJCQuYXBpO1xyXG4gICAgICB2YXIgcmF0aW8gPSAwO1xyXG4gICAgICBpZiAoZCAmJiBhcGkuZGF0YS5zaG93bi5jYWxsKGFwaSkubGVuZ3RoKSB7XHJcbiAgICAgICAgICByYXRpbyA9IGQucmF0aW8gfHwgZC52YWx1ZTtcclxuICAgICAgICAgIGlmICh0eXBlID09PSAnYXJjJykge1xyXG4gICAgICAgICAgICAgIGlmICgkJC5oYXNUeXBlKCdnYXVnZScpKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJhdGlvID1cclxuICAgICAgICAgICAgICAgICAgICAgIChkLmVuZEFuZ2xlIC0gZC5zdGFydEFuZ2xlKSAvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKE1hdGguUEkgKiAoJCQuY29uZmlnLmdhdWdlX2Z1bGxDaXJjbGUgPyAyIDogMSkpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgdmFyIHRvdGFsID0gJCQuZ2V0VG90YWxEYXRhU3VtKCk7XHJcbiAgICAgICAgICAgICAgICAgIHJhdGlvID0gZC52YWx1ZSAvIHRvdGFsO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT09ICdpbmRleCcpIHtcclxuICAgICAgICAgICAgICB2YXIgdG90YWwgPSAkJC5nZXRUb3RhbFBlckluZGV4KCQkLmF4aXMuZ2V0SWQoZC5pZCkpO1xyXG4gICAgICAgICAgICAgIGQucmF0aW8gPVxyXG4gICAgICAgICAgICAgICAgICBpc051bWJlcihkLnZhbHVlKSAmJiB0b3RhbCAmJiB0b3RhbFtkLmluZGV4XSA+IDBcclxuICAgICAgICAgICAgICAgICAgICAgID8gZC52YWx1ZSAvIHRvdGFsW2QuaW5kZXhdXHJcbiAgICAgICAgICAgICAgICAgICAgICA6IDA7XHJcbiAgICAgICAgICAgICAgcmF0aW8gPSBkLnJhdGlvO1xyXG4gICAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBhc1BlcmNlbnQgJiYgcmF0aW8gPyByYXRpbyAqIDEwMCA6IHJhdGlvO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUudXBkYXRlRGF0YUF0dHJpYnV0ZXMgPSBmdW5jdGlvbiAobmFtZSwgYXR0cnMpIHtcclxuICAgICAgdmFyICQkID0gdGhpcywgY29uZmlnID0gJCQuY29uZmlnLCBjdXJyZW50ID0gY29uZmlnWydkYXRhXycgKyBuYW1lXTtcclxuICAgICAgaWYgKHR5cGVvZiBhdHRycyA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgIHJldHVybiBjdXJyZW50O1xyXG4gICAgICB9XHJcbiAgICAgIE9iamVjdC5rZXlzKGF0dHJzKS5mb3JFYWNoKGZ1bmN0aW9uIChpZCkge1xyXG4gICAgICAgICAgY3VycmVudFtpZF0gPSBhdHRyc1tpZF07XHJcbiAgICAgIH0pO1xyXG4gICAgICAkJC5yZWRyYXcoe1xyXG4gICAgICAgICAgd2l0aExlZ2VuZDogdHJ1ZVxyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIGN1cnJlbnQ7XHJcbiAgfTtcblxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24gKHRhcmdldHMsIGFyZ3MpIHtcclxuICAgICAgdmFyICQkID0gdGhpcztcclxuICAgICAgaWYgKHRhcmdldHMpIHtcclxuICAgICAgICAgIC8vIGZpbHRlciBsb2FkaW5nIHRhcmdldHMgaWYgbmVlZGVkXHJcbiAgICAgICAgICBpZiAoYXJncy5maWx0ZXIpIHtcclxuICAgICAgICAgICAgICB0YXJnZXRzID0gdGFyZ2V0cy5maWx0ZXIoYXJncy5maWx0ZXIpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gc2V0IHR5cGUgaWYgYXJncy50eXBlcyB8fCBhcmdzLnR5cGUgc3BlY2lmaWVkXHJcbiAgICAgICAgICBpZiAoYXJncy50eXBlIHx8IGFyZ3MudHlwZXMpIHtcclxuICAgICAgICAgICAgICB0YXJnZXRzLmZvckVhY2goZnVuY3Rpb24gKHQpIHtcclxuICAgICAgICAgICAgICAgICAgdmFyIHR5cGUgPSBhcmdzLnR5cGVzICYmIGFyZ3MudHlwZXNbdC5pZF0gPyBhcmdzLnR5cGVzW3QuaWRdIDogYXJncy50eXBlO1xyXG4gICAgICAgICAgICAgICAgICAkJC5zZXRUYXJnZXRUeXBlKHQuaWQsIHR5cGUpO1xyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gVXBkYXRlL0FkZCBkYXRhXHJcbiAgICAgICAgICAkJC5kYXRhLnRhcmdldHMuZm9yRWFjaChmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGFyZ2V0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoZC5pZCA9PT0gdGFyZ2V0c1tpXS5pZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgZC52YWx1ZXMgPSB0YXJnZXRzW2ldLnZhbHVlcztcclxuICAgICAgICAgICAgICAgICAgICAgIHRhcmdldHMuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgICQkLmRhdGEudGFyZ2V0cyA9ICQkLmRhdGEudGFyZ2V0cy5jb25jYXQodGFyZ2V0cyk7IC8vIGFkZCByZW1haW5lZFxyXG4gICAgICB9XHJcbiAgICAgIC8vIFNldCB0YXJnZXRzXHJcbiAgICAgICQkLnVwZGF0ZVRhcmdldHMoJCQuZGF0YS50YXJnZXRzKTtcclxuICAgICAgLy8gUmVkcmF3IHdpdGggbmV3IHRhcmdldHNcclxuICAgICAgJCQucmVkcmF3KHtcclxuICAgICAgICAgIHdpdGhVcGRhdGVPcmdYRG9tYWluOiB0cnVlLFxyXG4gICAgICAgICAgd2l0aFVwZGF0ZVhEb21haW46IHRydWUsXHJcbiAgICAgICAgICB3aXRoTGVnZW5kOiB0cnVlXHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAoYXJncy5kb25lKSB7XHJcbiAgICAgICAgICBhcmdzLmRvbmUoKTtcclxuICAgICAgfVxyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUubG9hZEZyb21BcmdzID0gZnVuY3Rpb24gKGFyZ3MpIHtcclxuICAgICAgdmFyICQkID0gdGhpcztcclxuICAgICAgJCQucmVzZXRDYWNoZSgpO1xyXG4gICAgICBpZiAoYXJncy5kYXRhKSB7XHJcbiAgICAgICAgICAkJC5sb2FkKCQkLmNvbnZlcnREYXRhVG9UYXJnZXRzKGFyZ3MuZGF0YSksIGFyZ3MpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKGFyZ3MudXJsKSB7XHJcbiAgICAgICAgICAkJC5jb252ZXJ0VXJsVG9EYXRhKGFyZ3MudXJsLCBhcmdzLm1pbWVUeXBlLCBhcmdzLmhlYWRlcnMsIGFyZ3Mua2V5cywgZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgICAkJC5sb2FkKCQkLmNvbnZlcnREYXRhVG9UYXJnZXRzKGRhdGEpLCBhcmdzKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKGFyZ3MuanNvbikge1xyXG4gICAgICAgICAgJCQubG9hZCgkJC5jb252ZXJ0RGF0YVRvVGFyZ2V0cygkJC5jb252ZXJ0SnNvblRvRGF0YShhcmdzLmpzb24sIGFyZ3Mua2V5cykpLCBhcmdzKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChhcmdzLnJvd3MpIHtcclxuICAgICAgICAgICQkLmxvYWQoJCQuY29udmVydERhdGFUb1RhcmdldHMoJCQuY29udmVydFJvd3NUb0RhdGEoYXJncy5yb3dzKSksIGFyZ3MpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKGFyZ3MuY29sdW1ucykge1xyXG4gICAgICAgICAgJCQubG9hZCgkJC5jb252ZXJ0RGF0YVRvVGFyZ2V0cygkJC5jb252ZXJ0Q29sdW1uc1RvRGF0YShhcmdzLmNvbHVtbnMpKSwgYXJncyk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAkJC5sb2FkKG51bGwsIGFyZ3MpO1xyXG4gICAgICB9XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS51bmxvYWQgPSBmdW5jdGlvbiAodGFyZ2V0SWRzLCBkb25lKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXM7XHJcbiAgICAgICQkLnJlc2V0Q2FjaGUoKTtcclxuICAgICAgaWYgKCFkb25lKSB7XHJcbiAgICAgICAgICBkb25lID0gZnVuY3Rpb24gKCkgeyB9O1xyXG4gICAgICB9XHJcbiAgICAgIC8vIGZpbHRlciBleGlzdGluZyB0YXJnZXRcclxuICAgICAgdGFyZ2V0SWRzID0gdGFyZ2V0SWRzLmZpbHRlcihmdW5jdGlvbiAoaWQpIHtcclxuICAgICAgICAgIHJldHVybiAkJC5oYXNUYXJnZXQoJCQuZGF0YS50YXJnZXRzLCBpZCk7XHJcbiAgICAgIH0pO1xyXG4gICAgICAvLyBJZiBubyB0YXJnZXQsIGNhbGwgZG9uZSBhbmQgcmV0dXJuXHJcbiAgICAgIGlmICghdGFyZ2V0SWRzIHx8IHRhcmdldElkcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgIGRvbmUoKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICAkJC5zdmdcclxuICAgICAgICAgIC5zZWxlY3RBbGwodGFyZ2V0SWRzLm1hcChmdW5jdGlvbiAoaWQpIHtcclxuICAgICAgICAgIHJldHVybiAkJC5zZWxlY3RvclRhcmdldChpZCk7XHJcbiAgICAgIH0pKVxyXG4gICAgICAgICAgLnRyYW5zaXRpb24oKVxyXG4gICAgICAgICAgLnN0eWxlKCdvcGFjaXR5JywgMClcclxuICAgICAgICAgIC5yZW1vdmUoKVxyXG4gICAgICAgICAgLmNhbGwoJCQuZW5kYWxsLCBkb25lKTtcclxuICAgICAgdGFyZ2V0SWRzLmZvckVhY2goZnVuY3Rpb24gKGlkKSB7XHJcbiAgICAgICAgICAvLyBSZXNldCBmYWRlaW4gZm9yIGZ1dHVyZSBsb2FkXHJcbiAgICAgICAgICAkJC53aXRob3V0RmFkZUluW2lkXSA9IGZhbHNlO1xyXG4gICAgICAgICAgLy8gUmVtb3ZlIHRhcmdldCdzIGVsZW1lbnRzXHJcbiAgICAgICAgICBpZiAoJCQubGVnZW5kKSB7XHJcbiAgICAgICAgICAgICAgJCQubGVnZW5kXHJcbiAgICAgICAgICAgICAgICAgIC5zZWxlY3RBbGwoJy4nICsgQ0xBU1MubGVnZW5kSXRlbSArICQkLmdldFRhcmdldFNlbGVjdG9yU3VmZml4KGlkKSlcclxuICAgICAgICAgICAgICAgICAgLnJlbW92ZSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gUmVtb3ZlIHRhcmdldFxyXG4gICAgICAgICAgJCQuZGF0YS50YXJnZXRzID0gJCQuZGF0YS50YXJnZXRzLmZpbHRlcihmdW5jdGlvbiAodCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiB0LmlkICE9PSBpZDtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICB9O1xuXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmdldFlEb21haW5NaW4gPSBmdW5jdGlvbiAodGFyZ2V0cykge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzLCBjb25maWcgPSAkJC5jb25maWcsIGlkcyA9ICQkLm1hcFRvSWRzKHRhcmdldHMpLCB5cyA9ICQkLmdldFZhbHVlc0FzSWRLZXllZCh0YXJnZXRzKSwgaiwgaywgYmFzZUlkLCBpZHNJbkdyb3VwLCBpZCwgaGFzTmVnYXRpdmVWYWx1ZTtcclxuICAgICAgaWYgKGNvbmZpZy5kYXRhX2dyb3Vwcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBoYXNOZWdhdGl2ZVZhbHVlID0gJCQuaGFzTmVnYXRpdmVWYWx1ZUluVGFyZ2V0cyh0YXJnZXRzKTtcclxuICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBjb25maWcuZGF0YV9ncm91cHMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICAvLyBEZXRlcm1pbmUgYmFzZUlkXHJcbiAgICAgICAgICAgICAgaWRzSW5Hcm91cCA9IGNvbmZpZy5kYXRhX2dyb3Vwc1tqXS5maWx0ZXIoZnVuY3Rpb24gKGlkKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiBpZHMuaW5kZXhPZihpZCkgPj0gMDtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICBpZiAoaWRzSW5Hcm91cC5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGJhc2VJZCA9IGlkc0luR3JvdXBbMF07XHJcbiAgICAgICAgICAgICAgLy8gQ29uc2lkZXIgbmVnYXRpdmUgdmFsdWVzXHJcbiAgICAgICAgICAgICAgaWYgKGhhc05lZ2F0aXZlVmFsdWUgJiYgeXNbYmFzZUlkXSkge1xyXG4gICAgICAgICAgICAgICAgICB5c1tiYXNlSWRdLmZvckVhY2goZnVuY3Rpb24gKHYsIGkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHlzW2Jhc2VJZF1baV0gPSB2IDwgMCA/IHYgOiAwO1xyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgLy8gQ29tcHV0ZSBtaW5cclxuICAgICAgICAgICAgICBmb3IgKGsgPSAxOyBrIDwgaWRzSW5Hcm91cC5sZW5ndGg7IGsrKykge1xyXG4gICAgICAgICAgICAgICAgICBpZCA9IGlkc0luR3JvdXBba107XHJcbiAgICAgICAgICAgICAgICAgIGlmICgheXNbaWRdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB5c1tpZF0uZm9yRWFjaChmdW5jdGlvbiAodiwgaSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKCQkLmF4aXMuZ2V0SWQoaWQpID09PSAkJC5heGlzLmdldElkKGJhc2VJZCkgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB5c1tiYXNlSWRdICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIShoYXNOZWdhdGl2ZVZhbHVlICYmICt2ID4gMCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB5c1tiYXNlSWRdW2ldICs9ICt2O1xyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuICQkLmQzLm1pbihPYmplY3Qua2V5cyh5cykubWFwKGZ1bmN0aW9uIChrZXkpIHtcclxuICAgICAgICAgIHJldHVybiAkJC5kMy5taW4oeXNba2V5XSk7XHJcbiAgICAgIH0pKTtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmdldFlEb21haW5NYXggPSBmdW5jdGlvbiAodGFyZ2V0cykge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzLCBjb25maWcgPSAkJC5jb25maWcsIGlkcyA9ICQkLm1hcFRvSWRzKHRhcmdldHMpLCB5cyA9ICQkLmdldFZhbHVlc0FzSWRLZXllZCh0YXJnZXRzKSwgaiwgaywgYmFzZUlkLCBpZHNJbkdyb3VwLCBpZCwgaGFzUG9zaXRpdmVWYWx1ZTtcclxuICAgICAgaWYgKGNvbmZpZy5kYXRhX2dyb3Vwcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBoYXNQb3NpdGl2ZVZhbHVlID0gJCQuaGFzUG9zaXRpdmVWYWx1ZUluVGFyZ2V0cyh0YXJnZXRzKTtcclxuICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBjb25maWcuZGF0YV9ncm91cHMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICAvLyBEZXRlcm1pbmUgYmFzZUlkXHJcbiAgICAgICAgICAgICAgaWRzSW5Hcm91cCA9IGNvbmZpZy5kYXRhX2dyb3Vwc1tqXS5maWx0ZXIoZnVuY3Rpb24gKGlkKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiBpZHMuaW5kZXhPZihpZCkgPj0gMDtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICBpZiAoaWRzSW5Hcm91cC5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGJhc2VJZCA9IGlkc0luR3JvdXBbMF07XHJcbiAgICAgICAgICAgICAgLy8gQ29uc2lkZXIgcG9zaXRpdmUgdmFsdWVzXHJcbiAgICAgICAgICAgICAgaWYgKGhhc1Bvc2l0aXZlVmFsdWUgJiYgeXNbYmFzZUlkXSkge1xyXG4gICAgICAgICAgICAgICAgICB5c1tiYXNlSWRdLmZvckVhY2goZnVuY3Rpb24gKHYsIGkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHlzW2Jhc2VJZF1baV0gPSB2ID4gMCA/IHYgOiAwO1xyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgLy8gQ29tcHV0ZSBtYXhcclxuICAgICAgICAgICAgICBmb3IgKGsgPSAxOyBrIDwgaWRzSW5Hcm91cC5sZW5ndGg7IGsrKykge1xyXG4gICAgICAgICAgICAgICAgICBpZCA9IGlkc0luR3JvdXBba107XHJcbiAgICAgICAgICAgICAgICAgIGlmICgheXNbaWRdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB5c1tpZF0uZm9yRWFjaChmdW5jdGlvbiAodiwgaSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKCQkLmF4aXMuZ2V0SWQoaWQpID09PSAkJC5heGlzLmdldElkKGJhc2VJZCkgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB5c1tiYXNlSWRdICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIShoYXNQb3NpdGl2ZVZhbHVlICYmICt2IDwgMCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB5c1tiYXNlSWRdW2ldICs9ICt2O1xyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuICQkLmQzLm1heChPYmplY3Qua2V5cyh5cykubWFwKGZ1bmN0aW9uIChrZXkpIHtcclxuICAgICAgICAgIHJldHVybiAkJC5kMy5tYXgoeXNba2V5XSk7XHJcbiAgICAgIH0pKTtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmdldFlEb21haW4gPSBmdW5jdGlvbiAodGFyZ2V0cywgYXhpc0lkLCB4RG9tYWluKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXMsIGNvbmZpZyA9ICQkLmNvbmZpZztcclxuICAgICAgaWYgKCQkLmlzQXhpc05vcm1hbGl6ZWQoYXhpc0lkKSkge1xyXG4gICAgICAgICAgcmV0dXJuIFswLCAxMDBdO1xyXG4gICAgICB9XHJcbiAgICAgIHZhciB0YXJnZXRzQnlBeGlzSWQgPSB0YXJnZXRzLmZpbHRlcihmdW5jdGlvbiAodCkge1xyXG4gICAgICAgICAgcmV0dXJuICQkLmF4aXMuZ2V0SWQodC5pZCkgPT09IGF4aXNJZDtcclxuICAgICAgfSksIHlUYXJnZXRzID0geERvbWFpblxyXG4gICAgICAgICAgPyAkJC5maWx0ZXJCeVhEb21haW4odGFyZ2V0c0J5QXhpc0lkLCB4RG9tYWluKVxyXG4gICAgICAgICAgOiB0YXJnZXRzQnlBeGlzSWQsIHlNaW4gPSBheGlzSWQgPT09ICd5MicgPyBjb25maWcuYXhpc195Ml9taW4gOiBjb25maWcuYXhpc195X21pbiwgeU1heCA9IGF4aXNJZCA9PT0gJ3kyJyA/IGNvbmZpZy5heGlzX3kyX21heCA6IGNvbmZpZy5heGlzX3lfbWF4LCB5RG9tYWluTWluID0gJCQuZ2V0WURvbWFpbk1pbih5VGFyZ2V0cyksIHlEb21haW5NYXggPSAkJC5nZXRZRG9tYWluTWF4KHlUYXJnZXRzKSwgZG9tYWluLCBkb21haW5MZW5ndGgsIHBhZGRpbmdfdG9wLCBwYWRkaW5nX2JvdHRvbSwgY2VudGVyID0gYXhpc0lkID09PSAneTInID8gY29uZmlnLmF4aXNfeTJfY2VudGVyIDogY29uZmlnLmF4aXNfeV9jZW50ZXIsIHlEb21haW5BYnMsIGxlbmd0aHMsIGRpZmYsIHJhdGlvLCBpc0FsbFBvc2l0aXZlLCBpc0FsbE5lZ2F0aXZlLCBpc1plcm9CYXNlZCA9ICgkJC5oYXNUeXBlKCdiYXInLCB5VGFyZ2V0cykgJiYgY29uZmlnLmJhcl96ZXJvYmFzZWQpIHx8XHJcbiAgICAgICAgICAoJCQuaGFzVHlwZSgnYXJlYScsIHlUYXJnZXRzKSAmJiBjb25maWcuYXJlYV96ZXJvYmFzZWQpLCBpc0ludmVydGVkID0gYXhpc0lkID09PSAneTInID8gY29uZmlnLmF4aXNfeTJfaW52ZXJ0ZWQgOiBjb25maWcuYXhpc195X2ludmVydGVkLCBzaG93SG9yaXpvbnRhbERhdGFMYWJlbCA9ICQkLmhhc0RhdGFMYWJlbCgpICYmIGNvbmZpZy5heGlzX3JvdGF0ZWQsIHNob3dWZXJ0aWNhbERhdGFMYWJlbCA9ICQkLmhhc0RhdGFMYWJlbCgpICYmICFjb25maWcuYXhpc19yb3RhdGVkO1xyXG4gICAgICAvLyBNRU1POiBhdm9pZCBpbnZlcnRpbmcgZG9tYWluIHVuZXhwZWN0ZWRseVxyXG4gICAgICB5RG9tYWluTWluID0gaXNWYWx1ZSh5TWluKVxyXG4gICAgICAgICAgPyB5TWluXHJcbiAgICAgICAgICA6IGlzVmFsdWUoeU1heClcclxuICAgICAgICAgICAgICA/IHlEb21haW5NaW4gPCB5TWF4XHJcbiAgICAgICAgICAgICAgICAgID8geURvbWFpbk1pblxyXG4gICAgICAgICAgICAgICAgICA6IHlNYXggLSAxMFxyXG4gICAgICAgICAgICAgIDogeURvbWFpbk1pbjtcclxuICAgICAgeURvbWFpbk1heCA9IGlzVmFsdWUoeU1heClcclxuICAgICAgICAgID8geU1heFxyXG4gICAgICAgICAgOiBpc1ZhbHVlKHlNaW4pXHJcbiAgICAgICAgICAgICAgPyB5TWluIDwgeURvbWFpbk1heFxyXG4gICAgICAgICAgICAgICAgICA/IHlEb21haW5NYXhcclxuICAgICAgICAgICAgICAgICAgOiB5TWluICsgMTBcclxuICAgICAgICAgICAgICA6IHlEb21haW5NYXg7XHJcbiAgICAgIGlmICh5VGFyZ2V0cy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgIC8vIHVzZSBjdXJyZW50IGRvbWFpbiBpZiB0YXJnZXQgb2YgYXhpc0lkIGlzIG5vbmVcclxuICAgICAgICAgIHJldHVybiBheGlzSWQgPT09ICd5MicgPyAkJC55Mi5kb21haW4oKSA6ICQkLnkuZG9tYWluKCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGlzTmFOKHlEb21haW5NaW4pKSB7XHJcbiAgICAgICAgICAvLyBzZXQgbWluaW11bSB0byB6ZXJvIHdoZW4gbm90IG51bWJlclxyXG4gICAgICAgICAgeURvbWFpbk1pbiA9IDA7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGlzTmFOKHlEb21haW5NYXgpKSB7XHJcbiAgICAgICAgICAvLyBzZXQgbWF4aW11bSB0byBoYXZlIHNhbWUgdmFsdWUgYXMgeURvbWFpbk1pblxyXG4gICAgICAgICAgeURvbWFpbk1heCA9IHlEb21haW5NaW47XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHlEb21haW5NaW4gPT09IHlEb21haW5NYXgpIHtcclxuICAgICAgICAgIHlEb21haW5NaW4gPCAwID8gKHlEb21haW5NYXggPSAwKSA6ICh5RG9tYWluTWluID0gMCk7XHJcbiAgICAgIH1cclxuICAgICAgaXNBbGxQb3NpdGl2ZSA9IHlEb21haW5NaW4gPj0gMCAmJiB5RG9tYWluTWF4ID49IDA7XHJcbiAgICAgIGlzQWxsTmVnYXRpdmUgPSB5RG9tYWluTWluIDw9IDAgJiYgeURvbWFpbk1heCA8PSAwO1xyXG4gICAgICAvLyBDYW5jZWwgemVyb2Jhc2VkIGlmIGF4aXNfKl9taW4gLyBheGlzXypfbWF4IHNwZWNpZmllZFxyXG4gICAgICBpZiAoKGlzVmFsdWUoeU1pbikgJiYgaXNBbGxQb3NpdGl2ZSkgfHwgKGlzVmFsdWUoeU1heCkgJiYgaXNBbGxOZWdhdGl2ZSkpIHtcclxuICAgICAgICAgIGlzWmVyb0Jhc2VkID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgLy8gQmFyL0FyZWEgY2hhcnQgc2hvdWxkIGJlIDAtYmFzZWQgaWYgYWxsIHBvc2l0aXZlfG5lZ2F0aXZlXHJcbiAgICAgIGlmIChpc1plcm9CYXNlZCkge1xyXG4gICAgICAgICAgaWYgKGlzQWxsUG9zaXRpdmUpIHtcclxuICAgICAgICAgICAgICB5RG9tYWluTWluID0gMDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChpc0FsbE5lZ2F0aXZlKSB7XHJcbiAgICAgICAgICAgICAgeURvbWFpbk1heCA9IDA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZG9tYWluTGVuZ3RoID0gTWF0aC5hYnMoeURvbWFpbk1heCAtIHlEb21haW5NaW4pO1xyXG4gICAgICBwYWRkaW5nX3RvcCA9IHBhZGRpbmdfYm90dG9tID0gZG9tYWluTGVuZ3RoICogMC4xO1xyXG4gICAgICBpZiAodHlwZW9mIGNlbnRlciAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgIHlEb21haW5BYnMgPSBNYXRoLm1heChNYXRoLmFicyh5RG9tYWluTWluKSwgTWF0aC5hYnMoeURvbWFpbk1heCkpO1xyXG4gICAgICAgICAgeURvbWFpbk1heCA9IGNlbnRlciArIHlEb21haW5BYnM7XHJcbiAgICAgICAgICB5RG9tYWluTWluID0gY2VudGVyIC0geURvbWFpbkFicztcclxuICAgICAgfVxyXG4gICAgICAvLyBhZGQgcGFkZGluZyBmb3IgZGF0YSBsYWJlbFxyXG4gICAgICBpZiAoc2hvd0hvcml6b250YWxEYXRhTGFiZWwpIHtcclxuICAgICAgICAgIGxlbmd0aHMgPSAkJC5nZXREYXRhTGFiZWxMZW5ndGgoeURvbWFpbk1pbiwgeURvbWFpbk1heCwgJ3dpZHRoJyk7XHJcbiAgICAgICAgICBkaWZmID0gZGlmZkRvbWFpbigkJC55LnJhbmdlKCkpO1xyXG4gICAgICAgICAgcmF0aW8gPSBbbGVuZ3Roc1swXSAvIGRpZmYsIGxlbmd0aHNbMV0gLyBkaWZmXTtcclxuICAgICAgICAgIHBhZGRpbmdfdG9wICs9IGRvbWFpbkxlbmd0aCAqIChyYXRpb1sxXSAvICgxIC0gcmF0aW9bMF0gLSByYXRpb1sxXSkpO1xyXG4gICAgICAgICAgcGFkZGluZ19ib3R0b20gKz0gZG9tYWluTGVuZ3RoICogKHJhdGlvWzBdIC8gKDEgLSByYXRpb1swXSAtIHJhdGlvWzFdKSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoc2hvd1ZlcnRpY2FsRGF0YUxhYmVsKSB7XHJcbiAgICAgICAgICBsZW5ndGhzID0gJCQuZ2V0RGF0YUxhYmVsTGVuZ3RoKHlEb21haW5NaW4sIHlEb21haW5NYXgsICdoZWlnaHQnKTtcclxuICAgICAgICAgIHZhciBwaXhlbHNUb0F4aXNQYWRkaW5nID0gJCQuZ2V0WShjb25maWdbXCJheGlzX1wiICsgYXhpc0lkICsgXCJfdHlwZVwiXSwgXHJcbiAgICAgICAgICAvLyBpbnB1dCBkb21haW4gYXMgcGl4ZWxzXHJcbiAgICAgICAgICBbMCwgY29uZmlnLmF4aXNfcm90YXRlZCA/ICQkLndpZHRoIDogJCQuaGVpZ2h0XSwgXHJcbiAgICAgICAgICAvLyBvdXRwdXQgcmFuZ2UgYXMgYXhpcyBwYWRkaW5nXHJcbiAgICAgICAgICBbMCwgZG9tYWluTGVuZ3RoXSk7XHJcbiAgICAgICAgICBwYWRkaW5nX3RvcCArPSBwaXhlbHNUb0F4aXNQYWRkaW5nKGxlbmd0aHNbMV0pO1xyXG4gICAgICAgICAgcGFkZGluZ19ib3R0b20gKz0gcGl4ZWxzVG9BeGlzUGFkZGluZyhsZW5ndGhzWzBdKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoYXhpc0lkID09PSAneScgJiYgbm90RW1wdHkoY29uZmlnLmF4aXNfeV9wYWRkaW5nKSkge1xyXG4gICAgICAgICAgcGFkZGluZ190b3AgPSAkJC5heGlzLmdldFBhZGRpbmcoY29uZmlnLmF4aXNfeV9wYWRkaW5nLCAndG9wJywgcGFkZGluZ190b3AsIGRvbWFpbkxlbmd0aCk7XHJcbiAgICAgICAgICBwYWRkaW5nX2JvdHRvbSA9ICQkLmF4aXMuZ2V0UGFkZGluZyhjb25maWcuYXhpc195X3BhZGRpbmcsICdib3R0b20nLCBwYWRkaW5nX2JvdHRvbSwgZG9tYWluTGVuZ3RoKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoYXhpc0lkID09PSAneTInICYmIG5vdEVtcHR5KGNvbmZpZy5heGlzX3kyX3BhZGRpbmcpKSB7XHJcbiAgICAgICAgICBwYWRkaW5nX3RvcCA9ICQkLmF4aXMuZ2V0UGFkZGluZyhjb25maWcuYXhpc195Ml9wYWRkaW5nLCAndG9wJywgcGFkZGluZ190b3AsIGRvbWFpbkxlbmd0aCk7XHJcbiAgICAgICAgICBwYWRkaW5nX2JvdHRvbSA9ICQkLmF4aXMuZ2V0UGFkZGluZyhjb25maWcuYXhpc195Ml9wYWRkaW5nLCAnYm90dG9tJywgcGFkZGluZ19ib3R0b20sIGRvbWFpbkxlbmd0aCk7XHJcbiAgICAgIH1cclxuICAgICAgLy8gQmFyL0FyZWEgY2hhcnQgc2hvdWxkIGJlIDAtYmFzZWQgaWYgYWxsIHBvc2l0aXZlfG5lZ2F0aXZlXHJcbiAgICAgIGlmIChpc1plcm9CYXNlZCkge1xyXG4gICAgICAgICAgaWYgKGlzQWxsUG9zaXRpdmUpIHtcclxuICAgICAgICAgICAgICBwYWRkaW5nX2JvdHRvbSA9IHlEb21haW5NaW47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoaXNBbGxOZWdhdGl2ZSkge1xyXG4gICAgICAgICAgICAgIHBhZGRpbmdfdG9wID0gLXlEb21haW5NYXg7XHJcbiAgICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZG9tYWluID0gW3lEb21haW5NaW4gLSBwYWRkaW5nX2JvdHRvbSwgeURvbWFpbk1heCArIHBhZGRpbmdfdG9wXTtcclxuICAgICAgcmV0dXJuIGlzSW52ZXJ0ZWQgPyBkb21haW4ucmV2ZXJzZSgpIDogZG9tYWluO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuZ2V0WERvbWFpbk1pbiA9IGZ1bmN0aW9uICh0YXJnZXRzKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXMsIGNvbmZpZyA9ICQkLmNvbmZpZztcclxuICAgICAgcmV0dXJuIGlzRGVmaW5lZChjb25maWcuYXhpc194X21pbilcclxuICAgICAgICAgID8gJCQuaXNUaW1lU2VyaWVzKClcclxuICAgICAgICAgICAgICA/IHRoaXMucGFyc2VEYXRlKGNvbmZpZy5heGlzX3hfbWluKVxyXG4gICAgICAgICAgICAgIDogY29uZmlnLmF4aXNfeF9taW5cclxuICAgICAgICAgIDogJCQuZDMubWluKHRhcmdldHMsIGZ1bmN0aW9uICh0KSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuICQkLmQzLm1pbih0LnZhbHVlcywgZnVuY3Rpb24gKHYpIHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHYueDtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuZ2V0WERvbWFpbk1heCA9IGZ1bmN0aW9uICh0YXJnZXRzKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXMsIGNvbmZpZyA9ICQkLmNvbmZpZztcclxuICAgICAgcmV0dXJuIGlzRGVmaW5lZChjb25maWcuYXhpc194X21heClcclxuICAgICAgICAgID8gJCQuaXNUaW1lU2VyaWVzKClcclxuICAgICAgICAgICAgICA/IHRoaXMucGFyc2VEYXRlKGNvbmZpZy5heGlzX3hfbWF4KVxyXG4gICAgICAgICAgICAgIDogY29uZmlnLmF4aXNfeF9tYXhcclxuICAgICAgICAgIDogJCQuZDMubWF4KHRhcmdldHMsIGZ1bmN0aW9uICh0KSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuICQkLmQzLm1heCh0LnZhbHVlcywgZnVuY3Rpb24gKHYpIHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHYueDtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuZ2V0WERvbWFpblBhZGRpbmcgPSBmdW5jdGlvbiAoZG9tYWluKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXMsIGNvbmZpZyA9ICQkLmNvbmZpZywgZGlmZiA9IGRvbWFpblsxXSAtIGRvbWFpblswXSwgbWF4RGF0YUNvdW50LCBwYWRkaW5nLCBwYWRkaW5nTGVmdCwgcGFkZGluZ1JpZ2h0O1xyXG4gICAgICBpZiAoJCQuaXNDYXRlZ29yaXplZCgpKSB7XHJcbiAgICAgICAgICBwYWRkaW5nID0gMDtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICgkJC5oYXNUeXBlKCdiYXInKSkge1xyXG4gICAgICAgICAgbWF4RGF0YUNvdW50ID0gJCQuZ2V0TWF4RGF0YUNvdW50KCk7XHJcbiAgICAgICAgICBwYWRkaW5nID0gbWF4RGF0YUNvdW50ID4gMSA/IGRpZmYgLyAobWF4RGF0YUNvdW50IC0gMSkgLyAyIDogMC41O1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgcGFkZGluZyA9IGRpZmYgKiAwLjAxO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0eXBlb2YgY29uZmlnLmF4aXNfeF9wYWRkaW5nID09PSAnb2JqZWN0JyAmJlxyXG4gICAgICAgICAgbm90RW1wdHkoY29uZmlnLmF4aXNfeF9wYWRkaW5nKSkge1xyXG4gICAgICAgICAgcGFkZGluZ0xlZnQgPSBpc1ZhbHVlKGNvbmZpZy5heGlzX3hfcGFkZGluZy5sZWZ0KVxyXG4gICAgICAgICAgICAgID8gY29uZmlnLmF4aXNfeF9wYWRkaW5nLmxlZnRcclxuICAgICAgICAgICAgICA6IHBhZGRpbmc7XHJcbiAgICAgICAgICBwYWRkaW5nUmlnaHQgPSBpc1ZhbHVlKGNvbmZpZy5heGlzX3hfcGFkZGluZy5yaWdodClcclxuICAgICAgICAgICAgICA/IGNvbmZpZy5heGlzX3hfcGFkZGluZy5yaWdodFxyXG4gICAgICAgICAgICAgIDogcGFkZGluZztcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0eXBlb2YgY29uZmlnLmF4aXNfeF9wYWRkaW5nID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgICAgcGFkZGluZ0xlZnQgPSBwYWRkaW5nUmlnaHQgPSBjb25maWcuYXhpc194X3BhZGRpbmc7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBwYWRkaW5nTGVmdCA9IHBhZGRpbmdSaWdodCA9IHBhZGRpbmc7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHsgbGVmdDogcGFkZGluZ0xlZnQsIHJpZ2h0OiBwYWRkaW5nUmlnaHQgfTtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmdldFhEb21haW4gPSBmdW5jdGlvbiAodGFyZ2V0cykge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzLCB4RG9tYWluID0gWyQkLmdldFhEb21haW5NaW4odGFyZ2V0cyksICQkLmdldFhEb21haW5NYXgodGFyZ2V0cyldLCBmaXJzdFggPSB4RG9tYWluWzBdLCBsYXN0WCA9IHhEb21haW5bMV0sIHBhZGRpbmcgPSAkJC5nZXRYRG9tYWluUGFkZGluZyh4RG9tYWluKSwgbWluID0gMCwgbWF4ID0gMDtcclxuICAgICAgLy8gc2hvdyBjZW50ZXIgb2YgeCBkb21haW4gaWYgbWluIGFuZCBtYXggYXJlIHRoZSBzYW1lXHJcbiAgICAgIGlmIChmaXJzdFggLSBsYXN0WCA9PT0gMCAmJiAhJCQuaXNDYXRlZ29yaXplZCgpKSB7XHJcbiAgICAgICAgICBpZiAoJCQuaXNUaW1lU2VyaWVzKCkpIHtcclxuICAgICAgICAgICAgICBmaXJzdFggPSBuZXcgRGF0ZShmaXJzdFguZ2V0VGltZSgpICogMC41KTtcclxuICAgICAgICAgICAgICBsYXN0WCA9IG5ldyBEYXRlKGxhc3RYLmdldFRpbWUoKSAqIDEuNSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICBmaXJzdFggPSBmaXJzdFggPT09IDAgPyAxIDogZmlyc3RYICogMC41O1xyXG4gICAgICAgICAgICAgIGxhc3RYID0gbGFzdFggPT09IDAgPyAtMSA6IGxhc3RYICogMS41O1xyXG4gICAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChmaXJzdFggfHwgZmlyc3RYID09PSAwKSB7XHJcbiAgICAgICAgICBtaW4gPSAkJC5pc1RpbWVTZXJpZXMoKVxyXG4gICAgICAgICAgICAgID8gbmV3IERhdGUoZmlyc3RYLmdldFRpbWUoKSAtIHBhZGRpbmcubGVmdClcclxuICAgICAgICAgICAgICA6IGZpcnN0WCAtIHBhZGRpbmcubGVmdDtcclxuICAgICAgfVxyXG4gICAgICBpZiAobGFzdFggfHwgbGFzdFggPT09IDApIHtcclxuICAgICAgICAgIG1heCA9ICQkLmlzVGltZVNlcmllcygpXHJcbiAgICAgICAgICAgICAgPyBuZXcgRGF0ZShsYXN0WC5nZXRUaW1lKCkgKyBwYWRkaW5nLnJpZ2h0KVxyXG4gICAgICAgICAgICAgIDogbGFzdFggKyBwYWRkaW5nLnJpZ2h0O1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBbbWluLCBtYXhdO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUudXBkYXRlWERvbWFpbiA9IGZ1bmN0aW9uICh0YXJnZXRzLCB3aXRoVXBkYXRlWERvbWFpbiwgd2l0aFVwZGF0ZU9yZ1hEb21haW4sIHdpdGhUcmltLCBkb21haW4pIHtcclxuICAgICAgdmFyICQkID0gdGhpcywgY29uZmlnID0gJCQuY29uZmlnO1xyXG4gICAgICBpZiAod2l0aFVwZGF0ZU9yZ1hEb21haW4pIHtcclxuICAgICAgICAgICQkLnguZG9tYWluKGRvbWFpbiA/IGRvbWFpbiA6ICQkLmQzLmV4dGVudCgkJC5nZXRYRG9tYWluKHRhcmdldHMpKSk7XHJcbiAgICAgICAgICAkJC5vcmdYRG9tYWluID0gJCQueC5kb21haW4oKTtcclxuICAgICAgICAgIGlmIChjb25maWcuem9vbV9lbmFibGVkKSB7XHJcbiAgICAgICAgICAgICAgJCQuem9vbS51cGRhdGUoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgICQkLnN1YlguZG9tYWluKCQkLnguZG9tYWluKCkpO1xyXG4gICAgICAgICAgaWYgKCQkLmJydXNoKSB7XHJcbiAgICAgICAgICAgICAgJCQuYnJ1c2gudXBkYXRlU2NhbGUoJCQuc3ViWCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHdpdGhVcGRhdGVYRG9tYWluKSB7XHJcbiAgICAgICAgICAkJC54LmRvbWFpbihkb21haW5cclxuICAgICAgICAgICAgICA/IGRvbWFpblxyXG4gICAgICAgICAgICAgIDogISQkLmJydXNoIHx8ICQkLmJydXNoLmVtcHR5KClcclxuICAgICAgICAgICAgICAgICAgPyAkJC5vcmdYRG9tYWluXHJcbiAgICAgICAgICAgICAgICAgIDogJCQuYnJ1c2guc2VsZWN0aW9uQXNWYWx1ZSgpKTtcclxuICAgICAgfVxyXG4gICAgICAvLyBUcmltIGRvbWFpbiB3aGVuIHRvbyBiaWcgYnkgem9vbSBtb3VzZW1vdmUgZXZlbnRcclxuICAgICAgaWYgKHdpdGhUcmltKSB7XHJcbiAgICAgICAgICAkJC54LmRvbWFpbigkJC50cmltWERvbWFpbigkJC54Lm9yZ0RvbWFpbigpKSk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuICQkLnguZG9tYWluKCk7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS50cmltWERvbWFpbiA9IGZ1bmN0aW9uIChkb21haW4pIHtcclxuICAgICAgdmFyIHpvb21Eb21haW4gPSB0aGlzLmdldFpvb21Eb21haW4oKSwgbWluID0gem9vbURvbWFpblswXSwgbWF4ID0gem9vbURvbWFpblsxXTtcclxuICAgICAgaWYgKGRvbWFpblswXSA8PSBtaW4pIHtcclxuICAgICAgICAgIGRvbWFpblsxXSA9ICtkb21haW5bMV0gKyAobWluIC0gZG9tYWluWzBdKTtcclxuICAgICAgICAgIGRvbWFpblswXSA9IG1pbjtcclxuICAgICAgfVxyXG4gICAgICBpZiAobWF4IDw9IGRvbWFpblsxXSkge1xyXG4gICAgICAgICAgZG9tYWluWzBdID0gK2RvbWFpblswXSAtIChkb21haW5bMV0gLSBtYXgpO1xyXG4gICAgICAgICAgZG9tYWluWzFdID0gbWF4O1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBkb21haW47XHJcbiAgfTtcblxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5kcmFnID0gZnVuY3Rpb24gKG1vdXNlKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXMsIGNvbmZpZyA9ICQkLmNvbmZpZywgbWFpbiA9ICQkLm1haW4sIGQzID0gJCQuZDM7XHJcbiAgICAgIHZhciBzeCwgc3ksIG14LCBteSwgbWluWCwgbWF4WCwgbWluWSwgbWF4WTtcclxuICAgICAgaWYgKCQkLmhhc0FyY1R5cGUoKSkge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICghY29uZmlnLmRhdGFfc2VsZWN0aW9uX2VuYWJsZWQpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgfSAvLyBkbyBub3RoaW5nIGlmIG5vdCBzZWxlY3RhYmxlXHJcbiAgICAgIGlmICghY29uZmlnLmRhdGFfc2VsZWN0aW9uX211bHRpcGxlKSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgIH0gLy8gc2tpcCB3aGVuIHNpbmdsZSBzZWxlY3Rpb24gYmVjYXVzZSBkcmFnIGlzIHVzZWQgZm9yIG11bHRpcGxlIHNlbGVjdGlvblxyXG4gICAgICBzeCA9ICQkLmRyYWdTdGFydFswXTtcclxuICAgICAgc3kgPSAkJC5kcmFnU3RhcnRbMV07XHJcbiAgICAgIG14ID0gbW91c2VbMF07XHJcbiAgICAgIG15ID0gbW91c2VbMV07XHJcbiAgICAgIG1pblggPSBNYXRoLm1pbihzeCwgbXgpO1xyXG4gICAgICBtYXhYID0gTWF0aC5tYXgoc3gsIG14KTtcclxuICAgICAgbWluWSA9IGNvbmZpZy5kYXRhX3NlbGVjdGlvbl9ncm91cGVkID8gJCQubWFyZ2luLnRvcCA6IE1hdGgubWluKHN5LCBteSk7XHJcbiAgICAgIG1heFkgPSBjb25maWcuZGF0YV9zZWxlY3Rpb25fZ3JvdXBlZCA/ICQkLmhlaWdodCA6IE1hdGgubWF4KHN5LCBteSk7XHJcbiAgICAgIG1haW5cclxuICAgICAgICAgIC5zZWxlY3QoJy4nICsgQ0xBU1MuZHJhZ2FyZWEpXHJcbiAgICAgICAgICAuYXR0cigneCcsIG1pblgpXHJcbiAgICAgICAgICAuYXR0cigneScsIG1pblkpXHJcbiAgICAgICAgICAuYXR0cignd2lkdGgnLCBtYXhYIC0gbWluWClcclxuICAgICAgICAgIC5hdHRyKCdoZWlnaHQnLCBtYXhZIC0gbWluWSk7XHJcbiAgICAgIC8vIFRPRE86IGJpbmFyeSBzZWFyY2ggd2hlbiBtdWx0aXBsZSB4c1xyXG4gICAgICBtYWluXHJcbiAgICAgICAgICAuc2VsZWN0QWxsKCcuJyArIENMQVNTLnNoYXBlcylcclxuICAgICAgICAgIC5zZWxlY3RBbGwoJy4nICsgQ0xBU1Muc2hhcGUpXHJcbiAgICAgICAgICAuZWFjaChmdW5jdGlvbiAoZCwgaSkge1xyXG4gICAgICAgICAgaWYgKCFjb25maWcuZGF0YV9zZWxlY3Rpb25faXNzZWxlY3RhYmxlKGQpKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdmFyIHNoYXBlID0gZDMuc2VsZWN0KHRoaXMpLCBpc1NlbGVjdGVkID0gc2hhcGUuY2xhc3NlZChDTEFTUy5TRUxFQ1RFRCksIGlzSW5jbHVkZWQgPSBzaGFwZS5jbGFzc2VkKENMQVNTLklOQ0xVREVEKSwgX3gsIF95LCBfdywgX2gsIHRvZ2dsZSwgaXNXaXRoaW4gPSBmYWxzZSwgYm94O1xyXG4gICAgICAgICAgaWYgKHNoYXBlLmNsYXNzZWQoQ0xBU1MuY2lyY2xlKSkge1xyXG4gICAgICAgICAgICAgIF94ID0gc2hhcGUuYXR0cignY3gnKSAqIDE7XHJcbiAgICAgICAgICAgICAgX3kgPSBzaGFwZS5hdHRyKCdjeScpICogMTtcclxuICAgICAgICAgICAgICB0b2dnbGUgPSAkJC50b2dnbGVQb2ludDtcclxuICAgICAgICAgICAgICBpc1dpdGhpbiA9IG1pblggPCBfeCAmJiBfeCA8IG1heFggJiYgbWluWSA8IF95ICYmIF95IDwgbWF4WTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2UgaWYgKHNoYXBlLmNsYXNzZWQoQ0xBU1MuYmFyKSkge1xyXG4gICAgICAgICAgICAgIGJveCA9IGdldFBhdGhCb3godGhpcyk7XHJcbiAgICAgICAgICAgICAgX3ggPSBib3gueDtcclxuICAgICAgICAgICAgICBfeSA9IGJveC55O1xyXG4gICAgICAgICAgICAgIF93ID0gYm94LndpZHRoO1xyXG4gICAgICAgICAgICAgIF9oID0gYm94LmhlaWdodDtcclxuICAgICAgICAgICAgICB0b2dnbGUgPSAkJC50b2dnbGVQYXRoO1xyXG4gICAgICAgICAgICAgIGlzV2l0aGluID1cclxuICAgICAgICAgICAgICAgICAgIShtYXhYIDwgX3ggfHwgX3ggKyBfdyA8IG1pblgpICYmICEobWF4WSA8IF95IHx8IF95ICsgX2ggPCBtaW5ZKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIC8vIGxpbmUvYXJlYSBzZWxlY3Rpb24gbm90IHN1cHBvcnRlZCB5ZXRcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoaXNXaXRoaW4gXiBpc0luY2x1ZGVkKSB7XHJcbiAgICAgICAgICAgICAgc2hhcGUuY2xhc3NlZChDTEFTUy5JTkNMVURFRCwgIWlzSW5jbHVkZWQpO1xyXG4gICAgICAgICAgICAgIC8vIFRPRE86IGluY2x1ZGVkL3VuaW5jbHVkZWQgY2FsbGJhY2sgaGVyZVxyXG4gICAgICAgICAgICAgIHNoYXBlLmNsYXNzZWQoQ0xBU1MuU0VMRUNURUQsICFpc1NlbGVjdGVkKTtcclxuICAgICAgICAgICAgICB0b2dnbGUuY2FsbCgkJCwgIWlzU2VsZWN0ZWQsIHNoYXBlLCBkLCBpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5kcmFnc3RhcnQgPSBmdW5jdGlvbiAobW91c2UpIHtcclxuICAgICAgdmFyICQkID0gdGhpcywgY29uZmlnID0gJCQuY29uZmlnO1xyXG4gICAgICBpZiAoJCQuaGFzQXJjVHlwZSgpKSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCFjb25maWcuZGF0YV9zZWxlY3Rpb25fZW5hYmxlZCkge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9IC8vIGRvIG5vdGhpbmcgaWYgbm90IHNlbGVjdGFibGVcclxuICAgICAgJCQuZHJhZ1N0YXJ0ID0gbW91c2U7XHJcbiAgICAgICQkLm1haW5cclxuICAgICAgICAgIC5zZWxlY3QoJy4nICsgQ0xBU1MuY2hhcnQpXHJcbiAgICAgICAgICAuYXBwZW5kKCdyZWN0JylcclxuICAgICAgICAgIC5hdHRyKCdjbGFzcycsIENMQVNTLmRyYWdhcmVhKVxyXG4gICAgICAgICAgLnN0eWxlKCdvcGFjaXR5JywgMC4xKTtcclxuICAgICAgJCQuZHJhZ2dpbmcgPSB0cnVlO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuZHJhZ2VuZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgdmFyICQkID0gdGhpcywgY29uZmlnID0gJCQuY29uZmlnO1xyXG4gICAgICBpZiAoJCQuaGFzQXJjVHlwZSgpKSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCFjb25maWcuZGF0YV9zZWxlY3Rpb25fZW5hYmxlZCkge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9IC8vIGRvIG5vdGhpbmcgaWYgbm90IHNlbGVjdGFibGVcclxuICAgICAgJCQubWFpblxyXG4gICAgICAgICAgLnNlbGVjdCgnLicgKyBDTEFTUy5kcmFnYXJlYSlcclxuICAgICAgICAgIC50cmFuc2l0aW9uKClcclxuICAgICAgICAgIC5kdXJhdGlvbigxMDApXHJcbiAgICAgICAgICAuc3R5bGUoJ29wYWNpdHknLCAwKVxyXG4gICAgICAgICAgLnJlbW92ZSgpO1xyXG4gICAgICAkJC5tYWluLnNlbGVjdEFsbCgnLicgKyBDTEFTUy5zaGFwZSkuY2xhc3NlZChDTEFTUy5JTkNMVURFRCwgZmFsc2UpO1xyXG4gICAgICAkJC5kcmFnZ2luZyA9IGZhbHNlO1xyXG4gIH07XG5cbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuZ2V0WUZvcm1hdCA9IGZ1bmN0aW9uIChmb3JBcmMpIHtcclxuICAgICAgdmFyICQkID0gdGhpcywgZm9ybWF0Rm9yWSA9IGZvckFyYyAmJiAhJCQuaGFzVHlwZSgnZ2F1Z2UnKSA/ICQkLmRlZmF1bHRBcmNWYWx1ZUZvcm1hdCA6ICQkLnlGb3JtYXQsIGZvcm1hdEZvclkyID0gZm9yQXJjICYmICEkJC5oYXNUeXBlKCdnYXVnZScpID8gJCQuZGVmYXVsdEFyY1ZhbHVlRm9ybWF0IDogJCQueTJGb3JtYXQ7XHJcbiAgICAgIHJldHVybiBmdW5jdGlvbiAodiwgcmF0aW8sIGlkKSB7XHJcbiAgICAgICAgICB2YXIgZm9ybWF0ID0gJCQuYXhpcy5nZXRJZChpZCkgPT09ICd5MicgPyBmb3JtYXRGb3JZMiA6IGZvcm1hdEZvclk7XHJcbiAgICAgICAgICByZXR1cm4gZm9ybWF0LmNhbGwoJCQsIHYsIHJhdGlvKTtcclxuICAgICAgfTtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLnlGb3JtYXQgPSBmdW5jdGlvbiAodikge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzLCBjb25maWcgPSAkJC5jb25maWcsIGZvcm1hdCA9IGNvbmZpZy5heGlzX3lfdGlja19mb3JtYXRcclxuICAgICAgICAgID8gY29uZmlnLmF4aXNfeV90aWNrX2Zvcm1hdFxyXG4gICAgICAgICAgOiAkJC5kZWZhdWx0VmFsdWVGb3JtYXQ7XHJcbiAgICAgIHJldHVybiBmb3JtYXQodik7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS55MkZvcm1hdCA9IGZ1bmN0aW9uICh2KSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXMsIGNvbmZpZyA9ICQkLmNvbmZpZywgZm9ybWF0ID0gY29uZmlnLmF4aXNfeTJfdGlja19mb3JtYXRcclxuICAgICAgICAgID8gY29uZmlnLmF4aXNfeTJfdGlja19mb3JtYXRcclxuICAgICAgICAgIDogJCQuZGVmYXVsdFZhbHVlRm9ybWF0O1xyXG4gICAgICByZXR1cm4gZm9ybWF0KHYpO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuZGVmYXVsdFZhbHVlRm9ybWF0ID0gZnVuY3Rpb24gKHYpIHtcclxuICAgICAgcmV0dXJuIGlzVmFsdWUodikgPyArdiA6ICcnO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuZGVmYXVsdEFyY1ZhbHVlRm9ybWF0ID0gZnVuY3Rpb24gKHYsIHJhdGlvKSB7XHJcbiAgICAgIHJldHVybiAocmF0aW8gKiAxMDApLnRvRml4ZWQoMSkgKyAnJSc7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5kYXRhTGFiZWxGb3JtYXQgPSBmdW5jdGlvbiAodGFyZ2V0SWQpIHtcclxuICAgICAgdmFyICQkID0gdGhpcywgZGF0YV9sYWJlbHMgPSAkJC5jb25maWcuZGF0YV9sYWJlbHMsIGZvcm1hdCwgZGVmYXVsdEZvcm1hdCA9IGZ1bmN0aW9uICh2KSB7XHJcbiAgICAgICAgICByZXR1cm4gaXNWYWx1ZSh2KSA/ICt2IDogJyc7XHJcbiAgICAgIH07XHJcbiAgICAgIC8vIGZpbmQgZm9ybWF0IGFjY29yZGluZyB0byBheGlzIGlkXHJcbiAgICAgIGlmICh0eXBlb2YgZGF0YV9sYWJlbHMuZm9ybWF0ID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICBmb3JtYXQgPSBkYXRhX2xhYmVscy5mb3JtYXQ7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodHlwZW9mIGRhdGFfbGFiZWxzLmZvcm1hdCA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgIGlmIChkYXRhX2xhYmVscy5mb3JtYXRbdGFyZ2V0SWRdKSB7XHJcbiAgICAgICAgICAgICAgZm9ybWF0ID1cclxuICAgICAgICAgICAgICAgICAgZGF0YV9sYWJlbHMuZm9ybWF0W3RhcmdldElkXSA9PT0gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgPyBkZWZhdWx0Rm9ybWF0XHJcbiAgICAgICAgICAgICAgICAgICAgICA6IGRhdGFfbGFiZWxzLmZvcm1hdFt0YXJnZXRJZF07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICBmb3JtYXQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiAnJztcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgZm9ybWF0ID0gZGVmYXVsdEZvcm1hdDtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZm9ybWF0O1xyXG4gIH07XG5cbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuaW5pdEdyaWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXMsIGNvbmZpZyA9ICQkLmNvbmZpZywgZDMgPSAkJC5kMztcclxuICAgICAgJCQuZ3JpZCA9ICQkLm1haW5cclxuICAgICAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAgICAgLmF0dHIoJ2NsaXAtcGF0aCcsICQkLmNsaXBQYXRoRm9yR3JpZClcclxuICAgICAgICAgIC5hdHRyKCdjbGFzcycsIENMQVNTLmdyaWQpO1xyXG4gICAgICBpZiAoY29uZmlnLmdyaWRfeF9zaG93KSB7XHJcbiAgICAgICAgICAkJC5ncmlkLmFwcGVuZCgnZycpLmF0dHIoJ2NsYXNzJywgQ0xBU1MueGdyaWRzKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLmdyaWRfeV9zaG93KSB7XHJcbiAgICAgICAgICAkJC5ncmlkLmFwcGVuZCgnZycpLmF0dHIoJ2NsYXNzJywgQ0xBU1MueWdyaWRzKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLmdyaWRfZm9jdXNfc2hvdykge1xyXG4gICAgICAgICAgJCQuZ3JpZFxyXG4gICAgICAgICAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAgICAgICAgIC5hdHRyKCdjbGFzcycsIENMQVNTLnhncmlkRm9jdXMpXHJcbiAgICAgICAgICAgICAgLmFwcGVuZCgnbGluZScpXHJcbiAgICAgICAgICAgICAgLmF0dHIoJ2NsYXNzJywgQ0xBU1MueGdyaWRGb2N1cyk7XHJcbiAgICAgIH1cclxuICAgICAgJCQueGdyaWQgPSBkMy5zZWxlY3RBbGwoW10pO1xyXG4gICAgICBpZiAoIWNvbmZpZy5ncmlkX2xpbmVzX2Zyb250KSB7XHJcbiAgICAgICAgICAkJC5pbml0R3JpZExpbmVzKCk7XHJcbiAgICAgIH1cclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmluaXRHcmlkTGluZXMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXMsIGQzID0gJCQuZDM7XHJcbiAgICAgICQkLmdyaWRMaW5lcyA9ICQkLm1haW5cclxuICAgICAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAgICAgLmF0dHIoJ2NsaXAtcGF0aCcsICQkLmNsaXBQYXRoRm9yR3JpZClcclxuICAgICAgICAgIC5hdHRyKCdjbGFzcycsIENMQVNTLmdyaWQgKyAnICcgKyBDTEFTUy5ncmlkTGluZXMpO1xyXG4gICAgICAkJC5ncmlkTGluZXMuYXBwZW5kKCdnJykuYXR0cignY2xhc3MnLCBDTEFTUy54Z3JpZExpbmVzKTtcclxuICAgICAgJCQuZ3JpZExpbmVzLmFwcGVuZCgnZycpLmF0dHIoJ2NsYXNzJywgQ0xBU1MueWdyaWRMaW5lcyk7XHJcbiAgICAgICQkLnhncmlkTGluZXMgPSBkMy5zZWxlY3RBbGwoW10pO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUudXBkYXRlWEdyaWQgPSBmdW5jdGlvbiAod2l0aG91dFVwZGF0ZSkge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzLCBjb25maWcgPSAkJC5jb25maWcsIGQzID0gJCQuZDMsIHhncmlkRGF0YSA9ICQkLmdlbmVyYXRlR3JpZERhdGEoY29uZmlnLmdyaWRfeF90eXBlLCAkJC54KSwgdGlja09mZnNldCA9ICQkLmlzQ2F0ZWdvcml6ZWQoKSA/ICQkLnhBeGlzLnRpY2tPZmZzZXQoKSA6IDA7XHJcbiAgICAgICQkLnhncmlkQXR0ciA9IGNvbmZpZy5heGlzX3JvdGF0ZWRcclxuICAgICAgICAgID8ge1xyXG4gICAgICAgICAgICAgIHgxOiAwLFxyXG4gICAgICAgICAgICAgIHgyOiAkJC53aWR0aCxcclxuICAgICAgICAgICAgICB5MTogZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuICQkLngoZCkgLSB0aWNrT2Zmc2V0O1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgeTI6IGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiAkJC54KGQpIC0gdGlja09mZnNldDtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICA6IHtcclxuICAgICAgICAgICAgICB4MTogZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuICQkLngoZCkgKyB0aWNrT2Zmc2V0O1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgeDI6IGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiAkJC54KGQpICsgdGlja09mZnNldDtcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIHkxOiAwLFxyXG4gICAgICAgICAgICAgIHkyOiAkJC5oZWlnaHRcclxuICAgICAgICAgIH07XHJcbiAgICAgICQkLnhncmlkQXR0ci5vcGFjaXR5ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgdmFyIHBvcyA9ICtkMy5zZWxlY3QodGhpcykuYXR0cihjb25maWcuYXhpc19yb3RhdGVkID8gJ3kxJyA6ICd4MScpO1xyXG4gICAgICAgICAgcmV0dXJuIHBvcyA9PT0gKGNvbmZpZy5heGlzX3JvdGF0ZWQgPyAkJC5oZWlnaHQgOiAwKSA/IDAgOiAxO1xyXG4gICAgICB9O1xyXG4gICAgICB2YXIgeGdyaWQgPSAkJC5tYWluXHJcbiAgICAgICAgICAuc2VsZWN0KCcuJyArIENMQVNTLnhncmlkcylcclxuICAgICAgICAgIC5zZWxlY3RBbGwoJy4nICsgQ0xBU1MueGdyaWQpXHJcbiAgICAgICAgICAuZGF0YSh4Z3JpZERhdGEpO1xyXG4gICAgICB2YXIgeGdyaWRFbnRlciA9IHhncmlkXHJcbiAgICAgICAgICAuZW50ZXIoKVxyXG4gICAgICAgICAgLmFwcGVuZCgnbGluZScpXHJcbiAgICAgICAgICAuYXR0cignY2xhc3MnLCBDTEFTUy54Z3JpZClcclxuICAgICAgICAgIC5hdHRyKCd4MScsICQkLnhncmlkQXR0ci54MSlcclxuICAgICAgICAgIC5hdHRyKCd4MicsICQkLnhncmlkQXR0ci54MilcclxuICAgICAgICAgIC5hdHRyKCd5MScsICQkLnhncmlkQXR0ci55MSlcclxuICAgICAgICAgIC5hdHRyKCd5MicsICQkLnhncmlkQXR0ci55MilcclxuICAgICAgICAgIC5zdHlsZSgnb3BhY2l0eScsIDApO1xyXG4gICAgICAkJC54Z3JpZCA9IHhncmlkRW50ZXIubWVyZ2UoeGdyaWQpO1xyXG4gICAgICBpZiAoIXdpdGhvdXRVcGRhdGUpIHtcclxuICAgICAgICAgICQkLnhncmlkXHJcbiAgICAgICAgICAgICAgLmF0dHIoJ3gxJywgJCQueGdyaWRBdHRyLngxKVxyXG4gICAgICAgICAgICAgIC5hdHRyKCd4MicsICQkLnhncmlkQXR0ci54MilcclxuICAgICAgICAgICAgICAuYXR0cigneTEnLCAkJC54Z3JpZEF0dHIueTEpXHJcbiAgICAgICAgICAgICAgLmF0dHIoJ3kyJywgJCQueGdyaWRBdHRyLnkyKVxyXG4gICAgICAgICAgICAgIC5zdHlsZSgnb3BhY2l0eScsICQkLnhncmlkQXR0ci5vcGFjaXR5KTtcclxuICAgICAgfVxyXG4gICAgICB4Z3JpZC5leGl0KCkucmVtb3ZlKCk7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS51cGRhdGVZR3JpZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgdmFyICQkID0gdGhpcywgY29uZmlnID0gJCQuY29uZmlnLCBncmlkVmFsdWVzID0gJCQueUF4aXMudGlja1ZhbHVlcygpIHx8ICQkLnkudGlja3MoY29uZmlnLmdyaWRfeV90aWNrcyk7XHJcbiAgICAgIHZhciB5Z3JpZCA9ICQkLm1haW5cclxuICAgICAgICAgIC5zZWxlY3QoJy4nICsgQ0xBU1MueWdyaWRzKVxyXG4gICAgICAgICAgLnNlbGVjdEFsbCgnLicgKyBDTEFTUy55Z3JpZClcclxuICAgICAgICAgIC5kYXRhKGdyaWRWYWx1ZXMpO1xyXG4gICAgICB2YXIgeWdyaWRFbnRlciA9IHlncmlkXHJcbiAgICAgICAgICAuZW50ZXIoKVxyXG4gICAgICAgICAgLmFwcGVuZCgnbGluZScpXHJcbiAgICAgICAgICAvLyBUT0RPOiB4MSwgeDIsIHkxLCB5Miwgb3BhY2l0eSBuZWVkIHRvIGJlIHNldCBoZXJlIG1heWJlXHJcbiAgICAgICAgICAuYXR0cignY2xhc3MnLCBDTEFTUy55Z3JpZCk7XHJcbiAgICAgICQkLnlncmlkID0geWdyaWRFbnRlci5tZXJnZSh5Z3JpZCk7XHJcbiAgICAgICQkLnlncmlkXHJcbiAgICAgICAgICAuYXR0cigneDEnLCBjb25maWcuYXhpc19yb3RhdGVkID8gJCQueSA6IDApXHJcbiAgICAgICAgICAuYXR0cigneDInLCBjb25maWcuYXhpc19yb3RhdGVkID8gJCQueSA6ICQkLndpZHRoKVxyXG4gICAgICAgICAgLmF0dHIoJ3kxJywgY29uZmlnLmF4aXNfcm90YXRlZCA/IDAgOiAkJC55KVxyXG4gICAgICAgICAgLmF0dHIoJ3kyJywgY29uZmlnLmF4aXNfcm90YXRlZCA/ICQkLmhlaWdodCA6ICQkLnkpO1xyXG4gICAgICB5Z3JpZC5leGl0KCkucmVtb3ZlKCk7XHJcbiAgICAgICQkLnNtb290aExpbmVzKCQkLnlncmlkLCAnZ3JpZCcpO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuZ3JpZFRleHRBbmNob3IgPSBmdW5jdGlvbiAoZCkge1xyXG4gICAgICByZXR1cm4gZC5wb3NpdGlvbiA/IGQucG9zaXRpb24gOiAnZW5kJztcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmdyaWRUZXh0RHggPSBmdW5jdGlvbiAoZCkge1xyXG4gICAgICByZXR1cm4gZC5wb3NpdGlvbiA9PT0gJ3N0YXJ0JyA/IDQgOiBkLnBvc2l0aW9uID09PSAnbWlkZGxlJyA/IDAgOiAtNDtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLnhHcmlkVGV4dFggPSBmdW5jdGlvbiAoZCkge1xyXG4gICAgICByZXR1cm4gZC5wb3NpdGlvbiA9PT0gJ3N0YXJ0J1xyXG4gICAgICAgICAgPyAtdGhpcy5oZWlnaHRcclxuICAgICAgICAgIDogZC5wb3NpdGlvbiA9PT0gJ21pZGRsZSdcclxuICAgICAgICAgICAgICA/IC10aGlzLmhlaWdodCAvIDJcclxuICAgICAgICAgICAgICA6IDA7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS55R3JpZFRleHRYID0gZnVuY3Rpb24gKGQpIHtcclxuICAgICAgcmV0dXJuIGQucG9zaXRpb24gPT09ICdzdGFydCdcclxuICAgICAgICAgID8gMFxyXG4gICAgICAgICAgOiBkLnBvc2l0aW9uID09PSAnbWlkZGxlJ1xyXG4gICAgICAgICAgICAgID8gdGhpcy53aWR0aCAvIDJcclxuICAgICAgICAgICAgICA6IHRoaXMud2lkdGg7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS51cGRhdGVHcmlkID0gZnVuY3Rpb24gKGR1cmF0aW9uKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXMsIG1haW4gPSAkJC5tYWluLCBjb25maWcgPSAkJC5jb25maWcsIHhncmlkTGluZSwgeGdyaWRMaW5lRW50ZXIsIHlncmlkTGluZSwgeWdyaWRMaW5lRW50ZXIsIHh2ID0gJCQueHYuYmluZCgkJCksIHl2ID0gJCQueXYuYmluZCgkJCksIHhHcmlkVGV4dFggPSAkJC54R3JpZFRleHRYLmJpbmQoJCQpLCB5R3JpZFRleHRYID0gJCQueUdyaWRUZXh0WC5iaW5kKCQkKTtcclxuICAgICAgLy8gaGlkZSBpZiBhcmMgdHlwZVxyXG4gICAgICAkJC5ncmlkLnN0eWxlKCd2aXNpYmlsaXR5JywgJCQuaGFzQXJjVHlwZSgpID8gJ2hpZGRlbicgOiAndmlzaWJsZScpO1xyXG4gICAgICBtYWluLnNlbGVjdCgnbGluZS4nICsgQ0xBU1MueGdyaWRGb2N1cykuc3R5bGUoJ3Zpc2liaWxpdHknLCAnaGlkZGVuJyk7XHJcbiAgICAgIGlmIChjb25maWcuZ3JpZF94X3Nob3cpIHtcclxuICAgICAgICAgICQkLnVwZGF0ZVhHcmlkKCk7XHJcbiAgICAgIH1cclxuICAgICAgeGdyaWRMaW5lID0gbWFpblxyXG4gICAgICAgICAgLnNlbGVjdCgnLicgKyBDTEFTUy54Z3JpZExpbmVzKVxyXG4gICAgICAgICAgLnNlbGVjdEFsbCgnLicgKyBDTEFTUy54Z3JpZExpbmUpXHJcbiAgICAgICAgICAuZGF0YShjb25maWcuZ3JpZF94X2xpbmVzKTtcclxuICAgICAgLy8gZW50ZXJcclxuICAgICAgeGdyaWRMaW5lRW50ZXIgPSB4Z3JpZExpbmVcclxuICAgICAgICAgIC5lbnRlcigpXHJcbiAgICAgICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgICAgIC5hdHRyKCdjbGFzcycsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICByZXR1cm4gQ0xBU1MueGdyaWRMaW5lICsgKGRbJ2NsYXNzJ10gPyAnICcgKyBkWydjbGFzcyddIDogJycpO1xyXG4gICAgICB9KTtcclxuICAgICAgeGdyaWRMaW5lRW50ZXJcclxuICAgICAgICAgIC5hcHBlbmQoJ2xpbmUnKVxyXG4gICAgICAgICAgLmF0dHIoJ3gxJywgY29uZmlnLmF4aXNfcm90YXRlZCA/IDAgOiB4dilcclxuICAgICAgICAgIC5hdHRyKCd4MicsIGNvbmZpZy5heGlzX3JvdGF0ZWQgPyAkJC53aWR0aCA6IHh2KVxyXG4gICAgICAgICAgLmF0dHIoJ3kxJywgY29uZmlnLmF4aXNfcm90YXRlZCA/IHh2IDogMClcclxuICAgICAgICAgIC5hdHRyKCd5MicsIGNvbmZpZy5heGlzX3JvdGF0ZWQgPyB4diA6ICQkLmhlaWdodClcclxuICAgICAgICAgIC5zdHlsZSgnb3BhY2l0eScsIDApO1xyXG4gICAgICB4Z3JpZExpbmVFbnRlclxyXG4gICAgICAgICAgLmFwcGVuZCgndGV4dCcpXHJcbiAgICAgICAgICAuYXR0cigndGV4dC1hbmNob3InLCAkJC5ncmlkVGV4dEFuY2hvcilcclxuICAgICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBjb25maWcuYXhpc19yb3RhdGVkID8gJycgOiAncm90YXRlKC05MCknKVxyXG4gICAgICAgICAgLmF0dHIoJ3gnLCBjb25maWcuYXhpc19yb3RhdGVkID8geUdyaWRUZXh0WCA6IHhHcmlkVGV4dFgpXHJcbiAgICAgICAgICAuYXR0cigneScsIHh2KVxyXG4gICAgICAgICAgLmF0dHIoJ2R4JywgJCQuZ3JpZFRleHREeClcclxuICAgICAgICAgIC5hdHRyKCdkeScsIC01KVxyXG4gICAgICAgICAgLnN0eWxlKCdvcGFjaXR5JywgMCk7XHJcbiAgICAgIC8vIHVkcGF0ZVxyXG4gICAgICAkJC54Z3JpZExpbmVzID0geGdyaWRMaW5lRW50ZXIubWVyZ2UoeGdyaWRMaW5lKTtcclxuICAgICAgLy8gZG9uZSBpbiBkMy50cmFuc2l0aW9uKCkgb2YgdGhlIGVuZCBvZiB0aGlzIGZ1bmN0aW9uXHJcbiAgICAgIC8vIGV4aXRcclxuICAgICAgeGdyaWRMaW5lXHJcbiAgICAgICAgICAuZXhpdCgpXHJcbiAgICAgICAgICAudHJhbnNpdGlvbigpXHJcbiAgICAgICAgICAuZHVyYXRpb24oZHVyYXRpb24pXHJcbiAgICAgICAgICAuc3R5bGUoJ29wYWNpdHknLCAwKVxyXG4gICAgICAgICAgLnJlbW92ZSgpO1xyXG4gICAgICAvLyBZLUdyaWRcclxuICAgICAgaWYgKGNvbmZpZy5ncmlkX3lfc2hvdykge1xyXG4gICAgICAgICAgJCQudXBkYXRlWUdyaWQoKTtcclxuICAgICAgfVxyXG4gICAgICB5Z3JpZExpbmUgPSBtYWluXHJcbiAgICAgICAgICAuc2VsZWN0KCcuJyArIENMQVNTLnlncmlkTGluZXMpXHJcbiAgICAgICAgICAuc2VsZWN0QWxsKCcuJyArIENMQVNTLnlncmlkTGluZSlcclxuICAgICAgICAgIC5kYXRhKGNvbmZpZy5ncmlkX3lfbGluZXMpO1xyXG4gICAgICAvLyBlbnRlclxyXG4gICAgICB5Z3JpZExpbmVFbnRlciA9IHlncmlkTGluZVxyXG4gICAgICAgICAgLmVudGVyKClcclxuICAgICAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAgICAgLmF0dHIoJ2NsYXNzJywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIHJldHVybiBDTEFTUy55Z3JpZExpbmUgKyAoZFsnY2xhc3MnXSA/ICcgJyArIGRbJ2NsYXNzJ10gOiAnJyk7XHJcbiAgICAgIH0pO1xyXG4gICAgICB5Z3JpZExpbmVFbnRlclxyXG4gICAgICAgICAgLmFwcGVuZCgnbGluZScpXHJcbiAgICAgICAgICAuYXR0cigneDEnLCBjb25maWcuYXhpc19yb3RhdGVkID8geXYgOiAwKVxyXG4gICAgICAgICAgLmF0dHIoJ3gyJywgY29uZmlnLmF4aXNfcm90YXRlZCA/IHl2IDogJCQud2lkdGgpXHJcbiAgICAgICAgICAuYXR0cigneTEnLCBjb25maWcuYXhpc19yb3RhdGVkID8gMCA6IHl2KVxyXG4gICAgICAgICAgLmF0dHIoJ3kyJywgY29uZmlnLmF4aXNfcm90YXRlZCA/ICQkLmhlaWdodCA6IHl2KVxyXG4gICAgICAgICAgLnN0eWxlKCdvcGFjaXR5JywgMCk7XHJcbiAgICAgIHlncmlkTGluZUVudGVyXHJcbiAgICAgICAgICAuYXBwZW5kKCd0ZXh0JylcclxuICAgICAgICAgIC5hdHRyKCd0ZXh0LWFuY2hvcicsICQkLmdyaWRUZXh0QW5jaG9yKVxyXG4gICAgICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIGNvbmZpZy5heGlzX3JvdGF0ZWQgPyAncm90YXRlKC05MCknIDogJycpXHJcbiAgICAgICAgICAuYXR0cigneCcsIGNvbmZpZy5heGlzX3JvdGF0ZWQgPyB4R3JpZFRleHRYIDogeUdyaWRUZXh0WClcclxuICAgICAgICAgIC5hdHRyKCd5JywgeXYpXHJcbiAgICAgICAgICAuYXR0cignZHgnLCAkJC5ncmlkVGV4dER4KVxyXG4gICAgICAgICAgLmF0dHIoJ2R5JywgLTUpXHJcbiAgICAgICAgICAuc3R5bGUoJ29wYWNpdHknLCAwKTtcclxuICAgICAgLy8gdXBkYXRlXHJcbiAgICAgICQkLnlncmlkTGluZXMgPSB5Z3JpZExpbmVFbnRlci5tZXJnZSh5Z3JpZExpbmUpO1xyXG4gICAgICAkJC55Z3JpZExpbmVzXHJcbiAgICAgICAgICAuc2VsZWN0KCdsaW5lJylcclxuICAgICAgICAgIC50cmFuc2l0aW9uKClcclxuICAgICAgICAgIC5kdXJhdGlvbihkdXJhdGlvbilcclxuICAgICAgICAgIC5hdHRyKCd4MScsIGNvbmZpZy5heGlzX3JvdGF0ZWQgPyB5diA6IDApXHJcbiAgICAgICAgICAuYXR0cigneDInLCBjb25maWcuYXhpc19yb3RhdGVkID8geXYgOiAkJC53aWR0aClcclxuICAgICAgICAgIC5hdHRyKCd5MScsIGNvbmZpZy5heGlzX3JvdGF0ZWQgPyAwIDogeXYpXHJcbiAgICAgICAgICAuYXR0cigneTInLCBjb25maWcuYXhpc19yb3RhdGVkID8gJCQuaGVpZ2h0IDogeXYpXHJcbiAgICAgICAgICAuc3R5bGUoJ29wYWNpdHknLCAxKTtcclxuICAgICAgJCQueWdyaWRMaW5lc1xyXG4gICAgICAgICAgLnNlbGVjdCgndGV4dCcpXHJcbiAgICAgICAgICAudHJhbnNpdGlvbigpXHJcbiAgICAgICAgICAuZHVyYXRpb24oZHVyYXRpb24pXHJcbiAgICAgICAgICAuYXR0cigneCcsIGNvbmZpZy5heGlzX3JvdGF0ZWQgPyAkJC54R3JpZFRleHRYLmJpbmQoJCQpIDogJCQueUdyaWRUZXh0WC5iaW5kKCQkKSlcclxuICAgICAgICAgIC5hdHRyKCd5JywgeXYpXHJcbiAgICAgICAgICAudGV4dChmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgcmV0dXJuIGQudGV4dDtcclxuICAgICAgfSlcclxuICAgICAgICAgIC5zdHlsZSgnb3BhY2l0eScsIDEpO1xyXG4gICAgICAvLyBleGl0XHJcbiAgICAgIHlncmlkTGluZVxyXG4gICAgICAgICAgLmV4aXQoKVxyXG4gICAgICAgICAgLnRyYW5zaXRpb24oKVxyXG4gICAgICAgICAgLmR1cmF0aW9uKGR1cmF0aW9uKVxyXG4gICAgICAgICAgLnN0eWxlKCdvcGFjaXR5JywgMClcclxuICAgICAgICAgIC5yZW1vdmUoKTtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLnJlZHJhd0dyaWQgPSBmdW5jdGlvbiAod2l0aFRyYW5zaXRpb24sIHRyYW5zaXRpb24pIHtcclxuICAgICAgdmFyICQkID0gdGhpcywgY29uZmlnID0gJCQuY29uZmlnLCB4diA9ICQkLnh2LmJpbmQoJCQpLCBsaW5lcyA9ICQkLnhncmlkTGluZXMuc2VsZWN0KCdsaW5lJyksIHRleHRzID0gJCQueGdyaWRMaW5lcy5zZWxlY3QoJ3RleHQnKTtcclxuICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICh3aXRoVHJhbnNpdGlvbiA/IGxpbmVzLnRyYW5zaXRpb24odHJhbnNpdGlvbikgOiBsaW5lcylcclxuICAgICAgICAgICAgICAuYXR0cigneDEnLCBjb25maWcuYXhpc19yb3RhdGVkID8gMCA6IHh2KVxyXG4gICAgICAgICAgICAgIC5hdHRyKCd4MicsIGNvbmZpZy5heGlzX3JvdGF0ZWQgPyAkJC53aWR0aCA6IHh2KVxyXG4gICAgICAgICAgICAgIC5hdHRyKCd5MScsIGNvbmZpZy5heGlzX3JvdGF0ZWQgPyB4diA6IDApXHJcbiAgICAgICAgICAgICAgLmF0dHIoJ3kyJywgY29uZmlnLmF4aXNfcm90YXRlZCA/IHh2IDogJCQuaGVpZ2h0KVxyXG4gICAgICAgICAgICAgIC5zdHlsZSgnb3BhY2l0eScsIDEpLFxyXG4gICAgICAgICAgKHdpdGhUcmFuc2l0aW9uID8gdGV4dHMudHJhbnNpdGlvbih0cmFuc2l0aW9uKSA6IHRleHRzKVxyXG4gICAgICAgICAgICAgIC5hdHRyKCd4JywgY29uZmlnLmF4aXNfcm90YXRlZCA/ICQkLnlHcmlkVGV4dFguYmluZCgkJCkgOiAkJC54R3JpZFRleHRYLmJpbmQoJCQpKVxyXG4gICAgICAgICAgICAgIC5hdHRyKCd5JywgeHYpXHJcbiAgICAgICAgICAgICAgLnRleHQoZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gZC50ZXh0O1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAuc3R5bGUoJ29wYWNpdHknLCAxKVxyXG4gICAgICBdO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuc2hvd1hHcmlkRm9jdXMgPSBmdW5jdGlvbiAoc2VsZWN0ZWREYXRhKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXMsIGNvbmZpZyA9ICQkLmNvbmZpZywgZGF0YVRvU2hvdyA9IHNlbGVjdGVkRGF0YS5maWx0ZXIoZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIHJldHVybiBkICYmIGlzVmFsdWUoZC52YWx1ZSk7XHJcbiAgICAgIH0pLCBmb2N1c0VsID0gJCQubWFpbi5zZWxlY3RBbGwoJ2xpbmUuJyArIENMQVNTLnhncmlkRm9jdXMpLCB4eCA9ICQkLnh4LmJpbmQoJCQpO1xyXG4gICAgICBpZiAoIWNvbmZpZy50b29sdGlwX3Nob3cpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICAvLyBIaWRlIHdoZW4gc3RhbmZvcmQgcGxvdCBleGlzdHNcclxuICAgICAgaWYgKCQkLmhhc1R5cGUoJ3N0YW5mb3JkJykgfHwgJCQuaGFzQXJjVHlwZSgpKSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgZm9jdXNFbFxyXG4gICAgICAgICAgLnN0eWxlKCd2aXNpYmlsaXR5JywgJ3Zpc2libGUnKVxyXG4gICAgICAgICAgLmRhdGEoW2RhdGFUb1Nob3dbMF1dKVxyXG4gICAgICAgICAgLmF0dHIoY29uZmlnLmF4aXNfcm90YXRlZCA/ICd5MScgOiAneDEnLCB4eClcclxuICAgICAgICAgIC5hdHRyKGNvbmZpZy5heGlzX3JvdGF0ZWQgPyAneTInIDogJ3gyJywgeHgpO1xyXG4gICAgICAkJC5zbW9vdGhMaW5lcyhmb2N1c0VsLCAnZ3JpZCcpO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuaGlkZVhHcmlkRm9jdXMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHRoaXMubWFpbi5zZWxlY3QoJ2xpbmUuJyArIENMQVNTLnhncmlkRm9jdXMpLnN0eWxlKCd2aXNpYmlsaXR5JywgJ2hpZGRlbicpO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUudXBkYXRlWGdyaWRGb2N1cyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgdmFyICQkID0gdGhpcywgY29uZmlnID0gJCQuY29uZmlnO1xyXG4gICAgICAkJC5tYWluXHJcbiAgICAgICAgICAuc2VsZWN0KCdsaW5lLicgKyBDTEFTUy54Z3JpZEZvY3VzKVxyXG4gICAgICAgICAgLmF0dHIoJ3gxJywgY29uZmlnLmF4aXNfcm90YXRlZCA/IDAgOiAtMTApXHJcbiAgICAgICAgICAuYXR0cigneDInLCBjb25maWcuYXhpc19yb3RhdGVkID8gJCQud2lkdGggOiAtMTApXHJcbiAgICAgICAgICAuYXR0cigneTEnLCBjb25maWcuYXhpc19yb3RhdGVkID8gLTEwIDogMClcclxuICAgICAgICAgIC5hdHRyKCd5MicsIGNvbmZpZy5heGlzX3JvdGF0ZWQgPyAtMTAgOiAkJC5oZWlnaHQpO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuZ2VuZXJhdGVHcmlkRGF0YSA9IGZ1bmN0aW9uICh0eXBlLCBzY2FsZSkge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzLCBncmlkRGF0YSA9IFtdLCB4RG9tYWluLCBmaXJzdFllYXIsIGxhc3RZZWFyLCBpLCB0aWNrTnVtID0gJCQubWFpblxyXG4gICAgICAgICAgLnNlbGVjdCgnLicgKyBDTEFTUy5heGlzWClcclxuICAgICAgICAgIC5zZWxlY3RBbGwoJy50aWNrJylcclxuICAgICAgICAgIC5zaXplKCk7XHJcbiAgICAgIGlmICh0eXBlID09PSAneWVhcicpIHtcclxuICAgICAgICAgIHhEb21haW4gPSAkJC5nZXRYRG9tYWluKCk7XHJcbiAgICAgICAgICBmaXJzdFllYXIgPSB4RG9tYWluWzBdLmdldEZ1bGxZZWFyKCk7XHJcbiAgICAgICAgICBsYXN0WWVhciA9IHhEb21haW5bMV0uZ2V0RnVsbFllYXIoKTtcclxuICAgICAgICAgIGZvciAoaSA9IGZpcnN0WWVhcjsgaSA8PSBsYXN0WWVhcjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgZ3JpZERhdGEucHVzaChuZXcgRGF0ZShpICsgJy0wMS0wMSAwMDowMDowMCcpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICAgIGdyaWREYXRhID0gc2NhbGUudGlja3MoMTApO1xyXG4gICAgICAgICAgaWYgKGdyaWREYXRhLmxlbmd0aCA+IHRpY2tOdW0pIHtcclxuICAgICAgICAgICAgICAvLyB1c2Ugb25seSBpbnRcclxuICAgICAgICAgICAgICBncmlkRGF0YSA9IGdyaWREYXRhLmZpbHRlcihmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gKCcnICsgZCkuaW5kZXhPZignLicpIDwgMDtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZ3JpZERhdGE7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5nZXRHcmlkRmlsdGVyVG9SZW1vdmUgPSBmdW5jdGlvbiAocGFyYW1zKSB7XHJcbiAgICAgIHJldHVybiBwYXJhbXNcclxuICAgICAgICAgID8gZnVuY3Rpb24gKGxpbmUpIHtcclxuICAgICAgICAgICAgICB2YXIgZm91bmQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICBbXS5jb25jYXQocGFyYW1zKS5mb3JFYWNoKGZ1bmN0aW9uIChwYXJhbSkge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoKCd2YWx1ZScgaW4gcGFyYW0gJiYgbGluZS52YWx1ZSA9PT0gcGFyYW0udmFsdWUpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAoJ2NsYXNzJyBpbiBwYXJhbSAmJiBsaW5lWydjbGFzcyddID09PSBwYXJhbVsnY2xhc3MnXSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIHJldHVybiBmb3VuZDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgfTtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLnJlbW92ZUdyaWRMaW5lcyA9IGZ1bmN0aW9uIChwYXJhbXMsIGZvclgpIHtcclxuICAgICAgdmFyICQkID0gdGhpcywgY29uZmlnID0gJCQuY29uZmlnLCB0b1JlbW92ZSA9ICQkLmdldEdyaWRGaWx0ZXJUb1JlbW92ZShwYXJhbXMpLCB0b1Nob3cgPSBmdW5jdGlvbiAobGluZSkge1xyXG4gICAgICAgICAgcmV0dXJuICF0b1JlbW92ZShsaW5lKTtcclxuICAgICAgfSwgY2xhc3NMaW5lcyA9IGZvclggPyBDTEFTUy54Z3JpZExpbmVzIDogQ0xBU1MueWdyaWRMaW5lcywgY2xhc3NMaW5lID0gZm9yWCA/IENMQVNTLnhncmlkTGluZSA6IENMQVNTLnlncmlkTGluZTtcclxuICAgICAgJCQubWFpblxyXG4gICAgICAgICAgLnNlbGVjdCgnLicgKyBjbGFzc0xpbmVzKVxyXG4gICAgICAgICAgLnNlbGVjdEFsbCgnLicgKyBjbGFzc0xpbmUpXHJcbiAgICAgICAgICAuZmlsdGVyKHRvUmVtb3ZlKVxyXG4gICAgICAgICAgLnRyYW5zaXRpb24oKVxyXG4gICAgICAgICAgLmR1cmF0aW9uKGNvbmZpZy50cmFuc2l0aW9uX2R1cmF0aW9uKVxyXG4gICAgICAgICAgLnN0eWxlKCdvcGFjaXR5JywgMClcclxuICAgICAgICAgIC5yZW1vdmUoKTtcclxuICAgICAgaWYgKGZvclgpIHtcclxuICAgICAgICAgIGNvbmZpZy5ncmlkX3hfbGluZXMgPSBjb25maWcuZ3JpZF94X2xpbmVzLmZpbHRlcih0b1Nob3cpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgY29uZmlnLmdyaWRfeV9saW5lcyA9IGNvbmZpZy5ncmlkX3lfbGluZXMuZmlsdGVyKHRvU2hvdyk7XHJcbiAgICAgIH1cclxuICB9O1xuXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmluaXRFdmVudFJlY3QgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXMsIGNvbmZpZyA9ICQkLmNvbmZpZztcclxuICAgICAgJCQubWFpblxyXG4gICAgICAgICAgLnNlbGVjdCgnLicgKyBDTEFTUy5jaGFydClcclxuICAgICAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAgICAgLmF0dHIoJ2NsYXNzJywgQ0xBU1MuZXZlbnRSZWN0cylcclxuICAgICAgICAgIC5zdHlsZSgnZmlsbC1vcGFjaXR5JywgMCk7XHJcbiAgICAgICQkLmV2ZW50UmVjdCA9ICQkLm1haW5cclxuICAgICAgICAgIC5zZWxlY3QoJy4nICsgQ0xBU1MuZXZlbnRSZWN0cylcclxuICAgICAgICAgIC5hcHBlbmQoJ3JlY3QnKVxyXG4gICAgICAgICAgLmF0dHIoJ2NsYXNzJywgQ0xBU1MuZXZlbnRSZWN0KTtcclxuICAgICAgLy8gZXZlbnQgcmVjdCBoYW5kbGUgem9vbSBldmVudCBhcyB3ZWxsXHJcbiAgICAgIGlmIChjb25maWcuem9vbV9lbmFibGVkICYmICQkLnpvb20pIHtcclxuICAgICAgICAgICQkLmV2ZW50UmVjdC5jYWxsKCQkLnpvb20pLm9uKCdkYmxjbGljay56b29tJywgbnVsbCk7XHJcbiAgICAgICAgICBpZiAoY29uZmlnLnpvb21faW5pdGlhbFJhbmdlKSB7XHJcbiAgICAgICAgICAgICAgLy8gV09SS0FST1VORDogQWRkIHRyYW5zaXRpb24gdG8gYXBwbHkgdHJhbnNmb3JtIGltbWVkaWF0ZWx5IHdoZW4gbm8gc3ViY2hhcnRcclxuICAgICAgICAgICAgICAkJC5ldmVudFJlY3RcclxuICAgICAgICAgICAgICAgICAgLnRyYW5zaXRpb24oKVxyXG4gICAgICAgICAgICAgICAgICAuZHVyYXRpb24oMClcclxuICAgICAgICAgICAgICAgICAgLmNhbGwoJCQuem9vbS50cmFuc2Zvcm0sICQkLnpvb21UcmFuc2Zvcm0oY29uZmlnLnpvb21faW5pdGlhbFJhbmdlKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgIH1cclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLnJlZHJhd0V2ZW50UmVjdCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgdmFyICQkID0gdGhpcywgZDMgPSAkJC5kMywgY29uZmlnID0gJCQuY29uZmlnO1xyXG4gICAgICBmdW5jdGlvbiBtb3VzZW91dCgpIHtcclxuICAgICAgICAgICQkLnN2Zy5zZWxlY3QoJy4nICsgQ0xBU1MuZXZlbnRSZWN0KS5zdHlsZSgnY3Vyc29yJywgbnVsbCk7XHJcbiAgICAgICAgICAkJC5oaWRlWEdyaWRGb2N1cygpO1xyXG4gICAgICAgICAgJCQuaGlkZVRvb2x0aXAoKTtcclxuICAgICAgICAgICQkLnVuZXhwYW5kQ2lyY2xlcygpO1xyXG4gICAgICAgICAgJCQudW5leHBhbmRCYXJzKCk7XHJcbiAgICAgIH1cclxuICAgICAgdmFyIGlzSG92ZXJpbmdEYXRhUG9pbnQgPSBmdW5jdGlvbiAobW91c2UsIGNsb3Nlc3QpIHtcclxuICAgICAgICAgIHJldHVybiBjbG9zZXN0ICYmXHJcbiAgICAgICAgICAgICAgKCQkLmlzQmFyVHlwZShjbG9zZXN0LmlkKSB8fFxyXG4gICAgICAgICAgICAgICAgICAkJC5kaXN0KGNsb3Nlc3QsIG1vdXNlKSA8IGNvbmZpZy5wb2ludF9zZW5zaXRpdml0eSk7XHJcbiAgICAgIH07XHJcbiAgICAgIHZhciB3aXRoTmFtZSA9IGZ1bmN0aW9uIChkKSB7IHJldHVybiAoZCA/ICQkLmFkZE5hbWUoT2JqZWN0LmFzc2lnbih7fSwgZCkpIDogbnVsbCk7IH07XHJcbiAgICAgIC8vIHJlY3RzIGZvciBtb3VzZW92ZXJcclxuICAgICAgJCQubWFpblxyXG4gICAgICAgICAgLnNlbGVjdCgnLicgKyBDTEFTUy5ldmVudFJlY3RzKVxyXG4gICAgICAgICAgLnN0eWxlKCdjdXJzb3InLCBjb25maWcuem9vbV9lbmFibGVkXHJcbiAgICAgICAgICA/IGNvbmZpZy5heGlzX3JvdGF0ZWRcclxuICAgICAgICAgICAgICA/ICducy1yZXNpemUnXHJcbiAgICAgICAgICAgICAgOiAnZXctcmVzaXplJ1xyXG4gICAgICAgICAgOiBudWxsKTtcclxuICAgICAgJCQuZXZlbnRSZWN0XHJcbiAgICAgICAgICAuYXR0cigneCcsIDApXHJcbiAgICAgICAgICAuYXR0cigneScsIDApXHJcbiAgICAgICAgICAuYXR0cignd2lkdGgnLCAkJC53aWR0aClcclxuICAgICAgICAgIC5hdHRyKCdoZWlnaHQnLCAkJC5oZWlnaHQpXHJcbiAgICAgICAgICAub24oJ21vdXNlb3V0JywgY29uZmlnLmludGVyYWN0aW9uX2VuYWJsZWRcclxuICAgICAgICAgID8gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgIGlmICghY29uZmlnKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICB9IC8vIGNoYXJ0IGlzIGRlc3Ryb3llZFxyXG4gICAgICAgICAgICAgIGlmICgkJC5oYXNBcmNUeXBlKCkpIHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAoJCQubW91c2VvdmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbmZpZy5kYXRhX29ubW91c2VvdXQuY2FsbCgkJC5hcGksICQkLm1vdXNlb3Zlcik7XHJcbiAgICAgICAgICAgICAgICAgICQkLm1vdXNlb3ZlciA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgbW91c2VvdXQoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIDogbnVsbClcclxuICAgICAgICAgIC5vbignbW91c2Vtb3ZlJywgY29uZmlnLmludGVyYWN0aW9uX2VuYWJsZWRcclxuICAgICAgICAgID8gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgIC8vIGRvIG5vdGhpbmcgd2hlbiBkcmFnZ2luZ1xyXG4gICAgICAgICAgICAgIGlmICgkJC5kcmFnZ2luZykge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHZhciB0YXJnZXRzVG9TaG93ID0gJCQuZ2V0VGFyZ2V0c1RvU2hvdygpO1xyXG4gICAgICAgICAgICAgIC8vIGRvIG5vdGhpbmcgaWYgYXJjIHR5cGVcclxuICAgICAgICAgICAgICBpZiAoJCQuaGFzQXJjVHlwZSh0YXJnZXRzVG9TaG93KSkge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHZhciBtb3VzZSA9IGQzLm1vdXNlKHRoaXMpO1xyXG4gICAgICAgICAgICAgIHZhciBjbG9zZXN0ID0gd2l0aE5hbWUoJCQuZmluZENsb3Nlc3RGcm9tVGFyZ2V0cyh0YXJnZXRzVG9TaG93LCBtb3VzZSkpO1xyXG4gICAgICAgICAgICAgIHZhciBpc01vdXNlQ2xvc2VUb0RhdGFQb2ludCA9IGlzSG92ZXJpbmdEYXRhUG9pbnQobW91c2UsIGNsb3Nlc3QpO1xyXG4gICAgICAgICAgICAgIC8vIGVuc3VyZSBvbm1vdXNlb3V0IGlzIGFsd2F5cyBjYWxsZWQgaWYgbW91c2Vtb3ZlIHN3aXRjaCBiZXR3ZWVuIDIgdGFyZ2V0c1xyXG4gICAgICAgICAgICAgIGlmICgkJC5tb3VzZW92ZXIgJiZcclxuICAgICAgICAgICAgICAgICAgKCFjbG9zZXN0IHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICBjbG9zZXN0LmlkICE9PSAkJC5tb3VzZW92ZXIuaWQgfHxcclxuICAgICAgICAgICAgICAgICAgICAgIGNsb3Nlc3QuaW5kZXggIT09ICQkLm1vdXNlb3Zlci5pbmRleCkpIHtcclxuICAgICAgICAgICAgICAgICAgY29uZmlnLmRhdGFfb25tb3VzZW91dC5jYWxsKCQkLmFwaSwgJCQubW91c2VvdmVyKTtcclxuICAgICAgICAgICAgICAgICAgJCQubW91c2VvdmVyID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAoY2xvc2VzdCAmJiAhJCQubW91c2VvdmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbmZpZy5kYXRhX29ubW91c2VvdmVyLmNhbGwoJCQuYXBpLCBjbG9zZXN0KTtcclxuICAgICAgICAgICAgICAgICAgJCQubW91c2VvdmVyID0gY2xvc2VzdDtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgLy8gc2hvdyBjdXJzb3IgYXMgcG9pbnRlciBpZiB3ZSdyZSBob3ZlcmluZyBhIGRhdGEgcG9pbnQgY2xvc2UgZW5vdWdoXHJcbiAgICAgICAgICAgICAgJCQuc3ZnXHJcbiAgICAgICAgICAgICAgICAgIC5zZWxlY3QoJy4nICsgQ0xBU1MuZXZlbnRSZWN0KVxyXG4gICAgICAgICAgICAgICAgICAuc3R5bGUoJ2N1cnNvcicsIGlzTW91c2VDbG9zZVRvRGF0YVBvaW50ID8gJ3BvaW50ZXInIDogbnVsbCk7XHJcbiAgICAgICAgICAgICAgLy8gaWYgdG9vbHRpcCBub3QgZ3JvdXBlZCwgd2Ugd2FudCB0byBkaXNwbGF5IG9ubHkgZGF0YSBmcm9tIGNsb3Nlc3QgZGF0YSBwb2ludFxyXG4gICAgICAgICAgICAgIHZhciBzaG93U2luZ2xlRGF0YVBvaW50ID0gIWNvbmZpZy50b29sdGlwX2dyb3VwZWQgfHwgJCQuaGFzVHlwZSgnc3RhbmZvcmQnLCB0YXJnZXRzVG9TaG93KTtcclxuICAgICAgICAgICAgICAvLyBmaW5kIGRhdGEgdG8gaGlnaGxpZ2h0XHJcbiAgICAgICAgICAgICAgdmFyIHNlbGVjdGVkRGF0YTtcclxuICAgICAgICAgICAgICBpZiAoc2hvd1NpbmdsZURhdGFQb2ludCkge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoY2xvc2VzdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWREYXRhID0gW2Nsb3Nlc3RdO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICB2YXIgY2xvc2VzdEJ5WCA9IHZvaWQgMDtcclxuICAgICAgICAgICAgICAgICAgaWYgKGNsb3Nlc3QpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIC8vIHJldXNlIGNsb3Nlc3QgdmFsdWVcclxuICAgICAgICAgICAgICAgICAgICAgIGNsb3Nlc3RCeVggPSBjbG9zZXN0O1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gdHJ5IHRvIGZpbmQgdGhlIGNsb3Nlc3QgdmFsdWUgYnkgWCB2YWx1ZXMgZnJvbSB0aGUgbW91c2UgcG9zaXRpb25cclxuICAgICAgICAgICAgICAgICAgICAgIHZhciBtb3VzZVggPSBjb25maWcuYXhpc19yb3RhdGVkID8gbW91c2VbMV0gOiBtb3VzZVswXTtcclxuICAgICAgICAgICAgICAgICAgICAgIGNsb3Nlc3RCeVggPSAkJC5maW5kQ2xvc2VzdEZyb21UYXJnZXRzQnlYKHRhcmdldHNUb1Nob3csICQkLnguaW52ZXJ0KG1vdXNlWCkpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIC8vIGhpZ2hsaWdodCBhbGwgZGF0YSBmb3IgdGhpcyAneCcgdmFsdWVcclxuICAgICAgICAgICAgICAgICAgaWYgKGNsb3Nlc3RCeVgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkRGF0YSA9ICQkLmZpbHRlckJ5WCh0YXJnZXRzVG9TaG93LCBjbG9zZXN0QnlYLngpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIC8vIGVuc3VyZSB3ZSBoYXZlIGRhdGEgdG8gc2hvd1xyXG4gICAgICAgICAgICAgIGlmICghc2VsZWN0ZWREYXRhIHx8IHNlbGVjdGVkRGF0YS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIG1vdXNlb3V0KCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIC8vIGluamVjdCBuYW1lcyBmb3IgZWFjaCBwb2ludFxyXG4gICAgICAgICAgICAgIHNlbGVjdGVkRGF0YSA9IHNlbGVjdGVkRGF0YS5tYXAod2l0aE5hbWUpO1xyXG4gICAgICAgICAgICAgIC8vIHNob3cgdG9vbHRpcFxyXG4gICAgICAgICAgICAgICQkLnNob3dUb29sdGlwKHNlbGVjdGVkRGF0YSwgdGhpcyk7XHJcbiAgICAgICAgICAgICAgLy8gZXhwYW5kIHBvaW50c1xyXG4gICAgICAgICAgICAgIGlmIChjb25maWcucG9pbnRfZm9jdXNfZXhwYW5kX2VuYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgICAgJCQudW5leHBhbmRDaXJjbGVzKCk7XHJcbiAgICAgICAgICAgICAgICAgIHNlbGVjdGVkRGF0YS5mb3JFYWNoKGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAkJC5leHBhbmRDaXJjbGVzKGQuaW5kZXgsIGQuaWQsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIC8vIGV4cGFuZCBiYXJzXHJcbiAgICAgICAgICAgICAgJCQudW5leHBhbmRCYXJzKCk7XHJcbiAgICAgICAgICAgICAgc2VsZWN0ZWREYXRhLmZvckVhY2goZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgICAgICAgICAgJCQuZXhwYW5kQmFycyhkLmluZGV4LCBkLmlkLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgLy8gU2hvdyB4Z3JpZCBmb2N1cyBsaW5lXHJcbiAgICAgICAgICAgICAgJCQuc2hvd1hHcmlkRm9jdXMoc2VsZWN0ZWREYXRhKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIDogbnVsbClcclxuICAgICAgICAgIC5vbignY2xpY2snLCBjb25maWcuaW50ZXJhY3Rpb25fZW5hYmxlZFxyXG4gICAgICAgICAgPyBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgdmFyIHRhcmdldHNUb1Nob3cgPSAkJC5nZXRUYXJnZXRzVG9TaG93KCk7XHJcbiAgICAgICAgICAgICAgaWYgKCQkLmhhc0FyY1R5cGUodGFyZ2V0c1RvU2hvdykpIHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB2YXIgbW91c2UgPSBkMy5tb3VzZSh0aGlzKTtcclxuICAgICAgICAgICAgICB2YXIgY2xvc2VzdCA9IHdpdGhOYW1lKCQkLmZpbmRDbG9zZXN0RnJvbVRhcmdldHModGFyZ2V0c1RvU2hvdywgbW91c2UpKTtcclxuICAgICAgICAgICAgICBpZiAoIWlzSG92ZXJpbmdEYXRhUG9pbnQobW91c2UsIGNsb3Nlc3QpKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgLy8gc2VsZWN0IGlmIHNlbGVjdGlvbiBlbmFibGVkXHJcbiAgICAgICAgICAgICAgdmFyIHNhbWVYRGF0YTtcclxuICAgICAgICAgICAgICBpZiAoIWNvbmZpZy5kYXRhX3NlbGVjdGlvbl9ncm91cGVkIHx8ICQkLmlzU3RhbmZvcmRUeXBlKGNsb3Nlc3QpKSB7XHJcbiAgICAgICAgICAgICAgICAgIHNhbWVYRGF0YSA9IFtjbG9zZXN0XTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIHNhbWVYRGF0YSA9ICQkLmZpbHRlckJ5WCh0YXJnZXRzVG9TaG93LCBjbG9zZXN0LngpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAvLyB0b2dnbGUgc2VsZWN0ZWQgc3RhdGVcclxuICAgICAgICAgICAgICBzYW1lWERhdGEuZm9yRWFjaChmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICAgICAgICAkJC5tYWluXHJcbiAgICAgICAgICAgICAgICAgICAgICAuc2VsZWN0QWxsKCcuJyArIENMQVNTLnNoYXBlcyArICQkLmdldFRhcmdldFNlbGVjdG9yU3VmZml4KGQuaWQpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgLnNlbGVjdEFsbCgnLicgKyBDTEFTUy5zaGFwZSArICctJyArIGQuaW5kZXgpXHJcbiAgICAgICAgICAgICAgICAgICAgICAuZWFjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uZmlnLmRhdGFfc2VsZWN0aW9uX2dyb3VwZWQgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAkJC5pc1dpdGhpblNoYXBlKHRoaXMsIGQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJCQudG9nZ2xlU2hhcGUodGhpcywgZCwgZC5pbmRleCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIC8vIGNhbGwgZGF0YV9vbmNsaWNrIG9uIHRoZSBjbG9zZXN0IGRhdGEgcG9pbnRcclxuICAgICAgICAgICAgICBpZiAoY2xvc2VzdCkge1xyXG4gICAgICAgICAgICAgICAgICB2YXIgc2hhcGUgPSAkJC5tYWluXHJcbiAgICAgICAgICAgICAgICAgICAgICAuc2VsZWN0QWxsKCcuJyArIENMQVNTLnNoYXBlcyArICQkLmdldFRhcmdldFNlbGVjdG9yU3VmZml4KGNsb3Nlc3QuaWQpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgLnNlbGVjdCgnLicgKyBDTEFTUy5zaGFwZSArICctJyArIGNsb3Nlc3QuaW5kZXgpO1xyXG4gICAgICAgICAgICAgICAgICBjb25maWcuZGF0YV9vbmNsaWNrLmNhbGwoJCQuYXBpLCBjbG9zZXN0LCBzaGFwZS5ub2RlKCkpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIDogbnVsbClcclxuICAgICAgICAgIC5jYWxsKGNvbmZpZy5pbnRlcmFjdGlvbl9lbmFibGVkICYmIGNvbmZpZy5kYXRhX3NlbGVjdGlvbl9kcmFnZ2FibGUgJiYgJCQuZHJhZ1xyXG4gICAgICAgICAgPyBkM1xyXG4gICAgICAgICAgICAgIC5kcmFnKClcclxuICAgICAgICAgICAgICAub24oJ2RyYWcnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgJCQuZHJhZyhkMy5tb3VzZSh0aGlzKSk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgIC5vbignc3RhcnQnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgJCQuZHJhZ3N0YXJ0KGQzLm1vdXNlKHRoaXMpKTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgLm9uKCdlbmQnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgJCQuZHJhZ2VuZCgpO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIDogZnVuY3Rpb24gKCkgeyB9KTtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmdldE1vdXNlUG9zaXRpb24gPSBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzO1xyXG4gICAgICByZXR1cm4gWyQkLngoZGF0YS54KSwgJCQuZ2V0WVNjYWxlKGRhdGEuaWQpKGRhdGEudmFsdWUpXTtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmRpc3BhdGNoRXZlbnQgPSBmdW5jdGlvbiAodHlwZSwgbW91c2UpIHtcclxuICAgICAgdmFyICQkID0gdGhpcywgc2VsZWN0b3IgPSAnLicgKyBDTEFTUy5ldmVudFJlY3QsIGV2ZW50UmVjdCA9ICQkLm1haW4uc2VsZWN0KHNlbGVjdG9yKS5ub2RlKCksIGJveCA9IGV2ZW50UmVjdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSwgeCA9IGJveC5sZWZ0ICsgKG1vdXNlID8gbW91c2VbMF0gOiAwKSwgeSA9IGJveC50b3AgKyAobW91c2UgPyBtb3VzZVsxXSA6IDApLCBldmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdNb3VzZUV2ZW50cycpO1xyXG4gICAgICBldmVudC5pbml0TW91c2VFdmVudCh0eXBlLCB0cnVlLCB0cnVlLCB3aW5kb3csIDAsIHgsIHksIHgsIHksIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAwLCBudWxsKTtcclxuICAgICAgZXZlbnRSZWN0LmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xyXG4gIH07XG5cbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuaW5pdExlZ2VuZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgdmFyICQkID0gdGhpcztcclxuICAgICAgJCQubGVnZW5kSXRlbVRleHRCb3ggPSB7fTtcclxuICAgICAgJCQubGVnZW5kSGFzUmVuZGVyZWQgPSBmYWxzZTtcclxuICAgICAgJCQubGVnZW5kID0gJCQuc3ZnLmFwcGVuZCgnZycpLmF0dHIoJ3RyYW5zZm9ybScsICQkLmdldFRyYW5zbGF0ZSgnbGVnZW5kJykpO1xyXG4gICAgICBpZiAoISQkLmNvbmZpZy5sZWdlbmRfc2hvdykge1xyXG4gICAgICAgICAgJCQubGVnZW5kLnN0eWxlKCd2aXNpYmlsaXR5JywgJ2hpZGRlbicpO1xyXG4gICAgICAgICAgJCQuaGlkZGVuTGVnZW5kSWRzID0gJCQubWFwVG9JZHMoJCQuZGF0YS50YXJnZXRzKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICAvLyBNRU1POiBjYWxsIGhlcmUgdG8gdXBkYXRlIGxlZ2VuZCBib3ggYW5kIHRyYW5sYXRlIGZvciBhbGxcclxuICAgICAgLy8gTUVNTzogdHJhbnNsYXRlIHdpbGwgYmUgdXBkYXRlZCBieSB0aGlzLCBzbyB0cmFuc2Zvcm0gbm90IG5lZWRlZCBpbiB1cGRhdGVMZWdlbmQoKVxyXG4gICAgICAkJC51cGRhdGVMZWdlbmRXaXRoRGVmYXVsdHMoKTtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLnVwZGF0ZUxlZ2VuZFdpdGhEZWZhdWx0cyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgdmFyICQkID0gdGhpcztcclxuICAgICAgJCQudXBkYXRlTGVnZW5kKCQkLm1hcFRvSWRzKCQkLmRhdGEudGFyZ2V0cyksIHtcclxuICAgICAgICAgIHdpdGhUcmFuc2Zvcm06IGZhbHNlLFxyXG4gICAgICAgICAgd2l0aFRyYW5zaXRpb25Gb3JUcmFuc2Zvcm06IGZhbHNlLFxyXG4gICAgICAgICAgd2l0aFRyYW5zaXRpb246IGZhbHNlXHJcbiAgICAgIH0pO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUudXBkYXRlU2l6ZUZvckxlZ2VuZCA9IGZ1bmN0aW9uIChsZWdlbmRIZWlnaHQsIGxlZ2VuZFdpZHRoKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXMsIGNvbmZpZyA9ICQkLmNvbmZpZywgaW5zZXRMZWdlbmRQb3NpdGlvbiA9IHtcclxuICAgICAgICAgIHRvcDogJCQuaXNMZWdlbmRUb3BcclxuICAgICAgICAgICAgICA/ICQkLmdldEN1cnJlbnRQYWRkaW5nVG9wKCkgKyBjb25maWcubGVnZW5kX2luc2V0X3kgKyA1LjVcclxuICAgICAgICAgICAgICA6ICQkLmN1cnJlbnRIZWlnaHQgLVxyXG4gICAgICAgICAgICAgICAgICBsZWdlbmRIZWlnaHQgLVxyXG4gICAgICAgICAgICAgICAgICAkJC5nZXRDdXJyZW50UGFkZGluZ0JvdHRvbSgpIC1cclxuICAgICAgICAgICAgICAgICAgY29uZmlnLmxlZ2VuZF9pbnNldF95LFxyXG4gICAgICAgICAgbGVmdDogJCQuaXNMZWdlbmRMZWZ0XHJcbiAgICAgICAgICAgICAgPyAkJC5nZXRDdXJyZW50UGFkZGluZ0xlZnQoKSArIGNvbmZpZy5sZWdlbmRfaW5zZXRfeCArIDAuNVxyXG4gICAgICAgICAgICAgIDogJCQuY3VycmVudFdpZHRoIC1cclxuICAgICAgICAgICAgICAgICAgbGVnZW5kV2lkdGggLVxyXG4gICAgICAgICAgICAgICAgICAkJC5nZXRDdXJyZW50UGFkZGluZ1JpZ2h0KCkgLVxyXG4gICAgICAgICAgICAgICAgICBjb25maWcubGVnZW5kX2luc2V0X3ggK1xyXG4gICAgICAgICAgICAgICAgICAwLjVcclxuICAgICAgfTtcclxuICAgICAgJCQubWFyZ2luMyA9IHtcclxuICAgICAgICAgIHRvcDogJCQuaXNMZWdlbmRSaWdodFxyXG4gICAgICAgICAgICAgID8gMFxyXG4gICAgICAgICAgICAgIDogJCQuaXNMZWdlbmRJbnNldFxyXG4gICAgICAgICAgICAgICAgICA/IGluc2V0TGVnZW5kUG9zaXRpb24udG9wXHJcbiAgICAgICAgICAgICAgICAgIDogJCQuY3VycmVudEhlaWdodCAtIGxlZ2VuZEhlaWdodCxcclxuICAgICAgICAgIHJpZ2h0OiBOYU4sXHJcbiAgICAgICAgICBib3R0b206IDAsXHJcbiAgICAgICAgICBsZWZ0OiAkJC5pc0xlZ2VuZFJpZ2h0XHJcbiAgICAgICAgICAgICAgPyAkJC5jdXJyZW50V2lkdGggLSBsZWdlbmRXaWR0aFxyXG4gICAgICAgICAgICAgIDogJCQuaXNMZWdlbmRJbnNldFxyXG4gICAgICAgICAgICAgICAgICA/IGluc2V0TGVnZW5kUG9zaXRpb24ubGVmdFxyXG4gICAgICAgICAgICAgICAgICA6IDBcclxuICAgICAgfTtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLnRyYW5zZm9ybUxlZ2VuZCA9IGZ1bmN0aW9uICh3aXRoVHJhbnNpdGlvbikge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzO1xyXG4gICAgICAod2l0aFRyYW5zaXRpb24gPyAkJC5sZWdlbmQudHJhbnNpdGlvbigpIDogJCQubGVnZW5kKS5hdHRyKCd0cmFuc2Zvcm0nLCAkJC5nZXRUcmFuc2xhdGUoJ2xlZ2VuZCcpKTtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLnVwZGF0ZUxlZ2VuZFN0ZXAgPSBmdW5jdGlvbiAoc3RlcCkge1xyXG4gICAgICB0aGlzLmxlZ2VuZFN0ZXAgPSBzdGVwO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUudXBkYXRlTGVnZW5kSXRlbVdpZHRoID0gZnVuY3Rpb24gKHcpIHtcclxuICAgICAgdGhpcy5sZWdlbmRJdGVtV2lkdGggPSB3O1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUudXBkYXRlTGVnZW5kSXRlbUhlaWdodCA9IGZ1bmN0aW9uIChoKSB7XHJcbiAgICAgIHRoaXMubGVnZW5kSXRlbUhlaWdodCA9IGg7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5nZXRMZWdlbmRXaWR0aCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgdmFyICQkID0gdGhpcztcclxuICAgICAgcmV0dXJuICQkLmNvbmZpZy5sZWdlbmRfc2hvd1xyXG4gICAgICAgICAgPyAkJC5pc0xlZ2VuZFJpZ2h0IHx8ICQkLmlzTGVnZW5kSW5zZXRcclxuICAgICAgICAgICAgICA/ICQkLmxlZ2VuZEl0ZW1XaWR0aCAqICgkJC5sZWdlbmRTdGVwICsgMSlcclxuICAgICAgICAgICAgICA6ICQkLmN1cnJlbnRXaWR0aFxyXG4gICAgICAgICAgOiAwO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuZ2V0TGVnZW5kSGVpZ2h0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzLCBoID0gMDtcclxuICAgICAgaWYgKCQkLmNvbmZpZy5sZWdlbmRfc2hvdykge1xyXG4gICAgICAgICAgaWYgKCQkLmlzTGVnZW5kUmlnaHQpIHtcclxuICAgICAgICAgICAgICBoID0gJCQuY3VycmVudEhlaWdodDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIGggPSBNYXRoLm1heCgyMCwgJCQubGVnZW5kSXRlbUhlaWdodCkgKiAoJCQubGVnZW5kU3RlcCArIDEpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBoO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUub3BhY2l0eUZvckxlZ2VuZCA9IGZ1bmN0aW9uIChsZWdlbmRJdGVtKSB7XHJcbiAgICAgIHJldHVybiBsZWdlbmRJdGVtLmNsYXNzZWQoQ0xBU1MubGVnZW5kSXRlbUhpZGRlbikgPyBudWxsIDogMTtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLm9wYWNpdHlGb3JVbmZvY3VzZWRMZWdlbmQgPSBmdW5jdGlvbiAobGVnZW5kSXRlbSkge1xyXG4gICAgICByZXR1cm4gbGVnZW5kSXRlbS5jbGFzc2VkKENMQVNTLmxlZ2VuZEl0ZW1IaWRkZW4pID8gbnVsbCA6IDAuMztcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLnRvZ2dsZUZvY3VzTGVnZW5kID0gZnVuY3Rpb24gKHRhcmdldElkcywgZm9jdXMpIHtcclxuICAgICAgdmFyICQkID0gdGhpcztcclxuICAgICAgdGFyZ2V0SWRzID0gJCQubWFwVG9UYXJnZXRJZHModGFyZ2V0SWRzKTtcclxuICAgICAgJCQubGVnZW5kXHJcbiAgICAgICAgICAuc2VsZWN0QWxsKCcuJyArIENMQVNTLmxlZ2VuZEl0ZW0pXHJcbiAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uIChpZCkge1xyXG4gICAgICAgICAgcmV0dXJuIHRhcmdldElkcy5pbmRleE9mKGlkKSA+PSAwO1xyXG4gICAgICB9KVxyXG4gICAgICAgICAgLmNsYXNzZWQoQ0xBU1MubGVnZW5kSXRlbUZvY3VzZWQsIGZvY3VzKVxyXG4gICAgICAgICAgLnRyYW5zaXRpb24oKVxyXG4gICAgICAgICAgLmR1cmF0aW9uKDEwMClcclxuICAgICAgICAgIC5zdHlsZSgnb3BhY2l0eScsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgIHZhciBvcGFjaXR5ID0gZm9jdXMgPyAkJC5vcGFjaXR5Rm9yTGVnZW5kIDogJCQub3BhY2l0eUZvclVuZm9jdXNlZExlZ2VuZDtcclxuICAgICAgICAgIHJldHVybiBvcGFjaXR5LmNhbGwoJCQsICQkLmQzLnNlbGVjdCh0aGlzKSk7XHJcbiAgICAgIH0pO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUucmV2ZXJ0TGVnZW5kID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzLCBkMyA9ICQkLmQzO1xyXG4gICAgICAkJC5sZWdlbmRcclxuICAgICAgICAgIC5zZWxlY3RBbGwoJy4nICsgQ0xBU1MubGVnZW5kSXRlbSlcclxuICAgICAgICAgIC5jbGFzc2VkKENMQVNTLmxlZ2VuZEl0ZW1Gb2N1c2VkLCBmYWxzZSlcclxuICAgICAgICAgIC50cmFuc2l0aW9uKClcclxuICAgICAgICAgIC5kdXJhdGlvbigxMDApXHJcbiAgICAgICAgICAuc3R5bGUoJ29wYWNpdHknLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICByZXR1cm4gJCQub3BhY2l0eUZvckxlZ2VuZChkMy5zZWxlY3QodGhpcykpO1xyXG4gICAgICB9KTtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLnNob3dMZWdlbmQgPSBmdW5jdGlvbiAodGFyZ2V0SWRzKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXMsIGNvbmZpZyA9ICQkLmNvbmZpZztcclxuICAgICAgaWYgKCFjb25maWcubGVnZW5kX3Nob3cpIHtcclxuICAgICAgICAgIGNvbmZpZy5sZWdlbmRfc2hvdyA9IHRydWU7XHJcbiAgICAgICAgICAkJC5sZWdlbmQuc3R5bGUoJ3Zpc2liaWxpdHknLCAndmlzaWJsZScpO1xyXG4gICAgICAgICAgaWYgKCEkJC5sZWdlbmRIYXNSZW5kZXJlZCkge1xyXG4gICAgICAgICAgICAgICQkLnVwZGF0ZUxlZ2VuZFdpdGhEZWZhdWx0cygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgICQkLnJlbW92ZUhpZGRlbkxlZ2VuZElkcyh0YXJnZXRJZHMpO1xyXG4gICAgICAkJC5sZWdlbmRcclxuICAgICAgICAgIC5zZWxlY3RBbGwoJCQuc2VsZWN0b3JMZWdlbmRzKHRhcmdldElkcykpXHJcbiAgICAgICAgICAuc3R5bGUoJ3Zpc2liaWxpdHknLCAndmlzaWJsZScpXHJcbiAgICAgICAgICAudHJhbnNpdGlvbigpXHJcbiAgICAgICAgICAuc3R5bGUoJ29wYWNpdHknLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICByZXR1cm4gJCQub3BhY2l0eUZvckxlZ2VuZCgkJC5kMy5zZWxlY3QodGhpcykpO1xyXG4gICAgICB9KTtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmhpZGVMZWdlbmQgPSBmdW5jdGlvbiAodGFyZ2V0SWRzKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXMsIGNvbmZpZyA9ICQkLmNvbmZpZztcclxuICAgICAgaWYgKGNvbmZpZy5sZWdlbmRfc2hvdyAmJiBpc0VtcHR5KHRhcmdldElkcykpIHtcclxuICAgICAgICAgIGNvbmZpZy5sZWdlbmRfc2hvdyA9IGZhbHNlO1xyXG4gICAgICAgICAgJCQubGVnZW5kLnN0eWxlKCd2aXNpYmlsaXR5JywgJ2hpZGRlbicpO1xyXG4gICAgICB9XHJcbiAgICAgICQkLmFkZEhpZGRlbkxlZ2VuZElkcyh0YXJnZXRJZHMpO1xyXG4gICAgICAkJC5sZWdlbmRcclxuICAgICAgICAgIC5zZWxlY3RBbGwoJCQuc2VsZWN0b3JMZWdlbmRzKHRhcmdldElkcykpXHJcbiAgICAgICAgICAuc3R5bGUoJ29wYWNpdHknLCAwKVxyXG4gICAgICAgICAgLnN0eWxlKCd2aXNpYmlsaXR5JywgJ2hpZGRlbicpO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuY2xlYXJMZWdlbmRJdGVtVGV4dEJveENhY2hlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICB0aGlzLmxlZ2VuZEl0ZW1UZXh0Qm94ID0ge307XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS51cGRhdGVMZWdlbmQgPSBmdW5jdGlvbiAodGFyZ2V0SWRzLCBvcHRpb25zLCB0cmFuc2l0aW9ucykge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzLCBjb25maWcgPSAkJC5jb25maWc7XHJcbiAgICAgIHZhciB4Rm9yTGVnZW5kLCB4Rm9yTGVnZW5kVGV4dCwgeEZvckxlZ2VuZFJlY3QsIHlGb3JMZWdlbmQsIHlGb3JMZWdlbmRUZXh0LCB5Rm9yTGVnZW5kUmVjdCwgeDFGb3JMZWdlbmRUaWxlLCB4MkZvckxlZ2VuZFRpbGUsIHlGb3JMZWdlbmRUaWxlO1xyXG4gICAgICB2YXIgcGFkZGluZ1RvcCA9IDQsIHBhZGRpbmdSaWdodCA9IDEwLCBtYXhXaWR0aCA9IDAsIG1heEhlaWdodCA9IDAsIHBvc01pbiA9IDEwLCB0aWxlV2lkdGggPSBjb25maWcubGVnZW5kX2l0ZW1fdGlsZV93aWR0aCArIDU7XHJcbiAgICAgIHZhciBsLCB0b3RhbExlbmd0aCA9IDAsIG9mZnNldHMgPSB7fSwgd2lkdGhzID0ge30sIGhlaWdodHMgPSB7fSwgbWFyZ2lucyA9IFswXSwgc3RlcHMgPSB7fSwgc3RlcCA9IDA7XHJcbiAgICAgIHZhciB3aXRoVHJhbnNpdGlvbiwgd2l0aFRyYW5zaXRpb25Gb3JUcmFuc2Zvcm07XHJcbiAgICAgIHZhciB0ZXh0cywgcmVjdHMsIHRpbGVzLCBiYWNrZ3JvdW5kO1xyXG4gICAgICAvLyBTa2lwIGVsZW1lbnRzIHdoZW4gdGhlaXIgbmFtZSBpcyBzZXQgdG8gbnVsbFxyXG4gICAgICB0YXJnZXRJZHMgPSB0YXJnZXRJZHMuZmlsdGVyKGZ1bmN0aW9uIChpZCkge1xyXG4gICAgICAgICAgcmV0dXJuICFpc0RlZmluZWQoY29uZmlnLmRhdGFfbmFtZXNbaWRdKSB8fCBjb25maWcuZGF0YV9uYW1lc1tpZF0gIT09IG51bGw7XHJcbiAgICAgIH0pO1xyXG4gICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcclxuICAgICAgd2l0aFRyYW5zaXRpb24gPSBnZXRPcHRpb24ob3B0aW9ucywgJ3dpdGhUcmFuc2l0aW9uJywgdHJ1ZSk7XHJcbiAgICAgIHdpdGhUcmFuc2l0aW9uRm9yVHJhbnNmb3JtID0gZ2V0T3B0aW9uKG9wdGlvbnMsICd3aXRoVHJhbnNpdGlvbkZvclRyYW5zZm9ybScsIHRydWUpO1xyXG4gICAgICBmdW5jdGlvbiBnZXRUZXh0Qm94KHRleHRFbGVtZW50LCBpZCkge1xyXG4gICAgICAgICAgaWYgKCEkJC5sZWdlbmRJdGVtVGV4dEJveFtpZF0pIHtcclxuICAgICAgICAgICAgICAkJC5sZWdlbmRJdGVtVGV4dEJveFtpZF0gPSAkJC5nZXRUZXh0UmVjdCh0ZXh0RWxlbWVudC50ZXh0Q29udGVudCwgQ0xBU1MubGVnZW5kSXRlbSwgdGV4dEVsZW1lbnQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuICQkLmxlZ2VuZEl0ZW1UZXh0Qm94W2lkXTtcclxuICAgICAgfVxyXG4gICAgICBmdW5jdGlvbiB1cGRhdGVQb3NpdGlvbnModGV4dEVsZW1lbnQsIGlkLCBpbmRleCkge1xyXG4gICAgICAgICAgdmFyIHJlc2V0ID0gaW5kZXggPT09IDAsIGlzTGFzdCA9IGluZGV4ID09PSB0YXJnZXRJZHMubGVuZ3RoIC0gMSwgYm94ID0gZ2V0VGV4dEJveCh0ZXh0RWxlbWVudCwgaWQpLCBpdGVtV2lkdGggPSBib3gud2lkdGggK1xyXG4gICAgICAgICAgICAgIHRpbGVXaWR0aCArXHJcbiAgICAgICAgICAgICAgKGlzTGFzdCAmJiAhKCQkLmlzTGVnZW5kUmlnaHQgfHwgJCQuaXNMZWdlbmRJbnNldCkgPyAwIDogcGFkZGluZ1JpZ2h0KSArXHJcbiAgICAgICAgICAgICAgY29uZmlnLmxlZ2VuZF9wYWRkaW5nLCBpdGVtSGVpZ2h0ID0gYm94LmhlaWdodCArIHBhZGRpbmdUb3AsIGl0ZW1MZW5ndGggPSAkJC5pc0xlZ2VuZFJpZ2h0IHx8ICQkLmlzTGVnZW5kSW5zZXQgPyBpdGVtSGVpZ2h0IDogaXRlbVdpZHRoLCBhcmVhTGVuZ3RoID0gJCQuaXNMZWdlbmRSaWdodCB8fCAkJC5pc0xlZ2VuZEluc2V0XHJcbiAgICAgICAgICAgICAgPyAkJC5nZXRMZWdlbmRIZWlnaHQoKVxyXG4gICAgICAgICAgICAgIDogJCQuZ2V0TGVnZW5kV2lkdGgoKSwgbWFyZ2luLCBtYXhMZW5ndGg7XHJcbiAgICAgICAgICAvLyBNRU1POiBjYXJlIGFib3V0IGNvbmRpZmlvbiBvZiBzdGVwLCB0b3RhbExlbmd0aFxyXG4gICAgICAgICAgZnVuY3Rpb24gdXBkYXRlVmFsdWVzKGlkLCB3aXRob3V0U3RlcCkge1xyXG4gICAgICAgICAgICAgIGlmICghd2l0aG91dFN0ZXApIHtcclxuICAgICAgICAgICAgICAgICAgbWFyZ2luID0gKGFyZWFMZW5ndGggLSB0b3RhbExlbmd0aCAtIGl0ZW1MZW5ndGgpIC8gMjtcclxuICAgICAgICAgICAgICAgICAgaWYgKG1hcmdpbiA8IHBvc01pbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgbWFyZ2luID0gKGFyZWFMZW5ndGggLSBpdGVtTGVuZ3RoKSAvIDI7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0b3RhbExlbmd0aCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICBzdGVwKys7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgc3RlcHNbaWRdID0gc3RlcDtcclxuICAgICAgICAgICAgICBtYXJnaW5zW3N0ZXBdID0gJCQuaXNMZWdlbmRJbnNldCA/IDEwIDogbWFyZ2luO1xyXG4gICAgICAgICAgICAgIG9mZnNldHNbaWRdID0gdG90YWxMZW5ndGg7XHJcbiAgICAgICAgICAgICAgdG90YWxMZW5ndGggKz0gaXRlbUxlbmd0aDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChyZXNldCkge1xyXG4gICAgICAgICAgICAgIHRvdGFsTGVuZ3RoID0gMDtcclxuICAgICAgICAgICAgICBzdGVwID0gMDtcclxuICAgICAgICAgICAgICBtYXhXaWR0aCA9IDA7XHJcbiAgICAgICAgICAgICAgbWF4SGVpZ2h0ID0gMDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChjb25maWcubGVnZW5kX3Nob3cgJiYgISQkLmlzTGVnZW5kVG9TaG93KGlkKSkge1xyXG4gICAgICAgICAgICAgIHdpZHRoc1tpZF0gPSBoZWlnaHRzW2lkXSA9IHN0ZXBzW2lkXSA9IG9mZnNldHNbaWRdID0gMDtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB3aWR0aHNbaWRdID0gaXRlbVdpZHRoO1xyXG4gICAgICAgICAgaGVpZ2h0c1tpZF0gPSBpdGVtSGVpZ2h0O1xyXG4gICAgICAgICAgaWYgKCFtYXhXaWR0aCB8fCBpdGVtV2lkdGggPj0gbWF4V2lkdGgpIHtcclxuICAgICAgICAgICAgICBtYXhXaWR0aCA9IGl0ZW1XaWR0aDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICghbWF4SGVpZ2h0IHx8IGl0ZW1IZWlnaHQgPj0gbWF4SGVpZ2h0KSB7XHJcbiAgICAgICAgICAgICAgbWF4SGVpZ2h0ID0gaXRlbUhlaWdodDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIG1heExlbmd0aCA9ICQkLmlzTGVnZW5kUmlnaHQgfHwgJCQuaXNMZWdlbmRJbnNldCA/IG1heEhlaWdodCA6IG1heFdpZHRoO1xyXG4gICAgICAgICAgaWYgKGNvbmZpZy5sZWdlbmRfZXF1YWxseSkge1xyXG4gICAgICAgICAgICAgIE9iamVjdC5rZXlzKHdpZHRocykuZm9yRWFjaChmdW5jdGlvbiAoaWQpIHtcclxuICAgICAgICAgICAgICAgICAgd2lkdGhzW2lkXSA9IG1heFdpZHRoO1xyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIE9iamVjdC5rZXlzKGhlaWdodHMpLmZvckVhY2goZnVuY3Rpb24gKGlkKSB7XHJcbiAgICAgICAgICAgICAgICAgIGhlaWdodHNbaWRdID0gbWF4SGVpZ2h0O1xyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIG1hcmdpbiA9IChhcmVhTGVuZ3RoIC0gbWF4TGVuZ3RoICogdGFyZ2V0SWRzLmxlbmd0aCkgLyAyO1xyXG4gICAgICAgICAgICAgIGlmIChtYXJnaW4gPCBwb3NNaW4pIHtcclxuICAgICAgICAgICAgICAgICAgdG90YWxMZW5ndGggPSAwO1xyXG4gICAgICAgICAgICAgICAgICBzdGVwID0gMDtcclxuICAgICAgICAgICAgICAgICAgdGFyZ2V0SWRzLmZvckVhY2goZnVuY3Rpb24gKGlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVWYWx1ZXMoaWQpO1xyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIHVwZGF0ZVZhbHVlcyhpZCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgdXBkYXRlVmFsdWVzKGlkKTtcclxuICAgICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoJCQuaXNMZWdlbmRJbnNldCkge1xyXG4gICAgICAgICAgc3RlcCA9IGNvbmZpZy5sZWdlbmRfaW5zZXRfc3RlcFxyXG4gICAgICAgICAgICAgID8gY29uZmlnLmxlZ2VuZF9pbnNldF9zdGVwXHJcbiAgICAgICAgICAgICAgOiB0YXJnZXRJZHMubGVuZ3RoO1xyXG4gICAgICAgICAgJCQudXBkYXRlTGVnZW5kU3RlcChzdGVwKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoJCQuaXNMZWdlbmRSaWdodCkge1xyXG4gICAgICAgICAgeEZvckxlZ2VuZCA9IGZ1bmN0aW9uIChpZCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBtYXhXaWR0aCAqIHN0ZXBzW2lkXTtcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICB5Rm9yTGVnZW5kID0gZnVuY3Rpb24gKGlkKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIG1hcmdpbnNbc3RlcHNbaWRdXSArIG9mZnNldHNbaWRdO1xyXG4gICAgICAgICAgfTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICgkJC5pc0xlZ2VuZEluc2V0KSB7XHJcbiAgICAgICAgICB4Rm9yTGVnZW5kID0gZnVuY3Rpb24gKGlkKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIG1heFdpZHRoICogc3RlcHNbaWRdICsgMTA7XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgeUZvckxlZ2VuZCA9IGZ1bmN0aW9uIChpZCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBtYXJnaW5zW3N0ZXBzW2lkXV0gKyBvZmZzZXRzW2lkXTtcclxuICAgICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB4Rm9yTGVnZW5kID0gZnVuY3Rpb24gKGlkKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIG1hcmdpbnNbc3RlcHNbaWRdXSArIG9mZnNldHNbaWRdO1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHlGb3JMZWdlbmQgPSBmdW5jdGlvbiAoaWQpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gbWF4SGVpZ2h0ICogc3RlcHNbaWRdO1xyXG4gICAgICAgICAgfTtcclxuICAgICAgfVxyXG4gICAgICB4Rm9yTGVnZW5kVGV4dCA9IGZ1bmN0aW9uIChpZCwgaSkge1xyXG4gICAgICAgICAgcmV0dXJuIHhGb3JMZWdlbmQoaWQsIGkpICsgNCArIGNvbmZpZy5sZWdlbmRfaXRlbV90aWxlX3dpZHRoO1xyXG4gICAgICB9O1xyXG4gICAgICB5Rm9yTGVnZW5kVGV4dCA9IGZ1bmN0aW9uIChpZCwgaSkge1xyXG4gICAgICAgICAgcmV0dXJuIHlGb3JMZWdlbmQoaWQsIGkpICsgOTtcclxuICAgICAgfTtcclxuICAgICAgeEZvckxlZ2VuZFJlY3QgPSBmdW5jdGlvbiAoaWQsIGkpIHtcclxuICAgICAgICAgIHJldHVybiB4Rm9yTGVnZW5kKGlkLCBpKTtcclxuICAgICAgfTtcclxuICAgICAgeUZvckxlZ2VuZFJlY3QgPSBmdW5jdGlvbiAoaWQsIGkpIHtcclxuICAgICAgICAgIHJldHVybiB5Rm9yTGVnZW5kKGlkLCBpKSAtIDU7XHJcbiAgICAgIH07XHJcbiAgICAgIHgxRm9yTGVnZW5kVGlsZSA9IGZ1bmN0aW9uIChpZCwgaSkge1xyXG4gICAgICAgICAgcmV0dXJuIHhGb3JMZWdlbmQoaWQsIGkpIC0gMjtcclxuICAgICAgfTtcclxuICAgICAgeDJGb3JMZWdlbmRUaWxlID0gZnVuY3Rpb24gKGlkLCBpKSB7XHJcbiAgICAgICAgICByZXR1cm4geEZvckxlZ2VuZChpZCwgaSkgLSAyICsgY29uZmlnLmxlZ2VuZF9pdGVtX3RpbGVfd2lkdGg7XHJcbiAgICAgIH07XHJcbiAgICAgIHlGb3JMZWdlbmRUaWxlID0gZnVuY3Rpb24gKGlkLCBpKSB7XHJcbiAgICAgICAgICByZXR1cm4geUZvckxlZ2VuZChpZCwgaSkgKyA0O1xyXG4gICAgICB9O1xyXG4gICAgICAvLyBEZWZpbmUgZyBmb3IgbGVnZW5kIGFyZWFcclxuICAgICAgbCA9ICQkLmxlZ2VuZFxyXG4gICAgICAgICAgLnNlbGVjdEFsbCgnLicgKyBDTEFTUy5sZWdlbmRJdGVtKVxyXG4gICAgICAgICAgLmRhdGEodGFyZ2V0SWRzKVxyXG4gICAgICAgICAgLmVudGVyKClcclxuICAgICAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAgICAgLmF0dHIoJ2NsYXNzJywgZnVuY3Rpb24gKGlkKSB7XHJcbiAgICAgICAgICByZXR1cm4gJCQuZ2VuZXJhdGVDbGFzcyhDTEFTUy5sZWdlbmRJdGVtLCBpZCk7XHJcbiAgICAgIH0pXHJcbiAgICAgICAgICAuc3R5bGUoJ3Zpc2liaWxpdHknLCBmdW5jdGlvbiAoaWQpIHtcclxuICAgICAgICAgIHJldHVybiAkJC5pc0xlZ2VuZFRvU2hvdyhpZCkgPyAndmlzaWJsZScgOiAnaGlkZGVuJztcclxuICAgICAgfSlcclxuICAgICAgICAgIC5zdHlsZSgnY3Vyc29yJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgcmV0dXJuIGNvbmZpZy5pbnRlcmFjdGlvbl9lbmFibGVkID8gJ3BvaW50ZXInIDogJ2F1dG8nO1xyXG4gICAgICB9KVxyXG4gICAgICAgICAgLm9uKCdjbGljaycsIGNvbmZpZy5pbnRlcmFjdGlvbl9lbmFibGVkXHJcbiAgICAgICAgICA/IGZ1bmN0aW9uIChpZCkge1xyXG4gICAgICAgICAgICAgIGlmIChjb25maWcubGVnZW5kX2l0ZW1fb25jbGljaykge1xyXG4gICAgICAgICAgICAgICAgICBjb25maWcubGVnZW5kX2l0ZW1fb25jbGljay5jYWxsKCQkLCBpZCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoJCQuZDMuZXZlbnQuYWx0S2V5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAkJC5hcGkuaGlkZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgJCQuYXBpLnNob3coaWQpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgJCQuYXBpLnRvZ2dsZShpZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAkJC5pc1RhcmdldFRvU2hvdyhpZCkgPyAkJC5hcGkuZm9jdXMoaWQpIDogJCQuYXBpLnJldmVydCgpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgOiBudWxsKVxyXG4gICAgICAgICAgLm9uKCdtb3VzZW92ZXInLCBjb25maWcuaW50ZXJhY3Rpb25fZW5hYmxlZFxyXG4gICAgICAgICAgPyBmdW5jdGlvbiAoaWQpIHtcclxuICAgICAgICAgICAgICBpZiAoY29uZmlnLmxlZ2VuZF9pdGVtX29ubW91c2VvdmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbmZpZy5sZWdlbmRfaXRlbV9vbm1vdXNlb3Zlci5jYWxsKCQkLCBpZCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAkJC5kMy5zZWxlY3QodGhpcykuY2xhc3NlZChDTEFTUy5sZWdlbmRJdGVtRm9jdXNlZCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgIGlmICghJCQudHJhbnNpdGluZyAmJiAkJC5pc1RhcmdldFRvU2hvdyhpZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICQkLmFwaS5mb2N1cyhpZCk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICA6IG51bGwpXHJcbiAgICAgICAgICAub24oJ21vdXNlb3V0JywgY29uZmlnLmludGVyYWN0aW9uX2VuYWJsZWRcclxuICAgICAgICAgID8gZnVuY3Rpb24gKGlkKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGNvbmZpZy5sZWdlbmRfaXRlbV9vbm1vdXNlb3V0KSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbmZpZy5sZWdlbmRfaXRlbV9vbm1vdXNlb3V0LmNhbGwoJCQsIGlkKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICQkLmQzLnNlbGVjdCh0aGlzKS5jbGFzc2VkKENMQVNTLmxlZ2VuZEl0ZW1Gb2N1c2VkLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICQkLmFwaS5yZXZlcnQoKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICA6IG51bGwpO1xyXG4gICAgICBsLmFwcGVuZCgndGV4dCcpXHJcbiAgICAgICAgICAudGV4dChmdW5jdGlvbiAoaWQpIHtcclxuICAgICAgICAgIHJldHVybiBpc0RlZmluZWQoY29uZmlnLmRhdGFfbmFtZXNbaWRdKSA/IGNvbmZpZy5kYXRhX25hbWVzW2lkXSA6IGlkO1xyXG4gICAgICB9KVxyXG4gICAgICAgICAgLmVhY2goZnVuY3Rpb24gKGlkLCBpKSB7XHJcbiAgICAgICAgICB1cGRhdGVQb3NpdGlvbnModGhpcywgaWQsIGkpO1xyXG4gICAgICB9KVxyXG4gICAgICAgICAgLnN0eWxlKCdwb2ludGVyLWV2ZW50cycsICdub25lJylcclxuICAgICAgICAgIC5hdHRyKCd4JywgJCQuaXNMZWdlbmRSaWdodCB8fCAkJC5pc0xlZ2VuZEluc2V0ID8geEZvckxlZ2VuZFRleHQgOiAtMjAwKVxyXG4gICAgICAgICAgLmF0dHIoJ3knLCAkJC5pc0xlZ2VuZFJpZ2h0IHx8ICQkLmlzTGVnZW5kSW5zZXQgPyAtMjAwIDogeUZvckxlZ2VuZFRleHQpO1xyXG4gICAgICBsLmFwcGVuZCgncmVjdCcpXHJcbiAgICAgICAgICAuYXR0cignY2xhc3MnLCBDTEFTUy5sZWdlbmRJdGVtRXZlbnQpXHJcbiAgICAgICAgICAuc3R5bGUoJ2ZpbGwtb3BhY2l0eScsIDApXHJcbiAgICAgICAgICAuYXR0cigneCcsICQkLmlzTGVnZW5kUmlnaHQgfHwgJCQuaXNMZWdlbmRJbnNldCA/IHhGb3JMZWdlbmRSZWN0IDogLTIwMClcclxuICAgICAgICAgIC5hdHRyKCd5JywgJCQuaXNMZWdlbmRSaWdodCB8fCAkJC5pc0xlZ2VuZEluc2V0ID8gLTIwMCA6IHlGb3JMZWdlbmRSZWN0KTtcclxuICAgICAgbC5hcHBlbmQoJ2xpbmUnKVxyXG4gICAgICAgICAgLmF0dHIoJ2NsYXNzJywgQ0xBU1MubGVnZW5kSXRlbVRpbGUpXHJcbiAgICAgICAgICAuc3R5bGUoJ3N0cm9rZScsICQkLmNvbG9yKVxyXG4gICAgICAgICAgLnN0eWxlKCdwb2ludGVyLWV2ZW50cycsICdub25lJylcclxuICAgICAgICAgIC5hdHRyKCd4MScsICQkLmlzTGVnZW5kUmlnaHQgfHwgJCQuaXNMZWdlbmRJbnNldCA/IHgxRm9yTGVnZW5kVGlsZSA6IC0yMDApXHJcbiAgICAgICAgICAuYXR0cigneTEnLCAkJC5pc0xlZ2VuZFJpZ2h0IHx8ICQkLmlzTGVnZW5kSW5zZXQgPyAtMjAwIDogeUZvckxlZ2VuZFRpbGUpXHJcbiAgICAgICAgICAuYXR0cigneDInLCAkJC5pc0xlZ2VuZFJpZ2h0IHx8ICQkLmlzTGVnZW5kSW5zZXQgPyB4MkZvckxlZ2VuZFRpbGUgOiAtMjAwKVxyXG4gICAgICAgICAgLmF0dHIoJ3kyJywgJCQuaXNMZWdlbmRSaWdodCB8fCAkJC5pc0xlZ2VuZEluc2V0ID8gLTIwMCA6IHlGb3JMZWdlbmRUaWxlKVxyXG4gICAgICAgICAgLmF0dHIoJ3N0cm9rZS13aWR0aCcsIGNvbmZpZy5sZWdlbmRfaXRlbV90aWxlX2hlaWdodCk7XHJcbiAgICAgIC8vIFNldCBiYWNrZ3JvdW5kIGZvciBpbnNldCBsZWdlbmRcclxuICAgICAgYmFja2dyb3VuZCA9ICQkLmxlZ2VuZC5zZWxlY3QoJy4nICsgQ0xBU1MubGVnZW5kQmFja2dyb3VuZCArICcgcmVjdCcpO1xyXG4gICAgICBpZiAoJCQuaXNMZWdlbmRJbnNldCAmJiBtYXhXaWR0aCA+IDAgJiYgYmFja2dyb3VuZC5zaXplKCkgPT09IDApIHtcclxuICAgICAgICAgIGJhY2tncm91bmQgPSAkJC5sZWdlbmRcclxuICAgICAgICAgICAgICAuaW5zZXJ0KCdnJywgJy4nICsgQ0xBU1MubGVnZW5kSXRlbSlcclxuICAgICAgICAgICAgICAuYXR0cignY2xhc3MnLCBDTEFTUy5sZWdlbmRCYWNrZ3JvdW5kKVxyXG4gICAgICAgICAgICAgIC5hcHBlbmQoJ3JlY3QnKTtcclxuICAgICAgfVxyXG4gICAgICB0ZXh0cyA9ICQkLmxlZ2VuZFxyXG4gICAgICAgICAgLnNlbGVjdEFsbCgndGV4dCcpXHJcbiAgICAgICAgICAuZGF0YSh0YXJnZXRJZHMpXHJcbiAgICAgICAgICAudGV4dChmdW5jdGlvbiAoaWQpIHtcclxuICAgICAgICAgIHJldHVybiBpc0RlZmluZWQoY29uZmlnLmRhdGFfbmFtZXNbaWRdKSA/IGNvbmZpZy5kYXRhX25hbWVzW2lkXSA6IGlkO1xyXG4gICAgICB9KSAvLyBNRU1POiBuZWVkZWQgZm9yIHVwZGF0ZVxyXG4gICAgICAgICAgLmVhY2goZnVuY3Rpb24gKGlkLCBpKSB7XHJcbiAgICAgICAgICB1cGRhdGVQb3NpdGlvbnModGhpcywgaWQsIGkpO1xyXG4gICAgICB9KTtcclxuICAgICAgKHdpdGhUcmFuc2l0aW9uID8gdGV4dHMudHJhbnNpdGlvbigpIDogdGV4dHMpXHJcbiAgICAgICAgICAuYXR0cigneCcsIHhGb3JMZWdlbmRUZXh0KVxyXG4gICAgICAgICAgLmF0dHIoJ3knLCB5Rm9yTGVnZW5kVGV4dCk7XHJcbiAgICAgIHJlY3RzID0gJCQubGVnZW5kLnNlbGVjdEFsbCgncmVjdC4nICsgQ0xBU1MubGVnZW5kSXRlbUV2ZW50KS5kYXRhKHRhcmdldElkcyk7XHJcbiAgICAgICh3aXRoVHJhbnNpdGlvbiA/IHJlY3RzLnRyYW5zaXRpb24oKSA6IHJlY3RzKVxyXG4gICAgICAgICAgLmF0dHIoJ3dpZHRoJywgZnVuY3Rpb24gKGlkKSB7XHJcbiAgICAgICAgICByZXR1cm4gd2lkdGhzW2lkXTtcclxuICAgICAgfSlcclxuICAgICAgICAgIC5hdHRyKCdoZWlnaHQnLCBmdW5jdGlvbiAoaWQpIHtcclxuICAgICAgICAgIHJldHVybiBoZWlnaHRzW2lkXTtcclxuICAgICAgfSlcclxuICAgICAgICAgIC5hdHRyKCd4JywgeEZvckxlZ2VuZFJlY3QpXHJcbiAgICAgICAgICAuYXR0cigneScsIHlGb3JMZWdlbmRSZWN0KTtcclxuICAgICAgdGlsZXMgPSAkJC5sZWdlbmQuc2VsZWN0QWxsKCdsaW5lLicgKyBDTEFTUy5sZWdlbmRJdGVtVGlsZSkuZGF0YSh0YXJnZXRJZHMpO1xyXG4gICAgICAod2l0aFRyYW5zaXRpb24gPyB0aWxlcy50cmFuc2l0aW9uKCkgOiB0aWxlcylcclxuICAgICAgICAgIC5zdHlsZSgnc3Ryb2tlJywgJCQubGV2ZWxDb2xvclxyXG4gICAgICAgICAgPyBmdW5jdGlvbiAoaWQpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gJCQubGV2ZWxDb2xvcigkJC5jYWNoZVtpZF0udmFsdWVzLnJlZHVjZShmdW5jdGlvbiAodG90YWwsIGl0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRvdGFsICsgaXRlbS52YWx1ZTtcclxuICAgICAgICAgICAgICB9LCAwKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICA6ICQkLmNvbG9yKVxyXG4gICAgICAgICAgLmF0dHIoJ3gxJywgeDFGb3JMZWdlbmRUaWxlKVxyXG4gICAgICAgICAgLmF0dHIoJ3kxJywgeUZvckxlZ2VuZFRpbGUpXHJcbiAgICAgICAgICAuYXR0cigneDInLCB4MkZvckxlZ2VuZFRpbGUpXHJcbiAgICAgICAgICAuYXR0cigneTInLCB5Rm9yTGVnZW5kVGlsZSk7XHJcbiAgICAgIGlmIChiYWNrZ3JvdW5kKSB7XHJcbiAgICAgICAgICAod2l0aFRyYW5zaXRpb24gPyBiYWNrZ3JvdW5kLnRyYW5zaXRpb24oKSA6IGJhY2tncm91bmQpXHJcbiAgICAgICAgICAgICAgLmF0dHIoJ2hlaWdodCcsICQkLmdldExlZ2VuZEhlaWdodCgpIC0gMTIpXHJcbiAgICAgICAgICAgICAgLmF0dHIoJ3dpZHRoJywgbWF4V2lkdGggKiAoc3RlcCArIDEpICsgMTApO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIHRvZ2dsZSBsZWdlbmQgc3RhdGVcclxuICAgICAgJCQubGVnZW5kXHJcbiAgICAgICAgICAuc2VsZWN0QWxsKCcuJyArIENMQVNTLmxlZ2VuZEl0ZW0pXHJcbiAgICAgICAgICAuY2xhc3NlZChDTEFTUy5sZWdlbmRJdGVtSGlkZGVuLCBmdW5jdGlvbiAoaWQpIHtcclxuICAgICAgICAgIHJldHVybiAhJCQuaXNUYXJnZXRUb1Nob3coaWQpO1xyXG4gICAgICB9KTtcclxuICAgICAgLy8gVXBkYXRlIGFsbCB0byByZWZsZWN0IGNoYW5nZSBvZiBsZWdlbmRcclxuICAgICAgJCQudXBkYXRlTGVnZW5kSXRlbVdpZHRoKG1heFdpZHRoKTtcclxuICAgICAgJCQudXBkYXRlTGVnZW5kSXRlbUhlaWdodChtYXhIZWlnaHQpO1xyXG4gICAgICAkJC51cGRhdGVMZWdlbmRTdGVwKHN0ZXApO1xyXG4gICAgICAvLyBVcGRhdGUgc2l6ZSBhbmQgc2NhbGVcclxuICAgICAgJCQudXBkYXRlU2l6ZXMoKTtcclxuICAgICAgJCQudXBkYXRlU2NhbGVzKCk7XHJcbiAgICAgICQkLnVwZGF0ZVN2Z1NpemUoKTtcclxuICAgICAgLy8gVXBkYXRlIGcgcG9zaXRpb25zXHJcbiAgICAgICQkLnRyYW5zZm9ybUFsbCh3aXRoVHJhbnNpdGlvbkZvclRyYW5zZm9ybSwgdHJhbnNpdGlvbnMpO1xyXG4gICAgICAkJC5sZWdlbmRIYXNSZW5kZXJlZCA9IHRydWU7XHJcbiAgfTtcblxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5pbml0UmVnaW9uID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzO1xyXG4gICAgICAkJC5yZWdpb24gPSAkJC5tYWluXHJcbiAgICAgICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgICAgIC5hdHRyKCdjbGlwLXBhdGgnLCAkJC5jbGlwUGF0aClcclxuICAgICAgICAgIC5hdHRyKCdjbGFzcycsIENMQVNTLnJlZ2lvbnMpO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUudXBkYXRlUmVnaW9uID0gZnVuY3Rpb24gKGR1cmF0aW9uKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXMsIGNvbmZpZyA9ICQkLmNvbmZpZztcclxuICAgICAgLy8gaGlkZSBpZiBhcmMgdHlwZVxyXG4gICAgICAkJC5yZWdpb24uc3R5bGUoJ3Zpc2liaWxpdHknLCAkJC5oYXNBcmNUeXBlKCkgPyAnaGlkZGVuJyA6ICd2aXNpYmxlJyk7XHJcbiAgICAgIHZhciBtYWluUmVnaW9uID0gJCQubWFpblxyXG4gICAgICAgICAgLnNlbGVjdCgnLicgKyBDTEFTUy5yZWdpb25zKVxyXG4gICAgICAgICAgLnNlbGVjdEFsbCgnLicgKyBDTEFTUy5yZWdpb24pXHJcbiAgICAgICAgICAuZGF0YShjb25maWcucmVnaW9ucyk7XHJcbiAgICAgIHZhciBnID0gbWFpblJlZ2lvbi5lbnRlcigpLmFwcGVuZCgnZycpO1xyXG4gICAgICBnLmFwcGVuZCgncmVjdCcpXHJcbiAgICAgICAgICAuYXR0cigneCcsICQkLnJlZ2lvblguYmluZCgkJCkpXHJcbiAgICAgICAgICAuYXR0cigneScsICQkLnJlZ2lvblkuYmluZCgkJCkpXHJcbiAgICAgICAgICAuYXR0cignd2lkdGgnLCAkJC5yZWdpb25XaWR0aC5iaW5kKCQkKSlcclxuICAgICAgICAgIC5hdHRyKCdoZWlnaHQnLCAkJC5yZWdpb25IZWlnaHQuYmluZCgkJCkpXHJcbiAgICAgICAgICAuc3R5bGUoJ2ZpbGwtb3BhY2l0eScsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICByZXR1cm4gaXNWYWx1ZShkLm9wYWNpdHkpID8gZC5vcGFjaXR5IDogMC4xO1xyXG4gICAgICB9KTtcclxuICAgICAgZy5hcHBlbmQoJ3RleHQnKS50ZXh0KCQkLmxhYmVsUmVnaW9uLmJpbmQoJCQpKTtcclxuICAgICAgJCQubWFpblJlZ2lvbiA9IGcubWVyZ2UobWFpblJlZ2lvbikuYXR0cignY2xhc3MnLCAkJC5jbGFzc1JlZ2lvbi5iaW5kKCQkKSk7XHJcbiAgICAgIG1haW5SZWdpb25cclxuICAgICAgICAgIC5leGl0KClcclxuICAgICAgICAgIC50cmFuc2l0aW9uKClcclxuICAgICAgICAgIC5kdXJhdGlvbihkdXJhdGlvbilcclxuICAgICAgICAgIC5zdHlsZSgnb3BhY2l0eScsIDApXHJcbiAgICAgICAgICAucmVtb3ZlKCk7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5yZWRyYXdSZWdpb24gPSBmdW5jdGlvbiAod2l0aFRyYW5zaXRpb24sIHRyYW5zaXRpb24pIHtcclxuICAgICAgdmFyICQkID0gdGhpcywgcmVnaW9ucyA9ICQkLm1haW5SZWdpb24sIHJlZ2lvbkxhYmVscyA9ICQkLm1haW5SZWdpb24uc2VsZWN0QWxsKCd0ZXh0Jyk7XHJcbiAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAod2l0aFRyYW5zaXRpb24gPyByZWdpb25zLnRyYW5zaXRpb24odHJhbnNpdGlvbikgOiByZWdpb25zKVxyXG4gICAgICAgICAgICAgIC5hdHRyKCd4JywgJCQucmVnaW9uWC5iaW5kKCQkKSlcclxuICAgICAgICAgICAgICAuYXR0cigneScsICQkLnJlZ2lvblkuYmluZCgkJCkpXHJcbiAgICAgICAgICAgICAgLmF0dHIoJ3dpZHRoJywgJCQucmVnaW9uV2lkdGguYmluZCgkJCkpXHJcbiAgICAgICAgICAgICAgLmF0dHIoJ2hlaWdodCcsICQkLnJlZ2lvbkhlaWdodC5iaW5kKCQkKSlcclxuICAgICAgICAgICAgICAuc3R5bGUoJ2ZpbGwtb3BhY2l0eScsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGlzVmFsdWUoZC5vcGFjaXR5KSA/IGQub3BhY2l0eSA6IDAuMTtcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgKHdpdGhUcmFuc2l0aW9uID8gcmVnaW9uTGFiZWxzLnRyYW5zaXRpb24odHJhbnNpdGlvbikgOiByZWdpb25MYWJlbHMpXHJcbiAgICAgICAgICAgICAgLmF0dHIoJ3gnLCAkJC5sYWJlbE9mZnNldFguYmluZCgkJCkpXHJcbiAgICAgICAgICAgICAgLmF0dHIoJ3knLCAkJC5sYWJlbE9mZnNldFkuYmluZCgkJCkpXHJcbiAgICAgICAgICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsICQkLmxhYmVsVHJhbnNmb3JtLmJpbmQoJCQpKVxyXG4gICAgICAgICAgICAgIC5hdHRyKCdzdHlsZScsICd0ZXh0LWFuY2hvcjogbGVmdDsnKVxyXG4gICAgICBdO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUucmVnaW9uWCA9IGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXMsIGNvbmZpZyA9ICQkLmNvbmZpZywgeFBvcywgeVNjYWxlID0gZC5heGlzID09PSAneScgPyAkJC55IDogJCQueTI7XHJcbiAgICAgIGlmIChkLmF4aXMgPT09ICd5JyB8fCBkLmF4aXMgPT09ICd5MicpIHtcclxuICAgICAgICAgIHhQb3MgPSBjb25maWcuYXhpc19yb3RhdGVkID8gKCdzdGFydCcgaW4gZCA/IHlTY2FsZShkLnN0YXJ0KSA6IDApIDogMDtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICAgIHhQb3MgPSBjb25maWcuYXhpc19yb3RhdGVkXHJcbiAgICAgICAgICAgICAgPyAwXHJcbiAgICAgICAgICAgICAgOiAnc3RhcnQnIGluIGRcclxuICAgICAgICAgICAgICAgICAgPyAkJC54KCQkLmlzVGltZVNlcmllcygpID8gJCQucGFyc2VEYXRlKGQuc3RhcnQpIDogZC5zdGFydClcclxuICAgICAgICAgICAgICAgICAgOiAwO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB4UG9zO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUucmVnaW9uWSA9IGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXMsIGNvbmZpZyA9ICQkLmNvbmZpZywgeVBvcywgeVNjYWxlID0gZC5heGlzID09PSAneScgPyAkJC55IDogJCQueTI7XHJcbiAgICAgIGlmIChkLmF4aXMgPT09ICd5JyB8fCBkLmF4aXMgPT09ICd5MicpIHtcclxuICAgICAgICAgIHlQb3MgPSBjb25maWcuYXhpc19yb3RhdGVkID8gMCA6ICdlbmQnIGluIGQgPyB5U2NhbGUoZC5lbmQpIDogMDtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICAgIHlQb3MgPSBjb25maWcuYXhpc19yb3RhdGVkXHJcbiAgICAgICAgICAgICAgPyAnc3RhcnQnIGluIGRcclxuICAgICAgICAgICAgICAgICAgPyAkJC54KCQkLmlzVGltZVNlcmllcygpID8gJCQucGFyc2VEYXRlKGQuc3RhcnQpIDogZC5zdGFydClcclxuICAgICAgICAgICAgICAgICAgOiAwXHJcbiAgICAgICAgICAgICAgOiAwO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB5UG9zO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUucmVnaW9uV2lkdGggPSBmdW5jdGlvbiAoZCkge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzLCBjb25maWcgPSAkJC5jb25maWcsIHN0YXJ0ID0gJCQucmVnaW9uWChkKSwgZW5kLCB5U2NhbGUgPSBkLmF4aXMgPT09ICd5JyA/ICQkLnkgOiAkJC55MjtcclxuICAgICAgaWYgKGQuYXhpcyA9PT0gJ3knIHx8IGQuYXhpcyA9PT0gJ3kyJykge1xyXG4gICAgICAgICAgZW5kID0gY29uZmlnLmF4aXNfcm90YXRlZFxyXG4gICAgICAgICAgICAgID8gJ2VuZCcgaW4gZFxyXG4gICAgICAgICAgICAgICAgICA/IHlTY2FsZShkLmVuZClcclxuICAgICAgICAgICAgICAgICAgOiAkJC53aWR0aFxyXG4gICAgICAgICAgICAgIDogJCQud2lkdGg7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBlbmQgPSBjb25maWcuYXhpc19yb3RhdGVkXHJcbiAgICAgICAgICAgICAgPyAkJC53aWR0aFxyXG4gICAgICAgICAgICAgIDogJ2VuZCcgaW4gZFxyXG4gICAgICAgICAgICAgICAgICA/ICQkLngoJCQuaXNUaW1lU2VyaWVzKCkgPyAkJC5wYXJzZURhdGUoZC5lbmQpIDogZC5lbmQpXHJcbiAgICAgICAgICAgICAgICAgIDogJCQud2lkdGg7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGVuZCA8IHN0YXJ0ID8gMCA6IGVuZCAtIHN0YXJ0O1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUucmVnaW9uSGVpZ2h0ID0gZnVuY3Rpb24gKGQpIHtcclxuICAgICAgdmFyICQkID0gdGhpcywgY29uZmlnID0gJCQuY29uZmlnLCBzdGFydCA9IHRoaXMucmVnaW9uWShkKSwgZW5kLCB5U2NhbGUgPSBkLmF4aXMgPT09ICd5JyA/ICQkLnkgOiAkJC55MjtcclxuICAgICAgaWYgKGQuYXhpcyA9PT0gJ3knIHx8IGQuYXhpcyA9PT0gJ3kyJykge1xyXG4gICAgICAgICAgZW5kID0gY29uZmlnLmF4aXNfcm90YXRlZFxyXG4gICAgICAgICAgICAgID8gJCQuaGVpZ2h0XHJcbiAgICAgICAgICAgICAgOiAnc3RhcnQnIGluIGRcclxuICAgICAgICAgICAgICAgICAgPyB5U2NhbGUoZC5zdGFydClcclxuICAgICAgICAgICAgICAgICAgOiAkJC5oZWlnaHQ7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBlbmQgPSBjb25maWcuYXhpc19yb3RhdGVkXHJcbiAgICAgICAgICAgICAgPyAnZW5kJyBpbiBkXHJcbiAgICAgICAgICAgICAgICAgID8gJCQueCgkJC5pc1RpbWVTZXJpZXMoKSA/ICQkLnBhcnNlRGF0ZShkLmVuZCkgOiBkLmVuZClcclxuICAgICAgICAgICAgICAgICAgOiAkJC5oZWlnaHRcclxuICAgICAgICAgICAgICA6ICQkLmhlaWdodDtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZW5kIDwgc3RhcnQgPyAwIDogZW5kIC0gc3RhcnQ7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5pc1JlZ2lvbk9uWCA9IGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgIHJldHVybiAhZC5heGlzIHx8IGQuYXhpcyA9PT0gJ3gnO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUubGFiZWxSZWdpb24gPSBmdW5jdGlvbiAoZCkge1xyXG4gICAgICByZXR1cm4gJ2xhYmVsJyBpbiBkID8gZC5sYWJlbCA6ICcnO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUubGFiZWxUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoZCkge1xyXG4gICAgICByZXR1cm4gJ3ZlcnRpY2FsJyBpbiBkICYmIGQudmVydGljYWwgPyAncm90YXRlKDkwKScgOiAnJztcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmxhYmVsT2Zmc2V0WCA9IGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgIHZhciBwYWRkaW5nWCA9ICdwYWRkaW5nWCcgaW4gZCA/IGQucGFkZGluZ1ggOiAzO1xyXG4gICAgICB2YXIgcGFkZGluZ1kgPSAncGFkZGluZ1knIGluIGQgPyBkLnBhZGRpbmdZIDogMztcclxuICAgICAgcmV0dXJuICd2ZXJ0aWNhbCcgaW4gZCAmJiBkLnZlcnRpY2FsXHJcbiAgICAgICAgICA/IHRoaXMucmVnaW9uWShkKSArIHBhZGRpbmdZXHJcbiAgICAgICAgICA6IHRoaXMucmVnaW9uWChkKSArIHBhZGRpbmdYO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUubGFiZWxPZmZzZXRZID0gZnVuY3Rpb24gKGQpIHtcclxuICAgICAgdmFyIHBhZGRpbmdYID0gJ3BhZGRpbmdYJyBpbiBkID8gZC5wYWRkaW5nWCA6IDM7XHJcbiAgICAgIHZhciBwYWRkaW5nWSA9ICdwYWRkaW5nWScgaW4gZCA/IGQucGFkZGluZ1kgOiAzO1xyXG4gICAgICByZXR1cm4gJ3ZlcnRpY2FsJyBpbiBkICYmIGQudmVydGljYWxcclxuICAgICAgICAgID8gLSh0aGlzLnJlZ2lvblgoZCkgKyBwYWRkaW5nWClcclxuICAgICAgICAgIDogdGhpcy5yZWdpb25ZKGQpICsgMTAgKyBwYWRkaW5nWTtcclxuICB9O1xuXG4gIGZ1bmN0aW9uIGMzTG9nU2NhbGUoZDMsIGxpbmVhclNjYWxlLCBsb2dTY2FsZSkge1xyXG4gICAgICB2YXIgUFJPSkVDVElPTiA9IFswLjAxLCAxMF07XHJcbiAgICAgIGlmICghbGluZWFyU2NhbGUpIHtcclxuICAgICAgICAgIGxpbmVhclNjYWxlID0gZDMuc2NhbGVMaW5lYXIoKTtcclxuICAgICAgICAgIGxpbmVhclNjYWxlLnJhbmdlKFBST0pFQ1RJT04pO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICghbG9nU2NhbGUpIHtcclxuICAgICAgICAgIGxvZ1NjYWxlID0gZDMuc2NhbGVMb2coKTtcclxuICAgICAgICAgIGxvZ1NjYWxlLmRvbWFpbihQUk9KRUNUSU9OKTtcclxuICAgICAgICAgIGxvZ1NjYWxlLm5pY2UoKTtcclxuICAgICAgfVxyXG4gICAgICAvLyBjb3BpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vY29tcHV0ZS1pby9sb2dzcGFjZVxyXG4gICAgICBmdW5jdGlvbiBsb2dzcGFjZShhLCBiLCBsZW4pIHtcclxuICAgICAgICAgIHZhciBhcnIsIGVuZCwgdG1wLCBkO1xyXG4gICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAzKSB7XHJcbiAgICAgICAgICAgICAgbGVuID0gMTA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICBpZiAobGVuID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIGluY3JlbWVudDpcclxuICAgICAgICAgIGVuZCA9IGxlbiAtIDE7XHJcbiAgICAgICAgICBkID0gKGIgLSBhKSAvIGVuZDtcclxuICAgICAgICAgIC8vIEJ1aWxkIHRoZSBvdXRwdXQgYXJyYXkuLi5cclxuICAgICAgICAgIGFyciA9IG5ldyBBcnJheShsZW4pO1xyXG4gICAgICAgICAgdG1wID0gYTtcclxuICAgICAgICAgIGFyclswXSA9IE1hdGgucG93KDEwLCB0bXApO1xyXG4gICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBlbmQ7IGkrKykge1xyXG4gICAgICAgICAgICAgIHRtcCArPSBkO1xyXG4gICAgICAgICAgICAgIGFycltpXSA9IE1hdGgucG93KDEwLCB0bXApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYXJyW2VuZF0gPSBNYXRoLnBvdygxMCwgYik7XHJcbiAgICAgICAgICByZXR1cm4gYXJyO1xyXG4gICAgICB9XHJcbiAgICAgIGZ1bmN0aW9uIHNjYWxlKHgpIHtcclxuICAgICAgICAgIHJldHVybiBsb2dTY2FsZShsaW5lYXJTY2FsZSh4KSk7XHJcbiAgICAgIH1cclxuICAgICAgc2NhbGUuZG9tYWluID0gZnVuY3Rpb24gKHgpIHtcclxuICAgICAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBsaW5lYXJTY2FsZS5kb21haW4oKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGxpbmVhclNjYWxlLmRvbWFpbih4KTtcclxuICAgICAgICAgIHJldHVybiBzY2FsZTtcclxuICAgICAgfTtcclxuICAgICAgc2NhbGUucmFuZ2UgPSBmdW5jdGlvbiAoeCkge1xyXG4gICAgICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGxvZ1NjYWxlLnJhbmdlKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBsb2dTY2FsZS5yYW5nZSh4KTtcclxuICAgICAgICAgIHJldHVybiBzY2FsZTtcclxuICAgICAgfTtcclxuICAgICAgc2NhbGUudGlja3MgPSBmdW5jdGlvbiAobSkge1xyXG4gICAgICAgICAgcmV0dXJuIGxvZ3NwYWNlKC0yLCAxLCBtIHx8IDEwKS5tYXAoZnVuY3Rpb24gKHYpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gbGluZWFyU2NhbGUuaW52ZXJ0KHYpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH07XHJcbiAgICAgIHNjYWxlLmNvcHkgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICByZXR1cm4gYzNMb2dTY2FsZShkMywgbGluZWFyU2NhbGUuY29weSgpLCBsb2dTY2FsZS5jb3B5KCkpO1xyXG4gICAgICB9O1xyXG4gICAgICByZXR1cm4gc2NhbGU7XHJcbiAgfVxyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmdldFNjYWxlID0gZnVuY3Rpb24gKG1pbiwgbWF4LCBmb3JUaW1lc2VyaWVzKSB7XHJcbiAgICAgIHJldHVybiAoZm9yVGltZXNlcmllcyA/IHRoaXMuZDMuc2NhbGVUaW1lKCkgOiB0aGlzLmQzLnNjYWxlTGluZWFyKCkpLnJhbmdlKFtcclxuICAgICAgICAgIG1pbixcclxuICAgICAgICAgIG1heFxyXG4gICAgICBdKTtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmdldFggPSBmdW5jdGlvbiAobWluLCBtYXgsIGRvbWFpbiwgb2Zmc2V0KSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXMsIHNjYWxlID0gJCQuZ2V0U2NhbGUobWluLCBtYXgsICQkLmlzVGltZVNlcmllcygpKSwgX3NjYWxlID0gZG9tYWluID8gc2NhbGUuZG9tYWluKGRvbWFpbikgOiBzY2FsZSwga2V5O1xyXG4gICAgICAvLyBEZWZpbmUgY3VzdG9taXplZCBzY2FsZSBpZiBjYXRlZ29yaXplZCBheGlzXHJcbiAgICAgIGlmICgkJC5pc0NhdGVnb3JpemVkKCkpIHtcclxuICAgICAgICAgIG9mZnNldCA9XHJcbiAgICAgICAgICAgICAgb2Zmc2V0IHx8XHJcbiAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgc2NhbGUgPSBmdW5jdGlvbiAoZCwgcmF3KSB7XHJcbiAgICAgICAgICAgICAgdmFyIHYgPSBfc2NhbGUoZCkgKyBvZmZzZXQoZCk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHJhdyA/IHYgOiBNYXRoLmNlaWwodik7XHJcbiAgICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgc2NhbGUgPSBmdW5jdGlvbiAoZCwgcmF3KSB7XHJcbiAgICAgICAgICAgICAgdmFyIHYgPSBfc2NhbGUoZCk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHJhdyA/IHYgOiBNYXRoLmNlaWwodik7XHJcbiAgICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICAgIC8vIGRlZmluZSBmdW5jdGlvbnNcclxuICAgICAgZm9yIChrZXkgaW4gX3NjYWxlKSB7XHJcbiAgICAgICAgICBzY2FsZVtrZXldID0gX3NjYWxlW2tleV07XHJcbiAgICAgIH1cclxuICAgICAgc2NhbGUub3JnRG9tYWluID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgcmV0dXJuIF9zY2FsZS5kb21haW4oKTtcclxuICAgICAgfTtcclxuICAgICAgLy8gZGVmaW5lIGN1c3RvbSBkb21haW4oKSBmb3IgY2F0ZWdvcml6ZWQgYXhpc1xyXG4gICAgICBpZiAoJCQuaXNDYXRlZ29yaXplZCgpKSB7XHJcbiAgICAgICAgICBzY2FsZS5kb21haW4gPSBmdW5jdGlvbiAoZG9tYWluKSB7XHJcbiAgICAgICAgICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgIGRvbWFpbiA9IHRoaXMub3JnRG9tYWluKCk7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiBbZG9tYWluWzBdLCBkb21haW5bMV0gKyAxXTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgX3NjYWxlLmRvbWFpbihkb21haW4pO1xyXG4gICAgICAgICAgICAgIHJldHVybiBzY2FsZTtcclxuICAgICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHNjYWxlO1xyXG4gIH07XHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlcyBhbmQgY29uZmlndXJlcyBhIEQzIHNjYWxlIGluc3RhbmNlIGZvciB0aGUgZ2l2ZW4gdHlwZS5cclxuICAgKlxyXG4gICAqIEJ5IGRlZmF1bHRzIGl0IHJldHVybnMgYSBMaW5lYXIgc2NhbGUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1N0cmluZ30gdHlwZSBUeXBlIG9mIGQzLXNjYWxlIHRvIGNyZWF0ZS4gVHlwZSBjYW4gYmUgJ2xpbmVhcicsICd0aW1lJywgJ3RpbWVzZXJpZXMnIG9yICdsb2cnLlxyXG4gICAqIEBwYXJhbSB7QXJyYXl9IGRvbWFpbiBUaGUgc2NhbGUgZG9tYWluIHN1Y2ggYXMgW2Zyb20sIHRvXVxyXG4gICAqIEBwYXJhbSB7QXJyYXl9IHJhbmdlIFRoZSBzY2FsZSdzIHJhbmdlIHN1Y2ggYXMgW2Zyb20sIHRvXVxyXG4gICAqXHJcbiAgICogQHJldHVybiBBIGQzLXNjYWxlIGluc3RhbmNlXHJcbiAgICovXHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuZ2V0WSA9IGZ1bmN0aW9uICh0eXBlLCBkb21haW4sIHJhbmdlKSB7XHJcbiAgICAgIHZhciBzY2FsZTtcclxuICAgICAgaWYgKHR5cGUgPT09ICd0aW1lc2VyaWVzJyB8fCB0eXBlID09PSAndGltZScpIHtcclxuICAgICAgICAgIHNjYWxlID0gdGhpcy5kMy5zY2FsZVRpbWUoKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0eXBlID09PSAnbG9nJykge1xyXG4gICAgICAgICAgc2NhbGUgPSBjM0xvZ1NjYWxlKHRoaXMuZDMpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHR5cGUgPT09ICdsaW5lYXInIHx8IHR5cGUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgc2NhbGUgPSB0aGlzLmQzLnNjYWxlTGluZWFyKCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIFkgYXhpcyB0eXBlOiBcXFwiXCIgKyB0eXBlICsgXCJcXFwiXCIpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChkb21haW4pIHtcclxuICAgICAgICAgIHNjYWxlLmRvbWFpbihkb21haW4pO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChyYW5nZSkge1xyXG4gICAgICAgICAgc2NhbGUucmFuZ2UocmFuZ2UpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBzY2FsZTtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmdldFlTY2FsZSA9IGZ1bmN0aW9uIChpZCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5heGlzLmdldElkKGlkKSA9PT0gJ3kyJyA/IHRoaXMueTIgOiB0aGlzLnk7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5nZXRTdWJZU2NhbGUgPSBmdW5jdGlvbiAoaWQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuYXhpcy5nZXRJZChpZCkgPT09ICd5MicgPyB0aGlzLnN1YlkyIDogdGhpcy5zdWJZO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUudXBkYXRlU2NhbGVzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzLCBjb25maWcgPSAkJC5jb25maWcsIGZvckluaXQgPSAhJCQueDtcclxuICAgICAgLy8gdXBkYXRlIGVkZ2VzXHJcbiAgICAgICQkLnhNaW4gPSBjb25maWcuYXhpc19yb3RhdGVkID8gMSA6IDA7XHJcbiAgICAgICQkLnhNYXggPSBjb25maWcuYXhpc19yb3RhdGVkID8gJCQuaGVpZ2h0IDogJCQud2lkdGg7XHJcbiAgICAgICQkLnlNaW4gPSBjb25maWcuYXhpc19yb3RhdGVkID8gMCA6ICQkLmhlaWdodDtcclxuICAgICAgJCQueU1heCA9IGNvbmZpZy5heGlzX3JvdGF0ZWQgPyAkJC53aWR0aCA6IDE7XHJcbiAgICAgICQkLnN1YlhNaW4gPSAkJC54TWluO1xyXG4gICAgICAkJC5zdWJYTWF4ID0gJCQueE1heDtcclxuICAgICAgJCQuc3ViWU1pbiA9IGNvbmZpZy5heGlzX3JvdGF0ZWQgPyAwIDogJCQuaGVpZ2h0MjtcclxuICAgICAgJCQuc3ViWU1heCA9IGNvbmZpZy5heGlzX3JvdGF0ZWQgPyAkJC53aWR0aDIgOiAxO1xyXG4gICAgICAvLyB1cGRhdGUgc2NhbGVzXHJcbiAgICAgICQkLnggPSAkJC5nZXRYKCQkLnhNaW4sICQkLnhNYXgsIGZvckluaXQgPyB1bmRlZmluZWQgOiAkJC54Lm9yZ0RvbWFpbigpLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICByZXR1cm4gJCQueEF4aXMudGlja09mZnNldCgpO1xyXG4gICAgICB9KTtcclxuICAgICAgJCQueSA9ICQkLmdldFkoY29uZmlnLmF4aXNfeV90eXBlLCBmb3JJbml0ID8gY29uZmlnLmF4aXNfeV9kZWZhdWx0IDogJCQueS5kb21haW4oKSwgWyQkLnlNaW4sICQkLnlNYXhdKTtcclxuICAgICAgJCQueTIgPSAkJC5nZXRZKGNvbmZpZy5heGlzX3kyX3R5cGUsIGZvckluaXQgPyBjb25maWcuYXhpc195Ml9kZWZhdWx0IDogJCQueTIuZG9tYWluKCksIFskJC55TWluLCAkJC55TWF4XSk7XHJcbiAgICAgICQkLnN1YlggPSAkJC5nZXRYKCQkLnhNaW4sICQkLnhNYXgsICQkLm9yZ1hEb21haW4sIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICByZXR1cm4gZCAlIDEgPyAwIDogJCQuc3ViWEF4aXMudGlja09mZnNldCgpO1xyXG4gICAgICB9KTtcclxuICAgICAgJCQuc3ViWSA9ICQkLmdldFkoY29uZmlnLmF4aXNfeV90eXBlLCBmb3JJbml0ID8gY29uZmlnLmF4aXNfeV9kZWZhdWx0IDogJCQuc3ViWS5kb21haW4oKSwgWyQkLnN1YllNaW4sICQkLnN1YllNYXhdKTtcclxuICAgICAgJCQuc3ViWTIgPSAkJC5nZXRZKGNvbmZpZy5heGlzX3kyX3R5cGUsIGZvckluaXQgPyBjb25maWcuYXhpc195Ml9kZWZhdWx0IDogJCQuc3ViWTIuZG9tYWluKCksIFskJC5zdWJZTWluLCAkJC5zdWJZTWF4XSk7XHJcbiAgICAgIC8vIHVwZGF0ZSBheGVzXHJcbiAgICAgICQkLnhBeGlzVGlja0Zvcm1hdCA9ICQkLmF4aXMuZ2V0WEF4aXNUaWNrRm9ybWF0KCk7XHJcbiAgICAgICQkLnhBeGlzVGlja1ZhbHVlcyA9ICQkLmF4aXMuZ2V0WEF4aXNUaWNrVmFsdWVzKCk7XHJcbiAgICAgICQkLnlBeGlzVGlja1ZhbHVlcyA9ICQkLmF4aXMuZ2V0WUF4aXNUaWNrVmFsdWVzKCk7XHJcbiAgICAgICQkLnkyQXhpc1RpY2tWYWx1ZXMgPSAkJC5heGlzLmdldFkyQXhpc1RpY2tWYWx1ZXMoKTtcclxuICAgICAgJCQueEF4aXMgPSAkJC5heGlzLmdldFhBeGlzKCQkLngsICQkLnhPcmllbnQsICQkLnhBeGlzVGlja0Zvcm1hdCwgJCQueEF4aXNUaWNrVmFsdWVzLCBjb25maWcuYXhpc194X3RpY2tfb3V0ZXIpO1xyXG4gICAgICAkJC5zdWJYQXhpcyA9ICQkLmF4aXMuZ2V0WEF4aXMoJCQuc3ViWCwgJCQuc3ViWE9yaWVudCwgJCQueEF4aXNUaWNrRm9ybWF0LCAkJC54QXhpc1RpY2tWYWx1ZXMsIGNvbmZpZy5heGlzX3hfdGlja19vdXRlcik7XHJcbiAgICAgICQkLnlBeGlzID0gJCQuYXhpcy5nZXRZQXhpcygneScsICQkLnksICQkLnlPcmllbnQsICQkLnlBeGlzVGlja1ZhbHVlcywgY29uZmlnLmF4aXNfeV90aWNrX291dGVyKTtcclxuICAgICAgJCQueTJBeGlzID0gJCQuYXhpcy5nZXRZQXhpcygneTInLCAkJC55MiwgJCQueTJPcmllbnQsICQkLnkyQXhpc1RpY2tWYWx1ZXMsIGNvbmZpZy5heGlzX3kyX3RpY2tfb3V0ZXIpO1xyXG4gICAgICAvLyBTZXQgaW5pdGlhbGl6ZWQgc2NhbGVzIHRvIGJydXNoIGFuZCB6b29tXHJcbiAgICAgIGlmICghZm9ySW5pdCkge1xyXG4gICAgICAgICAgaWYgKCQkLmJydXNoKSB7XHJcbiAgICAgICAgICAgICAgJCQuYnJ1c2gudXBkYXRlU2NhbGUoJCQuc3ViWCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgLy8gdXBkYXRlIGZvciBhcmNcclxuICAgICAgaWYgKCQkLnVwZGF0ZUFyYykge1xyXG4gICAgICAgICAgJCQudXBkYXRlQXJjKCk7XHJcbiAgICAgIH1cclxuICB9O1xuXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLnNlbGVjdFBvaW50ID0gZnVuY3Rpb24gKHRhcmdldCwgZCwgaSkge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzLCBjb25maWcgPSAkJC5jb25maWcsIGN4ID0gKGNvbmZpZy5heGlzX3JvdGF0ZWQgPyAkJC5jaXJjbGVZIDogJCQuY2lyY2xlWCkuYmluZCgkJCksIGN5ID0gKGNvbmZpZy5heGlzX3JvdGF0ZWQgPyAkJC5jaXJjbGVYIDogJCQuY2lyY2xlWSkuYmluZCgkJCksIHIgPSAkJC5wb2ludFNlbGVjdFIuYmluZCgkJCk7XHJcbiAgICAgIGNvbmZpZy5kYXRhX29uc2VsZWN0ZWQuY2FsbCgkJC5hcGksIGQsIHRhcmdldC5ub2RlKCkpO1xyXG4gICAgICAvLyBhZGQgc2VsZWN0ZWQtY2lyY2xlIG9uIGxvdyBsYXllciBnXHJcbiAgICAgICQkLm1haW5cclxuICAgICAgICAgIC5zZWxlY3QoJy4nICsgQ0xBU1Muc2VsZWN0ZWRDaXJjbGVzICsgJCQuZ2V0VGFyZ2V0U2VsZWN0b3JTdWZmaXgoZC5pZCkpXHJcbiAgICAgICAgICAuc2VsZWN0QWxsKCcuJyArIENMQVNTLnNlbGVjdGVkQ2lyY2xlICsgJy0nICsgaSlcclxuICAgICAgICAgIC5kYXRhKFtkXSlcclxuICAgICAgICAgIC5lbnRlcigpXHJcbiAgICAgICAgICAuYXBwZW5kKCdjaXJjbGUnKVxyXG4gICAgICAgICAgLmF0dHIoJ2NsYXNzJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgcmV0dXJuICQkLmdlbmVyYXRlQ2xhc3MoQ0xBU1Muc2VsZWN0ZWRDaXJjbGUsIGkpO1xyXG4gICAgICB9KVxyXG4gICAgICAgICAgLmF0dHIoJ2N4JywgY3gpXHJcbiAgICAgICAgICAuYXR0cignY3knLCBjeSlcclxuICAgICAgICAgIC5hdHRyKCdzdHJva2UnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICByZXR1cm4gJCQuY29sb3IoZCk7XHJcbiAgICAgIH0pXHJcbiAgICAgICAgICAuYXR0cigncicsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICByZXR1cm4gJCQucG9pbnRTZWxlY3RSKGQpICogMS40O1xyXG4gICAgICB9KVxyXG4gICAgICAgICAgLnRyYW5zaXRpb24oKVxyXG4gICAgICAgICAgLmR1cmF0aW9uKDEwMClcclxuICAgICAgICAgIC5hdHRyKCdyJywgcik7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS51bnNlbGVjdFBvaW50ID0gZnVuY3Rpb24gKHRhcmdldCwgZCwgaSkge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzO1xyXG4gICAgICAkJC5jb25maWcuZGF0YV9vbnVuc2VsZWN0ZWQuY2FsbCgkJC5hcGksIGQsIHRhcmdldC5ub2RlKCkpO1xyXG4gICAgICAvLyByZW1vdmUgc2VsZWN0ZWQtY2lyY2xlIGZyb20gbG93IGxheWVyIGdcclxuICAgICAgJCQubWFpblxyXG4gICAgICAgICAgLnNlbGVjdCgnLicgKyBDTEFTUy5zZWxlY3RlZENpcmNsZXMgKyAkJC5nZXRUYXJnZXRTZWxlY3RvclN1ZmZpeChkLmlkKSlcclxuICAgICAgICAgIC5zZWxlY3RBbGwoJy4nICsgQ0xBU1Muc2VsZWN0ZWRDaXJjbGUgKyAnLScgKyBpKVxyXG4gICAgICAgICAgLnRyYW5zaXRpb24oKVxyXG4gICAgICAgICAgLmR1cmF0aW9uKDEwMClcclxuICAgICAgICAgIC5hdHRyKCdyJywgMClcclxuICAgICAgICAgIC5yZW1vdmUoKTtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLnRvZ2dsZVBvaW50ID0gZnVuY3Rpb24gKHNlbGVjdGVkLCB0YXJnZXQsIGQsIGkpIHtcclxuICAgICAgc2VsZWN0ZWQgPyB0aGlzLnNlbGVjdFBvaW50KHRhcmdldCwgZCwgaSkgOiB0aGlzLnVuc2VsZWN0UG9pbnQodGFyZ2V0LCBkLCBpKTtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLnNlbGVjdFBhdGggPSBmdW5jdGlvbiAodGFyZ2V0LCBkKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXM7XHJcbiAgICAgICQkLmNvbmZpZy5kYXRhX29uc2VsZWN0ZWQuY2FsbCgkJCwgZCwgdGFyZ2V0Lm5vZGUoKSk7XHJcbiAgICAgIGlmICgkJC5jb25maWcuaW50ZXJhY3Rpb25fYnJpZ2h0ZW4pIHtcclxuICAgICAgICAgIHRhcmdldFxyXG4gICAgICAgICAgICAgIC50cmFuc2l0aW9uKClcclxuICAgICAgICAgICAgICAuZHVyYXRpb24oMTAwKVxyXG4gICAgICAgICAgICAgIC5zdHlsZSgnZmlsbCcsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gJCQuZDMucmdiKCQkLmNvbG9yKGQpKS5icmlnaHRlcigwLjc1KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS51bnNlbGVjdFBhdGggPSBmdW5jdGlvbiAodGFyZ2V0LCBkKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXM7XHJcbiAgICAgICQkLmNvbmZpZy5kYXRhX29udW5zZWxlY3RlZC5jYWxsKCQkLCBkLCB0YXJnZXQubm9kZSgpKTtcclxuICAgICAgaWYgKCQkLmNvbmZpZy5pbnRlcmFjdGlvbl9icmlnaHRlbikge1xyXG4gICAgICAgICAgdGFyZ2V0XHJcbiAgICAgICAgICAgICAgLnRyYW5zaXRpb24oKVxyXG4gICAgICAgICAgICAgIC5kdXJhdGlvbigxMDApXHJcbiAgICAgICAgICAgICAgLnN0eWxlKCdmaWxsJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiAkJC5jb2xvcihkKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS50b2dnbGVQYXRoID0gZnVuY3Rpb24gKHNlbGVjdGVkLCB0YXJnZXQsIGQsIGkpIHtcclxuICAgICAgc2VsZWN0ZWQgPyB0aGlzLnNlbGVjdFBhdGgodGFyZ2V0LCBkLCBpKSA6IHRoaXMudW5zZWxlY3RQYXRoKHRhcmdldCwgZCwgaSk7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5nZXRUb2dnbGUgPSBmdW5jdGlvbiAodGhhdCwgZCkge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzLCB0b2dnbGU7XHJcbiAgICAgIGlmICh0aGF0Lm5vZGVOYW1lID09PSAnY2lyY2xlJykge1xyXG4gICAgICAgICAgaWYgKCQkLmlzU3RlcFR5cGUoZCkpIHtcclxuICAgICAgICAgICAgICAvLyBjaXJjbGUgaXMgaGlkZGVuIGluIHN0ZXAgY2hhcnQsIHNvIHRyZWF0IGFzIHdpdGhpbiB0aGUgY2xpY2sgYXJlYVxyXG4gICAgICAgICAgICAgIHRvZ2dsZSA9IGZ1bmN0aW9uICgpIHsgfTsgLy8gVE9ETzogaG93IHRvIHNlbGVjdCBzdGVwIGNoYXJ0P1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgdG9nZ2xlID0gJCQudG9nZ2xlUG9pbnQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodGhhdC5ub2RlTmFtZSA9PT0gJ3BhdGgnKSB7XHJcbiAgICAgICAgICB0b2dnbGUgPSAkJC50b2dnbGVQYXRoO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0b2dnbGU7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS50b2dnbGVTaGFwZSA9IGZ1bmN0aW9uICh0aGF0LCBkLCBpKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXMsIGQzID0gJCQuZDMsIGNvbmZpZyA9ICQkLmNvbmZpZywgc2hhcGUgPSBkMy5zZWxlY3QodGhhdCksIGlzU2VsZWN0ZWQgPSBzaGFwZS5jbGFzc2VkKENMQVNTLlNFTEVDVEVEKSwgdG9nZ2xlID0gJCQuZ2V0VG9nZ2xlKHRoYXQsIGQpLmJpbmQoJCQpO1xyXG4gICAgICBpZiAoY29uZmlnLmRhdGFfc2VsZWN0aW9uX2VuYWJsZWQgJiYgY29uZmlnLmRhdGFfc2VsZWN0aW9uX2lzc2VsZWN0YWJsZShkKSkge1xyXG4gICAgICAgICAgaWYgKCFjb25maWcuZGF0YV9zZWxlY3Rpb25fbXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgICAkJC5tYWluXHJcbiAgICAgICAgICAgICAgICAgIC5zZWxlY3RBbGwoJy4nICtcclxuICAgICAgICAgICAgICAgICAgQ0xBU1Muc2hhcGVzICtcclxuICAgICAgICAgICAgICAgICAgKGNvbmZpZy5kYXRhX3NlbGVjdGlvbl9ncm91cGVkXHJcbiAgICAgICAgICAgICAgICAgICAgICA/ICQkLmdldFRhcmdldFNlbGVjdG9yU3VmZml4KGQuaWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICA6ICcnKSlcclxuICAgICAgICAgICAgICAgICAgLnNlbGVjdEFsbCgnLicgKyBDTEFTUy5zaGFwZSlcclxuICAgICAgICAgICAgICAgICAgLmVhY2goZnVuY3Rpb24gKGQsIGkpIHtcclxuICAgICAgICAgICAgICAgICAgdmFyIHNoYXBlID0gZDMuc2VsZWN0KHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgICBpZiAoc2hhcGUuY2xhc3NlZChDTEFTUy5TRUxFQ1RFRCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHRvZ2dsZShmYWxzZSwgc2hhcGUuY2xhc3NlZChDTEFTUy5TRUxFQ1RFRCwgZmFsc2UpLCBkLCBpKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgc2hhcGUuY2xhc3NlZChDTEFTUy5TRUxFQ1RFRCwgIWlzU2VsZWN0ZWQpO1xyXG4gICAgICAgICAgdG9nZ2xlKCFpc1NlbGVjdGVkLCBzaGFwZSwgZCwgaSk7XHJcbiAgICAgIH1cclxuICB9O1xuXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmluaXRCYXIgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXM7XHJcbiAgICAgICQkLm1haW5cclxuICAgICAgICAgIC5zZWxlY3QoJy4nICsgQ0xBU1MuY2hhcnQpXHJcbiAgICAgICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgICAgIC5hdHRyKCdjbGFzcycsIENMQVNTLmNoYXJ0QmFycyk7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS51cGRhdGVUYXJnZXRzRm9yQmFyID0gZnVuY3Rpb24gKHRhcmdldHMpIHtcclxuICAgICAgdmFyICQkID0gdGhpcywgY29uZmlnID0gJCQuY29uZmlnLCBtYWluQmFycywgbWFpbkJhckVudGVyLCBjbGFzc0NoYXJ0QmFyID0gJCQuY2xhc3NDaGFydEJhci5iaW5kKCQkKSwgY2xhc3NCYXJzID0gJCQuY2xhc3NCYXJzLmJpbmQoJCQpLCBjbGFzc0ZvY3VzID0gJCQuY2xhc3NGb2N1cy5iaW5kKCQkKTtcclxuICAgICAgbWFpbkJhcnMgPSAkJC5tYWluXHJcbiAgICAgICAgICAuc2VsZWN0KCcuJyArIENMQVNTLmNoYXJ0QmFycylcclxuICAgICAgICAgIC5zZWxlY3RBbGwoJy4nICsgQ0xBU1MuY2hhcnRCYXIpXHJcbiAgICAgICAgICAuZGF0YSh0YXJnZXRzKVxyXG4gICAgICAgICAgLmF0dHIoJ2NsYXNzJywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIHJldHVybiBjbGFzc0NoYXJ0QmFyKGQpICsgY2xhc3NGb2N1cyhkKTtcclxuICAgICAgfSk7XHJcbiAgICAgIG1haW5CYXJFbnRlciA9IG1haW5CYXJzXHJcbiAgICAgICAgICAuZW50ZXIoKVxyXG4gICAgICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgICAgICAuYXR0cignY2xhc3MnLCBjbGFzc0NoYXJ0QmFyKVxyXG4gICAgICAgICAgLnN0eWxlKCdwb2ludGVyLWV2ZW50cycsICdub25lJyk7XHJcbiAgICAgIC8vIEJhcnMgZm9yIGVhY2ggZGF0YVxyXG4gICAgICBtYWluQmFyRW50ZXJcclxuICAgICAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAgICAgLmF0dHIoJ2NsYXNzJywgY2xhc3NCYXJzKVxyXG4gICAgICAgICAgLnN0eWxlKCdjdXJzb3InLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgcmV0dXJuIGNvbmZpZy5kYXRhX3NlbGVjdGlvbl9pc3NlbGVjdGFibGUoZCkgPyAncG9pbnRlcicgOiBudWxsO1xyXG4gICAgICB9KTtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLnVwZGF0ZUJhciA9IGZ1bmN0aW9uIChkdXJhdGlvbkZvckV4aXQpIHtcclxuICAgICAgdmFyICQkID0gdGhpcywgYmFyRGF0YSA9ICQkLmJhckRhdGEuYmluZCgkJCksIGNsYXNzQmFyID0gJCQuY2xhc3NCYXIuYmluZCgkJCksIGluaXRpYWxPcGFjaXR5ID0gJCQuaW5pdGlhbE9wYWNpdHkuYmluZCgkJCksIGNvbG9yID0gZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIHJldHVybiAkJC5jb2xvcihkLmlkKTtcclxuICAgICAgfTtcclxuICAgICAgdmFyIG1haW5CYXIgPSAkJC5tYWluXHJcbiAgICAgICAgICAuc2VsZWN0QWxsKCcuJyArIENMQVNTLmJhcnMpXHJcbiAgICAgICAgICAuc2VsZWN0QWxsKCcuJyArIENMQVNTLmJhcilcclxuICAgICAgICAgIC5kYXRhKGJhckRhdGEpO1xyXG4gICAgICB2YXIgbWFpbkJhckVudGVyID0gbWFpbkJhclxyXG4gICAgICAgICAgLmVudGVyKClcclxuICAgICAgICAgIC5hcHBlbmQoJ3BhdGgnKVxyXG4gICAgICAgICAgLmF0dHIoJ2NsYXNzJywgY2xhc3NCYXIpXHJcbiAgICAgICAgICAuc3R5bGUoJ3N0cm9rZScsIGNvbG9yKVxyXG4gICAgICAgICAgLnN0eWxlKCdmaWxsJywgY29sb3IpO1xyXG4gICAgICAkJC5tYWluQmFyID0gbWFpbkJhckVudGVyLm1lcmdlKG1haW5CYXIpLnN0eWxlKCdvcGFjaXR5JywgaW5pdGlhbE9wYWNpdHkpO1xyXG4gICAgICBtYWluQmFyXHJcbiAgICAgICAgICAuZXhpdCgpXHJcbiAgICAgICAgICAudHJhbnNpdGlvbigpXHJcbiAgICAgICAgICAuZHVyYXRpb24oZHVyYXRpb25Gb3JFeGl0KVxyXG4gICAgICAgICAgLnN0eWxlKCdvcGFjaXR5JywgMCk7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5yZWRyYXdCYXIgPSBmdW5jdGlvbiAoZHJhd0Jhciwgd2l0aFRyYW5zaXRpb24sIHRyYW5zaXRpb24pIHtcclxuICAgICAgdmFyICQkID0gdGhpcztcclxuICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICh3aXRoVHJhbnNpdGlvbiA/IHRoaXMubWFpbkJhci50cmFuc2l0aW9uKHRyYW5zaXRpb24pIDogdGhpcy5tYWluQmFyKVxyXG4gICAgICAgICAgICAgIC5hdHRyKCdkJywgZHJhd0JhcilcclxuICAgICAgICAgICAgICAuc3R5bGUoJ3N0cm9rZScsIHRoaXMuY29sb3IpXHJcbiAgICAgICAgICAgICAgLnN0eWxlKCdmaWxsJywgdGhpcy5jb2xvcilcclxuICAgICAgICAgICAgICAuc3R5bGUoJ29wYWNpdHknLCBmdW5jdGlvbiAoZCkgeyByZXR1cm4gKCQkLmlzVGFyZ2V0VG9TaG93KGQuaWQpID8gMSA6IDApOyB9KVxyXG4gICAgICBdO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuZ2V0QmFyVyA9IGZ1bmN0aW9uIChheGlzLCBiYXJUYXJnZXRzTnVtKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXMsIGNvbmZpZyA9ICQkLmNvbmZpZywgdyA9IHR5cGVvZiBjb25maWcuYmFyX3dpZHRoID09PSAnbnVtYmVyJ1xyXG4gICAgICAgICAgPyBjb25maWcuYmFyX3dpZHRoXHJcbiAgICAgICAgICA6IGJhclRhcmdldHNOdW1cclxuICAgICAgICAgICAgICA/IChheGlzLnRpY2tJbnRlcnZhbCgpICogY29uZmlnLmJhcl93aWR0aF9yYXRpbykgLyBiYXJUYXJnZXRzTnVtXHJcbiAgICAgICAgICAgICAgOiAwO1xyXG4gICAgICByZXR1cm4gY29uZmlnLmJhcl93aWR0aF9tYXggJiYgdyA+IGNvbmZpZy5iYXJfd2lkdGhfbWF4XHJcbiAgICAgICAgICA/IGNvbmZpZy5iYXJfd2lkdGhfbWF4XHJcbiAgICAgICAgICA6IHc7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5nZXRCYXJzID0gZnVuY3Rpb24gKGksIGlkKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXM7XHJcbiAgICAgIHJldHVybiAoaWRcclxuICAgICAgICAgID8gJCQubWFpbi5zZWxlY3RBbGwoJy4nICsgQ0xBU1MuYmFycyArICQkLmdldFRhcmdldFNlbGVjdG9yU3VmZml4KGlkKSlcclxuICAgICAgICAgIDogJCQubWFpbikuc2VsZWN0QWxsKCcuJyArIENMQVNTLmJhciArIChpc1ZhbHVlKGkpID8gJy0nICsgaSA6ICcnKSk7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5leHBhbmRCYXJzID0gZnVuY3Rpb24gKGksIGlkLCByZXNldCkge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzO1xyXG4gICAgICBpZiAocmVzZXQpIHtcclxuICAgICAgICAgICQkLnVuZXhwYW5kQmFycygpO1xyXG4gICAgICB9XHJcbiAgICAgICQkLmdldEJhcnMoaSwgaWQpLmNsYXNzZWQoQ0xBU1MuRVhQQU5ERUQsIHRydWUpO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUudW5leHBhbmRCYXJzID0gZnVuY3Rpb24gKGkpIHtcclxuICAgICAgdmFyICQkID0gdGhpcztcclxuICAgICAgJCQuZ2V0QmFycyhpKS5jbGFzc2VkKENMQVNTLkVYUEFOREVELCBmYWxzZSk7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5nZW5lcmF0ZURyYXdCYXIgPSBmdW5jdGlvbiAoYmFySW5kaWNlcywgaXNTdWIpIHtcclxuICAgICAgdmFyICQkID0gdGhpcywgY29uZmlnID0gJCQuY29uZmlnLCBnZXRQb2ludHMgPSAkJC5nZW5lcmF0ZUdldEJhclBvaW50cyhiYXJJbmRpY2VzLCBpc1N1Yik7XHJcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoZCwgaSkge1xyXG4gICAgICAgICAgLy8gNCBwb2ludHMgdGhhdCBtYWtlIGEgYmFyXHJcbiAgICAgICAgICB2YXIgcG9pbnRzID0gZ2V0UG9pbnRzKGQsIGkpO1xyXG4gICAgICAgICAgLy8gc3dpdGNoIHBvaW50cyBpZiBheGlzIGlzIHJvdGF0ZWQsIG5vdCBhcHBsaWNhYmxlIGZvciBzdWIgY2hhcnRcclxuICAgICAgICAgIHZhciBpbmRleFggPSBjb25maWcuYXhpc19yb3RhdGVkID8gMSA6IDA7XHJcbiAgICAgICAgICB2YXIgaW5kZXhZID0gY29uZmlnLmF4aXNfcm90YXRlZCA/IDAgOiAxO1xyXG4gICAgICAgICAgdmFyIHBhdGggPSAnTSAnICtcclxuICAgICAgICAgICAgICBwb2ludHNbMF1baW5kZXhYXSArXHJcbiAgICAgICAgICAgICAgJywnICtcclxuICAgICAgICAgICAgICBwb2ludHNbMF1baW5kZXhZXSArXHJcbiAgICAgICAgICAgICAgJyAnICtcclxuICAgICAgICAgICAgICAnTCcgK1xyXG4gICAgICAgICAgICAgIHBvaW50c1sxXVtpbmRleFhdICtcclxuICAgICAgICAgICAgICAnLCcgK1xyXG4gICAgICAgICAgICAgIHBvaW50c1sxXVtpbmRleFldICtcclxuICAgICAgICAgICAgICAnICcgK1xyXG4gICAgICAgICAgICAgICdMJyArXHJcbiAgICAgICAgICAgICAgcG9pbnRzWzJdW2luZGV4WF0gK1xyXG4gICAgICAgICAgICAgICcsJyArXHJcbiAgICAgICAgICAgICAgcG9pbnRzWzJdW2luZGV4WV0gK1xyXG4gICAgICAgICAgICAgICcgJyArXHJcbiAgICAgICAgICAgICAgJ0wnICtcclxuICAgICAgICAgICAgICBwb2ludHNbM11baW5kZXhYXSArXHJcbiAgICAgICAgICAgICAgJywnICtcclxuICAgICAgICAgICAgICBwb2ludHNbM11baW5kZXhZXSArXHJcbiAgICAgICAgICAgICAgJyAnICtcclxuICAgICAgICAgICAgICAneic7XHJcbiAgICAgICAgICByZXR1cm4gcGF0aDtcclxuICAgICAgfTtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmdlbmVyYXRlR2V0QmFyUG9pbnRzID0gZnVuY3Rpb24gKGJhckluZGljZXMsIGlzU3ViKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXMsIGF4aXMgPSBpc1N1YiA/ICQkLnN1YlhBeGlzIDogJCQueEF4aXMsIGJhclRhcmdldHNOdW0gPSBiYXJJbmRpY2VzLl9fbWF4X18gKyAxLCBiYXJXID0gJCQuZ2V0QmFyVyhheGlzLCBiYXJUYXJnZXRzTnVtKSwgYmFyWCA9ICQkLmdldFNoYXBlWChiYXJXLCBiYXJUYXJnZXRzTnVtLCBiYXJJbmRpY2VzLCAhIWlzU3ViKSwgYmFyWSA9ICQkLmdldFNoYXBlWSghIWlzU3ViKSwgYmFyT2Zmc2V0ID0gJCQuZ2V0U2hhcGVPZmZzZXQoJCQuaXNCYXJUeXBlLCBiYXJJbmRpY2VzLCAhIWlzU3ViKSwgYmFyU3BhY2VPZmZzZXQgPSBiYXJXICogKCQkLmNvbmZpZy5iYXJfc3BhY2UgLyAyKSwgeVNjYWxlID0gaXNTdWIgPyAkJC5nZXRTdWJZU2NhbGUgOiAkJC5nZXRZU2NhbGU7XHJcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoZCwgaSkge1xyXG4gICAgICAgICAgdmFyIHkwID0geVNjYWxlLmNhbGwoJCQsIGQuaWQpKDApLCBvZmZzZXQgPSBiYXJPZmZzZXQoZCwgaSkgfHwgeTAsIC8vIG9mZnNldCBpcyBmb3Igc3RhY2tlZCBiYXIgY2hhcnRcclxuICAgICAgICAgIHBvc1ggPSBiYXJYKGQpLCBwb3NZID0gYmFyWShkKTtcclxuICAgICAgICAgIC8vIGZpeCBwb3NZIG5vdCB0byBvdmVyZmxvdyBvcHBvc2l0ZSBxdWFkcmFudFxyXG4gICAgICAgICAgaWYgKCQkLmNvbmZpZy5heGlzX3JvdGF0ZWQpIHtcclxuICAgICAgICAgICAgICBpZiAoKDAgPCBkLnZhbHVlICYmIHBvc1kgPCB5MCkgfHwgKGQudmFsdWUgPCAwICYmIHkwIDwgcG9zWSkpIHtcclxuICAgICAgICAgICAgICAgICAgcG9zWSA9IHkwO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHBvc1kgLT0geTAgLSBvZmZzZXQ7XHJcbiAgICAgICAgICAvLyA0IHBvaW50cyB0aGF0IG1ha2UgYSBiYXJcclxuICAgICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgICAgW3Bvc1ggKyBiYXJTcGFjZU9mZnNldCwgb2Zmc2V0XSxcclxuICAgICAgICAgICAgICBbcG9zWCArIGJhclNwYWNlT2Zmc2V0LCBwb3NZXSxcclxuICAgICAgICAgICAgICBbcG9zWCArIGJhclcgLSBiYXJTcGFjZU9mZnNldCwgcG9zWV0sXHJcbiAgICAgICAgICAgICAgW3Bvc1ggKyBiYXJXIC0gYmFyU3BhY2VPZmZzZXQsIG9mZnNldF1cclxuICAgICAgICAgIF07XHJcbiAgICAgIH07XHJcbiAgfTtcclxuICAvKipcclxuICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIGRhdGEgcG9pbnQgaXMgd2l0aGluIHRoZSBnaXZlbiBiYXIgc2hhcGUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gbW91c2VcclxuICAgKiBAcGFyYW0gYmFyU2hhcGVcclxuICAgKiBAcmV0dXJuIHtib29sZWFufVxyXG4gICAqL1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmlzV2l0aGluQmFyID0gZnVuY3Rpb24gKG1vdXNlLCBiYXJTaGFwZSkge1xyXG4gICAgICByZXR1cm4gaXNXaXRoaW5Cb3gobW91c2UsIGdldEJCb3goYmFyU2hhcGUpLCAyKTtcclxuICB9O1xuXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmdldFNoYXBlSW5kaWNlcyA9IGZ1bmN0aW9uICh0eXBlRmlsdGVyKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXMsIGNvbmZpZyA9ICQkLmNvbmZpZywgaW5kaWNlcyA9IHt9LCBpID0gMCwgaiwgaztcclxuICAgICAgJCQuZmlsdGVyVGFyZ2V0c1RvU2hvdygkJC5kYXRhLnRhcmdldHMuZmlsdGVyKHR5cGVGaWx0ZXIsICQkKSkuZm9yRWFjaChmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgZm9yIChqID0gMDsgaiA8IGNvbmZpZy5kYXRhX2dyb3Vwcy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgIGlmIChjb25maWcuZGF0YV9ncm91cHNbal0uaW5kZXhPZihkLmlkKSA8IDApIHtcclxuICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGZvciAoayA9IDA7IGsgPCBjb25maWcuZGF0YV9ncm91cHNbal0ubGVuZ3RoOyBrKyspIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5kYXRhX2dyb3Vwc1tqXVtrXSBpbiBpbmRpY2VzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBpbmRpY2VzW2QuaWRdID0gaW5kaWNlc1tjb25maWcuZGF0YV9ncm91cHNbal1ba11dO1xyXG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoaXNVbmRlZmluZWQoaW5kaWNlc1tkLmlkXSkpIHtcclxuICAgICAgICAgICAgICBpbmRpY2VzW2QuaWRdID0gaSsrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgaW5kaWNlcy5fX21heF9fID0gaSAtIDE7XHJcbiAgICAgIHJldHVybiBpbmRpY2VzO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuZ2V0U2hhcGVYID0gZnVuY3Rpb24gKG9mZnNldCwgdGFyZ2V0c051bSwgaW5kaWNlcywgaXNTdWIpIHtcclxuICAgICAgdmFyICQkID0gdGhpcywgc2NhbGUgPSBpc1N1YiA/ICQkLnN1YlggOiAkJC54O1xyXG4gICAgICByZXR1cm4gZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIHZhciBpbmRleCA9IGQuaWQgaW4gaW5kaWNlcyA/IGluZGljZXNbZC5pZF0gOiAwO1xyXG4gICAgICAgICAgcmV0dXJuIGQueCB8fCBkLnggPT09IDAgPyBzY2FsZShkLngpIC0gb2Zmc2V0ICogKHRhcmdldHNOdW0gLyAyIC0gaW5kZXgpIDogMDtcclxuICAgICAgfTtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmdldFNoYXBlWSA9IGZ1bmN0aW9uIChpc1N1Yikge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzO1xyXG4gICAgICByZXR1cm4gZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIHZhciBzY2FsZSA9IGlzU3ViID8gJCQuZ2V0U3ViWVNjYWxlKGQuaWQpIDogJCQuZ2V0WVNjYWxlKGQuaWQpO1xyXG4gICAgICAgICAgcmV0dXJuIHNjYWxlKCQkLmlzVGFyZ2V0Tm9ybWFsaXplZChkLmlkKSA/ICQkLmdldFJhdGlvKCdpbmRleCcsIGQsIHRydWUpIDogZC52YWx1ZSk7XHJcbiAgICAgIH07XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5nZXRTaGFwZU9mZnNldCA9IGZ1bmN0aW9uICh0eXBlRmlsdGVyLCBpbmRpY2VzLCBpc1N1Yikge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzLCB0YXJnZXRzID0gJCQub3JkZXJUYXJnZXRzKCQkLmZpbHRlclRhcmdldHNUb1Nob3coJCQuZGF0YS50YXJnZXRzLmZpbHRlcih0eXBlRmlsdGVyLCAkJCkpKSwgdGFyZ2V0SWRzID0gdGFyZ2V0cy5tYXAoZnVuY3Rpb24gKHQpIHtcclxuICAgICAgICAgIHJldHVybiB0LmlkO1xyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBpKSB7XHJcbiAgICAgICAgICB2YXIgc2NhbGUgPSBpc1N1YiA/ICQkLmdldFN1YllTY2FsZShkLmlkKSA6ICQkLmdldFlTY2FsZShkLmlkKSwgeTAgPSBzY2FsZSgwKSwgb2Zmc2V0ID0geTA7XHJcbiAgICAgICAgICB0YXJnZXRzLmZvckVhY2goZnVuY3Rpb24gKHQpIHtcclxuICAgICAgICAgICAgICB2YXIgcm93VmFsdWVzID0gJCQuaXNTdGVwVHlwZShkKVxyXG4gICAgICAgICAgICAgICAgICA/ICQkLmNvbnZlcnRWYWx1ZXNUb1N0ZXAodC52YWx1ZXMpXHJcbiAgICAgICAgICAgICAgICAgIDogdC52YWx1ZXM7XHJcbiAgICAgICAgICAgICAgdmFyIGlzVGFyZ2V0Tm9ybWFsaXplZCA9ICQkLmlzVGFyZ2V0Tm9ybWFsaXplZChkLmlkKTtcclxuICAgICAgICAgICAgICB2YXIgdmFsdWVzID0gcm93VmFsdWVzLm1hcChmdW5jdGlvbiAodikge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gaXNUYXJnZXROb3JtYWxpemVkID8gJCQuZ2V0UmF0aW8oJ2luZGV4JywgdiwgdHJ1ZSkgOiB2LnZhbHVlO1xyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIGlmICh0LmlkID09PSBkLmlkIHx8IGluZGljZXNbdC5pZF0gIT09IGluZGljZXNbZC5pZF0pIHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAodGFyZ2V0SWRzLmluZGV4T2YodC5pZCkgPCB0YXJnZXRJZHMuaW5kZXhPZihkLmlkKSkge1xyXG4gICAgICAgICAgICAgICAgICAvLyBjaGVjayBpZiB0aGUgeCB2YWx1ZXMgbGluZSB1cFxyXG4gICAgICAgICAgICAgICAgICBpZiAoaXNVbmRlZmluZWQocm93VmFsdWVzW2ldKSB8fCArcm93VmFsdWVzW2ldLnggIT09ICtkLngpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIC8vIFwiK1wiIGZvciB0aW1lc2VyaWVzXHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyBpZiBub3QsIHRyeSB0byBmaW5kIHRoZSB2YWx1ZSB0aGF0IGRvZXMgbGluZSB1cFxyXG4gICAgICAgICAgICAgICAgICAgICAgaSA9IC0xO1xyXG4gICAgICAgICAgICAgICAgICAgICAgcm93VmFsdWVzLmZvckVhY2goZnVuY3Rpb24gKHYsIGopIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeDEgPSB2LnguY29uc3RydWN0b3IgPT09IERhdGUgPyArdi54IDogdi54O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4MiA9IGQueC5jb25zdHJ1Y3RvciA9PT0gRGF0ZSA/ICtkLnggOiBkLng7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHgxID09PSB4Mikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gajtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBpZiAoaSBpbiByb3dWYWx1ZXMgJiYgcm93VmFsdWVzW2ldLnZhbHVlICogZC52YWx1ZSA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gc2NhbGUodmFsdWVzW2ldKSAtIHkwO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICByZXR1cm4gb2Zmc2V0O1xyXG4gICAgICB9O1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuaXNXaXRoaW5TaGFwZSA9IGZ1bmN0aW9uICh0aGF0LCBkKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXMsIHNoYXBlID0gJCQuZDMuc2VsZWN0KHRoYXQpLCBpc1dpdGhpbjtcclxuICAgICAgaWYgKCEkJC5pc1RhcmdldFRvU2hvdyhkLmlkKSkge1xyXG4gICAgICAgICAgaXNXaXRoaW4gPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGF0Lm5vZGVOYW1lID09PSAnY2lyY2xlJykge1xyXG4gICAgICAgICAgaXNXaXRoaW4gPSAkJC5pc1N0ZXBUeXBlKGQpXHJcbiAgICAgICAgICAgICAgPyAkJC5pc1dpdGhpblN0ZXAodGhhdCwgJCQuZ2V0WVNjYWxlKGQuaWQpKGQudmFsdWUpKVxyXG4gICAgICAgICAgICAgIDogJCQuaXNXaXRoaW5DaXJjbGUodGhhdCwgJCQucG9pbnRTZWxlY3RSKGQpICogMS41KTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGF0Lm5vZGVOYW1lID09PSAncGF0aCcpIHtcclxuICAgICAgICAgIGlzV2l0aGluID0gc2hhcGUuY2xhc3NlZChDTEFTUy5iYXIpXHJcbiAgICAgICAgICAgICAgPyAkJC5pc1dpdGhpbkJhcigkJC5kMy5tb3VzZSh0aGF0KSwgdGhhdClcclxuICAgICAgICAgICAgICA6IHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGlzV2l0aGluO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuZ2V0SW50ZXJwb2xhdGUgPSBmdW5jdGlvbiAoZCkge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzLCBkMyA9ICQkLmQzLCB0eXBlcyA9IHtcclxuICAgICAgICAgIGxpbmVhcjogZDMuY3VydmVMaW5lYXIsXHJcbiAgICAgICAgICAnbGluZWFyLWNsb3NlZCc6IGQzLmN1cnZlTGluZWFyQ2xvc2VkLFxyXG4gICAgICAgICAgYmFzaXM6IGQzLmN1cnZlQmFzaXMsXHJcbiAgICAgICAgICAnYmFzaXMtb3Blbic6IGQzLmN1cnZlQmFzaXNPcGVuLFxyXG4gICAgICAgICAgJ2Jhc2lzLWNsb3NlZCc6IGQzLmN1cnZlQmFzaXNDbG9zZWQsXHJcbiAgICAgICAgICBidW5kbGU6IGQzLmN1cnZlQnVuZGxlLFxyXG4gICAgICAgICAgY2FyZGluYWw6IGQzLmN1cnZlQ2FyZGluYWwsXHJcbiAgICAgICAgICAnY2FyZGluYWwtb3Blbic6IGQzLmN1cnZlQ2FyZGluYWxPcGVuLFxyXG4gICAgICAgICAgJ2NhcmRpbmFsLWNsb3NlZCc6IGQzLmN1cnZlQ2FyZGluYWxDbG9zZWQsXHJcbiAgICAgICAgICBtb25vdG9uZTogZDMuY3VydmVNb25vdG9uZVgsXHJcbiAgICAgICAgICBzdGVwOiBkMy5jdXJ2ZVN0ZXAsXHJcbiAgICAgICAgICAnc3RlcC1iZWZvcmUnOiBkMy5jdXJ2ZVN0ZXBCZWZvcmUsXHJcbiAgICAgICAgICAnc3RlcC1hZnRlcic6IGQzLmN1cnZlU3RlcEFmdGVyXHJcbiAgICAgIH0sIHR5cGU7XHJcbiAgICAgIGlmICgkJC5pc1NwbGluZVR5cGUoZCkpIHtcclxuICAgICAgICAgIHR5cGUgPSB0eXBlc1skJC5jb25maWcuc3BsaW5lX2ludGVycG9sYXRpb25fdHlwZV0gfHwgdHlwZXMuY2FyZGluYWw7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoJCQuaXNTdGVwVHlwZShkKSkge1xyXG4gICAgICAgICAgdHlwZSA9IHR5cGVzWyQkLmNvbmZpZy5saW5lX3N0ZXBfdHlwZV07XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB0eXBlID0gdHlwZXMubGluZWFyO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0eXBlO1xyXG4gIH07XG5cbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuaW5pdExpbmUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXM7XHJcbiAgICAgICQkLm1haW5cclxuICAgICAgICAgIC5zZWxlY3QoJy4nICsgQ0xBU1MuY2hhcnQpXHJcbiAgICAgICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgICAgIC5hdHRyKCdjbGFzcycsIENMQVNTLmNoYXJ0TGluZXMpO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUudXBkYXRlVGFyZ2V0c0ZvckxpbmUgPSBmdW5jdGlvbiAodGFyZ2V0cykge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzLCBjb25maWcgPSAkJC5jb25maWcsIG1haW5MaW5lcywgbWFpbkxpbmVFbnRlciwgY2xhc3NDaGFydExpbmUgPSAkJC5jbGFzc0NoYXJ0TGluZS5iaW5kKCQkKSwgY2xhc3NMaW5lcyA9ICQkLmNsYXNzTGluZXMuYmluZCgkJCksIGNsYXNzQXJlYXMgPSAkJC5jbGFzc0FyZWFzLmJpbmQoJCQpLCBjbGFzc0NpcmNsZXMgPSAkJC5jbGFzc0NpcmNsZXMuYmluZCgkJCksIGNsYXNzRm9jdXMgPSAkJC5jbGFzc0ZvY3VzLmJpbmQoJCQpO1xyXG4gICAgICBtYWluTGluZXMgPSAkJC5tYWluXHJcbiAgICAgICAgICAuc2VsZWN0KCcuJyArIENMQVNTLmNoYXJ0TGluZXMpXHJcbiAgICAgICAgICAuc2VsZWN0QWxsKCcuJyArIENMQVNTLmNoYXJ0TGluZSlcclxuICAgICAgICAgIC5kYXRhKHRhcmdldHMpXHJcbiAgICAgICAgICAuYXR0cignY2xhc3MnLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgcmV0dXJuIGNsYXNzQ2hhcnRMaW5lKGQpICsgY2xhc3NGb2N1cyhkKTtcclxuICAgICAgfSk7XHJcbiAgICAgIG1haW5MaW5lRW50ZXIgPSBtYWluTGluZXNcclxuICAgICAgICAgIC5lbnRlcigpXHJcbiAgICAgICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgICAgIC5hdHRyKCdjbGFzcycsIGNsYXNzQ2hhcnRMaW5lKVxyXG4gICAgICAgICAgLnN0eWxlKCdvcGFjaXR5JywgMClcclxuICAgICAgICAgIC5zdHlsZSgncG9pbnRlci1ldmVudHMnLCAnbm9uZScpO1xyXG4gICAgICAvLyBMaW5lcyBmb3IgZWFjaCBkYXRhXHJcbiAgICAgIG1haW5MaW5lRW50ZXIuYXBwZW5kKCdnJykuYXR0cignY2xhc3MnLCBjbGFzc0xpbmVzKTtcclxuICAgICAgLy8gQXJlYXNcclxuICAgICAgbWFpbkxpbmVFbnRlci5hcHBlbmQoJ2cnKS5hdHRyKCdjbGFzcycsIGNsYXNzQXJlYXMpO1xyXG4gICAgICAvLyBDaXJjbGVzIGZvciBlYWNoIGRhdGEgcG9pbnQgb24gbGluZXNcclxuICAgICAgbWFpbkxpbmVFbnRlci5hcHBlbmQoJ2cnKS5hdHRyKCdjbGFzcycsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICByZXR1cm4gJCQuZ2VuZXJhdGVDbGFzcyhDTEFTUy5zZWxlY3RlZENpcmNsZXMsIGQuaWQpO1xyXG4gICAgICB9KTtcclxuICAgICAgbWFpbkxpbmVFbnRlclxyXG4gICAgICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgICAgICAuYXR0cignY2xhc3MnLCBjbGFzc0NpcmNsZXMpXHJcbiAgICAgICAgICAuc3R5bGUoJ2N1cnNvcicsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICByZXR1cm4gY29uZmlnLmRhdGFfc2VsZWN0aW9uX2lzc2VsZWN0YWJsZShkKSA/ICdwb2ludGVyJyA6IG51bGw7XHJcbiAgICAgIH0pO1xyXG4gICAgICAvLyBVcGRhdGUgZGF0ZSBmb3Igc2VsZWN0ZWQgY2lyY2xlc1xyXG4gICAgICB0YXJnZXRzLmZvckVhY2goZnVuY3Rpb24gKHQpIHtcclxuICAgICAgICAgICQkLm1haW5cclxuICAgICAgICAgICAgICAuc2VsZWN0QWxsKCcuJyArIENMQVNTLnNlbGVjdGVkQ2lyY2xlcyArICQkLmdldFRhcmdldFNlbGVjdG9yU3VmZml4KHQuaWQpKVxyXG4gICAgICAgICAgICAgIC5zZWxlY3RBbGwoJy4nICsgQ0xBU1Muc2VsZWN0ZWRDaXJjbGUpXHJcbiAgICAgICAgICAgICAgLmVhY2goZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgICAgICBkLnZhbHVlID0gdC52YWx1ZXNbZC5pbmRleF0udmFsdWU7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICAgIC8vIE1FTU86IGNhbiBub3Qga2VlcCBzYW1lIGNvbG9yLi4uXHJcbiAgICAgIC8vbWFpbkxpbmVVcGRhdGUuZXhpdCgpLnJlbW92ZSgpO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUudXBkYXRlTGluZSA9IGZ1bmN0aW9uIChkdXJhdGlvbkZvckV4aXQpIHtcclxuICAgICAgdmFyICQkID0gdGhpcztcclxuICAgICAgdmFyIG1haW5MaW5lID0gJCQubWFpblxyXG4gICAgICAgICAgLnNlbGVjdEFsbCgnLicgKyBDTEFTUy5saW5lcylcclxuICAgICAgICAgIC5zZWxlY3RBbGwoJy4nICsgQ0xBU1MubGluZSlcclxuICAgICAgICAgIC5kYXRhKCQkLmxpbmVEYXRhLmJpbmQoJCQpKTtcclxuICAgICAgdmFyIG1haW5MaW5lRW50ZXIgPSBtYWluTGluZVxyXG4gICAgICAgICAgLmVudGVyKClcclxuICAgICAgICAgIC5hcHBlbmQoJ3BhdGgnKVxyXG4gICAgICAgICAgLmF0dHIoJ2NsYXNzJywgJCQuY2xhc3NMaW5lLmJpbmQoJCQpKVxyXG4gICAgICAgICAgLnN0eWxlKCdzdHJva2UnLCAkJC5jb2xvcik7XHJcbiAgICAgICQkLm1haW5MaW5lID0gbWFpbkxpbmVFbnRlclxyXG4gICAgICAgICAgLm1lcmdlKG1haW5MaW5lKVxyXG4gICAgICAgICAgLnN0eWxlKCdvcGFjaXR5JywgJCQuaW5pdGlhbE9wYWNpdHkuYmluZCgkJCkpXHJcbiAgICAgICAgICAuc3R5bGUoJ3NoYXBlLXJlbmRlcmluZycsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICByZXR1cm4gJCQuaXNTdGVwVHlwZShkKSA/ICdjcmlzcEVkZ2VzJyA6ICcnO1xyXG4gICAgICB9KVxyXG4gICAgICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIG51bGwpO1xyXG4gICAgICBtYWluTGluZVxyXG4gICAgICAgICAgLmV4aXQoKVxyXG4gICAgICAgICAgLnRyYW5zaXRpb24oKVxyXG4gICAgICAgICAgLmR1cmF0aW9uKGR1cmF0aW9uRm9yRXhpdClcclxuICAgICAgICAgIC5zdHlsZSgnb3BhY2l0eScsIDApO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUucmVkcmF3TGluZSA9IGZ1bmN0aW9uIChkcmF3TGluZSwgd2l0aFRyYW5zaXRpb24sIHRyYW5zaXRpb24pIHtcclxuICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICh3aXRoVHJhbnNpdGlvbiA/IHRoaXMubWFpbkxpbmUudHJhbnNpdGlvbih0cmFuc2l0aW9uKSA6IHRoaXMubWFpbkxpbmUpXHJcbiAgICAgICAgICAgICAgLmF0dHIoJ2QnLCBkcmF3TGluZSlcclxuICAgICAgICAgICAgICAuc3R5bGUoJ3N0cm9rZScsIHRoaXMuY29sb3IpXHJcbiAgICAgICAgICAgICAgLnN0eWxlKCdvcGFjaXR5JywgMSlcclxuICAgICAgXTtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmdlbmVyYXRlRHJhd0xpbmUgPSBmdW5jdGlvbiAobGluZUluZGljZXMsIGlzU3ViKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXMsIGNvbmZpZyA9ICQkLmNvbmZpZywgbGluZSA9ICQkLmQzLmxpbmUoKSwgZ2V0UG9pbnRzID0gJCQuZ2VuZXJhdGVHZXRMaW5lUG9pbnRzKGxpbmVJbmRpY2VzLCBpc1N1YiksIHlTY2FsZUdldHRlciA9IGlzU3ViID8gJCQuZ2V0U3ViWVNjYWxlIDogJCQuZ2V0WVNjYWxlLCB4VmFsdWUgPSBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgcmV0dXJuIChpc1N1YiA/ICQkLnN1Ynh4IDogJCQueHgpLmNhbGwoJCQsIGQpO1xyXG4gICAgICB9LCB5VmFsdWUgPSBmdW5jdGlvbiAoZCwgaSkge1xyXG4gICAgICAgICAgcmV0dXJuIGNvbmZpZy5kYXRhX2dyb3Vwcy5sZW5ndGggPiAwXHJcbiAgICAgICAgICAgICAgPyBnZXRQb2ludHMoZCwgaSlbMF1bMV1cclxuICAgICAgICAgICAgICA6IHlTY2FsZUdldHRlci5jYWxsKCQkLCBkLmlkKShkLnZhbHVlKTtcclxuICAgICAgfTtcclxuICAgICAgbGluZSA9IGNvbmZpZy5heGlzX3JvdGF0ZWRcclxuICAgICAgICAgID8gbGluZS54KHlWYWx1ZSkueSh4VmFsdWUpXHJcbiAgICAgICAgICA6IGxpbmUueCh4VmFsdWUpLnkoeVZhbHVlKTtcclxuICAgICAgaWYgKCFjb25maWcubGluZV9jb25uZWN0TnVsbCkge1xyXG4gICAgICAgICAgbGluZSA9IGxpbmUuZGVmaW5lZChmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBkLnZhbHVlICE9IG51bGw7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIHZhciB2YWx1ZXMgPSBjb25maWcubGluZV9jb25uZWN0TnVsbFxyXG4gICAgICAgICAgICAgID8gJCQuZmlsdGVyUmVtb3ZlTnVsbChkLnZhbHVlcylcclxuICAgICAgICAgICAgICA6IGQudmFsdWVzLCB4ID0gaXNTdWIgPyAkJC5zdWJYIDogJCQueCwgeSA9IHlTY2FsZUdldHRlci5jYWxsKCQkLCBkLmlkKSwgeDAgPSAwLCB5MCA9IDAsIHBhdGg7XHJcbiAgICAgICAgICBpZiAoJCQuaXNMaW5lVHlwZShkKSkge1xyXG4gICAgICAgICAgICAgIGlmIChjb25maWcuZGF0YV9yZWdpb25zW2QuaWRdKSB7XHJcbiAgICAgICAgICAgICAgICAgIHBhdGggPSAkJC5saW5lV2l0aFJlZ2lvbnModmFsdWVzLCB4LCB5LCBjb25maWcuZGF0YV9yZWdpb25zW2QuaWRdKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmICgkJC5pc1N0ZXBUeXBlKGQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgPSAkJC5jb252ZXJ0VmFsdWVzVG9TdGVwKHZhbHVlcyk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgcGF0aCA9IGxpbmUuY3VydmUoJCQuZ2V0SW50ZXJwb2xhdGUoZCkpKHZhbHVlcyk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgaWYgKHZhbHVlc1swXSkge1xyXG4gICAgICAgICAgICAgICAgICB4MCA9IHgodmFsdWVzWzBdLngpO1xyXG4gICAgICAgICAgICAgICAgICB5MCA9IHkodmFsdWVzWzBdLnZhbHVlKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgcGF0aCA9IGNvbmZpZy5heGlzX3JvdGF0ZWQgPyAnTSAnICsgeTAgKyAnICcgKyB4MCA6ICdNICcgKyB4MCArICcgJyArIHkwO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHBhdGggPyBwYXRoIDogJ00gMCAwJztcclxuICAgICAgfTtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmdlbmVyYXRlR2V0TGluZVBvaW50cyA9IGZ1bmN0aW9uIChsaW5lSW5kaWNlcywgaXNTdWIpIHtcclxuICAgICAgLy8gcGFydGlhbCBkdXBsaWNhdGlvbiBvZiBnZW5lcmF0ZUdldEJhclBvaW50c1xyXG4gICAgICB2YXIgJCQgPSB0aGlzLCBjb25maWcgPSAkJC5jb25maWcsIGxpbmVUYXJnZXRzTnVtID0gbGluZUluZGljZXMuX19tYXhfXyArIDEsIHggPSAkJC5nZXRTaGFwZVgoMCwgbGluZVRhcmdldHNOdW0sIGxpbmVJbmRpY2VzLCAhIWlzU3ViKSwgeSA9ICQkLmdldFNoYXBlWSghIWlzU3ViKSwgbGluZU9mZnNldCA9ICQkLmdldFNoYXBlT2Zmc2V0KCQkLmlzTGluZVR5cGUsIGxpbmVJbmRpY2VzLCAhIWlzU3ViKSwgeVNjYWxlID0gaXNTdWIgPyAkJC5nZXRTdWJZU2NhbGUgOiAkJC5nZXRZU2NhbGU7XHJcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoZCwgaSkge1xyXG4gICAgICAgICAgdmFyIHkwID0geVNjYWxlLmNhbGwoJCQsIGQuaWQpKDApLCBvZmZzZXQgPSBsaW5lT2Zmc2V0KGQsIGkpIHx8IHkwLCAvLyBvZmZzZXQgaXMgZm9yIHN0YWNrZWQgYXJlYSBjaGFydFxyXG4gICAgICAgICAgcG9zWCA9IHgoZCksIHBvc1kgPSB5KGQpO1xyXG4gICAgICAgICAgLy8gZml4IHBvc1kgbm90IHRvIG92ZXJmbG93IG9wcG9zaXRlIHF1YWRyYW50XHJcbiAgICAgICAgICBpZiAoY29uZmlnLmF4aXNfcm90YXRlZCkge1xyXG4gICAgICAgICAgICAgIGlmICgoMCA8IGQudmFsdWUgJiYgcG9zWSA8IHkwKSB8fCAoZC52YWx1ZSA8IDAgJiYgeTAgPCBwb3NZKSkge1xyXG4gICAgICAgICAgICAgICAgICBwb3NZID0geTA7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gMSBwb2ludCB0aGF0IG1hcmtzIHRoZSBsaW5lIHBvc2l0aW9uXHJcbiAgICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICAgIFtwb3NYLCBwb3NZIC0gKHkwIC0gb2Zmc2V0KV0sXHJcbiAgICAgICAgICAgICAgW3Bvc1gsIHBvc1kgLSAoeTAgLSBvZmZzZXQpXSxcclxuICAgICAgICAgICAgICBbcG9zWCwgcG9zWSAtICh5MCAtIG9mZnNldCldLFxyXG4gICAgICAgICAgICAgIFtwb3NYLCBwb3NZIC0gKHkwIC0gb2Zmc2V0KV0gLy8gbmVlZGVkIGZvciBjb21wYXRpYmlsaXR5XHJcbiAgICAgICAgICBdO1xyXG4gICAgICB9O1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUubGluZVdpdGhSZWdpb25zID0gZnVuY3Rpb24gKGQsIHgsIHksIF9yZWdpb25zKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXMsIGNvbmZpZyA9ICQkLmNvbmZpZywgcHJldiA9IC0xLCBpLCBqLCBzID0gJ00nLCBzV2l0aFJlZ2lvbiwgeHAsIHlwLCBkeCwgZHksIGRkLCBkaWZmLCBkaWZmeDIsIHhPZmZzZXQgPSAkJC5pc0NhdGVnb3JpemVkKCkgPyAwLjUgOiAwLCB4VmFsdWUsIHlWYWx1ZSwgcmVnaW9ucyA9IFtdO1xyXG4gICAgICBmdW5jdGlvbiBpc1dpdGhpblJlZ2lvbnMoeCwgcmVnaW9ucykge1xyXG4gICAgICAgICAgdmFyIGk7XHJcbiAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcmVnaW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgIGlmIChyZWdpb25zW2ldLnN0YXJ0IDwgeCAmJiB4IDw9IHJlZ2lvbnNbaV0uZW5kKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICAvLyBDaGVjayBzdGFydC9lbmQgb2YgcmVnaW9uc1xyXG4gICAgICBpZiAoaXNEZWZpbmVkKF9yZWdpb25zKSkge1xyXG4gICAgICAgICAgZm9yIChpID0gMDsgaSA8IF9yZWdpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgcmVnaW9uc1tpXSA9IHt9O1xyXG4gICAgICAgICAgICAgIGlmIChpc1VuZGVmaW5lZChfcmVnaW9uc1tpXS5zdGFydCkpIHtcclxuICAgICAgICAgICAgICAgICAgcmVnaW9uc1tpXS5zdGFydCA9IGRbMF0ueDtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIHJlZ2lvbnNbaV0uc3RhcnQgPSAkJC5pc1RpbWVTZXJpZXMoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgPyAkJC5wYXJzZURhdGUoX3JlZ2lvbnNbaV0uc3RhcnQpXHJcbiAgICAgICAgICAgICAgICAgICAgICA6IF9yZWdpb25zW2ldLnN0YXJ0O1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAoaXNVbmRlZmluZWQoX3JlZ2lvbnNbaV0uZW5kKSkge1xyXG4gICAgICAgICAgICAgICAgICByZWdpb25zW2ldLmVuZCA9IGRbZC5sZW5ndGggLSAxXS54O1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgcmVnaW9uc1tpXS5lbmQgPSAkJC5pc1RpbWVTZXJpZXMoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgPyAkJC5wYXJzZURhdGUoX3JlZ2lvbnNbaV0uZW5kKVxyXG4gICAgICAgICAgICAgICAgICAgICAgOiBfcmVnaW9uc1tpXS5lbmQ7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIC8vIFNldCBzY2FsZXNcclxuICAgICAgeFZhbHVlID0gY29uZmlnLmF4aXNfcm90YXRlZFxyXG4gICAgICAgICAgPyBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiB5KGQudmFsdWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgOiBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiB4KGQueCk7XHJcbiAgICAgICAgICB9O1xyXG4gICAgICB5VmFsdWUgPSBjb25maWcuYXhpc19yb3RhdGVkXHJcbiAgICAgICAgICA/IGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHgoZC54KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIDogZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgICAgICByZXR1cm4geShkLnZhbHVlKTtcclxuICAgICAgICAgIH07XHJcbiAgICAgIC8vIERlZmluZSBzdmcgZ2VuZXJhdG9yIGZ1bmN0aW9uIGZvciByZWdpb25cclxuICAgICAgZnVuY3Rpb24gZ2VuZXJhdGVNKHBvaW50cykge1xyXG4gICAgICAgICAgcmV0dXJuICgnTScgK1xyXG4gICAgICAgICAgICAgIHBvaW50c1swXVswXSArXHJcbiAgICAgICAgICAgICAgJyAnICtcclxuICAgICAgICAgICAgICBwb2ludHNbMF1bMV0gK1xyXG4gICAgICAgICAgICAgICcgJyArXHJcbiAgICAgICAgICAgICAgcG9pbnRzWzFdWzBdICtcclxuICAgICAgICAgICAgICAnICcgK1xyXG4gICAgICAgICAgICAgIHBvaW50c1sxXVsxXSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCQkLmlzVGltZVNlcmllcygpKSB7XHJcbiAgICAgICAgICBzV2l0aFJlZ2lvbiA9IGZ1bmN0aW9uIChkMCwgZDEsIGosIGRpZmYpIHtcclxuICAgICAgICAgICAgICB2YXIgeDAgPSBkMC54LmdldFRpbWUoKSwgeF9kaWZmID0gZDEueCAtIGQwLngsIHh2MCA9IG5ldyBEYXRlKHgwICsgeF9kaWZmICogaiksIHh2MSA9IG5ldyBEYXRlKHgwICsgeF9kaWZmICogKGogKyBkaWZmKSksIHBvaW50cztcclxuICAgICAgICAgICAgICBpZiAoY29uZmlnLmF4aXNfcm90YXRlZCkge1xyXG4gICAgICAgICAgICAgICAgICBwb2ludHMgPSBbXHJcbiAgICAgICAgICAgICAgICAgICAgICBbeSh5cChqKSksIHgoeHYwKV0sXHJcbiAgICAgICAgICAgICAgICAgICAgICBbeSh5cChqICsgZGlmZikpLCB4KHh2MSldXHJcbiAgICAgICAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBwb2ludHMgPSBbXHJcbiAgICAgICAgICAgICAgICAgICAgICBbeCh4djApLCB5KHlwKGopKV0sXHJcbiAgICAgICAgICAgICAgICAgICAgICBbeCh4djEpLCB5KHlwKGogKyBkaWZmKSldXHJcbiAgICAgICAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHJldHVybiBnZW5lcmF0ZU0ocG9pbnRzKTtcclxuICAgICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBzV2l0aFJlZ2lvbiA9IGZ1bmN0aW9uIChkMCwgZDEsIGosIGRpZmYpIHtcclxuICAgICAgICAgICAgICB2YXIgcG9pbnRzO1xyXG4gICAgICAgICAgICAgIGlmIChjb25maWcuYXhpc19yb3RhdGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgIHBvaW50cyA9IFtcclxuICAgICAgICAgICAgICAgICAgICAgIFt5KHlwKGopLCB0cnVlKSwgeCh4cChqKSldLFxyXG4gICAgICAgICAgICAgICAgICAgICAgW3koeXAoaiArIGRpZmYpLCB0cnVlKSwgeCh4cChqICsgZGlmZikpXVxyXG4gICAgICAgICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgcG9pbnRzID0gW1xyXG4gICAgICAgICAgICAgICAgICAgICAgW3goeHAoaiksIHRydWUpLCB5KHlwKGopKV0sXHJcbiAgICAgICAgICAgICAgICAgICAgICBbeCh4cChqICsgZGlmZiksIHRydWUpLCB5KHlwKGogKyBkaWZmKSldXHJcbiAgICAgICAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHJldHVybiBnZW5lcmF0ZU0ocG9pbnRzKTtcclxuICAgICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgICAgLy8gR2VuZXJhdGVcclxuICAgICAgZm9yIChpID0gMDsgaSA8IGQubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIC8vIERyYXcgYXMgbm9ybWFsXHJcbiAgICAgICAgICBpZiAoaXNVbmRlZmluZWQocmVnaW9ucykgfHwgIWlzV2l0aGluUmVnaW9ucyhkW2ldLngsIHJlZ2lvbnMpKSB7XHJcbiAgICAgICAgICAgICAgcyArPSAnICcgKyB4VmFsdWUoZFtpXSkgKyAnICcgKyB5VmFsdWUoZFtpXSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvLyBEcmF3IHdpdGggcmVnaW9uIC8vIFRPRE86IEZpeCBmb3IgaG9yaXpvdGFsIGNoYXJ0c1xyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgeHAgPSAkJC5nZXRTY2FsZShkW2kgLSAxXS54ICsgeE9mZnNldCwgZFtpXS54ICsgeE9mZnNldCwgJCQuaXNUaW1lU2VyaWVzKCkpO1xyXG4gICAgICAgICAgICAgIHlwID0gJCQuZ2V0U2NhbGUoZFtpIC0gMV0udmFsdWUsIGRbaV0udmFsdWUpO1xyXG4gICAgICAgICAgICAgIGR4ID0geChkW2ldLngpIC0geChkW2kgLSAxXS54KTtcclxuICAgICAgICAgICAgICBkeSA9IHkoZFtpXS52YWx1ZSkgLSB5KGRbaSAtIDFdLnZhbHVlKTtcclxuICAgICAgICAgICAgICBkZCA9IE1hdGguc3FydChNYXRoLnBvdyhkeCwgMikgKyBNYXRoLnBvdyhkeSwgMikpO1xyXG4gICAgICAgICAgICAgIGRpZmYgPSAyIC8gZGQ7XHJcbiAgICAgICAgICAgICAgZGlmZngyID0gZGlmZiAqIDI7XHJcbiAgICAgICAgICAgICAgZm9yIChqID0gZGlmZjsgaiA8PSAxOyBqICs9IGRpZmZ4Mikge1xyXG4gICAgICAgICAgICAgICAgICBzICs9IHNXaXRoUmVnaW9uKGRbaSAtIDFdLCBkW2ldLCBqLCBkaWZmKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBwcmV2ID0gZFtpXS54O1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBzO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUudXBkYXRlQXJlYSA9IGZ1bmN0aW9uIChkdXJhdGlvbkZvckV4aXQpIHtcclxuICAgICAgdmFyICQkID0gdGhpcywgZDMgPSAkJC5kMztcclxuICAgICAgdmFyIG1haW5BcmVhID0gJCQubWFpblxyXG4gICAgICAgICAgLnNlbGVjdEFsbCgnLicgKyBDTEFTUy5hcmVhcylcclxuICAgICAgICAgIC5zZWxlY3RBbGwoJy4nICsgQ0xBU1MuYXJlYSlcclxuICAgICAgICAgIC5kYXRhKCQkLmxpbmVEYXRhLmJpbmQoJCQpKTtcclxuICAgICAgdmFyIG1haW5BcmVhRW50ZXIgPSBtYWluQXJlYVxyXG4gICAgICAgICAgLmVudGVyKClcclxuICAgICAgICAgIC5hcHBlbmQoJ3BhdGgnKVxyXG4gICAgICAgICAgLmF0dHIoJ2NsYXNzJywgJCQuY2xhc3NBcmVhLmJpbmQoJCQpKVxyXG4gICAgICAgICAgLnN0eWxlKCdmaWxsJywgJCQuY29sb3IpXHJcbiAgICAgICAgICAuc3R5bGUoJ29wYWNpdHknLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAkJC5vcmdBcmVhT3BhY2l0eSA9ICtkMy5zZWxlY3QodGhpcykuc3R5bGUoJ29wYWNpdHknKTtcclxuICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICB9KTtcclxuICAgICAgJCQubWFpbkFyZWEgPSBtYWluQXJlYUVudGVyXHJcbiAgICAgICAgICAubWVyZ2UobWFpbkFyZWEpXHJcbiAgICAgICAgICAuc3R5bGUoJ29wYWNpdHknLCAkJC5vcmdBcmVhT3BhY2l0eSk7XHJcbiAgICAgIG1haW5BcmVhXHJcbiAgICAgICAgICAuZXhpdCgpXHJcbiAgICAgICAgICAudHJhbnNpdGlvbigpXHJcbiAgICAgICAgICAuZHVyYXRpb24oZHVyYXRpb25Gb3JFeGl0KVxyXG4gICAgICAgICAgLnN0eWxlKCdvcGFjaXR5JywgMCk7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5yZWRyYXdBcmVhID0gZnVuY3Rpb24gKGRyYXdBcmVhLCB3aXRoVHJhbnNpdGlvbiwgdHJhbnNpdGlvbikge1xyXG4gICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgKHdpdGhUcmFuc2l0aW9uID8gdGhpcy5tYWluQXJlYS50cmFuc2l0aW9uKHRyYW5zaXRpb24pIDogdGhpcy5tYWluQXJlYSlcclxuICAgICAgICAgICAgICAuYXR0cignZCcsIGRyYXdBcmVhKVxyXG4gICAgICAgICAgICAgIC5zdHlsZSgnZmlsbCcsIHRoaXMuY29sb3IpXHJcbiAgICAgICAgICAgICAgLnN0eWxlKCdvcGFjaXR5JywgdGhpcy5vcmdBcmVhT3BhY2l0eSlcclxuICAgICAgXTtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmdlbmVyYXRlRHJhd0FyZWEgPSBmdW5jdGlvbiAoYXJlYUluZGljZXMsIGlzU3ViKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXMsIGNvbmZpZyA9ICQkLmNvbmZpZywgYXJlYSA9ICQkLmQzLmFyZWEoKSwgZ2V0UG9pbnRzID0gJCQuZ2VuZXJhdGVHZXRBcmVhUG9pbnRzKGFyZWFJbmRpY2VzLCBpc1N1YiksIHlTY2FsZUdldHRlciA9IGlzU3ViID8gJCQuZ2V0U3ViWVNjYWxlIDogJCQuZ2V0WVNjYWxlLCB4VmFsdWUgPSBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgcmV0dXJuIChpc1N1YiA/ICQkLnN1Ynh4IDogJCQueHgpLmNhbGwoJCQsIGQpO1xyXG4gICAgICB9LCB2YWx1ZTAgPSBmdW5jdGlvbiAoZCwgaSkge1xyXG4gICAgICAgICAgcmV0dXJuIGNvbmZpZy5kYXRhX2dyb3Vwcy5sZW5ndGggPiAwXHJcbiAgICAgICAgICAgICAgPyBnZXRQb2ludHMoZCwgaSlbMF1bMV1cclxuICAgICAgICAgICAgICA6IHlTY2FsZUdldHRlci5jYWxsKCQkLCBkLmlkKSgkJC5nZXRBcmVhQmFzZVZhbHVlKGQuaWQpKTtcclxuICAgICAgfSwgdmFsdWUxID0gZnVuY3Rpb24gKGQsIGkpIHtcclxuICAgICAgICAgIHJldHVybiBjb25maWcuZGF0YV9ncm91cHMubGVuZ3RoID4gMFxyXG4gICAgICAgICAgICAgID8gZ2V0UG9pbnRzKGQsIGkpWzFdWzFdXHJcbiAgICAgICAgICAgICAgOiB5U2NhbGVHZXR0ZXIuY2FsbCgkJCwgZC5pZCkoZC52YWx1ZSk7XHJcbiAgICAgIH07XHJcbiAgICAgIGFyZWEgPSBjb25maWcuYXhpc19yb3RhdGVkXHJcbiAgICAgICAgICA/IGFyZWFcclxuICAgICAgICAgICAgICAueDAodmFsdWUwKVxyXG4gICAgICAgICAgICAgIC54MSh2YWx1ZTEpXHJcbiAgICAgICAgICAgICAgLnkoeFZhbHVlKVxyXG4gICAgICAgICAgOiBhcmVhXHJcbiAgICAgICAgICAgICAgLngoeFZhbHVlKVxyXG4gICAgICAgICAgICAgIC55MChjb25maWcuYXJlYV9hYm92ZSA/IDAgOiB2YWx1ZTApXHJcbiAgICAgICAgICAgICAgLnkxKHZhbHVlMSk7XHJcbiAgICAgIGlmICghY29uZmlnLmxpbmVfY29ubmVjdE51bGwpIHtcclxuICAgICAgICAgIGFyZWEgPSBhcmVhLmRlZmluZWQoZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gZC52YWx1ZSAhPT0gbnVsbDtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgdmFyIHZhbHVlcyA9IGNvbmZpZy5saW5lX2Nvbm5lY3ROdWxsXHJcbiAgICAgICAgICAgICAgPyAkJC5maWx0ZXJSZW1vdmVOdWxsKGQudmFsdWVzKVxyXG4gICAgICAgICAgICAgIDogZC52YWx1ZXMsIHgwID0gMCwgeTAgPSAwLCBwYXRoO1xyXG4gICAgICAgICAgaWYgKCQkLmlzQXJlYVR5cGUoZCkpIHtcclxuICAgICAgICAgICAgICBpZiAoJCQuaXNTdGVwVHlwZShkKSkge1xyXG4gICAgICAgICAgICAgICAgICB2YWx1ZXMgPSAkJC5jb252ZXJ0VmFsdWVzVG9TdGVwKHZhbHVlcyk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHBhdGggPSBhcmVhLmN1cnZlKCQkLmdldEludGVycG9sYXRlKGQpKSh2YWx1ZXMpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgaWYgKHZhbHVlc1swXSkge1xyXG4gICAgICAgICAgICAgICAgICB4MCA9ICQkLngodmFsdWVzWzBdLngpO1xyXG4gICAgICAgICAgICAgICAgICB5MCA9ICQkLmdldFlTY2FsZShkLmlkKSh2YWx1ZXNbMF0udmFsdWUpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBwYXRoID0gY29uZmlnLmF4aXNfcm90YXRlZCA/ICdNICcgKyB5MCArICcgJyArIHgwIDogJ00gJyArIHgwICsgJyAnICsgeTA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcGF0aCA/IHBhdGggOiAnTSAwIDAnO1xyXG4gICAgICB9O1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuZ2V0QXJlYUJhc2VWYWx1ZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgcmV0dXJuIDA7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5nZW5lcmF0ZUdldEFyZWFQb2ludHMgPSBmdW5jdGlvbiAoYXJlYUluZGljZXMsIGlzU3ViKSB7XHJcbiAgICAgIC8vIHBhcnRpYWwgZHVwbGljYXRpb24gb2YgZ2VuZXJhdGVHZXRCYXJQb2ludHNcclxuICAgICAgdmFyICQkID0gdGhpcywgY29uZmlnID0gJCQuY29uZmlnLCBhcmVhVGFyZ2V0c051bSA9IGFyZWFJbmRpY2VzLl9fbWF4X18gKyAxLCB4ID0gJCQuZ2V0U2hhcGVYKDAsIGFyZWFUYXJnZXRzTnVtLCBhcmVhSW5kaWNlcywgISFpc1N1YiksIHkgPSAkJC5nZXRTaGFwZVkoISFpc1N1YiksIGFyZWFPZmZzZXQgPSAkJC5nZXRTaGFwZU9mZnNldCgkJC5pc0FyZWFUeXBlLCBhcmVhSW5kaWNlcywgISFpc1N1YiksIHlTY2FsZSA9IGlzU3ViID8gJCQuZ2V0U3ViWVNjYWxlIDogJCQuZ2V0WVNjYWxlO1xyXG4gICAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGkpIHtcclxuICAgICAgICAgIHZhciB5MCA9IHlTY2FsZS5jYWxsKCQkLCBkLmlkKSgwKSwgb2Zmc2V0ID0gYXJlYU9mZnNldChkLCBpKSB8fCB5MCwgLy8gb2Zmc2V0IGlzIGZvciBzdGFja2VkIGFyZWEgY2hhcnRcclxuICAgICAgICAgIHBvc1ggPSB4KGQpLCBwb3NZID0geShkKTtcclxuICAgICAgICAgIC8vIGZpeCBwb3NZIG5vdCB0byBvdmVyZmxvdyBvcHBvc2l0ZSBxdWFkcmFudFxyXG4gICAgICAgICAgaWYgKGNvbmZpZy5heGlzX3JvdGF0ZWQpIHtcclxuICAgICAgICAgICAgICBpZiAoKDAgPCBkLnZhbHVlICYmIHBvc1kgPCB5MCkgfHwgKGQudmFsdWUgPCAwICYmIHkwIDwgcG9zWSkpIHtcclxuICAgICAgICAgICAgICAgICAgcG9zWSA9IHkwO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vIDEgcG9pbnQgdGhhdCBtYXJrcyB0aGUgYXJlYSBwb3NpdGlvblxyXG4gICAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgICBbcG9zWCwgb2Zmc2V0XSxcclxuICAgICAgICAgICAgICBbcG9zWCwgcG9zWSAtICh5MCAtIG9mZnNldCldLFxyXG4gICAgICAgICAgICAgIFtwb3NYLCBwb3NZIC0gKHkwIC0gb2Zmc2V0KV0sXHJcbiAgICAgICAgICAgICAgW3Bvc1gsIG9mZnNldF0gLy8gbmVlZGVkIGZvciBjb21wYXRpYmlsaXR5XHJcbiAgICAgICAgICBdO1xyXG4gICAgICB9O1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUudXBkYXRlQ2lyY2xlID0gZnVuY3Rpb24gKGN4LCBjeSkge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzO1xyXG4gICAgICB2YXIgbWFpbkNpcmNsZSA9ICQkLm1haW5cclxuICAgICAgICAgIC5zZWxlY3RBbGwoJy4nICsgQ0xBU1MuY2lyY2xlcylcclxuICAgICAgICAgIC5zZWxlY3RBbGwoJy4nICsgQ0xBU1MuY2lyY2xlKVxyXG4gICAgICAgICAgLmRhdGEoJCQubGluZU9yU2NhdHRlck9yU3RhbmZvcmREYXRhLmJpbmQoJCQpKTtcclxuICAgICAgdmFyIG1haW5DaXJjbGVFbnRlciA9IG1haW5DaXJjbGVcclxuICAgICAgICAgIC5lbnRlcigpXHJcbiAgICAgICAgICAuYXBwZW5kKCdjaXJjbGUnKVxyXG4gICAgICAgICAgLmF0dHIoJ3NoYXBlLXJlbmRlcmluZycsICQkLmlzU3RhbmZvcmRHcmFwaFR5cGUoKSA/ICdjcmlzcEVkZ2VzJyA6ICcnKVxyXG4gICAgICAgICAgLmF0dHIoJ2NsYXNzJywgJCQuY2xhc3NDaXJjbGUuYmluZCgkJCkpXHJcbiAgICAgICAgICAuYXR0cignY3gnLCBjeClcclxuICAgICAgICAgIC5hdHRyKCdjeScsIGN5KVxyXG4gICAgICAgICAgLmF0dHIoJ3InLCAkJC5wb2ludFIuYmluZCgkJCkpXHJcbiAgICAgICAgICAuc3R5bGUoJ2NvbG9yJywgJCQuaXNTdGFuZm9yZEdyYXBoVHlwZSgpID8gJCQuZ2V0U3RhbmZvcmRQb2ludENvbG9yLmJpbmQoJCQpIDogJCQuY29sb3IpO1xyXG4gICAgICAkJC5tYWluQ2lyY2xlID0gbWFpbkNpcmNsZUVudGVyXHJcbiAgICAgICAgICAubWVyZ2UobWFpbkNpcmNsZSlcclxuICAgICAgICAgIC5zdHlsZSgnb3BhY2l0eScsICQkLmlzU3RhbmZvcmRHcmFwaFR5cGUoKSA/IDEgOiAkJC5pbml0aWFsT3BhY2l0eUZvckNpcmNsZS5iaW5kKCQkKSk7XHJcbiAgICAgIG1haW5DaXJjbGUuZXhpdCgpLnN0eWxlKCdvcGFjaXR5JywgMCk7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5yZWRyYXdDaXJjbGUgPSBmdW5jdGlvbiAoY3gsIGN5LCB3aXRoVHJhbnNpdGlvbiwgdHJhbnNpdGlvbikge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzLCBzZWxlY3RlZENpcmNsZXMgPSAkJC5tYWluLnNlbGVjdEFsbCgnLicgKyBDTEFTUy5zZWxlY3RlZENpcmNsZSk7XHJcbiAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAod2l0aFRyYW5zaXRpb24gPyAkJC5tYWluQ2lyY2xlLnRyYW5zaXRpb24odHJhbnNpdGlvbikgOiAkJC5tYWluQ2lyY2xlKVxyXG4gICAgICAgICAgICAgIC5zdHlsZSgnb3BhY2l0eScsIHRoaXMub3BhY2l0eUZvckNpcmNsZS5iaW5kKCQkKSlcclxuICAgICAgICAgICAgICAuc3R5bGUoJ2NvbG9yJywgJCQuaXNTdGFuZm9yZEdyYXBoVHlwZSgpID8gJCQuZ2V0U3RhbmZvcmRQb2ludENvbG9yLmJpbmQoJCQpIDogJCQuY29sb3IpXHJcbiAgICAgICAgICAgICAgLmF0dHIoJ2N4JywgY3gpXHJcbiAgICAgICAgICAgICAgLmF0dHIoJ2N5JywgY3kpLFxyXG4gICAgICAgICAgKHdpdGhUcmFuc2l0aW9uID8gc2VsZWN0ZWRDaXJjbGVzLnRyYW5zaXRpb24odHJhbnNpdGlvbikgOiBzZWxlY3RlZENpcmNsZXMpXHJcbiAgICAgICAgICAgICAgLmF0dHIoJ2N4JywgY3gpXHJcbiAgICAgICAgICAgICAgLmF0dHIoJ2N5JywgY3kpXHJcbiAgICAgIF07XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5jaXJjbGVYID0gZnVuY3Rpb24gKGQpIHtcclxuICAgICAgcmV0dXJuIGQueCB8fCBkLnggPT09IDAgPyB0aGlzLngoZC54KSA6IG51bGw7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS51cGRhdGVDaXJjbGVZID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzLCBsaW5lSW5kaWNlcywgZ2V0UG9pbnRzO1xyXG4gICAgICBpZiAoJCQuY29uZmlnLmRhdGFfZ3JvdXBzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIChsaW5lSW5kaWNlcyA9ICQkLmdldFNoYXBlSW5kaWNlcygkJC5pc0xpbmVUeXBlKSksXHJcbiAgICAgICAgICAgICAgKGdldFBvaW50cyA9ICQkLmdlbmVyYXRlR2V0TGluZVBvaW50cyhsaW5lSW5kaWNlcykpO1xyXG4gICAgICAgICAgJCQuY2lyY2xlWSA9IGZ1bmN0aW9uIChkLCBpKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGdldFBvaW50cyhkLCBpKVswXVsxXTtcclxuICAgICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAkJC5jaXJjbGVZID0gZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gJCQuZ2V0WVNjYWxlKGQuaWQpKGQudmFsdWUpO1xyXG4gICAgICAgICAgfTtcclxuICAgICAgfVxyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuZ2V0Q2lyY2xlcyA9IGZ1bmN0aW9uIChpLCBpZCkge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzO1xyXG4gICAgICByZXR1cm4gKGlkXHJcbiAgICAgICAgICA/ICQkLm1haW4uc2VsZWN0QWxsKCcuJyArIENMQVNTLmNpcmNsZXMgKyAkJC5nZXRUYXJnZXRTZWxlY3RvclN1ZmZpeChpZCkpXHJcbiAgICAgICAgICA6ICQkLm1haW4pLnNlbGVjdEFsbCgnLicgKyBDTEFTUy5jaXJjbGUgKyAoaXNWYWx1ZShpKSA/ICctJyArIGkgOiAnJykpO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuZXhwYW5kQ2lyY2xlcyA9IGZ1bmN0aW9uIChpLCBpZCwgcmVzZXQpIHtcclxuICAgICAgdmFyICQkID0gdGhpcywgciA9ICQkLnBvaW50RXhwYW5kZWRSLmJpbmQoJCQpO1xyXG4gICAgICBpZiAocmVzZXQpIHtcclxuICAgICAgICAgICQkLnVuZXhwYW5kQ2lyY2xlcygpO1xyXG4gICAgICB9XHJcbiAgICAgICQkLmdldENpcmNsZXMoaSwgaWQpXHJcbiAgICAgICAgICAuY2xhc3NlZChDTEFTUy5FWFBBTkRFRCwgdHJ1ZSlcclxuICAgICAgICAgIC5hdHRyKCdyJywgcik7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS51bmV4cGFuZENpcmNsZXMgPSBmdW5jdGlvbiAoaSkge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzLCByID0gJCQucG9pbnRSLmJpbmQoJCQpO1xyXG4gICAgICAkJC5nZXRDaXJjbGVzKGkpXHJcbiAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgIHJldHVybiAkJC5kMy5zZWxlY3QodGhpcykuY2xhc3NlZChDTEFTUy5FWFBBTkRFRCk7XHJcbiAgICAgIH0pXHJcbiAgICAgICAgICAuY2xhc3NlZChDTEFTUy5FWFBBTkRFRCwgZmFsc2UpXHJcbiAgICAgICAgICAuYXR0cigncicsIHIpO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUucG9pbnRSID0gZnVuY3Rpb24gKGQpIHtcclxuICAgICAgdmFyICQkID0gdGhpcywgY29uZmlnID0gJCQuY29uZmlnO1xyXG4gICAgICByZXR1cm4gJCQuaXNTdGVwVHlwZShkKVxyXG4gICAgICAgICAgPyAwXHJcbiAgICAgICAgICA6IGlzRnVuY3Rpb24oY29uZmlnLnBvaW50X3IpXHJcbiAgICAgICAgICAgICAgPyBjb25maWcucG9pbnRfcihkKVxyXG4gICAgICAgICAgICAgIDogY29uZmlnLnBvaW50X3I7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5wb2ludEV4cGFuZGVkUiA9IGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXMsIGNvbmZpZyA9ICQkLmNvbmZpZztcclxuICAgICAgaWYgKGNvbmZpZy5wb2ludF9mb2N1c19leHBhbmRfZW5hYmxlZCkge1xyXG4gICAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb24oY29uZmlnLnBvaW50X2ZvY3VzX2V4cGFuZF9yKVxyXG4gICAgICAgICAgICAgID8gY29uZmlnLnBvaW50X2ZvY3VzX2V4cGFuZF9yKGQpXHJcbiAgICAgICAgICAgICAgOiBjb25maWcucG9pbnRfZm9jdXNfZXhwYW5kX3JcclxuICAgICAgICAgICAgICAgICAgPyBjb25maWcucG9pbnRfZm9jdXNfZXhwYW5kX3JcclxuICAgICAgICAgICAgICAgICAgOiAkJC5wb2ludFIoZCkgKiAxLjc1O1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuICQkLnBvaW50UihkKTtcclxuICAgICAgfVxyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUucG9pbnRTZWxlY3RSID0gZnVuY3Rpb24gKGQpIHtcclxuICAgICAgdmFyICQkID0gdGhpcywgY29uZmlnID0gJCQuY29uZmlnO1xyXG4gICAgICByZXR1cm4gaXNGdW5jdGlvbihjb25maWcucG9pbnRfc2VsZWN0X3IpXHJcbiAgICAgICAgICA/IGNvbmZpZy5wb2ludF9zZWxlY3RfcihkKVxyXG4gICAgICAgICAgOiBjb25maWcucG9pbnRfc2VsZWN0X3JcclxuICAgICAgICAgICAgICA/IGNvbmZpZy5wb2ludF9zZWxlY3RfclxyXG4gICAgICAgICAgICAgIDogJCQucG9pbnRSKGQpICogNDtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmlzV2l0aGluQ2lyY2xlID0gZnVuY3Rpb24gKHRoYXQsIHIpIHtcclxuICAgICAgdmFyIGQzID0gdGhpcy5kMywgbW91c2UgPSBkMy5tb3VzZSh0aGF0KSwgZDNfdGhpcyA9IGQzLnNlbGVjdCh0aGF0KSwgY3ggPSArZDNfdGhpcy5hdHRyKCdjeCcpLCBjeSA9ICtkM190aGlzLmF0dHIoJ2N5Jyk7XHJcbiAgICAgIHJldHVybiBNYXRoLnNxcnQoTWF0aC5wb3coY3ggLSBtb3VzZVswXSwgMikgKyBNYXRoLnBvdyhjeSAtIG1vdXNlWzFdLCAyKSkgPCByO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuaXNXaXRoaW5TdGVwID0gZnVuY3Rpb24gKHRoYXQsIHkpIHtcclxuICAgICAgcmV0dXJuIE1hdGguYWJzKHkgLSB0aGlzLmQzLm1vdXNlKHRoYXQpWzFdKSA8IDMwO1xyXG4gIH07XG5cbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuZ2V0Q3VycmVudFdpZHRoID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzLCBjb25maWcgPSAkJC5jb25maWc7XHJcbiAgICAgIHJldHVybiBjb25maWcuc2l6ZV93aWR0aCA/IGNvbmZpZy5zaXplX3dpZHRoIDogJCQuZ2V0UGFyZW50V2lkdGgoKTtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmdldEN1cnJlbnRIZWlnaHQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXMsIGNvbmZpZyA9ICQkLmNvbmZpZywgaCA9IGNvbmZpZy5zaXplX2hlaWdodCA/IGNvbmZpZy5zaXplX2hlaWdodCA6ICQkLmdldFBhcmVudEhlaWdodCgpO1xyXG4gICAgICByZXR1cm4gaCA+IDBcclxuICAgICAgICAgID8gaFxyXG4gICAgICAgICAgOiAzMjAgLyAoJCQuaGFzVHlwZSgnZ2F1Z2UnKSAmJiAhY29uZmlnLmdhdWdlX2Z1bGxDaXJjbGUgPyAyIDogMSk7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5nZXRDdXJyZW50UGFkZGluZ1RvcCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgdmFyICQkID0gdGhpcywgY29uZmlnID0gJCQuY29uZmlnLCBwYWRkaW5nID0gaXNWYWx1ZShjb25maWcucGFkZGluZ190b3ApID8gY29uZmlnLnBhZGRpbmdfdG9wIDogMDtcclxuICAgICAgaWYgKCQkLnRpdGxlICYmICQkLnRpdGxlLm5vZGUoKSkge1xyXG4gICAgICAgICAgcGFkZGluZyArPSAkJC5nZXRUaXRsZVBhZGRpbmcoKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gcGFkZGluZztcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmdldEN1cnJlbnRQYWRkaW5nQm90dG9tID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgY29uZmlnID0gdGhpcy5jb25maWc7XHJcbiAgICAgIHJldHVybiBpc1ZhbHVlKGNvbmZpZy5wYWRkaW5nX2JvdHRvbSkgPyBjb25maWcucGFkZGluZ19ib3R0b20gOiAwO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuZ2V0Q3VycmVudFBhZGRpbmdMZWZ0ID0gZnVuY3Rpb24gKHdpdGhvdXRSZWNvbXB1dGUpIHtcclxuICAgICAgdmFyICQkID0gdGhpcywgY29uZmlnID0gJCQuY29uZmlnO1xyXG4gICAgICBpZiAoaXNWYWx1ZShjb25maWcucGFkZGluZ19sZWZ0KSkge1xyXG4gICAgICAgICAgcmV0dXJuIGNvbmZpZy5wYWRkaW5nX2xlZnQ7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoY29uZmlnLmF4aXNfcm90YXRlZCkge1xyXG4gICAgICAgICAgcmV0dXJuICFjb25maWcuYXhpc194X3Nob3cgfHwgY29uZmlnLmF4aXNfeF9pbm5lclxyXG4gICAgICAgICAgICAgID8gMVxyXG4gICAgICAgICAgICAgIDogTWF0aC5tYXgoY2VpbDEwKCQkLmdldEF4aXNXaWR0aEJ5QXhpc0lkKCd4Jywgd2l0aG91dFJlY29tcHV0ZSkpLCA0MCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoIWNvbmZpZy5heGlzX3lfc2hvdyB8fCBjb25maWcuYXhpc195X2lubmVyKSB7XHJcbiAgICAgICAgICAvLyAmJiAhY29uZmlnLmF4aXNfcm90YXRlZFxyXG4gICAgICAgICAgcmV0dXJuICQkLmF4aXMuZ2V0WUF4aXNMYWJlbFBvc2l0aW9uKCkuaXNPdXRlciA/IDMwIDogMTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICAgIHJldHVybiBjZWlsMTAoJCQuZ2V0QXhpc1dpZHRoQnlBeGlzSWQoJ3knLCB3aXRob3V0UmVjb21wdXRlKSk7XHJcbiAgICAgIH1cclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmdldEN1cnJlbnRQYWRkaW5nUmlnaHQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXMsIGNvbmZpZyA9ICQkLmNvbmZpZywgcGFkZGluZyA9IDAsIGRlZmF1bHRQYWRkaW5nID0gMTAsIGxlZ2VuZFdpZHRoT25SaWdodCA9ICQkLmlzTGVnZW5kUmlnaHQgPyAkJC5nZXRMZWdlbmRXaWR0aCgpICsgMjAgOiAwO1xyXG4gICAgICBpZiAoaXNWYWx1ZShjb25maWcucGFkZGluZ19yaWdodCkpIHtcclxuICAgICAgICAgIHBhZGRpbmcgPSBjb25maWcucGFkZGluZ19yaWdodCArIDE7IC8vIDEgaXMgbmVlZGVkIG5vdCB0byBoaWRlIHRpY2sgbGluZVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKGNvbmZpZy5heGlzX3JvdGF0ZWQpIHtcclxuICAgICAgICAgIHBhZGRpbmcgPSBkZWZhdWx0UGFkZGluZyArIGxlZ2VuZFdpZHRoT25SaWdodDtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICghY29uZmlnLmF4aXNfeTJfc2hvdyB8fCBjb25maWcuYXhpc195Ml9pbm5lcikge1xyXG4gICAgICAgICAgLy8gJiYgIWNvbmZpZy5heGlzX3JvdGF0ZWRcclxuICAgICAgICAgIHBhZGRpbmcgPVxyXG4gICAgICAgICAgICAgIDIgK1xyXG4gICAgICAgICAgICAgICAgICBsZWdlbmRXaWR0aE9uUmlnaHQgK1xyXG4gICAgICAgICAgICAgICAgICAoJCQuYXhpcy5nZXRZMkF4aXNMYWJlbFBvc2l0aW9uKCkuaXNPdXRlciA/IDIwIDogMCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBwYWRkaW5nID0gY2VpbDEwKCQkLmdldEF4aXNXaWR0aEJ5QXhpc0lkKCd5MicpKSArIGxlZ2VuZFdpZHRoT25SaWdodDtcclxuICAgICAgfVxyXG4gICAgICBpZiAoJCQuY29sb3JTY2FsZSAmJiAkJC5jb2xvclNjYWxlLm5vZGUoKSkge1xyXG4gICAgICAgICAgcGFkZGluZyArPSAkJC5nZXRDb2xvclNjYWxlUGFkZGluZygpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBwYWRkaW5nO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuZ2V0UGFyZW50UmVjdFZhbHVlID0gZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICB2YXIgcGFyZW50ID0gdGhpcy5zZWxlY3RDaGFydC5ub2RlKCksIHY7XHJcbiAgICAgIHdoaWxlIChwYXJlbnQgJiYgcGFyZW50LnRhZ05hbWUgIT09ICdCT0RZJykge1xyXG4gICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICB2ID0gcGFyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW2tleV07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgIGlmIChrZXkgPT09ICd3aWR0aCcpIHtcclxuICAgICAgICAgICAgICAgICAgLy8gSW4gSUUgaW4gY2VydGFpbiBjYXNlcyBnZXRCb3VuZGluZ0NsaWVudFJlY3RcclxuICAgICAgICAgICAgICAgICAgLy8gd2lsbCBjYXVzZSBhbiBcInVuc3BlY2lmaWVkIGVycm9yXCJcclxuICAgICAgICAgICAgICAgICAgdiA9IHBhcmVudC5vZmZzZXRXaWR0aDtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAodikge1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcGFyZW50ID0gcGFyZW50LnBhcmVudE5vZGU7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5nZXRQYXJlbnRXaWR0aCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZ2V0UGFyZW50UmVjdFZhbHVlKCd3aWR0aCcpO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuZ2V0UGFyZW50SGVpZ2h0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgaCA9IHRoaXMuc2VsZWN0Q2hhcnQuc3R5bGUoJ2hlaWdodCcpO1xyXG4gICAgICByZXR1cm4gaC5pbmRleE9mKCdweCcpID4gMCA/ICtoLnJlcGxhY2UoJ3B4JywgJycpIDogMDtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmdldFN2Z0xlZnQgPSBmdW5jdGlvbiAod2l0aG91dFJlY29tcHV0ZSkge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzLCBjb25maWcgPSAkJC5jb25maWcsIGhhc0xlZnRBeGlzUmVjdCA9IGNvbmZpZy5heGlzX3JvdGF0ZWQgfHwgKCFjb25maWcuYXhpc19yb3RhdGVkICYmICFjb25maWcuYXhpc195X2lubmVyKSwgbGVmdEF4aXNDbGFzcyA9IGNvbmZpZy5heGlzX3JvdGF0ZWQgPyBDTEFTUy5heGlzWCA6IENMQVNTLmF4aXNZLCBsZWZ0QXhpcyA9ICQkLm1haW4uc2VsZWN0KCcuJyArIGxlZnRBeGlzQ2xhc3MpLm5vZGUoKSwgc3ZnUmVjdCA9IGxlZnRBeGlzICYmIGhhc0xlZnRBeGlzUmVjdFxyXG4gICAgICAgICAgPyBsZWZ0QXhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxyXG4gICAgICAgICAgOiB7IHJpZ2h0OiAwIH0sIGNoYXJ0UmVjdCA9ICQkLnNlbGVjdENoYXJ0Lm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSwgaGFzQXJjID0gJCQuaGFzQXJjVHlwZSgpLCBzdmdMZWZ0ID0gc3ZnUmVjdC5yaWdodCAtXHJcbiAgICAgICAgICBjaGFydFJlY3QubGVmdCAtXHJcbiAgICAgICAgICAoaGFzQXJjID8gMCA6ICQkLmdldEN1cnJlbnRQYWRkaW5nTGVmdCh3aXRob3V0UmVjb21wdXRlKSk7XHJcbiAgICAgIHJldHVybiBzdmdMZWZ0ID4gMCA/IHN2Z0xlZnQgOiAwO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuZ2V0QXhpc1dpZHRoQnlBeGlzSWQgPSBmdW5jdGlvbiAoaWQsIHdpdGhvdXRSZWNvbXB1dGUpIHtcclxuICAgICAgdmFyICQkID0gdGhpcywgcG9zaXRpb24gPSAkJC5heGlzLmdldExhYmVsUG9zaXRpb25CeUlkKGlkKTtcclxuICAgICAgcmV0dXJuICgkJC5heGlzLmdldE1heFRpY2tXaWR0aChpZCwgd2l0aG91dFJlY29tcHV0ZSkgKyAocG9zaXRpb24uaXNJbm5lciA/IDIwIDogNDApKTtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmdldEhvcml6b250YWxBeGlzSGVpZ2h0ID0gZnVuY3Rpb24gKGF4aXNJZCwgaXNTdWJjaGFydCkge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzLCBjb25maWcgPSAkJC5jb25maWcsIGggPSAzMDtcclxuICAgICAgaWYgKGF4aXNJZCA9PT0gJ3gnICYmICEoaXNEZWZpbmVkKGlzU3ViY2hhcnQpICYmIGlzU3ViY2hhcnQgPyBjb25maWcuc3ViY2hhcnRfYXhpc194X3Nob3cgOiBjb25maWcuYXhpc194X3Nob3cpKSB7XHJcbiAgICAgICAgICByZXR1cm4gODtcclxuICAgICAgfVxyXG4gICAgICBpZiAoYXhpc0lkID09PSAneCcgJiYgY29uZmlnLmF4aXNfeF9oZWlnaHQpIHtcclxuICAgICAgICAgIHJldHVybiBjb25maWcuYXhpc194X2hlaWdodDtcclxuICAgICAgfVxyXG4gICAgICBpZiAoYXhpc0lkID09PSAneScgJiYgIWNvbmZpZy5heGlzX3lfc2hvdykge1xyXG4gICAgICAgICAgcmV0dXJuIGNvbmZpZy5sZWdlbmRfc2hvdyAmJiAhJCQuaXNMZWdlbmRSaWdodCAmJiAhJCQuaXNMZWdlbmRJbnNldCA/IDEwIDogMTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoYXhpc0lkID09PSAneTInICYmICFjb25maWcuYXhpc195Ml9zaG93KSB7XHJcbiAgICAgICAgICByZXR1cm4gJCQucm90YXRlZF9wYWRkaW5nX3RvcDtcclxuICAgICAgfVxyXG4gICAgICAvLyBDYWxjdWxhdGUgeCBheGlzIGhlaWdodCB3aGVuIHRpY2sgcm90YXRlZFxyXG4gICAgICBpZiAoYXhpc0lkID09PSAneCcgJiYgIWNvbmZpZy5heGlzX3JvdGF0ZWQgJiYgY29uZmlnLmF4aXNfeF90aWNrX3JvdGF0ZSkge1xyXG4gICAgICAgICAgaCA9XHJcbiAgICAgICAgICAgICAgMzAgK1xyXG4gICAgICAgICAgICAgICAgICAkJC5heGlzLmdldE1heFRpY2tXaWR0aChheGlzSWQpICpcclxuICAgICAgICAgICAgICAgICAgICAgIE1hdGguY29zKChNYXRoLlBJICogKDkwIC0gTWF0aC5hYnMoY29uZmlnLmF4aXNfeF90aWNrX3JvdGF0ZSkpKSAvIDE4MCk7XHJcbiAgICAgIH1cclxuICAgICAgLy8gQ2FsY3VsYXRlIHkgYXhpcyBoZWlnaHQgd2hlbiB0aWNrIHJvdGF0ZWRcclxuICAgICAgaWYgKGF4aXNJZCA9PT0gJ3knICYmIGNvbmZpZy5heGlzX3JvdGF0ZWQgJiYgY29uZmlnLmF4aXNfeV90aWNrX3JvdGF0ZSkge1xyXG4gICAgICAgICAgaCA9XHJcbiAgICAgICAgICAgICAgMzAgK1xyXG4gICAgICAgICAgICAgICAgICAkJC5heGlzLmdldE1heFRpY2tXaWR0aChheGlzSWQpICpcclxuICAgICAgICAgICAgICAgICAgICAgIE1hdGguY29zKChNYXRoLlBJICogKDkwIC0gTWF0aC5hYnMoY29uZmlnLmF4aXNfeV90aWNrX3JvdGF0ZSkpKSAvIDE4MCk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIChoICtcclxuICAgICAgICAgICgkJC5heGlzLmdldExhYmVsUG9zaXRpb25CeUlkKGF4aXNJZCkuaXNJbm5lciA/IDAgOiAxMCkgK1xyXG4gICAgICAgICAgKGF4aXNJZCA9PT0gJ3kyJyA/IC0xMCA6IDApKTtcclxuICB9O1xuXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmluaXRCcnVzaCA9IGZ1bmN0aW9uIChzY2FsZSkge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzLCBkMyA9ICQkLmQzO1xyXG4gICAgICAvLyBUT0RPOiBkeW5hbWljYWxseSBjaGFuZ2UgYnJ1c2hZL2JydXNoWCBhY2NvcmRpbmcgdG8gYXhpc19yb3RhdGVkLlxyXG4gICAgICAkJC5icnVzaCA9ICgkJC5jb25maWcuYXhpc19yb3RhdGVkID8gZDMuYnJ1c2hZKCkgOiBkMy5icnVzaFgoKSlcclxuICAgICAgICAgIC5vbignYnJ1c2gnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICB2YXIgZXZlbnQgPSBkMy5ldmVudC5zb3VyY2VFdmVudDtcclxuICAgICAgICAgIGlmIChldmVudCAmJiBldmVudC50eXBlID09PSAnem9vbScpIHtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAkJC5yZWRyYXdGb3JCcnVzaCgpO1xyXG4gICAgICB9KVxyXG4gICAgICAgICAgLm9uKCdlbmQnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICB2YXIgZXZlbnQgPSBkMy5ldmVudC5zb3VyY2VFdmVudDtcclxuICAgICAgICAgIGlmIChldmVudCAmJiBldmVudC50eXBlID09PSAnem9vbScpIHtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoJCQuYnJ1c2guZW1wdHkoKSAmJiBldmVudCAmJiBldmVudC50eXBlICE9PSAnZW5kJykge1xyXG4gICAgICAgICAgICAgICQkLmJydXNoLmNsZWFyKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICAkJC5icnVzaC51cGRhdGVFeHRlbnQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICB2YXIgcmFuZ2UgPSB0aGlzLnNjYWxlLnJhbmdlKCksIGV4dGVudDtcclxuICAgICAgICAgIGlmICgkJC5jb25maWcuYXhpc19yb3RhdGVkKSB7XHJcbiAgICAgICAgICAgICAgZXh0ZW50ID0gW1xyXG4gICAgICAgICAgICAgICAgICBbMCwgcmFuZ2VbMF1dLFxyXG4gICAgICAgICAgICAgICAgICBbJCQud2lkdGgyLCByYW5nZVsxXV1cclxuICAgICAgICAgICAgICBdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgZXh0ZW50ID0gW1xyXG4gICAgICAgICAgICAgICAgICBbcmFuZ2VbMF0sIDBdLFxyXG4gICAgICAgICAgICAgICAgICBbcmFuZ2VbMV0sICQkLmhlaWdodDJdXHJcbiAgICAgICAgICAgICAgXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuZXh0ZW50KGV4dGVudCk7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgfTtcclxuICAgICAgJCQuYnJ1c2gudXBkYXRlU2NhbGUgPSBmdW5jdGlvbiAoc2NhbGUpIHtcclxuICAgICAgICAgIHRoaXMuc2NhbGUgPSBzY2FsZTtcclxuICAgICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgICB9O1xyXG4gICAgICAkJC5icnVzaC51cGRhdGUgPSBmdW5jdGlvbiAoc2NhbGUpIHtcclxuICAgICAgICAgIHRoaXMudXBkYXRlU2NhbGUoc2NhbGUgfHwgJCQuc3ViWCkudXBkYXRlRXh0ZW50KCk7XHJcbiAgICAgICAgICAkJC5jb250ZXh0LnNlbGVjdCgnLicgKyBDTEFTUy5icnVzaCkuY2FsbCh0aGlzKTtcclxuICAgICAgfTtcclxuICAgICAgJCQuYnJ1c2guY2xlYXIgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAkJC5jb250ZXh0LnNlbGVjdCgnLicgKyBDTEFTUy5icnVzaCkuY2FsbCgkJC5icnVzaC5tb3ZlLCBudWxsKTtcclxuICAgICAgfTtcclxuICAgICAgJCQuYnJ1c2guc2VsZWN0aW9uID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgcmV0dXJuIGQzLmJydXNoU2VsZWN0aW9uKCQkLmNvbnRleHQuc2VsZWN0KCcuJyArIENMQVNTLmJydXNoKS5ub2RlKCkpO1xyXG4gICAgICB9O1xyXG4gICAgICAkJC5icnVzaC5zZWxlY3Rpb25Bc1ZhbHVlID0gZnVuY3Rpb24gKHNlbGVjdGlvbkFzVmFsdWUsIHdpdGhUcmFuc2l0aW9uKSB7XHJcbiAgICAgICAgICB2YXIgc2VsZWN0aW9uLCBicnVzaDtcclxuICAgICAgICAgIGlmIChzZWxlY3Rpb25Bc1ZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgaWYgKCQkLmNvbnRleHQpIHtcclxuICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uID0gW1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY2FsZShzZWxlY3Rpb25Bc1ZhbHVlWzBdKSxcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2NhbGUoc2VsZWN0aW9uQXNWYWx1ZVsxXSlcclxuICAgICAgICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgICAgICAgYnJ1c2ggPSAkJC5jb250ZXh0LnNlbGVjdCgnLicgKyBDTEFTUy5icnVzaCk7XHJcbiAgICAgICAgICAgICAgICAgIGlmICh3aXRoVHJhbnNpdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgYnJ1c2ggPSBicnVzaC50cmFuc2l0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgJCQuYnJ1c2gubW92ZShicnVzaCwgc2VsZWN0aW9uKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgc2VsZWN0aW9uID0gJCQuYnJ1c2guc2VsZWN0aW9uKCkgfHwgWzAsIDBdO1xyXG4gICAgICAgICAgcmV0dXJuIFt0aGlzLnNjYWxlLmludmVydChzZWxlY3Rpb25bMF0pLCB0aGlzLnNjYWxlLmludmVydChzZWxlY3Rpb25bMV0pXTtcclxuICAgICAgfTtcclxuICAgICAgJCQuYnJ1c2guZW1wdHkgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICB2YXIgc2VsZWN0aW9uID0gJCQuYnJ1c2guc2VsZWN0aW9uKCk7XHJcbiAgICAgICAgICByZXR1cm4gIXNlbGVjdGlvbiB8fCBzZWxlY3Rpb25bMF0gPT09IHNlbGVjdGlvblsxXTtcclxuICAgICAgfTtcclxuICAgICAgcmV0dXJuICQkLmJydXNoLnVwZGF0ZVNjYWxlKHNjYWxlKTtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmluaXRTdWJjaGFydCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgdmFyICQkID0gdGhpcywgY29uZmlnID0gJCQuY29uZmlnLCBjb250ZXh0ID0gKCQkLmNvbnRleHQgPSAkJC5zdmdcclxuICAgICAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsICQkLmdldFRyYW5zbGF0ZSgnY29udGV4dCcpKSk7XHJcbiAgICAgIC8vIHNldCBzdHlsZVxyXG4gICAgICBjb250ZXh0LnN0eWxlKCd2aXNpYmlsaXR5JywgJ3Zpc2libGUnKTtcclxuICAgICAgLy8gRGVmaW5lIGcgZm9yIGNoYXJ0IGFyZWFcclxuICAgICAgY29udGV4dFxyXG4gICAgICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgICAgICAuYXR0cignY2xpcC1wYXRoJywgJCQuY2xpcFBhdGhGb3JTdWJjaGFydClcclxuICAgICAgICAgIC5hdHRyKCdjbGFzcycsIENMQVNTLmNoYXJ0KTtcclxuICAgICAgLy8gRGVmaW5lIGcgZm9yIGJhciBjaGFydCBhcmVhXHJcbiAgICAgIGNvbnRleHRcclxuICAgICAgICAgIC5zZWxlY3QoJy4nICsgQ0xBU1MuY2hhcnQpXHJcbiAgICAgICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgICAgIC5hdHRyKCdjbGFzcycsIENMQVNTLmNoYXJ0QmFycyk7XHJcbiAgICAgIC8vIERlZmluZSBnIGZvciBsaW5lIGNoYXJ0IGFyZWFcclxuICAgICAgY29udGV4dFxyXG4gICAgICAgICAgLnNlbGVjdCgnLicgKyBDTEFTUy5jaGFydClcclxuICAgICAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAgICAgLmF0dHIoJ2NsYXNzJywgQ0xBU1MuY2hhcnRMaW5lcyk7XHJcbiAgICAgIC8vIEFkZCBleHRlbnQgcmVjdCBmb3IgQnJ1c2hcclxuICAgICAgY29udGV4dFxyXG4gICAgICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgICAgICAuYXR0cignY2xpcC1wYXRoJywgJCQuY2xpcFBhdGgpXHJcbiAgICAgICAgICAuYXR0cignY2xhc3MnLCBDTEFTUy5icnVzaCk7XHJcbiAgICAgIC8vIEFUVEVOVElPTjogVGhpcyBtdXN0IGJlIGNhbGxlZCBBRlRFUiBjaGFydCBhZGRlZFxyXG4gICAgICAvLyBBZGQgQXhpc1xyXG4gICAgICAkJC5heGVzLnN1YnggPSBjb250ZXh0XHJcbiAgICAgICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgICAgIC5hdHRyKCdjbGFzcycsIENMQVNTLmF4aXNYKVxyXG4gICAgICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsICQkLmdldFRyYW5zbGF0ZSgnc3VieCcpKVxyXG4gICAgICAgICAgLmF0dHIoJ2NsaXAtcGF0aCcsIGNvbmZpZy5heGlzX3JvdGF0ZWQgPyAnJyA6ICQkLmNsaXBQYXRoRm9yWEF4aXMpXHJcbiAgICAgICAgICAuc3R5bGUoJ3Zpc2liaWxpdHknLCBjb25maWcuc3ViY2hhcnRfYXhpc194X3Nob3cgPyAndmlzaWJsZScgOiAnaGlkZGVuJyk7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5pbml0U3ViY2hhcnRCcnVzaCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgdmFyICQkID0gdGhpcztcclxuICAgICAgLy8gQWRkIGV4dGVudCByZWN0IGZvciBCcnVzaFxyXG4gICAgICAkJC5pbml0QnJ1c2goJCQuc3ViWCkudXBkYXRlRXh0ZW50KCk7XHJcbiAgICAgICQkLmNvbnRleHQuc2VsZWN0KCcuJyArIENMQVNTLmJydXNoKS5jYWxsKCQkLmJydXNoKTtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLnVwZGF0ZVRhcmdldHNGb3JTdWJjaGFydCA9IGZ1bmN0aW9uICh0YXJnZXRzKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXMsIGNvbnRleHQgPSAkJC5jb250ZXh0LCBjb25maWcgPSAkJC5jb25maWcsIGNvbnRleHRMaW5lRW50ZXIsIGNvbnRleHRMaW5lLCBjb250ZXh0QmFyRW50ZXIsIGNvbnRleHRCYXIsIGNsYXNzQ2hhcnRCYXIgPSAkJC5jbGFzc0NoYXJ0QmFyLmJpbmQoJCQpLCBjbGFzc0JhcnMgPSAkJC5jbGFzc0JhcnMuYmluZCgkJCksIGNsYXNzQ2hhcnRMaW5lID0gJCQuY2xhc3NDaGFydExpbmUuYmluZCgkJCksIGNsYXNzTGluZXMgPSAkJC5jbGFzc0xpbmVzLmJpbmQoJCQpLCBjbGFzc0FyZWFzID0gJCQuY2xhc3NBcmVhcy5iaW5kKCQkKTtcclxuICAgICAgLy8tLSBCYXIgLS0vL1xyXG4gICAgICBjb250ZXh0QmFyID0gY29udGV4dFxyXG4gICAgICAgICAgLnNlbGVjdCgnLicgKyBDTEFTUy5jaGFydEJhcnMpXHJcbiAgICAgICAgICAuc2VsZWN0QWxsKCcuJyArIENMQVNTLmNoYXJ0QmFyKVxyXG4gICAgICAgICAgLmRhdGEodGFyZ2V0cyk7XHJcbiAgICAgIGNvbnRleHRCYXJFbnRlciA9IGNvbnRleHRCYXJcclxuICAgICAgICAgIC5lbnRlcigpXHJcbiAgICAgICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgICAgIC5zdHlsZSgnb3BhY2l0eScsIDApO1xyXG4gICAgICBjb250ZXh0QmFyRW50ZXIubWVyZ2UoY29udGV4dEJhcikuYXR0cignY2xhc3MnLCBjbGFzc0NoYXJ0QmFyKTtcclxuICAgICAgLy8gQmFycyBmb3IgZWFjaCBkYXRhXHJcbiAgICAgIGNvbnRleHRCYXJFbnRlci5hcHBlbmQoJ2cnKS5hdHRyKCdjbGFzcycsIGNsYXNzQmFycyk7XHJcbiAgICAgIC8vLS0gTGluZSAtLS8vXHJcbiAgICAgIGNvbnRleHRMaW5lID0gY29udGV4dFxyXG4gICAgICAgICAgLnNlbGVjdCgnLicgKyBDTEFTUy5jaGFydExpbmVzKVxyXG4gICAgICAgICAgLnNlbGVjdEFsbCgnLicgKyBDTEFTUy5jaGFydExpbmUpXHJcbiAgICAgICAgICAuZGF0YSh0YXJnZXRzKTtcclxuICAgICAgY29udGV4dExpbmVFbnRlciA9IGNvbnRleHRMaW5lXHJcbiAgICAgICAgICAuZW50ZXIoKVxyXG4gICAgICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgICAgICAuc3R5bGUoJ29wYWNpdHknLCAwKTtcclxuICAgICAgY29udGV4dExpbmVFbnRlci5tZXJnZShjb250ZXh0TGluZSkuYXR0cignY2xhc3MnLCBjbGFzc0NoYXJ0TGluZSk7XHJcbiAgICAgIC8vIExpbmVzIGZvciBlYWNoIGRhdGFcclxuICAgICAgY29udGV4dExpbmVFbnRlci5hcHBlbmQoJ2cnKS5hdHRyKCdjbGFzcycsIGNsYXNzTGluZXMpO1xyXG4gICAgICAvLyBBcmVhXHJcbiAgICAgIGNvbnRleHRMaW5lRW50ZXIuYXBwZW5kKCdnJykuYXR0cignY2xhc3MnLCBjbGFzc0FyZWFzKTtcclxuICAgICAgLy8tLSBCcnVzaCAtLS8vXHJcbiAgICAgIGNvbnRleHRcclxuICAgICAgICAgIC5zZWxlY3RBbGwoJy4nICsgQ0xBU1MuYnJ1c2ggKyAnIHJlY3QnKVxyXG4gICAgICAgICAgLmF0dHIoY29uZmlnLmF4aXNfcm90YXRlZCA/ICd3aWR0aCcgOiAnaGVpZ2h0JywgY29uZmlnLmF4aXNfcm90YXRlZCA/ICQkLndpZHRoMiA6ICQkLmhlaWdodDIpO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUudXBkYXRlQmFyRm9yU3ViY2hhcnQgPSBmdW5jdGlvbiAoZHVyYXRpb25Gb3JFeGl0KSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXM7XHJcbiAgICAgIHZhciBjb250ZXh0QmFyID0gJCQuY29udGV4dFxyXG4gICAgICAgICAgLnNlbGVjdEFsbCgnLicgKyBDTEFTUy5iYXJzKVxyXG4gICAgICAgICAgLnNlbGVjdEFsbCgnLicgKyBDTEFTUy5iYXIpXHJcbiAgICAgICAgICAuZGF0YSgkJC5iYXJEYXRhLmJpbmQoJCQpKTtcclxuICAgICAgdmFyIGNvbnRleHRCYXJFbnRlciA9IGNvbnRleHRCYXJcclxuICAgICAgICAgIC5lbnRlcigpXHJcbiAgICAgICAgICAuYXBwZW5kKCdwYXRoJylcclxuICAgICAgICAgIC5hdHRyKCdjbGFzcycsICQkLmNsYXNzQmFyLmJpbmQoJCQpKVxyXG4gICAgICAgICAgLnN0eWxlKCdzdHJva2UnLCAnbm9uZScpXHJcbiAgICAgICAgICAuc3R5bGUoJ2ZpbGwnLCAkJC5jb2xvcik7XHJcbiAgICAgIGNvbnRleHRCYXJcclxuICAgICAgICAgIC5leGl0KClcclxuICAgICAgICAgIC50cmFuc2l0aW9uKClcclxuICAgICAgICAgIC5kdXJhdGlvbihkdXJhdGlvbkZvckV4aXQpXHJcbiAgICAgICAgICAuc3R5bGUoJ29wYWNpdHknLCAwKVxyXG4gICAgICAgICAgLnJlbW92ZSgpO1xyXG4gICAgICAkJC5jb250ZXh0QmFyID0gY29udGV4dEJhckVudGVyXHJcbiAgICAgICAgICAubWVyZ2UoY29udGV4dEJhcilcclxuICAgICAgICAgIC5zdHlsZSgnb3BhY2l0eScsICQkLmluaXRpYWxPcGFjaXR5LmJpbmQoJCQpKTtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLnJlZHJhd0JhckZvclN1YmNoYXJ0ID0gZnVuY3Rpb24gKGRyYXdCYXJPblN1Yiwgd2l0aFRyYW5zaXRpb24sIGR1cmF0aW9uKSB7XHJcbiAgICAgICh3aXRoVHJhbnNpdGlvblxyXG4gICAgICAgICAgPyB0aGlzLmNvbnRleHRCYXIudHJhbnNpdGlvbihNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKCkpLmR1cmF0aW9uKGR1cmF0aW9uKVxyXG4gICAgICAgICAgOiB0aGlzLmNvbnRleHRCYXIpXHJcbiAgICAgICAgICAuYXR0cignZCcsIGRyYXdCYXJPblN1YilcclxuICAgICAgICAgIC5zdHlsZSgnb3BhY2l0eScsIDEpO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUudXBkYXRlTGluZUZvclN1YmNoYXJ0ID0gZnVuY3Rpb24gKGR1cmF0aW9uRm9yRXhpdCkge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzO1xyXG4gICAgICB2YXIgY29udGV4dExpbmUgPSAkJC5jb250ZXh0XHJcbiAgICAgICAgICAuc2VsZWN0QWxsKCcuJyArIENMQVNTLmxpbmVzKVxyXG4gICAgICAgICAgLnNlbGVjdEFsbCgnLicgKyBDTEFTUy5saW5lKVxyXG4gICAgICAgICAgLmRhdGEoJCQubGluZURhdGEuYmluZCgkJCkpO1xyXG4gICAgICB2YXIgY29udGV4dExpbmVFbnRlciA9IGNvbnRleHRMaW5lXHJcbiAgICAgICAgICAuZW50ZXIoKVxyXG4gICAgICAgICAgLmFwcGVuZCgncGF0aCcpXHJcbiAgICAgICAgICAuYXR0cignY2xhc3MnLCAkJC5jbGFzc0xpbmUuYmluZCgkJCkpXHJcbiAgICAgICAgICAuc3R5bGUoJ3N0cm9rZScsICQkLmNvbG9yKTtcclxuICAgICAgY29udGV4dExpbmVcclxuICAgICAgICAgIC5leGl0KClcclxuICAgICAgICAgIC50cmFuc2l0aW9uKClcclxuICAgICAgICAgIC5kdXJhdGlvbihkdXJhdGlvbkZvckV4aXQpXHJcbiAgICAgICAgICAuc3R5bGUoJ29wYWNpdHknLCAwKVxyXG4gICAgICAgICAgLnJlbW92ZSgpO1xyXG4gICAgICAkJC5jb250ZXh0TGluZSA9IGNvbnRleHRMaW5lRW50ZXJcclxuICAgICAgICAgIC5tZXJnZShjb250ZXh0TGluZSlcclxuICAgICAgICAgIC5zdHlsZSgnb3BhY2l0eScsICQkLmluaXRpYWxPcGFjaXR5LmJpbmQoJCQpKTtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLnJlZHJhd0xpbmVGb3JTdWJjaGFydCA9IGZ1bmN0aW9uIChkcmF3TGluZU9uU3ViLCB3aXRoVHJhbnNpdGlvbiwgZHVyYXRpb24pIHtcclxuICAgICAgKHdpdGhUcmFuc2l0aW9uXHJcbiAgICAgICAgICA/IHRoaXMuY29udGV4dExpbmUudHJhbnNpdGlvbihNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKCkpLmR1cmF0aW9uKGR1cmF0aW9uKVxyXG4gICAgICAgICAgOiB0aGlzLmNvbnRleHRMaW5lKVxyXG4gICAgICAgICAgLmF0dHIoJ2QnLCBkcmF3TGluZU9uU3ViKVxyXG4gICAgICAgICAgLnN0eWxlKCdvcGFjaXR5JywgMSk7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS51cGRhdGVBcmVhRm9yU3ViY2hhcnQgPSBmdW5jdGlvbiAoZHVyYXRpb25Gb3JFeGl0KSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXMsIGQzID0gJCQuZDM7XHJcbiAgICAgIHZhciBjb250ZXh0QXJlYSA9ICQkLmNvbnRleHRcclxuICAgICAgICAgIC5zZWxlY3RBbGwoJy4nICsgQ0xBU1MuYXJlYXMpXHJcbiAgICAgICAgICAuc2VsZWN0QWxsKCcuJyArIENMQVNTLmFyZWEpXHJcbiAgICAgICAgICAuZGF0YSgkJC5saW5lRGF0YS5iaW5kKCQkKSk7XHJcbiAgICAgIHZhciBjb250ZXh0QXJlYUVudGVyID0gY29udGV4dEFyZWFcclxuICAgICAgICAgIC5lbnRlcigpXHJcbiAgICAgICAgICAuYXBwZW5kKCdwYXRoJylcclxuICAgICAgICAgIC5hdHRyKCdjbGFzcycsICQkLmNsYXNzQXJlYS5iaW5kKCQkKSlcclxuICAgICAgICAgIC5zdHlsZSgnZmlsbCcsICQkLmNvbG9yKVxyXG4gICAgICAgICAgLnN0eWxlKCdvcGFjaXR5JywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgJCQub3JnQXJlYU9wYWNpdHkgPSArZDMuc2VsZWN0KHRoaXMpLnN0eWxlKCdvcGFjaXR5Jyk7XHJcbiAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgfSk7XHJcbiAgICAgIGNvbnRleHRBcmVhXHJcbiAgICAgICAgICAuZXhpdCgpXHJcbiAgICAgICAgICAudHJhbnNpdGlvbigpXHJcbiAgICAgICAgICAuZHVyYXRpb24oZHVyYXRpb25Gb3JFeGl0KVxyXG4gICAgICAgICAgLnN0eWxlKCdvcGFjaXR5JywgMClcclxuICAgICAgICAgIC5yZW1vdmUoKTtcclxuICAgICAgJCQuY29udGV4dEFyZWEgPSBjb250ZXh0QXJlYUVudGVyLm1lcmdlKGNvbnRleHRBcmVhKS5zdHlsZSgnb3BhY2l0eScsIDApO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUucmVkcmF3QXJlYUZvclN1YmNoYXJ0ID0gZnVuY3Rpb24gKGRyYXdBcmVhT25TdWIsIHdpdGhUcmFuc2l0aW9uLCBkdXJhdGlvbikge1xyXG4gICAgICAod2l0aFRyYW5zaXRpb25cclxuICAgICAgICAgID8gdGhpcy5jb250ZXh0QXJlYS50cmFuc2l0aW9uKE1hdGgucmFuZG9tKCkudG9TdHJpbmcoKSkuZHVyYXRpb24oZHVyYXRpb24pXHJcbiAgICAgICAgICA6IHRoaXMuY29udGV4dEFyZWEpXHJcbiAgICAgICAgICAuYXR0cignZCcsIGRyYXdBcmVhT25TdWIpXHJcbiAgICAgICAgICAuc3R5bGUoJ2ZpbGwnLCB0aGlzLmNvbG9yKVxyXG4gICAgICAgICAgLnN0eWxlKCdvcGFjaXR5JywgdGhpcy5vcmdBcmVhT3BhY2l0eSk7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5yZWRyYXdTdWJjaGFydCA9IGZ1bmN0aW9uICh3aXRoU3ViY2hhcnQsIHRyYW5zaXRpb25zLCBkdXJhdGlvbiwgZHVyYXRpb25Gb3JFeGl0LCBhcmVhSW5kaWNlcywgYmFySW5kaWNlcywgbGluZUluZGljZXMpIHtcclxuICAgICAgdmFyICQkID0gdGhpcywgZDMgPSAkJC5kMywgZHJhd0FyZWFPblN1YiwgZHJhd0Jhck9uU3ViLCBkcmF3TGluZU9uU3ViO1xyXG4gICAgICAvLyByZWZsZWN0IG1haW4gY2hhcnQgdG8gZXh0ZW50IG9uIHN1YmNoYXJ0IGlmIHpvb21lZFxyXG4gICAgICBpZiAoZDMuZXZlbnQgJiYgZDMuZXZlbnQudHlwZSA9PT0gJ3pvb20nKSB7XHJcbiAgICAgICAgICAkJC5icnVzaC5zZWxlY3Rpb25Bc1ZhbHVlKCQkLngub3JnRG9tYWluKCkpO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIHVwZGF0ZSBzdWJjaGFydCBlbGVtZW50cyBpZiBuZWVkZWRcclxuICAgICAgaWYgKHdpdGhTdWJjaGFydCkge1xyXG4gICAgICAgICAgLy8gZXh0ZW50IHJlY3RcclxuICAgICAgICAgIGlmICghJCQuYnJ1c2guZW1wdHkoKSkge1xyXG4gICAgICAgICAgICAgICQkLmJydXNoLnNlbGVjdGlvbkFzVmFsdWUoJCQueC5vcmdEb21haW4oKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvLyBzZXR1cCBkcmF3ZXIgLSBNRU1POiB0aGlzIG11c3QgYmUgY2FsbGVkIGFmdGVyIGF4aXMgdXBkYXRlZFxyXG4gICAgICAgICAgZHJhd0FyZWFPblN1YiA9ICQkLmdlbmVyYXRlRHJhd0FyZWEoYXJlYUluZGljZXMsIHRydWUpO1xyXG4gICAgICAgICAgZHJhd0Jhck9uU3ViID0gJCQuZ2VuZXJhdGVEcmF3QmFyKGJhckluZGljZXMsIHRydWUpO1xyXG4gICAgICAgICAgZHJhd0xpbmVPblN1YiA9ICQkLmdlbmVyYXRlRHJhd0xpbmUobGluZUluZGljZXMsIHRydWUpO1xyXG4gICAgICAgICAgJCQudXBkYXRlQmFyRm9yU3ViY2hhcnQoZHVyYXRpb24pO1xyXG4gICAgICAgICAgJCQudXBkYXRlTGluZUZvclN1YmNoYXJ0KGR1cmF0aW9uKTtcclxuICAgICAgICAgICQkLnVwZGF0ZUFyZWFGb3JTdWJjaGFydChkdXJhdGlvbik7XHJcbiAgICAgICAgICAkJC5yZWRyYXdCYXJGb3JTdWJjaGFydChkcmF3QmFyT25TdWIsIGR1cmF0aW9uLCBkdXJhdGlvbik7XHJcbiAgICAgICAgICAkJC5yZWRyYXdMaW5lRm9yU3ViY2hhcnQoZHJhd0xpbmVPblN1YiwgZHVyYXRpb24sIGR1cmF0aW9uKTtcclxuICAgICAgICAgICQkLnJlZHJhd0FyZWFGb3JTdWJjaGFydChkcmF3QXJlYU9uU3ViLCBkdXJhdGlvbiwgZHVyYXRpb24pO1xyXG4gICAgICB9XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5yZWRyYXdGb3JCcnVzaCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgdmFyICQkID0gdGhpcywgeCA9ICQkLngsIGQzID0gJCQuZDMsIHM7XHJcbiAgICAgICQkLnJlZHJhdyh7XHJcbiAgICAgICAgICB3aXRoVHJhbnNpdGlvbjogZmFsc2UsXHJcbiAgICAgICAgICB3aXRoWTogJCQuY29uZmlnLnpvb21fcmVzY2FsZSxcclxuICAgICAgICAgIHdpdGhTdWJjaGFydDogZmFsc2UsXHJcbiAgICAgICAgICB3aXRoVXBkYXRlWERvbWFpbjogdHJ1ZSxcclxuICAgICAgICAgIHdpdGhFdmVudFJlY3Q6IGZhbHNlLFxyXG4gICAgICAgICAgd2l0aERpbWVuc2lvbjogZmFsc2VcclxuICAgICAgfSk7XHJcbiAgICAgIC8vIHVwZGF0ZSB6b29tIHRyYW5zYXRpb24gYmluZGVkIHRvIGV2ZW50IHJlY3RcclxuICAgICAgcyA9IGQzLmV2ZW50LnNlbGVjdGlvbiB8fCAkJC5icnVzaC5zY2FsZS5yYW5nZSgpO1xyXG4gICAgICAkJC5tYWluXHJcbiAgICAgICAgICAuc2VsZWN0KCcuJyArIENMQVNTLmV2ZW50UmVjdClcclxuICAgICAgICAgIC5jYWxsKCQkLnpvb20udHJhbnNmb3JtLCBkMy56b29tSWRlbnRpdHkuc2NhbGUoJCQud2lkdGggLyAoc1sxXSAtIHNbMF0pKS50cmFuc2xhdGUoLXNbMF0sIDApKTtcclxuICAgICAgJCQuY29uZmlnLnN1YmNoYXJ0X29uYnJ1c2guY2FsbCgkJC5hcGksIHgub3JnRG9tYWluKCkpO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUudHJhbnNmb3JtQ29udGV4dCA9IGZ1bmN0aW9uICh3aXRoVHJhbnNpdGlvbiwgdHJhbnNpdGlvbnMpIHtcclxuICAgICAgdmFyICQkID0gdGhpcywgc3ViWEF4aXM7XHJcbiAgICAgIGlmICh0cmFuc2l0aW9ucyAmJiB0cmFuc2l0aW9ucy5heGlzU3ViWCkge1xyXG4gICAgICAgICAgc3ViWEF4aXMgPSB0cmFuc2l0aW9ucy5heGlzU3ViWDtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICAgIHN1YlhBeGlzID0gJCQuY29udGV4dC5zZWxlY3QoJy4nICsgQ0xBU1MuYXhpc1gpO1xyXG4gICAgICAgICAgaWYgKHdpdGhUcmFuc2l0aW9uKSB7XHJcbiAgICAgICAgICAgICAgc3ViWEF4aXMgPSBzdWJYQXhpcy50cmFuc2l0aW9uKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgJCQuY29udGV4dC5hdHRyKCd0cmFuc2Zvcm0nLCAkJC5nZXRUcmFuc2xhdGUoJ2NvbnRleHQnKSk7XHJcbiAgICAgIHN1YlhBeGlzLmF0dHIoJ3RyYW5zZm9ybScsICQkLmdldFRyYW5zbGF0ZSgnc3VieCcpKTtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmdldERlZmF1bHRTZWxlY3Rpb24gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXMsIGNvbmZpZyA9ICQkLmNvbmZpZywgc2VsZWN0aW9uID0gaXNGdW5jdGlvbihjb25maWcuYXhpc194X3NlbGVjdGlvbilcclxuICAgICAgICAgID8gY29uZmlnLmF4aXNfeF9zZWxlY3Rpb24oJCQuZ2V0WERvbWFpbigkJC5kYXRhLnRhcmdldHMpKVxyXG4gICAgICAgICAgOiBjb25maWcuYXhpc194X3NlbGVjdGlvbjtcclxuICAgICAgaWYgKCQkLmlzVGltZVNlcmllcygpKSB7XHJcbiAgICAgICAgICBzZWxlY3Rpb24gPSBbJCQucGFyc2VEYXRlKHNlbGVjdGlvblswXSksICQkLnBhcnNlRGF0ZShzZWxlY3Rpb25bMV0pXTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gc2VsZWN0aW9uO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUucmVtb3ZlU3ViY2hhcnQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXM7XHJcbiAgICAgICQkLmJydXNoID0gbnVsbDtcclxuICAgICAgJCQuY29udGV4dC5yZW1vdmUoKTtcclxuICAgICAgJCQuY29udGV4dCA9IG51bGw7XHJcbiAgfTtcblxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5pbml0VGV4dCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgdmFyICQkID0gdGhpcztcclxuICAgICAgJCQubWFpblxyXG4gICAgICAgICAgLnNlbGVjdCgnLicgKyBDTEFTUy5jaGFydClcclxuICAgICAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAgICAgLmF0dHIoJ2NsYXNzJywgQ0xBU1MuY2hhcnRUZXh0cyk7XHJcbiAgICAgICQkLm1haW5UZXh0ID0gJCQuZDMuc2VsZWN0QWxsKFtdKTtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLnVwZGF0ZVRhcmdldHNGb3JUZXh0ID0gZnVuY3Rpb24gKHRhcmdldHMpIHtcclxuICAgICAgdmFyICQkID0gdGhpcywgY2xhc3NDaGFydFRleHQgPSAkJC5jbGFzc0NoYXJ0VGV4dC5iaW5kKCQkKSwgY2xhc3NUZXh0cyA9ICQkLmNsYXNzVGV4dHMuYmluZCgkJCksIGNsYXNzRm9jdXMgPSAkJC5jbGFzc0ZvY3VzLmJpbmQoJCQpO1xyXG4gICAgICB2YXIgbWFpblRleHQgPSAkJC5tYWluXHJcbiAgICAgICAgICAuc2VsZWN0KCcuJyArIENMQVNTLmNoYXJ0VGV4dHMpXHJcbiAgICAgICAgICAuc2VsZWN0QWxsKCcuJyArIENMQVNTLmNoYXJ0VGV4dClcclxuICAgICAgICAgIC5kYXRhKHRhcmdldHMpO1xyXG4gICAgICB2YXIgbWFpblRleHRFbnRlciA9IG1haW5UZXh0XHJcbiAgICAgICAgICAuZW50ZXIoKVxyXG4gICAgICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgICAgICAuYXR0cignY2xhc3MnLCBjbGFzc0NoYXJ0VGV4dClcclxuICAgICAgICAgIC5zdHlsZSgnb3BhY2l0eScsIDApXHJcbiAgICAgICAgICAuc3R5bGUoJ3BvaW50ZXItZXZlbnRzJywgJ25vbmUnKTtcclxuICAgICAgbWFpblRleHRFbnRlci5hcHBlbmQoJ2cnKS5hdHRyKCdjbGFzcycsIGNsYXNzVGV4dHMpO1xyXG4gICAgICBtYWluVGV4dEVudGVyLm1lcmdlKG1haW5UZXh0KS5hdHRyKCdjbGFzcycsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICByZXR1cm4gY2xhc3NDaGFydFRleHQoZCkgKyBjbGFzc0ZvY3VzKGQpO1xyXG4gICAgICB9KTtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLnVwZGF0ZVRleHQgPSBmdW5jdGlvbiAoeEZvclRleHQsIHlGb3JUZXh0LCBkdXJhdGlvbkZvckV4aXQpIHtcclxuICAgICAgdmFyICQkID0gdGhpcywgY29uZmlnID0gJCQuY29uZmlnLCBiYXJPckxpbmVEYXRhID0gJCQuYmFyT3JMaW5lRGF0YS5iaW5kKCQkKSwgY2xhc3NUZXh0ID0gJCQuY2xhc3NUZXh0LmJpbmQoJCQpO1xyXG4gICAgICB2YXIgbWFpblRleHQgPSAkJC5tYWluXHJcbiAgICAgICAgICAuc2VsZWN0QWxsKCcuJyArIENMQVNTLnRleHRzKVxyXG4gICAgICAgICAgLnNlbGVjdEFsbCgnLicgKyBDTEFTUy50ZXh0KVxyXG4gICAgICAgICAgLmRhdGEoYmFyT3JMaW5lRGF0YSk7XHJcbiAgICAgIHZhciBtYWluVGV4dEVudGVyID0gbWFpblRleHRcclxuICAgICAgICAgIC5lbnRlcigpXHJcbiAgICAgICAgICAuYXBwZW5kKCd0ZXh0JylcclxuICAgICAgICAgIC5hdHRyKCdjbGFzcycsIGNsYXNzVGV4dClcclxuICAgICAgICAgIC5hdHRyKCd0ZXh0LWFuY2hvcicsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICByZXR1cm4gY29uZmlnLmF4aXNfcm90YXRlZCA/IChkLnZhbHVlIDwgMCA/ICdlbmQnIDogJ3N0YXJ0JykgOiAnbWlkZGxlJztcclxuICAgICAgfSlcclxuICAgICAgICAgIC5zdHlsZSgnc3Ryb2tlJywgJ25vbmUnKVxyXG4gICAgICAgICAgLmF0dHIoJ3gnLCB4Rm9yVGV4dClcclxuICAgICAgICAgIC5hdHRyKCd5JywgeUZvclRleHQpXHJcbiAgICAgICAgICAuc3R5bGUoJ2ZpbGwnLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgcmV0dXJuICQkLmNvbG9yKGQpO1xyXG4gICAgICB9KVxyXG4gICAgICAgICAgLnN0eWxlKCdmaWxsLW9wYWNpdHknLCAwKTtcclxuICAgICAgJCQubWFpblRleHQgPSBtYWluVGV4dEVudGVyLm1lcmdlKG1haW5UZXh0KS50ZXh0KGZ1bmN0aW9uIChkLCBpLCBqKSB7XHJcbiAgICAgICAgICByZXR1cm4gJCQuZGF0YUxhYmVsRm9ybWF0KGQuaWQpKGQudmFsdWUsIGQuaWQsIGksIGopO1xyXG4gICAgICB9KTtcclxuICAgICAgbWFpblRleHRcclxuICAgICAgICAgIC5leGl0KClcclxuICAgICAgICAgIC50cmFuc2l0aW9uKClcclxuICAgICAgICAgIC5kdXJhdGlvbihkdXJhdGlvbkZvckV4aXQpXHJcbiAgICAgICAgICAuc3R5bGUoJ2ZpbGwtb3BhY2l0eScsIDApXHJcbiAgICAgICAgICAucmVtb3ZlKCk7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5yZWRyYXdUZXh0ID0gZnVuY3Rpb24gKHhGb3JUZXh0LCB5Rm9yVGV4dCwgZm9yRmxvdywgd2l0aFRyYW5zaXRpb24sIHRyYW5zaXRpb24pIHtcclxuICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICh3aXRoVHJhbnNpdGlvbiA/IHRoaXMubWFpblRleHQudHJhbnNpdGlvbih0cmFuc2l0aW9uKSA6IHRoaXMubWFpblRleHQpXHJcbiAgICAgICAgICAgICAgLmF0dHIoJ3gnLCB4Rm9yVGV4dClcclxuICAgICAgICAgICAgICAuYXR0cigneScsIHlGb3JUZXh0KVxyXG4gICAgICAgICAgICAgIC5zdHlsZSgnZmlsbCcsIHRoaXMuY29sb3IpXHJcbiAgICAgICAgICAgICAgLnN0eWxlKCdmaWxsLW9wYWNpdHknLCBmb3JGbG93ID8gMCA6IHRoaXMub3BhY2l0eUZvclRleHQuYmluZCh0aGlzKSlcclxuICAgICAgXTtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmdldFRleHRSZWN0ID0gZnVuY3Rpb24gKHRleHQsIGNscywgZWxlbWVudCkge1xyXG4gICAgICB2YXIgZHVtbXkgPSB0aGlzLmQzXHJcbiAgICAgICAgICAuc2VsZWN0KCdib2R5JylcclxuICAgICAgICAgIC5hcHBlbmQoJ2RpdicpXHJcbiAgICAgICAgICAuY2xhc3NlZCgnYzMnLCB0cnVlKSwgc3ZnID0gZHVtbXlcclxuICAgICAgICAgIC5hcHBlbmQoJ3N2ZycpXHJcbiAgICAgICAgICAuc3R5bGUoJ3Zpc2liaWxpdHknLCAnaGlkZGVuJylcclxuICAgICAgICAgIC5zdHlsZSgncG9zaXRpb24nLCAnZml4ZWQnKVxyXG4gICAgICAgICAgLnN0eWxlKCd0b3AnLCAwKVxyXG4gICAgICAgICAgLnN0eWxlKCdsZWZ0JywgMCksIGZvbnQgPSB0aGlzLmQzLnNlbGVjdChlbGVtZW50KS5zdHlsZSgnZm9udCcpLCByZWN0O1xyXG4gICAgICBzdmdcclxuICAgICAgICAgIC5zZWxlY3RBbGwoJy5kdW1teScpXHJcbiAgICAgICAgICAuZGF0YShbdGV4dF0pXHJcbiAgICAgICAgICAuZW50ZXIoKVxyXG4gICAgICAgICAgLmFwcGVuZCgndGV4dCcpXHJcbiAgICAgICAgICAuY2xhc3NlZChjbHMgPyBjbHMgOiAnJywgdHJ1ZSlcclxuICAgICAgICAgIC5zdHlsZSgnZm9udCcsIGZvbnQpXHJcbiAgICAgICAgICAudGV4dCh0ZXh0KVxyXG4gICAgICAgICAgLmVhY2goZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgcmVjdCA9IGdldEJCb3godGhpcyk7XHJcbiAgICAgIH0pO1xyXG4gICAgICBkdW1teS5yZW1vdmUoKTtcclxuICAgICAgcmV0dXJuIHJlY3Q7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5nZW5lcmF0ZVhZRm9yVGV4dCA9IGZ1bmN0aW9uIChhcmVhSW5kaWNlcywgYmFySW5kaWNlcywgbGluZUluZGljZXMsIGZvclgpIHtcclxuICAgICAgdmFyICQkID0gdGhpcywgZ2V0QXJlYVBvaW50cyA9ICQkLmdlbmVyYXRlR2V0QXJlYVBvaW50cyhhcmVhSW5kaWNlcywgZmFsc2UpLCBnZXRCYXJQb2ludHMgPSAkJC5nZW5lcmF0ZUdldEJhclBvaW50cyhiYXJJbmRpY2VzLCBmYWxzZSksIGdldExpbmVQb2ludHMgPSAkJC5nZW5lcmF0ZUdldExpbmVQb2ludHMobGluZUluZGljZXMsIGZhbHNlKSwgZ2V0dGVyID0gZm9yWCA/ICQkLmdldFhGb3JUZXh0IDogJCQuZ2V0WUZvclRleHQ7XHJcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoZCwgaSkge1xyXG4gICAgICAgICAgdmFyIGdldFBvaW50cyA9ICQkLmlzQXJlYVR5cGUoZClcclxuICAgICAgICAgICAgICA/IGdldEFyZWFQb2ludHNcclxuICAgICAgICAgICAgICA6ICQkLmlzQmFyVHlwZShkKVxyXG4gICAgICAgICAgICAgICAgICA/IGdldEJhclBvaW50c1xyXG4gICAgICAgICAgICAgICAgICA6IGdldExpbmVQb2ludHM7XHJcbiAgICAgICAgICByZXR1cm4gZ2V0dGVyLmNhbGwoJCQsIGdldFBvaW50cyhkLCBpKSwgZCwgdGhpcyk7XHJcbiAgICAgIH07XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5nZXRYRm9yVGV4dCA9IGZ1bmN0aW9uIChwb2ludHMsIGQsIHRleHRFbGVtZW50KSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXMsIGJveCA9IGdldEJCb3godGV4dEVsZW1lbnQpLCB4UG9zLCBwYWRkaW5nO1xyXG4gICAgICBpZiAoJCQuY29uZmlnLmF4aXNfcm90YXRlZCkge1xyXG4gICAgICAgICAgcGFkZGluZyA9ICQkLmlzQmFyVHlwZShkKSA/IDQgOiA2O1xyXG4gICAgICAgICAgeFBvcyA9IHBvaW50c1syXVsxXSArIHBhZGRpbmcgKiAoZC52YWx1ZSA8IDAgPyAtMSA6IDEpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgeFBvcyA9ICQkLmhhc1R5cGUoJ2JhcicpID8gKHBvaW50c1syXVswXSArIHBvaW50c1swXVswXSkgLyAyIDogcG9pbnRzWzBdWzBdO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIHNob3cgbGFiZWxzIHJlZ2FyZGxlc3Mgb2YgdGhlIGRvbWFpbiBpZiB2YWx1ZSBpcyBudWxsXHJcbiAgICAgIGlmIChkLnZhbHVlID09PSBudWxsKSB7XHJcbiAgICAgICAgICBpZiAoeFBvcyA+ICQkLndpZHRoKSB7XHJcbiAgICAgICAgICAgICAgeFBvcyA9ICQkLndpZHRoIC0gYm94LndpZHRoO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSBpZiAoeFBvcyA8IDApIHtcclxuICAgICAgICAgICAgICB4UG9zID0gNDtcclxuICAgICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4geFBvcztcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmdldFlGb3JUZXh0ID0gZnVuY3Rpb24gKHBvaW50cywgZCwgdGV4dEVsZW1lbnQpIHtcclxuICAgICAgdmFyICQkID0gdGhpcywgYm94ID0gZ2V0QkJveCh0ZXh0RWxlbWVudCksIHlQb3M7XHJcbiAgICAgIGlmICgkJC5jb25maWcuYXhpc19yb3RhdGVkKSB7XHJcbiAgICAgICAgICB5UG9zID0gKHBvaW50c1swXVswXSArIHBvaW50c1syXVswXSArIGJveC5oZWlnaHQgKiAwLjYpIC8gMjtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICAgIHlQb3MgPSBwb2ludHNbMl1bMV07XHJcbiAgICAgICAgICBpZiAoZC52YWx1ZSA8IDAgfHwgKGQudmFsdWUgPT09IDAgJiYgISQkLmhhc1Bvc2l0aXZlVmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgeVBvcyArPSBib3guaGVpZ2h0O1xyXG4gICAgICAgICAgICAgIGlmICgkJC5pc0JhclR5cGUoZCkgJiYgJCQuaXNTYWZhcmkoKSkge1xyXG4gICAgICAgICAgICAgICAgICB5UG9zIC09IDM7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2UgaWYgKCEkJC5pc0JhclR5cGUoZCkgJiYgJCQuaXNDaHJvbWUoKSkge1xyXG4gICAgICAgICAgICAgICAgICB5UG9zICs9IDM7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgeVBvcyArPSAkJC5pc0JhclR5cGUoZCkgPyAtMyA6IC02O1xyXG4gICAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIC8vIHNob3cgbGFiZWxzIHJlZ2FyZGxlc3Mgb2YgdGhlIGRvbWFpbiBpZiB2YWx1ZSBpcyBudWxsXHJcbiAgICAgIGlmIChkLnZhbHVlID09PSBudWxsICYmICEkJC5jb25maWcuYXhpc19yb3RhdGVkKSB7XHJcbiAgICAgICAgICBpZiAoeVBvcyA8IGJveC5oZWlnaHQpIHtcclxuICAgICAgICAgICAgICB5UG9zID0gYm94LmhlaWdodDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2UgaWYgKHlQb3MgPiB0aGlzLmhlaWdodCkge1xyXG4gICAgICAgICAgICAgIHlQb3MgPSB0aGlzLmhlaWdodCAtIDQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHlQb3M7XHJcbiAgfTtcblxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5pbml0VGl0bGUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXM7XHJcbiAgICAgICQkLnRpdGxlID0gJCQuc3ZnXHJcbiAgICAgICAgICAuYXBwZW5kKCd0ZXh0JylcclxuICAgICAgICAgIC50ZXh0KCQkLmNvbmZpZy50aXRsZV90ZXh0KVxyXG4gICAgICAgICAgLmF0dHIoJ2NsYXNzJywgJCQuQ0xBU1MudGl0bGUpO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUucmVkcmF3VGl0bGUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXM7XHJcbiAgICAgICQkLnRpdGxlLmF0dHIoJ3gnLCAkJC54Rm9yVGl0bGUuYmluZCgkJCkpLmF0dHIoJ3knLCAkJC55Rm9yVGl0bGUuYmluZCgkJCkpO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUueEZvclRpdGxlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzLCBjb25maWcgPSAkJC5jb25maWcsIHBvc2l0aW9uID0gY29uZmlnLnRpdGxlX3Bvc2l0aW9uIHx8ICdsZWZ0JywgeDtcclxuICAgICAgaWYgKHBvc2l0aW9uLmluZGV4T2YoJ3JpZ2h0JykgPj0gMCkge1xyXG4gICAgICAgICAgeCA9XHJcbiAgICAgICAgICAgICAgJCQuY3VycmVudFdpZHRoIC1cclxuICAgICAgICAgICAgICAgICAgJCQuZ2V0VGV4dFJlY3QoJCQudGl0bGUubm9kZSgpLnRleHRDb250ZW50LCAkJC5DTEFTUy50aXRsZSwgJCQudGl0bGUubm9kZSgpKS53aWR0aCAtXHJcbiAgICAgICAgICAgICAgICAgIGNvbmZpZy50aXRsZV9wYWRkaW5nLnJpZ2h0O1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHBvc2l0aW9uLmluZGV4T2YoJ2NlbnRlcicpID49IDApIHtcclxuICAgICAgICAgIHggPSBNYXRoLm1heCgoJCQuY3VycmVudFdpZHRoIC1cclxuICAgICAgICAgICAgICAkJC5nZXRUZXh0UmVjdCgkJC50aXRsZS5ub2RlKCkudGV4dENvbnRlbnQsICQkLkNMQVNTLnRpdGxlLCAkJC50aXRsZS5ub2RlKCkpLndpZHRoKSAvXHJcbiAgICAgICAgICAgICAgMiwgMCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAvLyBsZWZ0XHJcbiAgICAgICAgICB4ID0gY29uZmlnLnRpdGxlX3BhZGRpbmcubGVmdDtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4geDtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLnlGb3JUaXRsZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgdmFyICQkID0gdGhpcztcclxuICAgICAgcmV0dXJuICgkJC5jb25maWcudGl0bGVfcGFkZGluZy50b3AgK1xyXG4gICAgICAgICAgJCQuZ2V0VGV4dFJlY3QoJCQudGl0bGUubm9kZSgpLnRleHRDb250ZW50LCAkJC5DTEFTUy50aXRsZSwgJCQudGl0bGUubm9kZSgpKVxyXG4gICAgICAgICAgICAgIC5oZWlnaHQpO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuZ2V0VGl0bGVQYWRkaW5nID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzO1xyXG4gICAgICByZXR1cm4gJCQueUZvclRpdGxlKCkgKyAkJC5jb25maWcudGl0bGVfcGFkZGluZy5ib3R0b207XHJcbiAgfTtcblxuICBmdW5jdGlvbiBwb3dlck9mVGVuKGQpIHtcclxuICAgICAgcmV0dXJuIGQgLyBNYXRoLnBvdygxMCwgTWF0aC5jZWlsKE1hdGgubG9nKGQpIC8gTWF0aC5MTjEwIC0gMWUtMTIpKSA9PT0gMTtcclxuICB9XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuZHJhd0NvbG9yU2NhbGUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXMsIGQzID0gJCQuZDMsIGNvbmZpZyA9ICQkLmNvbmZpZywgdGFyZ2V0ID0gJCQuZGF0YS50YXJnZXRzWzBdLCBiYXJXaWR0aCwgYmFySGVpZ2h0LCBheGlzLCBwb2ludHMsIGxlZ2VuZEF4aXMsIGF4aXNTY2FsZSwgaW52ZXJzZVNjYWxlLCBoZWlnaHQ7XHJcbiAgICAgIGJhcldpZHRoID0gIWlzTmFOKGNvbmZpZy5zdGFuZm9yZF9zY2FsZVdpZHRoKVxyXG4gICAgICAgICAgPyBjb25maWcuc3RhbmZvcmRfc2NhbGVXaWR0aFxyXG4gICAgICAgICAgOiAyMDtcclxuICAgICAgYmFySGVpZ2h0ID0gNTtcclxuICAgICAgaWYgKGJhckhlaWdodCA8IDAgfHwgYmFyV2lkdGggPCAwKSB7XHJcbiAgICAgICAgICB0aHJvdyBFcnJvcihcIkNvbG9yc2NhbGUncyBiYXJoZWlnaHQgYW5kIGJhcndpZHRoIG11c3QgYmUgZ3JlYXRlciB0aGFuIDAuXCIpO1xyXG4gICAgICB9XHJcbiAgICAgIGhlaWdodCA9XHJcbiAgICAgICAgICAkJC5oZWlnaHQgLSBjb25maWcuc3RhbmZvcmRfcGFkZGluZy5ib3R0b20gLSBjb25maWcuc3RhbmZvcmRfcGFkZGluZy50b3A7XHJcbiAgICAgIHBvaW50cyA9IGQzLnJhbmdlKGNvbmZpZy5zdGFuZm9yZF9wYWRkaW5nLmJvdHRvbSwgaGVpZ2h0LCBiYXJIZWlnaHQpO1xyXG4gICAgICBpbnZlcnNlU2NhbGUgPSBkM1xyXG4gICAgICAgICAgLnNjYWxlU2VxdWVudGlhbCh0YXJnZXQuY29sb3JzKVxyXG4gICAgICAgICAgLmRvbWFpbihbcG9pbnRzW3BvaW50cy5sZW5ndGggLSAxXSwgcG9pbnRzWzBdXSk7XHJcbiAgICAgIGlmICgkJC5jb2xvclNjYWxlKSB7XHJcbiAgICAgICAgICAkJC5jb2xvclNjYWxlLnJlbW92ZSgpO1xyXG4gICAgICB9XHJcbiAgICAgICQkLmNvbG9yU2NhbGUgPSAkJC5zdmdcclxuICAgICAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAgICAgLmF0dHIoJ3dpZHRoJywgNTApXHJcbiAgICAgICAgICAuYXR0cignaGVpZ2h0JywgaGVpZ2h0KVxyXG4gICAgICAgICAgLmF0dHIoJ2NsYXNzJywgQ0xBU1MuY29sb3JTY2FsZSk7XHJcbiAgICAgICQkLmNvbG9yU2NhbGVcclxuICAgICAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIFwidHJhbnNsYXRlKDAsIFwiICsgY29uZmlnLnN0YW5mb3JkX3BhZGRpbmcudG9wICsgXCIpXCIpXHJcbiAgICAgICAgICAuc2VsZWN0QWxsKCdiYXJzJylcclxuICAgICAgICAgIC5kYXRhKHBvaW50cylcclxuICAgICAgICAgIC5lbnRlcigpXHJcbiAgICAgICAgICAuYXBwZW5kKCdyZWN0JylcclxuICAgICAgICAgIC5hdHRyKCd5JywgZnVuY3Rpb24gKGQsIGkpIHsgcmV0dXJuIGkgKiBiYXJIZWlnaHQ7IH0pXHJcbiAgICAgICAgICAuYXR0cigneCcsIDApXHJcbiAgICAgICAgICAuYXR0cignd2lkdGgnLCBiYXJXaWR0aClcclxuICAgICAgICAgIC5hdHRyKCdoZWlnaHQnLCBiYXJIZWlnaHQpXHJcbiAgICAgICAgICAuYXR0cignZmlsbCcsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICByZXR1cm4gaW52ZXJzZVNjYWxlKGQpO1xyXG4gICAgICB9KTtcclxuICAgICAgLy8gTGVnZW5kIEF4aXNcclxuICAgICAgYXhpc1NjYWxlID0gZDNcclxuICAgICAgICAgIC5zY2FsZUxvZygpXHJcbiAgICAgICAgICAuZG9tYWluKFt0YXJnZXQubWluRXBvY2hzLCB0YXJnZXQubWF4RXBvY2hzXSlcclxuICAgICAgICAgIC5yYW5nZShbXHJcbiAgICAgICAgICBwb2ludHNbMF0gK1xyXG4gICAgICAgICAgICAgIGNvbmZpZy5zdGFuZm9yZF9wYWRkaW5nLnRvcCArXHJcbiAgICAgICAgICAgICAgcG9pbnRzW3BvaW50cy5sZW5ndGggLSAxXSArXHJcbiAgICAgICAgICAgICAgYmFySGVpZ2h0IC1cclxuICAgICAgICAgICAgICAxLFxyXG4gICAgICAgICAgcG9pbnRzWzBdICsgY29uZmlnLnN0YW5mb3JkX3BhZGRpbmcudG9wXHJcbiAgICAgIF0pO1xyXG4gICAgICBsZWdlbmRBeGlzID0gZDMuYXhpc1JpZ2h0KGF4aXNTY2FsZSk7XHJcbiAgICAgIGlmIChjb25maWcuc3RhbmZvcmRfc2NhbGVGb3JtYXQgPT09ICdwb3cxMCcpIHtcclxuICAgICAgICAgIGxlZ2VuZEF4aXMudGlja1ZhbHVlcyhbMSwgMTAsIDEwMCwgMTAwMCwgMTAwMDAsIDEwMDAwMCwgMTAwMDAwMCwgMTAwMDAwMDBdKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChpc0Z1bmN0aW9uKGNvbmZpZy5zdGFuZm9yZF9zY2FsZUZvcm1hdCkpIHtcclxuICAgICAgICAgIGxlZ2VuZEF4aXMudGlja0Zvcm1hdChjb25maWcuc3RhbmZvcmRfc2NhbGVGb3JtYXQpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgbGVnZW5kQXhpcy50aWNrRm9ybWF0KGQzLmZvcm1hdCgnZCcpKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoaXNGdW5jdGlvbihjb25maWcuc3RhbmZvcmRfc2NhbGVWYWx1ZXMpKSB7XHJcbiAgICAgICAgICBsZWdlbmRBeGlzLnRpY2tWYWx1ZXMoY29uZmlnLnN0YW5mb3JkX3NjYWxlVmFsdWVzKHRhcmdldC5taW5FcG9jaHMsIHRhcmdldC5tYXhFcG9jaHMpKTtcclxuICAgICAgfVxyXG4gICAgICAvLyBEcmF3IEF4aXNcclxuICAgICAgYXhpcyA9ICQkLmNvbG9yU2NhbGVcclxuICAgICAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xlZ2VuZCBheGlzJylcclxuICAgICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBcInRyYW5zbGF0ZShcIiArIGJhcldpZHRoICsgXCIsMClcIilcclxuICAgICAgICAgIC5jYWxsKGxlZ2VuZEF4aXMpO1xyXG4gICAgICBpZiAoY29uZmlnLnN0YW5mb3JkX3NjYWxlRm9ybWF0ID09PSAncG93MTAnKSB7XHJcbiAgICAgICAgICBheGlzXHJcbiAgICAgICAgICAgICAgLnNlbGVjdEFsbCgnLnRpY2sgdGV4dCcpXHJcbiAgICAgICAgICAgICAgLnRleHQobnVsbClcclxuICAgICAgICAgICAgICAuZmlsdGVyKHBvd2VyT2ZUZW4pXHJcbiAgICAgICAgICAgICAgLnRleHQoMTApXHJcbiAgICAgICAgICAgICAgLmFwcGVuZCgndHNwYW4nKVxyXG4gICAgICAgICAgICAgIC5hdHRyKCdkeScsICctLjdlbScpIC8vIGh0dHBzOi8vYmwub2Nrcy5vcmcvbWJvc3RvY2svNjczODIyOVxyXG4gICAgICAgICAgICAgIC50ZXh0KGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIE1hdGgucm91bmQoTWF0aC5sb2coZCkgLyBNYXRoLkxOMTApO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgJCQuY29sb3JTY2FsZS5hdHRyKCd0cmFuc2Zvcm0nLCBcInRyYW5zbGF0ZShcIiArICgkJC5jdXJyZW50V2lkdGggLSAkJC54Rm9yQ29sb3JTY2FsZSgpKSArIFwiLCAwKVwiKTtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLnhGb3JDb2xvclNjYWxlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzO1xyXG4gICAgICByZXR1cm4gJCQuY29uZmlnLnN0YW5mb3JkX3BhZGRpbmcucmlnaHQgKyBnZXRCQm94KCQkLmNvbG9yU2NhbGUubm9kZSgpKS53aWR0aDtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmdldENvbG9yU2NhbGVQYWRkaW5nID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzO1xyXG4gICAgICByZXR1cm4gJCQueEZvckNvbG9yU2NhbGUoKSArICQkLmNvbmZpZy5zdGFuZm9yZF9wYWRkaW5nLmxlZnQgKyAyMDtcclxuICB9O1xuXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmlzU3RhbmZvcmRHcmFwaFR5cGUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXM7XHJcbiAgICAgIHJldHVybiAkJC5jb25maWcuZGF0YV90eXBlID09PSAnc3RhbmZvcmQnO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuaW5pdFN0YW5mb3JkRGF0YSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgdmFyICQkID0gdGhpcywgZDMgPSAkJC5kMywgY29uZmlnID0gJCQuY29uZmlnLCB0YXJnZXQgPSAkJC5kYXRhLnRhcmdldHNbMF0sIGVwb2NocywgbWF4RXBvY2hzLCBtaW5FcG9jaHM7XHJcbiAgICAgIC8vIE1ha2UgbGFyZ2VyIHZhbHVlcyBhcHBlYXIgb24gdG9wXHJcbiAgICAgIHRhcmdldC52YWx1ZXMuc29ydChjb21wYXJlRXBvY2hzKTtcclxuICAgICAgLy8gR2V0IGFycmF5IG9mIGVwb2Noc1xyXG4gICAgICBlcG9jaHMgPSB0YXJnZXQudmFsdWVzLm1hcChmdW5jdGlvbiAoYSkgeyByZXR1cm4gYS5lcG9jaHM7IH0pO1xyXG4gICAgICBtaW5FcG9jaHMgPSAhaXNOYU4oY29uZmlnLnN0YW5mb3JkX3NjYWxlTWluKVxyXG4gICAgICAgICAgPyBjb25maWcuc3RhbmZvcmRfc2NhbGVNaW5cclxuICAgICAgICAgIDogZDMubWluKGVwb2Nocyk7XHJcbiAgICAgIG1heEVwb2NocyA9ICFpc05hTihjb25maWcuc3RhbmZvcmRfc2NhbGVNYXgpXHJcbiAgICAgICAgICA/IGNvbmZpZy5zdGFuZm9yZF9zY2FsZU1heFxyXG4gICAgICAgICAgOiBkMy5tYXgoZXBvY2hzKTtcclxuICAgICAgaWYgKG1pbkVwb2NocyA+IG1heEVwb2Nocykge1xyXG4gICAgICAgICAgdGhyb3cgRXJyb3IoJ051bWJlciBvZiBtaW5FcG9jaHMgaGFzIHRvIGJlIHNtYWxsZXIgdGhhbiBtYXhFcG9jaHMnKTtcclxuICAgICAgfVxyXG4gICAgICB0YXJnZXQuY29sb3JzID0gaXNGdW5jdGlvbihjb25maWcuc3RhbmZvcmRfY29sb3JzKVxyXG4gICAgICAgICAgPyBjb25maWcuc3RhbmZvcmRfY29sb3JzXHJcbiAgICAgICAgICA6IGQzLmludGVycG9sYXRlSHNsTG9uZyhkMy5oc2woMjUwLCAxLCAwLjUpLCBkMy5oc2woMCwgMSwgMC41KSk7XHJcbiAgICAgIHRhcmdldC5jb2xvcnNjYWxlID0gZDNcclxuICAgICAgICAgIC5zY2FsZVNlcXVlbnRpYWxMb2codGFyZ2V0LmNvbG9ycylcclxuICAgICAgICAgIC5kb21haW4oW21pbkVwb2NocywgbWF4RXBvY2hzXSk7XHJcbiAgICAgIHRhcmdldC5taW5FcG9jaHMgPSBtaW5FcG9jaHM7XHJcbiAgICAgIHRhcmdldC5tYXhFcG9jaHMgPSBtYXhFcG9jaHM7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5nZXRTdGFuZm9yZFBvaW50Q29sb3IgPSBmdW5jdGlvbiAoZCkge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzLCB0YXJnZXQgPSAkJC5kYXRhLnRhcmdldHNbMF07XHJcbiAgICAgIHJldHVybiB0YXJnZXQuY29sb3JzY2FsZShkLmVwb2Nocyk7XHJcbiAgfTtcclxuICAvLyBodHRwOi8vanNmaWRkbGUubmV0L1hvdGljNzUwL0t0ekxxL1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmdldENlbnRyb2lkID0gZnVuY3Rpb24gKHBvaW50cykge1xyXG4gICAgICB2YXIgYXJlYSA9IGdldFJlZ2lvbkFyZWEocG9pbnRzKTtcclxuICAgICAgdmFyIHggPSAwLCB5ID0gMCwgaSwgaiwgZiwgcG9pbnQxLCBwb2ludDI7XHJcbiAgICAgIGZvciAoaSA9IDAsIGogPSBwb2ludHMubGVuZ3RoIC0gMTsgaSA8IHBvaW50cy5sZW5ndGg7IGogPSBpLCBpICs9IDEpIHtcclxuICAgICAgICAgIHBvaW50MSA9IHBvaW50c1tpXTtcclxuICAgICAgICAgIHBvaW50MiA9IHBvaW50c1tqXTtcclxuICAgICAgICAgIGYgPSBwb2ludDEueCAqIHBvaW50Mi55IC0gcG9pbnQyLnggKiBwb2ludDEueTtcclxuICAgICAgICAgIHggKz0gKHBvaW50MS54ICsgcG9pbnQyLngpICogZjtcclxuICAgICAgICAgIHkgKz0gKHBvaW50MS55ICsgcG9pbnQyLnkpICogZjtcclxuICAgICAgfVxyXG4gICAgICBmID0gYXJlYSAqIDY7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICB4OiB4IC8gZixcclxuICAgICAgICAgIHk6IHkgLyBmXHJcbiAgICAgIH07XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5nZXRTdGFuZm9yZFRvb2x0aXBUaXRsZSA9IGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXMsIGxhYmVsWCA9ICQkLmF4aXMuZ2V0TGFiZWxUZXh0KCd4JyksIGxhYmVsWSA9ICQkLmF4aXMuZ2V0TGFiZWxUZXh0KCd5Jyk7XHJcbiAgICAgIHJldHVybiBcIlxcbiAgICAgIDx0cj48dGg+XCIgKyAobGFiZWxYID8gc2FuaXRpc2UobGFiZWxYKSA6ICd4JykgKyBcIjwvdGg+PHRoIGNsYXNzPSd2YWx1ZSc+XCIgKyBkLnggKyBcIjwvdGg+PC90cj5cXG4gICAgICA8dHI+PHRoPlwiICsgKGxhYmVsWSA/IHNhbml0aXNlKGxhYmVsWSkgOiAneScpICsgXCI8L3RoPjx0aCBjbGFzcz0ndmFsdWUnPlwiICsgZC52YWx1ZSArIFwiPC90aD48L3RyPlxcbiAgICBcIjtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmNvdW50RXBvY2hzSW5SZWdpb24gPSBmdW5jdGlvbiAocmVnaW9uKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXMsIHRhcmdldCA9ICQkLmRhdGEudGFyZ2V0c1swXSwgdG90YWwsIGNvdW50O1xyXG4gICAgICB0b3RhbCA9IHRhcmdldC52YWx1ZXMucmVkdWNlKGZ1bmN0aW9uIChhY2N1bXVsYXRvciwgY3VycmVudFZhbHVlKSB7IHJldHVybiBhY2N1bXVsYXRvciArIE51bWJlcihjdXJyZW50VmFsdWUuZXBvY2hzKTsgfSwgMCk7XHJcbiAgICAgIGNvdW50ID0gdGFyZ2V0LnZhbHVlcy5yZWR1Y2UoZnVuY3Rpb24gKGFjY3VtdWxhdG9yLCBjdXJyZW50VmFsdWUpIHtcclxuICAgICAgICAgIGlmIChwb2ludEluUmVnaW9uKGN1cnJlbnRWYWx1ZSwgcmVnaW9uKSkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBhY2N1bXVsYXRvciArIE51bWJlcihjdXJyZW50VmFsdWUuZXBvY2hzKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBhY2N1bXVsYXRvcjtcclxuICAgICAgfSwgMCk7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICB2YWx1ZTogY291bnQsXHJcbiAgICAgICAgICBwZXJjZW50YWdlOiBjb3VudCAhPT0gMCA/ICgoY291bnQgLyB0b3RhbCkgKiAxMDApLnRvRml4ZWQoMSkgOiAwXHJcbiAgICAgIH07XHJcbiAgfTtcclxuICB2YXIgZ2V0UmVnaW9uQXJlYSA9IGZ1bmN0aW9uIChwb2ludHMpIHtcclxuICAgICAgLy8gdGhhbmtzIHRvOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xNjI4MjMzMC9maW5kLWNlbnRlcnBvaW50LW9mLXBvbHlnb24taW4tamF2YXNjcmlwdFxyXG4gICAgICB2YXIgYXJlYSA9IDAsIGksIGosIHBvaW50MSwgcG9pbnQyO1xyXG4gICAgICBmb3IgKGkgPSAwLCBqID0gcG9pbnRzLmxlbmd0aCAtIDE7IGkgPCBwb2ludHMubGVuZ3RoOyBqID0gaSwgaSArPSAxKSB7XHJcbiAgICAgICAgICBwb2ludDEgPSBwb2ludHNbaV07XHJcbiAgICAgICAgICBwb2ludDIgPSBwb2ludHNbal07XHJcbiAgICAgICAgICBhcmVhICs9IHBvaW50MS54ICogcG9pbnQyLnk7XHJcbiAgICAgICAgICBhcmVhIC09IHBvaW50MS55ICogcG9pbnQyLng7XHJcbiAgICAgIH1cclxuICAgICAgYXJlYSAvPSAyO1xyXG4gICAgICByZXR1cm4gYXJlYTtcclxuICB9O1xyXG4gIHZhciBwb2ludEluUmVnaW9uID0gZnVuY3Rpb24gKHBvaW50LCByZWdpb24pIHtcclxuICAgICAgLy8gdGhhbmtzIHRvOiBodHRwOi8vYmwub2Nrcy5vcmcvYnljb2ZmZS81NTc1OTA0XHJcbiAgICAgIC8vIHJheS1jYXN0aW5nIGFsZ29yaXRobSBiYXNlZCBvblxyXG4gICAgICAvLyBodHRwOi8vd3d3LmVjc2UucnBpLmVkdS9Ib21lcGFnZXMvd3JmL1Jlc2VhcmNoL1Nob3J0X05vdGVzL3BucG9seS5odG1sXHJcbiAgICAgIHZhciB4aSwgeWksIHlqLCB4aiwgaW50ZXJzZWN0LCB4ID0gcG9pbnQueCwgeSA9IHBvaW50LnZhbHVlLCBpbnNpZGUgPSBmYWxzZTtcclxuICAgICAgZm9yICh2YXIgaSA9IDAsIGogPSByZWdpb24ubGVuZ3RoIC0gMTsgaSA8IHJlZ2lvbi5sZW5ndGg7IGogPSBpKyspIHtcclxuICAgICAgICAgIHhpID0gcmVnaW9uW2ldLng7XHJcbiAgICAgICAgICB5aSA9IHJlZ2lvbltpXS55O1xyXG4gICAgICAgICAgeGogPSByZWdpb25bal0ueDtcclxuICAgICAgICAgIHlqID0gcmVnaW9uW2pdLnk7XHJcbiAgICAgICAgICBpbnRlcnNlY3QgPSB5aSA+IHkgIT09IHlqID4geSAmJiB4IDwgKCh4aiAtIHhpKSAqICh5IC0geWkpKSAvICh5aiAtIHlpKSArIHhpO1xyXG4gICAgICAgICAgaWYgKGludGVyc2VjdCkge1xyXG4gICAgICAgICAgICAgIGluc2lkZSA9ICFpbnNpZGU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGluc2lkZTtcclxuICB9O1xyXG4gIHZhciBjb21wYXJlRXBvY2hzID0gZnVuY3Rpb24gKGEsIGIpIHtcclxuICAgICAgaWYgKGEuZXBvY2hzIDwgYi5lcG9jaHMpIHtcclxuICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoYS5lcG9jaHMgPiBiLmVwb2Nocykge1xyXG4gICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIDA7XHJcbiAgfTtcblxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5pbml0U3RhbmZvcmRFbGVtZW50cyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgdmFyICQkID0gdGhpcztcclxuICAgICAgLy8gQXZvaWQgYmxvY2tpbmcgZXZlbnRSZWN0XHJcbiAgICAgICQkLnN0YW5mb3JkRWxlbWVudHMgPSAkJC5tYWluXHJcbiAgICAgICAgICAuc2VsZWN0KCcuJyArIENMQVNTLmNoYXJ0KVxyXG4gICAgICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgICAgICAuYXR0cignY2xhc3MnLCBDTEFTUy5zdGFuZm9yZEVsZW1lbnRzKTtcclxuICAgICAgJCQuc3RhbmZvcmRFbGVtZW50cy5hcHBlbmQoJ2cnKS5hdHRyKCdjbGFzcycsIENMQVNTLnN0YW5mb3JkTGluZXMpO1xyXG4gICAgICAkJC5zdGFuZm9yZEVsZW1lbnRzLmFwcGVuZCgnZycpLmF0dHIoJ2NsYXNzJywgQ0xBU1Muc3RhbmZvcmRUZXh0cyk7XHJcbiAgICAgICQkLnN0YW5mb3JkRWxlbWVudHMuYXBwZW5kKCdnJykuYXR0cignY2xhc3MnLCBDTEFTUy5zdGFuZm9yZFJlZ2lvbnMpO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUudXBkYXRlU3RhbmZvcmRFbGVtZW50cyA9IGZ1bmN0aW9uIChkdXJhdGlvbikge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzLCBtYWluID0gJCQubWFpbiwgY29uZmlnID0gJCQuY29uZmlnLCBzdGFuZm9yZExpbmUsIHN0YW5mb3JkTGluZUVudGVyLCBzdGFuZm9yZFJlZ2lvbiwgc3RhbmZvcmRSZWdpb25FbnRlciwgc3RhbmZvcmRUZXh0LCBzdGFuZm9yZFRleHRFbnRlciwgeHZDdXN0b20gPSAkJC54dkN1c3RvbS5iaW5kKCQkKSwgeXZDdXN0b20gPSAkJC55dkN1c3RvbS5iaW5kKCQkKSwgY291bnRQb2ludHNJblJlZ2lvbiA9ICQkLmNvdW50RXBvY2hzSW5SZWdpb24uYmluZCgkJCk7XHJcbiAgICAgIC8vIFN0YW5mb3JkLUxpbmVzXHJcbiAgICAgIHN0YW5mb3JkTGluZSA9IG1haW5cclxuICAgICAgICAgIC5zZWxlY3QoJy4nICsgQ0xBU1Muc3RhbmZvcmRMaW5lcylcclxuICAgICAgICAgIC5zdHlsZSgnc2hhcGUtcmVuZGVyaW5nJywgJ2dlb21ldHJpY3ByZWNpc2lvbicpXHJcbiAgICAgICAgICAuc2VsZWN0QWxsKCcuJyArIENMQVNTLnN0YW5mb3JkTGluZSlcclxuICAgICAgICAgIC5kYXRhKGNvbmZpZy5zdGFuZm9yZF9saW5lcyk7XHJcbiAgICAgIC8vIGVudGVyXHJcbiAgICAgIHN0YW5mb3JkTGluZUVudGVyID0gc3RhbmZvcmRMaW5lXHJcbiAgICAgICAgICAuZW50ZXIoKVxyXG4gICAgICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgICAgICAuYXR0cignY2xhc3MnLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgcmV0dXJuIENMQVNTLnN0YW5mb3JkTGluZSArIChkWydjbGFzcyddID8gJyAnICsgZFsnY2xhc3MnXSA6ICcnKTtcclxuICAgICAgfSk7XHJcbiAgICAgIHN0YW5mb3JkTGluZUVudGVyXHJcbiAgICAgICAgICAuYXBwZW5kKCdsaW5lJylcclxuICAgICAgICAgIC5hdHRyKCd4MScsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICByZXR1cm4gY29uZmlnLmF4aXNfcm90YXRlZCA/IHl2Q3VzdG9tKGQsICd2YWx1ZV95MScpIDogeHZDdXN0b20oZCwgJ3ZhbHVlX3gxJyk7XHJcbiAgICAgIH0pXHJcbiAgICAgICAgICAuYXR0cigneDInLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgcmV0dXJuIGNvbmZpZy5heGlzX3JvdGF0ZWQgPyB5dkN1c3RvbShkLCAndmFsdWVfeTInKSA6IHh2Q3VzdG9tKGQsICd2YWx1ZV94MicpO1xyXG4gICAgICB9KVxyXG4gICAgICAgICAgLmF0dHIoJ3kxJywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIHJldHVybiBjb25maWcuYXhpc19yb3RhdGVkID8geHZDdXN0b20oZCwgJ3ZhbHVlX3gxJykgOiB5dkN1c3RvbShkLCAndmFsdWVfeTEnKTtcclxuICAgICAgfSlcclxuICAgICAgICAgIC5hdHRyKCd5MicsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICByZXR1cm4gY29uZmlnLmF4aXNfcm90YXRlZCA/IHh2Q3VzdG9tKGQsICd2YWx1ZV94MicpIDogeXZDdXN0b20oZCwgJ3ZhbHVlX3kyJyk7XHJcbiAgICAgIH0pXHJcbiAgICAgICAgICAuc3R5bGUoJ29wYWNpdHknLCAwKTtcclxuICAgICAgLy8gdXBkYXRlXHJcbiAgICAgICQkLnN0YW5mb3JkTGluZXMgPSBzdGFuZm9yZExpbmVFbnRlci5tZXJnZShzdGFuZm9yZExpbmUpO1xyXG4gICAgICAkJC5zdGFuZm9yZExpbmVzXHJcbiAgICAgICAgICAuc2VsZWN0KCdsaW5lJylcclxuICAgICAgICAgIC50cmFuc2l0aW9uKClcclxuICAgICAgICAgIC5kdXJhdGlvbihkdXJhdGlvbilcclxuICAgICAgICAgIC5hdHRyKCd4MScsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICByZXR1cm4gY29uZmlnLmF4aXNfcm90YXRlZCA/IHl2Q3VzdG9tKGQsICd2YWx1ZV95MScpIDogeHZDdXN0b20oZCwgJ3ZhbHVlX3gxJyk7XHJcbiAgICAgIH0pXHJcbiAgICAgICAgICAuYXR0cigneDInLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgcmV0dXJuIGNvbmZpZy5heGlzX3JvdGF0ZWQgPyB5dkN1c3RvbShkLCAndmFsdWVfeTInKSA6IHh2Q3VzdG9tKGQsICd2YWx1ZV94MicpO1xyXG4gICAgICB9KVxyXG4gICAgICAgICAgLmF0dHIoJ3kxJywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIHJldHVybiBjb25maWcuYXhpc19yb3RhdGVkID8geHZDdXN0b20oZCwgJ3ZhbHVlX3gxJykgOiB5dkN1c3RvbShkLCAndmFsdWVfeTEnKTtcclxuICAgICAgfSlcclxuICAgICAgICAgIC5hdHRyKCd5MicsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICByZXR1cm4gY29uZmlnLmF4aXNfcm90YXRlZCA/IHh2Q3VzdG9tKGQsICd2YWx1ZV94MicpIDogeXZDdXN0b20oZCwgJ3ZhbHVlX3kyJyk7XHJcbiAgICAgIH0pXHJcbiAgICAgICAgICAuc3R5bGUoJ29wYWNpdHknLCAxKTtcclxuICAgICAgLy8gZXhpdFxyXG4gICAgICBzdGFuZm9yZExpbmVcclxuICAgICAgICAgIC5leGl0KClcclxuICAgICAgICAgIC50cmFuc2l0aW9uKClcclxuICAgICAgICAgIC5kdXJhdGlvbihkdXJhdGlvbilcclxuICAgICAgICAgIC5zdHlsZSgnb3BhY2l0eScsIDApXHJcbiAgICAgICAgICAucmVtb3ZlKCk7XHJcbiAgICAgIC8vIFN0YW5mb3JkLVRleHRcclxuICAgICAgc3RhbmZvcmRUZXh0ID0gbWFpblxyXG4gICAgICAgICAgLnNlbGVjdCgnLicgKyBDTEFTUy5zdGFuZm9yZFRleHRzKVxyXG4gICAgICAgICAgLnNlbGVjdEFsbCgnLicgKyBDTEFTUy5zdGFuZm9yZFRleHQpXHJcbiAgICAgICAgICAuZGF0YShjb25maWcuc3RhbmZvcmRfdGV4dHMpO1xyXG4gICAgICAvLyBlbnRlclxyXG4gICAgICBzdGFuZm9yZFRleHRFbnRlciA9IHN0YW5mb3JkVGV4dFxyXG4gICAgICAgICAgLmVudGVyKClcclxuICAgICAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAgICAgLmF0dHIoJ2NsYXNzJywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIHJldHVybiBDTEFTUy5zdGFuZm9yZFRleHQgKyAoZFsnY2xhc3MnXSA/ICcgJyArIGRbJ2NsYXNzJ10gOiAnJyk7XHJcbiAgICAgIH0pO1xyXG4gICAgICBzdGFuZm9yZFRleHRFbnRlclxyXG4gICAgICAgICAgLmFwcGVuZCgndGV4dCcpXHJcbiAgICAgICAgICAuYXR0cigneCcsIGZ1bmN0aW9uIChkKSB7IHJldHVybiAoY29uZmlnLmF4aXNfcm90YXRlZCA/IHl2Q3VzdG9tKGQsICd5JykgOiB4dkN1c3RvbShkLCAneCcpKTsgfSlcclxuICAgICAgICAgIC5hdHRyKCd5JywgZnVuY3Rpb24gKGQpIHsgcmV0dXJuIChjb25maWcuYXhpc19yb3RhdGVkID8geHZDdXN0b20oZCwgJ3gnKSA6IHl2Q3VzdG9tKGQsICd5JykpOyB9KVxyXG4gICAgICAgICAgLnN0eWxlKCdvcGFjaXR5JywgMCk7XHJcbiAgICAgIC8vIHVwZGF0ZVxyXG4gICAgICAkJC5zdGFuZm9yZFRleHRzID0gc3RhbmZvcmRUZXh0RW50ZXIubWVyZ2Uoc3RhbmZvcmRUZXh0KTtcclxuICAgICAgJCQuc3RhbmZvcmRUZXh0c1xyXG4gICAgICAgICAgLnNlbGVjdCgndGV4dCcpXHJcbiAgICAgICAgICAudHJhbnNpdGlvbigpXHJcbiAgICAgICAgICAuZHVyYXRpb24oZHVyYXRpb24pXHJcbiAgICAgICAgICAuYXR0cigneCcsIGZ1bmN0aW9uIChkKSB7IHJldHVybiAoY29uZmlnLmF4aXNfcm90YXRlZCA/IHl2Q3VzdG9tKGQsICd5JykgOiB4dkN1c3RvbShkLCAneCcpKTsgfSlcclxuICAgICAgICAgIC5hdHRyKCd5JywgZnVuY3Rpb24gKGQpIHsgcmV0dXJuIChjb25maWcuYXhpc19yb3RhdGVkID8geHZDdXN0b20oZCwgJ3gnKSA6IHl2Q3VzdG9tKGQsICd5JykpOyB9KVxyXG4gICAgICAgICAgLnRleHQoZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIHJldHVybiBkLmNvbnRlbnQ7XHJcbiAgICAgIH0pXHJcbiAgICAgICAgICAuc3R5bGUoJ29wYWNpdHknLCAxKTtcclxuICAgICAgLy8gZXhpdFxyXG4gICAgICBzdGFuZm9yZFRleHRcclxuICAgICAgICAgIC5leGl0KClcclxuICAgICAgICAgIC50cmFuc2l0aW9uKClcclxuICAgICAgICAgIC5kdXJhdGlvbihkdXJhdGlvbilcclxuICAgICAgICAgIC5zdHlsZSgnb3BhY2l0eScsIDApXHJcbiAgICAgICAgICAucmVtb3ZlKCk7XHJcbiAgICAgIC8vIFN0YW5mb3JkLVJlZ2lvbnNcclxuICAgICAgc3RhbmZvcmRSZWdpb24gPSBtYWluXHJcbiAgICAgICAgICAuc2VsZWN0KCcuJyArIENMQVNTLnN0YW5mb3JkUmVnaW9ucylcclxuICAgICAgICAgIC5zZWxlY3RBbGwoJy4nICsgQ0xBU1Muc3RhbmZvcmRSZWdpb24pXHJcbiAgICAgICAgICAuZGF0YShjb25maWcuc3RhbmZvcmRfcmVnaW9ucyk7XHJcbiAgICAgIC8vIGVudGVyXHJcbiAgICAgIHN0YW5mb3JkUmVnaW9uRW50ZXIgPSBzdGFuZm9yZFJlZ2lvblxyXG4gICAgICAgICAgLmVudGVyKClcclxuICAgICAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAgICAgLmF0dHIoJ2NsYXNzJywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIHJldHVybiBDTEFTUy5zdGFuZm9yZFJlZ2lvbiArIChkWydjbGFzcyddID8gJyAnICsgZFsnY2xhc3MnXSA6ICcnKTtcclxuICAgICAgfSk7XHJcbiAgICAgIHN0YW5mb3JkUmVnaW9uRW50ZXJcclxuICAgICAgICAgIC5hcHBlbmQoJ3BvbHlnb24nKVxyXG4gICAgICAgICAgLmF0dHIoJ3BvaW50cycsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICByZXR1cm4gZC5wb2ludHNcclxuICAgICAgICAgICAgICAubWFwKGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgICAgICAgIGNvbmZpZy5heGlzX3JvdGF0ZWQgPyB5dkN1c3RvbSh2YWx1ZSwgJ3knKSA6IHh2Q3VzdG9tKHZhbHVlLCAneCcpLFxyXG4gICAgICAgICAgICAgICAgICBjb25maWcuYXhpc19yb3RhdGVkID8geHZDdXN0b20odmFsdWUsICd4JykgOiB5dkN1c3RvbSh2YWx1ZSwgJ3knKVxyXG4gICAgICAgICAgICAgIF0uam9pbignLCcpO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAuam9pbignICcpO1xyXG4gICAgICB9KVxyXG4gICAgICAgICAgLnN0eWxlKCdvcGFjaXR5JywgMCk7XHJcbiAgICAgIHN0YW5mb3JkUmVnaW9uRW50ZXJcclxuICAgICAgICAgIC5hcHBlbmQoJ3RleHQnKVxyXG4gICAgICAgICAgLmF0dHIoJ3gnLCBmdW5jdGlvbiAoZCkgeyByZXR1cm4gJCQuZ2V0Q2VudHJvaWQoZC5wb2ludHMpLng7IH0pXHJcbiAgICAgICAgICAuYXR0cigneScsIGZ1bmN0aW9uIChkKSB7IHJldHVybiAkJC5nZXRDZW50cm9pZChkLnBvaW50cykueTsgfSlcclxuICAgICAgICAgIC5zdHlsZSgnb3BhY2l0eScsIDApO1xyXG4gICAgICAvLyB1cGRhdGVcclxuICAgICAgJCQuc3RhbmZvcmRSZWdpb25zID0gc3RhbmZvcmRSZWdpb25FbnRlci5tZXJnZShzdGFuZm9yZFJlZ2lvbik7XHJcbiAgICAgICQkLnN0YW5mb3JkUmVnaW9uc1xyXG4gICAgICAgICAgLnNlbGVjdCgncG9seWdvbicpXHJcbiAgICAgICAgICAudHJhbnNpdGlvbigpXHJcbiAgICAgICAgICAuZHVyYXRpb24oZHVyYXRpb24pXHJcbiAgICAgICAgICAuYXR0cigncG9pbnRzJywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIHJldHVybiBkLnBvaW50c1xyXG4gICAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgICAgICAgY29uZmlnLmF4aXNfcm90YXRlZCA/IHl2Q3VzdG9tKHZhbHVlLCAneScpIDogeHZDdXN0b20odmFsdWUsICd4JyksXHJcbiAgICAgICAgICAgICAgICAgIGNvbmZpZy5heGlzX3JvdGF0ZWQgPyB4dkN1c3RvbSh2YWx1ZSwgJ3gnKSA6IHl2Q3VzdG9tKHZhbHVlLCAneScpXHJcbiAgICAgICAgICAgICAgXS5qb2luKCcsJyk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgIC5qb2luKCcgJyk7XHJcbiAgICAgIH0pXHJcbiAgICAgICAgICAuc3R5bGUoJ29wYWNpdHknLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgcmV0dXJuIGQub3BhY2l0eSA/IGQub3BhY2l0eSA6IDAuMjtcclxuICAgICAgfSk7XHJcbiAgICAgICQkLnN0YW5mb3JkUmVnaW9uc1xyXG4gICAgICAgICAgLnNlbGVjdCgndGV4dCcpXHJcbiAgICAgICAgICAudHJhbnNpdGlvbigpXHJcbiAgICAgICAgICAuZHVyYXRpb24oZHVyYXRpb24pXHJcbiAgICAgICAgICAuYXR0cigneCcsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICByZXR1cm4gY29uZmlnLmF4aXNfcm90YXRlZFxyXG4gICAgICAgICAgICAgID8geXZDdXN0b20oJCQuZ2V0Q2VudHJvaWQoZC5wb2ludHMpLCAneScpXHJcbiAgICAgICAgICAgICAgOiB4dkN1c3RvbSgkJC5nZXRDZW50cm9pZChkLnBvaW50cyksICd4Jyk7XHJcbiAgICAgIH0pXHJcbiAgICAgICAgICAuYXR0cigneScsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICByZXR1cm4gY29uZmlnLmF4aXNfcm90YXRlZFxyXG4gICAgICAgICAgICAgID8geHZDdXN0b20oJCQuZ2V0Q2VudHJvaWQoZC5wb2ludHMpLCAneCcpXHJcbiAgICAgICAgICAgICAgOiB5dkN1c3RvbSgkJC5nZXRDZW50cm9pZChkLnBvaW50cyksICd5Jyk7XHJcbiAgICAgIH0pXHJcbiAgICAgICAgICAudGV4dChmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgaWYgKGQudGV4dCkge1xyXG4gICAgICAgICAgICAgIHZhciB2YWx1ZSwgcGVyY2VudGFnZSwgdGVtcDtcclxuICAgICAgICAgICAgICBpZiAoJCQuaXNTdGFuZm9yZEdyYXBoVHlwZSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRlbXAgPSBjb3VudFBvaW50c0luUmVnaW9uKGQucG9pbnRzKTtcclxuICAgICAgICAgICAgICAgICAgdmFsdWUgPSB0ZW1wLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICBwZXJjZW50YWdlID0gdGVtcC5wZXJjZW50YWdlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICByZXR1cm4gZC50ZXh0KHZhbHVlLCBwZXJjZW50YWdlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiAnJztcclxuICAgICAgfSlcclxuICAgICAgICAgIC5hdHRyKCd0ZXh0LWFuY2hvcicsICdtaWRkbGUnKVxyXG4gICAgICAgICAgLmF0dHIoJ2RvbWluYW50LWJhc2VsaW5lJywgJ21pZGRsZScpXHJcbiAgICAgICAgICAuc3R5bGUoJ29wYWNpdHknLCAxKTtcclxuICAgICAgLy8gZXhpdFxyXG4gICAgICBzdGFuZm9yZFJlZ2lvblxyXG4gICAgICAgICAgLmV4aXQoKVxyXG4gICAgICAgICAgLnRyYW5zaXRpb24oKVxyXG4gICAgICAgICAgLmR1cmF0aW9uKGR1cmF0aW9uKVxyXG4gICAgICAgICAgLnN0eWxlKCdvcGFjaXR5JywgMClcclxuICAgICAgICAgIC5yZW1vdmUoKTtcclxuICB9O1xuXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmluaXRUb29sdGlwID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzLCBjb25maWcgPSAkJC5jb25maWcsIGk7XHJcbiAgICAgICQkLnRvb2x0aXAgPSAkJC5zZWxlY3RDaGFydFxyXG4gICAgICAgICAgLnN0eWxlKCdwb3NpdGlvbicsICdyZWxhdGl2ZScpXHJcbiAgICAgICAgICAuYXBwZW5kKCdkaXYnKVxyXG4gICAgICAgICAgLmF0dHIoJ2NsYXNzJywgQ0xBU1MudG9vbHRpcENvbnRhaW5lcilcclxuICAgICAgICAgIC5zdHlsZSgncG9zaXRpb24nLCAnYWJzb2x1dGUnKVxyXG4gICAgICAgICAgLnN0eWxlKCdwb2ludGVyLWV2ZW50cycsICdub25lJylcclxuICAgICAgICAgIC5zdHlsZSgnZGlzcGxheScsICdub25lJyk7XHJcbiAgICAgIC8vIFNob3cgdG9vbHRpcCBpZiBuZWVkZWRcclxuICAgICAgaWYgKGNvbmZpZy50b29sdGlwX2luaXRfc2hvdykge1xyXG4gICAgICAgICAgaWYgKCQkLmlzVGltZVNlcmllcygpICYmIGlzU3RyaW5nKGNvbmZpZy50b29sdGlwX2luaXRfeCkpIHtcclxuICAgICAgICAgICAgICBjb25maWcudG9vbHRpcF9pbml0X3ggPSAkJC5wYXJzZURhdGUoY29uZmlnLnRvb2x0aXBfaW5pdF94KTtcclxuICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgJCQuZGF0YS50YXJnZXRzWzBdLnZhbHVlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoJCQuZGF0YS50YXJnZXRzWzBdLnZhbHVlc1tpXS54IC0gY29uZmlnLnRvb2x0aXBfaW5pdF94ID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBjb25maWcudG9vbHRpcF9pbml0X3ggPSBpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgJCQudG9vbHRpcC5odG1sKGNvbmZpZy50b29sdGlwX2NvbnRlbnRzLmNhbGwoJCQsICQkLmRhdGEudGFyZ2V0cy5tYXAoZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gJCQuYWRkTmFtZShkLnZhbHVlc1tjb25maWcudG9vbHRpcF9pbml0X3hdKTtcclxuICAgICAgICAgIH0pLCAkJC5heGlzLmdldFhBeGlzVGlja0Zvcm1hdCgpLCAkJC5nZXRZRm9ybWF0KCQkLmhhc0FyY1R5cGUoKSksICQkLmNvbG9yKSk7XHJcbiAgICAgICAgICAkJC50b29sdGlwXHJcbiAgICAgICAgICAgICAgLnN0eWxlKCd0b3AnLCBjb25maWcudG9vbHRpcF9pbml0X3Bvc2l0aW9uLnRvcClcclxuICAgICAgICAgICAgICAuc3R5bGUoJ2xlZnQnLCBjb25maWcudG9vbHRpcF9pbml0X3Bvc2l0aW9uLmxlZnQpXHJcbiAgICAgICAgICAgICAgLnN0eWxlKCdkaXNwbGF5JywgJ2Jsb2NrJyk7XHJcbiAgICAgIH1cclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmdldFRvb2x0aXBTb3J0RnVuY3Rpb24gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXMsIGNvbmZpZyA9ICQkLmNvbmZpZztcclxuICAgICAgaWYgKGNvbmZpZy5kYXRhX2dyb3Vwcy5sZW5ndGggPT09IDAgfHwgY29uZmlnLnRvb2x0aXBfb3JkZXIgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgLy8gaWYgZGF0YSBhcmUgbm90IGdyb3VwZWQgb3IgaWYgYW4gb3JkZXIgaXMgc3BlY2lmaWVkXHJcbiAgICAgICAgICAvLyBmb3IgdGhlIHRvb2x0aXAgdmFsdWVzIHdlIHNvcnQgdGhlbSBieSB0aGVpciB2YWx1ZXNcclxuICAgICAgICAgIHZhciBvcmRlciA9IGNvbmZpZy50b29sdGlwX29yZGVyO1xyXG4gICAgICAgICAgaWYgKG9yZGVyID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICBvcmRlciA9IGNvbmZpZy5kYXRhX29yZGVyO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdmFyIHZhbHVlT2YgPSBmdW5jdGlvbiAob2JqKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIG9iaiA/IG9iai52YWx1ZSA6IG51bGw7XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgLy8gaWYgZGF0YSBhcmUgbm90IGdyb3VwZWQsIHdlIHNvcnQgdGhlbSBieSB0aGVpciB2YWx1ZVxyXG4gICAgICAgICAgaWYgKGlzU3RyaW5nKG9yZGVyKSAmJiBvcmRlci50b0xvd2VyQ2FzZSgpID09PSAnYXNjJykge1xyXG4gICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoYSwgYikge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVPZihhKSAtIHZhbHVlT2YoYik7XHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2UgaWYgKGlzU3RyaW5nKG9yZGVyKSAmJiBvcmRlci50b0xvd2VyQ2FzZSgpID09PSAnZGVzYycpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGEsIGIpIHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlT2YoYikgLSB2YWx1ZU9mKGEpO1xyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIGlmIChpc0Z1bmN0aW9uKG9yZGVyKSkge1xyXG4gICAgICAgICAgICAgIC8vIGlmIHRoZSBmdW5jdGlvbiBpcyBmcm9tIGRhdGFfb3JkZXIgd2UgbmVlZFxyXG4gICAgICAgICAgICAgIC8vIHRvIHdyYXAgdGhlIHJldHVybmVkIGZ1bmN0aW9uIGluIG9yZGVyIHRvIGZvcm1hdFxyXG4gICAgICAgICAgICAgIC8vIHRoZSBzb3J0ZWQgdmFsdWUgdG8gdGhlIGV4cGVjdGVkIGZvcm1hdFxyXG4gICAgICAgICAgICAgIHZhciBzb3J0RnVuY3Rpb24gPSBvcmRlcjtcclxuICAgICAgICAgICAgICBpZiAoY29uZmlnLnRvb2x0aXBfb3JkZXIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICBzb3J0RnVuY3Rpb24gPSBmdW5jdGlvbiAoYSwgYikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9yZGVyKGFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA/IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGEuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlczogW2FdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogbnVsbCwgYlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogYi5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzOiBbYl1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsKTtcclxuICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHNvcnRGdW5jdGlvbjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2UgaWYgKGlzQXJyYXkob3JkZXIpKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChhLCBiKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiBvcmRlci5pbmRleE9mKGEuaWQpIC0gb3JkZXIuaW5kZXhPZihiLmlkKTtcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgLy8gaWYgZGF0YSBhcmUgZ3JvdXBlZCwgd2UgZm9sbG93IHRoZSBvcmRlciBvZiBncm91cGVkIHRhcmdldHNcclxuICAgICAgICAgIHZhciBpZHMgPSAkJC5vcmRlclRhcmdldHMoJCQuZGF0YS50YXJnZXRzKS5tYXAoZnVuY3Rpb24gKGkpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gaS5pZDtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgLy8gaWYgaXQgd2FzIGVpdGhlciBhc2Mgb3IgZGVzYyB3ZSBuZWVkIHRvIGludmVydCB0aGUgb3JkZXJcclxuICAgICAgICAgIC8vIHJldHVybmVkIGJ5IG9yZGVyVGFyZ2V0c1xyXG4gICAgICAgICAgaWYgKCQkLmlzT3JkZXJBc2MoKSB8fCAkJC5pc09yZGVyRGVzYygpKSB7XHJcbiAgICAgICAgICAgICAgaWRzID0gaWRzLnJldmVyc2UoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoYSwgYikge1xyXG4gICAgICAgICAgICAgIHJldHVybiBpZHMuaW5kZXhPZihhLmlkKSAtIGlkcy5pbmRleE9mKGIuaWQpO1xyXG4gICAgICAgICAgfTtcclxuICAgICAgfVxyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuZ2V0VG9vbHRpcENvbnRlbnQgPSBmdW5jdGlvbiAoZCwgZGVmYXVsdFRpdGxlRm9ybWF0LCBkZWZhdWx0VmFsdWVGb3JtYXQsIGNvbG9yKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXMsIGNvbmZpZyA9ICQkLmNvbmZpZywgdGl0bGVGb3JtYXQgPSBjb25maWcudG9vbHRpcF9mb3JtYXRfdGl0bGUgfHwgZGVmYXVsdFRpdGxlRm9ybWF0LCBuYW1lRm9ybWF0ID0gY29uZmlnLnRvb2x0aXBfZm9ybWF0X25hbWUgfHxcclxuICAgICAgICAgIGZ1bmN0aW9uIChuYW1lKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIG5hbWU7XHJcbiAgICAgICAgICB9LCB0ZXh0LCBpLCB0aXRsZSwgdmFsdWUsIG5hbWUsIGJnY29sb3I7XHJcbiAgICAgIHZhciB2YWx1ZUZvcm1hdCA9IGNvbmZpZy50b29sdGlwX2Zvcm1hdF92YWx1ZTtcclxuICAgICAgaWYgKCF2YWx1ZUZvcm1hdCkge1xyXG4gICAgICAgICAgdmFsdWVGb3JtYXQgPSAkJC5pc1RhcmdldE5vcm1hbGl6ZWQoZC5pZClcclxuICAgICAgICAgICAgICA/IGZ1bmN0aW9uICh2LCByYXRpbykgeyByZXR1cm4gKHJhdGlvICogMTAwKS50b0ZpeGVkKDIpICsgXCIlXCI7IH1cclxuICAgICAgICAgICAgICA6IGRlZmF1bHRWYWx1ZUZvcm1hdDtcclxuICAgICAgfVxyXG4gICAgICB2YXIgdG9vbHRpcFNvcnRGdW5jdGlvbiA9IHRoaXMuZ2V0VG9vbHRpcFNvcnRGdW5jdGlvbigpO1xyXG4gICAgICBpZiAodG9vbHRpcFNvcnRGdW5jdGlvbikge1xyXG4gICAgICAgICAgZC5zb3J0KHRvb2x0aXBTb3J0RnVuY3Rpb24pO1xyXG4gICAgICB9XHJcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBkLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBpZiAoIShkW2ldICYmIChkW2ldLnZhbHVlIHx8IGRbaV0udmFsdWUgPT09IDApKSkge1xyXG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKCQkLmlzU3RhbmZvcmRHcmFwaFR5cGUoKSkge1xyXG4gICAgICAgICAgICAgIC8vIEN1c3RvbSB0b29sdGlwIGZvciBzdGFuZm9yZCBwbG90c1xyXG4gICAgICAgICAgICAgIGlmICghdGV4dCkge1xyXG4gICAgICAgICAgICAgICAgICB0aXRsZSA9ICQkLmdldFN0YW5mb3JkVG9vbHRpcFRpdGxlKGRbaV0pO1xyXG4gICAgICAgICAgICAgICAgICB0ZXh0ID0gXCI8dGFibGUgY2xhc3M9J1wiICsgJCQuQ0xBU1MudG9vbHRpcCArIFwiJz5cIiArIHRpdGxlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBiZ2NvbG9yID0gJCQuZ2V0U3RhbmZvcmRQb2ludENvbG9yKGRbaV0pO1xyXG4gICAgICAgICAgICAgIG5hbWUgPSBzYW5pdGlzZShjb25maWcuZGF0YV9lcG9jaHMpOyAvLyBFcG9jaHMga2V5IG5hbWVcclxuICAgICAgICAgICAgICB2YWx1ZSA9IGRbaV0uZXBvY2hzO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgLy8gUmVndWxhciB0b29sdGlwXHJcbiAgICAgICAgICAgICAgaWYgKCF0ZXh0KSB7XHJcbiAgICAgICAgICAgICAgICAgIHRpdGxlID0gc2FuaXRpc2UodGl0bGVGb3JtYXQgPyB0aXRsZUZvcm1hdChkW2ldLngsIGRbaV0uaW5kZXgpIDogZFtpXS54KTtcclxuICAgICAgICAgICAgICAgICAgdGV4dCA9XHJcbiAgICAgICAgICAgICAgICAgICAgICBcIjx0YWJsZSBjbGFzcz0nXCIgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICQkLkNMQVNTLnRvb2x0aXAgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiJz5cIiArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKHRpdGxlIHx8IHRpdGxlID09PSAwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gXCI8dHI+PHRoIGNvbHNwYW49JzInPlwiICsgdGl0bGUgKyAnPC90aD48L3RyPidcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnJyk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHZhbHVlID0gc2FuaXRpc2UodmFsdWVGb3JtYXQoZFtpXS52YWx1ZSwgZFtpXS5yYXRpbywgZFtpXS5pZCwgZFtpXS5pbmRleCwgZCkpO1xyXG4gICAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgIC8vIFNraXAgZWxlbWVudHMgd2hlbiB0aGVpciBuYW1lIGlzIHNldCB0byBudWxsXHJcbiAgICAgICAgICAgICAgICAgIGlmIChkW2ldLm5hbWUgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIG5hbWUgPSBzYW5pdGlzZShuYW1lRm9ybWF0KGRbaV0ubmFtZSwgZFtpXS5yYXRpbywgZFtpXS5pZCwgZFtpXS5pbmRleCkpO1xyXG4gICAgICAgICAgICAgICAgICBiZ2NvbG9yID0gJCQubGV2ZWxDb2xvciA/ICQkLmxldmVsQ29sb3IoZFtpXS52YWx1ZSkgOiBjb2xvcihkW2ldLmlkKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgIHRleHQgKz1cclxuICAgICAgICAgICAgICAgICAgXCI8dHIgY2xhc3M9J1wiICtcclxuICAgICAgICAgICAgICAgICAgICAgICQkLkNMQVNTLnRvb2x0aXBOYW1lICtcclxuICAgICAgICAgICAgICAgICAgICAgICctJyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAkJC5nZXRUYXJnZXRTZWxlY3RvclN1ZmZpeChkW2ldLmlkKSArXHJcbiAgICAgICAgICAgICAgICAgICAgICBcIic+XCI7XHJcbiAgICAgICAgICAgICAgdGV4dCArPVxyXG4gICAgICAgICAgICAgICAgICBcIjx0ZCBjbGFzcz0nbmFtZSc+PHNwYW4gc3R5bGU9J2JhY2tncm91bmQtY29sb3I6XCIgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgYmdjb2xvciArXHJcbiAgICAgICAgICAgICAgICAgICAgICBcIic+PC9zcGFuPlwiICtcclxuICAgICAgICAgICAgICAgICAgICAgIG5hbWUgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgJzwvdGQ+JztcclxuICAgICAgICAgICAgICB0ZXh0ICs9IFwiPHRkIGNsYXNzPSd2YWx1ZSc+XCIgKyB2YWx1ZSArICc8L3RkPic7XHJcbiAgICAgICAgICAgICAgdGV4dCArPSAnPC90cj4nO1xyXG4gICAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0ZXh0ICsgJzwvdGFibGU+JztcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLnRvb2x0aXBQb3NpdGlvbiA9IGZ1bmN0aW9uIChkYXRhVG9TaG93LCB0V2lkdGgsIHRIZWlnaHQsIGVsZW1lbnQpIHtcclxuICAgICAgdmFyICQkID0gdGhpcywgY29uZmlnID0gJCQuY29uZmlnLCBkMyA9ICQkLmQzO1xyXG4gICAgICB2YXIgc3ZnTGVmdCwgdG9vbHRpcExlZnQsIHRvb2x0aXBSaWdodCwgdG9vbHRpcFRvcCwgY2hhcnRSaWdodDtcclxuICAgICAgdmFyIGZvckFyYyA9ICQkLmhhc0FyY1R5cGUoKSwgbW91c2UgPSBkMy5tb3VzZShlbGVtZW50KTtcclxuICAgICAgLy8gRGV0ZXJtaW4gdG9vbHRpcCBwb3NpdGlvblxyXG4gICAgICBpZiAoZm9yQXJjKSB7XHJcbiAgICAgICAgICB0b29sdGlwTGVmdCA9XHJcbiAgICAgICAgICAgICAgKCQkLndpZHRoIC0gKCQkLmlzTGVnZW5kUmlnaHQgPyAkJC5nZXRMZWdlbmRXaWR0aCgpIDogMCkpIC8gMiArIG1vdXNlWzBdO1xyXG4gICAgICAgICAgdG9vbHRpcFRvcCA9XHJcbiAgICAgICAgICAgICAgKCQkLmhhc1R5cGUoJ2dhdWdlJykgPyAkJC5oZWlnaHQgOiAkJC5oZWlnaHQgLyAyKSArIG1vdXNlWzFdICsgMjA7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBzdmdMZWZ0ID0gJCQuZ2V0U3ZnTGVmdCh0cnVlKTtcclxuICAgICAgICAgIGlmIChjb25maWcuYXhpc19yb3RhdGVkKSB7XHJcbiAgICAgICAgICAgICAgdG9vbHRpcExlZnQgPSBzdmdMZWZ0ICsgbW91c2VbMF0gKyAxMDA7XHJcbiAgICAgICAgICAgICAgdG9vbHRpcFJpZ2h0ID0gdG9vbHRpcExlZnQgKyB0V2lkdGg7XHJcbiAgICAgICAgICAgICAgY2hhcnRSaWdodCA9ICQkLmN1cnJlbnRXaWR0aCAtICQkLmdldEN1cnJlbnRQYWRkaW5nUmlnaHQoKTtcclxuICAgICAgICAgICAgICB0b29sdGlwVG9wID0gJCQueChkYXRhVG9TaG93WzBdLngpICsgMjA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICB0b29sdGlwTGVmdCA9XHJcbiAgICAgICAgICAgICAgICAgIHN2Z0xlZnQgKyAkJC5nZXRDdXJyZW50UGFkZGluZ0xlZnQodHJ1ZSkgKyAkJC54KGRhdGFUb1Nob3dbMF0ueCkgKyAyMDtcclxuICAgICAgICAgICAgICB0b29sdGlwUmlnaHQgPSB0b29sdGlwTGVmdCArIHRXaWR0aDtcclxuICAgICAgICAgICAgICBjaGFydFJpZ2h0ID0gc3ZnTGVmdCArICQkLmN1cnJlbnRXaWR0aCAtICQkLmdldEN1cnJlbnRQYWRkaW5nUmlnaHQoKTtcclxuICAgICAgICAgICAgICB0b29sdGlwVG9wID0gbW91c2VbMV0gKyAxNTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICh0b29sdGlwUmlnaHQgPiBjaGFydFJpZ2h0KSB7XHJcbiAgICAgICAgICAgICAgLy8gMjAgaXMgbmVlZGVkIGZvciBGaXJlZm94IHRvIGtlZXAgdG9vbHRpcCB3aWR0aFxyXG4gICAgICAgICAgICAgIHRvb2x0aXBMZWZ0IC09IHRvb2x0aXBSaWdodCAtIGNoYXJ0UmlnaHQgKyAyMDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICh0b29sdGlwVG9wICsgdEhlaWdodCA+ICQkLmN1cnJlbnRIZWlnaHQpIHtcclxuICAgICAgICAgICAgICB0b29sdGlwVG9wIC09IHRIZWlnaHQgKyAzMDtcclxuICAgICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAodG9vbHRpcFRvcCA8IDApIHtcclxuICAgICAgICAgIHRvb2x0aXBUb3AgPSAwO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICB0b3A6IHRvb2x0aXBUb3AsXHJcbiAgICAgICAgICBsZWZ0OiB0b29sdGlwTGVmdFxyXG4gICAgICB9O1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuc2hvd1Rvb2x0aXAgPSBmdW5jdGlvbiAoc2VsZWN0ZWREYXRhLCBlbGVtZW50KSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXMsIGNvbmZpZyA9ICQkLmNvbmZpZztcclxuICAgICAgdmFyIHRXaWR0aCwgdEhlaWdodCwgcG9zaXRpb247XHJcbiAgICAgIHZhciBmb3JBcmMgPSAkJC5oYXNBcmNUeXBlKCksIGRhdGFUb1Nob3cgPSBzZWxlY3RlZERhdGEuZmlsdGVyKGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICByZXR1cm4gZCAmJiBpc1ZhbHVlKGQudmFsdWUpO1xyXG4gICAgICB9KSwgcG9zaXRpb25GdW5jdGlvbiA9IGNvbmZpZy50b29sdGlwX3Bvc2l0aW9uIHx8IENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLnRvb2x0aXBQb3NpdGlvbjtcclxuICAgICAgaWYgKGRhdGFUb1Nob3cubGVuZ3RoID09PSAwIHx8ICFjb25maWcudG9vbHRpcF9zaG93KSB7XHJcbiAgICAgICAgICAkJC5oaWRlVG9vbHRpcCgpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgICQkLnRvb2x0aXBcclxuICAgICAgICAgIC5odG1sKGNvbmZpZy50b29sdGlwX2NvbnRlbnRzLmNhbGwoJCQsIHNlbGVjdGVkRGF0YSwgJCQuYXhpcy5nZXRYQXhpc1RpY2tGb3JtYXQoKSwgJCQuZ2V0WUZvcm1hdChmb3JBcmMpLCAkJC5jb2xvcikpXHJcbiAgICAgICAgICAuc3R5bGUoJ2Rpc3BsYXknLCAnYmxvY2snKTtcclxuICAgICAgLy8gR2V0IHRvb2x0aXAgZGltZW5zaW9uc1xyXG4gICAgICB0V2lkdGggPSAkJC50b29sdGlwLnByb3BlcnR5KCdvZmZzZXRXaWR0aCcpO1xyXG4gICAgICB0SGVpZ2h0ID0gJCQudG9vbHRpcC5wcm9wZXJ0eSgnb2Zmc2V0SGVpZ2h0Jyk7XHJcbiAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25GdW5jdGlvbi5jYWxsKHRoaXMsIGRhdGFUb1Nob3csIHRXaWR0aCwgdEhlaWdodCwgZWxlbWVudCk7XHJcbiAgICAgIC8vIFNldCB0b29sdGlwXHJcbiAgICAgICQkLnRvb2x0aXBcclxuICAgICAgICAgIC5zdHlsZSgndG9wJywgcG9zaXRpb24udG9wICsgJ3B4JylcclxuICAgICAgICAgIC5zdHlsZSgnbGVmdCcsIHBvc2l0aW9uLmxlZnQgKyAncHgnKTtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmhpZGVUb29sdGlwID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICB0aGlzLnRvb2x0aXAuc3R5bGUoJ2Rpc3BsYXknLCAnbm9uZScpO1xyXG4gIH07XG5cbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuc2V0VGFyZ2V0VHlwZSA9IGZ1bmN0aW9uICh0YXJnZXRJZHMsIHR5cGUpIHtcclxuICAgICAgdmFyICQkID0gdGhpcywgY29uZmlnID0gJCQuY29uZmlnO1xyXG4gICAgICAkJC5tYXBUb1RhcmdldElkcyh0YXJnZXRJZHMpLmZvckVhY2goZnVuY3Rpb24gKGlkKSB7XHJcbiAgICAgICAgICAkJC53aXRob3V0RmFkZUluW2lkXSA9IHR5cGUgPT09IGNvbmZpZy5kYXRhX3R5cGVzW2lkXTtcclxuICAgICAgICAgIGNvbmZpZy5kYXRhX3R5cGVzW2lkXSA9IHR5cGU7XHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAoIXRhcmdldElkcykge1xyXG4gICAgICAgICAgY29uZmlnLmRhdGFfdHlwZSA9IHR5cGU7XHJcbiAgICAgIH1cclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmhhc1R5cGUgPSBmdW5jdGlvbiAodHlwZSwgdGFyZ2V0cykge1xyXG4gICAgICB2YXIgJCQgPSB0aGlzLCB0eXBlcyA9ICQkLmNvbmZpZy5kYXRhX3R5cGVzLCBoYXMgPSBmYWxzZTtcclxuICAgICAgdGFyZ2V0cyA9IHRhcmdldHMgfHwgJCQuZGF0YS50YXJnZXRzO1xyXG4gICAgICBpZiAodGFyZ2V0cyAmJiB0YXJnZXRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgdGFyZ2V0cy5mb3JFYWNoKGZ1bmN0aW9uICh0YXJnZXQpIHtcclxuICAgICAgICAgICAgICB2YXIgdCA9IHR5cGVzW3RhcmdldC5pZF07XHJcbiAgICAgICAgICAgICAgaWYgKCh0ICYmIHQuaW5kZXhPZih0eXBlKSA+PSAwKSB8fCAoIXQgJiYgdHlwZSA9PT0gJ2xpbmUnKSkge1xyXG4gICAgICAgICAgICAgICAgICBoYXMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKE9iamVjdC5rZXlzKHR5cGVzKS5sZW5ndGgpIHtcclxuICAgICAgICAgIE9iamVjdC5rZXlzKHR5cGVzKS5mb3JFYWNoKGZ1bmN0aW9uIChpZCkge1xyXG4gICAgICAgICAgICAgIGlmICh0eXBlc1tpZF0gPT09IHR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgaGFzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICAgIGhhcyA9ICQkLmNvbmZpZy5kYXRhX3R5cGUgPT09IHR5cGU7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGhhcztcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmhhc0FyY1R5cGUgPSBmdW5jdGlvbiAodGFyZ2V0cykge1xyXG4gICAgICByZXR1cm4gKHRoaXMuaGFzVHlwZSgncGllJywgdGFyZ2V0cykgfHxcclxuICAgICAgICAgIHRoaXMuaGFzVHlwZSgnZG9udXQnLCB0YXJnZXRzKSB8fFxyXG4gICAgICAgICAgdGhpcy5oYXNUeXBlKCdnYXVnZScsIHRhcmdldHMpKTtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmlzTGluZVR5cGUgPSBmdW5jdGlvbiAoZCkge1xyXG4gICAgICB2YXIgY29uZmlnID0gdGhpcy5jb25maWcsIGlkID0gaXNTdHJpbmcoZCkgPyBkIDogZC5pZDtcclxuICAgICAgcmV0dXJuICghY29uZmlnLmRhdGFfdHlwZXNbaWRdIHx8XHJcbiAgICAgICAgICBbJ2xpbmUnLCAnc3BsaW5lJywgJ2FyZWEnLCAnYXJlYS1zcGxpbmUnLCAnc3RlcCcsICdhcmVhLXN0ZXAnXS5pbmRleE9mKGNvbmZpZy5kYXRhX3R5cGVzW2lkXSkgPj0gMCk7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5pc1N0ZXBUeXBlID0gZnVuY3Rpb24gKGQpIHtcclxuICAgICAgdmFyIGlkID0gaXNTdHJpbmcoZCkgPyBkIDogZC5pZDtcclxuICAgICAgcmV0dXJuIFsnc3RlcCcsICdhcmVhLXN0ZXAnXS5pbmRleE9mKHRoaXMuY29uZmlnLmRhdGFfdHlwZXNbaWRdKSA+PSAwO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuaXNTcGxpbmVUeXBlID0gZnVuY3Rpb24gKGQpIHtcclxuICAgICAgdmFyIGlkID0gaXNTdHJpbmcoZCkgPyBkIDogZC5pZDtcclxuICAgICAgcmV0dXJuIFsnc3BsaW5lJywgJ2FyZWEtc3BsaW5lJ10uaW5kZXhPZih0aGlzLmNvbmZpZy5kYXRhX3R5cGVzW2lkXSkgPj0gMDtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmlzQXJlYVR5cGUgPSBmdW5jdGlvbiAoZCkge1xyXG4gICAgICB2YXIgaWQgPSBpc1N0cmluZyhkKSA/IGQgOiBkLmlkO1xyXG4gICAgICByZXR1cm4gKFsnYXJlYScsICdhcmVhLXNwbGluZScsICdhcmVhLXN0ZXAnXS5pbmRleE9mKHRoaXMuY29uZmlnLmRhdGFfdHlwZXNbaWRdKSA+PVxyXG4gICAgICAgICAgMCk7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5pc0JhclR5cGUgPSBmdW5jdGlvbiAoZCkge1xyXG4gICAgICB2YXIgaWQgPSBpc1N0cmluZyhkKSA/IGQgOiBkLmlkO1xyXG4gICAgICByZXR1cm4gdGhpcy5jb25maWcuZGF0YV90eXBlc1tpZF0gPT09ICdiYXInO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuaXNTY2F0dGVyVHlwZSA9IGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgIHZhciBpZCA9IGlzU3RyaW5nKGQpID8gZCA6IGQuaWQ7XHJcbiAgICAgIHJldHVybiB0aGlzLmNvbmZpZy5kYXRhX3R5cGVzW2lkXSA9PT0gJ3NjYXR0ZXInO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuaXNTdGFuZm9yZFR5cGUgPSBmdW5jdGlvbiAoZCkge1xyXG4gICAgICB2YXIgaWQgPSBpc1N0cmluZyhkKSA/IGQgOiBkLmlkO1xyXG4gICAgICByZXR1cm4gdGhpcy5jb25maWcuZGF0YV90eXBlc1tpZF0gPT09ICdzdGFuZm9yZCc7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5pc1BpZVR5cGUgPSBmdW5jdGlvbiAoZCkge1xyXG4gICAgICB2YXIgaWQgPSBpc1N0cmluZyhkKSA/IGQgOiBkLmlkO1xyXG4gICAgICByZXR1cm4gdGhpcy5jb25maWcuZGF0YV90eXBlc1tpZF0gPT09ICdwaWUnO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUuaXNHYXVnZVR5cGUgPSBmdW5jdGlvbiAoZCkge1xyXG4gICAgICB2YXIgaWQgPSBpc1N0cmluZyhkKSA/IGQgOiBkLmlkO1xyXG4gICAgICByZXR1cm4gdGhpcy5jb25maWcuZGF0YV90eXBlc1tpZF0gPT09ICdnYXVnZSc7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5pc0RvbnV0VHlwZSA9IGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgIHZhciBpZCA9IGlzU3RyaW5nKGQpID8gZCA6IGQuaWQ7XHJcbiAgICAgIHJldHVybiB0aGlzLmNvbmZpZy5kYXRhX3R5cGVzW2lkXSA9PT0gJ2RvbnV0JztcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmlzQXJjVHlwZSA9IGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmlzUGllVHlwZShkKSB8fCB0aGlzLmlzRG9udXRUeXBlKGQpIHx8IHRoaXMuaXNHYXVnZVR5cGUoZCk7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5saW5lRGF0YSA9IGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmlzTGluZVR5cGUoZCkgPyBbZF0gOiBbXTtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmFyY0RhdGEgPSBmdW5jdGlvbiAoZCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5pc0FyY1R5cGUoZC5kYXRhKSA/IFtkXSA6IFtdO1xyXG4gIH07XHJcbiAgLyogbm90IHVzZWRcclxuICAgZnVuY3Rpb24gc2NhdHRlckRhdGEoZCkge1xyXG4gICByZXR1cm4gaXNTY2F0dGVyVHlwZShkKSA/IGQudmFsdWVzIDogW107XHJcbiAgIH1cclxuICAgKi9cclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5iYXJEYXRhID0gZnVuY3Rpb24gKGQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuaXNCYXJUeXBlKGQpID8gZC52YWx1ZXMgOiBbXTtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmxpbmVPclNjYXR0ZXJPclN0YW5mb3JkRGF0YSA9IGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmlzTGluZVR5cGUoZCkgfHwgdGhpcy5pc1NjYXR0ZXJUeXBlKGQpIHx8IHRoaXMuaXNTdGFuZm9yZFR5cGUoZClcclxuICAgICAgICAgID8gZC52YWx1ZXNcclxuICAgICAgICAgIDogW107XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5iYXJPckxpbmVEYXRhID0gZnVuY3Rpb24gKGQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuaXNCYXJUeXBlKGQpIHx8IHRoaXMuaXNMaW5lVHlwZShkKSA/IGQudmFsdWVzIDogW107XHJcbiAgfTtcblxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5pc1NhZmFyaSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgdmFyIHVhID0gd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQ7XHJcbiAgICAgIHJldHVybiB1YS5pbmRleE9mKCdTYWZhcmknKSA+PSAwICYmIHVhLmluZGV4T2YoJ0Nocm9tZScpIDwgMDtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmlzQ2hyb21lID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgdWEgPSB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudDtcclxuICAgICAgcmV0dXJuIHVhLmluZGV4T2YoJ0Nocm9tZScpID49IDA7XHJcbiAgfTtcblxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5pbml0Wm9vbSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgdmFyICQkID0gdGhpcywgZDMgPSAkJC5kMywgY29uZmlnID0gJCQuY29uZmlnLCBzdGFydEV2ZW50O1xyXG4gICAgICAkJC56b29tID0gZDNcclxuICAgICAgICAgIC56b29tKClcclxuICAgICAgICAgIC5vbignc3RhcnQnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICBpZiAoY29uZmlnLnpvb21fdHlwZSAhPT0gJ3Njcm9sbCcpIHtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB2YXIgZSA9IGQzLmV2ZW50LnNvdXJjZUV2ZW50O1xyXG4gICAgICAgICAgaWYgKGUgJiYgZS50eXBlID09PSAnYnJ1c2gnKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgc3RhcnRFdmVudCA9IGU7XHJcbiAgICAgICAgICBjb25maWcuem9vbV9vbnpvb21zdGFydC5jYWxsKCQkLmFwaSwgZSk7XHJcbiAgICAgIH0pXHJcbiAgICAgICAgICAub24oJ3pvb20nLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICBpZiAoY29uZmlnLnpvb21fdHlwZSAhPT0gJ3Njcm9sbCcpIHtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB2YXIgZSA9IGQzLmV2ZW50LnNvdXJjZUV2ZW50O1xyXG4gICAgICAgICAgaWYgKGUgJiYgZS50eXBlID09PSAnYnJ1c2gnKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgJCQucmVkcmF3Rm9yWm9vbSgpO1xyXG4gICAgICAgICAgY29uZmlnLnpvb21fb256b29tLmNhbGwoJCQuYXBpLCAkJC54Lm9yZ0RvbWFpbigpKTtcclxuICAgICAgfSlcclxuICAgICAgICAgIC5vbignZW5kJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgaWYgKGNvbmZpZy56b29tX3R5cGUgIT09ICdzY3JvbGwnKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdmFyIGUgPSBkMy5ldmVudC5zb3VyY2VFdmVudDtcclxuICAgICAgICAgIGlmIChlICYmIGUudHlwZSA9PT0gJ2JydXNoJykge1xyXG4gICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vIGlmIGNsaWNrLCBkbyBub3RoaW5nLiBvdGhlcndpc2UsIGNsaWNrIGludGVyYWN0aW9uIHdpbGwgYmUgY2FuY2VsZWQuXHJcbiAgICAgICAgICBpZiAoZSAmJlxyXG4gICAgICAgICAgICAgIHN0YXJ0RXZlbnQuY2xpZW50WCA9PT0gZS5jbGllbnRYICYmXHJcbiAgICAgICAgICAgICAgc3RhcnRFdmVudC5jbGllbnRZID09PSBlLmNsaWVudFkpIHtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjb25maWcuem9vbV9vbnpvb21lbmQuY2FsbCgkJC5hcGksICQkLngub3JnRG9tYWluKCkpO1xyXG4gICAgICB9KTtcclxuICAgICAgJCQuem9vbS51cGRhdGVEb21haW4gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICBpZiAoZDMuZXZlbnQgJiYgZDMuZXZlbnQudHJhbnNmb3JtKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGNvbmZpZy5heGlzX3JvdGF0ZWQgJiYgY29uZmlnLnpvb21fdHlwZSA9PT0gJ3Njcm9sbCcgJiYgZDMuZXZlbnQuc291cmNlRXZlbnQudHlwZSA9PT0gJ21vdXNlbW92ZScpIHtcclxuICAgICAgICAgICAgICAgICAgLy8gd2UncmUgbW92aW5nIHRoZSBtb3VzZSBpbiBhIHJvdGF0ZWQgY2hhcnQgd2l0aCB6b29tID0gXCJzY3JvbGxcIiwgc28gd2UgbmVlZCByZXNjYWxlWSAoaS5lLiB2ZXJ0aWNhbClcclxuICAgICAgICAgICAgICAgICAgJCQueC5kb21haW4oZDMuZXZlbnQudHJhbnNmb3JtLnJlc2NhbGVZKCQkLnN1YlgpLmRvbWFpbigpKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICQkLnguZG9tYWluKGQzLmV2ZW50LnRyYW5zZm9ybS5yZXNjYWxlWCgkJC5zdWJYKS5kb21haW4oKSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgIH07XHJcbiAgICAgICQkLnpvb20udXBkYXRlRXh0ZW50ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgdGhpcy5zY2FsZUV4dGVudChbMSwgSW5maW5pdHldKVxyXG4gICAgICAgICAgICAgIC50cmFuc2xhdGVFeHRlbnQoW1xyXG4gICAgICAgICAgICAgIFswLCAwXSxcclxuICAgICAgICAgICAgICBbJCQud2lkdGgsICQkLmhlaWdodF1cclxuICAgICAgICAgIF0pXHJcbiAgICAgICAgICAgICAgLmV4dGVudChbXHJcbiAgICAgICAgICAgICAgWzAsIDBdLFxyXG4gICAgICAgICAgICAgIFskJC53aWR0aCwgJCQuaGVpZ2h0XVxyXG4gICAgICAgICAgXSk7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgfTtcclxuICAgICAgJCQuem9vbS51cGRhdGUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVFeHRlbnQoKS51cGRhdGVEb21haW4oKTtcclxuICAgICAgfTtcclxuICAgICAgcmV0dXJuICQkLnpvb20udXBkYXRlRXh0ZW50KCk7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS56b29tVHJhbnNmb3JtID0gZnVuY3Rpb24gKHJhbmdlKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXMsIHMgPSBbJCQueChyYW5nZVswXSksICQkLngocmFuZ2VbMV0pXTtcclxuICAgICAgcmV0dXJuICQkLmQzLnpvb21JZGVudGl0eS5zY2FsZSgkJC53aWR0aCAvIChzWzFdIC0gc1swXSkpLnRyYW5zbGF0ZSgtc1swXSwgMCk7XHJcbiAgfTtcclxuICBDaGFydEludGVybmFsLnByb3RvdHlwZS5pbml0RHJhZ1pvb20gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXM7XHJcbiAgICAgIHZhciBkMyA9ICQkLmQzO1xyXG4gICAgICB2YXIgY29uZmlnID0gJCQuY29uZmlnO1xyXG4gICAgICB2YXIgY29udGV4dCA9ICgkJC5jb250ZXh0ID0gJCQuc3ZnKTtcclxuICAgICAgdmFyIGJydXNoWFBvcyA9ICQkLm1hcmdpbi5sZWZ0ICsgMjAuNTtcclxuICAgICAgdmFyIGJydXNoWVBvcyA9ICQkLm1hcmdpbi50b3AgKyAwLjU7XHJcbiAgICAgIGlmICghKGNvbmZpZy56b29tX3R5cGUgPT09ICdkcmFnJyAmJiBjb25maWcuem9vbV9lbmFibGVkKSkge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIHZhciBnZXRab29tZWREb21haW4gPSBmdW5jdGlvbiAoc2VsZWN0aW9uKSB7XHJcbiAgICAgICAgICByZXR1cm4gc2VsZWN0aW9uICYmIHNlbGVjdGlvbi5tYXAoZnVuY3Rpb24gKHgpIHsgcmV0dXJuICQkLnguaW52ZXJ0KHgpOyB9KTtcclxuICAgICAgfTtcclxuICAgICAgdmFyIGJydXNoID0gKCQkLmRyYWdab29tQnJ1c2ggPSBkM1xyXG4gICAgICAgICAgLmJydXNoWCgpXHJcbiAgICAgICAgICAub24oJ3N0YXJ0JywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgJCQuYXBpLnVuem9vbSgpO1xyXG4gICAgICAgICAgJCQuc3ZnLnNlbGVjdCgnLicgKyBDTEFTUy5kcmFnWm9vbSkuY2xhc3NlZCgnZGlzYWJsZWQnLCBmYWxzZSk7XHJcbiAgICAgICAgICBjb25maWcuem9vbV9vbnpvb21zdGFydC5jYWxsKCQkLmFwaSwgZDMuZXZlbnQuc291cmNlRXZlbnQpO1xyXG4gICAgICB9KVxyXG4gICAgICAgICAgLm9uKCdicnVzaCcsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgIGNvbmZpZy56b29tX29uem9vbS5jYWxsKCQkLmFwaSwgZ2V0Wm9vbWVkRG9tYWluKGQzLmV2ZW50LnNlbGVjdGlvbikpO1xyXG4gICAgICB9KVxyXG4gICAgICAgICAgLm9uKCdlbmQnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICBpZiAoZDMuZXZlbnQuc2VsZWN0aW9uID09IG51bGwpIHtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB2YXIgem9vbWVkRG9tYWluID0gZ2V0Wm9vbWVkRG9tYWluKGQzLmV2ZW50LnNlbGVjdGlvbik7XHJcbiAgICAgICAgICBpZiAoIWNvbmZpZy56b29tX2Rpc2FibGVEZWZhdWx0QmVoYXZpb3IpIHtcclxuICAgICAgICAgICAgICAkJC5hcGkuem9vbSh6b29tZWREb21haW4pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgJCQuc3ZnLnNlbGVjdCgnLicgKyBDTEFTUy5kcmFnWm9vbSkuY2xhc3NlZCgnZGlzYWJsZWQnLCB0cnVlKTtcclxuICAgICAgICAgIGNvbmZpZy56b29tX29uem9vbWVuZC5jYWxsKCQkLmFwaSwgem9vbWVkRG9tYWluKTtcclxuICAgICAgfSkpO1xyXG4gICAgICBjb250ZXh0XHJcbiAgICAgICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgICAgIC5jbGFzc2VkKENMQVNTLmRyYWdab29tLCB0cnVlKVxyXG4gICAgICAgICAgLmF0dHIoJ2NsaXAtcGF0aCcsICQkLmNsaXBQYXRoKVxyXG4gICAgICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoJyArIGJydXNoWFBvcyArICcsJyArIGJydXNoWVBvcyArICcpJylcclxuICAgICAgICAgIC5jYWxsKGJydXNoKTtcclxuICB9O1xyXG4gIENoYXJ0SW50ZXJuYWwucHJvdG90eXBlLmdldFpvb21Eb21haW4gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHZhciAkJCA9IHRoaXMsIGNvbmZpZyA9ICQkLmNvbmZpZywgZDMgPSAkJC5kMywgbWluID0gZDMubWluKFskJC5vcmdYRG9tYWluWzBdLCBjb25maWcuem9vbV94X21pbl0pLCBtYXggPSBkMy5tYXgoWyQkLm9yZ1hEb21haW5bMV0sIGNvbmZpZy56b29tX3hfbWF4XSk7XHJcbiAgICAgIHJldHVybiBbbWluLCBtYXhdO1xyXG4gIH07XHJcbiAgQ2hhcnRJbnRlcm5hbC5wcm90b3R5cGUucmVkcmF3Rm9yWm9vbSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgdmFyICQkID0gdGhpcywgZDMgPSAkJC5kMywgY29uZmlnID0gJCQuY29uZmlnLCB6b29tID0gJCQuem9vbSwgeCA9ICQkLng7XHJcbiAgICAgIGlmICghY29uZmlnLnpvb21fZW5hYmxlZCkge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICgkJC5maWx0ZXJUYXJnZXRzVG9TaG93KCQkLmRhdGEudGFyZ2V0cykubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgem9vbS51cGRhdGUoKTtcclxuICAgICAgaWYgKGNvbmZpZy56b29tX2Rpc2FibGVEZWZhdWx0QmVoYXZpb3IpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpZiAoJCQuaXNDYXRlZ29yaXplZCgpICYmIHgub3JnRG9tYWluKClbMF0gPT09ICQkLm9yZ1hEb21haW5bMF0pIHtcclxuICAgICAgICAgIHguZG9tYWluKFskJC5vcmdYRG9tYWluWzBdIC0gMWUtMTAsIHgub3JnRG9tYWluKClbMV1dKTtcclxuICAgICAgfVxyXG4gICAgICAkJC5yZWRyYXcoe1xyXG4gICAgICAgICAgd2l0aFRyYW5zaXRpb246IGZhbHNlLFxyXG4gICAgICAgICAgd2l0aFk6IGNvbmZpZy56b29tX3Jlc2NhbGUsXHJcbiAgICAgICAgICB3aXRoU3ViY2hhcnQ6IGZhbHNlLFxyXG4gICAgICAgICAgd2l0aEV2ZW50UmVjdDogZmFsc2UsXHJcbiAgICAgICAgICB3aXRoRGltZW5zaW9uOiBmYWxzZVxyXG4gICAgICB9KTtcclxuICAgICAgaWYgKGQzLmV2ZW50LnNvdXJjZUV2ZW50ICYmIGQzLmV2ZW50LnNvdXJjZUV2ZW50LnR5cGUgPT09ICdtb3VzZW1vdmUnKSB7XHJcbiAgICAgICAgICAkJC5jYW5jZWxDbGljayA9IHRydWU7XHJcbiAgICAgIH1cclxuICB9O1xuXG4gIHJldHVybiBjMztcblxufSkpKTtcbiIsInZhciBhcnJheSA9IEFycmF5LnByb3RvdHlwZTtcblxuZXhwb3J0IHZhciBzbGljZSA9IGFycmF5LnNsaWNlO1xuZXhwb3J0IHZhciBtYXAgPSBhcnJheS5tYXA7XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHJldHVybiBhIDwgYiA/IC0xIDogYSA+IGIgPyAxIDogYSA+PSBiID8gMCA6IE5hTjtcbn1cbiIsImltcG9ydCBhc2NlbmRpbmcgZnJvbSBcIi4vYXNjZW5kaW5nXCI7XG5pbXBvcnQgYmlzZWN0b3IgZnJvbSBcIi4vYmlzZWN0b3JcIjtcblxudmFyIGFzY2VuZGluZ0Jpc2VjdCA9IGJpc2VjdG9yKGFzY2VuZGluZyk7XG5leHBvcnQgdmFyIGJpc2VjdFJpZ2h0ID0gYXNjZW5kaW5nQmlzZWN0LnJpZ2h0O1xuZXhwb3J0IHZhciBiaXNlY3RMZWZ0ID0gYXNjZW5kaW5nQmlzZWN0LmxlZnQ7XG5leHBvcnQgZGVmYXVsdCBiaXNlY3RSaWdodDtcbiIsImltcG9ydCBhc2NlbmRpbmcgZnJvbSBcIi4vYXNjZW5kaW5nXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNvbXBhcmUpIHtcbiAgaWYgKGNvbXBhcmUubGVuZ3RoID09PSAxKSBjb21wYXJlID0gYXNjZW5kaW5nQ29tcGFyYXRvcihjb21wYXJlKTtcbiAgcmV0dXJuIHtcbiAgICBsZWZ0OiBmdW5jdGlvbihhLCB4LCBsbywgaGkpIHtcbiAgICAgIGlmIChsbyA9PSBudWxsKSBsbyA9IDA7XG4gICAgICBpZiAoaGkgPT0gbnVsbCkgaGkgPSBhLmxlbmd0aDtcbiAgICAgIHdoaWxlIChsbyA8IGhpKSB7XG4gICAgICAgIHZhciBtaWQgPSBsbyArIGhpID4+PiAxO1xuICAgICAgICBpZiAoY29tcGFyZShhW21pZF0sIHgpIDwgMCkgbG8gPSBtaWQgKyAxO1xuICAgICAgICBlbHNlIGhpID0gbWlkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGxvO1xuICAgIH0sXG4gICAgcmlnaHQ6IGZ1bmN0aW9uKGEsIHgsIGxvLCBoaSkge1xuICAgICAgaWYgKGxvID09IG51bGwpIGxvID0gMDtcbiAgICAgIGlmIChoaSA9PSBudWxsKSBoaSA9IGEubGVuZ3RoO1xuICAgICAgd2hpbGUgKGxvIDwgaGkpIHtcbiAgICAgICAgdmFyIG1pZCA9IGxvICsgaGkgPj4+IDE7XG4gICAgICAgIGlmIChjb21wYXJlKGFbbWlkXSwgeCkgPiAwKSBoaSA9IG1pZDtcbiAgICAgICAgZWxzZSBsbyA9IG1pZCArIDE7XG4gICAgICB9XG4gICAgICByZXR1cm4gbG87XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBhc2NlbmRpbmdDb21wYXJhdG9yKGYpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGQsIHgpIHtcbiAgICByZXR1cm4gYXNjZW5kaW5nKGYoZCksIHgpO1xuICB9O1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHg7XG4gIH07XG59XG4iLCJpbXBvcnQge3BhaXJ9IGZyb20gXCIuL3BhaXJzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlczAsIHZhbHVlczEsIHJlZHVjZSkge1xuICB2YXIgbjAgPSB2YWx1ZXMwLmxlbmd0aCxcbiAgICAgIG4xID0gdmFsdWVzMS5sZW5ndGgsXG4gICAgICB2YWx1ZXMgPSBuZXcgQXJyYXkobjAgKiBuMSksXG4gICAgICBpMCxcbiAgICAgIGkxLFxuICAgICAgaSxcbiAgICAgIHZhbHVlMDtcblxuICBpZiAocmVkdWNlID09IG51bGwpIHJlZHVjZSA9IHBhaXI7XG5cbiAgZm9yIChpMCA9IGkgPSAwOyBpMCA8IG4wOyArK2kwKSB7XG4gICAgZm9yICh2YWx1ZTAgPSB2YWx1ZXMwW2kwXSwgaTEgPSAwOyBpMSA8IG4xOyArK2kxLCArK2kpIHtcbiAgICAgIHZhbHVlc1tpXSA9IHJlZHVjZSh2YWx1ZTAsIHZhbHVlczFbaTFdKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdmFsdWVzO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICByZXR1cm4gYiA8IGEgPyAtMSA6IGIgPiBhID8gMSA6IGIgPj0gYSA/IDAgOiBOYU47XG59XG4iLCJpbXBvcnQgdmFyaWFuY2UgZnJvbSBcIi4vdmFyaWFuY2VcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYXJyYXksIGYpIHtcbiAgdmFyIHYgPSB2YXJpYW5jZShhcnJheSwgZik7XG4gIHJldHVybiB2ID8gTWF0aC5zcXJ0KHYpIDogdjtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlcywgdmFsdWVvZikge1xuICB2YXIgbiA9IHZhbHVlcy5sZW5ndGgsXG4gICAgICBpID0gLTEsXG4gICAgICB2YWx1ZSxcbiAgICAgIG1pbixcbiAgICAgIG1heDtcblxuICBpZiAodmFsdWVvZiA9PSBudWxsKSB7XG4gICAgd2hpbGUgKCsraSA8IG4pIHsgLy8gRmluZCB0aGUgZmlyc3QgY29tcGFyYWJsZSB2YWx1ZS5cbiAgICAgIGlmICgodmFsdWUgPSB2YWx1ZXNbaV0pICE9IG51bGwgJiYgdmFsdWUgPj0gdmFsdWUpIHtcbiAgICAgICAgbWluID0gbWF4ID0gdmFsdWU7XG4gICAgICAgIHdoaWxlICgrK2kgPCBuKSB7IC8vIENvbXBhcmUgdGhlIHJlbWFpbmluZyB2YWx1ZXMuXG4gICAgICAgICAgaWYgKCh2YWx1ZSA9IHZhbHVlc1tpXSkgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKG1pbiA+IHZhbHVlKSBtaW4gPSB2YWx1ZTtcbiAgICAgICAgICAgIGlmIChtYXggPCB2YWx1ZSkgbWF4ID0gdmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZWxzZSB7XG4gICAgd2hpbGUgKCsraSA8IG4pIHsgLy8gRmluZCB0aGUgZmlyc3QgY29tcGFyYWJsZSB2YWx1ZS5cbiAgICAgIGlmICgodmFsdWUgPSB2YWx1ZW9mKHZhbHVlc1tpXSwgaSwgdmFsdWVzKSkgIT0gbnVsbCAmJiB2YWx1ZSA+PSB2YWx1ZSkge1xuICAgICAgICBtaW4gPSBtYXggPSB2YWx1ZTtcbiAgICAgICAgd2hpbGUgKCsraSA8IG4pIHsgLy8gQ29tcGFyZSB0aGUgcmVtYWluaW5nIHZhbHVlcy5cbiAgICAgICAgICBpZiAoKHZhbHVlID0gdmFsdWVvZih2YWx1ZXNbaV0sIGksIHZhbHVlcykpICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChtaW4gPiB2YWx1ZSkgbWluID0gdmFsdWU7XG4gICAgICAgICAgICBpZiAobWF4IDwgdmFsdWUpIG1heCA9IHZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBbbWluLCBtYXhdO1xufVxuIiwiaW1wb3J0IHtzbGljZX0gZnJvbSBcIi4vYXJyYXlcIjtcbmltcG9ydCBiaXNlY3QgZnJvbSBcIi4vYmlzZWN0XCI7XG5pbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnRcIjtcbmltcG9ydCBleHRlbnQgZnJvbSBcIi4vZXh0ZW50XCI7XG5pbXBvcnQgaWRlbnRpdHkgZnJvbSBcIi4vaWRlbnRpdHlcIjtcbmltcG9ydCByYW5nZSBmcm9tIFwiLi9yYW5nZVwiO1xuaW1wb3J0IHt0aWNrU3RlcH0gZnJvbSBcIi4vdGlja3NcIjtcbmltcG9ydCBzdHVyZ2VzIGZyb20gXCIuL3RocmVzaG9sZC9zdHVyZ2VzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgdmFsdWUgPSBpZGVudGl0eSxcbiAgICAgIGRvbWFpbiA9IGV4dGVudCxcbiAgICAgIHRocmVzaG9sZCA9IHN0dXJnZXM7XG5cbiAgZnVuY3Rpb24gaGlzdG9ncmFtKGRhdGEpIHtcbiAgICB2YXIgaSxcbiAgICAgICAgbiA9IGRhdGEubGVuZ3RoLFxuICAgICAgICB4LFxuICAgICAgICB2YWx1ZXMgPSBuZXcgQXJyYXkobik7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICB2YWx1ZXNbaV0gPSB2YWx1ZShkYXRhW2ldLCBpLCBkYXRhKTtcbiAgICB9XG5cbiAgICB2YXIgeHogPSBkb21haW4odmFsdWVzKSxcbiAgICAgICAgeDAgPSB4elswXSxcbiAgICAgICAgeDEgPSB4elsxXSxcbiAgICAgICAgdHogPSB0aHJlc2hvbGQodmFsdWVzLCB4MCwgeDEpO1xuXG4gICAgLy8gQ29udmVydCBudW1iZXIgb2YgdGhyZXNob2xkcyBpbnRvIHVuaWZvcm0gdGhyZXNob2xkcy5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodHopKSB7XG4gICAgICB0eiA9IHRpY2tTdGVwKHgwLCB4MSwgdHopO1xuICAgICAgdHogPSByYW5nZShNYXRoLmNlaWwoeDAgLyB0eikgKiB0eiwgeDEsIHR6KTsgLy8gZXhjbHVzaXZlXG4gICAgfVxuXG4gICAgLy8gUmVtb3ZlIGFueSB0aHJlc2hvbGRzIG91dHNpZGUgdGhlIGRvbWFpbi5cbiAgICB2YXIgbSA9IHR6Lmxlbmd0aDtcbiAgICB3aGlsZSAodHpbMF0gPD0geDApIHR6LnNoaWZ0KCksIC0tbTtcbiAgICB3aGlsZSAodHpbbSAtIDFdID4geDEpIHR6LnBvcCgpLCAtLW07XG5cbiAgICB2YXIgYmlucyA9IG5ldyBBcnJheShtICsgMSksXG4gICAgICAgIGJpbjtcblxuICAgIC8vIEluaXRpYWxpemUgYmlucy5cbiAgICBmb3IgKGkgPSAwOyBpIDw9IG07ICsraSkge1xuICAgICAgYmluID0gYmluc1tpXSA9IFtdO1xuICAgICAgYmluLngwID0gaSA+IDAgPyB0eltpIC0gMV0gOiB4MDtcbiAgICAgIGJpbi54MSA9IGkgPCBtID8gdHpbaV0gOiB4MTtcbiAgICB9XG5cbiAgICAvLyBBc3NpZ24gZGF0YSB0byBiaW5zIGJ5IHZhbHVlLCBpZ25vcmluZyBhbnkgb3V0c2lkZSB0aGUgZG9tYWluLlxuICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIHggPSB2YWx1ZXNbaV07XG4gICAgICBpZiAoeDAgPD0geCAmJiB4IDw9IHgxKSB7XG4gICAgICAgIGJpbnNbYmlzZWN0KHR6LCB4LCAwLCBtKV0ucHVzaChkYXRhW2ldKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYmlucztcbiAgfVxuXG4gIGhpc3RvZ3JhbS52YWx1ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh2YWx1ZSA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoXyksIGhpc3RvZ3JhbSkgOiB2YWx1ZTtcbiAgfTtcblxuICBoaXN0b2dyYW0uZG9tYWluID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGRvbWFpbiA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoW19bMF0sIF9bMV1dKSwgaGlzdG9ncmFtKSA6IGRvbWFpbjtcbiAgfTtcblxuICBoaXN0b2dyYW0udGhyZXNob2xkcyA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0aHJlc2hvbGQgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IEFycmF5LmlzQXJyYXkoXykgPyBjb25zdGFudChzbGljZS5jYWxsKF8pKSA6IGNvbnN0YW50KF8pLCBoaXN0b2dyYW0pIDogdGhyZXNob2xkO1xuICB9O1xuXG4gIHJldHVybiBoaXN0b2dyYW07XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHJldHVybiB4O1xufVxuIiwiZXhwb3J0IHtkZWZhdWx0IGFzIGJpc2VjdCwgYmlzZWN0UmlnaHQsIGJpc2VjdExlZnR9IGZyb20gXCIuL2Jpc2VjdFwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGFzY2VuZGluZ30gZnJvbSBcIi4vYXNjZW5kaW5nXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgYmlzZWN0b3J9IGZyb20gXCIuL2Jpc2VjdG9yXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgY3Jvc3N9IGZyb20gXCIuL2Nyb3NzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZGVzY2VuZGluZ30gZnJvbSBcIi4vZGVzY2VuZGluZ1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGRldmlhdGlvbn0gZnJvbSBcIi4vZGV2aWF0aW9uXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZXh0ZW50fSBmcm9tIFwiLi9leHRlbnRcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBoaXN0b2dyYW19IGZyb20gXCIuL2hpc3RvZ3JhbVwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHRocmVzaG9sZEZyZWVkbWFuRGlhY29uaXN9IGZyb20gXCIuL3RocmVzaG9sZC9mcmVlZG1hbkRpYWNvbmlzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgdGhyZXNob2xkU2NvdHR9IGZyb20gXCIuL3RocmVzaG9sZC9zY290dFwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHRocmVzaG9sZFN0dXJnZXN9IGZyb20gXCIuL3RocmVzaG9sZC9zdHVyZ2VzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgbWF4fSBmcm9tIFwiLi9tYXhcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBtZWFufSBmcm9tIFwiLi9tZWFuXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgbWVkaWFufSBmcm9tIFwiLi9tZWRpYW5cIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBtZXJnZX0gZnJvbSBcIi4vbWVyZ2VcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBtaW59IGZyb20gXCIuL21pblwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHBhaXJzfSBmcm9tIFwiLi9wYWlyc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHBlcm11dGV9IGZyb20gXCIuL3Blcm11dGVcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBxdWFudGlsZX0gZnJvbSBcIi4vcXVhbnRpbGVcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyByYW5nZX0gZnJvbSBcIi4vcmFuZ2VcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzY2FufSBmcm9tIFwiLi9zY2FuXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc2h1ZmZsZX0gZnJvbSBcIi4vc2h1ZmZsZVwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN1bX0gZnJvbSBcIi4vc3VtXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgdGlja3MsIHRpY2tJbmNyZW1lbnQsIHRpY2tTdGVwfSBmcm9tIFwiLi90aWNrc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHRyYW5zcG9zZX0gZnJvbSBcIi4vdHJhbnNwb3NlXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgdmFyaWFuY2V9IGZyb20gXCIuL3ZhcmlhbmNlXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgemlwfSBmcm9tIFwiLi96aXBcIjtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlcywgdmFsdWVvZikge1xuICB2YXIgbiA9IHZhbHVlcy5sZW5ndGgsXG4gICAgICBpID0gLTEsXG4gICAgICB2YWx1ZSxcbiAgICAgIG1heDtcblxuICBpZiAodmFsdWVvZiA9PSBudWxsKSB7XG4gICAgd2hpbGUgKCsraSA8IG4pIHsgLy8gRmluZCB0aGUgZmlyc3QgY29tcGFyYWJsZSB2YWx1ZS5cbiAgICAgIGlmICgodmFsdWUgPSB2YWx1ZXNbaV0pICE9IG51bGwgJiYgdmFsdWUgPj0gdmFsdWUpIHtcbiAgICAgICAgbWF4ID0gdmFsdWU7XG4gICAgICAgIHdoaWxlICgrK2kgPCBuKSB7IC8vIENvbXBhcmUgdGhlIHJlbWFpbmluZyB2YWx1ZXMuXG4gICAgICAgICAgaWYgKCh2YWx1ZSA9IHZhbHVlc1tpXSkgIT0gbnVsbCAmJiB2YWx1ZSA+IG1heCkge1xuICAgICAgICAgICAgbWF4ID0gdmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZWxzZSB7XG4gICAgd2hpbGUgKCsraSA8IG4pIHsgLy8gRmluZCB0aGUgZmlyc3QgY29tcGFyYWJsZSB2YWx1ZS5cbiAgICAgIGlmICgodmFsdWUgPSB2YWx1ZW9mKHZhbHVlc1tpXSwgaSwgdmFsdWVzKSkgIT0gbnVsbCAmJiB2YWx1ZSA+PSB2YWx1ZSkge1xuICAgICAgICBtYXggPSB2YWx1ZTtcbiAgICAgICAgd2hpbGUgKCsraSA8IG4pIHsgLy8gQ29tcGFyZSB0aGUgcmVtYWluaW5nIHZhbHVlcy5cbiAgICAgICAgICBpZiAoKHZhbHVlID0gdmFsdWVvZih2YWx1ZXNbaV0sIGksIHZhbHVlcykpICE9IG51bGwgJiYgdmFsdWUgPiBtYXgpIHtcbiAgICAgICAgICAgIG1heCA9IHZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtYXg7XG59XG4iLCJpbXBvcnQgbnVtYmVyIGZyb20gXCIuL251bWJlclwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZXMsIHZhbHVlb2YpIHtcbiAgdmFyIG4gPSB2YWx1ZXMubGVuZ3RoLFxuICAgICAgbSA9IG4sXG4gICAgICBpID0gLTEsXG4gICAgICB2YWx1ZSxcbiAgICAgIHN1bSA9IDA7XG5cbiAgaWYgKHZhbHVlb2YgPT0gbnVsbCkge1xuICAgIHdoaWxlICgrK2kgPCBuKSB7XG4gICAgICBpZiAoIWlzTmFOKHZhbHVlID0gbnVtYmVyKHZhbHVlc1tpXSkpKSBzdW0gKz0gdmFsdWU7XG4gICAgICBlbHNlIC0tbTtcbiAgICB9XG4gIH1cblxuICBlbHNlIHtcbiAgICB3aGlsZSAoKytpIDwgbikge1xuICAgICAgaWYgKCFpc05hTih2YWx1ZSA9IG51bWJlcih2YWx1ZW9mKHZhbHVlc1tpXSwgaSwgdmFsdWVzKSkpKSBzdW0gKz0gdmFsdWU7XG4gICAgICBlbHNlIC0tbTtcbiAgICB9XG4gIH1cblxuICBpZiAobSkgcmV0dXJuIHN1bSAvIG07XG59XG4iLCJpbXBvcnQgYXNjZW5kaW5nIGZyb20gXCIuL2FzY2VuZGluZ1wiO1xuaW1wb3J0IG51bWJlciBmcm9tIFwiLi9udW1iZXJcIjtcbmltcG9ydCBxdWFudGlsZSBmcm9tIFwiLi9xdWFudGlsZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZXMsIHZhbHVlb2YpIHtcbiAgdmFyIG4gPSB2YWx1ZXMubGVuZ3RoLFxuICAgICAgaSA9IC0xLFxuICAgICAgdmFsdWUsXG4gICAgICBudW1iZXJzID0gW107XG5cbiAgaWYgKHZhbHVlb2YgPT0gbnVsbCkge1xuICAgIHdoaWxlICgrK2kgPCBuKSB7XG4gICAgICBpZiAoIWlzTmFOKHZhbHVlID0gbnVtYmVyKHZhbHVlc1tpXSkpKSB7XG4gICAgICAgIG51bWJlcnMucHVzaCh2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZWxzZSB7XG4gICAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICAgIGlmICghaXNOYU4odmFsdWUgPSBudW1iZXIodmFsdWVvZih2YWx1ZXNbaV0sIGksIHZhbHVlcykpKSkge1xuICAgICAgICBudW1iZXJzLnB1c2godmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBxdWFudGlsZShudW1iZXJzLnNvcnQoYXNjZW5kaW5nKSwgMC41KTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGFycmF5cykge1xuICB2YXIgbiA9IGFycmF5cy5sZW5ndGgsXG4gICAgICBtLFxuICAgICAgaSA9IC0xLFxuICAgICAgaiA9IDAsXG4gICAgICBtZXJnZWQsXG4gICAgICBhcnJheTtcblxuICB3aGlsZSAoKytpIDwgbikgaiArPSBhcnJheXNbaV0ubGVuZ3RoO1xuICBtZXJnZWQgPSBuZXcgQXJyYXkoaik7XG5cbiAgd2hpbGUgKC0tbiA+PSAwKSB7XG4gICAgYXJyYXkgPSBhcnJheXNbbl07XG4gICAgbSA9IGFycmF5Lmxlbmd0aDtcbiAgICB3aGlsZSAoLS1tID49IDApIHtcbiAgICAgIG1lcmdlZFstLWpdID0gYXJyYXlbbV07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1lcmdlZDtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlcywgdmFsdWVvZikge1xuICB2YXIgbiA9IHZhbHVlcy5sZW5ndGgsXG4gICAgICBpID0gLTEsXG4gICAgICB2YWx1ZSxcbiAgICAgIG1pbjtcblxuICBpZiAodmFsdWVvZiA9PSBudWxsKSB7XG4gICAgd2hpbGUgKCsraSA8IG4pIHsgLy8gRmluZCB0aGUgZmlyc3QgY29tcGFyYWJsZSB2YWx1ZS5cbiAgICAgIGlmICgodmFsdWUgPSB2YWx1ZXNbaV0pICE9IG51bGwgJiYgdmFsdWUgPj0gdmFsdWUpIHtcbiAgICAgICAgbWluID0gdmFsdWU7XG4gICAgICAgIHdoaWxlICgrK2kgPCBuKSB7IC8vIENvbXBhcmUgdGhlIHJlbWFpbmluZyB2YWx1ZXMuXG4gICAgICAgICAgaWYgKCh2YWx1ZSA9IHZhbHVlc1tpXSkgIT0gbnVsbCAmJiBtaW4gPiB2YWx1ZSkge1xuICAgICAgICAgICAgbWluID0gdmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZWxzZSB7XG4gICAgd2hpbGUgKCsraSA8IG4pIHsgLy8gRmluZCB0aGUgZmlyc3QgY29tcGFyYWJsZSB2YWx1ZS5cbiAgICAgIGlmICgodmFsdWUgPSB2YWx1ZW9mKHZhbHVlc1tpXSwgaSwgdmFsdWVzKSkgIT0gbnVsbCAmJiB2YWx1ZSA+PSB2YWx1ZSkge1xuICAgICAgICBtaW4gPSB2YWx1ZTtcbiAgICAgICAgd2hpbGUgKCsraSA8IG4pIHsgLy8gQ29tcGFyZSB0aGUgcmVtYWluaW5nIHZhbHVlcy5cbiAgICAgICAgICBpZiAoKHZhbHVlID0gdmFsdWVvZih2YWx1ZXNbaV0sIGksIHZhbHVlcykpICE9IG51bGwgJiYgbWluID4gdmFsdWUpIHtcbiAgICAgICAgICAgIG1pbiA9IHZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtaW47XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHJldHVybiB4ID09PSBudWxsID8gTmFOIDogK3g7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhcnJheSwgZikge1xuICBpZiAoZiA9PSBudWxsKSBmID0gcGFpcjtcbiAgdmFyIGkgPSAwLCBuID0gYXJyYXkubGVuZ3RoIC0gMSwgcCA9IGFycmF5WzBdLCBwYWlycyA9IG5ldyBBcnJheShuIDwgMCA/IDAgOiBuKTtcbiAgd2hpbGUgKGkgPCBuKSBwYWlyc1tpXSA9IGYocCwgcCA9IGFycmF5WysraV0pO1xuICByZXR1cm4gcGFpcnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYWlyKGEsIGIpIHtcbiAgcmV0dXJuIFthLCBiXTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGFycmF5LCBpbmRleGVzKSB7XG4gIHZhciBpID0gaW5kZXhlcy5sZW5ndGgsIHBlcm11dGVzID0gbmV3IEFycmF5KGkpO1xuICB3aGlsZSAoaS0tKSBwZXJtdXRlc1tpXSA9IGFycmF5W2luZGV4ZXNbaV1dO1xuICByZXR1cm4gcGVybXV0ZXM7XG59XG4iLCJpbXBvcnQgbnVtYmVyIGZyb20gXCIuL251bWJlclwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZXMsIHAsIHZhbHVlb2YpIHtcbiAgaWYgKHZhbHVlb2YgPT0gbnVsbCkgdmFsdWVvZiA9IG51bWJlcjtcbiAgaWYgKCEobiA9IHZhbHVlcy5sZW5ndGgpKSByZXR1cm47XG4gIGlmICgocCA9ICtwKSA8PSAwIHx8IG4gPCAyKSByZXR1cm4gK3ZhbHVlb2YodmFsdWVzWzBdLCAwLCB2YWx1ZXMpO1xuICBpZiAocCA+PSAxKSByZXR1cm4gK3ZhbHVlb2YodmFsdWVzW24gLSAxXSwgbiAtIDEsIHZhbHVlcyk7XG4gIHZhciBuLFxuICAgICAgaSA9IChuIC0gMSkgKiBwLFxuICAgICAgaTAgPSBNYXRoLmZsb29yKGkpLFxuICAgICAgdmFsdWUwID0gK3ZhbHVlb2YodmFsdWVzW2kwXSwgaTAsIHZhbHVlcyksXG4gICAgICB2YWx1ZTEgPSArdmFsdWVvZih2YWx1ZXNbaTAgKyAxXSwgaTAgKyAxLCB2YWx1ZXMpO1xuICByZXR1cm4gdmFsdWUwICsgKHZhbHVlMSAtIHZhbHVlMCkgKiAoaSAtIGkwKTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHN0YXJ0LCBzdG9wLCBzdGVwKSB7XG4gIHN0YXJ0ID0gK3N0YXJ0LCBzdG9wID0gK3N0b3AsIHN0ZXAgPSAobiA9IGFyZ3VtZW50cy5sZW5ndGgpIDwgMiA/IChzdG9wID0gc3RhcnQsIHN0YXJ0ID0gMCwgMSkgOiBuIDwgMyA/IDEgOiArc3RlcDtcblxuICB2YXIgaSA9IC0xLFxuICAgICAgbiA9IE1hdGgubWF4KDAsIE1hdGguY2VpbCgoc3RvcCAtIHN0YXJ0KSAvIHN0ZXApKSB8IDAsXG4gICAgICByYW5nZSA9IG5ldyBBcnJheShuKTtcblxuICB3aGlsZSAoKytpIDwgbikge1xuICAgIHJhbmdlW2ldID0gc3RhcnQgKyBpICogc3RlcDtcbiAgfVxuXG4gIHJldHVybiByYW5nZTtcbn1cbiIsImltcG9ydCBhc2NlbmRpbmcgZnJvbSBcIi4vYXNjZW5kaW5nXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlcywgY29tcGFyZSkge1xuICBpZiAoIShuID0gdmFsdWVzLmxlbmd0aCkpIHJldHVybjtcbiAgdmFyIG4sXG4gICAgICBpID0gMCxcbiAgICAgIGogPSAwLFxuICAgICAgeGksXG4gICAgICB4aiA9IHZhbHVlc1tqXTtcblxuICBpZiAoY29tcGFyZSA9PSBudWxsKSBjb21wYXJlID0gYXNjZW5kaW5nO1xuXG4gIHdoaWxlICgrK2kgPCBuKSB7XG4gICAgaWYgKGNvbXBhcmUoeGkgPSB2YWx1ZXNbaV0sIHhqKSA8IDAgfHwgY29tcGFyZSh4aiwgeGopICE9PSAwKSB7XG4gICAgICB4aiA9IHhpLCBqID0gaTtcbiAgICB9XG4gIH1cblxuICBpZiAoY29tcGFyZSh4aiwgeGopID09PSAwKSByZXR1cm4gajtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGFycmF5LCBpMCwgaTEpIHtcbiAgdmFyIG0gPSAoaTEgPT0gbnVsbCA/IGFycmF5Lmxlbmd0aCA6IGkxKSAtIChpMCA9IGkwID09IG51bGwgPyAwIDogK2kwKSxcbiAgICAgIHQsXG4gICAgICBpO1xuXG4gIHdoaWxlIChtKSB7XG4gICAgaSA9IE1hdGgucmFuZG9tKCkgKiBtLS0gfCAwO1xuICAgIHQgPSBhcnJheVttICsgaTBdO1xuICAgIGFycmF5W20gKyBpMF0gPSBhcnJheVtpICsgaTBdO1xuICAgIGFycmF5W2kgKyBpMF0gPSB0O1xuICB9XG5cbiAgcmV0dXJuIGFycmF5O1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWVzLCB2YWx1ZW9mKSB7XG4gIHZhciBuID0gdmFsdWVzLmxlbmd0aCxcbiAgICAgIGkgPSAtMSxcbiAgICAgIHZhbHVlLFxuICAgICAgc3VtID0gMDtcblxuICBpZiAodmFsdWVvZiA9PSBudWxsKSB7XG4gICAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICAgIGlmICh2YWx1ZSA9ICt2YWx1ZXNbaV0pIHN1bSArPSB2YWx1ZTsgLy8gTm90ZTogemVybyBhbmQgbnVsbCBhcmUgZXF1aXZhbGVudC5cbiAgICB9XG4gIH1cblxuICBlbHNlIHtcbiAgICB3aGlsZSAoKytpIDwgbikge1xuICAgICAgaWYgKHZhbHVlID0gK3ZhbHVlb2YodmFsdWVzW2ldLCBpLCB2YWx1ZXMpKSBzdW0gKz0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN1bTtcbn1cbiIsImltcG9ydCB7bWFwfSBmcm9tIFwiLi4vYXJyYXlcIjtcbmltcG9ydCBhc2NlbmRpbmcgZnJvbSBcIi4uL2FzY2VuZGluZ1wiO1xuaW1wb3J0IG51bWJlciBmcm9tIFwiLi4vbnVtYmVyXCI7XG5pbXBvcnQgcXVhbnRpbGUgZnJvbSBcIi4uL3F1YW50aWxlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlcywgbWluLCBtYXgpIHtcbiAgdmFsdWVzID0gbWFwLmNhbGwodmFsdWVzLCBudW1iZXIpLnNvcnQoYXNjZW5kaW5nKTtcbiAgcmV0dXJuIE1hdGguY2VpbCgobWF4IC0gbWluKSAvICgyICogKHF1YW50aWxlKHZhbHVlcywgMC43NSkgLSBxdWFudGlsZSh2YWx1ZXMsIDAuMjUpKSAqIE1hdGgucG93KHZhbHVlcy5sZW5ndGgsIC0xIC8gMykpKTtcbn1cbiIsImltcG9ydCBkZXZpYXRpb24gZnJvbSBcIi4uL2RldmlhdGlvblwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZXMsIG1pbiwgbWF4KSB7XG4gIHJldHVybiBNYXRoLmNlaWwoKG1heCAtIG1pbikgLyAoMy41ICogZGV2aWF0aW9uKHZhbHVlcykgKiBNYXRoLnBvdyh2YWx1ZXMubGVuZ3RoLCAtMSAvIDMpKSk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZXMpIHtcbiAgcmV0dXJuIE1hdGguY2VpbChNYXRoLmxvZyh2YWx1ZXMubGVuZ3RoKSAvIE1hdGguTE4yKSArIDE7XG59XG4iLCJ2YXIgZTEwID0gTWF0aC5zcXJ0KDUwKSxcbiAgICBlNSA9IE1hdGguc3FydCgxMCksXG4gICAgZTIgPSBNYXRoLnNxcnQoMik7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHN0YXJ0LCBzdG9wLCBjb3VudCkge1xuICB2YXIgcmV2ZXJzZSxcbiAgICAgIGkgPSAtMSxcbiAgICAgIG4sXG4gICAgICB0aWNrcyxcbiAgICAgIHN0ZXA7XG5cbiAgc3RvcCA9ICtzdG9wLCBzdGFydCA9ICtzdGFydCwgY291bnQgPSArY291bnQ7XG4gIGlmIChzdGFydCA9PT0gc3RvcCAmJiBjb3VudCA+IDApIHJldHVybiBbc3RhcnRdO1xuICBpZiAocmV2ZXJzZSA9IHN0b3AgPCBzdGFydCkgbiA9IHN0YXJ0LCBzdGFydCA9IHN0b3AsIHN0b3AgPSBuO1xuICBpZiAoKHN0ZXAgPSB0aWNrSW5jcmVtZW50KHN0YXJ0LCBzdG9wLCBjb3VudCkpID09PSAwIHx8ICFpc0Zpbml0ZShzdGVwKSkgcmV0dXJuIFtdO1xuXG4gIGlmIChzdGVwID4gMCkge1xuICAgIHN0YXJ0ID0gTWF0aC5jZWlsKHN0YXJ0IC8gc3RlcCk7XG4gICAgc3RvcCA9IE1hdGguZmxvb3Ioc3RvcCAvIHN0ZXApO1xuICAgIHRpY2tzID0gbmV3IEFycmF5KG4gPSBNYXRoLmNlaWwoc3RvcCAtIHN0YXJ0ICsgMSkpO1xuICAgIHdoaWxlICgrK2kgPCBuKSB0aWNrc1tpXSA9IChzdGFydCArIGkpICogc3RlcDtcbiAgfSBlbHNlIHtcbiAgICBzdGFydCA9IE1hdGguZmxvb3Ioc3RhcnQgKiBzdGVwKTtcbiAgICBzdG9wID0gTWF0aC5jZWlsKHN0b3AgKiBzdGVwKTtcbiAgICB0aWNrcyA9IG5ldyBBcnJheShuID0gTWF0aC5jZWlsKHN0YXJ0IC0gc3RvcCArIDEpKTtcbiAgICB3aGlsZSAoKytpIDwgbikgdGlja3NbaV0gPSAoc3RhcnQgLSBpKSAvIHN0ZXA7XG4gIH1cblxuICBpZiAocmV2ZXJzZSkgdGlja3MucmV2ZXJzZSgpO1xuXG4gIHJldHVybiB0aWNrcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRpY2tJbmNyZW1lbnQoc3RhcnQsIHN0b3AsIGNvdW50KSB7XG4gIHZhciBzdGVwID0gKHN0b3AgLSBzdGFydCkgLyBNYXRoLm1heCgwLCBjb3VudCksXG4gICAgICBwb3dlciA9IE1hdGguZmxvb3IoTWF0aC5sb2coc3RlcCkgLyBNYXRoLkxOMTApLFxuICAgICAgZXJyb3IgPSBzdGVwIC8gTWF0aC5wb3coMTAsIHBvd2VyKTtcbiAgcmV0dXJuIHBvd2VyID49IDBcbiAgICAgID8gKGVycm9yID49IGUxMCA/IDEwIDogZXJyb3IgPj0gZTUgPyA1IDogZXJyb3IgPj0gZTIgPyAyIDogMSkgKiBNYXRoLnBvdygxMCwgcG93ZXIpXG4gICAgICA6IC1NYXRoLnBvdygxMCwgLXBvd2VyKSAvIChlcnJvciA+PSBlMTAgPyAxMCA6IGVycm9yID49IGU1ID8gNSA6IGVycm9yID49IGUyID8gMiA6IDEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGlja1N0ZXAoc3RhcnQsIHN0b3AsIGNvdW50KSB7XG4gIHZhciBzdGVwMCA9IE1hdGguYWJzKHN0b3AgLSBzdGFydCkgLyBNYXRoLm1heCgwLCBjb3VudCksXG4gICAgICBzdGVwMSA9IE1hdGgucG93KDEwLCBNYXRoLmZsb29yKE1hdGgubG9nKHN0ZXAwKSAvIE1hdGguTE4xMCkpLFxuICAgICAgZXJyb3IgPSBzdGVwMCAvIHN0ZXAxO1xuICBpZiAoZXJyb3IgPj0gZTEwKSBzdGVwMSAqPSAxMDtcbiAgZWxzZSBpZiAoZXJyb3IgPj0gZTUpIHN0ZXAxICo9IDU7XG4gIGVsc2UgaWYgKGVycm9yID49IGUyKSBzdGVwMSAqPSAyO1xuICByZXR1cm4gc3RvcCA8IHN0YXJ0ID8gLXN0ZXAxIDogc3RlcDE7XG59XG4iLCJpbXBvcnQgbWluIGZyb20gXCIuL21pblwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihtYXRyaXgpIHtcbiAgaWYgKCEobiA9IG1hdHJpeC5sZW5ndGgpKSByZXR1cm4gW107XG4gIGZvciAodmFyIGkgPSAtMSwgbSA9IG1pbihtYXRyaXgsIGxlbmd0aCksIHRyYW5zcG9zZSA9IG5ldyBBcnJheShtKTsgKytpIDwgbTspIHtcbiAgICBmb3IgKHZhciBqID0gLTEsIG4sIHJvdyA9IHRyYW5zcG9zZVtpXSA9IG5ldyBBcnJheShuKTsgKytqIDwgbjspIHtcbiAgICAgIHJvd1tqXSA9IG1hdHJpeFtqXVtpXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRyYW5zcG9zZTtcbn1cblxuZnVuY3Rpb24gbGVuZ3RoKGQpIHtcbiAgcmV0dXJuIGQubGVuZ3RoO1xufVxuIiwiaW1wb3J0IG51bWJlciBmcm9tIFwiLi9udW1iZXJcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWVzLCB2YWx1ZW9mKSB7XG4gIHZhciBuID0gdmFsdWVzLmxlbmd0aCxcbiAgICAgIG0gPSAwLFxuICAgICAgaSA9IC0xLFxuICAgICAgbWVhbiA9IDAsXG4gICAgICB2YWx1ZSxcbiAgICAgIGRlbHRhLFxuICAgICAgc3VtID0gMDtcblxuICBpZiAodmFsdWVvZiA9PSBudWxsKSB7XG4gICAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICAgIGlmICghaXNOYU4odmFsdWUgPSBudW1iZXIodmFsdWVzW2ldKSkpIHtcbiAgICAgICAgZGVsdGEgPSB2YWx1ZSAtIG1lYW47XG4gICAgICAgIG1lYW4gKz0gZGVsdGEgLyArK207XG4gICAgICAgIHN1bSArPSBkZWx0YSAqICh2YWx1ZSAtIG1lYW4pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGVsc2Uge1xuICAgIHdoaWxlICgrK2kgPCBuKSB7XG4gICAgICBpZiAoIWlzTmFOKHZhbHVlID0gbnVtYmVyKHZhbHVlb2YodmFsdWVzW2ldLCBpLCB2YWx1ZXMpKSkpIHtcbiAgICAgICAgZGVsdGEgPSB2YWx1ZSAtIG1lYW47XG4gICAgICAgIG1lYW4gKz0gZGVsdGEgLyArK207XG4gICAgICAgIHN1bSArPSBkZWx0YSAqICh2YWx1ZSAtIG1lYW4pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChtID4gMSkgcmV0dXJuIHN1bSAvIChtIC0gMSk7XG59XG4iLCJpbXBvcnQgdHJhbnNwb3NlIGZyb20gXCIuL3RyYW5zcG9zZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRyYW5zcG9zZShhcmd1bWVudHMpO1xufVxuIiwiZXhwb3J0IHZhciBzbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTtcbiIsImltcG9ydCB7c2xpY2V9IGZyb20gXCIuL2FycmF5XCI7XG5pbXBvcnQgaWRlbnRpdHkgZnJvbSBcIi4vaWRlbnRpdHlcIjtcblxudmFyIHRvcCA9IDEsXG4gICAgcmlnaHQgPSAyLFxuICAgIGJvdHRvbSA9IDMsXG4gICAgbGVmdCA9IDQsXG4gICAgZXBzaWxvbiA9IDFlLTY7XG5cbmZ1bmN0aW9uIHRyYW5zbGF0ZVgoeCkge1xuICByZXR1cm4gXCJ0cmFuc2xhdGUoXCIgKyAoeCArIDAuNSkgKyBcIiwwKVwiO1xufVxuXG5mdW5jdGlvbiB0cmFuc2xhdGVZKHkpIHtcbiAgcmV0dXJuIFwidHJhbnNsYXRlKDAsXCIgKyAoeSArIDAuNSkgKyBcIilcIjtcbn1cblxuZnVuY3Rpb24gbnVtYmVyKHNjYWxlKSB7XG4gIHJldHVybiBmdW5jdGlvbihkKSB7XG4gICAgcmV0dXJuICtzY2FsZShkKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gY2VudGVyKHNjYWxlKSB7XG4gIHZhciBvZmZzZXQgPSBNYXRoLm1heCgwLCBzY2FsZS5iYW5kd2lkdGgoKSAtIDEpIC8gMjsgLy8gQWRqdXN0IGZvciAwLjVweCBvZmZzZXQuXG4gIGlmIChzY2FsZS5yb3VuZCgpKSBvZmZzZXQgPSBNYXRoLnJvdW5kKG9mZnNldCk7XG4gIHJldHVybiBmdW5jdGlvbihkKSB7XG4gICAgcmV0dXJuICtzY2FsZShkKSArIG9mZnNldDtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZW50ZXJpbmcoKSB7XG4gIHJldHVybiAhdGhpcy5fX2F4aXM7XG59XG5cbmZ1bmN0aW9uIGF4aXMob3JpZW50LCBzY2FsZSkge1xuICB2YXIgdGlja0FyZ3VtZW50cyA9IFtdLFxuICAgICAgdGlja1ZhbHVlcyA9IG51bGwsXG4gICAgICB0aWNrRm9ybWF0ID0gbnVsbCxcbiAgICAgIHRpY2tTaXplSW5uZXIgPSA2LFxuICAgICAgdGlja1NpemVPdXRlciA9IDYsXG4gICAgICB0aWNrUGFkZGluZyA9IDMsXG4gICAgICBrID0gb3JpZW50ID09PSB0b3AgfHwgb3JpZW50ID09PSBsZWZ0ID8gLTEgOiAxLFxuICAgICAgeCA9IG9yaWVudCA9PT0gbGVmdCB8fCBvcmllbnQgPT09IHJpZ2h0ID8gXCJ4XCIgOiBcInlcIixcbiAgICAgIHRyYW5zZm9ybSA9IG9yaWVudCA9PT0gdG9wIHx8IG9yaWVudCA9PT0gYm90dG9tID8gdHJhbnNsYXRlWCA6IHRyYW5zbGF0ZVk7XG5cbiAgZnVuY3Rpb24gYXhpcyhjb250ZXh0KSB7XG4gICAgdmFyIHZhbHVlcyA9IHRpY2tWYWx1ZXMgPT0gbnVsbCA/IChzY2FsZS50aWNrcyA/IHNjYWxlLnRpY2tzLmFwcGx5KHNjYWxlLCB0aWNrQXJndW1lbnRzKSA6IHNjYWxlLmRvbWFpbigpKSA6IHRpY2tWYWx1ZXMsXG4gICAgICAgIGZvcm1hdCA9IHRpY2tGb3JtYXQgPT0gbnVsbCA/IChzY2FsZS50aWNrRm9ybWF0ID8gc2NhbGUudGlja0Zvcm1hdC5hcHBseShzY2FsZSwgdGlja0FyZ3VtZW50cykgOiBpZGVudGl0eSkgOiB0aWNrRm9ybWF0LFxuICAgICAgICBzcGFjaW5nID0gTWF0aC5tYXgodGlja1NpemVJbm5lciwgMCkgKyB0aWNrUGFkZGluZyxcbiAgICAgICAgcmFuZ2UgPSBzY2FsZS5yYW5nZSgpLFxuICAgICAgICByYW5nZTAgPSArcmFuZ2VbMF0gKyAwLjUsXG4gICAgICAgIHJhbmdlMSA9ICtyYW5nZVtyYW5nZS5sZW5ndGggLSAxXSArIDAuNSxcbiAgICAgICAgcG9zaXRpb24gPSAoc2NhbGUuYmFuZHdpZHRoID8gY2VudGVyIDogbnVtYmVyKShzY2FsZS5jb3B5KCkpLFxuICAgICAgICBzZWxlY3Rpb24gPSBjb250ZXh0LnNlbGVjdGlvbiA/IGNvbnRleHQuc2VsZWN0aW9uKCkgOiBjb250ZXh0LFxuICAgICAgICBwYXRoID0gc2VsZWN0aW9uLnNlbGVjdEFsbChcIi5kb21haW5cIikuZGF0YShbbnVsbF0pLFxuICAgICAgICB0aWNrID0gc2VsZWN0aW9uLnNlbGVjdEFsbChcIi50aWNrXCIpLmRhdGEodmFsdWVzLCBzY2FsZSkub3JkZXIoKSxcbiAgICAgICAgdGlja0V4aXQgPSB0aWNrLmV4aXQoKSxcbiAgICAgICAgdGlja0VudGVyID0gdGljay5lbnRlcigpLmFwcGVuZChcImdcIikuYXR0cihcImNsYXNzXCIsIFwidGlja1wiKSxcbiAgICAgICAgbGluZSA9IHRpY2suc2VsZWN0KFwibGluZVwiKSxcbiAgICAgICAgdGV4dCA9IHRpY2suc2VsZWN0KFwidGV4dFwiKTtcblxuICAgIHBhdGggPSBwYXRoLm1lcmdlKHBhdGguZW50ZXIoKS5pbnNlcnQoXCJwYXRoXCIsIFwiLnRpY2tcIilcbiAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcImRvbWFpblwiKVxuICAgICAgICAuYXR0cihcInN0cm9rZVwiLCBcImN1cnJlbnRDb2xvclwiKSk7XG5cbiAgICB0aWNrID0gdGljay5tZXJnZSh0aWNrRW50ZXIpO1xuXG4gICAgbGluZSA9IGxpbmUubWVyZ2UodGlja0VudGVyLmFwcGVuZChcImxpbmVcIilcbiAgICAgICAgLmF0dHIoXCJzdHJva2VcIiwgXCJjdXJyZW50Q29sb3JcIilcbiAgICAgICAgLmF0dHIoeCArIFwiMlwiLCBrICogdGlja1NpemVJbm5lcikpO1xuXG4gICAgdGV4dCA9IHRleHQubWVyZ2UodGlja0VudGVyLmFwcGVuZChcInRleHRcIilcbiAgICAgICAgLmF0dHIoXCJmaWxsXCIsIFwiY3VycmVudENvbG9yXCIpXG4gICAgICAgIC5hdHRyKHgsIGsgKiBzcGFjaW5nKVxuICAgICAgICAuYXR0cihcImR5XCIsIG9yaWVudCA9PT0gdG9wID8gXCIwZW1cIiA6IG9yaWVudCA9PT0gYm90dG9tID8gXCIwLjcxZW1cIiA6IFwiMC4zMmVtXCIpKTtcblxuICAgIGlmIChjb250ZXh0ICE9PSBzZWxlY3Rpb24pIHtcbiAgICAgIHBhdGggPSBwYXRoLnRyYW5zaXRpb24oY29udGV4dCk7XG4gICAgICB0aWNrID0gdGljay50cmFuc2l0aW9uKGNvbnRleHQpO1xuICAgICAgbGluZSA9IGxpbmUudHJhbnNpdGlvbihjb250ZXh0KTtcbiAgICAgIHRleHQgPSB0ZXh0LnRyYW5zaXRpb24oY29udGV4dCk7XG5cbiAgICAgIHRpY2tFeGl0ID0gdGlja0V4aXQudHJhbnNpdGlvbihjb250ZXh0KVxuICAgICAgICAgIC5hdHRyKFwib3BhY2l0eVwiLCBlcHNpbG9uKVxuICAgICAgICAgIC5hdHRyKFwidHJhbnNmb3JtXCIsIGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGlzRmluaXRlKGQgPSBwb3NpdGlvbihkKSkgPyB0cmFuc2Zvcm0oZCkgOiB0aGlzLmdldEF0dHJpYnV0ZShcInRyYW5zZm9ybVwiKTsgfSk7XG5cbiAgICAgIHRpY2tFbnRlclxuICAgICAgICAgIC5hdHRyKFwib3BhY2l0eVwiLCBlcHNpbG9uKVxuICAgICAgICAgIC5hdHRyKFwidHJhbnNmb3JtXCIsIGZ1bmN0aW9uKGQpIHsgdmFyIHAgPSB0aGlzLnBhcmVudE5vZGUuX19heGlzOyByZXR1cm4gdHJhbnNmb3JtKHAgJiYgaXNGaW5pdGUocCA9IHAoZCkpID8gcCA6IHBvc2l0aW9uKGQpKTsgfSk7XG4gICAgfVxuXG4gICAgdGlja0V4aXQucmVtb3ZlKCk7XG5cbiAgICBwYXRoXG4gICAgICAgIC5hdHRyKFwiZFwiLCBvcmllbnQgPT09IGxlZnQgfHwgb3JpZW50ID09IHJpZ2h0XG4gICAgICAgICAgICA/ICh0aWNrU2l6ZU91dGVyID8gXCJNXCIgKyBrICogdGlja1NpemVPdXRlciArIFwiLFwiICsgcmFuZ2UwICsgXCJIMC41VlwiICsgcmFuZ2UxICsgXCJIXCIgKyBrICogdGlja1NpemVPdXRlciA6IFwiTTAuNSxcIiArIHJhbmdlMCArIFwiVlwiICsgcmFuZ2UxKVxuICAgICAgICAgICAgOiAodGlja1NpemVPdXRlciA/IFwiTVwiICsgcmFuZ2UwICsgXCIsXCIgKyBrICogdGlja1NpemVPdXRlciArIFwiVjAuNUhcIiArIHJhbmdlMSArIFwiVlwiICsgayAqIHRpY2tTaXplT3V0ZXIgOiBcIk1cIiArIHJhbmdlMCArIFwiLDAuNUhcIiArIHJhbmdlMSkpO1xuXG4gICAgdGlja1xuICAgICAgICAuYXR0cihcIm9wYWNpdHlcIiwgMSlcbiAgICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgZnVuY3Rpb24oZCkgeyByZXR1cm4gdHJhbnNmb3JtKHBvc2l0aW9uKGQpKTsgfSk7XG5cbiAgICBsaW5lXG4gICAgICAgIC5hdHRyKHggKyBcIjJcIiwgayAqIHRpY2tTaXplSW5uZXIpO1xuXG4gICAgdGV4dFxuICAgICAgICAuYXR0cih4LCBrICogc3BhY2luZylcbiAgICAgICAgLnRleHQoZm9ybWF0KTtcblxuICAgIHNlbGVjdGlvbi5maWx0ZXIoZW50ZXJpbmcpXG4gICAgICAgIC5hdHRyKFwiZmlsbFwiLCBcIm5vbmVcIilcbiAgICAgICAgLmF0dHIoXCJmb250LXNpemVcIiwgMTApXG4gICAgICAgIC5hdHRyKFwiZm9udC1mYW1pbHlcIiwgXCJzYW5zLXNlcmlmXCIpXG4gICAgICAgIC5hdHRyKFwidGV4dC1hbmNob3JcIiwgb3JpZW50ID09PSByaWdodCA/IFwic3RhcnRcIiA6IG9yaWVudCA9PT0gbGVmdCA/IFwiZW5kXCIgOiBcIm1pZGRsZVwiKTtcblxuICAgIHNlbGVjdGlvblxuICAgICAgICAuZWFjaChmdW5jdGlvbigpIHsgdGhpcy5fX2F4aXMgPSBwb3NpdGlvbjsgfSk7XG4gIH1cblxuICBheGlzLnNjYWxlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHNjYWxlID0gXywgYXhpcykgOiBzY2FsZTtcbiAgfTtcblxuICBheGlzLnRpY2tzID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRpY2tBcmd1bWVudHMgPSBzbGljZS5jYWxsKGFyZ3VtZW50cyksIGF4aXM7XG4gIH07XG5cbiAgYXhpcy50aWNrQXJndW1lbnRzID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRpY2tBcmd1bWVudHMgPSBfID09IG51bGwgPyBbXSA6IHNsaWNlLmNhbGwoXyksIGF4aXMpIDogdGlja0FyZ3VtZW50cy5zbGljZSgpO1xuICB9O1xuXG4gIGF4aXMudGlja1ZhbHVlcyA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0aWNrVmFsdWVzID0gXyA9PSBudWxsID8gbnVsbCA6IHNsaWNlLmNhbGwoXyksIGF4aXMpIDogdGlja1ZhbHVlcyAmJiB0aWNrVmFsdWVzLnNsaWNlKCk7XG4gIH07XG5cbiAgYXhpcy50aWNrRm9ybWF0ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRpY2tGb3JtYXQgPSBfLCBheGlzKSA6IHRpY2tGb3JtYXQ7XG4gIH07XG5cbiAgYXhpcy50aWNrU2l6ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0aWNrU2l6ZUlubmVyID0gdGlja1NpemVPdXRlciA9ICtfLCBheGlzKSA6IHRpY2tTaXplSW5uZXI7XG4gIH07XG5cbiAgYXhpcy50aWNrU2l6ZUlubmVyID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRpY2tTaXplSW5uZXIgPSArXywgYXhpcykgOiB0aWNrU2l6ZUlubmVyO1xuICB9O1xuXG4gIGF4aXMudGlja1NpemVPdXRlciA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0aWNrU2l6ZU91dGVyID0gK18sIGF4aXMpIDogdGlja1NpemVPdXRlcjtcbiAgfTtcblxuICBheGlzLnRpY2tQYWRkaW5nID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRpY2tQYWRkaW5nID0gK18sIGF4aXMpIDogdGlja1BhZGRpbmc7XG4gIH07XG5cbiAgcmV0dXJuIGF4aXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBheGlzVG9wKHNjYWxlKSB7XG4gIHJldHVybiBheGlzKHRvcCwgc2NhbGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXhpc1JpZ2h0KHNjYWxlKSB7XG4gIHJldHVybiBheGlzKHJpZ2h0LCBzY2FsZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBheGlzQm90dG9tKHNjYWxlKSB7XG4gIHJldHVybiBheGlzKGJvdHRvbSwgc2NhbGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXhpc0xlZnQoc2NhbGUpIHtcbiAgcmV0dXJuIGF4aXMobGVmdCwgc2NhbGUpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4geDtcbn1cbiIsImV4cG9ydCB7XG4gIGF4aXNUb3AsXG4gIGF4aXNSaWdodCxcbiAgYXhpc0JvdHRvbSxcbiAgYXhpc0xlZnRcbn0gZnJvbSBcIi4vYXhpc1wiO1xuIiwiaW1wb3J0IHtkaXNwYXRjaH0gZnJvbSBcImQzLWRpc3BhdGNoXCI7XG5pbXBvcnQge2RyYWdEaXNhYmxlLCBkcmFnRW5hYmxlfSBmcm9tIFwiZDMtZHJhZ1wiO1xuaW1wb3J0IHtpbnRlcnBvbGF0ZX0gZnJvbSBcImQzLWludGVycG9sYXRlXCI7XG5pbXBvcnQge2N1c3RvbUV2ZW50LCBldmVudCwgdG91Y2gsIG1vdXNlLCBzZWxlY3R9IGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcbmltcG9ydCB7aW50ZXJydXB0fSBmcm9tIFwiZDMtdHJhbnNpdGlvblwiO1xuaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuL2NvbnN0YW50LmpzXCI7XG5pbXBvcnQgQnJ1c2hFdmVudCBmcm9tIFwiLi9ldmVudC5qc1wiO1xuaW1wb3J0IG5vZXZlbnQsIHtub3Byb3BhZ2F0aW9ufSBmcm9tIFwiLi9ub2V2ZW50LmpzXCI7XG5cbnZhciBNT0RFX0RSQUcgPSB7bmFtZTogXCJkcmFnXCJ9LFxuICAgIE1PREVfU1BBQ0UgPSB7bmFtZTogXCJzcGFjZVwifSxcbiAgICBNT0RFX0hBTkRMRSA9IHtuYW1lOiBcImhhbmRsZVwifSxcbiAgICBNT0RFX0NFTlRFUiA9IHtuYW1lOiBcImNlbnRlclwifTtcblxuZnVuY3Rpb24gbnVtYmVyMShlKSB7XG4gIHJldHVybiBbK2VbMF0sICtlWzFdXTtcbn1cblxuZnVuY3Rpb24gbnVtYmVyMihlKSB7XG4gIHJldHVybiBbbnVtYmVyMShlWzBdKSwgbnVtYmVyMShlWzFdKV07XG59XG5cbmZ1bmN0aW9uIHRvdWNoZXIoaWRlbnRpZmllcikge1xuICByZXR1cm4gZnVuY3Rpb24odGFyZ2V0KSB7XG4gICAgcmV0dXJuIHRvdWNoKHRhcmdldCwgZXZlbnQudG91Y2hlcywgaWRlbnRpZmllcik7XG4gIH07XG59XG5cbnZhciBYID0ge1xuICBuYW1lOiBcInhcIixcbiAgaGFuZGxlczogW1wid1wiLCBcImVcIl0ubWFwKHR5cGUpLFxuICBpbnB1dDogZnVuY3Rpb24oeCwgZSkgeyByZXR1cm4geCA9PSBudWxsID8gbnVsbCA6IFtbK3hbMF0sIGVbMF1bMV1dLCBbK3hbMV0sIGVbMV1bMV1dXTsgfSxcbiAgb3V0cHV0OiBmdW5jdGlvbih4eSkgeyByZXR1cm4geHkgJiYgW3h5WzBdWzBdLCB4eVsxXVswXV07IH1cbn07XG5cbnZhciBZID0ge1xuICBuYW1lOiBcInlcIixcbiAgaGFuZGxlczogW1wiblwiLCBcInNcIl0ubWFwKHR5cGUpLFxuICBpbnB1dDogZnVuY3Rpb24oeSwgZSkgeyByZXR1cm4geSA9PSBudWxsID8gbnVsbCA6IFtbZVswXVswXSwgK3lbMF1dLCBbZVsxXVswXSwgK3lbMV1dXTsgfSxcbiAgb3V0cHV0OiBmdW5jdGlvbih4eSkgeyByZXR1cm4geHkgJiYgW3h5WzBdWzFdLCB4eVsxXVsxXV07IH1cbn07XG5cbnZhciBYWSA9IHtcbiAgbmFtZTogXCJ4eVwiLFxuICBoYW5kbGVzOiBbXCJuXCIsIFwid1wiLCBcImVcIiwgXCJzXCIsIFwibndcIiwgXCJuZVwiLCBcInN3XCIsIFwic2VcIl0ubWFwKHR5cGUpLFxuICBpbnB1dDogZnVuY3Rpb24oeHkpIHsgcmV0dXJuIHh5ID09IG51bGwgPyBudWxsIDogbnVtYmVyMih4eSk7IH0sXG4gIG91dHB1dDogZnVuY3Rpb24oeHkpIHsgcmV0dXJuIHh5OyB9XG59O1xuXG52YXIgY3Vyc29ycyA9IHtcbiAgb3ZlcmxheTogXCJjcm9zc2hhaXJcIixcbiAgc2VsZWN0aW9uOiBcIm1vdmVcIixcbiAgbjogXCJucy1yZXNpemVcIixcbiAgZTogXCJldy1yZXNpemVcIixcbiAgczogXCJucy1yZXNpemVcIixcbiAgdzogXCJldy1yZXNpemVcIixcbiAgbnc6IFwibndzZS1yZXNpemVcIixcbiAgbmU6IFwibmVzdy1yZXNpemVcIixcbiAgc2U6IFwibndzZS1yZXNpemVcIixcbiAgc3c6IFwibmVzdy1yZXNpemVcIlxufTtcblxudmFyIGZsaXBYID0ge1xuICBlOiBcIndcIixcbiAgdzogXCJlXCIsXG4gIG53OiBcIm5lXCIsXG4gIG5lOiBcIm53XCIsXG4gIHNlOiBcInN3XCIsXG4gIHN3OiBcInNlXCJcbn07XG5cbnZhciBmbGlwWSA9IHtcbiAgbjogXCJzXCIsXG4gIHM6IFwiblwiLFxuICBudzogXCJzd1wiLFxuICBuZTogXCJzZVwiLFxuICBzZTogXCJuZVwiLFxuICBzdzogXCJud1wiXG59O1xuXG52YXIgc2lnbnNYID0ge1xuICBvdmVybGF5OiArMSxcbiAgc2VsZWN0aW9uOiArMSxcbiAgbjogbnVsbCxcbiAgZTogKzEsXG4gIHM6IG51bGwsXG4gIHc6IC0xLFxuICBudzogLTEsXG4gIG5lOiArMSxcbiAgc2U6ICsxLFxuICBzdzogLTFcbn07XG5cbnZhciBzaWduc1kgPSB7XG4gIG92ZXJsYXk6ICsxLFxuICBzZWxlY3Rpb246ICsxLFxuICBuOiAtMSxcbiAgZTogbnVsbCxcbiAgczogKzEsXG4gIHc6IG51bGwsXG4gIG53OiAtMSxcbiAgbmU6IC0xLFxuICBzZTogKzEsXG4gIHN3OiArMVxufTtcblxuZnVuY3Rpb24gdHlwZSh0KSB7XG4gIHJldHVybiB7dHlwZTogdH07XG59XG5cbi8vIElnbm9yZSByaWdodC1jbGljaywgc2luY2UgdGhhdCBzaG91bGQgb3BlbiB0aGUgY29udGV4dCBtZW51LlxuZnVuY3Rpb24gZGVmYXVsdEZpbHRlcigpIHtcbiAgcmV0dXJuICFldmVudC5jdHJsS2V5ICYmICFldmVudC5idXR0b247XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRFeHRlbnQoKSB7XG4gIHZhciBzdmcgPSB0aGlzLm93bmVyU1ZHRWxlbWVudCB8fCB0aGlzO1xuICBpZiAoc3ZnLmhhc0F0dHJpYnV0ZShcInZpZXdCb3hcIikpIHtcbiAgICBzdmcgPSBzdmcudmlld0JveC5iYXNlVmFsO1xuICAgIHJldHVybiBbW3N2Zy54LCBzdmcueV0sIFtzdmcueCArIHN2Zy53aWR0aCwgc3ZnLnkgKyBzdmcuaGVpZ2h0XV07XG4gIH1cbiAgcmV0dXJuIFtbMCwgMF0sIFtzdmcud2lkdGguYmFzZVZhbC52YWx1ZSwgc3ZnLmhlaWdodC5iYXNlVmFsLnZhbHVlXV07XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRUb3VjaGFibGUoKSB7XG4gIHJldHVybiBuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHMgfHwgKFwib250b3VjaHN0YXJ0XCIgaW4gdGhpcyk7XG59XG5cbi8vIExpa2UgZDMubG9jYWwsIGJ1dCB3aXRoIHRoZSBuYW1lIOKAnF9fYnJ1c2jigJ0gcmF0aGVyIHRoYW4gYXV0by1nZW5lcmF0ZWQuXG5mdW5jdGlvbiBsb2NhbChub2RlKSB7XG4gIHdoaWxlICghbm9kZS5fX2JydXNoKSBpZiAoIShub2RlID0gbm9kZS5wYXJlbnROb2RlKSkgcmV0dXJuO1xuICByZXR1cm4gbm9kZS5fX2JydXNoO1xufVxuXG5mdW5jdGlvbiBlbXB0eShleHRlbnQpIHtcbiAgcmV0dXJuIGV4dGVudFswXVswXSA9PT0gZXh0ZW50WzFdWzBdXG4gICAgICB8fCBleHRlbnRbMF1bMV0gPT09IGV4dGVudFsxXVsxXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJydXNoU2VsZWN0aW9uKG5vZGUpIHtcbiAgdmFyIHN0YXRlID0gbm9kZS5fX2JydXNoO1xuICByZXR1cm4gc3RhdGUgPyBzdGF0ZS5kaW0ub3V0cHV0KHN0YXRlLnNlbGVjdGlvbikgOiBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnJ1c2hYKCkge1xuICByZXR1cm4gYnJ1c2goWCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBicnVzaFkoKSB7XG4gIHJldHVybiBicnVzaChZKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiBicnVzaChYWSk7XG59XG5cbmZ1bmN0aW9uIGJydXNoKGRpbSkge1xuICB2YXIgZXh0ZW50ID0gZGVmYXVsdEV4dGVudCxcbiAgICAgIGZpbHRlciA9IGRlZmF1bHRGaWx0ZXIsXG4gICAgICB0b3VjaGFibGUgPSBkZWZhdWx0VG91Y2hhYmxlLFxuICAgICAga2V5cyA9IHRydWUsXG4gICAgICBsaXN0ZW5lcnMgPSBkaXNwYXRjaChcInN0YXJ0XCIsIFwiYnJ1c2hcIiwgXCJlbmRcIiksXG4gICAgICBoYW5kbGVTaXplID0gNixcbiAgICAgIHRvdWNoZW5kaW5nO1xuXG4gIGZ1bmN0aW9uIGJydXNoKGdyb3VwKSB7XG4gICAgdmFyIG92ZXJsYXkgPSBncm91cFxuICAgICAgICAucHJvcGVydHkoXCJfX2JydXNoXCIsIGluaXRpYWxpemUpXG4gICAgICAuc2VsZWN0QWxsKFwiLm92ZXJsYXlcIilcbiAgICAgIC5kYXRhKFt0eXBlKFwib3ZlcmxheVwiKV0pO1xuXG4gICAgb3ZlcmxheS5lbnRlcigpLmFwcGVuZChcInJlY3RcIilcbiAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcIm92ZXJsYXlcIilcbiAgICAgICAgLmF0dHIoXCJwb2ludGVyLWV2ZW50c1wiLCBcImFsbFwiKVxuICAgICAgICAuYXR0cihcImN1cnNvclwiLCBjdXJzb3JzLm92ZXJsYXkpXG4gICAgICAubWVyZ2Uob3ZlcmxheSlcbiAgICAgICAgLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIGV4dGVudCA9IGxvY2FsKHRoaXMpLmV4dGVudDtcbiAgICAgICAgICBzZWxlY3QodGhpcylcbiAgICAgICAgICAgICAgLmF0dHIoXCJ4XCIsIGV4dGVudFswXVswXSlcbiAgICAgICAgICAgICAgLmF0dHIoXCJ5XCIsIGV4dGVudFswXVsxXSlcbiAgICAgICAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCBleHRlbnRbMV1bMF0gLSBleHRlbnRbMF1bMF0pXG4gICAgICAgICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIGV4dGVudFsxXVsxXSAtIGV4dGVudFswXVsxXSk7XG4gICAgICAgIH0pO1xuXG4gICAgZ3JvdXAuc2VsZWN0QWxsKFwiLnNlbGVjdGlvblwiKVxuICAgICAgLmRhdGEoW3R5cGUoXCJzZWxlY3Rpb25cIildKVxuICAgICAgLmVudGVyKCkuYXBwZW5kKFwicmVjdFwiKVxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwic2VsZWN0aW9uXCIpXG4gICAgICAgIC5hdHRyKFwiY3Vyc29yXCIsIGN1cnNvcnMuc2VsZWN0aW9uKVxuICAgICAgICAuYXR0cihcImZpbGxcIiwgXCIjNzc3XCIpXG4gICAgICAgIC5hdHRyKFwiZmlsbC1vcGFjaXR5XCIsIDAuMylcbiAgICAgICAgLmF0dHIoXCJzdHJva2VcIiwgXCIjZmZmXCIpXG4gICAgICAgIC5hdHRyKFwic2hhcGUtcmVuZGVyaW5nXCIsIFwiY3Jpc3BFZGdlc1wiKTtcblxuICAgIHZhciBoYW5kbGUgPSBncm91cC5zZWxlY3RBbGwoXCIuaGFuZGxlXCIpXG4gICAgICAuZGF0YShkaW0uaGFuZGxlcywgZnVuY3Rpb24oZCkgeyByZXR1cm4gZC50eXBlOyB9KTtcblxuICAgIGhhbmRsZS5leGl0KCkucmVtb3ZlKCk7XG5cbiAgICBoYW5kbGUuZW50ZXIoKS5hcHBlbmQoXCJyZWN0XCIpXG4gICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgZnVuY3Rpb24oZCkgeyByZXR1cm4gXCJoYW5kbGUgaGFuZGxlLS1cIiArIGQudHlwZTsgfSlcbiAgICAgICAgLmF0dHIoXCJjdXJzb3JcIiwgZnVuY3Rpb24oZCkgeyByZXR1cm4gY3Vyc29yc1tkLnR5cGVdOyB9KTtcblxuICAgIGdyb3VwXG4gICAgICAgIC5lYWNoKHJlZHJhdylcbiAgICAgICAgLmF0dHIoXCJmaWxsXCIsIFwibm9uZVwiKVxuICAgICAgICAuYXR0cihcInBvaW50ZXItZXZlbnRzXCIsIFwiYWxsXCIpXG4gICAgICAgIC5vbihcIm1vdXNlZG93bi5icnVzaFwiLCBzdGFydGVkKVxuICAgICAgLmZpbHRlcih0b3VjaGFibGUpXG4gICAgICAgIC5vbihcInRvdWNoc3RhcnQuYnJ1c2hcIiwgc3RhcnRlZClcbiAgICAgICAgLm9uKFwidG91Y2htb3ZlLmJydXNoXCIsIHRvdWNobW92ZWQpXG4gICAgICAgIC5vbihcInRvdWNoZW5kLmJydXNoIHRvdWNoY2FuY2VsLmJydXNoXCIsIHRvdWNoZW5kZWQpXG4gICAgICAgIC5zdHlsZShcInRvdWNoLWFjdGlvblwiLCBcIm5vbmVcIilcbiAgICAgICAgLnN0eWxlKFwiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yXCIsIFwicmdiYSgwLDAsMCwwKVwiKTtcbiAgfVxuXG4gIGJydXNoLm1vdmUgPSBmdW5jdGlvbihncm91cCwgc2VsZWN0aW9uKSB7XG4gICAgaWYgKGdyb3VwLnNlbGVjdGlvbikge1xuICAgICAgZ3JvdXBcbiAgICAgICAgICAub24oXCJzdGFydC5icnVzaFwiLCBmdW5jdGlvbigpIHsgZW1pdHRlcih0aGlzLCBhcmd1bWVudHMpLmJlZm9yZXN0YXJ0KCkuc3RhcnQoKTsgfSlcbiAgICAgICAgICAub24oXCJpbnRlcnJ1cHQuYnJ1c2ggZW5kLmJydXNoXCIsIGZ1bmN0aW9uKCkgeyBlbWl0dGVyKHRoaXMsIGFyZ3VtZW50cykuZW5kKCk7IH0pXG4gICAgICAgICAgLnR3ZWVuKFwiYnJ1c2hcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXMsXG4gICAgICAgICAgICAgICAgc3RhdGUgPSB0aGF0Ll9fYnJ1c2gsXG4gICAgICAgICAgICAgICAgZW1pdCA9IGVtaXR0ZXIodGhhdCwgYXJndW1lbnRzKSxcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb24wID0gc3RhdGUuc2VsZWN0aW9uLFxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbjEgPSBkaW0uaW5wdXQodHlwZW9mIHNlbGVjdGlvbiA9PT0gXCJmdW5jdGlvblwiID8gc2VsZWN0aW9uLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgOiBzZWxlY3Rpb24sIHN0YXRlLmV4dGVudCksXG4gICAgICAgICAgICAgICAgaSA9IGludGVycG9sYXRlKHNlbGVjdGlvbjAsIHNlbGVjdGlvbjEpO1xuXG4gICAgICAgICAgICBmdW5jdGlvbiB0d2Vlbih0KSB7XG4gICAgICAgICAgICAgIHN0YXRlLnNlbGVjdGlvbiA9IHQgPT09IDEgJiYgc2VsZWN0aW9uMSA9PT0gbnVsbCA/IG51bGwgOiBpKHQpO1xuICAgICAgICAgICAgICByZWRyYXcuY2FsbCh0aGF0KTtcbiAgICAgICAgICAgICAgZW1pdC5icnVzaCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gc2VsZWN0aW9uMCAhPT0gbnVsbCAmJiBzZWxlY3Rpb24xICE9PSBudWxsID8gdHdlZW4gOiB0d2VlbigxKTtcbiAgICAgICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZ3JvdXBcbiAgICAgICAgICAuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcyxcbiAgICAgICAgICAgICAgICBhcmdzID0gYXJndW1lbnRzLFxuICAgICAgICAgICAgICAgIHN0YXRlID0gdGhhdC5fX2JydXNoLFxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbjEgPSBkaW0uaW5wdXQodHlwZW9mIHNlbGVjdGlvbiA9PT0gXCJmdW5jdGlvblwiID8gc2VsZWN0aW9uLmFwcGx5KHRoYXQsIGFyZ3MpIDogc2VsZWN0aW9uLCBzdGF0ZS5leHRlbnQpLFxuICAgICAgICAgICAgICAgIGVtaXQgPSBlbWl0dGVyKHRoYXQsIGFyZ3MpLmJlZm9yZXN0YXJ0KCk7XG5cbiAgICAgICAgICAgIGludGVycnVwdCh0aGF0KTtcbiAgICAgICAgICAgIHN0YXRlLnNlbGVjdGlvbiA9IHNlbGVjdGlvbjEgPT09IG51bGwgPyBudWxsIDogc2VsZWN0aW9uMTtcbiAgICAgICAgICAgIHJlZHJhdy5jYWxsKHRoYXQpO1xuICAgICAgICAgICAgZW1pdC5zdGFydCgpLmJydXNoKCkuZW5kKCk7XG4gICAgICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIGJydXNoLmNsZWFyID0gZnVuY3Rpb24oZ3JvdXApIHtcbiAgICBicnVzaC5tb3ZlKGdyb3VwLCBudWxsKTtcbiAgfTtcblxuICBmdW5jdGlvbiByZWRyYXcoKSB7XG4gICAgdmFyIGdyb3VwID0gc2VsZWN0KHRoaXMpLFxuICAgICAgICBzZWxlY3Rpb24gPSBsb2NhbCh0aGlzKS5zZWxlY3Rpb247XG5cbiAgICBpZiAoc2VsZWN0aW9uKSB7XG4gICAgICBncm91cC5zZWxlY3RBbGwoXCIuc2VsZWN0aW9uXCIpXG4gICAgICAgICAgLnN0eWxlKFwiZGlzcGxheVwiLCBudWxsKVxuICAgICAgICAgIC5hdHRyKFwieFwiLCBzZWxlY3Rpb25bMF1bMF0pXG4gICAgICAgICAgLmF0dHIoXCJ5XCIsIHNlbGVjdGlvblswXVsxXSlcbiAgICAgICAgICAuYXR0cihcIndpZHRoXCIsIHNlbGVjdGlvblsxXVswXSAtIHNlbGVjdGlvblswXVswXSlcbiAgICAgICAgICAuYXR0cihcImhlaWdodFwiLCBzZWxlY3Rpb25bMV1bMV0gLSBzZWxlY3Rpb25bMF1bMV0pO1xuXG4gICAgICBncm91cC5zZWxlY3RBbGwoXCIuaGFuZGxlXCIpXG4gICAgICAgICAgLnN0eWxlKFwiZGlzcGxheVwiLCBudWxsKVxuICAgICAgICAgIC5hdHRyKFwieFwiLCBmdW5jdGlvbihkKSB7IHJldHVybiBkLnR5cGVbZC50eXBlLmxlbmd0aCAtIDFdID09PSBcImVcIiA/IHNlbGVjdGlvblsxXVswXSAtIGhhbmRsZVNpemUgLyAyIDogc2VsZWN0aW9uWzBdWzBdIC0gaGFuZGxlU2l6ZSAvIDI7IH0pXG4gICAgICAgICAgLmF0dHIoXCJ5XCIsIGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGQudHlwZVswXSA9PT0gXCJzXCIgPyBzZWxlY3Rpb25bMV1bMV0gLSBoYW5kbGVTaXplIC8gMiA6IHNlbGVjdGlvblswXVsxXSAtIGhhbmRsZVNpemUgLyAyOyB9KVxuICAgICAgICAgIC5hdHRyKFwid2lkdGhcIiwgZnVuY3Rpb24oZCkgeyByZXR1cm4gZC50eXBlID09PSBcIm5cIiB8fCBkLnR5cGUgPT09IFwic1wiID8gc2VsZWN0aW9uWzFdWzBdIC0gc2VsZWN0aW9uWzBdWzBdICsgaGFuZGxlU2l6ZSA6IGhhbmRsZVNpemU7IH0pXG4gICAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgZnVuY3Rpb24oZCkgeyByZXR1cm4gZC50eXBlID09PSBcImVcIiB8fCBkLnR5cGUgPT09IFwid1wiID8gc2VsZWN0aW9uWzFdWzFdIC0gc2VsZWN0aW9uWzBdWzFdICsgaGFuZGxlU2l6ZSA6IGhhbmRsZVNpemU7IH0pO1xuICAgIH1cblxuICAgIGVsc2Uge1xuICAgICAgZ3JvdXAuc2VsZWN0QWxsKFwiLnNlbGVjdGlvbiwuaGFuZGxlXCIpXG4gICAgICAgICAgLnN0eWxlKFwiZGlzcGxheVwiLCBcIm5vbmVcIilcbiAgICAgICAgICAuYXR0cihcInhcIiwgbnVsbClcbiAgICAgICAgICAuYXR0cihcInlcIiwgbnVsbClcbiAgICAgICAgICAuYXR0cihcIndpZHRoXCIsIG51bGwpXG4gICAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgbnVsbCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZW1pdHRlcih0aGF0LCBhcmdzLCBjbGVhbikge1xuICAgIHZhciBlbWl0ID0gdGhhdC5fX2JydXNoLmVtaXR0ZXI7XG4gICAgcmV0dXJuIGVtaXQgJiYgKCFjbGVhbiB8fCAhZW1pdC5jbGVhbikgPyBlbWl0IDogbmV3IEVtaXR0ZXIodGhhdCwgYXJncywgY2xlYW4pO1xuICB9XG5cbiAgZnVuY3Rpb24gRW1pdHRlcih0aGF0LCBhcmdzLCBjbGVhbikge1xuICAgIHRoaXMudGhhdCA9IHRoYXQ7XG4gICAgdGhpcy5hcmdzID0gYXJncztcbiAgICB0aGlzLnN0YXRlID0gdGhhdC5fX2JydXNoO1xuICAgIHRoaXMuYWN0aXZlID0gMDtcbiAgICB0aGlzLmNsZWFuID0gY2xlYW47XG4gIH1cblxuICBFbWl0dGVyLnByb3RvdHlwZSA9IHtcbiAgICBiZWZvcmVzdGFydDogZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoKyt0aGlzLmFjdGl2ZSA9PT0gMSkgdGhpcy5zdGF0ZS5lbWl0dGVyID0gdGhpcywgdGhpcy5zdGFydGluZyA9IHRydWU7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuICAgIHN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICAgIGlmICh0aGlzLnN0YXJ0aW5nKSB0aGlzLnN0YXJ0aW5nID0gZmFsc2UsIHRoaXMuZW1pdChcInN0YXJ0XCIpO1xuICAgICAgZWxzZSB0aGlzLmVtaXQoXCJicnVzaFwiKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG4gICAgYnJ1c2g6IGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5lbWl0KFwiYnJ1c2hcIik7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuICAgIGVuZDogZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoLS10aGlzLmFjdGl2ZSA9PT0gMCkgZGVsZXRlIHRoaXMuc3RhdGUuZW1pdHRlciwgdGhpcy5lbWl0KFwiZW5kXCIpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICBlbWl0OiBmdW5jdGlvbih0eXBlKSB7XG4gICAgICBjdXN0b21FdmVudChuZXcgQnJ1c2hFdmVudChicnVzaCwgdHlwZSwgZGltLm91dHB1dCh0aGlzLnN0YXRlLnNlbGVjdGlvbikpLCBsaXN0ZW5lcnMuYXBwbHksIGxpc3RlbmVycywgW3R5cGUsIHRoaXMudGhhdCwgdGhpcy5hcmdzXSk7XG4gICAgfVxuICB9O1xuXG4gIGZ1bmN0aW9uIHN0YXJ0ZWQoKSB7XG4gICAgaWYgKHRvdWNoZW5kaW5nICYmICFldmVudC50b3VjaGVzKSByZXR1cm47XG4gICAgaWYgKCFmaWx0ZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSkgcmV0dXJuO1xuXG4gICAgdmFyIHRoYXQgPSB0aGlzLFxuICAgICAgICB0eXBlID0gZXZlbnQudGFyZ2V0Ll9fZGF0YV9fLnR5cGUsXG4gICAgICAgIG1vZGUgPSAoa2V5cyAmJiBldmVudC5tZXRhS2V5ID8gdHlwZSA9IFwib3ZlcmxheVwiIDogdHlwZSkgPT09IFwic2VsZWN0aW9uXCIgPyBNT0RFX0RSQUcgOiAoa2V5cyAmJiBldmVudC5hbHRLZXkgPyBNT0RFX0NFTlRFUiA6IE1PREVfSEFORExFKSxcbiAgICAgICAgc2lnblggPSBkaW0gPT09IFkgPyBudWxsIDogc2lnbnNYW3R5cGVdLFxuICAgICAgICBzaWduWSA9IGRpbSA9PT0gWCA/IG51bGwgOiBzaWduc1lbdHlwZV0sXG4gICAgICAgIHN0YXRlID0gbG9jYWwodGhhdCksXG4gICAgICAgIGV4dGVudCA9IHN0YXRlLmV4dGVudCxcbiAgICAgICAgc2VsZWN0aW9uID0gc3RhdGUuc2VsZWN0aW9uLFxuICAgICAgICBXID0gZXh0ZW50WzBdWzBdLCB3MCwgdzEsXG4gICAgICAgIE4gPSBleHRlbnRbMF1bMV0sIG4wLCBuMSxcbiAgICAgICAgRSA9IGV4dGVudFsxXVswXSwgZTAsIGUxLFxuICAgICAgICBTID0gZXh0ZW50WzFdWzFdLCBzMCwgczEsXG4gICAgICAgIGR4ID0gMCxcbiAgICAgICAgZHkgPSAwLFxuICAgICAgICBtb3ZpbmcsXG4gICAgICAgIHNoaWZ0aW5nID0gc2lnblggJiYgc2lnblkgJiYga2V5cyAmJiBldmVudC5zaGlmdEtleSxcbiAgICAgICAgbG9ja1gsXG4gICAgICAgIGxvY2tZLFxuICAgICAgICBwb2ludGVyID0gZXZlbnQudG91Y2hlcyA/IHRvdWNoZXIoZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0uaWRlbnRpZmllcikgOiBtb3VzZSxcbiAgICAgICAgcG9pbnQwID0gcG9pbnRlcih0aGF0KSxcbiAgICAgICAgcG9pbnQgPSBwb2ludDAsXG4gICAgICAgIGVtaXQgPSBlbWl0dGVyKHRoYXQsIGFyZ3VtZW50cywgdHJ1ZSkuYmVmb3Jlc3RhcnQoKTtcblxuICAgIGlmICh0eXBlID09PSBcIm92ZXJsYXlcIikge1xuICAgICAgaWYgKHNlbGVjdGlvbikgbW92aW5nID0gdHJ1ZTtcbiAgICAgIHN0YXRlLnNlbGVjdGlvbiA9IHNlbGVjdGlvbiA9IFtcbiAgICAgICAgW3cwID0gZGltID09PSBZID8gVyA6IHBvaW50MFswXSwgbjAgPSBkaW0gPT09IFggPyBOIDogcG9pbnQwWzFdXSxcbiAgICAgICAgW2UwID0gZGltID09PSBZID8gRSA6IHcwLCBzMCA9IGRpbSA9PT0gWCA/IFMgOiBuMF1cbiAgICAgIF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHcwID0gc2VsZWN0aW9uWzBdWzBdO1xuICAgICAgbjAgPSBzZWxlY3Rpb25bMF1bMV07XG4gICAgICBlMCA9IHNlbGVjdGlvblsxXVswXTtcbiAgICAgIHMwID0gc2VsZWN0aW9uWzFdWzFdO1xuICAgIH1cblxuICAgIHcxID0gdzA7XG4gICAgbjEgPSBuMDtcbiAgICBlMSA9IGUwO1xuICAgIHMxID0gczA7XG5cbiAgICB2YXIgZ3JvdXAgPSBzZWxlY3QodGhhdClcbiAgICAgICAgLmF0dHIoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG5cbiAgICB2YXIgb3ZlcmxheSA9IGdyb3VwLnNlbGVjdEFsbChcIi5vdmVybGF5XCIpXG4gICAgICAgIC5hdHRyKFwiY3Vyc29yXCIsIGN1cnNvcnNbdHlwZV0pO1xuXG4gICAgaWYgKGV2ZW50LnRvdWNoZXMpIHtcbiAgICAgIGVtaXQubW92ZWQgPSBtb3ZlZDtcbiAgICAgIGVtaXQuZW5kZWQgPSBlbmRlZDtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHZpZXcgPSBzZWxlY3QoZXZlbnQudmlldylcbiAgICAgICAgICAub24oXCJtb3VzZW1vdmUuYnJ1c2hcIiwgbW92ZWQsIHRydWUpXG4gICAgICAgICAgLm9uKFwibW91c2V1cC5icnVzaFwiLCBlbmRlZCwgdHJ1ZSk7XG4gICAgICBpZiAoa2V5cykgdmlld1xuICAgICAgICAgIC5vbihcImtleWRvd24uYnJ1c2hcIiwga2V5ZG93bmVkLCB0cnVlKVxuICAgICAgICAgIC5vbihcImtleXVwLmJydXNoXCIsIGtleXVwcGVkLCB0cnVlKVxuXG4gICAgICBkcmFnRGlzYWJsZShldmVudC52aWV3KTtcbiAgICB9XG5cbiAgICBub3Byb3BhZ2F0aW9uKCk7XG4gICAgaW50ZXJydXB0KHRoYXQpO1xuICAgIHJlZHJhdy5jYWxsKHRoYXQpO1xuICAgIGVtaXQuc3RhcnQoKTtcblxuICAgIGZ1bmN0aW9uIG1vdmVkKCkge1xuICAgICAgdmFyIHBvaW50MSA9IHBvaW50ZXIodGhhdCk7XG4gICAgICBpZiAoc2hpZnRpbmcgJiYgIWxvY2tYICYmICFsb2NrWSkge1xuICAgICAgICBpZiAoTWF0aC5hYnMocG9pbnQxWzBdIC0gcG9pbnRbMF0pID4gTWF0aC5hYnMocG9pbnQxWzFdIC0gcG9pbnRbMV0pKSBsb2NrWSA9IHRydWU7XG4gICAgICAgIGVsc2UgbG9ja1ggPSB0cnVlO1xuICAgICAgfVxuICAgICAgcG9pbnQgPSBwb2ludDE7XG4gICAgICBtb3ZpbmcgPSB0cnVlO1xuICAgICAgbm9ldmVudCgpO1xuICAgICAgbW92ZSgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vdmUoKSB7XG4gICAgICB2YXIgdDtcblxuICAgICAgZHggPSBwb2ludFswXSAtIHBvaW50MFswXTtcbiAgICAgIGR5ID0gcG9pbnRbMV0gLSBwb2ludDBbMV07XG5cbiAgICAgIHN3aXRjaCAobW9kZSkge1xuICAgICAgICBjYXNlIE1PREVfU1BBQ0U6XG4gICAgICAgIGNhc2UgTU9ERV9EUkFHOiB7XG4gICAgICAgICAgaWYgKHNpZ25YKSBkeCA9IE1hdGgubWF4KFcgLSB3MCwgTWF0aC5taW4oRSAtIGUwLCBkeCkpLCB3MSA9IHcwICsgZHgsIGUxID0gZTAgKyBkeDtcbiAgICAgICAgICBpZiAoc2lnblkpIGR5ID0gTWF0aC5tYXgoTiAtIG4wLCBNYXRoLm1pbihTIC0gczAsIGR5KSksIG4xID0gbjAgKyBkeSwgczEgPSBzMCArIGR5O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgTU9ERV9IQU5ETEU6IHtcbiAgICAgICAgICBpZiAoc2lnblggPCAwKSBkeCA9IE1hdGgubWF4KFcgLSB3MCwgTWF0aC5taW4oRSAtIHcwLCBkeCkpLCB3MSA9IHcwICsgZHgsIGUxID0gZTA7XG4gICAgICAgICAgZWxzZSBpZiAoc2lnblggPiAwKSBkeCA9IE1hdGgubWF4KFcgLSBlMCwgTWF0aC5taW4oRSAtIGUwLCBkeCkpLCB3MSA9IHcwLCBlMSA9IGUwICsgZHg7XG4gICAgICAgICAgaWYgKHNpZ25ZIDwgMCkgZHkgPSBNYXRoLm1heChOIC0gbjAsIE1hdGgubWluKFMgLSBuMCwgZHkpKSwgbjEgPSBuMCArIGR5LCBzMSA9IHMwO1xuICAgICAgICAgIGVsc2UgaWYgKHNpZ25ZID4gMCkgZHkgPSBNYXRoLm1heChOIC0gczAsIE1hdGgubWluKFMgLSBzMCwgZHkpKSwgbjEgPSBuMCwgczEgPSBzMCArIGR5O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgTU9ERV9DRU5URVI6IHtcbiAgICAgICAgICBpZiAoc2lnblgpIHcxID0gTWF0aC5tYXgoVywgTWF0aC5taW4oRSwgdzAgLSBkeCAqIHNpZ25YKSksIGUxID0gTWF0aC5tYXgoVywgTWF0aC5taW4oRSwgZTAgKyBkeCAqIHNpZ25YKSk7XG4gICAgICAgICAgaWYgKHNpZ25ZKSBuMSA9IE1hdGgubWF4KE4sIE1hdGgubWluKFMsIG4wIC0gZHkgKiBzaWduWSkpLCBzMSA9IE1hdGgubWF4KE4sIE1hdGgubWluKFMsIHMwICsgZHkgKiBzaWduWSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChlMSA8IHcxKSB7XG4gICAgICAgIHNpZ25YICo9IC0xO1xuICAgICAgICB0ID0gdzAsIHcwID0gZTAsIGUwID0gdDtcbiAgICAgICAgdCA9IHcxLCB3MSA9IGUxLCBlMSA9IHQ7XG4gICAgICAgIGlmICh0eXBlIGluIGZsaXBYKSBvdmVybGF5LmF0dHIoXCJjdXJzb3JcIiwgY3Vyc29yc1t0eXBlID0gZmxpcFhbdHlwZV1dKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHMxIDwgbjEpIHtcbiAgICAgICAgc2lnblkgKj0gLTE7XG4gICAgICAgIHQgPSBuMCwgbjAgPSBzMCwgczAgPSB0O1xuICAgICAgICB0ID0gbjEsIG4xID0gczEsIHMxID0gdDtcbiAgICAgICAgaWYgKHR5cGUgaW4gZmxpcFkpIG92ZXJsYXkuYXR0cihcImN1cnNvclwiLCBjdXJzb3JzW3R5cGUgPSBmbGlwWVt0eXBlXV0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdGUuc2VsZWN0aW9uKSBzZWxlY3Rpb24gPSBzdGF0ZS5zZWxlY3Rpb247IC8vIE1heSBiZSBzZXQgYnkgYnJ1c2gubW92ZSFcbiAgICAgIGlmIChsb2NrWCkgdzEgPSBzZWxlY3Rpb25bMF1bMF0sIGUxID0gc2VsZWN0aW9uWzFdWzBdO1xuICAgICAgaWYgKGxvY2tZKSBuMSA9IHNlbGVjdGlvblswXVsxXSwgczEgPSBzZWxlY3Rpb25bMV1bMV07XG5cbiAgICAgIGlmIChzZWxlY3Rpb25bMF1bMF0gIT09IHcxXG4gICAgICAgICAgfHwgc2VsZWN0aW9uWzBdWzFdICE9PSBuMVxuICAgICAgICAgIHx8IHNlbGVjdGlvblsxXVswXSAhPT0gZTFcbiAgICAgICAgICB8fCBzZWxlY3Rpb25bMV1bMV0gIT09IHMxKSB7XG4gICAgICAgIHN0YXRlLnNlbGVjdGlvbiA9IFtbdzEsIG4xXSwgW2UxLCBzMV1dO1xuICAgICAgICByZWRyYXcuY2FsbCh0aGF0KTtcbiAgICAgICAgZW1pdC5icnVzaCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVuZGVkKCkge1xuICAgICAgbm9wcm9wYWdhdGlvbigpO1xuICAgICAgaWYgKGV2ZW50LnRvdWNoZXMpIHtcbiAgICAgICAgaWYgKGV2ZW50LnRvdWNoZXMubGVuZ3RoKSByZXR1cm47XG4gICAgICAgIGlmICh0b3VjaGVuZGluZykgY2xlYXJUaW1lb3V0KHRvdWNoZW5kaW5nKTtcbiAgICAgICAgdG91Y2hlbmRpbmcgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyB0b3VjaGVuZGluZyA9IG51bGw7IH0sIDUwMCk7IC8vIEdob3N0IGNsaWNrcyBhcmUgZGVsYXllZCFcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRyYWdFbmFibGUoZXZlbnQudmlldywgbW92aW5nKTtcbiAgICAgICAgdmlldy5vbihcImtleWRvd24uYnJ1c2gga2V5dXAuYnJ1c2ggbW91c2Vtb3ZlLmJydXNoIG1vdXNldXAuYnJ1c2hcIiwgbnVsbCk7XG4gICAgICB9XG4gICAgICBncm91cC5hdHRyKFwicG9pbnRlci1ldmVudHNcIiwgXCJhbGxcIik7XG4gICAgICBvdmVybGF5LmF0dHIoXCJjdXJzb3JcIiwgY3Vyc29ycy5vdmVybGF5KTtcbiAgICAgIGlmIChzdGF0ZS5zZWxlY3Rpb24pIHNlbGVjdGlvbiA9IHN0YXRlLnNlbGVjdGlvbjsgLy8gTWF5IGJlIHNldCBieSBicnVzaC5tb3ZlIChvbiBzdGFydCkhXG4gICAgICBpZiAoZW1wdHkoc2VsZWN0aW9uKSkgc3RhdGUuc2VsZWN0aW9uID0gbnVsbCwgcmVkcmF3LmNhbGwodGhhdCk7XG4gICAgICBlbWl0LmVuZCgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGtleWRvd25lZCgpIHtcbiAgICAgIHN3aXRjaCAoZXZlbnQua2V5Q29kZSkge1xuICAgICAgICBjYXNlIDE2OiB7IC8vIFNISUZUXG4gICAgICAgICAgc2hpZnRpbmcgPSBzaWduWCAmJiBzaWduWTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIDE4OiB7IC8vIEFMVFxuICAgICAgICAgIGlmIChtb2RlID09PSBNT0RFX0hBTkRMRSkge1xuICAgICAgICAgICAgaWYgKHNpZ25YKSBlMCA9IGUxIC0gZHggKiBzaWduWCwgdzAgPSB3MSArIGR4ICogc2lnblg7XG4gICAgICAgICAgICBpZiAoc2lnblkpIHMwID0gczEgLSBkeSAqIHNpZ25ZLCBuMCA9IG4xICsgZHkgKiBzaWduWTtcbiAgICAgICAgICAgIG1vZGUgPSBNT0RFX0NFTlRFUjtcbiAgICAgICAgICAgIG1vdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAzMjogeyAvLyBTUEFDRTsgdGFrZXMgcHJpb3JpdHkgb3ZlciBBTFRcbiAgICAgICAgICBpZiAobW9kZSA9PT0gTU9ERV9IQU5ETEUgfHwgbW9kZSA9PT0gTU9ERV9DRU5URVIpIHtcbiAgICAgICAgICAgIGlmIChzaWduWCA8IDApIGUwID0gZTEgLSBkeDsgZWxzZSBpZiAoc2lnblggPiAwKSB3MCA9IHcxIC0gZHg7XG4gICAgICAgICAgICBpZiAoc2lnblkgPCAwKSBzMCA9IHMxIC0gZHk7IGVsc2UgaWYgKHNpZ25ZID4gMCkgbjAgPSBuMSAtIGR5O1xuICAgICAgICAgICAgbW9kZSA9IE1PREVfU1BBQ0U7XG4gICAgICAgICAgICBvdmVybGF5LmF0dHIoXCJjdXJzb3JcIiwgY3Vyc29ycy5zZWxlY3Rpb24pO1xuICAgICAgICAgICAgbW92ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiByZXR1cm47XG4gICAgICB9XG4gICAgICBub2V2ZW50KCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24ga2V5dXBwZWQoKSB7XG4gICAgICBzd2l0Y2ggKGV2ZW50LmtleUNvZGUpIHtcbiAgICAgICAgY2FzZSAxNjogeyAvLyBTSElGVFxuICAgICAgICAgIGlmIChzaGlmdGluZykge1xuICAgICAgICAgICAgbG9ja1ggPSBsb2NrWSA9IHNoaWZ0aW5nID0gZmFsc2U7XG4gICAgICAgICAgICBtb3ZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgMTg6IHsgLy8gQUxUXG4gICAgICAgICAgaWYgKG1vZGUgPT09IE1PREVfQ0VOVEVSKSB7XG4gICAgICAgICAgICBpZiAoc2lnblggPCAwKSBlMCA9IGUxOyBlbHNlIGlmIChzaWduWCA+IDApIHcwID0gdzE7XG4gICAgICAgICAgICBpZiAoc2lnblkgPCAwKSBzMCA9IHMxOyBlbHNlIGlmIChzaWduWSA+IDApIG4wID0gbjE7XG4gICAgICAgICAgICBtb2RlID0gTU9ERV9IQU5ETEU7XG4gICAgICAgICAgICBtb3ZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgMzI6IHsgLy8gU1BBQ0VcbiAgICAgICAgICBpZiAobW9kZSA9PT0gTU9ERV9TUEFDRSkge1xuICAgICAgICAgICAgaWYgKGV2ZW50LmFsdEtleSkge1xuICAgICAgICAgICAgICBpZiAoc2lnblgpIGUwID0gZTEgLSBkeCAqIHNpZ25YLCB3MCA9IHcxICsgZHggKiBzaWduWDtcbiAgICAgICAgICAgICAgaWYgKHNpZ25ZKSBzMCA9IHMxIC0gZHkgKiBzaWduWSwgbjAgPSBuMSArIGR5ICogc2lnblk7XG4gICAgICAgICAgICAgIG1vZGUgPSBNT0RFX0NFTlRFUjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlmIChzaWduWCA8IDApIGUwID0gZTE7IGVsc2UgaWYgKHNpZ25YID4gMCkgdzAgPSB3MTtcbiAgICAgICAgICAgICAgaWYgKHNpZ25ZIDwgMCkgczAgPSBzMTsgZWxzZSBpZiAoc2lnblkgPiAwKSBuMCA9IG4xO1xuICAgICAgICAgICAgICBtb2RlID0gTU9ERV9IQU5ETEU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvdmVybGF5LmF0dHIoXCJjdXJzb3JcIiwgY3Vyc29yc1t0eXBlXSk7XG4gICAgICAgICAgICBtb3ZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6IHJldHVybjtcbiAgICAgIH1cbiAgICAgIG5vZXZlbnQoKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB0b3VjaG1vdmVkKCkge1xuICAgIGVtaXR0ZXIodGhpcywgYXJndW1lbnRzKS5tb3ZlZCgpO1xuICB9XG5cbiAgZnVuY3Rpb24gdG91Y2hlbmRlZCgpIHtcbiAgICBlbWl0dGVyKHRoaXMsIGFyZ3VtZW50cykuZW5kZWQoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXRpYWxpemUoKSB7XG4gICAgdmFyIHN0YXRlID0gdGhpcy5fX2JydXNoIHx8IHtzZWxlY3Rpb246IG51bGx9O1xuICAgIHN0YXRlLmV4dGVudCA9IG51bWJlcjIoZXh0ZW50LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpO1xuICAgIHN0YXRlLmRpbSA9IGRpbTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBicnVzaC5leHRlbnQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZXh0ZW50ID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudChudW1iZXIyKF8pKSwgYnJ1c2gpIDogZXh0ZW50O1xuICB9O1xuXG4gIGJydXNoLmZpbHRlciA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChmaWx0ZXIgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCEhXyksIGJydXNoKSA6IGZpbHRlcjtcbiAgfTtcblxuICBicnVzaC50b3VjaGFibGUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodG91Y2hhYmxlID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCghIV8pLCBicnVzaCkgOiB0b3VjaGFibGU7XG4gIH07XG5cbiAgYnJ1c2guaGFuZGxlU2l6ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChoYW5kbGVTaXplID0gK18sIGJydXNoKSA6IGhhbmRsZVNpemU7XG4gIH07XG5cbiAgYnJ1c2gua2V5TW9kaWZpZXJzID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGtleXMgPSAhIV8sIGJydXNoKSA6IGtleXM7XG4gIH07XG5cbiAgYnJ1c2gub24gPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgdmFsdWUgPSBsaXN0ZW5lcnMub24uYXBwbHkobGlzdGVuZXJzLCBhcmd1bWVudHMpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbGlzdGVuZXJzID8gYnJ1c2ggOiB2YWx1ZTtcbiAgfTtcblxuICByZXR1cm4gYnJ1c2g7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4geDtcbiAgfTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHRhcmdldCwgdHlwZSwgc2VsZWN0aW9uKSB7XG4gIHRoaXMudGFyZ2V0ID0gdGFyZ2V0O1xuICB0aGlzLnR5cGUgPSB0eXBlO1xuICB0aGlzLnNlbGVjdGlvbiA9IHNlbGVjdGlvbjtcbn1cbiIsImV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgYnJ1c2gsXG4gIGJydXNoWCxcbiAgYnJ1c2hZLFxuICBicnVzaFNlbGVjdGlvblxufSBmcm9tIFwiLi9icnVzaC5qc1wiO1xuIiwiaW1wb3J0IHtldmVudH0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuXG5leHBvcnQgZnVuY3Rpb24gbm9wcm9wYWdhdGlvbigpIHtcbiAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbn1cbiIsImV4cG9ydCB2YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG4iLCJpbXBvcnQge3JhbmdlfSBmcm9tIFwiZDMtYXJyYXlcIjtcbmltcG9ydCB7bWF4LCB0YXV9IGZyb20gXCIuL21hdGhcIjtcblxuZnVuY3Rpb24gY29tcGFyZVZhbHVlKGNvbXBhcmUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGEsIGIpIHtcbiAgICByZXR1cm4gY29tcGFyZShcbiAgICAgIGEuc291cmNlLnZhbHVlICsgYS50YXJnZXQudmFsdWUsXG4gICAgICBiLnNvdXJjZS52YWx1ZSArIGIudGFyZ2V0LnZhbHVlXG4gICAgKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBwYWRBbmdsZSA9IDAsXG4gICAgICBzb3J0R3JvdXBzID0gbnVsbCxcbiAgICAgIHNvcnRTdWJncm91cHMgPSBudWxsLFxuICAgICAgc29ydENob3JkcyA9IG51bGw7XG5cbiAgZnVuY3Rpb24gY2hvcmQobWF0cml4KSB7XG4gICAgdmFyIG4gPSBtYXRyaXgubGVuZ3RoLFxuICAgICAgICBncm91cFN1bXMgPSBbXSxcbiAgICAgICAgZ3JvdXBJbmRleCA9IHJhbmdlKG4pLFxuICAgICAgICBzdWJncm91cEluZGV4ID0gW10sXG4gICAgICAgIGNob3JkcyA9IFtdLFxuICAgICAgICBncm91cHMgPSBjaG9yZHMuZ3JvdXBzID0gbmV3IEFycmF5KG4pLFxuICAgICAgICBzdWJncm91cHMgPSBuZXcgQXJyYXkobiAqIG4pLFxuICAgICAgICBrLFxuICAgICAgICB4LFxuICAgICAgICB4MCxcbiAgICAgICAgZHgsXG4gICAgICAgIGksXG4gICAgICAgIGo7XG5cbiAgICAvLyBDb21wdXRlIHRoZSBzdW0uXG4gICAgayA9IDAsIGkgPSAtMTsgd2hpbGUgKCsraSA8IG4pIHtcbiAgICAgIHggPSAwLCBqID0gLTE7IHdoaWxlICgrK2ogPCBuKSB7XG4gICAgICAgIHggKz0gbWF0cml4W2ldW2pdO1xuICAgICAgfVxuICAgICAgZ3JvdXBTdW1zLnB1c2goeCk7XG4gICAgICBzdWJncm91cEluZGV4LnB1c2gocmFuZ2UobikpO1xuICAgICAgayArPSB4O1xuICAgIH1cblxuICAgIC8vIFNvcnQgZ3JvdXBz4oCmXG4gICAgaWYgKHNvcnRHcm91cHMpIGdyb3VwSW5kZXguc29ydChmdW5jdGlvbihhLCBiKSB7XG4gICAgICByZXR1cm4gc29ydEdyb3Vwcyhncm91cFN1bXNbYV0sIGdyb3VwU3Vtc1tiXSk7XG4gICAgfSk7XG5cbiAgICAvLyBTb3J0IHN1Ymdyb3Vwc+KAplxuICAgIGlmIChzb3J0U3ViZ3JvdXBzKSBzdWJncm91cEluZGV4LmZvckVhY2goZnVuY3Rpb24oZCwgaSkge1xuICAgICAgZC5zb3J0KGZ1bmN0aW9uKGEsIGIpIHtcbiAgICAgICAgcmV0dXJuIHNvcnRTdWJncm91cHMobWF0cml4W2ldW2FdLCBtYXRyaXhbaV1bYl0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAvLyBDb252ZXJ0IHRoZSBzdW0gdG8gc2NhbGluZyBmYWN0b3IgZm9yIFswLCAycGldLlxuICAgIC8vIFRPRE8gQWxsb3cgc3RhcnQgYW5kIGVuZCBhbmdsZSB0byBiZSBzcGVjaWZpZWQ/XG4gICAgLy8gVE9ETyBBbGxvdyBwYWRkaW5nIHRvIGJlIHNwZWNpZmllZCBhcyBwZXJjZW50YWdlP1xuICAgIGsgPSBtYXgoMCwgdGF1IC0gcGFkQW5nbGUgKiBuKSAvIGs7XG4gICAgZHggPSBrID8gcGFkQW5nbGUgOiB0YXUgLyBuO1xuXG4gICAgLy8gQ29tcHV0ZSB0aGUgc3RhcnQgYW5kIGVuZCBhbmdsZSBmb3IgZWFjaCBncm91cCBhbmQgc3ViZ3JvdXAuXG4gICAgLy8gTm90ZTogT3BlcmEgaGFzIGEgYnVnIHJlb3JkZXJpbmcgb2JqZWN0IGxpdGVyYWwgcHJvcGVydGllcyFcbiAgICB4ID0gMCwgaSA9IC0xOyB3aGlsZSAoKytpIDwgbikge1xuICAgICAgeDAgPSB4LCBqID0gLTE7IHdoaWxlICgrK2ogPCBuKSB7XG4gICAgICAgIHZhciBkaSA9IGdyb3VwSW5kZXhbaV0sXG4gICAgICAgICAgICBkaiA9IHN1Ymdyb3VwSW5kZXhbZGldW2pdLFxuICAgICAgICAgICAgdiA9IG1hdHJpeFtkaV1bZGpdLFxuICAgICAgICAgICAgYTAgPSB4LFxuICAgICAgICAgICAgYTEgPSB4ICs9IHYgKiBrO1xuICAgICAgICBzdWJncm91cHNbZGogKiBuICsgZGldID0ge1xuICAgICAgICAgIGluZGV4OiBkaSxcbiAgICAgICAgICBzdWJpbmRleDogZGosXG4gICAgICAgICAgc3RhcnRBbmdsZTogYTAsXG4gICAgICAgICAgZW5kQW5nbGU6IGExLFxuICAgICAgICAgIHZhbHVlOiB2XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBncm91cHNbZGldID0ge1xuICAgICAgICBpbmRleDogZGksXG4gICAgICAgIHN0YXJ0QW5nbGU6IHgwLFxuICAgICAgICBlbmRBbmdsZTogeCxcbiAgICAgICAgdmFsdWU6IGdyb3VwU3Vtc1tkaV1cbiAgICAgIH07XG4gICAgICB4ICs9IGR4O1xuICAgIH1cblxuICAgIC8vIEdlbmVyYXRlIGNob3JkcyBmb3IgZWFjaCAobm9uLWVtcHR5KSBzdWJncm91cC1zdWJncm91cCBsaW5rLlxuICAgIGkgPSAtMTsgd2hpbGUgKCsraSA8IG4pIHtcbiAgICAgIGogPSBpIC0gMTsgd2hpbGUgKCsraiA8IG4pIHtcbiAgICAgICAgdmFyIHNvdXJjZSA9IHN1Ymdyb3Vwc1tqICogbiArIGldLFxuICAgICAgICAgICAgdGFyZ2V0ID0gc3ViZ3JvdXBzW2kgKiBuICsgal07XG4gICAgICAgIGlmIChzb3VyY2UudmFsdWUgfHwgdGFyZ2V0LnZhbHVlKSB7XG4gICAgICAgICAgY2hvcmRzLnB1c2goc291cmNlLnZhbHVlIDwgdGFyZ2V0LnZhbHVlXG4gICAgICAgICAgICAgID8ge3NvdXJjZTogdGFyZ2V0LCB0YXJnZXQ6IHNvdXJjZX1cbiAgICAgICAgICAgICAgOiB7c291cmNlOiBzb3VyY2UsIHRhcmdldDogdGFyZ2V0fSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc29ydENob3JkcyA/IGNob3Jkcy5zb3J0KHNvcnRDaG9yZHMpIDogY2hvcmRzO1xuICB9XG5cbiAgY2hvcmQucGFkQW5nbGUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocGFkQW5nbGUgPSBtYXgoMCwgXyksIGNob3JkKSA6IHBhZEFuZ2xlO1xuICB9O1xuXG4gIGNob3JkLnNvcnRHcm91cHMgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoc29ydEdyb3VwcyA9IF8sIGNob3JkKSA6IHNvcnRHcm91cHM7XG4gIH07XG5cbiAgY2hvcmQuc29ydFN1Ymdyb3VwcyA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChzb3J0U3ViZ3JvdXBzID0gXywgY2hvcmQpIDogc29ydFN1Ymdyb3VwcztcbiAgfTtcblxuICBjaG9yZC5zb3J0Q2hvcmRzID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKF8gPT0gbnVsbCA/IHNvcnRDaG9yZHMgPSBudWxsIDogKHNvcnRDaG9yZHMgPSBjb21wYXJlVmFsdWUoXykpLl8gPSBfLCBjaG9yZCkgOiBzb3J0Q2hvcmRzICYmIHNvcnRDaG9yZHMuXztcbiAgfTtcblxuICByZXR1cm4gY2hvcmQ7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4geDtcbiAgfTtcbn1cbiIsImV4cG9ydCB7ZGVmYXVsdCBhcyBjaG9yZH0gZnJvbSBcIi4vY2hvcmRcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyByaWJib259IGZyb20gXCIuL3JpYmJvblwiO1xuIiwiZXhwb3J0IHZhciBjb3MgPSBNYXRoLmNvcztcbmV4cG9ydCB2YXIgc2luID0gTWF0aC5zaW47XG5leHBvcnQgdmFyIHBpID0gTWF0aC5QSTtcbmV4cG9ydCB2YXIgaGFsZlBpID0gcGkgLyAyO1xuZXhwb3J0IHZhciB0YXUgPSBwaSAqIDI7XG5leHBvcnQgdmFyIG1heCA9IE1hdGgubWF4O1xuIiwiaW1wb3J0IHtzbGljZX0gZnJvbSBcIi4vYXJyYXlcIjtcbmltcG9ydCBjb25zdGFudCBmcm9tIFwiLi9jb25zdGFudFwiO1xuaW1wb3J0IHtjb3MsIGhhbGZQaSwgc2lufSBmcm9tIFwiLi9tYXRoXCI7XG5pbXBvcnQge3BhdGh9IGZyb20gXCJkMy1wYXRoXCI7XG5cbmZ1bmN0aW9uIGRlZmF1bHRTb3VyY2UoZCkge1xuICByZXR1cm4gZC5zb3VyY2U7XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRUYXJnZXQoZCkge1xuICByZXR1cm4gZC50YXJnZXQ7XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRSYWRpdXMoZCkge1xuICByZXR1cm4gZC5yYWRpdXM7XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRTdGFydEFuZ2xlKGQpIHtcbiAgcmV0dXJuIGQuc3RhcnRBbmdsZTtcbn1cblxuZnVuY3Rpb24gZGVmYXVsdEVuZEFuZ2xlKGQpIHtcbiAgcmV0dXJuIGQuZW5kQW5nbGU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgc291cmNlID0gZGVmYXVsdFNvdXJjZSxcbiAgICAgIHRhcmdldCA9IGRlZmF1bHRUYXJnZXQsXG4gICAgICByYWRpdXMgPSBkZWZhdWx0UmFkaXVzLFxuICAgICAgc3RhcnRBbmdsZSA9IGRlZmF1bHRTdGFydEFuZ2xlLFxuICAgICAgZW5kQW5nbGUgPSBkZWZhdWx0RW5kQW5nbGUsXG4gICAgICBjb250ZXh0ID0gbnVsbDtcblxuICBmdW5jdGlvbiByaWJib24oKSB7XG4gICAgdmFyIGJ1ZmZlcixcbiAgICAgICAgYXJndiA9IHNsaWNlLmNhbGwoYXJndW1lbnRzKSxcbiAgICAgICAgcyA9IHNvdXJjZS5hcHBseSh0aGlzLCBhcmd2KSxcbiAgICAgICAgdCA9IHRhcmdldC5hcHBseSh0aGlzLCBhcmd2KSxcbiAgICAgICAgc3IgPSArcmFkaXVzLmFwcGx5KHRoaXMsIChhcmd2WzBdID0gcywgYXJndikpLFxuICAgICAgICBzYTAgPSBzdGFydEFuZ2xlLmFwcGx5KHRoaXMsIGFyZ3YpIC0gaGFsZlBpLFxuICAgICAgICBzYTEgPSBlbmRBbmdsZS5hcHBseSh0aGlzLCBhcmd2KSAtIGhhbGZQaSxcbiAgICAgICAgc3gwID0gc3IgKiBjb3Moc2EwKSxcbiAgICAgICAgc3kwID0gc3IgKiBzaW4oc2EwKSxcbiAgICAgICAgdHIgPSArcmFkaXVzLmFwcGx5KHRoaXMsIChhcmd2WzBdID0gdCwgYXJndikpLFxuICAgICAgICB0YTAgPSBzdGFydEFuZ2xlLmFwcGx5KHRoaXMsIGFyZ3YpIC0gaGFsZlBpLFxuICAgICAgICB0YTEgPSBlbmRBbmdsZS5hcHBseSh0aGlzLCBhcmd2KSAtIGhhbGZQaTtcblxuICAgIGlmICghY29udGV4dCkgY29udGV4dCA9IGJ1ZmZlciA9IHBhdGgoKTtcblxuICAgIGNvbnRleHQubW92ZVRvKHN4MCwgc3kwKTtcbiAgICBjb250ZXh0LmFyYygwLCAwLCBzciwgc2EwLCBzYTEpO1xuICAgIGlmIChzYTAgIT09IHRhMCB8fCBzYTEgIT09IHRhMSkgeyAvLyBUT0RPIHNyICE9PSB0cj9cbiAgICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbygwLCAwLCB0ciAqIGNvcyh0YTApLCB0ciAqIHNpbih0YTApKTtcbiAgICAgIGNvbnRleHQuYXJjKDAsIDAsIHRyLCB0YTAsIHRhMSk7XG4gICAgfVxuICAgIGNvbnRleHQucXVhZHJhdGljQ3VydmVUbygwLCAwLCBzeDAsIHN5MCk7XG4gICAgY29udGV4dC5jbG9zZVBhdGgoKTtcblxuICAgIGlmIChidWZmZXIpIHJldHVybiBjb250ZXh0ID0gbnVsbCwgYnVmZmVyICsgXCJcIiB8fCBudWxsO1xuICB9XG5cbiAgcmliYm9uLnJhZGl1cyA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChyYWRpdXMgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgcmliYm9uKSA6IHJhZGl1cztcbiAgfTtcblxuICByaWJib24uc3RhcnRBbmdsZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChzdGFydEFuZ2xlID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIHJpYmJvbikgOiBzdGFydEFuZ2xlO1xuICB9O1xuXG4gIHJpYmJvbi5lbmRBbmdsZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChlbmRBbmdsZSA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCByaWJib24pIDogZW5kQW5nbGU7XG4gIH07XG5cbiAgcmliYm9uLnNvdXJjZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChzb3VyY2UgPSBfLCByaWJib24pIDogc291cmNlO1xuICB9O1xuXG4gIHJpYmJvbi50YXJnZXQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodGFyZ2V0ID0gXywgcmliYm9uKSA6IHRhcmdldDtcbiAgfTtcblxuICByaWJib24uY29udGV4dCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICgoY29udGV4dCA9IF8gPT0gbnVsbCA/IG51bGwgOiBfKSwgcmliYm9uKSA6IGNvbnRleHQ7XG4gIH07XG5cbiAgcmV0dXJuIHJpYmJvbjtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG1hcCkge1xuICB2YXIgZW50cmllcyA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gbWFwKSBlbnRyaWVzLnB1c2goe2tleToga2V5LCB2YWx1ZTogbWFwW2tleV19KTtcbiAgcmV0dXJuIGVudHJpZXM7XG59XG4iLCJleHBvcnQge2RlZmF1bHQgYXMgbmVzdH0gZnJvbSBcIi4vbmVzdFwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHNldH0gZnJvbSBcIi4vc2V0XCI7XG5leHBvcnQge2RlZmF1bHQgYXMgbWFwfSBmcm9tIFwiLi9tYXBcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBrZXlzfSBmcm9tIFwiLi9rZXlzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgdmFsdWVzfSBmcm9tIFwiLi92YWx1ZXNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBlbnRyaWVzfSBmcm9tIFwiLi9lbnRyaWVzXCI7XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihtYXApIHtcbiAgdmFyIGtleXMgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIG1hcCkga2V5cy5wdXNoKGtleSk7XG4gIHJldHVybiBrZXlzO1xufVxuIiwiZXhwb3J0IHZhciBwcmVmaXggPSBcIiRcIjtcblxuZnVuY3Rpb24gTWFwKCkge31cblxuTWFwLnByb3RvdHlwZSA9IG1hcC5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBNYXAsXG4gIGhhczogZnVuY3Rpb24oa2V5KSB7XG4gICAgcmV0dXJuIChwcmVmaXggKyBrZXkpIGluIHRoaXM7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24oa2V5KSB7XG4gICAgcmV0dXJuIHRoaXNbcHJlZml4ICsga2V5XTtcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbihrZXksIHZhbHVlKSB7XG4gICAgdGhpc1twcmVmaXggKyBrZXldID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG4gIHJlbW92ZTogZnVuY3Rpb24oa2V5KSB7XG4gICAgdmFyIHByb3BlcnR5ID0gcHJlZml4ICsga2V5O1xuICAgIHJldHVybiBwcm9wZXJ0eSBpbiB0aGlzICYmIGRlbGV0ZSB0aGlzW3Byb3BlcnR5XTtcbiAgfSxcbiAgY2xlYXI6IGZ1bmN0aW9uKCkge1xuICAgIGZvciAodmFyIHByb3BlcnR5IGluIHRoaXMpIGlmIChwcm9wZXJ0eVswXSA9PT0gcHJlZml4KSBkZWxldGUgdGhpc1twcm9wZXJ0eV07XG4gIH0sXG4gIGtleXM6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBrZXlzID0gW107XG4gICAgZm9yICh2YXIgcHJvcGVydHkgaW4gdGhpcykgaWYgKHByb3BlcnR5WzBdID09PSBwcmVmaXgpIGtleXMucHVzaChwcm9wZXJ0eS5zbGljZSgxKSk7XG4gICAgcmV0dXJuIGtleXM7XG4gIH0sXG4gIHZhbHVlczogZnVuY3Rpb24oKSB7XG4gICAgdmFyIHZhbHVlcyA9IFtdO1xuICAgIGZvciAodmFyIHByb3BlcnR5IGluIHRoaXMpIGlmIChwcm9wZXJ0eVswXSA9PT0gcHJlZml4KSB2YWx1ZXMucHVzaCh0aGlzW3Byb3BlcnR5XSk7XG4gICAgcmV0dXJuIHZhbHVlcztcbiAgfSxcbiAgZW50cmllczogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGVudHJpZXMgPSBbXTtcbiAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiB0aGlzKSBpZiAocHJvcGVydHlbMF0gPT09IHByZWZpeCkgZW50cmllcy5wdXNoKHtrZXk6IHByb3BlcnR5LnNsaWNlKDEpLCB2YWx1ZTogdGhpc1twcm9wZXJ0eV19KTtcbiAgICByZXR1cm4gZW50cmllcztcbiAgfSxcbiAgc2l6ZTogZnVuY3Rpb24oKSB7XG4gICAgdmFyIHNpemUgPSAwO1xuICAgIGZvciAodmFyIHByb3BlcnR5IGluIHRoaXMpIGlmIChwcm9wZXJ0eVswXSA9PT0gcHJlZml4KSArK3NpemU7XG4gICAgcmV0dXJuIHNpemU7XG4gIH0sXG4gIGVtcHR5OiBmdW5jdGlvbigpIHtcbiAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiB0aGlzKSBpZiAocHJvcGVydHlbMF0gPT09IHByZWZpeCkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0cnVlO1xuICB9LFxuICBlYWNoOiBmdW5jdGlvbihmKSB7XG4gICAgZm9yICh2YXIgcHJvcGVydHkgaW4gdGhpcykgaWYgKHByb3BlcnR5WzBdID09PSBwcmVmaXgpIGYodGhpc1twcm9wZXJ0eV0sIHByb3BlcnR5LnNsaWNlKDEpLCB0aGlzKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gbWFwKG9iamVjdCwgZikge1xuICB2YXIgbWFwID0gbmV3IE1hcDtcblxuICAvLyBDb3B5IGNvbnN0cnVjdG9yLlxuICBpZiAob2JqZWN0IGluc3RhbmNlb2YgTWFwKSBvYmplY3QuZWFjaChmdW5jdGlvbih2YWx1ZSwga2V5KSB7IG1hcC5zZXQoa2V5LCB2YWx1ZSk7IH0pO1xuXG4gIC8vIEluZGV4IGFycmF5IGJ5IG51bWVyaWMgaW5kZXggb3Igc3BlY2lmaWVkIGtleSBmdW5jdGlvbi5cbiAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShvYmplY3QpKSB7XG4gICAgdmFyIGkgPSAtMSxcbiAgICAgICAgbiA9IG9iamVjdC5sZW5ndGgsXG4gICAgICAgIG87XG5cbiAgICBpZiAoZiA9PSBudWxsKSB3aGlsZSAoKytpIDwgbikgbWFwLnNldChpLCBvYmplY3RbaV0pO1xuICAgIGVsc2Ugd2hpbGUgKCsraSA8IG4pIG1hcC5zZXQoZihvID0gb2JqZWN0W2ldLCBpLCBvYmplY3QpLCBvKTtcbiAgfVxuXG4gIC8vIENvbnZlcnQgb2JqZWN0IHRvIG1hcC5cbiAgZWxzZSBpZiAob2JqZWN0KSBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSBtYXAuc2V0KGtleSwgb2JqZWN0W2tleV0pO1xuXG4gIHJldHVybiBtYXA7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG1hcDtcbiIsImltcG9ydCBtYXAgZnJvbSBcIi4vbWFwXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIga2V5cyA9IFtdLFxuICAgICAgc29ydEtleXMgPSBbXSxcbiAgICAgIHNvcnRWYWx1ZXMsXG4gICAgICByb2xsdXAsXG4gICAgICBuZXN0O1xuXG4gIGZ1bmN0aW9uIGFwcGx5KGFycmF5LCBkZXB0aCwgY3JlYXRlUmVzdWx0LCBzZXRSZXN1bHQpIHtcbiAgICBpZiAoZGVwdGggPj0ga2V5cy5sZW5ndGgpIHtcbiAgICAgIGlmIChzb3J0VmFsdWVzICE9IG51bGwpIGFycmF5LnNvcnQoc29ydFZhbHVlcyk7XG4gICAgICByZXR1cm4gcm9sbHVwICE9IG51bGwgPyByb2xsdXAoYXJyYXkpIDogYXJyYXk7XG4gICAgfVxuXG4gICAgdmFyIGkgPSAtMSxcbiAgICAgICAgbiA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAga2V5ID0ga2V5c1tkZXB0aCsrXSxcbiAgICAgICAga2V5VmFsdWUsXG4gICAgICAgIHZhbHVlLFxuICAgICAgICB2YWx1ZXNCeUtleSA9IG1hcCgpLFxuICAgICAgICB2YWx1ZXMsXG4gICAgICAgIHJlc3VsdCA9IGNyZWF0ZVJlc3VsdCgpO1xuXG4gICAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICAgIGlmICh2YWx1ZXMgPSB2YWx1ZXNCeUtleS5nZXQoa2V5VmFsdWUgPSBrZXkodmFsdWUgPSBhcnJheVtpXSkgKyBcIlwiKSkge1xuICAgICAgICB2YWx1ZXMucHVzaCh2YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZXNCeUtleS5zZXQoa2V5VmFsdWUsIFt2YWx1ZV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhbHVlc0J5S2V5LmVhY2goZnVuY3Rpb24odmFsdWVzLCBrZXkpIHtcbiAgICAgIHNldFJlc3VsdChyZXN1bHQsIGtleSwgYXBwbHkodmFsdWVzLCBkZXB0aCwgY3JlYXRlUmVzdWx0LCBzZXRSZXN1bHQpKTtcbiAgICB9KTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBmdW5jdGlvbiBlbnRyaWVzKG1hcCwgZGVwdGgpIHtcbiAgICBpZiAoKytkZXB0aCA+IGtleXMubGVuZ3RoKSByZXR1cm4gbWFwO1xuICAgIHZhciBhcnJheSwgc29ydEtleSA9IHNvcnRLZXlzW2RlcHRoIC0gMV07XG4gICAgaWYgKHJvbGx1cCAhPSBudWxsICYmIGRlcHRoID49IGtleXMubGVuZ3RoKSBhcnJheSA9IG1hcC5lbnRyaWVzKCk7XG4gICAgZWxzZSBhcnJheSA9IFtdLCBtYXAuZWFjaChmdW5jdGlvbih2LCBrKSB7IGFycmF5LnB1c2goe2tleTogaywgdmFsdWVzOiBlbnRyaWVzKHYsIGRlcHRoKX0pOyB9KTtcbiAgICByZXR1cm4gc29ydEtleSAhPSBudWxsID8gYXJyYXkuc29ydChmdW5jdGlvbihhLCBiKSB7IHJldHVybiBzb3J0S2V5KGEua2V5LCBiLmtleSk7IH0pIDogYXJyYXk7XG4gIH1cblxuICByZXR1cm4gbmVzdCA9IHtcbiAgICBvYmplY3Q6IGZ1bmN0aW9uKGFycmF5KSB7IHJldHVybiBhcHBseShhcnJheSwgMCwgY3JlYXRlT2JqZWN0LCBzZXRPYmplY3QpOyB9LFxuICAgIG1hcDogZnVuY3Rpb24oYXJyYXkpIHsgcmV0dXJuIGFwcGx5KGFycmF5LCAwLCBjcmVhdGVNYXAsIHNldE1hcCk7IH0sXG4gICAgZW50cmllczogZnVuY3Rpb24oYXJyYXkpIHsgcmV0dXJuIGVudHJpZXMoYXBwbHkoYXJyYXksIDAsIGNyZWF0ZU1hcCwgc2V0TWFwKSwgMCk7IH0sXG4gICAga2V5OiBmdW5jdGlvbihkKSB7IGtleXMucHVzaChkKTsgcmV0dXJuIG5lc3Q7IH0sXG4gICAgc29ydEtleXM6IGZ1bmN0aW9uKG9yZGVyKSB7IHNvcnRLZXlzW2tleXMubGVuZ3RoIC0gMV0gPSBvcmRlcjsgcmV0dXJuIG5lc3Q7IH0sXG4gICAgc29ydFZhbHVlczogZnVuY3Rpb24ob3JkZXIpIHsgc29ydFZhbHVlcyA9IG9yZGVyOyByZXR1cm4gbmVzdDsgfSxcbiAgICByb2xsdXA6IGZ1bmN0aW9uKGYpIHsgcm9sbHVwID0gZjsgcmV0dXJuIG5lc3Q7IH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlT2JqZWN0KCkge1xuICByZXR1cm4ge307XG59XG5cbmZ1bmN0aW9uIHNldE9iamVjdChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlTWFwKCkge1xuICByZXR1cm4gbWFwKCk7XG59XG5cbmZ1bmN0aW9uIHNldE1hcChtYXAsIGtleSwgdmFsdWUpIHtcbiAgbWFwLnNldChrZXksIHZhbHVlKTtcbn1cbiIsImltcG9ydCB7ZGVmYXVsdCBhcyBtYXAsIHByZWZpeH0gZnJvbSBcIi4vbWFwXCI7XG5cbmZ1bmN0aW9uIFNldCgpIHt9XG5cbnZhciBwcm90byA9IG1hcC5wcm90b3R5cGU7XG5cblNldC5wcm90b3R5cGUgPSBzZXQucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogU2V0LFxuICBoYXM6IHByb3RvLmhhcyxcbiAgYWRkOiBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHZhbHVlICs9IFwiXCI7XG4gICAgdGhpc1twcmVmaXggKyB2YWx1ZV0gPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgcmVtb3ZlOiBwcm90by5yZW1vdmUsXG4gIGNsZWFyOiBwcm90by5jbGVhcixcbiAgdmFsdWVzOiBwcm90by5rZXlzLFxuICBzaXplOiBwcm90by5zaXplLFxuICBlbXB0eTogcHJvdG8uZW1wdHksXG4gIGVhY2g6IHByb3RvLmVhY2hcbn07XG5cbmZ1bmN0aW9uIHNldChvYmplY3QsIGYpIHtcbiAgdmFyIHNldCA9IG5ldyBTZXQ7XG5cbiAgLy8gQ29weSBjb25zdHJ1Y3Rvci5cbiAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFNldCkgb2JqZWN0LmVhY2goZnVuY3Rpb24odmFsdWUpIHsgc2V0LmFkZCh2YWx1ZSk7IH0pO1xuXG4gIC8vIE90aGVyd2lzZSwgYXNzdW1lIGl04oCZcyBhbiBhcnJheS5cbiAgZWxzZSBpZiAob2JqZWN0KSB7XG4gICAgdmFyIGkgPSAtMSwgbiA9IG9iamVjdC5sZW5ndGg7XG4gICAgaWYgKGYgPT0gbnVsbCkgd2hpbGUgKCsraSA8IG4pIHNldC5hZGQob2JqZWN0W2ldKTtcbiAgICBlbHNlIHdoaWxlICgrK2kgPCBuKSBzZXQuYWRkKGYob2JqZWN0W2ldLCBpLCBvYmplY3QpKTtcbiAgfVxuXG4gIHJldHVybiBzZXQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHNldDtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG1hcCkge1xuICB2YXIgdmFsdWVzID0gW107XG4gIGZvciAodmFyIGtleSBpbiBtYXApIHZhbHVlcy5wdXNoKG1hcFtrZXldKTtcbiAgcmV0dXJuIHZhbHVlcztcbn1cbiIsImltcG9ydCBkZWZpbmUsIHtleHRlbmR9IGZyb20gXCIuL2RlZmluZS5qc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gQ29sb3IoKSB7fVxuXG5leHBvcnQgdmFyIGRhcmtlciA9IDAuNztcbmV4cG9ydCB2YXIgYnJpZ2h0ZXIgPSAxIC8gZGFya2VyO1xuXG52YXIgcmVJID0gXCJcXFxccyooWystXT9cXFxcZCspXFxcXHMqXCIsXG4gICAgcmVOID0gXCJcXFxccyooWystXT9cXFxcZCpcXFxcLj9cXFxcZCsoPzpbZUVdWystXT9cXFxcZCspPylcXFxccypcIixcbiAgICByZVAgPSBcIlxcXFxzKihbKy1dP1xcXFxkKlxcXFwuP1xcXFxkKyg/OltlRV1bKy1dP1xcXFxkKyk/KSVcXFxccypcIixcbiAgICByZUhleCA9IC9eIyhbMC05YS1mXXszLDh9KSQvLFxuICAgIHJlUmdiSW50ZWdlciA9IG5ldyBSZWdFeHAoXCJecmdiXFxcXChcIiArIFtyZUksIHJlSSwgcmVJXSArIFwiXFxcXCkkXCIpLFxuICAgIHJlUmdiUGVyY2VudCA9IG5ldyBSZWdFeHAoXCJecmdiXFxcXChcIiArIFtyZVAsIHJlUCwgcmVQXSArIFwiXFxcXCkkXCIpLFxuICAgIHJlUmdiYUludGVnZXIgPSBuZXcgUmVnRXhwKFwiXnJnYmFcXFxcKFwiICsgW3JlSSwgcmVJLCByZUksIHJlTl0gKyBcIlxcXFwpJFwiKSxcbiAgICByZVJnYmFQZXJjZW50ID0gbmV3IFJlZ0V4cChcIl5yZ2JhXFxcXChcIiArIFtyZVAsIHJlUCwgcmVQLCByZU5dICsgXCJcXFxcKSRcIiksXG4gICAgcmVIc2xQZXJjZW50ID0gbmV3IFJlZ0V4cChcIl5oc2xcXFxcKFwiICsgW3JlTiwgcmVQLCByZVBdICsgXCJcXFxcKSRcIiksXG4gICAgcmVIc2xhUGVyY2VudCA9IG5ldyBSZWdFeHAoXCJeaHNsYVxcXFwoXCIgKyBbcmVOLCByZVAsIHJlUCwgcmVOXSArIFwiXFxcXCkkXCIpO1xuXG52YXIgbmFtZWQgPSB7XG4gIGFsaWNlYmx1ZTogMHhmMGY4ZmYsXG4gIGFudGlxdWV3aGl0ZTogMHhmYWViZDcsXG4gIGFxdWE6IDB4MDBmZmZmLFxuICBhcXVhbWFyaW5lOiAweDdmZmZkNCxcbiAgYXp1cmU6IDB4ZjBmZmZmLFxuICBiZWlnZTogMHhmNWY1ZGMsXG4gIGJpc3F1ZTogMHhmZmU0YzQsXG4gIGJsYWNrOiAweDAwMDAwMCxcbiAgYmxhbmNoZWRhbG1vbmQ6IDB4ZmZlYmNkLFxuICBibHVlOiAweDAwMDBmZixcbiAgYmx1ZXZpb2xldDogMHg4YTJiZTIsXG4gIGJyb3duOiAweGE1MmEyYSxcbiAgYnVybHl3b29kOiAweGRlYjg4NyxcbiAgY2FkZXRibHVlOiAweDVmOWVhMCxcbiAgY2hhcnRyZXVzZTogMHg3ZmZmMDAsXG4gIGNob2NvbGF0ZTogMHhkMjY5MWUsXG4gIGNvcmFsOiAweGZmN2Y1MCxcbiAgY29ybmZsb3dlcmJsdWU6IDB4NjQ5NWVkLFxuICBjb3Juc2lsazogMHhmZmY4ZGMsXG4gIGNyaW1zb246IDB4ZGMxNDNjLFxuICBjeWFuOiAweDAwZmZmZixcbiAgZGFya2JsdWU6IDB4MDAwMDhiLFxuICBkYXJrY3lhbjogMHgwMDhiOGIsXG4gIGRhcmtnb2xkZW5yb2Q6IDB4Yjg4NjBiLFxuICBkYXJrZ3JheTogMHhhOWE5YTksXG4gIGRhcmtncmVlbjogMHgwMDY0MDAsXG4gIGRhcmtncmV5OiAweGE5YTlhOSxcbiAgZGFya2toYWtpOiAweGJkYjc2YixcbiAgZGFya21hZ2VudGE6IDB4OGIwMDhiLFxuICBkYXJrb2xpdmVncmVlbjogMHg1NTZiMmYsXG4gIGRhcmtvcmFuZ2U6IDB4ZmY4YzAwLFxuICBkYXJrb3JjaGlkOiAweDk5MzJjYyxcbiAgZGFya3JlZDogMHg4YjAwMDAsXG4gIGRhcmtzYWxtb246IDB4ZTk5NjdhLFxuICBkYXJrc2VhZ3JlZW46IDB4OGZiYzhmLFxuICBkYXJrc2xhdGVibHVlOiAweDQ4M2Q4YixcbiAgZGFya3NsYXRlZ3JheTogMHgyZjRmNGYsXG4gIGRhcmtzbGF0ZWdyZXk6IDB4MmY0ZjRmLFxuICBkYXJrdHVycXVvaXNlOiAweDAwY2VkMSxcbiAgZGFya3Zpb2xldDogMHg5NDAwZDMsXG4gIGRlZXBwaW5rOiAweGZmMTQ5MyxcbiAgZGVlcHNreWJsdWU6IDB4MDBiZmZmLFxuICBkaW1ncmF5OiAweDY5Njk2OSxcbiAgZGltZ3JleTogMHg2OTY5NjksXG4gIGRvZGdlcmJsdWU6IDB4MWU5MGZmLFxuICBmaXJlYnJpY2s6IDB4YjIyMjIyLFxuICBmbG9yYWx3aGl0ZTogMHhmZmZhZjAsXG4gIGZvcmVzdGdyZWVuOiAweDIyOGIyMixcbiAgZnVjaHNpYTogMHhmZjAwZmYsXG4gIGdhaW5zYm9ybzogMHhkY2RjZGMsXG4gIGdob3N0d2hpdGU6IDB4ZjhmOGZmLFxuICBnb2xkOiAweGZmZDcwMCxcbiAgZ29sZGVucm9kOiAweGRhYTUyMCxcbiAgZ3JheTogMHg4MDgwODAsXG4gIGdyZWVuOiAweDAwODAwMCxcbiAgZ3JlZW55ZWxsb3c6IDB4YWRmZjJmLFxuICBncmV5OiAweDgwODA4MCxcbiAgaG9uZXlkZXc6IDB4ZjBmZmYwLFxuICBob3RwaW5rOiAweGZmNjliNCxcbiAgaW5kaWFucmVkOiAweGNkNWM1YyxcbiAgaW5kaWdvOiAweDRiMDA4MixcbiAgaXZvcnk6IDB4ZmZmZmYwLFxuICBraGFraTogMHhmMGU2OGMsXG4gIGxhdmVuZGVyOiAweGU2ZTZmYSxcbiAgbGF2ZW5kZXJibHVzaDogMHhmZmYwZjUsXG4gIGxhd25ncmVlbjogMHg3Y2ZjMDAsXG4gIGxlbW9uY2hpZmZvbjogMHhmZmZhY2QsXG4gIGxpZ2h0Ymx1ZTogMHhhZGQ4ZTYsXG4gIGxpZ2h0Y29yYWw6IDB4ZjA4MDgwLFxuICBsaWdodGN5YW46IDB4ZTBmZmZmLFxuICBsaWdodGdvbGRlbnJvZHllbGxvdzogMHhmYWZhZDIsXG4gIGxpZ2h0Z3JheTogMHhkM2QzZDMsXG4gIGxpZ2h0Z3JlZW46IDB4OTBlZTkwLFxuICBsaWdodGdyZXk6IDB4ZDNkM2QzLFxuICBsaWdodHBpbms6IDB4ZmZiNmMxLFxuICBsaWdodHNhbG1vbjogMHhmZmEwN2EsXG4gIGxpZ2h0c2VhZ3JlZW46IDB4MjBiMmFhLFxuICBsaWdodHNreWJsdWU6IDB4ODdjZWZhLFxuICBsaWdodHNsYXRlZ3JheTogMHg3Nzg4OTksXG4gIGxpZ2h0c2xhdGVncmV5OiAweDc3ODg5OSxcbiAgbGlnaHRzdGVlbGJsdWU6IDB4YjBjNGRlLFxuICBsaWdodHllbGxvdzogMHhmZmZmZTAsXG4gIGxpbWU6IDB4MDBmZjAwLFxuICBsaW1lZ3JlZW46IDB4MzJjZDMyLFxuICBsaW5lbjogMHhmYWYwZTYsXG4gIG1hZ2VudGE6IDB4ZmYwMGZmLFxuICBtYXJvb246IDB4ODAwMDAwLFxuICBtZWRpdW1hcXVhbWFyaW5lOiAweDY2Y2RhYSxcbiAgbWVkaXVtYmx1ZTogMHgwMDAwY2QsXG4gIG1lZGl1bW9yY2hpZDogMHhiYTU1ZDMsXG4gIG1lZGl1bXB1cnBsZTogMHg5MzcwZGIsXG4gIG1lZGl1bXNlYWdyZWVuOiAweDNjYjM3MSxcbiAgbWVkaXVtc2xhdGVibHVlOiAweDdiNjhlZSxcbiAgbWVkaXVtc3ByaW5nZ3JlZW46IDB4MDBmYTlhLFxuICBtZWRpdW10dXJxdW9pc2U6IDB4NDhkMWNjLFxuICBtZWRpdW12aW9sZXRyZWQ6IDB4YzcxNTg1LFxuICBtaWRuaWdodGJsdWU6IDB4MTkxOTcwLFxuICBtaW50Y3JlYW06IDB4ZjVmZmZhLFxuICBtaXN0eXJvc2U6IDB4ZmZlNGUxLFxuICBtb2NjYXNpbjogMHhmZmU0YjUsXG4gIG5hdmFqb3doaXRlOiAweGZmZGVhZCxcbiAgbmF2eTogMHgwMDAwODAsXG4gIG9sZGxhY2U6IDB4ZmRmNWU2LFxuICBvbGl2ZTogMHg4MDgwMDAsXG4gIG9saXZlZHJhYjogMHg2YjhlMjMsXG4gIG9yYW5nZTogMHhmZmE1MDAsXG4gIG9yYW5nZXJlZDogMHhmZjQ1MDAsXG4gIG9yY2hpZDogMHhkYTcwZDYsXG4gIHBhbGVnb2xkZW5yb2Q6IDB4ZWVlOGFhLFxuICBwYWxlZ3JlZW46IDB4OThmYjk4LFxuICBwYWxldHVycXVvaXNlOiAweGFmZWVlZSxcbiAgcGFsZXZpb2xldHJlZDogMHhkYjcwOTMsXG4gIHBhcGF5YXdoaXA6IDB4ZmZlZmQ1LFxuICBwZWFjaHB1ZmY6IDB4ZmZkYWI5LFxuICBwZXJ1OiAweGNkODUzZixcbiAgcGluazogMHhmZmMwY2IsXG4gIHBsdW06IDB4ZGRhMGRkLFxuICBwb3dkZXJibHVlOiAweGIwZTBlNixcbiAgcHVycGxlOiAweDgwMDA4MCxcbiAgcmViZWNjYXB1cnBsZTogMHg2NjMzOTksXG4gIHJlZDogMHhmZjAwMDAsXG4gIHJvc3licm93bjogMHhiYzhmOGYsXG4gIHJveWFsYmx1ZTogMHg0MTY5ZTEsXG4gIHNhZGRsZWJyb3duOiAweDhiNDUxMyxcbiAgc2FsbW9uOiAweGZhODA3MixcbiAgc2FuZHlicm93bjogMHhmNGE0NjAsXG4gIHNlYWdyZWVuOiAweDJlOGI1NyxcbiAgc2Vhc2hlbGw6IDB4ZmZmNWVlLFxuICBzaWVubmE6IDB4YTA1MjJkLFxuICBzaWx2ZXI6IDB4YzBjMGMwLFxuICBza3libHVlOiAweDg3Y2VlYixcbiAgc2xhdGVibHVlOiAweDZhNWFjZCxcbiAgc2xhdGVncmF5OiAweDcwODA5MCxcbiAgc2xhdGVncmV5OiAweDcwODA5MCxcbiAgc25vdzogMHhmZmZhZmEsXG4gIHNwcmluZ2dyZWVuOiAweDAwZmY3ZixcbiAgc3RlZWxibHVlOiAweDQ2ODJiNCxcbiAgdGFuOiAweGQyYjQ4YyxcbiAgdGVhbDogMHgwMDgwODAsXG4gIHRoaXN0bGU6IDB4ZDhiZmQ4LFxuICB0b21hdG86IDB4ZmY2MzQ3LFxuICB0dXJxdW9pc2U6IDB4NDBlMGQwLFxuICB2aW9sZXQ6IDB4ZWU4MmVlLFxuICB3aGVhdDogMHhmNWRlYjMsXG4gIHdoaXRlOiAweGZmZmZmZixcbiAgd2hpdGVzbW9rZTogMHhmNWY1ZjUsXG4gIHllbGxvdzogMHhmZmZmMDAsXG4gIHllbGxvd2dyZWVuOiAweDlhY2QzMlxufTtcblxuZGVmaW5lKENvbG9yLCBjb2xvciwge1xuICBjb3B5OiBmdW5jdGlvbihjaGFubmVscykge1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yLCB0aGlzLCBjaGFubmVscyk7XG4gIH0sXG4gIGRpc3BsYXlhYmxlOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5yZ2IoKS5kaXNwbGF5YWJsZSgpO1xuICB9LFxuICBoZXg6IGNvbG9yX2Zvcm1hdEhleCwgLy8gRGVwcmVjYXRlZCEgVXNlIGNvbG9yLmZvcm1hdEhleC5cbiAgZm9ybWF0SGV4OiBjb2xvcl9mb3JtYXRIZXgsXG4gIGZvcm1hdEhzbDogY29sb3JfZm9ybWF0SHNsLFxuICBmb3JtYXRSZ2I6IGNvbG9yX2Zvcm1hdFJnYixcbiAgdG9TdHJpbmc6IGNvbG9yX2Zvcm1hdFJnYlxufSk7XG5cbmZ1bmN0aW9uIGNvbG9yX2Zvcm1hdEhleCgpIHtcbiAgcmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4KCk7XG59XG5cbmZ1bmN0aW9uIGNvbG9yX2Zvcm1hdEhzbCgpIHtcbiAgcmV0dXJuIGhzbENvbnZlcnQodGhpcykuZm9ybWF0SHNsKCk7XG59XG5cbmZ1bmN0aW9uIGNvbG9yX2Zvcm1hdFJnYigpIHtcbiAgcmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0UmdiKCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbG9yKGZvcm1hdCkge1xuICB2YXIgbSwgbDtcbiAgZm9ybWF0ID0gKGZvcm1hdCArIFwiXCIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gKG0gPSByZUhleC5leGVjKGZvcm1hdCkpID8gKGwgPSBtWzFdLmxlbmd0aCwgbSA9IHBhcnNlSW50KG1bMV0sIDE2KSwgbCA9PT0gNiA/IHJnYm4obSkgLy8gI2ZmMDAwMFxuICAgICAgOiBsID09PSAzID8gbmV3IFJnYigobSA+PiA4ICYgMHhmKSB8IChtID4+IDQgJiAweGYwKSwgKG0gPj4gNCAmIDB4ZikgfCAobSAmIDB4ZjApLCAoKG0gJiAweGYpIDw8IDQpIHwgKG0gJiAweGYpLCAxKSAvLyAjZjAwXG4gICAgICA6IGwgPT09IDggPyByZ2JhKG0gPj4gMjQgJiAweGZmLCBtID4+IDE2ICYgMHhmZiwgbSA+PiA4ICYgMHhmZiwgKG0gJiAweGZmKSAvIDB4ZmYpIC8vICNmZjAwMDAwMFxuICAgICAgOiBsID09PSA0ID8gcmdiYSgobSA+PiAxMiAmIDB4ZikgfCAobSA+PiA4ICYgMHhmMCksIChtID4+IDggJiAweGYpIHwgKG0gPj4gNCAmIDB4ZjApLCAobSA+PiA0ICYgMHhmKSB8IChtICYgMHhmMCksICgoKG0gJiAweGYpIDw8IDQpIHwgKG0gJiAweGYpKSAvIDB4ZmYpIC8vICNmMDAwXG4gICAgICA6IG51bGwpIC8vIGludmFsaWQgaGV4XG4gICAgICA6IChtID0gcmVSZ2JJbnRlZ2VyLmV4ZWMoZm9ybWF0KSkgPyBuZXcgUmdiKG1bMV0sIG1bMl0sIG1bM10sIDEpIC8vIHJnYigyNTUsIDAsIDApXG4gICAgICA6IChtID0gcmVSZ2JQZXJjZW50LmV4ZWMoZm9ybWF0KSkgPyBuZXcgUmdiKG1bMV0gKiAyNTUgLyAxMDAsIG1bMl0gKiAyNTUgLyAxMDAsIG1bM10gKiAyNTUgLyAxMDAsIDEpIC8vIHJnYigxMDAlLCAwJSwgMCUpXG4gICAgICA6IChtID0gcmVSZ2JhSW50ZWdlci5leGVjKGZvcm1hdCkpID8gcmdiYShtWzFdLCBtWzJdLCBtWzNdLCBtWzRdKSAvLyByZ2JhKDI1NSwgMCwgMCwgMSlcbiAgICAgIDogKG0gPSByZVJnYmFQZXJjZW50LmV4ZWMoZm9ybWF0KSkgPyByZ2JhKG1bMV0gKiAyNTUgLyAxMDAsIG1bMl0gKiAyNTUgLyAxMDAsIG1bM10gKiAyNTUgLyAxMDAsIG1bNF0pIC8vIHJnYigxMDAlLCAwJSwgMCUsIDEpXG4gICAgICA6IChtID0gcmVIc2xQZXJjZW50LmV4ZWMoZm9ybWF0KSkgPyBoc2xhKG1bMV0sIG1bMl0gLyAxMDAsIG1bM10gLyAxMDAsIDEpIC8vIGhzbCgxMjAsIDUwJSwgNTAlKVxuICAgICAgOiAobSA9IHJlSHNsYVBlcmNlbnQuZXhlYyhmb3JtYXQpKSA/IGhzbGEobVsxXSwgbVsyXSAvIDEwMCwgbVszXSAvIDEwMCwgbVs0XSkgLy8gaHNsYSgxMjAsIDUwJSwgNTAlLCAxKVxuICAgICAgOiBuYW1lZC5oYXNPd25Qcm9wZXJ0eShmb3JtYXQpID8gcmdibihuYW1lZFtmb3JtYXRdKSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgICAgOiBmb3JtYXQgPT09IFwidHJhbnNwYXJlbnRcIiA/IG5ldyBSZ2IoTmFOLCBOYU4sIE5hTiwgMClcbiAgICAgIDogbnVsbDtcbn1cblxuZnVuY3Rpb24gcmdibihuKSB7XG4gIHJldHVybiBuZXcgUmdiKG4gPj4gMTYgJiAweGZmLCBuID4+IDggJiAweGZmLCBuICYgMHhmZiwgMSk7XG59XG5cbmZ1bmN0aW9uIHJnYmEociwgZywgYiwgYSkge1xuICBpZiAoYSA8PSAwKSByID0gZyA9IGIgPSBOYU47XG4gIHJldHVybiBuZXcgUmdiKHIsIGcsIGIsIGEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmdiQ29udmVydChvKSB7XG4gIGlmICghKG8gaW5zdGFuY2VvZiBDb2xvcikpIG8gPSBjb2xvcihvKTtcbiAgaWYgKCFvKSByZXR1cm4gbmV3IFJnYjtcbiAgbyA9IG8ucmdiKCk7XG4gIHJldHVybiBuZXcgUmdiKG8uciwgby5nLCBvLmIsIG8ub3BhY2l0eSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZ2IociwgZywgYiwgb3BhY2l0eSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/IHJnYkNvbnZlcnQocikgOiBuZXcgUmdiKHIsIGcsIGIsIG9wYWNpdHkgPT0gbnVsbCA/IDEgOiBvcGFjaXR5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFJnYihyLCBnLCBiLCBvcGFjaXR5KSB7XG4gIHRoaXMuciA9ICtyO1xuICB0aGlzLmcgPSArZztcbiAgdGhpcy5iID0gK2I7XG4gIHRoaXMub3BhY2l0eSA9ICtvcGFjaXR5O1xufVxuXG5kZWZpbmUoUmdiLCByZ2IsIGV4dGVuZChDb2xvciwge1xuICBicmlnaHRlcjogZnVuY3Rpb24oaykge1xuICAgIGsgPSBrID09IG51bGwgPyBicmlnaHRlciA6IE1hdGgucG93KGJyaWdodGVyLCBrKTtcbiAgICByZXR1cm4gbmV3IFJnYih0aGlzLnIgKiBrLCB0aGlzLmcgKiBrLCB0aGlzLmIgKiBrLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICBkYXJrZXI6IGZ1bmN0aW9uKGspIHtcbiAgICBrID0gayA9PSBudWxsID8gZGFya2VyIDogTWF0aC5wb3coZGFya2VyLCBrKTtcbiAgICByZXR1cm4gbmV3IFJnYih0aGlzLnIgKiBrLCB0aGlzLmcgKiBrLCB0aGlzLmIgKiBrLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICByZ2I6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICBkaXNwbGF5YWJsZTogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICgtMC41IDw9IHRoaXMuciAmJiB0aGlzLnIgPCAyNTUuNSlcbiAgICAgICAgJiYgKC0wLjUgPD0gdGhpcy5nICYmIHRoaXMuZyA8IDI1NS41KVxuICAgICAgICAmJiAoLTAuNSA8PSB0aGlzLmIgJiYgdGhpcy5iIDwgMjU1LjUpXG4gICAgICAgICYmICgwIDw9IHRoaXMub3BhY2l0eSAmJiB0aGlzLm9wYWNpdHkgPD0gMSk7XG4gIH0sXG4gIGhleDogcmdiX2Zvcm1hdEhleCwgLy8gRGVwcmVjYXRlZCEgVXNlIGNvbG9yLmZvcm1hdEhleC5cbiAgZm9ybWF0SGV4OiByZ2JfZm9ybWF0SGV4LFxuICBmb3JtYXRSZ2I6IHJnYl9mb3JtYXRSZ2IsXG4gIHRvU3RyaW5nOiByZ2JfZm9ybWF0UmdiXG59KSk7XG5cbmZ1bmN0aW9uIHJnYl9mb3JtYXRIZXgoKSB7XG4gIHJldHVybiBcIiNcIiArIGhleCh0aGlzLnIpICsgaGV4KHRoaXMuZykgKyBoZXgodGhpcy5iKTtcbn1cblxuZnVuY3Rpb24gcmdiX2Zvcm1hdFJnYigpIHtcbiAgdmFyIGEgPSB0aGlzLm9wYWNpdHk7IGEgPSBpc05hTihhKSA/IDEgOiBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCBhKSk7XG4gIHJldHVybiAoYSA9PT0gMSA/IFwicmdiKFwiIDogXCJyZ2JhKFwiKVxuICAgICAgKyBNYXRoLm1heCgwLCBNYXRoLm1pbigyNTUsIE1hdGgucm91bmQodGhpcy5yKSB8fCAwKSkgKyBcIiwgXCJcbiAgICAgICsgTWF0aC5tYXgoMCwgTWF0aC5taW4oMjU1LCBNYXRoLnJvdW5kKHRoaXMuZykgfHwgMCkpICsgXCIsIFwiXG4gICAgICArIE1hdGgubWF4KDAsIE1hdGgubWluKDI1NSwgTWF0aC5yb3VuZCh0aGlzLmIpIHx8IDApKVxuICAgICAgKyAoYSA9PT0gMSA/IFwiKVwiIDogXCIsIFwiICsgYSArIFwiKVwiKTtcbn1cblxuZnVuY3Rpb24gaGV4KHZhbHVlKSB7XG4gIHZhbHVlID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMjU1LCBNYXRoLnJvdW5kKHZhbHVlKSB8fCAwKSk7XG4gIHJldHVybiAodmFsdWUgPCAxNiA/IFwiMFwiIDogXCJcIikgKyB2YWx1ZS50b1N0cmluZygxNik7XG59XG5cbmZ1bmN0aW9uIGhzbGEoaCwgcywgbCwgYSkge1xuICBpZiAoYSA8PSAwKSBoID0gcyA9IGwgPSBOYU47XG4gIGVsc2UgaWYgKGwgPD0gMCB8fCBsID49IDEpIGggPSBzID0gTmFOO1xuICBlbHNlIGlmIChzIDw9IDApIGggPSBOYU47XG4gIHJldHVybiBuZXcgSHNsKGgsIHMsIGwsIGEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaHNsQ29udmVydChvKSB7XG4gIGlmIChvIGluc3RhbmNlb2YgSHNsKSByZXR1cm4gbmV3IEhzbChvLmgsIG8ucywgby5sLCBvLm9wYWNpdHkpO1xuICBpZiAoIShvIGluc3RhbmNlb2YgQ29sb3IpKSBvID0gY29sb3Iobyk7XG4gIGlmICghbykgcmV0dXJuIG5ldyBIc2w7XG4gIGlmIChvIGluc3RhbmNlb2YgSHNsKSByZXR1cm4gbztcbiAgbyA9IG8ucmdiKCk7XG4gIHZhciByID0gby5yIC8gMjU1LFxuICAgICAgZyA9IG8uZyAvIDI1NSxcbiAgICAgIGIgPSBvLmIgLyAyNTUsXG4gICAgICBtaW4gPSBNYXRoLm1pbihyLCBnLCBiKSxcbiAgICAgIG1heCA9IE1hdGgubWF4KHIsIGcsIGIpLFxuICAgICAgaCA9IE5hTixcbiAgICAgIHMgPSBtYXggLSBtaW4sXG4gICAgICBsID0gKG1heCArIG1pbikgLyAyO1xuICBpZiAocykge1xuICAgIGlmIChyID09PSBtYXgpIGggPSAoZyAtIGIpIC8gcyArIChnIDwgYikgKiA2O1xuICAgIGVsc2UgaWYgKGcgPT09IG1heCkgaCA9IChiIC0gcikgLyBzICsgMjtcbiAgICBlbHNlIGggPSAociAtIGcpIC8gcyArIDQ7XG4gICAgcyAvPSBsIDwgMC41ID8gbWF4ICsgbWluIDogMiAtIG1heCAtIG1pbjtcbiAgICBoICo9IDYwO1xuICB9IGVsc2Uge1xuICAgIHMgPSBsID4gMCAmJiBsIDwgMSA/IDAgOiBoO1xuICB9XG4gIHJldHVybiBuZXcgSHNsKGgsIHMsIGwsIG8ub3BhY2l0eSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoc2woaCwgcywgbCwgb3BhY2l0eSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/IGhzbENvbnZlcnQoaCkgOiBuZXcgSHNsKGgsIHMsIGwsIG9wYWNpdHkgPT0gbnVsbCA/IDEgOiBvcGFjaXR5KTtcbn1cblxuZnVuY3Rpb24gSHNsKGgsIHMsIGwsIG9wYWNpdHkpIHtcbiAgdGhpcy5oID0gK2g7XG4gIHRoaXMucyA9ICtzO1xuICB0aGlzLmwgPSArbDtcbiAgdGhpcy5vcGFjaXR5ID0gK29wYWNpdHk7XG59XG5cbmRlZmluZShIc2wsIGhzbCwgZXh0ZW5kKENvbG9yLCB7XG4gIGJyaWdodGVyOiBmdW5jdGlvbihrKSB7XG4gICAgayA9IGsgPT0gbnVsbCA/IGJyaWdodGVyIDogTWF0aC5wb3coYnJpZ2h0ZXIsIGspO1xuICAgIHJldHVybiBuZXcgSHNsKHRoaXMuaCwgdGhpcy5zLCB0aGlzLmwgKiBrLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICBkYXJrZXI6IGZ1bmN0aW9uKGspIHtcbiAgICBrID0gayA9PSBudWxsID8gZGFya2VyIDogTWF0aC5wb3coZGFya2VyLCBrKTtcbiAgICByZXR1cm4gbmV3IEhzbCh0aGlzLmgsIHRoaXMucywgdGhpcy5sICogaywgdGhpcy5vcGFjaXR5KTtcbiAgfSxcbiAgcmdiOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgaCA9IHRoaXMuaCAlIDM2MCArICh0aGlzLmggPCAwKSAqIDM2MCxcbiAgICAgICAgcyA9IGlzTmFOKGgpIHx8IGlzTmFOKHRoaXMucykgPyAwIDogdGhpcy5zLFxuICAgICAgICBsID0gdGhpcy5sLFxuICAgICAgICBtMiA9IGwgKyAobCA8IDAuNSA/IGwgOiAxIC0gbCkgKiBzLFxuICAgICAgICBtMSA9IDIgKiBsIC0gbTI7XG4gICAgcmV0dXJuIG5ldyBSZ2IoXG4gICAgICBoc2wycmdiKGggPj0gMjQwID8gaCAtIDI0MCA6IGggKyAxMjAsIG0xLCBtMiksXG4gICAgICBoc2wycmdiKGgsIG0xLCBtMiksXG4gICAgICBoc2wycmdiKGggPCAxMjAgPyBoICsgMjQwIDogaCAtIDEyMCwgbTEsIG0yKSxcbiAgICAgIHRoaXMub3BhY2l0eVxuICAgICk7XG4gIH0sXG4gIGRpc3BsYXlhYmxlOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gKDAgPD0gdGhpcy5zICYmIHRoaXMucyA8PSAxIHx8IGlzTmFOKHRoaXMucykpXG4gICAgICAgICYmICgwIDw9IHRoaXMubCAmJiB0aGlzLmwgPD0gMSlcbiAgICAgICAgJiYgKDAgPD0gdGhpcy5vcGFjaXR5ICYmIHRoaXMub3BhY2l0eSA8PSAxKTtcbiAgfSxcbiAgZm9ybWF0SHNsOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgYSA9IHRoaXMub3BhY2l0eTsgYSA9IGlzTmFOKGEpID8gMSA6IE1hdGgubWF4KDAsIE1hdGgubWluKDEsIGEpKTtcbiAgICByZXR1cm4gKGEgPT09IDEgPyBcImhzbChcIiA6IFwiaHNsYShcIilcbiAgICAgICAgKyAodGhpcy5oIHx8IDApICsgXCIsIFwiXG4gICAgICAgICsgKHRoaXMucyB8fCAwKSAqIDEwMCArIFwiJSwgXCJcbiAgICAgICAgKyAodGhpcy5sIHx8IDApICogMTAwICsgXCIlXCJcbiAgICAgICAgKyAoYSA9PT0gMSA/IFwiKVwiIDogXCIsIFwiICsgYSArIFwiKVwiKTtcbiAgfVxufSkpO1xuXG4vKiBGcm9tIEZ2RCAxMy4zNywgQ1NTIENvbG9yIE1vZHVsZSBMZXZlbCAzICovXG5mdW5jdGlvbiBoc2wycmdiKGgsIG0xLCBtMikge1xuICByZXR1cm4gKGggPCA2MCA/IG0xICsgKG0yIC0gbTEpICogaCAvIDYwXG4gICAgICA6IGggPCAxODAgPyBtMlxuICAgICAgOiBoIDwgMjQwID8gbTEgKyAobTIgLSBtMSkgKiAoMjQwIC0gaCkgLyA2MFxuICAgICAgOiBtMSkgKiAyNTU7XG59XG4iLCJpbXBvcnQgZGVmaW5lLCB7ZXh0ZW5kfSBmcm9tIFwiLi9kZWZpbmUuanNcIjtcbmltcG9ydCB7Q29sb3IsIHJnYkNvbnZlcnQsIFJnYiwgZGFya2VyLCBicmlnaHRlcn0gZnJvbSBcIi4vY29sb3IuanNcIjtcbmltcG9ydCB7ZGVnMnJhZCwgcmFkMmRlZ30gZnJvbSBcIi4vbWF0aC5qc1wiO1xuXG52YXIgQSA9IC0wLjE0ODYxLFxuICAgIEIgPSArMS43ODI3NyxcbiAgICBDID0gLTAuMjkyMjcsXG4gICAgRCA9IC0wLjkwNjQ5LFxuICAgIEUgPSArMS45NzI5NCxcbiAgICBFRCA9IEUgKiBELFxuICAgIEVCID0gRSAqIEIsXG4gICAgQkNfREEgPSBCICogQyAtIEQgKiBBO1xuXG5mdW5jdGlvbiBjdWJlaGVsaXhDb252ZXJ0KG8pIHtcbiAgaWYgKG8gaW5zdGFuY2VvZiBDdWJlaGVsaXgpIHJldHVybiBuZXcgQ3ViZWhlbGl4KG8uaCwgby5zLCBvLmwsIG8ub3BhY2l0eSk7XG4gIGlmICghKG8gaW5zdGFuY2VvZiBSZ2IpKSBvID0gcmdiQ29udmVydChvKTtcbiAgdmFyIHIgPSBvLnIgLyAyNTUsXG4gICAgICBnID0gby5nIC8gMjU1LFxuICAgICAgYiA9IG8uYiAvIDI1NSxcbiAgICAgIGwgPSAoQkNfREEgKiBiICsgRUQgKiByIC0gRUIgKiBnKSAvIChCQ19EQSArIEVEIC0gRUIpLFxuICAgICAgYmwgPSBiIC0gbCxcbiAgICAgIGsgPSAoRSAqIChnIC0gbCkgLSBDICogYmwpIC8gRCxcbiAgICAgIHMgPSBNYXRoLnNxcnQoayAqIGsgKyBibCAqIGJsKSAvIChFICogbCAqICgxIC0gbCkpLCAvLyBOYU4gaWYgbD0wIG9yIGw9MVxuICAgICAgaCA9IHMgPyBNYXRoLmF0YW4yKGssIGJsKSAqIHJhZDJkZWcgLSAxMjAgOiBOYU47XG4gIHJldHVybiBuZXcgQ3ViZWhlbGl4KGggPCAwID8gaCArIDM2MCA6IGgsIHMsIGwsIG8ub3BhY2l0eSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGN1YmVoZWxpeChoLCBzLCBsLCBvcGFjaXR5KSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID09PSAxID8gY3ViZWhlbGl4Q29udmVydChoKSA6IG5ldyBDdWJlaGVsaXgoaCwgcywgbCwgb3BhY2l0eSA9PSBudWxsID8gMSA6IG9wYWNpdHkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gQ3ViZWhlbGl4KGgsIHMsIGwsIG9wYWNpdHkpIHtcbiAgdGhpcy5oID0gK2g7XG4gIHRoaXMucyA9ICtzO1xuICB0aGlzLmwgPSArbDtcbiAgdGhpcy5vcGFjaXR5ID0gK29wYWNpdHk7XG59XG5cbmRlZmluZShDdWJlaGVsaXgsIGN1YmVoZWxpeCwgZXh0ZW5kKENvbG9yLCB7XG4gIGJyaWdodGVyOiBmdW5jdGlvbihrKSB7XG4gICAgayA9IGsgPT0gbnVsbCA/IGJyaWdodGVyIDogTWF0aC5wb3coYnJpZ2h0ZXIsIGspO1xuICAgIHJldHVybiBuZXcgQ3ViZWhlbGl4KHRoaXMuaCwgdGhpcy5zLCB0aGlzLmwgKiBrLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICBkYXJrZXI6IGZ1bmN0aW9uKGspIHtcbiAgICBrID0gayA9PSBudWxsID8gZGFya2VyIDogTWF0aC5wb3coZGFya2VyLCBrKTtcbiAgICByZXR1cm4gbmV3IEN1YmVoZWxpeCh0aGlzLmgsIHRoaXMucywgdGhpcy5sICogaywgdGhpcy5vcGFjaXR5KTtcbiAgfSxcbiAgcmdiOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgaCA9IGlzTmFOKHRoaXMuaCkgPyAwIDogKHRoaXMuaCArIDEyMCkgKiBkZWcycmFkLFxuICAgICAgICBsID0gK3RoaXMubCxcbiAgICAgICAgYSA9IGlzTmFOKHRoaXMucykgPyAwIDogdGhpcy5zICogbCAqICgxIC0gbCksXG4gICAgICAgIGNvc2ggPSBNYXRoLmNvcyhoKSxcbiAgICAgICAgc2luaCA9IE1hdGguc2luKGgpO1xuICAgIHJldHVybiBuZXcgUmdiKFxuICAgICAgMjU1ICogKGwgKyBhICogKEEgKiBjb3NoICsgQiAqIHNpbmgpKSxcbiAgICAgIDI1NSAqIChsICsgYSAqIChDICogY29zaCArIEQgKiBzaW5oKSksXG4gICAgICAyNTUgKiAobCArIGEgKiAoRSAqIGNvc2gpKSxcbiAgICAgIHRoaXMub3BhY2l0eVxuICAgICk7XG4gIH1cbn0pKTtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNvbnN0cnVjdG9yLCBmYWN0b3J5LCBwcm90b3R5cGUpIHtcbiAgY29uc3RydWN0b3IucHJvdG90eXBlID0gZmFjdG9yeS5wcm90b3R5cGUgPSBwcm90b3R5cGU7XG4gIHByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXh0ZW5kKHBhcmVudCwgZGVmaW5pdGlvbikge1xuICB2YXIgcHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShwYXJlbnQucHJvdG90eXBlKTtcbiAgZm9yICh2YXIga2V5IGluIGRlZmluaXRpb24pIHByb3RvdHlwZVtrZXldID0gZGVmaW5pdGlvbltrZXldO1xuICByZXR1cm4gcHJvdG90eXBlO1xufVxuIiwiZXhwb3J0IHtkZWZhdWx0IGFzIGNvbG9yLCByZ2IsIGhzbH0gZnJvbSBcIi4vY29sb3IuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBsYWIsIGhjbCwgbGNoLCBncmF5fSBmcm9tIFwiLi9sYWIuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBjdWJlaGVsaXh9IGZyb20gXCIuL2N1YmVoZWxpeC5qc1wiO1xuIiwiaW1wb3J0IGRlZmluZSwge2V4dGVuZH0gZnJvbSBcIi4vZGVmaW5lLmpzXCI7XG5pbXBvcnQge0NvbG9yLCByZ2JDb252ZXJ0LCBSZ2J9IGZyb20gXCIuL2NvbG9yLmpzXCI7XG5pbXBvcnQge2RlZzJyYWQsIHJhZDJkZWd9IGZyb20gXCIuL21hdGguanNcIjtcblxuLy8gaHR0cHM6Ly9vYnNlcnZhYmxlaHEuY29tL0BtYm9zdG9jay9sYWItYW5kLXJnYlxudmFyIEsgPSAxOCxcbiAgICBYbiA9IDAuOTY0MjIsXG4gICAgWW4gPSAxLFxuICAgIFpuID0gMC44MjUyMSxcbiAgICB0MCA9IDQgLyAyOSxcbiAgICB0MSA9IDYgLyAyOSxcbiAgICB0MiA9IDMgKiB0MSAqIHQxLFxuICAgIHQzID0gdDEgKiB0MSAqIHQxO1xuXG5mdW5jdGlvbiBsYWJDb252ZXJ0KG8pIHtcbiAgaWYgKG8gaW5zdGFuY2VvZiBMYWIpIHJldHVybiBuZXcgTGFiKG8ubCwgby5hLCBvLmIsIG8ub3BhY2l0eSk7XG4gIGlmIChvIGluc3RhbmNlb2YgSGNsKSByZXR1cm4gaGNsMmxhYihvKTtcbiAgaWYgKCEobyBpbnN0YW5jZW9mIFJnYikpIG8gPSByZ2JDb252ZXJ0KG8pO1xuICB2YXIgciA9IHJnYjJscmdiKG8uciksXG4gICAgICBnID0gcmdiMmxyZ2Ioby5nKSxcbiAgICAgIGIgPSByZ2IybHJnYihvLmIpLFxuICAgICAgeSA9IHh5ejJsYWIoKDAuMjIyNTA0NSAqIHIgKyAwLjcxNjg3ODYgKiBnICsgMC4wNjA2MTY5ICogYikgLyBZbiksIHgsIHo7XG4gIGlmIChyID09PSBnICYmIGcgPT09IGIpIHggPSB6ID0geTsgZWxzZSB7XG4gICAgeCA9IHh5ejJsYWIoKDAuNDM2MDc0NyAqIHIgKyAwLjM4NTA2NDkgKiBnICsgMC4xNDMwODA0ICogYikgLyBYbik7XG4gICAgeiA9IHh5ejJsYWIoKDAuMDEzOTMyMiAqIHIgKyAwLjA5NzEwNDUgKiBnICsgMC43MTQxNzMzICogYikgLyBabik7XG4gIH1cbiAgcmV0dXJuIG5ldyBMYWIoMTE2ICogeSAtIDE2LCA1MDAgKiAoeCAtIHkpLCAyMDAgKiAoeSAtIHopLCBvLm9wYWNpdHkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ3JheShsLCBvcGFjaXR5KSB7XG4gIHJldHVybiBuZXcgTGFiKGwsIDAsIDAsIG9wYWNpdHkgPT0gbnVsbCA/IDEgOiBvcGFjaXR5KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbGFiKGwsIGEsIGIsIG9wYWNpdHkpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgPyBsYWJDb252ZXJ0KGwpIDogbmV3IExhYihsLCBhLCBiLCBvcGFjaXR5ID09IG51bGwgPyAxIDogb3BhY2l0eSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBMYWIobCwgYSwgYiwgb3BhY2l0eSkge1xuICB0aGlzLmwgPSArbDtcbiAgdGhpcy5hID0gK2E7XG4gIHRoaXMuYiA9ICtiO1xuICB0aGlzLm9wYWNpdHkgPSArb3BhY2l0eTtcbn1cblxuZGVmaW5lKExhYiwgbGFiLCBleHRlbmQoQ29sb3IsIHtcbiAgYnJpZ2h0ZXI6IGZ1bmN0aW9uKGspIHtcbiAgICByZXR1cm4gbmV3IExhYih0aGlzLmwgKyBLICogKGsgPT0gbnVsbCA/IDEgOiBrKSwgdGhpcy5hLCB0aGlzLmIsIHRoaXMub3BhY2l0eSk7XG4gIH0sXG4gIGRhcmtlcjogZnVuY3Rpb24oaykge1xuICAgIHJldHVybiBuZXcgTGFiKHRoaXMubCAtIEsgKiAoayA9PSBudWxsID8gMSA6IGspLCB0aGlzLmEsIHRoaXMuYiwgdGhpcy5vcGFjaXR5KTtcbiAgfSxcbiAgcmdiOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgeSA9ICh0aGlzLmwgKyAxNikgLyAxMTYsXG4gICAgICAgIHggPSBpc05hTih0aGlzLmEpID8geSA6IHkgKyB0aGlzLmEgLyA1MDAsXG4gICAgICAgIHogPSBpc05hTih0aGlzLmIpID8geSA6IHkgLSB0aGlzLmIgLyAyMDA7XG4gICAgeCA9IFhuICogbGFiMnh5eih4KTtcbiAgICB5ID0gWW4gKiBsYWIyeHl6KHkpO1xuICAgIHogPSBabiAqIGxhYjJ4eXooeik7XG4gICAgcmV0dXJuIG5ldyBSZ2IoXG4gICAgICBscmdiMnJnYiggMy4xMzM4NTYxICogeCAtIDEuNjE2ODY2NyAqIHkgLSAwLjQ5MDYxNDYgKiB6KSxcbiAgICAgIGxyZ2IycmdiKC0wLjk3ODc2ODQgKiB4ICsgMS45MTYxNDE1ICogeSArIDAuMDMzNDU0MCAqIHopLFxuICAgICAgbHJnYjJyZ2IoIDAuMDcxOTQ1MyAqIHggLSAwLjIyODk5MTQgKiB5ICsgMS40MDUyNDI3ICogeiksXG4gICAgICB0aGlzLm9wYWNpdHlcbiAgICApO1xuICB9XG59KSk7XG5cbmZ1bmN0aW9uIHh5ejJsYWIodCkge1xuICByZXR1cm4gdCA+IHQzID8gTWF0aC5wb3codCwgMSAvIDMpIDogdCAvIHQyICsgdDA7XG59XG5cbmZ1bmN0aW9uIGxhYjJ4eXoodCkge1xuICByZXR1cm4gdCA+IHQxID8gdCAqIHQgKiB0IDogdDIgKiAodCAtIHQwKTtcbn1cblxuZnVuY3Rpb24gbHJnYjJyZ2IoeCkge1xuICByZXR1cm4gMjU1ICogKHggPD0gMC4wMDMxMzA4ID8gMTIuOTIgKiB4IDogMS4wNTUgKiBNYXRoLnBvdyh4LCAxIC8gMi40KSAtIDAuMDU1KTtcbn1cblxuZnVuY3Rpb24gcmdiMmxyZ2IoeCkge1xuICByZXR1cm4gKHggLz0gMjU1KSA8PSAwLjA0MDQ1ID8geCAvIDEyLjkyIDogTWF0aC5wb3coKHggKyAwLjA1NSkgLyAxLjA1NSwgMi40KTtcbn1cblxuZnVuY3Rpb24gaGNsQ29udmVydChvKSB7XG4gIGlmIChvIGluc3RhbmNlb2YgSGNsKSByZXR1cm4gbmV3IEhjbChvLmgsIG8uYywgby5sLCBvLm9wYWNpdHkpO1xuICBpZiAoIShvIGluc3RhbmNlb2YgTGFiKSkgbyA9IGxhYkNvbnZlcnQobyk7XG4gIGlmIChvLmEgPT09IDAgJiYgby5iID09PSAwKSByZXR1cm4gbmV3IEhjbChOYU4sIDAgPCBvLmwgJiYgby5sIDwgMTAwID8gMCA6IE5hTiwgby5sLCBvLm9wYWNpdHkpO1xuICB2YXIgaCA9IE1hdGguYXRhbjIoby5iLCBvLmEpICogcmFkMmRlZztcbiAgcmV0dXJuIG5ldyBIY2woaCA8IDAgPyBoICsgMzYwIDogaCwgTWF0aC5zcXJ0KG8uYSAqIG8uYSArIG8uYiAqIG8uYiksIG8ubCwgby5vcGFjaXR5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxjaChsLCBjLCBoLCBvcGFjaXR5KSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID09PSAxID8gaGNsQ29udmVydChsKSA6IG5ldyBIY2woaCwgYywgbCwgb3BhY2l0eSA9PSBudWxsID8gMSA6IG9wYWNpdHkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGNsKGgsIGMsIGwsIG9wYWNpdHkpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgPyBoY2xDb252ZXJ0KGgpIDogbmV3IEhjbChoLCBjLCBsLCBvcGFjaXR5ID09IG51bGwgPyAxIDogb3BhY2l0eSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBIY2woaCwgYywgbCwgb3BhY2l0eSkge1xuICB0aGlzLmggPSAraDtcbiAgdGhpcy5jID0gK2M7XG4gIHRoaXMubCA9ICtsO1xuICB0aGlzLm9wYWNpdHkgPSArb3BhY2l0eTtcbn1cblxuZnVuY3Rpb24gaGNsMmxhYihvKSB7XG4gIGlmIChpc05hTihvLmgpKSByZXR1cm4gbmV3IExhYihvLmwsIDAsIDAsIG8ub3BhY2l0eSk7XG4gIHZhciBoID0gby5oICogZGVnMnJhZDtcbiAgcmV0dXJuIG5ldyBMYWIoby5sLCBNYXRoLmNvcyhoKSAqIG8uYywgTWF0aC5zaW4oaCkgKiBvLmMsIG8ub3BhY2l0eSk7XG59XG5cbmRlZmluZShIY2wsIGhjbCwgZXh0ZW5kKENvbG9yLCB7XG4gIGJyaWdodGVyOiBmdW5jdGlvbihrKSB7XG4gICAgcmV0dXJuIG5ldyBIY2wodGhpcy5oLCB0aGlzLmMsIHRoaXMubCArIEsgKiAoayA9PSBudWxsID8gMSA6IGspLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICBkYXJrZXI6IGZ1bmN0aW9uKGspIHtcbiAgICByZXR1cm4gbmV3IEhjbCh0aGlzLmgsIHRoaXMuYywgdGhpcy5sIC0gSyAqIChrID09IG51bGwgPyAxIDogayksIHRoaXMub3BhY2l0eSk7XG4gIH0sXG4gIHJnYjogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGhjbDJsYWIodGhpcykucmdiKCk7XG4gIH1cbn0pKTtcbiIsImV4cG9ydCB2YXIgZGVnMnJhZCA9IE1hdGguUEkgLyAxODA7XG5leHBvcnQgdmFyIHJhZDJkZWcgPSAxODAgLyBNYXRoLlBJO1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24ocmluZykge1xuICB2YXIgaSA9IDAsIG4gPSByaW5nLmxlbmd0aCwgYXJlYSA9IHJpbmdbbiAtIDFdWzFdICogcmluZ1swXVswXSAtIHJpbmdbbiAtIDFdWzBdICogcmluZ1swXVsxXTtcbiAgd2hpbGUgKCsraSA8IG4pIGFyZWEgKz0gcmluZ1tpIC0gMV1bMV0gKiByaW5nW2ldWzBdIC0gcmluZ1tpIC0gMV1bMF0gKiByaW5nW2ldWzFdO1xuICByZXR1cm4gYXJlYTtcbn1cbiIsInZhciBhcnJheSA9IEFycmF5LnByb3RvdHlwZTtcblxuZXhwb3J0IHZhciBzbGljZSA9IGFycmF5LnNsaWNlO1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICByZXR1cm4gYSAtIGI7XG59XG4iLCIvLyBUT0RPIE9wdGltaXplIGVkZ2UgY2FzZXMuXG4vLyBUT0RPIE9wdGltaXplIGluZGV4IGNhbGN1bGF0aW9uLlxuLy8gVE9ETyBPcHRpbWl6ZSBhcmd1bWVudHMuXG5leHBvcnQgZnVuY3Rpb24gYmx1clgoc291cmNlLCB0YXJnZXQsIHIpIHtcbiAgdmFyIG4gPSBzb3VyY2Uud2lkdGgsXG4gICAgICBtID0gc291cmNlLmhlaWdodCxcbiAgICAgIHcgPSAociA8PCAxKSArIDE7XG4gIGZvciAodmFyIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIHNyID0gMDsgaSA8IG4gKyByOyArK2kpIHtcbiAgICAgIGlmIChpIDwgbikge1xuICAgICAgICBzciArPSBzb3VyY2UuZGF0YVtpICsgaiAqIG5dO1xuICAgICAgfVxuICAgICAgaWYgKGkgPj0gcikge1xuICAgICAgICBpZiAoaSA+PSB3KSB7XG4gICAgICAgICAgc3IgLT0gc291cmNlLmRhdGFbaSAtIHcgKyBqICogbl07XG4gICAgICAgIH1cbiAgICAgICAgdGFyZ2V0LmRhdGFbaSAtIHIgKyBqICogbl0gPSBzciAvIE1hdGgubWluKGkgKyAxLCBuIC0gMSArIHcgLSBpLCB3KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLy8gVE9ETyBPcHRpbWl6ZSBlZGdlIGNhc2VzLlxuLy8gVE9ETyBPcHRpbWl6ZSBpbmRleCBjYWxjdWxhdGlvbi5cbi8vIFRPRE8gT3B0aW1pemUgYXJndW1lbnRzLlxuZXhwb3J0IGZ1bmN0aW9uIGJsdXJZKHNvdXJjZSwgdGFyZ2V0LCByKSB7XG4gIHZhciBuID0gc291cmNlLndpZHRoLFxuICAgICAgbSA9IHNvdXJjZS5oZWlnaHQsXG4gICAgICB3ID0gKHIgPDwgMSkgKyAxO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG47ICsraSkge1xuICAgIGZvciAodmFyIGogPSAwLCBzciA9IDA7IGogPCBtICsgcjsgKytqKSB7XG4gICAgICBpZiAoaiA8IG0pIHtcbiAgICAgICAgc3IgKz0gc291cmNlLmRhdGFbaSArIGogKiBuXTtcbiAgICAgIH1cbiAgICAgIGlmIChqID49IHIpIHtcbiAgICAgICAgaWYgKGogPj0gdykge1xuICAgICAgICAgIHNyIC09IHNvdXJjZS5kYXRhW2kgKyAoaiAtIHcpICogbl07XG4gICAgICAgIH1cbiAgICAgICAgdGFyZ2V0LmRhdGFbaSArIChqIC0gcikgKiBuXSA9IHNyIC8gTWF0aC5taW4oaiArIDEsIG0gLSAxICsgdyAtIGosIHcpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHg7XG4gIH07XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihyaW5nLCBob2xlKSB7XG4gIHZhciBpID0gLTEsIG4gPSBob2xlLmxlbmd0aCwgYztcbiAgd2hpbGUgKCsraSA8IG4pIGlmIChjID0gcmluZ0NvbnRhaW5zKHJpbmcsIGhvbGVbaV0pKSByZXR1cm4gYztcbiAgcmV0dXJuIDA7XG59XG5cbmZ1bmN0aW9uIHJpbmdDb250YWlucyhyaW5nLCBwb2ludCkge1xuICB2YXIgeCA9IHBvaW50WzBdLCB5ID0gcG9pbnRbMV0sIGNvbnRhaW5zID0gLTE7XG4gIGZvciAodmFyIGkgPSAwLCBuID0gcmluZy5sZW5ndGgsIGogPSBuIC0gMTsgaSA8IG47IGogPSBpKyspIHtcbiAgICB2YXIgcGkgPSByaW5nW2ldLCB4aSA9IHBpWzBdLCB5aSA9IHBpWzFdLCBwaiA9IHJpbmdbal0sIHhqID0gcGpbMF0sIHlqID0gcGpbMV07XG4gICAgaWYgKHNlZ21lbnRDb250YWlucyhwaSwgcGosIHBvaW50KSkgcmV0dXJuIDA7XG4gICAgaWYgKCgoeWkgPiB5KSAhPT0gKHlqID4geSkpICYmICgoeCA8ICh4aiAtIHhpKSAqICh5IC0geWkpIC8gKHlqIC0geWkpICsgeGkpKSkgY29udGFpbnMgPSAtY29udGFpbnM7XG4gIH1cbiAgcmV0dXJuIGNvbnRhaW5zO1xufVxuXG5mdW5jdGlvbiBzZWdtZW50Q29udGFpbnMoYSwgYiwgYykge1xuICB2YXIgaTsgcmV0dXJuIGNvbGxpbmVhcihhLCBiLCBjKSAmJiB3aXRoaW4oYVtpID0gKyhhWzBdID09PSBiWzBdKV0sIGNbaV0sIGJbaV0pO1xufVxuXG5mdW5jdGlvbiBjb2xsaW5lYXIoYSwgYiwgYykge1xuICByZXR1cm4gKGJbMF0gLSBhWzBdKSAqIChjWzFdIC0gYVsxXSkgPT09IChjWzBdIC0gYVswXSkgKiAoYlsxXSAtIGFbMV0pO1xufVxuXG5mdW5jdGlvbiB3aXRoaW4ocCwgcSwgcikge1xuICByZXR1cm4gcCA8PSBxICYmIHEgPD0gciB8fCByIDw9IHEgJiYgcSA8PSBwO1xufVxuIiwiaW1wb3J0IHtleHRlbnQsIHRocmVzaG9sZFN0dXJnZXMsIHRpY2tTdGVwLCByYW5nZX0gZnJvbSBcImQzLWFycmF5XCI7XG5pbXBvcnQge3NsaWNlfSBmcm9tIFwiLi9hcnJheVwiO1xuaW1wb3J0IGFzY2VuZGluZyBmcm9tIFwiLi9hc2NlbmRpbmdcIjtcbmltcG9ydCBhcmVhIGZyb20gXCIuL2FyZWFcIjtcbmltcG9ydCBjb25zdGFudCBmcm9tIFwiLi9jb25zdGFudFwiO1xuaW1wb3J0IGNvbnRhaW5zIGZyb20gXCIuL2NvbnRhaW5zXCI7XG5pbXBvcnQgbm9vcCBmcm9tIFwiLi9ub29wXCI7XG5cbnZhciBjYXNlcyA9IFtcbiAgW10sXG4gIFtbWzEuMCwgMS41XSwgWzAuNSwgMS4wXV1dLFxuICBbW1sxLjUsIDEuMF0sIFsxLjAsIDEuNV1dXSxcbiAgW1tbMS41LCAxLjBdLCBbMC41LCAxLjBdXV0sXG4gIFtbWzEuMCwgMC41XSwgWzEuNSwgMS4wXV1dLFxuICBbW1sxLjAsIDEuNV0sIFswLjUsIDEuMF1dLCBbWzEuMCwgMC41XSwgWzEuNSwgMS4wXV1dLFxuICBbW1sxLjAsIDAuNV0sIFsxLjAsIDEuNV1dXSxcbiAgW1tbMS4wLCAwLjVdLCBbMC41LCAxLjBdXV0sXG4gIFtbWzAuNSwgMS4wXSwgWzEuMCwgMC41XV1dLFxuICBbW1sxLjAsIDEuNV0sIFsxLjAsIDAuNV1dXSxcbiAgW1tbMC41LCAxLjBdLCBbMS4wLCAwLjVdXSwgW1sxLjUsIDEuMF0sIFsxLjAsIDEuNV1dXSxcbiAgW1tbMS41LCAxLjBdLCBbMS4wLCAwLjVdXV0sXG4gIFtbWzAuNSwgMS4wXSwgWzEuNSwgMS4wXV1dLFxuICBbW1sxLjAsIDEuNV0sIFsxLjUsIDEuMF1dXSxcbiAgW1tbMC41LCAxLjBdLCBbMS4wLCAxLjVdXV0sXG4gIFtdXG5dO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIGR4ID0gMSxcbiAgICAgIGR5ID0gMSxcbiAgICAgIHRocmVzaG9sZCA9IHRocmVzaG9sZFN0dXJnZXMsXG4gICAgICBzbW9vdGggPSBzbW9vdGhMaW5lYXI7XG5cbiAgZnVuY3Rpb24gY29udG91cnModmFsdWVzKSB7XG4gICAgdmFyIHR6ID0gdGhyZXNob2xkKHZhbHVlcyk7XG5cbiAgICAvLyBDb252ZXJ0IG51bWJlciBvZiB0aHJlc2hvbGRzIGludG8gdW5pZm9ybSB0aHJlc2hvbGRzLlxuICAgIGlmICghQXJyYXkuaXNBcnJheSh0eikpIHtcbiAgICAgIHZhciBkb21haW4gPSBleHRlbnQodmFsdWVzKSwgc3RhcnQgPSBkb21haW5bMF0sIHN0b3AgPSBkb21haW5bMV07XG4gICAgICB0eiA9IHRpY2tTdGVwKHN0YXJ0LCBzdG9wLCB0eik7XG4gICAgICB0eiA9IHJhbmdlKE1hdGguZmxvb3Ioc3RhcnQgLyB0eikgKiB0eiwgTWF0aC5mbG9vcihzdG9wIC8gdHopICogdHosIHR6KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdHogPSB0ei5zbGljZSgpLnNvcnQoYXNjZW5kaW5nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHoubWFwKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICByZXR1cm4gY29udG91cih2YWx1ZXMsIHZhbHVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIEFjY3VtdWxhdGUsIHNtb290aCBjb250b3VyIHJpbmdzLCBhc3NpZ24gaG9sZXMgdG8gZXh0ZXJpb3IgcmluZ3MuXG4gIC8vIEJhc2VkIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS9tYm9zdG9jay9zaGFwZWZpbGUvYmxvYi92MC42LjIvc2hwL3BvbHlnb24uanNcbiAgZnVuY3Rpb24gY29udG91cih2YWx1ZXMsIHZhbHVlKSB7XG4gICAgdmFyIHBvbHlnb25zID0gW10sXG4gICAgICAgIGhvbGVzID0gW107XG5cbiAgICBpc29yaW5ncyh2YWx1ZXMsIHZhbHVlLCBmdW5jdGlvbihyaW5nKSB7XG4gICAgICBzbW9vdGgocmluZywgdmFsdWVzLCB2YWx1ZSk7XG4gICAgICBpZiAoYXJlYShyaW5nKSA+IDApIHBvbHlnb25zLnB1c2goW3JpbmddKTtcbiAgICAgIGVsc2UgaG9sZXMucHVzaChyaW5nKTtcbiAgICB9KTtcblxuICAgIGhvbGVzLmZvckVhY2goZnVuY3Rpb24oaG9sZSkge1xuICAgICAgZm9yICh2YXIgaSA9IDAsIG4gPSBwb2x5Z29ucy5sZW5ndGgsIHBvbHlnb247IGkgPCBuOyArK2kpIHtcbiAgICAgICAgaWYgKGNvbnRhaW5zKChwb2x5Z29uID0gcG9seWdvbnNbaV0pWzBdLCBob2xlKSAhPT0gLTEpIHtcbiAgICAgICAgICBwb2x5Z29uLnB1c2goaG9sZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJNdWx0aVBvbHlnb25cIixcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGNvb3JkaW5hdGVzOiBwb2x5Z29uc1xuICAgIH07XG4gIH1cblxuICAvLyBNYXJjaGluZyBzcXVhcmVzIHdpdGggaXNvbGluZXMgc3RpdGNoZWQgaW50byByaW5ncy5cbiAgLy8gQmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL3RvcG9qc29uL3RvcG9qc29uLWNsaWVudC9ibG9iL3YzLjAuMC9zcmMvc3RpdGNoLmpzXG4gIGZ1bmN0aW9uIGlzb3JpbmdzKHZhbHVlcywgdmFsdWUsIGNhbGxiYWNrKSB7XG4gICAgdmFyIGZyYWdtZW50QnlTdGFydCA9IG5ldyBBcnJheSxcbiAgICAgICAgZnJhZ21lbnRCeUVuZCA9IG5ldyBBcnJheSxcbiAgICAgICAgeCwgeSwgdDAsIHQxLCB0MiwgdDM7XG5cbiAgICAvLyBTcGVjaWFsIGNhc2UgZm9yIHRoZSBmaXJzdCByb3cgKHkgPSAtMSwgdDIgPSB0MyA9IDApLlxuICAgIHggPSB5ID0gLTE7XG4gICAgdDEgPSB2YWx1ZXNbMF0gPj0gdmFsdWU7XG4gICAgY2FzZXNbdDEgPDwgMV0uZm9yRWFjaChzdGl0Y2gpO1xuICAgIHdoaWxlICgrK3ggPCBkeCAtIDEpIHtcbiAgICAgIHQwID0gdDEsIHQxID0gdmFsdWVzW3ggKyAxXSA+PSB2YWx1ZTtcbiAgICAgIGNhc2VzW3QwIHwgdDEgPDwgMV0uZm9yRWFjaChzdGl0Y2gpO1xuICAgIH1cbiAgICBjYXNlc1t0MSA8PCAwXS5mb3JFYWNoKHN0aXRjaCk7XG5cbiAgICAvLyBHZW5lcmFsIGNhc2UgZm9yIHRoZSBpbnRlcm1lZGlhdGUgcm93cy5cbiAgICB3aGlsZSAoKyt5IDwgZHkgLSAxKSB7XG4gICAgICB4ID0gLTE7XG4gICAgICB0MSA9IHZhbHVlc1t5ICogZHggKyBkeF0gPj0gdmFsdWU7XG4gICAgICB0MiA9IHZhbHVlc1t5ICogZHhdID49IHZhbHVlO1xuICAgICAgY2FzZXNbdDEgPDwgMSB8IHQyIDw8IDJdLmZvckVhY2goc3RpdGNoKTtcbiAgICAgIHdoaWxlICgrK3ggPCBkeCAtIDEpIHtcbiAgICAgICAgdDAgPSB0MSwgdDEgPSB2YWx1ZXNbeSAqIGR4ICsgZHggKyB4ICsgMV0gPj0gdmFsdWU7XG4gICAgICAgIHQzID0gdDIsIHQyID0gdmFsdWVzW3kgKiBkeCArIHggKyAxXSA+PSB2YWx1ZTtcbiAgICAgICAgY2FzZXNbdDAgfCB0MSA8PCAxIHwgdDIgPDwgMiB8IHQzIDw8IDNdLmZvckVhY2goc3RpdGNoKTtcbiAgICAgIH1cbiAgICAgIGNhc2VzW3QxIHwgdDIgPDwgM10uZm9yRWFjaChzdGl0Y2gpO1xuICAgIH1cblxuICAgIC8vIFNwZWNpYWwgY2FzZSBmb3IgdGhlIGxhc3Qgcm93ICh5ID0gZHkgLSAxLCB0MCA9IHQxID0gMCkuXG4gICAgeCA9IC0xO1xuICAgIHQyID0gdmFsdWVzW3kgKiBkeF0gPj0gdmFsdWU7XG4gICAgY2FzZXNbdDIgPDwgMl0uZm9yRWFjaChzdGl0Y2gpO1xuICAgIHdoaWxlICgrK3ggPCBkeCAtIDEpIHtcbiAgICAgIHQzID0gdDIsIHQyID0gdmFsdWVzW3kgKiBkeCArIHggKyAxXSA+PSB2YWx1ZTtcbiAgICAgIGNhc2VzW3QyIDw8IDIgfCB0MyA8PCAzXS5mb3JFYWNoKHN0aXRjaCk7XG4gICAgfVxuICAgIGNhc2VzW3QyIDw8IDNdLmZvckVhY2goc3RpdGNoKTtcblxuICAgIGZ1bmN0aW9uIHN0aXRjaChsaW5lKSB7XG4gICAgICB2YXIgc3RhcnQgPSBbbGluZVswXVswXSArIHgsIGxpbmVbMF1bMV0gKyB5XSxcbiAgICAgICAgICBlbmQgPSBbbGluZVsxXVswXSArIHgsIGxpbmVbMV1bMV0gKyB5XSxcbiAgICAgICAgICBzdGFydEluZGV4ID0gaW5kZXgoc3RhcnQpLFxuICAgICAgICAgIGVuZEluZGV4ID0gaW5kZXgoZW5kKSxcbiAgICAgICAgICBmLCBnO1xuICAgICAgaWYgKGYgPSBmcmFnbWVudEJ5RW5kW3N0YXJ0SW5kZXhdKSB7XG4gICAgICAgIGlmIChnID0gZnJhZ21lbnRCeVN0YXJ0W2VuZEluZGV4XSkge1xuICAgICAgICAgIGRlbGV0ZSBmcmFnbWVudEJ5RW5kW2YuZW5kXTtcbiAgICAgICAgICBkZWxldGUgZnJhZ21lbnRCeVN0YXJ0W2cuc3RhcnRdO1xuICAgICAgICAgIGlmIChmID09PSBnKSB7XG4gICAgICAgICAgICBmLnJpbmcucHVzaChlbmQpO1xuICAgICAgICAgICAgY2FsbGJhY2soZi5yaW5nKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZnJhZ21lbnRCeVN0YXJ0W2Yuc3RhcnRdID0gZnJhZ21lbnRCeUVuZFtnLmVuZF0gPSB7c3RhcnQ6IGYuc3RhcnQsIGVuZDogZy5lbmQsIHJpbmc6IGYucmluZy5jb25jYXQoZy5yaW5nKX07XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRlbGV0ZSBmcmFnbWVudEJ5RW5kW2YuZW5kXTtcbiAgICAgICAgICBmLnJpbmcucHVzaChlbmQpO1xuICAgICAgICAgIGZyYWdtZW50QnlFbmRbZi5lbmQgPSBlbmRJbmRleF0gPSBmO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGYgPSBmcmFnbWVudEJ5U3RhcnRbZW5kSW5kZXhdKSB7XG4gICAgICAgIGlmIChnID0gZnJhZ21lbnRCeUVuZFtzdGFydEluZGV4XSkge1xuICAgICAgICAgIGRlbGV0ZSBmcmFnbWVudEJ5U3RhcnRbZi5zdGFydF07XG4gICAgICAgICAgZGVsZXRlIGZyYWdtZW50QnlFbmRbZy5lbmRdO1xuICAgICAgICAgIGlmIChmID09PSBnKSB7XG4gICAgICAgICAgICBmLnJpbmcucHVzaChlbmQpO1xuICAgICAgICAgICAgY2FsbGJhY2soZi5yaW5nKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZnJhZ21lbnRCeVN0YXJ0W2cuc3RhcnRdID0gZnJhZ21lbnRCeUVuZFtmLmVuZF0gPSB7c3RhcnQ6IGcuc3RhcnQsIGVuZDogZi5lbmQsIHJpbmc6IGcucmluZy5jb25jYXQoZi5yaW5nKX07XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRlbGV0ZSBmcmFnbWVudEJ5U3RhcnRbZi5zdGFydF07XG4gICAgICAgICAgZi5yaW5nLnVuc2hpZnQoc3RhcnQpO1xuICAgICAgICAgIGZyYWdtZW50QnlTdGFydFtmLnN0YXJ0ID0gc3RhcnRJbmRleF0gPSBmO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmcmFnbWVudEJ5U3RhcnRbc3RhcnRJbmRleF0gPSBmcmFnbWVudEJ5RW5kW2VuZEluZGV4XSA9IHtzdGFydDogc3RhcnRJbmRleCwgZW5kOiBlbmRJbmRleCwgcmluZzogW3N0YXJ0LCBlbmRdfTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpbmRleChwb2ludCkge1xuICAgIHJldHVybiBwb2ludFswXSAqIDIgKyBwb2ludFsxXSAqIChkeCArIDEpICogNDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNtb290aExpbmVhcihyaW5nLCB2YWx1ZXMsIHZhbHVlKSB7XG4gICAgcmluZy5mb3JFYWNoKGZ1bmN0aW9uKHBvaW50KSB7XG4gICAgICB2YXIgeCA9IHBvaW50WzBdLFxuICAgICAgICAgIHkgPSBwb2ludFsxXSxcbiAgICAgICAgICB4dCA9IHggfCAwLFxuICAgICAgICAgIHl0ID0geSB8IDAsXG4gICAgICAgICAgdjAsXG4gICAgICAgICAgdjEgPSB2YWx1ZXNbeXQgKiBkeCArIHh0XTtcbiAgICAgIGlmICh4ID4gMCAmJiB4IDwgZHggJiYgeHQgPT09IHgpIHtcbiAgICAgICAgdjAgPSB2YWx1ZXNbeXQgKiBkeCArIHh0IC0gMV07XG4gICAgICAgIHBvaW50WzBdID0geCArICh2YWx1ZSAtIHYwKSAvICh2MSAtIHYwKSAtIDAuNTtcbiAgICAgIH1cbiAgICAgIGlmICh5ID4gMCAmJiB5IDwgZHkgJiYgeXQgPT09IHkpIHtcbiAgICAgICAgdjAgPSB2YWx1ZXNbKHl0IC0gMSkgKiBkeCArIHh0XTtcbiAgICAgICAgcG9pbnRbMV0gPSB5ICsgKHZhbHVlIC0gdjApIC8gKHYxIC0gdjApIC0gMC41O1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgY29udG91cnMuY29udG91ciA9IGNvbnRvdXI7XG5cbiAgY29udG91cnMuc2l6ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBbZHgsIGR5XTtcbiAgICB2YXIgXzAgPSBNYXRoLmNlaWwoX1swXSksIF8xID0gTWF0aC5jZWlsKF9bMV0pO1xuICAgIGlmICghKF8wID4gMCkgfHwgIShfMSA+IDApKSB0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIHNpemVcIik7XG4gICAgcmV0dXJuIGR4ID0gXzAsIGR5ID0gXzEsIGNvbnRvdXJzO1xuICB9O1xuXG4gIGNvbnRvdXJzLnRocmVzaG9sZHMgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodGhyZXNob2xkID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBBcnJheS5pc0FycmF5KF8pID8gY29uc3RhbnQoc2xpY2UuY2FsbChfKSkgOiBjb25zdGFudChfKSwgY29udG91cnMpIDogdGhyZXNob2xkO1xuICB9O1xuXG4gIGNvbnRvdXJzLnNtb290aCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChzbW9vdGggPSBfID8gc21vb3RoTGluZWFyIDogbm9vcCwgY29udG91cnMpIDogc21vb3RoID09PSBzbW9vdGhMaW5lYXI7XG4gIH07XG5cbiAgcmV0dXJuIGNvbnRvdXJzO1xufVxuIiwiaW1wb3J0IHttYXgsIHJhbmdlLCB0aWNrU3RlcH0gZnJvbSBcImQzLWFycmF5XCI7XG5pbXBvcnQge3NsaWNlfSBmcm9tIFwiLi9hcnJheVwiO1xuaW1wb3J0IHtibHVyWCwgYmx1cll9IGZyb20gXCIuL2JsdXJcIjtcbmltcG9ydCBjb25zdGFudCBmcm9tIFwiLi9jb25zdGFudFwiO1xuaW1wb3J0IGNvbnRvdXJzIGZyb20gXCIuL2NvbnRvdXJzXCI7XG5cbmZ1bmN0aW9uIGRlZmF1bHRYKGQpIHtcbiAgcmV0dXJuIGRbMF07XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRZKGQpIHtcbiAgcmV0dXJuIGRbMV07XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRXZWlnaHQoKSB7XG4gIHJldHVybiAxO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIHggPSBkZWZhdWx0WCxcbiAgICAgIHkgPSBkZWZhdWx0WSxcbiAgICAgIHdlaWdodCA9IGRlZmF1bHRXZWlnaHQsXG4gICAgICBkeCA9IDk2MCxcbiAgICAgIGR5ID0gNTAwLFxuICAgICAgciA9IDIwLCAvLyBibHVyIHJhZGl1c1xuICAgICAgayA9IDIsIC8vIGxvZzIoZ3JpZCBjZWxsIHNpemUpXG4gICAgICBvID0gciAqIDMsIC8vIGdyaWQgb2Zmc2V0LCB0byBwYWQgZm9yIGJsdXJcbiAgICAgIG4gPSAoZHggKyBvICogMikgPj4gaywgLy8gZ3JpZCB3aWR0aFxuICAgICAgbSA9IChkeSArIG8gKiAyKSA+PiBrLCAvLyBncmlkIGhlaWdodFxuICAgICAgdGhyZXNob2xkID0gY29uc3RhbnQoMjApO1xuXG4gIGZ1bmN0aW9uIGRlbnNpdHkoZGF0YSkge1xuICAgIHZhciB2YWx1ZXMwID0gbmV3IEZsb2F0MzJBcnJheShuICogbSksXG4gICAgICAgIHZhbHVlczEgPSBuZXcgRmxvYXQzMkFycmF5KG4gKiBtKTtcblxuICAgIGRhdGEuZm9yRWFjaChmdW5jdGlvbihkLCBpLCBkYXRhKSB7XG4gICAgICB2YXIgeGkgPSAoK3goZCwgaSwgZGF0YSkgKyBvKSA+PiBrLFxuICAgICAgICAgIHlpID0gKCt5KGQsIGksIGRhdGEpICsgbykgPj4gayxcbiAgICAgICAgICB3aSA9ICt3ZWlnaHQoZCwgaSwgZGF0YSk7XG4gICAgICBpZiAoeGkgPj0gMCAmJiB4aSA8IG4gJiYgeWkgPj0gMCAmJiB5aSA8IG0pIHtcbiAgICAgICAgdmFsdWVzMFt4aSArIHlpICogbl0gKz0gd2k7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBUT0RPIE9wdGltaXplLlxuICAgIGJsdXJYKHt3aWR0aDogbiwgaGVpZ2h0OiBtLCBkYXRhOiB2YWx1ZXMwfSwge3dpZHRoOiBuLCBoZWlnaHQ6IG0sIGRhdGE6IHZhbHVlczF9LCByID4+IGspO1xuICAgIGJsdXJZKHt3aWR0aDogbiwgaGVpZ2h0OiBtLCBkYXRhOiB2YWx1ZXMxfSwge3dpZHRoOiBuLCBoZWlnaHQ6IG0sIGRhdGE6IHZhbHVlczB9LCByID4+IGspO1xuICAgIGJsdXJYKHt3aWR0aDogbiwgaGVpZ2h0OiBtLCBkYXRhOiB2YWx1ZXMwfSwge3dpZHRoOiBuLCBoZWlnaHQ6IG0sIGRhdGE6IHZhbHVlczF9LCByID4+IGspO1xuICAgIGJsdXJZKHt3aWR0aDogbiwgaGVpZ2h0OiBtLCBkYXRhOiB2YWx1ZXMxfSwge3dpZHRoOiBuLCBoZWlnaHQ6IG0sIGRhdGE6IHZhbHVlczB9LCByID4+IGspO1xuICAgIGJsdXJYKHt3aWR0aDogbiwgaGVpZ2h0OiBtLCBkYXRhOiB2YWx1ZXMwfSwge3dpZHRoOiBuLCBoZWlnaHQ6IG0sIGRhdGE6IHZhbHVlczF9LCByID4+IGspO1xuICAgIGJsdXJZKHt3aWR0aDogbiwgaGVpZ2h0OiBtLCBkYXRhOiB2YWx1ZXMxfSwge3dpZHRoOiBuLCBoZWlnaHQ6IG0sIGRhdGE6IHZhbHVlczB9LCByID4+IGspO1xuXG4gICAgdmFyIHR6ID0gdGhyZXNob2xkKHZhbHVlczApO1xuXG4gICAgLy8gQ29udmVydCBudW1iZXIgb2YgdGhyZXNob2xkcyBpbnRvIHVuaWZvcm0gdGhyZXNob2xkcy5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodHopKSB7XG4gICAgICB2YXIgc3RvcCA9IG1heCh2YWx1ZXMwKTtcbiAgICAgIHR6ID0gdGlja1N0ZXAoMCwgc3RvcCwgdHopO1xuICAgICAgdHogPSByYW5nZSgwLCBNYXRoLmZsb29yKHN0b3AgLyB0eikgKiB0eiwgdHopO1xuICAgICAgdHouc2hpZnQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udG91cnMoKVxuICAgICAgICAudGhyZXNob2xkcyh0eilcbiAgICAgICAgLnNpemUoW24sIG1dKVxuICAgICAgKHZhbHVlczApXG4gICAgICAgIC5tYXAodHJhbnNmb3JtKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRyYW5zZm9ybShnZW9tZXRyeSkge1xuICAgIGdlb21ldHJ5LnZhbHVlICo9IE1hdGgucG93KDIsIC0yICogayk7IC8vIERlbnNpdHkgaW4gcG9pbnRzIHBlciBzcXVhcmUgcGl4ZWwuXG4gICAgZ2VvbWV0cnkuY29vcmRpbmF0ZXMuZm9yRWFjaCh0cmFuc2Zvcm1Qb2x5Z29uKTtcbiAgICByZXR1cm4gZ2VvbWV0cnk7XG4gIH1cblxuICBmdW5jdGlvbiB0cmFuc2Zvcm1Qb2x5Z29uKGNvb3JkaW5hdGVzKSB7XG4gICAgY29vcmRpbmF0ZXMuZm9yRWFjaCh0cmFuc2Zvcm1SaW5nKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRyYW5zZm9ybVJpbmcoY29vcmRpbmF0ZXMpIHtcbiAgICBjb29yZGluYXRlcy5mb3JFYWNoKHRyYW5zZm9ybVBvaW50KTtcbiAgfVxuXG4gIC8vIFRPRE8gT3B0aW1pemUuXG4gIGZ1bmN0aW9uIHRyYW5zZm9ybVBvaW50KGNvb3JkaW5hdGVzKSB7XG4gICAgY29vcmRpbmF0ZXNbMF0gPSBjb29yZGluYXRlc1swXSAqIE1hdGgucG93KDIsIGspIC0gbztcbiAgICBjb29yZGluYXRlc1sxXSA9IGNvb3JkaW5hdGVzWzFdICogTWF0aC5wb3coMiwgaykgLSBvO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzaXplKCkge1xuICAgIG8gPSByICogMztcbiAgICBuID0gKGR4ICsgbyAqIDIpID4+IGs7XG4gICAgbSA9IChkeSArIG8gKiAyKSA+PiBrO1xuICAgIHJldHVybiBkZW5zaXR5O1xuICB9XG5cbiAgZGVuc2l0eS54ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHggPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgZGVuc2l0eSkgOiB4O1xuICB9O1xuXG4gIGRlbnNpdHkueSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh5ID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGRlbnNpdHkpIDogeTtcbiAgfTtcblxuICBkZW5zaXR5LndlaWdodCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh3ZWlnaHQgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgZGVuc2l0eSkgOiB3ZWlnaHQ7XG4gIH07XG5cbiAgZGVuc2l0eS5zaXplID0gZnVuY3Rpb24oXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIFtkeCwgZHldO1xuICAgIHZhciBfMCA9IE1hdGguY2VpbChfWzBdKSwgXzEgPSBNYXRoLmNlaWwoX1sxXSk7XG4gICAgaWYgKCEoXzAgPj0gMCkgJiYgIShfMCA+PSAwKSkgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBzaXplXCIpO1xuICAgIHJldHVybiBkeCA9IF8wLCBkeSA9IF8xLCByZXNpemUoKTtcbiAgfTtcblxuICBkZW5zaXR5LmNlbGxTaXplID0gZnVuY3Rpb24oXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIDEgPDwgaztcbiAgICBpZiAoISgoXyA9ICtfKSA+PSAxKSkgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBjZWxsIHNpemVcIik7XG4gICAgcmV0dXJuIGsgPSBNYXRoLmZsb29yKE1hdGgubG9nKF8pIC8gTWF0aC5MTjIpLCByZXNpemUoKTtcbiAgfTtcblxuICBkZW5zaXR5LnRocmVzaG9sZHMgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodGhyZXNob2xkID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBBcnJheS5pc0FycmF5KF8pID8gY29uc3RhbnQoc2xpY2UuY2FsbChfKSkgOiBjb25zdGFudChfKSwgZGVuc2l0eSkgOiB0aHJlc2hvbGQ7XG4gIH07XG5cbiAgZGVuc2l0eS5iYW5kd2lkdGggPSBmdW5jdGlvbihfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gTWF0aC5zcXJ0KHIgKiAociArIDEpKTtcbiAgICBpZiAoISgoXyA9ICtfKSA+PSAwKSkgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBiYW5kd2lkdGhcIik7XG4gICAgcmV0dXJuIHIgPSBNYXRoLnJvdW5kKChNYXRoLnNxcnQoNCAqIF8gKiBfICsgMSkgLSAxKSAvIDIpLCByZXNpemUoKTtcbiAgfTtcblxuICByZXR1cm4gZGVuc2l0eTtcbn1cbiIsImV4cG9ydCB7ZGVmYXVsdCBhcyBjb250b3Vyc30gZnJvbSBcIi4vY29udG91cnNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBjb250b3VyRGVuc2l0eX0gZnJvbSBcIi4vZGVuc2l0eVwiO1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7fVxuIiwidmFyIG5vb3AgPSB7dmFsdWU6IGZ1bmN0aW9uKCkge319O1xuXG5mdW5jdGlvbiBkaXNwYXRjaCgpIHtcbiAgZm9yICh2YXIgaSA9IDAsIG4gPSBhcmd1bWVudHMubGVuZ3RoLCBfID0ge30sIHQ7IGkgPCBuOyArK2kpIHtcbiAgICBpZiAoISh0ID0gYXJndW1lbnRzW2ldICsgXCJcIikgfHwgKHQgaW4gXykgfHwgL1tcXHMuXS8udGVzdCh0KSkgdGhyb3cgbmV3IEVycm9yKFwiaWxsZWdhbCB0eXBlOiBcIiArIHQpO1xuICAgIF9bdF0gPSBbXTtcbiAgfVxuICByZXR1cm4gbmV3IERpc3BhdGNoKF8pO1xufVxuXG5mdW5jdGlvbiBEaXNwYXRjaChfKSB7XG4gIHRoaXMuXyA9IF87XG59XG5cbmZ1bmN0aW9uIHBhcnNlVHlwZW5hbWVzKHR5cGVuYW1lcywgdHlwZXMpIHtcbiAgcmV0dXJuIHR5cGVuYW1lcy50cmltKCkuc3BsaXQoL158XFxzKy8pLm1hcChmdW5jdGlvbih0KSB7XG4gICAgdmFyIG5hbWUgPSBcIlwiLCBpID0gdC5pbmRleE9mKFwiLlwiKTtcbiAgICBpZiAoaSA+PSAwKSBuYW1lID0gdC5zbGljZShpICsgMSksIHQgPSB0LnNsaWNlKDAsIGkpO1xuICAgIGlmICh0ICYmICF0eXBlcy5oYXNPd25Qcm9wZXJ0eSh0KSkgdGhyb3cgbmV3IEVycm9yKFwidW5rbm93biB0eXBlOiBcIiArIHQpO1xuICAgIHJldHVybiB7dHlwZTogdCwgbmFtZTogbmFtZX07XG4gIH0pO1xufVxuXG5EaXNwYXRjaC5wcm90b3R5cGUgPSBkaXNwYXRjaC5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBEaXNwYXRjaCxcbiAgb246IGZ1bmN0aW9uKHR5cGVuYW1lLCBjYWxsYmFjaykge1xuICAgIHZhciBfID0gdGhpcy5fLFxuICAgICAgICBUID0gcGFyc2VUeXBlbmFtZXModHlwZW5hbWUgKyBcIlwiLCBfKSxcbiAgICAgICAgdCxcbiAgICAgICAgaSA9IC0xLFxuICAgICAgICBuID0gVC5sZW5ndGg7XG5cbiAgICAvLyBJZiBubyBjYWxsYmFjayB3YXMgc3BlY2lmaWVkLCByZXR1cm4gdGhlIGNhbGxiYWNrIG9mIHRoZSBnaXZlbiB0eXBlIGFuZCBuYW1lLlxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgICAgd2hpbGUgKCsraSA8IG4pIGlmICgodCA9ICh0eXBlbmFtZSA9IFRbaV0pLnR5cGUpICYmICh0ID0gZ2V0KF9bdF0sIHR5cGVuYW1lLm5hbWUpKSkgcmV0dXJuIHQ7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gSWYgYSB0eXBlIHdhcyBzcGVjaWZpZWQsIHNldCB0aGUgY2FsbGJhY2sgZm9yIHRoZSBnaXZlbiB0eXBlIGFuZCBuYW1lLlxuICAgIC8vIE90aGVyd2lzZSwgaWYgYSBudWxsIGNhbGxiYWNrIHdhcyBzcGVjaWZpZWQsIHJlbW92ZSBjYWxsYmFja3Mgb2YgdGhlIGdpdmVuIG5hbWUuXG4gICAgaWYgKGNhbGxiYWNrICE9IG51bGwgJiYgdHlwZW9mIGNhbGxiYWNrICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBFcnJvcihcImludmFsaWQgY2FsbGJhY2s6IFwiICsgY2FsbGJhY2spO1xuICAgIHdoaWxlICgrK2kgPCBuKSB7XG4gICAgICBpZiAodCA9ICh0eXBlbmFtZSA9IFRbaV0pLnR5cGUpIF9bdF0gPSBzZXQoX1t0XSwgdHlwZW5hbWUubmFtZSwgY2FsbGJhY2spO1xuICAgICAgZWxzZSBpZiAoY2FsbGJhY2sgPT0gbnVsbCkgZm9yICh0IGluIF8pIF9bdF0gPSBzZXQoX1t0XSwgdHlwZW5hbWUubmFtZSwgbnVsbCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG4gIGNvcHk6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBjb3B5ID0ge30sIF8gPSB0aGlzLl87XG4gICAgZm9yICh2YXIgdCBpbiBfKSBjb3B5W3RdID0gX1t0XS5zbGljZSgpO1xuICAgIHJldHVybiBuZXcgRGlzcGF0Y2goY29weSk7XG4gIH0sXG4gIGNhbGw6IGZ1bmN0aW9uKHR5cGUsIHRoYXQpIHtcbiAgICBpZiAoKG4gPSBhcmd1bWVudHMubGVuZ3RoIC0gMikgPiAwKSBmb3IgKHZhciBhcmdzID0gbmV3IEFycmF5KG4pLCBpID0gMCwgbiwgdDsgaSA8IG47ICsraSkgYXJnc1tpXSA9IGFyZ3VtZW50c1tpICsgMl07XG4gICAgaWYgKCF0aGlzLl8uaGFzT3duUHJvcGVydHkodHlwZSkpIHRocm93IG5ldyBFcnJvcihcInVua25vd24gdHlwZTogXCIgKyB0eXBlKTtcbiAgICBmb3IgKHQgPSB0aGlzLl9bdHlwZV0sIGkgPSAwLCBuID0gdC5sZW5ndGg7IGkgPCBuOyArK2kpIHRbaV0udmFsdWUuYXBwbHkodGhhdCwgYXJncyk7XG4gIH0sXG4gIGFwcGx5OiBmdW5jdGlvbih0eXBlLCB0aGF0LCBhcmdzKSB7XG4gICAgaWYgKCF0aGlzLl8uaGFzT3duUHJvcGVydHkodHlwZSkpIHRocm93IG5ldyBFcnJvcihcInVua25vd24gdHlwZTogXCIgKyB0eXBlKTtcbiAgICBmb3IgKHZhciB0ID0gdGhpcy5fW3R5cGVdLCBpID0gMCwgbiA9IHQubGVuZ3RoOyBpIDwgbjsgKytpKSB0W2ldLnZhbHVlLmFwcGx5KHRoYXQsIGFyZ3MpO1xuICB9XG59O1xuXG5mdW5jdGlvbiBnZXQodHlwZSwgbmFtZSkge1xuICBmb3IgKHZhciBpID0gMCwgbiA9IHR5cGUubGVuZ3RoLCBjOyBpIDwgbjsgKytpKSB7XG4gICAgaWYgKChjID0gdHlwZVtpXSkubmFtZSA9PT0gbmFtZSkge1xuICAgICAgcmV0dXJuIGMudmFsdWU7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHNldCh0eXBlLCBuYW1lLCBjYWxsYmFjaykge1xuICBmb3IgKHZhciBpID0gMCwgbiA9IHR5cGUubGVuZ3RoOyBpIDwgbjsgKytpKSB7XG4gICAgaWYgKHR5cGVbaV0ubmFtZSA9PT0gbmFtZSkge1xuICAgICAgdHlwZVtpXSA9IG5vb3AsIHR5cGUgPSB0eXBlLnNsaWNlKDAsIGkpLmNvbmNhdCh0eXBlLnNsaWNlKGkgKyAxKSk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgaWYgKGNhbGxiYWNrICE9IG51bGwpIHR5cGUucHVzaCh7bmFtZTogbmFtZSwgdmFsdWU6IGNhbGxiYWNrfSk7XG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBkaXNwYXRjaDtcbiIsImV4cG9ydCB7ZGVmYXVsdCBhcyBkaXNwYXRjaH0gZnJvbSBcIi4vZGlzcGF0Y2guanNcIjtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB4O1xuICB9O1xufVxuIiwiaW1wb3J0IHtkaXNwYXRjaH0gZnJvbSBcImQzLWRpc3BhdGNoXCI7XG5pbXBvcnQge2V2ZW50LCBjdXN0b21FdmVudCwgc2VsZWN0LCBtb3VzZSwgdG91Y2h9IGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcbmltcG9ydCBub2RyYWcsIHt5ZXNkcmFnfSBmcm9tIFwiLi9ub2RyYWcuanNcIjtcbmltcG9ydCBub2V2ZW50LCB7bm9wcm9wYWdhdGlvbn0gZnJvbSBcIi4vbm9ldmVudC5qc1wiO1xuaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuL2NvbnN0YW50LmpzXCI7XG5pbXBvcnQgRHJhZ0V2ZW50IGZyb20gXCIuL2V2ZW50LmpzXCI7XG5cbi8vIElnbm9yZSByaWdodC1jbGljaywgc2luY2UgdGhhdCBzaG91bGQgb3BlbiB0aGUgY29udGV4dCBtZW51LlxuZnVuY3Rpb24gZGVmYXVsdEZpbHRlcigpIHtcbiAgcmV0dXJuICFldmVudC5jdHJsS2V5ICYmICFldmVudC5idXR0b247XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRDb250YWluZXIoKSB7XG4gIHJldHVybiB0aGlzLnBhcmVudE5vZGU7XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRTdWJqZWN0KGQpIHtcbiAgcmV0dXJuIGQgPT0gbnVsbCA/IHt4OiBldmVudC54LCB5OiBldmVudC55fSA6IGQ7XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRUb3VjaGFibGUoKSB7XG4gIHJldHVybiBuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHMgfHwgKFwib250b3VjaHN0YXJ0XCIgaW4gdGhpcyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgZmlsdGVyID0gZGVmYXVsdEZpbHRlcixcbiAgICAgIGNvbnRhaW5lciA9IGRlZmF1bHRDb250YWluZXIsXG4gICAgICBzdWJqZWN0ID0gZGVmYXVsdFN1YmplY3QsXG4gICAgICB0b3VjaGFibGUgPSBkZWZhdWx0VG91Y2hhYmxlLFxuICAgICAgZ2VzdHVyZXMgPSB7fSxcbiAgICAgIGxpc3RlbmVycyA9IGRpc3BhdGNoKFwic3RhcnRcIiwgXCJkcmFnXCIsIFwiZW5kXCIpLFxuICAgICAgYWN0aXZlID0gMCxcbiAgICAgIG1vdXNlZG93bngsXG4gICAgICBtb3VzZWRvd255LFxuICAgICAgbW91c2Vtb3ZpbmcsXG4gICAgICB0b3VjaGVuZGluZyxcbiAgICAgIGNsaWNrRGlzdGFuY2UyID0gMDtcblxuICBmdW5jdGlvbiBkcmFnKHNlbGVjdGlvbikge1xuICAgIHNlbGVjdGlvblxuICAgICAgICAub24oXCJtb3VzZWRvd24uZHJhZ1wiLCBtb3VzZWRvd25lZClcbiAgICAgIC5maWx0ZXIodG91Y2hhYmxlKVxuICAgICAgICAub24oXCJ0b3VjaHN0YXJ0LmRyYWdcIiwgdG91Y2hzdGFydGVkKVxuICAgICAgICAub24oXCJ0b3VjaG1vdmUuZHJhZ1wiLCB0b3VjaG1vdmVkKVxuICAgICAgICAub24oXCJ0b3VjaGVuZC5kcmFnIHRvdWNoY2FuY2VsLmRyYWdcIiwgdG91Y2hlbmRlZClcbiAgICAgICAgLnN0eWxlKFwidG91Y2gtYWN0aW9uXCIsIFwibm9uZVwiKVxuICAgICAgICAuc3R5bGUoXCItd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3JcIiwgXCJyZ2JhKDAsMCwwLDApXCIpO1xuICB9XG5cbiAgZnVuY3Rpb24gbW91c2Vkb3duZWQoKSB7XG4gICAgaWYgKHRvdWNoZW5kaW5nIHx8ICFmaWx0ZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSkgcmV0dXJuO1xuICAgIHZhciBnZXN0dXJlID0gYmVmb3Jlc3RhcnQoXCJtb3VzZVwiLCBjb250YWluZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSwgbW91c2UsIHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKCFnZXN0dXJlKSByZXR1cm47XG4gICAgc2VsZWN0KGV2ZW50LnZpZXcpLm9uKFwibW91c2Vtb3ZlLmRyYWdcIiwgbW91c2Vtb3ZlZCwgdHJ1ZSkub24oXCJtb3VzZXVwLmRyYWdcIiwgbW91c2V1cHBlZCwgdHJ1ZSk7XG4gICAgbm9kcmFnKGV2ZW50LnZpZXcpO1xuICAgIG5vcHJvcGFnYXRpb24oKTtcbiAgICBtb3VzZW1vdmluZyA9IGZhbHNlO1xuICAgIG1vdXNlZG93bnggPSBldmVudC5jbGllbnRYO1xuICAgIG1vdXNlZG93bnkgPSBldmVudC5jbGllbnRZO1xuICAgIGdlc3R1cmUoXCJzdGFydFwiKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG1vdXNlbW92ZWQoKSB7XG4gICAgbm9ldmVudCgpO1xuICAgIGlmICghbW91c2Vtb3ZpbmcpIHtcbiAgICAgIHZhciBkeCA9IGV2ZW50LmNsaWVudFggLSBtb3VzZWRvd254LCBkeSA9IGV2ZW50LmNsaWVudFkgLSBtb3VzZWRvd255O1xuICAgICAgbW91c2Vtb3ZpbmcgPSBkeCAqIGR4ICsgZHkgKiBkeSA+IGNsaWNrRGlzdGFuY2UyO1xuICAgIH1cbiAgICBnZXN0dXJlcy5tb3VzZShcImRyYWdcIik7XG4gIH1cblxuICBmdW5jdGlvbiBtb3VzZXVwcGVkKCkge1xuICAgIHNlbGVjdChldmVudC52aWV3KS5vbihcIm1vdXNlbW92ZS5kcmFnIG1vdXNldXAuZHJhZ1wiLCBudWxsKTtcbiAgICB5ZXNkcmFnKGV2ZW50LnZpZXcsIG1vdXNlbW92aW5nKTtcbiAgICBub2V2ZW50KCk7XG4gICAgZ2VzdHVyZXMubW91c2UoXCJlbmRcIik7XG4gIH1cblxuICBmdW5jdGlvbiB0b3VjaHN0YXJ0ZWQoKSB7XG4gICAgaWYgKCFmaWx0ZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSkgcmV0dXJuO1xuICAgIHZhciB0b3VjaGVzID0gZXZlbnQuY2hhbmdlZFRvdWNoZXMsXG4gICAgICAgIGMgPSBjb250YWluZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSxcbiAgICAgICAgbiA9IHRvdWNoZXMubGVuZ3RoLCBpLCBnZXN0dXJlO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKGdlc3R1cmUgPSBiZWZvcmVzdGFydCh0b3VjaGVzW2ldLmlkZW50aWZpZXIsIGMsIHRvdWNoLCB0aGlzLCBhcmd1bWVudHMpKSB7XG4gICAgICAgIG5vcHJvcGFnYXRpb24oKTtcbiAgICAgICAgZ2VzdHVyZShcInN0YXJ0XCIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHRvdWNobW92ZWQoKSB7XG4gICAgdmFyIHRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcyxcbiAgICAgICAgbiA9IHRvdWNoZXMubGVuZ3RoLCBpLCBnZXN0dXJlO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKGdlc3R1cmUgPSBnZXN0dXJlc1t0b3VjaGVzW2ldLmlkZW50aWZpZXJdKSB7XG4gICAgICAgIG5vZXZlbnQoKTtcbiAgICAgICAgZ2VzdHVyZShcImRyYWdcIik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdG91Y2hlbmRlZCgpIHtcbiAgICB2YXIgdG91Y2hlcyA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzLFxuICAgICAgICBuID0gdG91Y2hlcy5sZW5ndGgsIGksIGdlc3R1cmU7XG5cbiAgICBpZiAodG91Y2hlbmRpbmcpIGNsZWFyVGltZW91dCh0b3VjaGVuZGluZyk7XG4gICAgdG91Y2hlbmRpbmcgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyB0b3VjaGVuZGluZyA9IG51bGw7IH0sIDUwMCk7IC8vIEdob3N0IGNsaWNrcyBhcmUgZGVsYXllZCFcbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAoZ2VzdHVyZSA9IGdlc3R1cmVzW3RvdWNoZXNbaV0uaWRlbnRpZmllcl0pIHtcbiAgICAgICAgbm9wcm9wYWdhdGlvbigpO1xuICAgICAgICBnZXN0dXJlKFwiZW5kXCIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGJlZm9yZXN0YXJ0KGlkLCBjb250YWluZXIsIHBvaW50LCB0aGF0LCBhcmdzKSB7XG4gICAgdmFyIHAgPSBwb2ludChjb250YWluZXIsIGlkKSwgcywgZHgsIGR5LFxuICAgICAgICBzdWJsaXN0ZW5lcnMgPSBsaXN0ZW5lcnMuY29weSgpO1xuXG4gICAgaWYgKCFjdXN0b21FdmVudChuZXcgRHJhZ0V2ZW50KGRyYWcsIFwiYmVmb3Jlc3RhcnRcIiwgcywgaWQsIGFjdGl2ZSwgcFswXSwgcFsxXSwgMCwgMCwgc3VibGlzdGVuZXJzKSwgZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoKGV2ZW50LnN1YmplY3QgPSBzID0gc3ViamVjdC5hcHBseSh0aGF0LCBhcmdzKSkgPT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICAgICAgZHggPSBzLnggLSBwWzBdIHx8IDA7XG4gICAgICBkeSA9IHMueSAtIHBbMV0gfHwgMDtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pKSByZXR1cm47XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gZ2VzdHVyZSh0eXBlKSB7XG4gICAgICB2YXIgcDAgPSBwLCBuO1xuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgXCJzdGFydFwiOiBnZXN0dXJlc1tpZF0gPSBnZXN0dXJlLCBuID0gYWN0aXZlKys7IGJyZWFrO1xuICAgICAgICBjYXNlIFwiZW5kXCI6IGRlbGV0ZSBnZXN0dXJlc1tpZF0sIC0tYWN0aXZlOyAvLyBub2JyZWFrXG4gICAgICAgIGNhc2UgXCJkcmFnXCI6IHAgPSBwb2ludChjb250YWluZXIsIGlkKSwgbiA9IGFjdGl2ZTsgYnJlYWs7XG4gICAgICB9XG4gICAgICBjdXN0b21FdmVudChuZXcgRHJhZ0V2ZW50KGRyYWcsIHR5cGUsIHMsIGlkLCBuLCBwWzBdICsgZHgsIHBbMV0gKyBkeSwgcFswXSAtIHAwWzBdLCBwWzFdIC0gcDBbMV0sIHN1Ymxpc3RlbmVycyksIHN1Ymxpc3RlbmVycy5hcHBseSwgc3VibGlzdGVuZXJzLCBbdHlwZSwgdGhhdCwgYXJnc10pO1xuICAgIH07XG4gIH1cblxuICBkcmFnLmZpbHRlciA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChmaWx0ZXIgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCEhXyksIGRyYWcpIDogZmlsdGVyO1xuICB9O1xuXG4gIGRyYWcuY29udGFpbmVyID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGNvbnRhaW5lciA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoXyksIGRyYWcpIDogY29udGFpbmVyO1xuICB9O1xuXG4gIGRyYWcuc3ViamVjdCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChzdWJqZWN0ID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudChfKSwgZHJhZykgOiBzdWJqZWN0O1xuICB9O1xuXG4gIGRyYWcudG91Y2hhYmxlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRvdWNoYWJsZSA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoISFfKSwgZHJhZykgOiB0b3VjaGFibGU7XG4gIH07XG5cbiAgZHJhZy5vbiA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciB2YWx1ZSA9IGxpc3RlbmVycy5vbi5hcHBseShsaXN0ZW5lcnMsIGFyZ3VtZW50cyk7XG4gICAgcmV0dXJuIHZhbHVlID09PSBsaXN0ZW5lcnMgPyBkcmFnIDogdmFsdWU7XG4gIH07XG5cbiAgZHJhZy5jbGlja0Rpc3RhbmNlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGNsaWNrRGlzdGFuY2UyID0gKF8gPSArXykgKiBfLCBkcmFnKSA6IE1hdGguc3FydChjbGlja0Rpc3RhbmNlMik7XG4gIH07XG5cbiAgcmV0dXJuIGRyYWc7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBEcmFnRXZlbnQodGFyZ2V0LCB0eXBlLCBzdWJqZWN0LCBpZCwgYWN0aXZlLCB4LCB5LCBkeCwgZHksIGRpc3BhdGNoKSB7XG4gIHRoaXMudGFyZ2V0ID0gdGFyZ2V0O1xuICB0aGlzLnR5cGUgPSB0eXBlO1xuICB0aGlzLnN1YmplY3QgPSBzdWJqZWN0O1xuICB0aGlzLmlkZW50aWZpZXIgPSBpZDtcbiAgdGhpcy5hY3RpdmUgPSBhY3RpdmU7XG4gIHRoaXMueCA9IHg7XG4gIHRoaXMueSA9IHk7XG4gIHRoaXMuZHggPSBkeDtcbiAgdGhpcy5keSA9IGR5O1xuICB0aGlzLl8gPSBkaXNwYXRjaDtcbn1cblxuRHJhZ0V2ZW50LnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uKCkge1xuICB2YXIgdmFsdWUgPSB0aGlzLl8ub24uYXBwbHkodGhpcy5fLCBhcmd1bWVudHMpO1xuICByZXR1cm4gdmFsdWUgPT09IHRoaXMuXyA/IHRoaXMgOiB2YWx1ZTtcbn07XG4iLCJleHBvcnQge2RlZmF1bHQgYXMgZHJhZ30gZnJvbSBcIi4vZHJhZy5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGRyYWdEaXNhYmxlLCB5ZXNkcmFnIGFzIGRyYWdFbmFibGV9IGZyb20gXCIuL25vZHJhZy5qc1wiO1xuIiwiaW1wb3J0IHtzZWxlY3R9IGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcbmltcG9ydCBub2V2ZW50IGZyb20gXCIuL25vZXZlbnQuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmlldykge1xuICB2YXIgcm9vdCA9IHZpZXcuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LFxuICAgICAgc2VsZWN0aW9uID0gc2VsZWN0KHZpZXcpLm9uKFwiZHJhZ3N0YXJ0LmRyYWdcIiwgbm9ldmVudCwgdHJ1ZSk7XG4gIGlmIChcIm9uc2VsZWN0c3RhcnRcIiBpbiByb290KSB7XG4gICAgc2VsZWN0aW9uLm9uKFwic2VsZWN0c3RhcnQuZHJhZ1wiLCBub2V2ZW50LCB0cnVlKTtcbiAgfSBlbHNlIHtcbiAgICByb290Ll9fbm9zZWxlY3QgPSByb290LnN0eWxlLk1velVzZXJTZWxlY3Q7XG4gICAgcm9vdC5zdHlsZS5Nb3pVc2VyU2VsZWN0ID0gXCJub25lXCI7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHllc2RyYWcodmlldywgbm9jbGljaykge1xuICB2YXIgcm9vdCA9IHZpZXcuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LFxuICAgICAgc2VsZWN0aW9uID0gc2VsZWN0KHZpZXcpLm9uKFwiZHJhZ3N0YXJ0LmRyYWdcIiwgbnVsbCk7XG4gIGlmIChub2NsaWNrKSB7XG4gICAgc2VsZWN0aW9uLm9uKFwiY2xpY2suZHJhZ1wiLCBub2V2ZW50LCB0cnVlKTtcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBzZWxlY3Rpb24ub24oXCJjbGljay5kcmFnXCIsIG51bGwpOyB9LCAwKTtcbiAgfVxuICBpZiAoXCJvbnNlbGVjdHN0YXJ0XCIgaW4gcm9vdCkge1xuICAgIHNlbGVjdGlvbi5vbihcInNlbGVjdHN0YXJ0LmRyYWdcIiwgbnVsbCk7XG4gIH0gZWxzZSB7XG4gICAgcm9vdC5zdHlsZS5Nb3pVc2VyU2VsZWN0ID0gcm9vdC5fX25vc2VsZWN0O1xuICAgIGRlbGV0ZSByb290Ll9fbm9zZWxlY3Q7XG4gIH1cbn1cbiIsImltcG9ydCB7ZXZlbnR9IGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcblxuZXhwb3J0IGZ1bmN0aW9uIG5vcHJvcGFnYXRpb24oKSB7XG4gIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhdXRvVHlwZShvYmplY3QpIHtcbiAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgIHZhciB2YWx1ZSA9IG9iamVjdFtrZXldLnRyaW0oKSwgbnVtYmVyLCBtO1xuICAgIGlmICghdmFsdWUpIHZhbHVlID0gbnVsbDtcbiAgICBlbHNlIGlmICh2YWx1ZSA9PT0gXCJ0cnVlXCIpIHZhbHVlID0gdHJ1ZTtcbiAgICBlbHNlIGlmICh2YWx1ZSA9PT0gXCJmYWxzZVwiKSB2YWx1ZSA9IGZhbHNlO1xuICAgIGVsc2UgaWYgKHZhbHVlID09PSBcIk5hTlwiKSB2YWx1ZSA9IE5hTjtcbiAgICBlbHNlIGlmICghaXNOYU4obnVtYmVyID0gK3ZhbHVlKSkgdmFsdWUgPSBudW1iZXI7XG4gICAgZWxzZSBpZiAobSA9IHZhbHVlLm1hdGNoKC9eKFstK11cXGR7Mn0pP1xcZHs0fSgtXFxkezJ9KC1cXGR7Mn0pPyk/KFRcXGR7Mn06XFxkezJ9KDpcXGR7Mn0oXFwuXFxkezN9KT8pPyhafFstK11cXGR7Mn06XFxkezJ9KT8pPyQvKSkge1xuICAgICAgaWYgKGZpeHR6ICYmICEhbVs0XSAmJiAhbVs3XSkgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC8tL2csIFwiL1wiKS5yZXBsYWNlKC9ULywgXCIgXCIpO1xuICAgICAgdmFsdWUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG4gICAgfVxuICAgIGVsc2UgY29udGludWU7XG4gICAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgfVxuICByZXR1cm4gb2JqZWN0O1xufVxuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vZDMvZDMtZHN2L2lzc3Vlcy80NVxudmFyIGZpeHR6ID0gbmV3IERhdGUoXCIyMDE5LTAxLTAxVDAwOjAwXCIpLmdldEhvdXJzKCkgfHwgbmV3IERhdGUoXCIyMDE5LTA3LTAxVDAwOjAwXCIpLmdldEhvdXJzKCk7IiwiaW1wb3J0IGRzdiBmcm9tIFwiLi9kc3YuanNcIjtcblxudmFyIGNzdiA9IGRzdihcIixcIik7XG5cbmV4cG9ydCB2YXIgY3N2UGFyc2UgPSBjc3YucGFyc2U7XG5leHBvcnQgdmFyIGNzdlBhcnNlUm93cyA9IGNzdi5wYXJzZVJvd3M7XG5leHBvcnQgdmFyIGNzdkZvcm1hdCA9IGNzdi5mb3JtYXQ7XG5leHBvcnQgdmFyIGNzdkZvcm1hdEJvZHkgPSBjc3YuZm9ybWF0Qm9keTtcbmV4cG9ydCB2YXIgY3N2Rm9ybWF0Um93cyA9IGNzdi5mb3JtYXRSb3dzO1xuZXhwb3J0IHZhciBjc3ZGb3JtYXRSb3cgPSBjc3YuZm9ybWF0Um93O1xuZXhwb3J0IHZhciBjc3ZGb3JtYXRWYWx1ZSA9IGNzdi5mb3JtYXRWYWx1ZTtcbiIsInZhciBFT0wgPSB7fSxcbiAgICBFT0YgPSB7fSxcbiAgICBRVU9URSA9IDM0LFxuICAgIE5FV0xJTkUgPSAxMCxcbiAgICBSRVRVUk4gPSAxMztcblxuZnVuY3Rpb24gb2JqZWN0Q29udmVydGVyKGNvbHVtbnMpIHtcbiAgcmV0dXJuIG5ldyBGdW5jdGlvbihcImRcIiwgXCJyZXR1cm4ge1wiICsgY29sdW1ucy5tYXAoZnVuY3Rpb24obmFtZSwgaSkge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShuYW1lKSArIFwiOiBkW1wiICsgaSArIFwiXSB8fCBcXFwiXFxcIlwiO1xuICB9KS5qb2luKFwiLFwiKSArIFwifVwiKTtcbn1cblxuZnVuY3Rpb24gY3VzdG9tQ29udmVydGVyKGNvbHVtbnMsIGYpIHtcbiAgdmFyIG9iamVjdCA9IG9iamVjdENvbnZlcnRlcihjb2x1bW5zKTtcbiAgcmV0dXJuIGZ1bmN0aW9uKHJvdywgaSkge1xuICAgIHJldHVybiBmKG9iamVjdChyb3cpLCBpLCBjb2x1bW5zKTtcbiAgfTtcbn1cblxuLy8gQ29tcHV0ZSB1bmlxdWUgY29sdW1ucyBpbiBvcmRlciBvZiBkaXNjb3ZlcnkuXG5mdW5jdGlvbiBpbmZlckNvbHVtbnMocm93cykge1xuICB2YXIgY29sdW1uU2V0ID0gT2JqZWN0LmNyZWF0ZShudWxsKSxcbiAgICAgIGNvbHVtbnMgPSBbXTtcblxuICByb3dzLmZvckVhY2goZnVuY3Rpb24ocm93KSB7XG4gICAgZm9yICh2YXIgY29sdW1uIGluIHJvdykge1xuICAgICAgaWYgKCEoY29sdW1uIGluIGNvbHVtblNldCkpIHtcbiAgICAgICAgY29sdW1ucy5wdXNoKGNvbHVtblNldFtjb2x1bW5dID0gY29sdW1uKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBjb2x1bW5zO1xufVxuXG5mdW5jdGlvbiBwYWQodmFsdWUsIHdpZHRoKSB7XG4gIHZhciBzID0gdmFsdWUgKyBcIlwiLCBsZW5ndGggPSBzLmxlbmd0aDtcbiAgcmV0dXJuIGxlbmd0aCA8IHdpZHRoID8gbmV3IEFycmF5KHdpZHRoIC0gbGVuZ3RoICsgMSkuam9pbigwKSArIHMgOiBzO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRZZWFyKHllYXIpIHtcbiAgcmV0dXJuIHllYXIgPCAwID8gXCItXCIgKyBwYWQoLXllYXIsIDYpXG4gICAgOiB5ZWFyID4gOTk5OSA/IFwiK1wiICsgcGFkKHllYXIsIDYpXG4gICAgOiBwYWQoeWVhciwgNCk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdERhdGUoZGF0ZSkge1xuICB2YXIgaG91cnMgPSBkYXRlLmdldFVUQ0hvdXJzKCksXG4gICAgICBtaW51dGVzID0gZGF0ZS5nZXRVVENNaW51dGVzKCksXG4gICAgICBzZWNvbmRzID0gZGF0ZS5nZXRVVENTZWNvbmRzKCksXG4gICAgICBtaWxsaXNlY29uZHMgPSBkYXRlLmdldFVUQ01pbGxpc2Vjb25kcygpO1xuICByZXR1cm4gaXNOYU4oZGF0ZSkgPyBcIkludmFsaWQgRGF0ZVwiXG4gICAgICA6IGZvcm1hdFllYXIoZGF0ZS5nZXRVVENGdWxsWWVhcigpLCA0KSArIFwiLVwiICsgcGFkKGRhdGUuZ2V0VVRDTW9udGgoKSArIDEsIDIpICsgXCItXCIgKyBwYWQoZGF0ZS5nZXRVVENEYXRlKCksIDIpXG4gICAgICArIChtaWxsaXNlY29uZHMgPyBcIlRcIiArIHBhZChob3VycywgMikgKyBcIjpcIiArIHBhZChtaW51dGVzLCAyKSArIFwiOlwiICsgcGFkKHNlY29uZHMsIDIpICsgXCIuXCIgKyBwYWQobWlsbGlzZWNvbmRzLCAzKSArIFwiWlwiXG4gICAgICA6IHNlY29uZHMgPyBcIlRcIiArIHBhZChob3VycywgMikgKyBcIjpcIiArIHBhZChtaW51dGVzLCAyKSArIFwiOlwiICsgcGFkKHNlY29uZHMsIDIpICsgXCJaXCJcbiAgICAgIDogbWludXRlcyB8fCBob3VycyA/IFwiVFwiICsgcGFkKGhvdXJzLCAyKSArIFwiOlwiICsgcGFkKG1pbnV0ZXMsIDIpICsgXCJaXCJcbiAgICAgIDogXCJcIik7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGRlbGltaXRlcikge1xuICB2YXIgcmVGb3JtYXQgPSBuZXcgUmVnRXhwKFwiW1xcXCJcIiArIGRlbGltaXRlciArIFwiXFxuXFxyXVwiKSxcbiAgICAgIERFTElNSVRFUiA9IGRlbGltaXRlci5jaGFyQ29kZUF0KDApO1xuXG4gIGZ1bmN0aW9uIHBhcnNlKHRleHQsIGYpIHtcbiAgICB2YXIgY29udmVydCwgY29sdW1ucywgcm93cyA9IHBhcnNlUm93cyh0ZXh0LCBmdW5jdGlvbihyb3csIGkpIHtcbiAgICAgIGlmIChjb252ZXJ0KSByZXR1cm4gY29udmVydChyb3csIGkgLSAxKTtcbiAgICAgIGNvbHVtbnMgPSByb3csIGNvbnZlcnQgPSBmID8gY3VzdG9tQ29udmVydGVyKHJvdywgZikgOiBvYmplY3RDb252ZXJ0ZXIocm93KTtcbiAgICB9KTtcbiAgICByb3dzLmNvbHVtbnMgPSBjb2x1bW5zIHx8IFtdO1xuICAgIHJldHVybiByb3dzO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VSb3dzKHRleHQsIGYpIHtcbiAgICB2YXIgcm93cyA9IFtdLCAvLyBvdXRwdXQgcm93c1xuICAgICAgICBOID0gdGV4dC5sZW5ndGgsXG4gICAgICAgIEkgPSAwLCAvLyBjdXJyZW50IGNoYXJhY3RlciBpbmRleFxuICAgICAgICBuID0gMCwgLy8gY3VycmVudCBsaW5lIG51bWJlclxuICAgICAgICB0LCAvLyBjdXJyZW50IHRva2VuXG4gICAgICAgIGVvZiA9IE4gPD0gMCwgLy8gY3VycmVudCB0b2tlbiBmb2xsb3dlZCBieSBFT0Y/XG4gICAgICAgIGVvbCA9IGZhbHNlOyAvLyBjdXJyZW50IHRva2VuIGZvbGxvd2VkIGJ5IEVPTD9cblxuICAgIC8vIFN0cmlwIHRoZSB0cmFpbGluZyBuZXdsaW5lLlxuICAgIGlmICh0ZXh0LmNoYXJDb2RlQXQoTiAtIDEpID09PSBORVdMSU5FKSAtLU47XG4gICAgaWYgKHRleHQuY2hhckNvZGVBdChOIC0gMSkgPT09IFJFVFVSTikgLS1OO1xuXG4gICAgZnVuY3Rpb24gdG9rZW4oKSB7XG4gICAgICBpZiAoZW9mKSByZXR1cm4gRU9GO1xuICAgICAgaWYgKGVvbCkgcmV0dXJuIGVvbCA9IGZhbHNlLCBFT0w7XG5cbiAgICAgIC8vIFVuZXNjYXBlIHF1b3Rlcy5cbiAgICAgIHZhciBpLCBqID0gSSwgYztcbiAgICAgIGlmICh0ZXh0LmNoYXJDb2RlQXQoaikgPT09IFFVT1RFKSB7XG4gICAgICAgIHdoaWxlIChJKysgPCBOICYmIHRleHQuY2hhckNvZGVBdChJKSAhPT0gUVVPVEUgfHwgdGV4dC5jaGFyQ29kZUF0KCsrSSkgPT09IFFVT1RFKTtcbiAgICAgICAgaWYgKChpID0gSSkgPj0gTikgZW9mID0gdHJ1ZTtcbiAgICAgICAgZWxzZSBpZiAoKGMgPSB0ZXh0LmNoYXJDb2RlQXQoSSsrKSkgPT09IE5FV0xJTkUpIGVvbCA9IHRydWU7XG4gICAgICAgIGVsc2UgaWYgKGMgPT09IFJFVFVSTikgeyBlb2wgPSB0cnVlOyBpZiAodGV4dC5jaGFyQ29kZUF0KEkpID09PSBORVdMSU5FKSArK0k7IH1cbiAgICAgICAgcmV0dXJuIHRleHQuc2xpY2UoaiArIDEsIGkgLSAxKS5yZXBsYWNlKC9cIlwiL2csIFwiXFxcIlwiKTtcbiAgICAgIH1cblxuICAgICAgLy8gRmluZCBuZXh0IGRlbGltaXRlciBvciBuZXdsaW5lLlxuICAgICAgd2hpbGUgKEkgPCBOKSB7XG4gICAgICAgIGlmICgoYyA9IHRleHQuY2hhckNvZGVBdChpID0gSSsrKSkgPT09IE5FV0xJTkUpIGVvbCA9IHRydWU7XG4gICAgICAgIGVsc2UgaWYgKGMgPT09IFJFVFVSTikgeyBlb2wgPSB0cnVlOyBpZiAodGV4dC5jaGFyQ29kZUF0KEkpID09PSBORVdMSU5FKSArK0k7IH1cbiAgICAgICAgZWxzZSBpZiAoYyAhPT0gREVMSU1JVEVSKSBjb250aW51ZTtcbiAgICAgICAgcmV0dXJuIHRleHQuc2xpY2UoaiwgaSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFJldHVybiBsYXN0IHRva2VuIGJlZm9yZSBFT0YuXG4gICAgICByZXR1cm4gZW9mID0gdHJ1ZSwgdGV4dC5zbGljZShqLCBOKTtcbiAgICB9XG5cbiAgICB3aGlsZSAoKHQgPSB0b2tlbigpKSAhPT0gRU9GKSB7XG4gICAgICB2YXIgcm93ID0gW107XG4gICAgICB3aGlsZSAodCAhPT0gRU9MICYmIHQgIT09IEVPRikgcm93LnB1c2godCksIHQgPSB0b2tlbigpO1xuICAgICAgaWYgKGYgJiYgKHJvdyA9IGYocm93LCBuKyspKSA9PSBudWxsKSBjb250aW51ZTtcbiAgICAgIHJvd3MucHVzaChyb3cpO1xuICAgIH1cblxuICAgIHJldHVybiByb3dzO1xuICB9XG5cbiAgZnVuY3Rpb24gcHJlZm9ybWF0Qm9keShyb3dzLCBjb2x1bW5zKSB7XG4gICAgcmV0dXJuIHJvd3MubWFwKGZ1bmN0aW9uKHJvdykge1xuICAgICAgcmV0dXJuIGNvbHVtbnMubWFwKGZ1bmN0aW9uKGNvbHVtbikge1xuICAgICAgICByZXR1cm4gZm9ybWF0VmFsdWUocm93W2NvbHVtbl0pO1xuICAgICAgfSkuam9pbihkZWxpbWl0ZXIpO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0KHJvd3MsIGNvbHVtbnMpIHtcbiAgICBpZiAoY29sdW1ucyA9PSBudWxsKSBjb2x1bW5zID0gaW5mZXJDb2x1bW5zKHJvd3MpO1xuICAgIHJldHVybiBbY29sdW1ucy5tYXAoZm9ybWF0VmFsdWUpLmpvaW4oZGVsaW1pdGVyKV0uY29uY2F0KHByZWZvcm1hdEJvZHkocm93cywgY29sdW1ucykpLmpvaW4oXCJcXG5cIik7XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRCb2R5KHJvd3MsIGNvbHVtbnMpIHtcbiAgICBpZiAoY29sdW1ucyA9PSBudWxsKSBjb2x1bW5zID0gaW5mZXJDb2x1bW5zKHJvd3MpO1xuICAgIHJldHVybiBwcmVmb3JtYXRCb2R5KHJvd3MsIGNvbHVtbnMpLmpvaW4oXCJcXG5cIik7XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRSb3dzKHJvd3MpIHtcbiAgICByZXR1cm4gcm93cy5tYXAoZm9ybWF0Um93KS5qb2luKFwiXFxuXCIpO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0Um93KHJvdykge1xuICAgIHJldHVybiByb3cubWFwKGZvcm1hdFZhbHVlKS5qb2luKGRlbGltaXRlcik7XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRWYWx1ZSh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSA9PSBudWxsID8gXCJcIlxuICAgICAgICA6IHZhbHVlIGluc3RhbmNlb2YgRGF0ZSA/IGZvcm1hdERhdGUodmFsdWUpXG4gICAgICAgIDogcmVGb3JtYXQudGVzdCh2YWx1ZSArPSBcIlwiKSA/IFwiXFxcIlwiICsgdmFsdWUucmVwbGFjZSgvXCIvZywgXCJcXFwiXFxcIlwiKSArIFwiXFxcIlwiXG4gICAgICAgIDogdmFsdWU7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHBhcnNlOiBwYXJzZSxcbiAgICBwYXJzZVJvd3M6IHBhcnNlUm93cyxcbiAgICBmb3JtYXQ6IGZvcm1hdCxcbiAgICBmb3JtYXRCb2R5OiBmb3JtYXRCb2R5LFxuICAgIGZvcm1hdFJvd3M6IGZvcm1hdFJvd3MsXG4gICAgZm9ybWF0Um93OiBmb3JtYXRSb3csXG4gICAgZm9ybWF0VmFsdWU6IGZvcm1hdFZhbHVlXG4gIH07XG59XG4iLCJleHBvcnQge2RlZmF1bHQgYXMgZHN2Rm9ybWF0fSBmcm9tIFwiLi9kc3YuanNcIjtcbmV4cG9ydCB7Y3N2UGFyc2UsIGNzdlBhcnNlUm93cywgY3N2Rm9ybWF0LCBjc3ZGb3JtYXRCb2R5LCBjc3ZGb3JtYXRSb3dzLCBjc3ZGb3JtYXRSb3csIGNzdkZvcm1hdFZhbHVlfSBmcm9tIFwiLi9jc3YuanNcIjtcbmV4cG9ydCB7dHN2UGFyc2UsIHRzdlBhcnNlUm93cywgdHN2Rm9ybWF0LCB0c3ZGb3JtYXRCb2R5LCB0c3ZGb3JtYXRSb3dzLCB0c3ZGb3JtYXRSb3csIHRzdkZvcm1hdFZhbHVlfSBmcm9tIFwiLi90c3YuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBhdXRvVHlwZX0gZnJvbSBcIi4vYXV0b1R5cGUuanNcIjtcbiIsImltcG9ydCBkc3YgZnJvbSBcIi4vZHN2LmpzXCI7XG5cbnZhciB0c3YgPSBkc3YoXCJcXHRcIik7XG5cbmV4cG9ydCB2YXIgdHN2UGFyc2UgPSB0c3YucGFyc2U7XG5leHBvcnQgdmFyIHRzdlBhcnNlUm93cyA9IHRzdi5wYXJzZVJvd3M7XG5leHBvcnQgdmFyIHRzdkZvcm1hdCA9IHRzdi5mb3JtYXQ7XG5leHBvcnQgdmFyIHRzdkZvcm1hdEJvZHkgPSB0c3YuZm9ybWF0Qm9keTtcbmV4cG9ydCB2YXIgdHN2Rm9ybWF0Um93cyA9IHRzdi5mb3JtYXRSb3dzO1xuZXhwb3J0IHZhciB0c3ZGb3JtYXRSb3cgPSB0c3YuZm9ybWF0Um93O1xuZXhwb3J0IHZhciB0c3ZGb3JtYXRWYWx1ZSA9IHRzdi5mb3JtYXRWYWx1ZTtcbiIsInZhciBvdmVyc2hvb3QgPSAxLjcwMTU4O1xuXG5leHBvcnQgdmFyIGJhY2tJbiA9IChmdW5jdGlvbiBjdXN0b20ocykge1xuICBzID0gK3M7XG5cbiAgZnVuY3Rpb24gYmFja0luKHQpIHtcbiAgICByZXR1cm4gKHQgPSArdCkgKiB0ICogKHMgKiAodCAtIDEpICsgdCk7XG4gIH1cblxuICBiYWNrSW4ub3ZlcnNob290ID0gY3VzdG9tO1xuXG4gIHJldHVybiBiYWNrSW47XG59KShvdmVyc2hvb3QpO1xuXG5leHBvcnQgdmFyIGJhY2tPdXQgPSAoZnVuY3Rpb24gY3VzdG9tKHMpIHtcbiAgcyA9ICtzO1xuXG4gIGZ1bmN0aW9uIGJhY2tPdXQodCkge1xuICAgIHJldHVybiAtLXQgKiB0ICogKCh0ICsgMSkgKiBzICsgdCkgKyAxO1xuICB9XG5cbiAgYmFja091dC5vdmVyc2hvb3QgPSBjdXN0b207XG5cbiAgcmV0dXJuIGJhY2tPdXQ7XG59KShvdmVyc2hvb3QpO1xuXG5leHBvcnQgdmFyIGJhY2tJbk91dCA9IChmdW5jdGlvbiBjdXN0b20ocykge1xuICBzID0gK3M7XG5cbiAgZnVuY3Rpb24gYmFja0luT3V0KHQpIHtcbiAgICByZXR1cm4gKCh0ICo9IDIpIDwgMSA/IHQgKiB0ICogKChzICsgMSkgKiB0IC0gcykgOiAodCAtPSAyKSAqIHQgKiAoKHMgKyAxKSAqIHQgKyBzKSArIDIpIC8gMjtcbiAgfVxuXG4gIGJhY2tJbk91dC5vdmVyc2hvb3QgPSBjdXN0b207XG5cbiAgcmV0dXJuIGJhY2tJbk91dDtcbn0pKG92ZXJzaG9vdCk7XG4iLCJ2YXIgYjEgPSA0IC8gMTEsXG4gICAgYjIgPSA2IC8gMTEsXG4gICAgYjMgPSA4IC8gMTEsXG4gICAgYjQgPSAzIC8gNCxcbiAgICBiNSA9IDkgLyAxMSxcbiAgICBiNiA9IDEwIC8gMTEsXG4gICAgYjcgPSAxNSAvIDE2LFxuICAgIGI4ID0gMjEgLyAyMixcbiAgICBiOSA9IDYzIC8gNjQsXG4gICAgYjAgPSAxIC8gYjEgLyBiMTtcblxuZXhwb3J0IGZ1bmN0aW9uIGJvdW5jZUluKHQpIHtcbiAgcmV0dXJuIDEgLSBib3VuY2VPdXQoMSAtIHQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYm91bmNlT3V0KHQpIHtcbiAgcmV0dXJuICh0ID0gK3QpIDwgYjEgPyBiMCAqIHQgKiB0IDogdCA8IGIzID8gYjAgKiAodCAtPSBiMikgKiB0ICsgYjQgOiB0IDwgYjYgPyBiMCAqICh0IC09IGI1KSAqIHQgKyBiNyA6IGIwICogKHQgLT0gYjgpICogdCArIGI5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYm91bmNlSW5PdXQodCkge1xuICByZXR1cm4gKCh0ICo9IDIpIDw9IDEgPyAxIC0gYm91bmNlT3V0KDEgLSB0KSA6IGJvdW5jZU91dCh0IC0gMSkgKyAxKSAvIDI7XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gY2lyY2xlSW4odCkge1xuICByZXR1cm4gMSAtIE1hdGguc3FydCgxIC0gdCAqIHQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2lyY2xlT3V0KHQpIHtcbiAgcmV0dXJuIE1hdGguc3FydCgxIC0gLS10ICogdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjaXJjbGVJbk91dCh0KSB7XG4gIHJldHVybiAoKHQgKj0gMikgPD0gMSA/IDEgLSBNYXRoLnNxcnQoMSAtIHQgKiB0KSA6IE1hdGguc3FydCgxIC0gKHQgLT0gMikgKiB0KSArIDEpIC8gMjtcbn1cbiIsImV4cG9ydCBmdW5jdGlvbiBjdWJpY0luKHQpIHtcbiAgcmV0dXJuIHQgKiB0ICogdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGN1YmljT3V0KHQpIHtcbiAgcmV0dXJuIC0tdCAqIHQgKiB0ICsgMTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGN1YmljSW5PdXQodCkge1xuICByZXR1cm4gKCh0ICo9IDIpIDw9IDEgPyB0ICogdCAqIHQgOiAodCAtPSAyKSAqIHQgKiB0ICsgMikgLyAyO1xufVxuIiwiaW1wb3J0IHt0cG10fSBmcm9tIFwiLi9tYXRoLmpzXCI7XG5cbnZhciB0YXUgPSAyICogTWF0aC5QSSxcbiAgICBhbXBsaXR1ZGUgPSAxLFxuICAgIHBlcmlvZCA9IDAuMztcblxuZXhwb3J0IHZhciBlbGFzdGljSW4gPSAoZnVuY3Rpb24gY3VzdG9tKGEsIHApIHtcbiAgdmFyIHMgPSBNYXRoLmFzaW4oMSAvIChhID0gTWF0aC5tYXgoMSwgYSkpKSAqIChwIC89IHRhdSk7XG5cbiAgZnVuY3Rpb24gZWxhc3RpY0luKHQpIHtcbiAgICByZXR1cm4gYSAqIHRwbXQoLSgtLXQpKSAqIE1hdGguc2luKChzIC0gdCkgLyBwKTtcbiAgfVxuXG4gIGVsYXN0aWNJbi5hbXBsaXR1ZGUgPSBmdW5jdGlvbihhKSB7IHJldHVybiBjdXN0b20oYSwgcCAqIHRhdSk7IH07XG4gIGVsYXN0aWNJbi5wZXJpb2QgPSBmdW5jdGlvbihwKSB7IHJldHVybiBjdXN0b20oYSwgcCk7IH07XG5cbiAgcmV0dXJuIGVsYXN0aWNJbjtcbn0pKGFtcGxpdHVkZSwgcGVyaW9kKTtcblxuZXhwb3J0IHZhciBlbGFzdGljT3V0ID0gKGZ1bmN0aW9uIGN1c3RvbShhLCBwKSB7XG4gIHZhciBzID0gTWF0aC5hc2luKDEgLyAoYSA9IE1hdGgubWF4KDEsIGEpKSkgKiAocCAvPSB0YXUpO1xuXG4gIGZ1bmN0aW9uIGVsYXN0aWNPdXQodCkge1xuICAgIHJldHVybiAxIC0gYSAqIHRwbXQodCA9ICt0KSAqIE1hdGguc2luKCh0ICsgcykgLyBwKTtcbiAgfVxuXG4gIGVsYXN0aWNPdXQuYW1wbGl0dWRlID0gZnVuY3Rpb24oYSkgeyByZXR1cm4gY3VzdG9tKGEsIHAgKiB0YXUpOyB9O1xuICBlbGFzdGljT3V0LnBlcmlvZCA9IGZ1bmN0aW9uKHApIHsgcmV0dXJuIGN1c3RvbShhLCBwKTsgfTtcblxuICByZXR1cm4gZWxhc3RpY091dDtcbn0pKGFtcGxpdHVkZSwgcGVyaW9kKTtcblxuZXhwb3J0IHZhciBlbGFzdGljSW5PdXQgPSAoZnVuY3Rpb24gY3VzdG9tKGEsIHApIHtcbiAgdmFyIHMgPSBNYXRoLmFzaW4oMSAvIChhID0gTWF0aC5tYXgoMSwgYSkpKSAqIChwIC89IHRhdSk7XG5cbiAgZnVuY3Rpb24gZWxhc3RpY0luT3V0KHQpIHtcbiAgICByZXR1cm4gKCh0ID0gdCAqIDIgLSAxKSA8IDBcbiAgICAgICAgPyBhICogdHBtdCgtdCkgKiBNYXRoLnNpbigocyAtIHQpIC8gcClcbiAgICAgICAgOiAyIC0gYSAqIHRwbXQodCkgKiBNYXRoLnNpbigocyArIHQpIC8gcCkpIC8gMjtcbiAgfVxuXG4gIGVsYXN0aWNJbk91dC5hbXBsaXR1ZGUgPSBmdW5jdGlvbihhKSB7IHJldHVybiBjdXN0b20oYSwgcCAqIHRhdSk7IH07XG4gIGVsYXN0aWNJbk91dC5wZXJpb2QgPSBmdW5jdGlvbihwKSB7IHJldHVybiBjdXN0b20oYSwgcCk7IH07XG5cbiAgcmV0dXJuIGVsYXN0aWNJbk91dDtcbn0pKGFtcGxpdHVkZSwgcGVyaW9kKTtcbiIsImltcG9ydCB7dHBtdH0gZnJvbSBcIi4vbWF0aC5qc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gZXhwSW4odCkge1xuICByZXR1cm4gdHBtdCgxIC0gK3QpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhwT3V0KHQpIHtcbiAgcmV0dXJuIDEgLSB0cG10KHQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhwSW5PdXQodCkge1xuICByZXR1cm4gKCh0ICo9IDIpIDw9IDEgPyB0cG10KDEgLSB0KSA6IDIgLSB0cG10KHQgLSAxKSkgLyAyO1xufVxuIiwiZXhwb3J0IHtcbiAgbGluZWFyIGFzIGVhc2VMaW5lYXJcbn0gZnJvbSBcIi4vbGluZWFyLmpzXCI7XG5cbmV4cG9ydCB7XG4gIHF1YWRJbk91dCBhcyBlYXNlUXVhZCxcbiAgcXVhZEluIGFzIGVhc2VRdWFkSW4sXG4gIHF1YWRPdXQgYXMgZWFzZVF1YWRPdXQsXG4gIHF1YWRJbk91dCBhcyBlYXNlUXVhZEluT3V0XG59IGZyb20gXCIuL3F1YWQuanNcIjtcblxuZXhwb3J0IHtcbiAgY3ViaWNJbk91dCBhcyBlYXNlQ3ViaWMsXG4gIGN1YmljSW4gYXMgZWFzZUN1YmljSW4sXG4gIGN1YmljT3V0IGFzIGVhc2VDdWJpY091dCxcbiAgY3ViaWNJbk91dCBhcyBlYXNlQ3ViaWNJbk91dFxufSBmcm9tIFwiLi9jdWJpYy5qc1wiO1xuXG5leHBvcnQge1xuICBwb2x5SW5PdXQgYXMgZWFzZVBvbHksXG4gIHBvbHlJbiBhcyBlYXNlUG9seUluLFxuICBwb2x5T3V0IGFzIGVhc2VQb2x5T3V0LFxuICBwb2x5SW5PdXQgYXMgZWFzZVBvbHlJbk91dFxufSBmcm9tIFwiLi9wb2x5LmpzXCI7XG5cbmV4cG9ydCB7XG4gIHNpbkluT3V0IGFzIGVhc2VTaW4sXG4gIHNpbkluIGFzIGVhc2VTaW5JbixcbiAgc2luT3V0IGFzIGVhc2VTaW5PdXQsXG4gIHNpbkluT3V0IGFzIGVhc2VTaW5Jbk91dFxufSBmcm9tIFwiLi9zaW4uanNcIjtcblxuZXhwb3J0IHtcbiAgZXhwSW5PdXQgYXMgZWFzZUV4cCxcbiAgZXhwSW4gYXMgZWFzZUV4cEluLFxuICBleHBPdXQgYXMgZWFzZUV4cE91dCxcbiAgZXhwSW5PdXQgYXMgZWFzZUV4cEluT3V0XG59IGZyb20gXCIuL2V4cC5qc1wiO1xuXG5leHBvcnQge1xuICBjaXJjbGVJbk91dCBhcyBlYXNlQ2lyY2xlLFxuICBjaXJjbGVJbiBhcyBlYXNlQ2lyY2xlSW4sXG4gIGNpcmNsZU91dCBhcyBlYXNlQ2lyY2xlT3V0LFxuICBjaXJjbGVJbk91dCBhcyBlYXNlQ2lyY2xlSW5PdXRcbn0gZnJvbSBcIi4vY2lyY2xlLmpzXCI7XG5cbmV4cG9ydCB7XG4gIGJvdW5jZU91dCBhcyBlYXNlQm91bmNlLFxuICBib3VuY2VJbiBhcyBlYXNlQm91bmNlSW4sXG4gIGJvdW5jZU91dCBhcyBlYXNlQm91bmNlT3V0LFxuICBib3VuY2VJbk91dCBhcyBlYXNlQm91bmNlSW5PdXRcbn0gZnJvbSBcIi4vYm91bmNlLmpzXCI7XG5cbmV4cG9ydCB7XG4gIGJhY2tJbk91dCBhcyBlYXNlQmFjayxcbiAgYmFja0luIGFzIGVhc2VCYWNrSW4sXG4gIGJhY2tPdXQgYXMgZWFzZUJhY2tPdXQsXG4gIGJhY2tJbk91dCBhcyBlYXNlQmFja0luT3V0XG59IGZyb20gXCIuL2JhY2suanNcIjtcblxuZXhwb3J0IHtcbiAgZWxhc3RpY091dCBhcyBlYXNlRWxhc3RpYyxcbiAgZWxhc3RpY0luIGFzIGVhc2VFbGFzdGljSW4sXG4gIGVsYXN0aWNPdXQgYXMgZWFzZUVsYXN0aWNPdXQsXG4gIGVsYXN0aWNJbk91dCBhcyBlYXNlRWxhc3RpY0luT3V0XG59IGZyb20gXCIuL2VsYXN0aWMuanNcIjtcbiIsImV4cG9ydCBmdW5jdGlvbiBsaW5lYXIodCkge1xuICByZXR1cm4gK3Q7XG59XG4iLCIvLyB0cG10IGlzIHR3byBwb3dlciBtaW51cyB0ZW4gdGltZXMgdCBzY2FsZWQgdG8gWzAsMV1cbmV4cG9ydCBmdW5jdGlvbiB0cG10KHgpIHtcbiAgcmV0dXJuIChNYXRoLnBvdygyLCAtMTAgKiB4KSAtIDAuMDAwOTc2NTYyNSkgKiAxLjAwMDk3NzUxNzEwNjU0OTQ7XG59XG4iLCJ2YXIgZXhwb25lbnQgPSAzO1xuXG5leHBvcnQgdmFyIHBvbHlJbiA9IChmdW5jdGlvbiBjdXN0b20oZSkge1xuICBlID0gK2U7XG5cbiAgZnVuY3Rpb24gcG9seUluKHQpIHtcbiAgICByZXR1cm4gTWF0aC5wb3codCwgZSk7XG4gIH1cblxuICBwb2x5SW4uZXhwb25lbnQgPSBjdXN0b207XG5cbiAgcmV0dXJuIHBvbHlJbjtcbn0pKGV4cG9uZW50KTtcblxuZXhwb3J0IHZhciBwb2x5T3V0ID0gKGZ1bmN0aW9uIGN1c3RvbShlKSB7XG4gIGUgPSArZTtcblxuICBmdW5jdGlvbiBwb2x5T3V0KHQpIHtcbiAgICByZXR1cm4gMSAtIE1hdGgucG93KDEgLSB0LCBlKTtcbiAgfVxuXG4gIHBvbHlPdXQuZXhwb25lbnQgPSBjdXN0b207XG5cbiAgcmV0dXJuIHBvbHlPdXQ7XG59KShleHBvbmVudCk7XG5cbmV4cG9ydCB2YXIgcG9seUluT3V0ID0gKGZ1bmN0aW9uIGN1c3RvbShlKSB7XG4gIGUgPSArZTtcblxuICBmdW5jdGlvbiBwb2x5SW5PdXQodCkge1xuICAgIHJldHVybiAoKHQgKj0gMikgPD0gMSA/IE1hdGgucG93KHQsIGUpIDogMiAtIE1hdGgucG93KDIgLSB0LCBlKSkgLyAyO1xuICB9XG5cbiAgcG9seUluT3V0LmV4cG9uZW50ID0gY3VzdG9tO1xuXG4gIHJldHVybiBwb2x5SW5PdXQ7XG59KShleHBvbmVudCk7XG4iLCJleHBvcnQgZnVuY3Rpb24gcXVhZEluKHQpIHtcbiAgcmV0dXJuIHQgKiB0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcXVhZE91dCh0KSB7XG4gIHJldHVybiB0ICogKDIgLSB0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHF1YWRJbk91dCh0KSB7XG4gIHJldHVybiAoKHQgKj0gMikgPD0gMSA/IHQgKiB0IDogLS10ICogKDIgLSB0KSArIDEpIC8gMjtcbn1cbiIsInZhciBwaSA9IE1hdGguUEksXG4gICAgaGFsZlBpID0gcGkgLyAyO1xuXG5leHBvcnQgZnVuY3Rpb24gc2luSW4odCkge1xuICByZXR1cm4gKCt0ID09PSAxKSA/IDEgOiAxIC0gTWF0aC5jb3ModCAqIGhhbGZQaSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaW5PdXQodCkge1xuICByZXR1cm4gTWF0aC5zaW4odCAqIGhhbGZQaSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaW5Jbk91dCh0KSB7XG4gIHJldHVybiAoMSAtIE1hdGguY29zKHBpICogdCkpIC8gMjtcbn1cbiIsImZ1bmN0aW9uIHJlc3BvbnNlQmxvYihyZXNwb25zZSkge1xuICBpZiAoIXJlc3BvbnNlLm9rKSB0aHJvdyBuZXcgRXJyb3IocmVzcG9uc2Uuc3RhdHVzICsgXCIgXCIgKyByZXNwb25zZS5zdGF0dXNUZXh0KTtcbiAgcmV0dXJuIHJlc3BvbnNlLmJsb2IoKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5wdXQsIGluaXQpIHtcbiAgcmV0dXJuIGZldGNoKGlucHV0LCBpbml0KS50aGVuKHJlc3BvbnNlQmxvYik7XG59XG4iLCJmdW5jdGlvbiByZXNwb25zZUFycmF5QnVmZmVyKHJlc3BvbnNlKSB7XG4gIGlmICghcmVzcG9uc2Uub2spIHRocm93IG5ldyBFcnJvcihyZXNwb25zZS5zdGF0dXMgKyBcIiBcIiArIHJlc3BvbnNlLnN0YXR1c1RleHQpO1xuICByZXR1cm4gcmVzcG9uc2UuYXJyYXlCdWZmZXIoKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5wdXQsIGluaXQpIHtcbiAgcmV0dXJuIGZldGNoKGlucHV0LCBpbml0KS50aGVuKHJlc3BvbnNlQXJyYXlCdWZmZXIpO1xufVxuIiwiaW1wb3J0IHtjc3ZQYXJzZSwgZHN2Rm9ybWF0LCB0c3ZQYXJzZX0gZnJvbSBcImQzLWRzdlwiO1xuaW1wb3J0IHRleHQgZnJvbSBcIi4vdGV4dC5qc1wiO1xuXG5mdW5jdGlvbiBkc3ZQYXJzZShwYXJzZSkge1xuICByZXR1cm4gZnVuY3Rpb24oaW5wdXQsIGluaXQsIHJvdykge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyICYmIHR5cGVvZiBpbml0ID09PSBcImZ1bmN0aW9uXCIpIHJvdyA9IGluaXQsIGluaXQgPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHRleHQoaW5wdXQsIGluaXQpLnRoZW4oZnVuY3Rpb24ocmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiBwYXJzZShyZXNwb25zZSwgcm93KTtcbiAgICB9KTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZHN2KGRlbGltaXRlciwgaW5wdXQsIGluaXQsIHJvdykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMyAmJiB0eXBlb2YgaW5pdCA9PT0gXCJmdW5jdGlvblwiKSByb3cgPSBpbml0LCBpbml0ID0gdW5kZWZpbmVkO1xuICB2YXIgZm9ybWF0ID0gZHN2Rm9ybWF0KGRlbGltaXRlcik7XG4gIHJldHVybiB0ZXh0KGlucHV0LCBpbml0KS50aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKSB7XG4gICAgcmV0dXJuIGZvcm1hdC5wYXJzZShyZXNwb25zZSwgcm93KTtcbiAgfSk7XG59XG5cbmV4cG9ydCB2YXIgY3N2ID0gZHN2UGFyc2UoY3N2UGFyc2UpO1xuZXhwb3J0IHZhciB0c3YgPSBkc3ZQYXJzZSh0c3ZQYXJzZSk7XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihpbnB1dCwgaW5pdCkge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgdmFyIGltYWdlID0gbmV3IEltYWdlO1xuICAgIGZvciAodmFyIGtleSBpbiBpbml0KSBpbWFnZVtrZXldID0gaW5pdFtrZXldO1xuICAgIGltYWdlLm9uZXJyb3IgPSByZWplY3Q7XG4gICAgaW1hZ2Uub25sb2FkID0gZnVuY3Rpb24oKSB7IHJlc29sdmUoaW1hZ2UpOyB9O1xuICAgIGltYWdlLnNyYyA9IGlucHV0O1xuICB9KTtcbn1cbiIsImV4cG9ydCB7ZGVmYXVsdCBhcyBibG9ifSBmcm9tIFwiLi9ibG9iLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgYnVmZmVyfSBmcm9tIFwiLi9idWZmZXIuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBkc3YsIGNzdiwgdHN2fSBmcm9tIFwiLi9kc3YuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbWFnZX0gZnJvbSBcIi4vaW1hZ2UuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBqc29ufSBmcm9tIFwiLi9qc29uLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgdGV4dH0gZnJvbSBcIi4vdGV4dC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHhtbCwgaHRtbCwgc3ZnfSBmcm9tIFwiLi94bWwuanNcIjtcbiIsImZ1bmN0aW9uIHJlc3BvbnNlSnNvbihyZXNwb25zZSkge1xuICBpZiAoIXJlc3BvbnNlLm9rKSB0aHJvdyBuZXcgRXJyb3IocmVzcG9uc2Uuc3RhdHVzICsgXCIgXCIgKyByZXNwb25zZS5zdGF0dXNUZXh0KTtcbiAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gMjA0IHx8IHJlc3BvbnNlLnN0YXR1cyA9PT0gMjA1KSByZXR1cm47XG4gIHJldHVybiByZXNwb25zZS5qc29uKCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGlucHV0LCBpbml0KSB7XG4gIHJldHVybiBmZXRjaChpbnB1dCwgaW5pdCkudGhlbihyZXNwb25zZUpzb24pO1xufVxuIiwiZnVuY3Rpb24gcmVzcG9uc2VUZXh0KHJlc3BvbnNlKSB7XG4gIGlmICghcmVzcG9uc2Uub2spIHRocm93IG5ldyBFcnJvcihyZXNwb25zZS5zdGF0dXMgKyBcIiBcIiArIHJlc3BvbnNlLnN0YXR1c1RleHQpO1xuICByZXR1cm4gcmVzcG9uc2UudGV4dCgpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihpbnB1dCwgaW5pdCkge1xuICByZXR1cm4gZmV0Y2goaW5wdXQsIGluaXQpLnRoZW4ocmVzcG9uc2VUZXh0KTtcbn1cbiIsImltcG9ydCB0ZXh0IGZyb20gXCIuL3RleHQuanNcIjtcblxuZnVuY3Rpb24gcGFyc2VyKHR5cGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGlucHV0LCBpbml0KSAge1xuICAgIHJldHVybiB0ZXh0KGlucHV0LCBpbml0KS50aGVuKGZ1bmN0aW9uKHRleHQpIHtcbiAgICAgIHJldHVybiAobmV3IERPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKHRleHQsIHR5cGUpO1xuICAgIH0pO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBwYXJzZXIoXCJhcHBsaWNhdGlvbi94bWxcIik7XG5cbmV4cG9ydCB2YXIgaHRtbCA9IHBhcnNlcihcInRleHQvaHRtbFwiKTtcblxuZXhwb3J0IHZhciBzdmcgPSBwYXJzZXIoXCJpbWFnZS9zdmcreG1sXCIpO1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCwgeSkge1xuICB2YXIgbm9kZXM7XG5cbiAgaWYgKHggPT0gbnVsbCkgeCA9IDA7XG4gIGlmICh5ID09IG51bGwpIHkgPSAwO1xuXG4gIGZ1bmN0aW9uIGZvcmNlKCkge1xuICAgIHZhciBpLFxuICAgICAgICBuID0gbm9kZXMubGVuZ3RoLFxuICAgICAgICBub2RlLFxuICAgICAgICBzeCA9IDAsXG4gICAgICAgIHN5ID0gMDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIG5vZGUgPSBub2Rlc1tpXSwgc3ggKz0gbm9kZS54LCBzeSArPSBub2RlLnk7XG4gICAgfVxuXG4gICAgZm9yIChzeCA9IHN4IC8gbiAtIHgsIHN5ID0gc3kgLyBuIC0geSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIG5vZGUgPSBub2Rlc1tpXSwgbm9kZS54IC09IHN4LCBub2RlLnkgLT0gc3k7XG4gICAgfVxuICB9XG5cbiAgZm9yY2UuaW5pdGlhbGl6ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICBub2RlcyA9IF87XG4gIH07XG5cbiAgZm9yY2UueCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh4ID0gK18sIGZvcmNlKSA6IHg7XG4gIH07XG5cbiAgZm9yY2UueSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh5ID0gK18sIGZvcmNlKSA6IHk7XG4gIH07XG5cbiAgcmV0dXJuIGZvcmNlO1xufVxuIiwiaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuL2NvbnN0YW50XCI7XG5pbXBvcnQgamlnZ2xlIGZyb20gXCIuL2ppZ2dsZVwiO1xuaW1wb3J0IHtxdWFkdHJlZX0gZnJvbSBcImQzLXF1YWR0cmVlXCI7XG5cbmZ1bmN0aW9uIHgoZCkge1xuICByZXR1cm4gZC54ICsgZC52eDtcbn1cblxuZnVuY3Rpb24geShkKSB7XG4gIHJldHVybiBkLnkgKyBkLnZ5O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihyYWRpdXMpIHtcbiAgdmFyIG5vZGVzLFxuICAgICAgcmFkaWksXG4gICAgICBzdHJlbmd0aCA9IDEsXG4gICAgICBpdGVyYXRpb25zID0gMTtcblxuICBpZiAodHlwZW9mIHJhZGl1cyAhPT0gXCJmdW5jdGlvblwiKSByYWRpdXMgPSBjb25zdGFudChyYWRpdXMgPT0gbnVsbCA/IDEgOiArcmFkaXVzKTtcblxuICBmdW5jdGlvbiBmb3JjZSgpIHtcbiAgICB2YXIgaSwgbiA9IG5vZGVzLmxlbmd0aCxcbiAgICAgICAgdHJlZSxcbiAgICAgICAgbm9kZSxcbiAgICAgICAgeGksXG4gICAgICAgIHlpLFxuICAgICAgICByaSxcbiAgICAgICAgcmkyO1xuXG4gICAgZm9yICh2YXIgayA9IDA7IGsgPCBpdGVyYXRpb25zOyArK2spIHtcbiAgICAgIHRyZWUgPSBxdWFkdHJlZShub2RlcywgeCwgeSkudmlzaXRBZnRlcihwcmVwYXJlKTtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgICAgbm9kZSA9IG5vZGVzW2ldO1xuICAgICAgICByaSA9IHJhZGlpW25vZGUuaW5kZXhdLCByaTIgPSByaSAqIHJpO1xuICAgICAgICB4aSA9IG5vZGUueCArIG5vZGUudng7XG4gICAgICAgIHlpID0gbm9kZS55ICsgbm9kZS52eTtcbiAgICAgICAgdHJlZS52aXNpdChhcHBseSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYXBwbHkocXVhZCwgeDAsIHkwLCB4MSwgeTEpIHtcbiAgICAgIHZhciBkYXRhID0gcXVhZC5kYXRhLCByaiA9IHF1YWQuciwgciA9IHJpICsgcmo7XG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICBpZiAoZGF0YS5pbmRleCA+IG5vZGUuaW5kZXgpIHtcbiAgICAgICAgICB2YXIgeCA9IHhpIC0gZGF0YS54IC0gZGF0YS52eCxcbiAgICAgICAgICAgICAgeSA9IHlpIC0gZGF0YS55IC0gZGF0YS52eSxcbiAgICAgICAgICAgICAgbCA9IHggKiB4ICsgeSAqIHk7XG4gICAgICAgICAgaWYgKGwgPCByICogcikge1xuICAgICAgICAgICAgaWYgKHggPT09IDApIHggPSBqaWdnbGUoKSwgbCArPSB4ICogeDtcbiAgICAgICAgICAgIGlmICh5ID09PSAwKSB5ID0gamlnZ2xlKCksIGwgKz0geSAqIHk7XG4gICAgICAgICAgICBsID0gKHIgLSAobCA9IE1hdGguc3FydChsKSkpIC8gbCAqIHN0cmVuZ3RoO1xuICAgICAgICAgICAgbm9kZS52eCArPSAoeCAqPSBsKSAqIChyID0gKHJqICo9IHJqKSAvIChyaTIgKyByaikpO1xuICAgICAgICAgICAgbm9kZS52eSArPSAoeSAqPSBsKSAqIHI7XG4gICAgICAgICAgICBkYXRhLnZ4IC09IHggKiAociA9IDEgLSByKTtcbiAgICAgICAgICAgIGRhdGEudnkgLT0geSAqIHI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHJldHVybiB4MCA+IHhpICsgciB8fCB4MSA8IHhpIC0gciB8fCB5MCA+IHlpICsgciB8fCB5MSA8IHlpIC0gcjtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBwcmVwYXJlKHF1YWQpIHtcbiAgICBpZiAocXVhZC5kYXRhKSByZXR1cm4gcXVhZC5yID0gcmFkaWlbcXVhZC5kYXRhLmluZGV4XTtcbiAgICBmb3IgKHZhciBpID0gcXVhZC5yID0gMDsgaSA8IDQ7ICsraSkge1xuICAgICAgaWYgKHF1YWRbaV0gJiYgcXVhZFtpXS5yID4gcXVhZC5yKSB7XG4gICAgICAgIHF1YWQuciA9IHF1YWRbaV0ucjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpbml0aWFsaXplKCkge1xuICAgIGlmICghbm9kZXMpIHJldHVybjtcbiAgICB2YXIgaSwgbiA9IG5vZGVzLmxlbmd0aCwgbm9kZTtcbiAgICByYWRpaSA9IG5ldyBBcnJheShuKTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSBub2RlID0gbm9kZXNbaV0sIHJhZGlpW25vZGUuaW5kZXhdID0gK3JhZGl1cyhub2RlLCBpLCBub2Rlcyk7XG4gIH1cblxuICBmb3JjZS5pbml0aWFsaXplID0gZnVuY3Rpb24oXykge1xuICAgIG5vZGVzID0gXztcbiAgICBpbml0aWFsaXplKCk7XG4gIH07XG5cbiAgZm9yY2UuaXRlcmF0aW9ucyA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChpdGVyYXRpb25zID0gK18sIGZvcmNlKSA6IGl0ZXJhdGlvbnM7XG4gIH07XG5cbiAgZm9yY2Uuc3RyZW5ndGggPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoc3RyZW5ndGggPSArXywgZm9yY2UpIDogc3RyZW5ndGg7XG4gIH07XG5cbiAgZm9yY2UucmFkaXVzID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHJhZGl1cyA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBpbml0aWFsaXplKCksIGZvcmNlKSA6IHJhZGl1cztcbiAgfTtcblxuICByZXR1cm4gZm9yY2U7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4geDtcbiAgfTtcbn1cbiIsImV4cG9ydCB7ZGVmYXVsdCBhcyBmb3JjZUNlbnRlcn0gZnJvbSBcIi4vY2VudGVyXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZm9yY2VDb2xsaWRlfSBmcm9tIFwiLi9jb2xsaWRlXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZm9yY2VMaW5rfSBmcm9tIFwiLi9saW5rXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZm9yY2VNYW55Qm9keX0gZnJvbSBcIi4vbWFueUJvZHlcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBmb3JjZVJhZGlhbH0gZnJvbSBcIi4vcmFkaWFsXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZm9yY2VTaW11bGF0aW9ufSBmcm9tIFwiLi9zaW11bGF0aW9uXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZm9yY2VYfSBmcm9tIFwiLi94XCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZm9yY2VZfSBmcm9tIFwiLi95XCI7XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIChNYXRoLnJhbmRvbSgpIC0gMC41KSAqIDFlLTY7XG59XG4iLCJpbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnRcIjtcbmltcG9ydCBqaWdnbGUgZnJvbSBcIi4vamlnZ2xlXCI7XG5pbXBvcnQge21hcH0gZnJvbSBcImQzLWNvbGxlY3Rpb25cIjtcblxuZnVuY3Rpb24gaW5kZXgoZCkge1xuICByZXR1cm4gZC5pbmRleDtcbn1cblxuZnVuY3Rpb24gZmluZChub2RlQnlJZCwgbm9kZUlkKSB7XG4gIHZhciBub2RlID0gbm9kZUJ5SWQuZ2V0KG5vZGVJZCk7XG4gIGlmICghbm9kZSkgdGhyb3cgbmV3IEVycm9yKFwibWlzc2luZzogXCIgKyBub2RlSWQpO1xuICByZXR1cm4gbm9kZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obGlua3MpIHtcbiAgdmFyIGlkID0gaW5kZXgsXG4gICAgICBzdHJlbmd0aCA9IGRlZmF1bHRTdHJlbmd0aCxcbiAgICAgIHN0cmVuZ3RocyxcbiAgICAgIGRpc3RhbmNlID0gY29uc3RhbnQoMzApLFxuICAgICAgZGlzdGFuY2VzLFxuICAgICAgbm9kZXMsXG4gICAgICBjb3VudCxcbiAgICAgIGJpYXMsXG4gICAgICBpdGVyYXRpb25zID0gMTtcblxuICBpZiAobGlua3MgPT0gbnVsbCkgbGlua3MgPSBbXTtcblxuICBmdW5jdGlvbiBkZWZhdWx0U3RyZW5ndGgobGluaykge1xuICAgIHJldHVybiAxIC8gTWF0aC5taW4oY291bnRbbGluay5zb3VyY2UuaW5kZXhdLCBjb3VudFtsaW5rLnRhcmdldC5pbmRleF0pO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9yY2UoYWxwaGEpIHtcbiAgICBmb3IgKHZhciBrID0gMCwgbiA9IGxpbmtzLmxlbmd0aDsgayA8IGl0ZXJhdGlvbnM7ICsraykge1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGxpbmssIHNvdXJjZSwgdGFyZ2V0LCB4LCB5LCBsLCBiOyBpIDwgbjsgKytpKSB7XG4gICAgICAgIGxpbmsgPSBsaW5rc1tpXSwgc291cmNlID0gbGluay5zb3VyY2UsIHRhcmdldCA9IGxpbmsudGFyZ2V0O1xuICAgICAgICB4ID0gdGFyZ2V0LnggKyB0YXJnZXQudnggLSBzb3VyY2UueCAtIHNvdXJjZS52eCB8fCBqaWdnbGUoKTtcbiAgICAgICAgeSA9IHRhcmdldC55ICsgdGFyZ2V0LnZ5IC0gc291cmNlLnkgLSBzb3VyY2UudnkgfHwgamlnZ2xlKCk7XG4gICAgICAgIGwgPSBNYXRoLnNxcnQoeCAqIHggKyB5ICogeSk7XG4gICAgICAgIGwgPSAobCAtIGRpc3RhbmNlc1tpXSkgLyBsICogYWxwaGEgKiBzdHJlbmd0aHNbaV07XG4gICAgICAgIHggKj0gbCwgeSAqPSBsO1xuICAgICAgICB0YXJnZXQudnggLT0geCAqIChiID0gYmlhc1tpXSk7XG4gICAgICAgIHRhcmdldC52eSAtPSB5ICogYjtcbiAgICAgICAgc291cmNlLnZ4ICs9IHggKiAoYiA9IDEgLSBiKTtcbiAgICAgICAgc291cmNlLnZ5ICs9IHkgKiBiO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXRpYWxpemUoKSB7XG4gICAgaWYgKCFub2RlcykgcmV0dXJuO1xuXG4gICAgdmFyIGksXG4gICAgICAgIG4gPSBub2Rlcy5sZW5ndGgsXG4gICAgICAgIG0gPSBsaW5rcy5sZW5ndGgsXG4gICAgICAgIG5vZGVCeUlkID0gbWFwKG5vZGVzLCBpZCksXG4gICAgICAgIGxpbms7XG5cbiAgICBmb3IgKGkgPSAwLCBjb3VudCA9IG5ldyBBcnJheShuKTsgaSA8IG07ICsraSkge1xuICAgICAgbGluayA9IGxpbmtzW2ldLCBsaW5rLmluZGV4ID0gaTtcbiAgICAgIGlmICh0eXBlb2YgbGluay5zb3VyY2UgIT09IFwib2JqZWN0XCIpIGxpbmsuc291cmNlID0gZmluZChub2RlQnlJZCwgbGluay5zb3VyY2UpO1xuICAgICAgaWYgKHR5cGVvZiBsaW5rLnRhcmdldCAhPT0gXCJvYmplY3RcIikgbGluay50YXJnZXQgPSBmaW5kKG5vZGVCeUlkLCBsaW5rLnRhcmdldCk7XG4gICAgICBjb3VudFtsaW5rLnNvdXJjZS5pbmRleF0gPSAoY291bnRbbGluay5zb3VyY2UuaW5kZXhdIHx8IDApICsgMTtcbiAgICAgIGNvdW50W2xpbmsudGFyZ2V0LmluZGV4XSA9IChjb3VudFtsaW5rLnRhcmdldC5pbmRleF0gfHwgMCkgKyAxO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDAsIGJpYXMgPSBuZXcgQXJyYXkobSk7IGkgPCBtOyArK2kpIHtcbiAgICAgIGxpbmsgPSBsaW5rc1tpXSwgYmlhc1tpXSA9IGNvdW50W2xpbmsuc291cmNlLmluZGV4XSAvIChjb3VudFtsaW5rLnNvdXJjZS5pbmRleF0gKyBjb3VudFtsaW5rLnRhcmdldC5pbmRleF0pO1xuICAgIH1cblxuICAgIHN0cmVuZ3RocyA9IG5ldyBBcnJheShtKSwgaW5pdGlhbGl6ZVN0cmVuZ3RoKCk7XG4gICAgZGlzdGFuY2VzID0gbmV3IEFycmF5KG0pLCBpbml0aWFsaXplRGlzdGFuY2UoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXRpYWxpemVTdHJlbmd0aCgpIHtcbiAgICBpZiAoIW5vZGVzKSByZXR1cm47XG5cbiAgICBmb3IgKHZhciBpID0gMCwgbiA9IGxpbmtzLmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgICAgc3RyZW5ndGhzW2ldID0gK3N0cmVuZ3RoKGxpbmtzW2ldLCBpLCBsaW5rcyk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaW5pdGlhbGl6ZURpc3RhbmNlKCkge1xuICAgIGlmICghbm9kZXMpIHJldHVybjtcblxuICAgIGZvciAodmFyIGkgPSAwLCBuID0gbGlua3MubGVuZ3RoOyBpIDwgbjsgKytpKSB7XG4gICAgICBkaXN0YW5jZXNbaV0gPSArZGlzdGFuY2UobGlua3NbaV0sIGksIGxpbmtzKTtcbiAgICB9XG4gIH1cblxuICBmb3JjZS5pbml0aWFsaXplID0gZnVuY3Rpb24oXykge1xuICAgIG5vZGVzID0gXztcbiAgICBpbml0aWFsaXplKCk7XG4gIH07XG5cbiAgZm9yY2UubGlua3MgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAobGlua3MgPSBfLCBpbml0aWFsaXplKCksIGZvcmNlKSA6IGxpbmtzO1xuICB9O1xuXG4gIGZvcmNlLmlkID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGlkID0gXywgZm9yY2UpIDogaWQ7XG4gIH07XG5cbiAgZm9yY2UuaXRlcmF0aW9ucyA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChpdGVyYXRpb25zID0gK18sIGZvcmNlKSA6IGl0ZXJhdGlvbnM7XG4gIH07XG5cbiAgZm9yY2Uuc3RyZW5ndGggPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoc3RyZW5ndGggPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgaW5pdGlhbGl6ZVN0cmVuZ3RoKCksIGZvcmNlKSA6IHN0cmVuZ3RoO1xuICB9O1xuXG4gIGZvcmNlLmRpc3RhbmNlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGRpc3RhbmNlID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGluaXRpYWxpemVEaXN0YW5jZSgpLCBmb3JjZSkgOiBkaXN0YW5jZTtcbiAgfTtcblxuICByZXR1cm4gZm9yY2U7XG59XG4iLCJpbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnRcIjtcbmltcG9ydCBqaWdnbGUgZnJvbSBcIi4vamlnZ2xlXCI7XG5pbXBvcnQge3F1YWR0cmVlfSBmcm9tIFwiZDMtcXVhZHRyZWVcIjtcbmltcG9ydCB7eCwgeX0gZnJvbSBcIi4vc2ltdWxhdGlvblwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIG5vZGVzLFxuICAgICAgbm9kZSxcbiAgICAgIGFscGhhLFxuICAgICAgc3RyZW5ndGggPSBjb25zdGFudCgtMzApLFxuICAgICAgc3RyZW5ndGhzLFxuICAgICAgZGlzdGFuY2VNaW4yID0gMSxcbiAgICAgIGRpc3RhbmNlTWF4MiA9IEluZmluaXR5LFxuICAgICAgdGhldGEyID0gMC44MTtcblxuICBmdW5jdGlvbiBmb3JjZShfKSB7XG4gICAgdmFyIGksIG4gPSBub2Rlcy5sZW5ndGgsIHRyZWUgPSBxdWFkdHJlZShub2RlcywgeCwgeSkudmlzaXRBZnRlcihhY2N1bXVsYXRlKTtcbiAgICBmb3IgKGFscGhhID0gXywgaSA9IDA7IGkgPCBuOyArK2kpIG5vZGUgPSBub2Rlc1tpXSwgdHJlZS52aXNpdChhcHBseSk7XG4gIH1cblxuICBmdW5jdGlvbiBpbml0aWFsaXplKCkge1xuICAgIGlmICghbm9kZXMpIHJldHVybjtcbiAgICB2YXIgaSwgbiA9IG5vZGVzLmxlbmd0aCwgbm9kZTtcbiAgICBzdHJlbmd0aHMgPSBuZXcgQXJyYXkobik7XG4gICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkgbm9kZSA9IG5vZGVzW2ldLCBzdHJlbmd0aHNbbm9kZS5pbmRleF0gPSArc3RyZW5ndGgobm9kZSwgaSwgbm9kZXMpO1xuICB9XG5cbiAgZnVuY3Rpb24gYWNjdW11bGF0ZShxdWFkKSB7XG4gICAgdmFyIHN0cmVuZ3RoID0gMCwgcSwgYywgd2VpZ2h0ID0gMCwgeCwgeSwgaTtcblxuICAgIC8vIEZvciBpbnRlcm5hbCBub2RlcywgYWNjdW11bGF0ZSBmb3JjZXMgZnJvbSBjaGlsZCBxdWFkcmFudHMuXG4gICAgaWYgKHF1YWQubGVuZ3RoKSB7XG4gICAgICBmb3IgKHggPSB5ID0gaSA9IDA7IGkgPCA0OyArK2kpIHtcbiAgICAgICAgaWYgKChxID0gcXVhZFtpXSkgJiYgKGMgPSBNYXRoLmFicyhxLnZhbHVlKSkpIHtcbiAgICAgICAgICBzdHJlbmd0aCArPSBxLnZhbHVlLCB3ZWlnaHQgKz0gYywgeCArPSBjICogcS54LCB5ICs9IGMgKiBxLnk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHF1YWQueCA9IHggLyB3ZWlnaHQ7XG4gICAgICBxdWFkLnkgPSB5IC8gd2VpZ2h0O1xuICAgIH1cblxuICAgIC8vIEZvciBsZWFmIG5vZGVzLCBhY2N1bXVsYXRlIGZvcmNlcyBmcm9tIGNvaW5jaWRlbnQgcXVhZHJhbnRzLlxuICAgIGVsc2Uge1xuICAgICAgcSA9IHF1YWQ7XG4gICAgICBxLnggPSBxLmRhdGEueDtcbiAgICAgIHEueSA9IHEuZGF0YS55O1xuICAgICAgZG8gc3RyZW5ndGggKz0gc3RyZW5ndGhzW3EuZGF0YS5pbmRleF07XG4gICAgICB3aGlsZSAocSA9IHEubmV4dCk7XG4gICAgfVxuXG4gICAgcXVhZC52YWx1ZSA9IHN0cmVuZ3RoO1xuICB9XG5cbiAgZnVuY3Rpb24gYXBwbHkocXVhZCwgeDEsIF8sIHgyKSB7XG4gICAgaWYgKCFxdWFkLnZhbHVlKSByZXR1cm4gdHJ1ZTtcblxuICAgIHZhciB4ID0gcXVhZC54IC0gbm9kZS54LFxuICAgICAgICB5ID0gcXVhZC55IC0gbm9kZS55LFxuICAgICAgICB3ID0geDIgLSB4MSxcbiAgICAgICAgbCA9IHggKiB4ICsgeSAqIHk7XG5cbiAgICAvLyBBcHBseSB0aGUgQmFybmVzLUh1dCBhcHByb3hpbWF0aW9uIGlmIHBvc3NpYmxlLlxuICAgIC8vIExpbWl0IGZvcmNlcyBmb3IgdmVyeSBjbG9zZSBub2RlczsgcmFuZG9taXplIGRpcmVjdGlvbiBpZiBjb2luY2lkZW50LlxuICAgIGlmICh3ICogdyAvIHRoZXRhMiA8IGwpIHtcbiAgICAgIGlmIChsIDwgZGlzdGFuY2VNYXgyKSB7XG4gICAgICAgIGlmICh4ID09PSAwKSB4ID0gamlnZ2xlKCksIGwgKz0geCAqIHg7XG4gICAgICAgIGlmICh5ID09PSAwKSB5ID0gamlnZ2xlKCksIGwgKz0geSAqIHk7XG4gICAgICAgIGlmIChsIDwgZGlzdGFuY2VNaW4yKSBsID0gTWF0aC5zcXJ0KGRpc3RhbmNlTWluMiAqIGwpO1xuICAgICAgICBub2RlLnZ4ICs9IHggKiBxdWFkLnZhbHVlICogYWxwaGEgLyBsO1xuICAgICAgICBub2RlLnZ5ICs9IHkgKiBxdWFkLnZhbHVlICogYWxwaGEgLyBsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gT3RoZXJ3aXNlLCBwcm9jZXNzIHBvaW50cyBkaXJlY3RseS5cbiAgICBlbHNlIGlmIChxdWFkLmxlbmd0aCB8fCBsID49IGRpc3RhbmNlTWF4MikgcmV0dXJuO1xuXG4gICAgLy8gTGltaXQgZm9yY2VzIGZvciB2ZXJ5IGNsb3NlIG5vZGVzOyByYW5kb21pemUgZGlyZWN0aW9uIGlmIGNvaW5jaWRlbnQuXG4gICAgaWYgKHF1YWQuZGF0YSAhPT0gbm9kZSB8fCBxdWFkLm5leHQpIHtcbiAgICAgIGlmICh4ID09PSAwKSB4ID0gamlnZ2xlKCksIGwgKz0geCAqIHg7XG4gICAgICBpZiAoeSA9PT0gMCkgeSA9IGppZ2dsZSgpLCBsICs9IHkgKiB5O1xuICAgICAgaWYgKGwgPCBkaXN0YW5jZU1pbjIpIGwgPSBNYXRoLnNxcnQoZGlzdGFuY2VNaW4yICogbCk7XG4gICAgfVxuXG4gICAgZG8gaWYgKHF1YWQuZGF0YSAhPT0gbm9kZSkge1xuICAgICAgdyA9IHN0cmVuZ3Roc1txdWFkLmRhdGEuaW5kZXhdICogYWxwaGEgLyBsO1xuICAgICAgbm9kZS52eCArPSB4ICogdztcbiAgICAgIG5vZGUudnkgKz0geSAqIHc7XG4gICAgfSB3aGlsZSAocXVhZCA9IHF1YWQubmV4dCk7XG4gIH1cblxuICBmb3JjZS5pbml0aWFsaXplID0gZnVuY3Rpb24oXykge1xuICAgIG5vZGVzID0gXztcbiAgICBpbml0aWFsaXplKCk7XG4gIH07XG5cbiAgZm9yY2Uuc3RyZW5ndGggPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoc3RyZW5ndGggPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgaW5pdGlhbGl6ZSgpLCBmb3JjZSkgOiBzdHJlbmd0aDtcbiAgfTtcblxuICBmb3JjZS5kaXN0YW5jZU1pbiA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChkaXN0YW5jZU1pbjIgPSBfICogXywgZm9yY2UpIDogTWF0aC5zcXJ0KGRpc3RhbmNlTWluMik7XG4gIH07XG5cbiAgZm9yY2UuZGlzdGFuY2VNYXggPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZGlzdGFuY2VNYXgyID0gXyAqIF8sIGZvcmNlKSA6IE1hdGguc3FydChkaXN0YW5jZU1heDIpO1xuICB9O1xuXG4gIGZvcmNlLnRoZXRhID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRoZXRhMiA9IF8gKiBfLCBmb3JjZSkgOiBNYXRoLnNxcnQodGhldGEyKTtcbiAgfTtcblxuICByZXR1cm4gZm9yY2U7XG59XG4iLCJpbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnRcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24ocmFkaXVzLCB4LCB5KSB7XG4gIHZhciBub2RlcyxcbiAgICAgIHN0cmVuZ3RoID0gY29uc3RhbnQoMC4xKSxcbiAgICAgIHN0cmVuZ3RocyxcbiAgICAgIHJhZGl1c2VzO1xuXG4gIGlmICh0eXBlb2YgcmFkaXVzICE9PSBcImZ1bmN0aW9uXCIpIHJhZGl1cyA9IGNvbnN0YW50KCtyYWRpdXMpO1xuICBpZiAoeCA9PSBudWxsKSB4ID0gMDtcbiAgaWYgKHkgPT0gbnVsbCkgeSA9IDA7XG5cbiAgZnVuY3Rpb24gZm9yY2UoYWxwaGEpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgbiA9IG5vZGVzLmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgICAgdmFyIG5vZGUgPSBub2Rlc1tpXSxcbiAgICAgICAgICBkeCA9IG5vZGUueCAtIHggfHwgMWUtNixcbiAgICAgICAgICBkeSA9IG5vZGUueSAtIHkgfHwgMWUtNixcbiAgICAgICAgICByID0gTWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5KSxcbiAgICAgICAgICBrID0gKHJhZGl1c2VzW2ldIC0gcikgKiBzdHJlbmd0aHNbaV0gKiBhbHBoYSAvIHI7XG4gICAgICBub2RlLnZ4ICs9IGR4ICogaztcbiAgICAgIG5vZGUudnkgKz0gZHkgKiBrO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXRpYWxpemUoKSB7XG4gICAgaWYgKCFub2RlcykgcmV0dXJuO1xuICAgIHZhciBpLCBuID0gbm9kZXMubGVuZ3RoO1xuICAgIHN0cmVuZ3RocyA9IG5ldyBBcnJheShuKTtcbiAgICByYWRpdXNlcyA9IG5ldyBBcnJheShuKTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICByYWRpdXNlc1tpXSA9ICtyYWRpdXMobm9kZXNbaV0sIGksIG5vZGVzKTtcbiAgICAgIHN0cmVuZ3Roc1tpXSA9IGlzTmFOKHJhZGl1c2VzW2ldKSA/IDAgOiArc3RyZW5ndGgobm9kZXNbaV0sIGksIG5vZGVzKTtcbiAgICB9XG4gIH1cblxuICBmb3JjZS5pbml0aWFsaXplID0gZnVuY3Rpb24oXykge1xuICAgIG5vZGVzID0gXywgaW5pdGlhbGl6ZSgpO1xuICB9O1xuXG4gIGZvcmNlLnN0cmVuZ3RoID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHN0cmVuZ3RoID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGluaXRpYWxpemUoKSwgZm9yY2UpIDogc3RyZW5ndGg7XG4gIH07XG5cbiAgZm9yY2UucmFkaXVzID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHJhZGl1cyA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBpbml0aWFsaXplKCksIGZvcmNlKSA6IHJhZGl1cztcbiAgfTtcblxuICBmb3JjZS54ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHggPSArXywgZm9yY2UpIDogeDtcbiAgfTtcblxuICBmb3JjZS55ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHkgPSArXywgZm9yY2UpIDogeTtcbiAgfTtcblxuICByZXR1cm4gZm9yY2U7XG59XG4iLCJpbXBvcnQge2Rpc3BhdGNofSBmcm9tIFwiZDMtZGlzcGF0Y2hcIjtcbmltcG9ydCB7bWFwfSBmcm9tIFwiZDMtY29sbGVjdGlvblwiO1xuaW1wb3J0IHt0aW1lcn0gZnJvbSBcImQzLXRpbWVyXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiB4KGQpIHtcbiAgcmV0dXJuIGQueDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHkoZCkge1xuICByZXR1cm4gZC55O1xufVxuXG52YXIgaW5pdGlhbFJhZGl1cyA9IDEwLFxuICAgIGluaXRpYWxBbmdsZSA9IE1hdGguUEkgKiAoMyAtIE1hdGguc3FydCg1KSk7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5vZGVzKSB7XG4gIHZhciBzaW11bGF0aW9uLFxuICAgICAgYWxwaGEgPSAxLFxuICAgICAgYWxwaGFNaW4gPSAwLjAwMSxcbiAgICAgIGFscGhhRGVjYXkgPSAxIC0gTWF0aC5wb3coYWxwaGFNaW4sIDEgLyAzMDApLFxuICAgICAgYWxwaGFUYXJnZXQgPSAwLFxuICAgICAgdmVsb2NpdHlEZWNheSA9IDAuNixcbiAgICAgIGZvcmNlcyA9IG1hcCgpLFxuICAgICAgc3RlcHBlciA9IHRpbWVyKHN0ZXApLFxuICAgICAgZXZlbnQgPSBkaXNwYXRjaChcInRpY2tcIiwgXCJlbmRcIik7XG5cbiAgaWYgKG5vZGVzID09IG51bGwpIG5vZGVzID0gW107XG5cbiAgZnVuY3Rpb24gc3RlcCgpIHtcbiAgICB0aWNrKCk7XG4gICAgZXZlbnQuY2FsbChcInRpY2tcIiwgc2ltdWxhdGlvbik7XG4gICAgaWYgKGFscGhhIDwgYWxwaGFNaW4pIHtcbiAgICAgIHN0ZXBwZXIuc3RvcCgpO1xuICAgICAgZXZlbnQuY2FsbChcImVuZFwiLCBzaW11bGF0aW9uKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB0aWNrKGl0ZXJhdGlvbnMpIHtcbiAgICB2YXIgaSwgbiA9IG5vZGVzLmxlbmd0aCwgbm9kZTtcblxuICAgIGlmIChpdGVyYXRpb25zID09PSB1bmRlZmluZWQpIGl0ZXJhdGlvbnMgPSAxO1xuXG4gICAgZm9yICh2YXIgayA9IDA7IGsgPCBpdGVyYXRpb25zOyArK2spIHtcbiAgICAgIGFscGhhICs9IChhbHBoYVRhcmdldCAtIGFscGhhKSAqIGFscGhhRGVjYXk7XG5cbiAgICAgIGZvcmNlcy5lYWNoKGZ1bmN0aW9uIChmb3JjZSkge1xuICAgICAgICBmb3JjZShhbHBoYSk7XG4gICAgICB9KTtcblxuICAgICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgICBub2RlID0gbm9kZXNbaV07XG4gICAgICAgIGlmIChub2RlLmZ4ID09IG51bGwpIG5vZGUueCArPSBub2RlLnZ4ICo9IHZlbG9jaXR5RGVjYXk7XG4gICAgICAgIGVsc2Ugbm9kZS54ID0gbm9kZS5meCwgbm9kZS52eCA9IDA7XG4gICAgICAgIGlmIChub2RlLmZ5ID09IG51bGwpIG5vZGUueSArPSBub2RlLnZ5ICo9IHZlbG9jaXR5RGVjYXk7XG4gICAgICAgIGVsc2Ugbm9kZS55ID0gbm9kZS5meSwgbm9kZS52eSA9IDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNpbXVsYXRpb247XG4gIH1cblxuICBmdW5jdGlvbiBpbml0aWFsaXplTm9kZXMoKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIG4gPSBub2Rlcy5sZW5ndGgsIG5vZGU7IGkgPCBuOyArK2kpIHtcbiAgICAgIG5vZGUgPSBub2Rlc1tpXSwgbm9kZS5pbmRleCA9IGk7XG4gICAgICBpZiAobm9kZS5meCAhPSBudWxsKSBub2RlLnggPSBub2RlLmZ4O1xuICAgICAgaWYgKG5vZGUuZnkgIT0gbnVsbCkgbm9kZS55ID0gbm9kZS5meTtcbiAgICAgIGlmIChpc05hTihub2RlLngpIHx8IGlzTmFOKG5vZGUueSkpIHtcbiAgICAgICAgdmFyIHJhZGl1cyA9IGluaXRpYWxSYWRpdXMgKiBNYXRoLnNxcnQoaSksIGFuZ2xlID0gaSAqIGluaXRpYWxBbmdsZTtcbiAgICAgICAgbm9kZS54ID0gcmFkaXVzICogTWF0aC5jb3MoYW5nbGUpO1xuICAgICAgICBub2RlLnkgPSByYWRpdXMgKiBNYXRoLnNpbihhbmdsZSk7XG4gICAgICB9XG4gICAgICBpZiAoaXNOYU4obm9kZS52eCkgfHwgaXNOYU4obm9kZS52eSkpIHtcbiAgICAgICAgbm9kZS52eCA9IG5vZGUudnkgPSAwO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXRpYWxpemVGb3JjZShmb3JjZSkge1xuICAgIGlmIChmb3JjZS5pbml0aWFsaXplKSBmb3JjZS5pbml0aWFsaXplKG5vZGVzKTtcbiAgICByZXR1cm4gZm9yY2U7XG4gIH1cblxuICBpbml0aWFsaXplTm9kZXMoKTtcblxuICByZXR1cm4gc2ltdWxhdGlvbiA9IHtcbiAgICB0aWNrOiB0aWNrLFxuXG4gICAgcmVzdGFydDogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gc3RlcHBlci5yZXN0YXJ0KHN0ZXApLCBzaW11bGF0aW9uO1xuICAgIH0sXG5cbiAgICBzdG9wOiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBzdGVwcGVyLnN0b3AoKSwgc2ltdWxhdGlvbjtcbiAgICB9LFxuXG4gICAgbm9kZXM6IGZ1bmN0aW9uKF8pIHtcbiAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKG5vZGVzID0gXywgaW5pdGlhbGl6ZU5vZGVzKCksIGZvcmNlcy5lYWNoKGluaXRpYWxpemVGb3JjZSksIHNpbXVsYXRpb24pIDogbm9kZXM7XG4gICAgfSxcblxuICAgIGFscGhhOiBmdW5jdGlvbihfKSB7XG4gICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChhbHBoYSA9ICtfLCBzaW11bGF0aW9uKSA6IGFscGhhO1xuICAgIH0sXG5cbiAgICBhbHBoYU1pbjogZnVuY3Rpb24oXykge1xuICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoYWxwaGFNaW4gPSArXywgc2ltdWxhdGlvbikgOiBhbHBoYU1pbjtcbiAgICB9LFxuXG4gICAgYWxwaGFEZWNheTogZnVuY3Rpb24oXykge1xuICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoYWxwaGFEZWNheSA9ICtfLCBzaW11bGF0aW9uKSA6ICthbHBoYURlY2F5O1xuICAgIH0sXG5cbiAgICBhbHBoYVRhcmdldDogZnVuY3Rpb24oXykge1xuICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoYWxwaGFUYXJnZXQgPSArXywgc2ltdWxhdGlvbikgOiBhbHBoYVRhcmdldDtcbiAgICB9LFxuXG4gICAgdmVsb2NpdHlEZWNheTogZnVuY3Rpb24oXykge1xuICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodmVsb2NpdHlEZWNheSA9IDEgLSBfLCBzaW11bGF0aW9uKSA6IDEgLSB2ZWxvY2l0eURlY2F5O1xuICAgIH0sXG5cbiAgICBmb3JjZTogZnVuY3Rpb24obmFtZSwgXykge1xuICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gKChfID09IG51bGwgPyBmb3JjZXMucmVtb3ZlKG5hbWUpIDogZm9yY2VzLnNldChuYW1lLCBpbml0aWFsaXplRm9yY2UoXykpKSwgc2ltdWxhdGlvbikgOiBmb3JjZXMuZ2V0KG5hbWUpO1xuICAgIH0sXG5cbiAgICBmaW5kOiBmdW5jdGlvbih4LCB5LCByYWRpdXMpIHtcbiAgICAgIHZhciBpID0gMCxcbiAgICAgICAgICBuID0gbm9kZXMubGVuZ3RoLFxuICAgICAgICAgIGR4LFxuICAgICAgICAgIGR5LFxuICAgICAgICAgIGQyLFxuICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgY2xvc2VzdDtcblxuICAgICAgaWYgKHJhZGl1cyA9PSBudWxsKSByYWRpdXMgPSBJbmZpbml0eTtcbiAgICAgIGVsc2UgcmFkaXVzICo9IHJhZGl1cztcblxuICAgICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgICBub2RlID0gbm9kZXNbaV07XG4gICAgICAgIGR4ID0geCAtIG5vZGUueDtcbiAgICAgICAgZHkgPSB5IC0gbm9kZS55O1xuICAgICAgICBkMiA9IGR4ICogZHggKyBkeSAqIGR5O1xuICAgICAgICBpZiAoZDIgPCByYWRpdXMpIGNsb3Nlc3QgPSBub2RlLCByYWRpdXMgPSBkMjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNsb3Nlc3Q7XG4gICAgfSxcblxuICAgIG9uOiBmdW5jdGlvbihuYW1lLCBfKSB7XG4gICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyAoZXZlbnQub24obmFtZSwgXyksIHNpbXVsYXRpb24pIDogZXZlbnQub24obmFtZSk7XG4gICAgfVxuICB9O1xufVxuIiwiaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuL2NvbnN0YW50XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgdmFyIHN0cmVuZ3RoID0gY29uc3RhbnQoMC4xKSxcbiAgICAgIG5vZGVzLFxuICAgICAgc3RyZW5ndGhzLFxuICAgICAgeHo7XG5cbiAgaWYgKHR5cGVvZiB4ICE9PSBcImZ1bmN0aW9uXCIpIHggPSBjb25zdGFudCh4ID09IG51bGwgPyAwIDogK3gpO1xuXG4gIGZ1bmN0aW9uIGZvcmNlKGFscGhhKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIG4gPSBub2Rlcy5sZW5ndGgsIG5vZGU7IGkgPCBuOyArK2kpIHtcbiAgICAgIG5vZGUgPSBub2Rlc1tpXSwgbm9kZS52eCArPSAoeHpbaV0gLSBub2RlLngpICogc3RyZW5ndGhzW2ldICogYWxwaGE7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaW5pdGlhbGl6ZSgpIHtcbiAgICBpZiAoIW5vZGVzKSByZXR1cm47XG4gICAgdmFyIGksIG4gPSBub2Rlcy5sZW5ndGg7XG4gICAgc3RyZW5ndGhzID0gbmV3IEFycmF5KG4pO1xuICAgIHh6ID0gbmV3IEFycmF5KG4pO1xuICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIHN0cmVuZ3Roc1tpXSA9IGlzTmFOKHh6W2ldID0gK3gobm9kZXNbaV0sIGksIG5vZGVzKSkgPyAwIDogK3N0cmVuZ3RoKG5vZGVzW2ldLCBpLCBub2Rlcyk7XG4gICAgfVxuICB9XG5cbiAgZm9yY2UuaW5pdGlhbGl6ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICBub2RlcyA9IF87XG4gICAgaW5pdGlhbGl6ZSgpO1xuICB9O1xuXG4gIGZvcmNlLnN0cmVuZ3RoID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHN0cmVuZ3RoID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGluaXRpYWxpemUoKSwgZm9yY2UpIDogc3RyZW5ndGg7XG4gIH07XG5cbiAgZm9yY2UueCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh4ID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGluaXRpYWxpemUoKSwgZm9yY2UpIDogeDtcbiAgfTtcblxuICByZXR1cm4gZm9yY2U7XG59XG4iLCJpbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnRcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeSkge1xuICB2YXIgc3RyZW5ndGggPSBjb25zdGFudCgwLjEpLFxuICAgICAgbm9kZXMsXG4gICAgICBzdHJlbmd0aHMsXG4gICAgICB5ejtcblxuICBpZiAodHlwZW9mIHkgIT09IFwiZnVuY3Rpb25cIikgeSA9IGNvbnN0YW50KHkgPT0gbnVsbCA/IDAgOiAreSk7XG5cbiAgZnVuY3Rpb24gZm9yY2UoYWxwaGEpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgbiA9IG5vZGVzLmxlbmd0aCwgbm9kZTsgaSA8IG47ICsraSkge1xuICAgICAgbm9kZSA9IG5vZGVzW2ldLCBub2RlLnZ5ICs9ICh5eltpXSAtIG5vZGUueSkgKiBzdHJlbmd0aHNbaV0gKiBhbHBoYTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpbml0aWFsaXplKCkge1xuICAgIGlmICghbm9kZXMpIHJldHVybjtcbiAgICB2YXIgaSwgbiA9IG5vZGVzLmxlbmd0aDtcbiAgICBzdHJlbmd0aHMgPSBuZXcgQXJyYXkobik7XG4gICAgeXogPSBuZXcgQXJyYXkobik7XG4gICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgc3RyZW5ndGhzW2ldID0gaXNOYU4oeXpbaV0gPSAreShub2Rlc1tpXSwgaSwgbm9kZXMpKSA/IDAgOiArc3RyZW5ndGgobm9kZXNbaV0sIGksIG5vZGVzKTtcbiAgICB9XG4gIH1cblxuICBmb3JjZS5pbml0aWFsaXplID0gZnVuY3Rpb24oXykge1xuICAgIG5vZGVzID0gXztcbiAgICBpbml0aWFsaXplKCk7XG4gIH07XG5cbiAgZm9yY2Uuc3RyZW5ndGggPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoc3RyZW5ndGggPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgaW5pdGlhbGl6ZSgpLCBmb3JjZSkgOiBzdHJlbmd0aDtcbiAgfTtcblxuICBmb3JjZS55ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHkgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgaW5pdGlhbGl6ZSgpLCBmb3JjZSkgOiB5O1xuICB9O1xuXG4gIHJldHVybiBmb3JjZTtcbn1cbiIsImltcG9ydCBmb3JtYXRMb2NhbGUgZnJvbSBcIi4vbG9jYWxlLmpzXCI7XG5cbnZhciBsb2NhbGU7XG5leHBvcnQgdmFyIGZvcm1hdDtcbmV4cG9ydCB2YXIgZm9ybWF0UHJlZml4O1xuXG5kZWZhdWx0TG9jYWxlKHtcbiAgZGVjaW1hbDogXCIuXCIsXG4gIHRob3VzYW5kczogXCIsXCIsXG4gIGdyb3VwaW5nOiBbM10sXG4gIGN1cnJlbmN5OiBbXCIkXCIsIFwiXCJdLFxuICBtaW51czogXCItXCJcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkZWZhdWx0TG9jYWxlKGRlZmluaXRpb24pIHtcbiAgbG9jYWxlID0gZm9ybWF0TG9jYWxlKGRlZmluaXRpb24pO1xuICBmb3JtYXQgPSBsb2NhbGUuZm9ybWF0O1xuICBmb3JtYXRQcmVmaXggPSBsb2NhbGUuZm9ybWF0UHJlZml4O1xuICByZXR1cm4gbG9jYWxlO1xufVxuIiwiaW1wb3J0IHtmb3JtYXREZWNpbWFsUGFydHN9IGZyb20gXCIuL2Zvcm1hdERlY2ltYWwuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4geCA9IGZvcm1hdERlY2ltYWxQYXJ0cyhNYXRoLmFicyh4KSksIHggPyB4WzFdIDogTmFOO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4gTWF0aC5hYnMoeCA9IE1hdGgucm91bmQoeCkpID49IDFlMjFcbiAgICAgID8geC50b0xvY2FsZVN0cmluZyhcImVuXCIpLnJlcGxhY2UoLywvZywgXCJcIilcbiAgICAgIDogeC50b1N0cmluZygxMCk7XG59XG5cbi8vIENvbXB1dGVzIHRoZSBkZWNpbWFsIGNvZWZmaWNpZW50IGFuZCBleHBvbmVudCBvZiB0aGUgc3BlY2lmaWVkIG51bWJlciB4IHdpdGhcbi8vIHNpZ25pZmljYW50IGRpZ2l0cyBwLCB3aGVyZSB4IGlzIHBvc2l0aXZlIGFuZCBwIGlzIGluIFsxLCAyMV0gb3IgdW5kZWZpbmVkLlxuLy8gRm9yIGV4YW1wbGUsIGZvcm1hdERlY2ltYWxQYXJ0cygxLjIzKSByZXR1cm5zIFtcIjEyM1wiLCAwXS5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXREZWNpbWFsUGFydHMoeCwgcCkge1xuICBpZiAoKGkgPSAoeCA9IHAgPyB4LnRvRXhwb25lbnRpYWwocCAtIDEpIDogeC50b0V4cG9uZW50aWFsKCkpLmluZGV4T2YoXCJlXCIpKSA8IDApIHJldHVybiBudWxsOyAvLyBOYU4sIMKxSW5maW5pdHlcbiAgdmFyIGksIGNvZWZmaWNpZW50ID0geC5zbGljZSgwLCBpKTtcblxuICAvLyBUaGUgc3RyaW5nIHJldHVybmVkIGJ5IHRvRXhwb25lbnRpYWwgZWl0aGVyIGhhcyB0aGUgZm9ybSBcXGRcXC5cXGQrZVstK11cXGQrXG4gIC8vIChlLmcuLCAxLjJlKzMpIG9yIHRoZSBmb3JtIFxcZGVbLStdXFxkKyAoZS5nLiwgMWUrMykuXG4gIHJldHVybiBbXG4gICAgY29lZmZpY2llbnQubGVuZ3RoID4gMSA/IGNvZWZmaWNpZW50WzBdICsgY29lZmZpY2llbnQuc2xpY2UoMikgOiBjb2VmZmljaWVudCxcbiAgICAreC5zbGljZShpICsgMSlcbiAgXTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGdyb3VwaW5nLCB0aG91c2FuZHMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlLCB3aWR0aCkge1xuICAgIHZhciBpID0gdmFsdWUubGVuZ3RoLFxuICAgICAgICB0ID0gW10sXG4gICAgICAgIGogPSAwLFxuICAgICAgICBnID0gZ3JvdXBpbmdbMF0sXG4gICAgICAgIGxlbmd0aCA9IDA7XG5cbiAgICB3aGlsZSAoaSA+IDAgJiYgZyA+IDApIHtcbiAgICAgIGlmIChsZW5ndGggKyBnICsgMSA+IHdpZHRoKSBnID0gTWF0aC5tYXgoMSwgd2lkdGggLSBsZW5ndGgpO1xuICAgICAgdC5wdXNoKHZhbHVlLnN1YnN0cmluZyhpIC09IGcsIGkgKyBnKSk7XG4gICAgICBpZiAoKGxlbmd0aCArPSBnICsgMSkgPiB3aWR0aCkgYnJlYWs7XG4gICAgICBnID0gZ3JvdXBpbmdbaiA9IChqICsgMSkgJSBncm91cGluZy5sZW5ndGhdO1xuICAgIH1cblxuICAgIHJldHVybiB0LnJldmVyc2UoKS5qb2luKHRob3VzYW5kcyk7XG4gIH07XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihudW1lcmFscykge1xuICByZXR1cm4gZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUucmVwbGFjZSgvWzAtOV0vZywgZnVuY3Rpb24oaSkge1xuICAgICAgcmV0dXJuIG51bWVyYWxzWytpXTtcbiAgICB9KTtcbiAgfTtcbn1cbiIsImltcG9ydCB7Zm9ybWF0RGVjaW1hbFBhcnRzfSBmcm9tIFwiLi9mb3JtYXREZWNpbWFsLmpzXCI7XG5cbmV4cG9ydCB2YXIgcHJlZml4RXhwb25lbnQ7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgsIHApIHtcbiAgdmFyIGQgPSBmb3JtYXREZWNpbWFsUGFydHMoeCwgcCk7XG4gIGlmICghZCkgcmV0dXJuIHggKyBcIlwiO1xuICB2YXIgY29lZmZpY2llbnQgPSBkWzBdLFxuICAgICAgZXhwb25lbnQgPSBkWzFdLFxuICAgICAgaSA9IGV4cG9uZW50IC0gKHByZWZpeEV4cG9uZW50ID0gTWF0aC5tYXgoLTgsIE1hdGgubWluKDgsIE1hdGguZmxvb3IoZXhwb25lbnQgLyAzKSkpICogMykgKyAxLFxuICAgICAgbiA9IGNvZWZmaWNpZW50Lmxlbmd0aDtcbiAgcmV0dXJuIGkgPT09IG4gPyBjb2VmZmljaWVudFxuICAgICAgOiBpID4gbiA/IGNvZWZmaWNpZW50ICsgbmV3IEFycmF5KGkgLSBuICsgMSkuam9pbihcIjBcIilcbiAgICAgIDogaSA+IDAgPyBjb2VmZmljaWVudC5zbGljZSgwLCBpKSArIFwiLlwiICsgY29lZmZpY2llbnQuc2xpY2UoaSlcbiAgICAgIDogXCIwLlwiICsgbmV3IEFycmF5KDEgLSBpKS5qb2luKFwiMFwiKSArIGZvcm1hdERlY2ltYWxQYXJ0cyh4LCBNYXRoLm1heCgwLCBwICsgaSAtIDEpKVswXTsgLy8gbGVzcyB0aGFuIDF5IVxufVxuIiwiaW1wb3J0IHtmb3JtYXREZWNpbWFsUGFydHN9IGZyb20gXCIuL2Zvcm1hdERlY2ltYWwuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCwgcCkge1xuICB2YXIgZCA9IGZvcm1hdERlY2ltYWxQYXJ0cyh4LCBwKTtcbiAgaWYgKCFkKSByZXR1cm4geCArIFwiXCI7XG4gIHZhciBjb2VmZmljaWVudCA9IGRbMF0sXG4gICAgICBleHBvbmVudCA9IGRbMV07XG4gIHJldHVybiBleHBvbmVudCA8IDAgPyBcIjAuXCIgKyBuZXcgQXJyYXkoLWV4cG9uZW50KS5qb2luKFwiMFwiKSArIGNvZWZmaWNpZW50XG4gICAgICA6IGNvZWZmaWNpZW50Lmxlbmd0aCA+IGV4cG9uZW50ICsgMSA/IGNvZWZmaWNpZW50LnNsaWNlKDAsIGV4cG9uZW50ICsgMSkgKyBcIi5cIiArIGNvZWZmaWNpZW50LnNsaWNlKGV4cG9uZW50ICsgMSlcbiAgICAgIDogY29lZmZpY2llbnQgKyBuZXcgQXJyYXkoZXhwb25lbnQgLSBjb2VmZmljaWVudC5sZW5ndGggKyAyKS5qb2luKFwiMFwiKTtcbn1cbiIsIi8vIFtbZmlsbF1hbGlnbl1bc2lnbl1bc3ltYm9sXVswXVt3aWR0aF1bLF1bLnByZWNpc2lvbl1bfl1bdHlwZV1cbnZhciByZSA9IC9eKD86KC4pPyhbPD49Xl0pKT8oWytcXC0oIF0pPyhbJCNdKT8oMCk/KFxcZCspPygsKT8oXFwuXFxkKyk/KH4pPyhbYS16JV0pPyQvaTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZm9ybWF0U3BlY2lmaWVyKHNwZWNpZmllcikge1xuICBpZiAoIShtYXRjaCA9IHJlLmV4ZWMoc3BlY2lmaWVyKSkpIHRocm93IG5ldyBFcnJvcihcImludmFsaWQgZm9ybWF0OiBcIiArIHNwZWNpZmllcik7XG4gIHZhciBtYXRjaDtcbiAgcmV0dXJuIG5ldyBGb3JtYXRTcGVjaWZpZXIoe1xuICAgIGZpbGw6IG1hdGNoWzFdLFxuICAgIGFsaWduOiBtYXRjaFsyXSxcbiAgICBzaWduOiBtYXRjaFszXSxcbiAgICBzeW1ib2w6IG1hdGNoWzRdLFxuICAgIHplcm86IG1hdGNoWzVdLFxuICAgIHdpZHRoOiBtYXRjaFs2XSxcbiAgICBjb21tYTogbWF0Y2hbN10sXG4gICAgcHJlY2lzaW9uOiBtYXRjaFs4XSAmJiBtYXRjaFs4XS5zbGljZSgxKSxcbiAgICB0cmltOiBtYXRjaFs5XSxcbiAgICB0eXBlOiBtYXRjaFsxMF1cbiAgfSk7XG59XG5cbmZvcm1hdFNwZWNpZmllci5wcm90b3R5cGUgPSBGb3JtYXRTcGVjaWZpZXIucHJvdG90eXBlOyAvLyBpbnN0YW5jZW9mXG5cbmV4cG9ydCBmdW5jdGlvbiBGb3JtYXRTcGVjaWZpZXIoc3BlY2lmaWVyKSB7XG4gIHRoaXMuZmlsbCA9IHNwZWNpZmllci5maWxsID09PSB1bmRlZmluZWQgPyBcIiBcIiA6IHNwZWNpZmllci5maWxsICsgXCJcIjtcbiAgdGhpcy5hbGlnbiA9IHNwZWNpZmllci5hbGlnbiA9PT0gdW5kZWZpbmVkID8gXCI+XCIgOiBzcGVjaWZpZXIuYWxpZ24gKyBcIlwiO1xuICB0aGlzLnNpZ24gPSBzcGVjaWZpZXIuc2lnbiA9PT0gdW5kZWZpbmVkID8gXCItXCIgOiBzcGVjaWZpZXIuc2lnbiArIFwiXCI7XG4gIHRoaXMuc3ltYm9sID0gc3BlY2lmaWVyLnN5bWJvbCA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IHNwZWNpZmllci5zeW1ib2wgKyBcIlwiO1xuICB0aGlzLnplcm8gPSAhIXNwZWNpZmllci56ZXJvO1xuICB0aGlzLndpZHRoID0gc3BlY2lmaWVyLndpZHRoID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiArc3BlY2lmaWVyLndpZHRoO1xuICB0aGlzLmNvbW1hID0gISFzcGVjaWZpZXIuY29tbWE7XG4gIHRoaXMucHJlY2lzaW9uID0gc3BlY2lmaWVyLnByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogK3NwZWNpZmllci5wcmVjaXNpb247XG4gIHRoaXMudHJpbSA9ICEhc3BlY2lmaWVyLnRyaW07XG4gIHRoaXMudHlwZSA9IHNwZWNpZmllci50eXBlID09PSB1bmRlZmluZWQgPyBcIlwiIDogc3BlY2lmaWVyLnR5cGUgKyBcIlwiO1xufVxuXG5Gb3JtYXRTcGVjaWZpZXIucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmZpbGxcbiAgICAgICsgdGhpcy5hbGlnblxuICAgICAgKyB0aGlzLnNpZ25cbiAgICAgICsgdGhpcy5zeW1ib2xcbiAgICAgICsgKHRoaXMuemVybyA/IFwiMFwiIDogXCJcIilcbiAgICAgICsgKHRoaXMud2lkdGggPT09IHVuZGVmaW5lZCA/IFwiXCIgOiBNYXRoLm1heCgxLCB0aGlzLndpZHRoIHwgMCkpXG4gICAgICArICh0aGlzLmNvbW1hID8gXCIsXCIgOiBcIlwiKVxuICAgICAgKyAodGhpcy5wcmVjaXNpb24gPT09IHVuZGVmaW5lZCA/IFwiXCIgOiBcIi5cIiArIE1hdGgubWF4KDAsIHRoaXMucHJlY2lzaW9uIHwgMCkpXG4gICAgICArICh0aGlzLnRyaW0gPyBcIn5cIiA6IFwiXCIpXG4gICAgICArIHRoaXMudHlwZTtcbn07XG4iLCIvLyBUcmltcyBpbnNpZ25pZmljYW50IHplcm9zLCBlLmcuLCByZXBsYWNlcyAxLjIwMDBrIHdpdGggMS4yay5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHMpIHtcbiAgb3V0OiBmb3IgKHZhciBuID0gcy5sZW5ndGgsIGkgPSAxLCBpMCA9IC0xLCBpMTsgaSA8IG47ICsraSkge1xuICAgIHN3aXRjaCAoc1tpXSkge1xuICAgICAgY2FzZSBcIi5cIjogaTAgPSBpMSA9IGk7IGJyZWFrO1xuICAgICAgY2FzZSBcIjBcIjogaWYgKGkwID09PSAwKSBpMCA9IGk7IGkxID0gaTsgYnJlYWs7XG4gICAgICBkZWZhdWx0OiBpZiAoIStzW2ldKSBicmVhayBvdXQ7IGlmIChpMCA+IDApIGkwID0gMDsgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBpMCA+IDAgPyBzLnNsaWNlKDAsIGkwKSArIHMuc2xpY2UoaTEgKyAxKSA6IHM7XG59XG4iLCJpbXBvcnQgZm9ybWF0RGVjaW1hbCBmcm9tIFwiLi9mb3JtYXREZWNpbWFsLmpzXCI7XG5pbXBvcnQgZm9ybWF0UHJlZml4QXV0byBmcm9tIFwiLi9mb3JtYXRQcmVmaXhBdXRvLmpzXCI7XG5pbXBvcnQgZm9ybWF0Um91bmRlZCBmcm9tIFwiLi9mb3JtYXRSb3VuZGVkLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgXCIlXCI6IGZ1bmN0aW9uKHgsIHApIHsgcmV0dXJuICh4ICogMTAwKS50b0ZpeGVkKHApOyB9LFxuICBcImJcIjogZnVuY3Rpb24oeCkgeyByZXR1cm4gTWF0aC5yb3VuZCh4KS50b1N0cmluZygyKTsgfSxcbiAgXCJjXCI6IGZ1bmN0aW9uKHgpIHsgcmV0dXJuIHggKyBcIlwiOyB9LFxuICBcImRcIjogZm9ybWF0RGVjaW1hbCxcbiAgXCJlXCI6IGZ1bmN0aW9uKHgsIHApIHsgcmV0dXJuIHgudG9FeHBvbmVudGlhbChwKTsgfSxcbiAgXCJmXCI6IGZ1bmN0aW9uKHgsIHApIHsgcmV0dXJuIHgudG9GaXhlZChwKTsgfSxcbiAgXCJnXCI6IGZ1bmN0aW9uKHgsIHApIHsgcmV0dXJuIHgudG9QcmVjaXNpb24ocCk7IH0sXG4gIFwib1wiOiBmdW5jdGlvbih4KSB7IHJldHVybiBNYXRoLnJvdW5kKHgpLnRvU3RyaW5nKDgpOyB9LFxuICBcInBcIjogZnVuY3Rpb24oeCwgcCkgeyByZXR1cm4gZm9ybWF0Um91bmRlZCh4ICogMTAwLCBwKTsgfSxcbiAgXCJyXCI6IGZvcm1hdFJvdW5kZWQsXG4gIFwic1wiOiBmb3JtYXRQcmVmaXhBdXRvLFxuICBcIlhcIjogZnVuY3Rpb24oeCkgeyByZXR1cm4gTWF0aC5yb3VuZCh4KS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTsgfSxcbiAgXCJ4XCI6IGZ1bmN0aW9uKHgpIHsgcmV0dXJuIE1hdGgucm91bmQoeCkudG9TdHJpbmcoMTYpOyB9XG59O1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4geDtcbn1cbiIsImV4cG9ydCB7ZGVmYXVsdCBhcyBmb3JtYXREZWZhdWx0TG9jYWxlLCBmb3JtYXQsIGZvcm1hdFByZWZpeH0gZnJvbSBcIi4vZGVmYXVsdExvY2FsZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGZvcm1hdExvY2FsZX0gZnJvbSBcIi4vbG9jYWxlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZm9ybWF0U3BlY2lmaWVyLCBGb3JtYXRTcGVjaWZpZXJ9IGZyb20gXCIuL2Zvcm1hdFNwZWNpZmllci5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHByZWNpc2lvbkZpeGVkfSBmcm9tIFwiLi9wcmVjaXNpb25GaXhlZC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHByZWNpc2lvblByZWZpeH0gZnJvbSBcIi4vcHJlY2lzaW9uUHJlZml4LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgcHJlY2lzaW9uUm91bmR9IGZyb20gXCIuL3ByZWNpc2lvblJvdW5kLmpzXCI7XG4iLCJpbXBvcnQgZXhwb25lbnQgZnJvbSBcIi4vZXhwb25lbnQuanNcIjtcbmltcG9ydCBmb3JtYXRHcm91cCBmcm9tIFwiLi9mb3JtYXRHcm91cC5qc1wiO1xuaW1wb3J0IGZvcm1hdE51bWVyYWxzIGZyb20gXCIuL2Zvcm1hdE51bWVyYWxzLmpzXCI7XG5pbXBvcnQgZm9ybWF0U3BlY2lmaWVyIGZyb20gXCIuL2Zvcm1hdFNwZWNpZmllci5qc1wiO1xuaW1wb3J0IGZvcm1hdFRyaW0gZnJvbSBcIi4vZm9ybWF0VHJpbS5qc1wiO1xuaW1wb3J0IGZvcm1hdFR5cGVzIGZyb20gXCIuL2Zvcm1hdFR5cGVzLmpzXCI7XG5pbXBvcnQge3ByZWZpeEV4cG9uZW50fSBmcm9tIFwiLi9mb3JtYXRQcmVmaXhBdXRvLmpzXCI7XG5pbXBvcnQgaWRlbnRpdHkgZnJvbSBcIi4vaWRlbnRpdHkuanNcIjtcblxudmFyIG1hcCA9IEFycmF5LnByb3RvdHlwZS5tYXAsXG4gICAgcHJlZml4ZXMgPSBbXCJ5XCIsXCJ6XCIsXCJhXCIsXCJmXCIsXCJwXCIsXCJuXCIsXCLCtVwiLFwibVwiLFwiXCIsXCJrXCIsXCJNXCIsXCJHXCIsXCJUXCIsXCJQXCIsXCJFXCIsXCJaXCIsXCJZXCJdO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihsb2NhbGUpIHtcbiAgdmFyIGdyb3VwID0gbG9jYWxlLmdyb3VwaW5nID09PSB1bmRlZmluZWQgfHwgbG9jYWxlLnRob3VzYW5kcyA9PT0gdW5kZWZpbmVkID8gaWRlbnRpdHkgOiBmb3JtYXRHcm91cChtYXAuY2FsbChsb2NhbGUuZ3JvdXBpbmcsIE51bWJlciksIGxvY2FsZS50aG91c2FuZHMgKyBcIlwiKSxcbiAgICAgIGN1cnJlbmN5UHJlZml4ID0gbG9jYWxlLmN1cnJlbmN5ID09PSB1bmRlZmluZWQgPyBcIlwiIDogbG9jYWxlLmN1cnJlbmN5WzBdICsgXCJcIixcbiAgICAgIGN1cnJlbmN5U3VmZml4ID0gbG9jYWxlLmN1cnJlbmN5ID09PSB1bmRlZmluZWQgPyBcIlwiIDogbG9jYWxlLmN1cnJlbmN5WzFdICsgXCJcIixcbiAgICAgIGRlY2ltYWwgPSBsb2NhbGUuZGVjaW1hbCA9PT0gdW5kZWZpbmVkID8gXCIuXCIgOiBsb2NhbGUuZGVjaW1hbCArIFwiXCIsXG4gICAgICBudW1lcmFscyA9IGxvY2FsZS5udW1lcmFscyA9PT0gdW5kZWZpbmVkID8gaWRlbnRpdHkgOiBmb3JtYXROdW1lcmFscyhtYXAuY2FsbChsb2NhbGUubnVtZXJhbHMsIFN0cmluZykpLFxuICAgICAgcGVyY2VudCA9IGxvY2FsZS5wZXJjZW50ID09PSB1bmRlZmluZWQgPyBcIiVcIiA6IGxvY2FsZS5wZXJjZW50ICsgXCJcIixcbiAgICAgIG1pbnVzID0gbG9jYWxlLm1pbnVzID09PSB1bmRlZmluZWQgPyBcIi1cIiA6IGxvY2FsZS5taW51cyArIFwiXCIsXG4gICAgICBuYW4gPSBsb2NhbGUubmFuID09PSB1bmRlZmluZWQgPyBcIk5hTlwiIDogbG9jYWxlLm5hbiArIFwiXCI7XG5cbiAgZnVuY3Rpb24gbmV3Rm9ybWF0KHNwZWNpZmllcikge1xuICAgIHNwZWNpZmllciA9IGZvcm1hdFNwZWNpZmllcihzcGVjaWZpZXIpO1xuXG4gICAgdmFyIGZpbGwgPSBzcGVjaWZpZXIuZmlsbCxcbiAgICAgICAgYWxpZ24gPSBzcGVjaWZpZXIuYWxpZ24sXG4gICAgICAgIHNpZ24gPSBzcGVjaWZpZXIuc2lnbixcbiAgICAgICAgc3ltYm9sID0gc3BlY2lmaWVyLnN5bWJvbCxcbiAgICAgICAgemVybyA9IHNwZWNpZmllci56ZXJvLFxuICAgICAgICB3aWR0aCA9IHNwZWNpZmllci53aWR0aCxcbiAgICAgICAgY29tbWEgPSBzcGVjaWZpZXIuY29tbWEsXG4gICAgICAgIHByZWNpc2lvbiA9IHNwZWNpZmllci5wcmVjaXNpb24sXG4gICAgICAgIHRyaW0gPSBzcGVjaWZpZXIudHJpbSxcbiAgICAgICAgdHlwZSA9IHNwZWNpZmllci50eXBlO1xuXG4gICAgLy8gVGhlIFwiblwiIHR5cGUgaXMgYW4gYWxpYXMgZm9yIFwiLGdcIi5cbiAgICBpZiAodHlwZSA9PT0gXCJuXCIpIGNvbW1hID0gdHJ1ZSwgdHlwZSA9IFwiZ1wiO1xuXG4gICAgLy8gVGhlIFwiXCIgdHlwZSwgYW5kIGFueSBpbnZhbGlkIHR5cGUsIGlzIGFuIGFsaWFzIGZvciBcIi4xMn5nXCIuXG4gICAgZWxzZSBpZiAoIWZvcm1hdFR5cGVzW3R5cGVdKSBwcmVjaXNpb24gPT09IHVuZGVmaW5lZCAmJiAocHJlY2lzaW9uID0gMTIpLCB0cmltID0gdHJ1ZSwgdHlwZSA9IFwiZ1wiO1xuXG4gICAgLy8gSWYgemVybyBmaWxsIGlzIHNwZWNpZmllZCwgcGFkZGluZyBnb2VzIGFmdGVyIHNpZ24gYW5kIGJlZm9yZSBkaWdpdHMuXG4gICAgaWYgKHplcm8gfHwgKGZpbGwgPT09IFwiMFwiICYmIGFsaWduID09PSBcIj1cIikpIHplcm8gPSB0cnVlLCBmaWxsID0gXCIwXCIsIGFsaWduID0gXCI9XCI7XG5cbiAgICAvLyBDb21wdXRlIHRoZSBwcmVmaXggYW5kIHN1ZmZpeC5cbiAgICAvLyBGb3IgU0ktcHJlZml4LCB0aGUgc3VmZml4IGlzIGxhemlseSBjb21wdXRlZC5cbiAgICB2YXIgcHJlZml4ID0gc3ltYm9sID09PSBcIiRcIiA/IGN1cnJlbmN5UHJlZml4IDogc3ltYm9sID09PSBcIiNcIiAmJiAvW2JveFhdLy50ZXN0KHR5cGUpID8gXCIwXCIgKyB0eXBlLnRvTG93ZXJDYXNlKCkgOiBcIlwiLFxuICAgICAgICBzdWZmaXggPSBzeW1ib2wgPT09IFwiJFwiID8gY3VycmVuY3lTdWZmaXggOiAvWyVwXS8udGVzdCh0eXBlKSA/IHBlcmNlbnQgOiBcIlwiO1xuXG4gICAgLy8gV2hhdCBmb3JtYXQgZnVuY3Rpb24gc2hvdWxkIHdlIHVzZT9cbiAgICAvLyBJcyB0aGlzIGFuIGludGVnZXIgdHlwZT9cbiAgICAvLyBDYW4gdGhpcyB0eXBlIGdlbmVyYXRlIGV4cG9uZW50aWFsIG5vdGF0aW9uP1xuICAgIHZhciBmb3JtYXRUeXBlID0gZm9ybWF0VHlwZXNbdHlwZV0sXG4gICAgICAgIG1heWJlU3VmZml4ID0gL1tkZWZncHJzJV0vLnRlc3QodHlwZSk7XG5cbiAgICAvLyBTZXQgdGhlIGRlZmF1bHQgcHJlY2lzaW9uIGlmIG5vdCBzcGVjaWZpZWQsXG4gICAgLy8gb3IgY2xhbXAgdGhlIHNwZWNpZmllZCBwcmVjaXNpb24gdG8gdGhlIHN1cHBvcnRlZCByYW5nZS5cbiAgICAvLyBGb3Igc2lnbmlmaWNhbnQgcHJlY2lzaW9uLCBpdCBtdXN0IGJlIGluIFsxLCAyMV0uXG4gICAgLy8gRm9yIGZpeGVkIHByZWNpc2lvbiwgaXQgbXVzdCBiZSBpbiBbMCwgMjBdLlxuICAgIHByZWNpc2lvbiA9IHByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gNlxuICAgICAgICA6IC9bZ3Byc10vLnRlc3QodHlwZSkgPyBNYXRoLm1heCgxLCBNYXRoLm1pbigyMSwgcHJlY2lzaW9uKSlcbiAgICAgICAgOiBNYXRoLm1heCgwLCBNYXRoLm1pbigyMCwgcHJlY2lzaW9uKSk7XG5cbiAgICBmdW5jdGlvbiBmb3JtYXQodmFsdWUpIHtcbiAgICAgIHZhciB2YWx1ZVByZWZpeCA9IHByZWZpeCxcbiAgICAgICAgICB2YWx1ZVN1ZmZpeCA9IHN1ZmZpeCxcbiAgICAgICAgICBpLCBuLCBjO1xuXG4gICAgICBpZiAodHlwZSA9PT0gXCJjXCIpIHtcbiAgICAgICAgdmFsdWVTdWZmaXggPSBmb3JtYXRUeXBlKHZhbHVlKSArIHZhbHVlU3VmZml4O1xuICAgICAgICB2YWx1ZSA9IFwiXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZSA9ICt2YWx1ZTtcblxuICAgICAgICAvLyBEZXRlcm1pbmUgdGhlIHNpZ24uIC0wIGlzIG5vdCBsZXNzIHRoYW4gMCwgYnV0IDEgLyAtMCBpcyFcbiAgICAgICAgdmFyIHZhbHVlTmVnYXRpdmUgPSB2YWx1ZSA8IDAgfHwgMSAvIHZhbHVlIDwgMDtcblxuICAgICAgICAvLyBQZXJmb3JtIHRoZSBpbml0aWFsIGZvcm1hdHRpbmcuXG4gICAgICAgIHZhbHVlID0gaXNOYU4odmFsdWUpID8gbmFuIDogZm9ybWF0VHlwZShNYXRoLmFicyh2YWx1ZSksIHByZWNpc2lvbik7XG5cbiAgICAgICAgLy8gVHJpbSBpbnNpZ25pZmljYW50IHplcm9zLlxuICAgICAgICBpZiAodHJpbSkgdmFsdWUgPSBmb3JtYXRUcmltKHZhbHVlKTtcblxuICAgICAgICAvLyBJZiBhIG5lZ2F0aXZlIHZhbHVlIHJvdW5kcyB0byB6ZXJvIGFmdGVyIGZvcm1hdHRpbmcsIGFuZCBubyBleHBsaWNpdCBwb3NpdGl2ZSBzaWduIGlzIHJlcXVlc3RlZCwgaGlkZSB0aGUgc2lnbi5cbiAgICAgICAgaWYgKHZhbHVlTmVnYXRpdmUgJiYgK3ZhbHVlID09PSAwICYmIHNpZ24gIT09IFwiK1wiKSB2YWx1ZU5lZ2F0aXZlID0gZmFsc2U7XG5cbiAgICAgICAgLy8gQ29tcHV0ZSB0aGUgcHJlZml4IGFuZCBzdWZmaXguXG4gICAgICAgIHZhbHVlUHJlZml4ID0gKHZhbHVlTmVnYXRpdmUgPyAoc2lnbiA9PT0gXCIoXCIgPyBzaWduIDogbWludXMpIDogc2lnbiA9PT0gXCItXCIgfHwgc2lnbiA9PT0gXCIoXCIgPyBcIlwiIDogc2lnbikgKyB2YWx1ZVByZWZpeDtcbiAgICAgICAgdmFsdWVTdWZmaXggPSAodHlwZSA9PT0gXCJzXCIgPyBwcmVmaXhlc1s4ICsgcHJlZml4RXhwb25lbnQgLyAzXSA6IFwiXCIpICsgdmFsdWVTdWZmaXggKyAodmFsdWVOZWdhdGl2ZSAmJiBzaWduID09PSBcIihcIiA/IFwiKVwiIDogXCJcIik7XG5cbiAgICAgICAgLy8gQnJlYWsgdGhlIGZvcm1hdHRlZCB2YWx1ZSBpbnRvIHRoZSBpbnRlZ2VyIOKAnHZhbHVl4oCdIHBhcnQgdGhhdCBjYW4gYmVcbiAgICAgICAgLy8gZ3JvdXBlZCwgYW5kIGZyYWN0aW9uYWwgb3IgZXhwb25lbnRpYWwg4oCcc3VmZml44oCdIHBhcnQgdGhhdCBpcyBub3QuXG4gICAgICAgIGlmIChtYXliZVN1ZmZpeCkge1xuICAgICAgICAgIGkgPSAtMSwgbiA9IHZhbHVlLmxlbmd0aDtcbiAgICAgICAgICB3aGlsZSAoKytpIDwgbikge1xuICAgICAgICAgICAgaWYgKGMgPSB2YWx1ZS5jaGFyQ29kZUF0KGkpLCA0OCA+IGMgfHwgYyA+IDU3KSB7XG4gICAgICAgICAgICAgIHZhbHVlU3VmZml4ID0gKGMgPT09IDQ2ID8gZGVjaW1hbCArIHZhbHVlLnNsaWNlKGkgKyAxKSA6IHZhbHVlLnNsaWNlKGkpKSArIHZhbHVlU3VmZml4O1xuICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIGkpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSWYgdGhlIGZpbGwgY2hhcmFjdGVyIGlzIG5vdCBcIjBcIiwgZ3JvdXBpbmcgaXMgYXBwbGllZCBiZWZvcmUgcGFkZGluZy5cbiAgICAgIGlmIChjb21tYSAmJiAhemVybykgdmFsdWUgPSBncm91cCh2YWx1ZSwgSW5maW5pdHkpO1xuXG4gICAgICAvLyBDb21wdXRlIHRoZSBwYWRkaW5nLlxuICAgICAgdmFyIGxlbmd0aCA9IHZhbHVlUHJlZml4Lmxlbmd0aCArIHZhbHVlLmxlbmd0aCArIHZhbHVlU3VmZml4Lmxlbmd0aCxcbiAgICAgICAgICBwYWRkaW5nID0gbGVuZ3RoIDwgd2lkdGggPyBuZXcgQXJyYXkod2lkdGggLSBsZW5ndGggKyAxKS5qb2luKGZpbGwpIDogXCJcIjtcblxuICAgICAgLy8gSWYgdGhlIGZpbGwgY2hhcmFjdGVyIGlzIFwiMFwiLCBncm91cGluZyBpcyBhcHBsaWVkIGFmdGVyIHBhZGRpbmcuXG4gICAgICBpZiAoY29tbWEgJiYgemVybykgdmFsdWUgPSBncm91cChwYWRkaW5nICsgdmFsdWUsIHBhZGRpbmcubGVuZ3RoID8gd2lkdGggLSB2YWx1ZVN1ZmZpeC5sZW5ndGggOiBJbmZpbml0eSksIHBhZGRpbmcgPSBcIlwiO1xuXG4gICAgICAvLyBSZWNvbnN0cnVjdCB0aGUgZmluYWwgb3V0cHV0IGJhc2VkIG9uIHRoZSBkZXNpcmVkIGFsaWdubWVudC5cbiAgICAgIHN3aXRjaCAoYWxpZ24pIHtcbiAgICAgICAgY2FzZSBcIjxcIjogdmFsdWUgPSB2YWx1ZVByZWZpeCArIHZhbHVlICsgdmFsdWVTdWZmaXggKyBwYWRkaW5nOyBicmVhaztcbiAgICAgICAgY2FzZSBcIj1cIjogdmFsdWUgPSB2YWx1ZVByZWZpeCArIHBhZGRpbmcgKyB2YWx1ZSArIHZhbHVlU3VmZml4OyBicmVhaztcbiAgICAgICAgY2FzZSBcIl5cIjogdmFsdWUgPSBwYWRkaW5nLnNsaWNlKDAsIGxlbmd0aCA9IHBhZGRpbmcubGVuZ3RoID4+IDEpICsgdmFsdWVQcmVmaXggKyB2YWx1ZSArIHZhbHVlU3VmZml4ICsgcGFkZGluZy5zbGljZShsZW5ndGgpOyBicmVhaztcbiAgICAgICAgZGVmYXVsdDogdmFsdWUgPSBwYWRkaW5nICsgdmFsdWVQcmVmaXggKyB2YWx1ZSArIHZhbHVlU3VmZml4OyBicmVhaztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bWVyYWxzKHZhbHVlKTtcbiAgICB9XG5cbiAgICBmb3JtYXQudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBzcGVjaWZpZXIgKyBcIlwiO1xuICAgIH07XG5cbiAgICByZXR1cm4gZm9ybWF0O1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0UHJlZml4KHNwZWNpZmllciwgdmFsdWUpIHtcbiAgICB2YXIgZiA9IG5ld0Zvcm1hdCgoc3BlY2lmaWVyID0gZm9ybWF0U3BlY2lmaWVyKHNwZWNpZmllciksIHNwZWNpZmllci50eXBlID0gXCJmXCIsIHNwZWNpZmllcikpLFxuICAgICAgICBlID0gTWF0aC5tYXgoLTgsIE1hdGgubWluKDgsIE1hdGguZmxvb3IoZXhwb25lbnQodmFsdWUpIC8gMykpKSAqIDMsXG4gICAgICAgIGsgPSBNYXRoLnBvdygxMCwgLWUpLFxuICAgICAgICBwcmVmaXggPSBwcmVmaXhlc1s4ICsgZSAvIDNdO1xuICAgIHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgcmV0dXJuIGYoayAqIHZhbHVlKSArIHByZWZpeDtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBmb3JtYXQ6IG5ld0Zvcm1hdCxcbiAgICBmb3JtYXRQcmVmaXg6IGZvcm1hdFByZWZpeFxuICB9O1xufVxuIiwiaW1wb3J0IGV4cG9uZW50IGZyb20gXCIuL2V4cG9uZW50LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHN0ZXApIHtcbiAgcmV0dXJuIE1hdGgubWF4KDAsIC1leHBvbmVudChNYXRoLmFicyhzdGVwKSkpO1xufVxuIiwiaW1wb3J0IGV4cG9uZW50IGZyb20gXCIuL2V4cG9uZW50LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHN0ZXAsIHZhbHVlKSB7XG4gIHJldHVybiBNYXRoLm1heCgwLCBNYXRoLm1heCgtOCwgTWF0aC5taW4oOCwgTWF0aC5mbG9vcihleHBvbmVudCh2YWx1ZSkgLyAzKSkpICogMyAtIGV4cG9uZW50KE1hdGguYWJzKHN0ZXApKSk7XG59XG4iLCJpbXBvcnQgZXhwb25lbnQgZnJvbSBcIi4vZXhwb25lbnQuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc3RlcCwgbWF4KSB7XG4gIHN0ZXAgPSBNYXRoLmFicyhzdGVwKSwgbWF4ID0gTWF0aC5hYnMobWF4KSAtIHN0ZXA7XG4gIHJldHVybiBNYXRoLm1heCgwLCBleHBvbmVudChtYXgpIC0gZXhwb25lbnQoc3RlcCkpICsgMTtcbn1cbiIsIi8vIEFkZHMgZmxvYXRpbmcgcG9pbnQgbnVtYmVycyB3aXRoIHR3aWNlIHRoZSBub3JtYWwgcHJlY2lzaW9uLlxuLy8gUmVmZXJlbmNlOiBKLiBSLiBTaGV3Y2h1aywgQWRhcHRpdmUgUHJlY2lzaW9uIEZsb2F0aW5nLVBvaW50IEFyaXRobWV0aWMgYW5kXG4vLyBGYXN0IFJvYnVzdCBHZW9tZXRyaWMgUHJlZGljYXRlcywgRGlzY3JldGUgJiBDb21wdXRhdGlvbmFsIEdlb21ldHJ5IDE4KDMpXG4vLyAzMDXigJMzNjMgKDE5OTcpLlxuLy8gQ29kZSBhZGFwdGVkIGZyb20gR2VvZ3JhcGhpY0xpYiBieSBDaGFybGVzIEYuIEYuIEthcm5leSxcbi8vIGh0dHA6Ly9nZW9ncmFwaGljbGliLnNvdXJjZWZvcmdlLm5ldC9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgQWRkZXI7XG59XG5cbmZ1bmN0aW9uIEFkZGVyKCkge1xuICB0aGlzLnJlc2V0KCk7XG59XG5cbkFkZGVyLnByb3RvdHlwZSA9IHtcbiAgY29uc3RydWN0b3I6IEFkZGVyLFxuICByZXNldDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5zID0gLy8gcm91bmRlZCB2YWx1ZVxuICAgIHRoaXMudCA9IDA7IC8vIGV4YWN0IGVycm9yXG4gIH0sXG4gIGFkZDogZnVuY3Rpb24oeSkge1xuICAgIGFkZCh0ZW1wLCB5LCB0aGlzLnQpO1xuICAgIGFkZCh0aGlzLCB0ZW1wLnMsIHRoaXMucyk7XG4gICAgaWYgKHRoaXMucykgdGhpcy50ICs9IHRlbXAudDtcbiAgICBlbHNlIHRoaXMucyA9IHRlbXAudDtcbiAgfSxcbiAgdmFsdWVPZjogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMucztcbiAgfVxufTtcblxudmFyIHRlbXAgPSBuZXcgQWRkZXI7XG5cbmZ1bmN0aW9uIGFkZChhZGRlciwgYSwgYikge1xuICB2YXIgeCA9IGFkZGVyLnMgPSBhICsgYixcbiAgICAgIGJ2ID0geCAtIGEsXG4gICAgICBhdiA9IHggLSBidjtcbiAgYWRkZXIudCA9IChhIC0gYXYpICsgKGIgLSBidik7XG59XG4iLCJpbXBvcnQgYWRkZXIgZnJvbSBcIi4vYWRkZXIuanNcIjtcbmltcG9ydCB7YXRhbjIsIGNvcywgcXVhcnRlclBpLCByYWRpYW5zLCBzaW4sIHRhdX0gZnJvbSBcIi4vbWF0aC5qc1wiO1xuaW1wb3J0IG5vb3AgZnJvbSBcIi4vbm9vcC5qc1wiO1xuaW1wb3J0IHN0cmVhbSBmcm9tIFwiLi9zdHJlYW0uanNcIjtcblxuZXhwb3J0IHZhciBhcmVhUmluZ1N1bSA9IGFkZGVyKCk7XG5cbnZhciBhcmVhU3VtID0gYWRkZXIoKSxcbiAgICBsYW1iZGEwMCxcbiAgICBwaGkwMCxcbiAgICBsYW1iZGEwLFxuICAgIGNvc1BoaTAsXG4gICAgc2luUGhpMDtcblxuZXhwb3J0IHZhciBhcmVhU3RyZWFtID0ge1xuICBwb2ludDogbm9vcCxcbiAgbGluZVN0YXJ0OiBub29wLFxuICBsaW5lRW5kOiBub29wLFxuICBwb2x5Z29uU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIGFyZWFSaW5nU3VtLnJlc2V0KCk7XG4gICAgYXJlYVN0cmVhbS5saW5lU3RhcnQgPSBhcmVhUmluZ1N0YXJ0O1xuICAgIGFyZWFTdHJlYW0ubGluZUVuZCA9IGFyZWFSaW5nRW5kO1xuICB9LFxuICBwb2x5Z29uRW5kOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgYXJlYVJpbmcgPSArYXJlYVJpbmdTdW07XG4gICAgYXJlYVN1bS5hZGQoYXJlYVJpbmcgPCAwID8gdGF1ICsgYXJlYVJpbmcgOiBhcmVhUmluZyk7XG4gICAgdGhpcy5saW5lU3RhcnQgPSB0aGlzLmxpbmVFbmQgPSB0aGlzLnBvaW50ID0gbm9vcDtcbiAgfSxcbiAgc3BoZXJlOiBmdW5jdGlvbigpIHtcbiAgICBhcmVhU3VtLmFkZCh0YXUpO1xuICB9XG59O1xuXG5mdW5jdGlvbiBhcmVhUmluZ1N0YXJ0KCkge1xuICBhcmVhU3RyZWFtLnBvaW50ID0gYXJlYVBvaW50Rmlyc3Q7XG59XG5cbmZ1bmN0aW9uIGFyZWFSaW5nRW5kKCkge1xuICBhcmVhUG9pbnQobGFtYmRhMDAsIHBoaTAwKTtcbn1cblxuZnVuY3Rpb24gYXJlYVBvaW50Rmlyc3QobGFtYmRhLCBwaGkpIHtcbiAgYXJlYVN0cmVhbS5wb2ludCA9IGFyZWFQb2ludDtcbiAgbGFtYmRhMDAgPSBsYW1iZGEsIHBoaTAwID0gcGhpO1xuICBsYW1iZGEgKj0gcmFkaWFucywgcGhpICo9IHJhZGlhbnM7XG4gIGxhbWJkYTAgPSBsYW1iZGEsIGNvc1BoaTAgPSBjb3MocGhpID0gcGhpIC8gMiArIHF1YXJ0ZXJQaSksIHNpblBoaTAgPSBzaW4ocGhpKTtcbn1cblxuZnVuY3Rpb24gYXJlYVBvaW50KGxhbWJkYSwgcGhpKSB7XG4gIGxhbWJkYSAqPSByYWRpYW5zLCBwaGkgKj0gcmFkaWFucztcbiAgcGhpID0gcGhpIC8gMiArIHF1YXJ0ZXJQaTsgLy8gaGFsZiB0aGUgYW5ndWxhciBkaXN0YW5jZSBmcm9tIHNvdXRoIHBvbGVcblxuICAvLyBTcGhlcmljYWwgZXhjZXNzIEUgZm9yIGEgc3BoZXJpY2FsIHRyaWFuZ2xlIHdpdGggdmVydGljZXM6IHNvdXRoIHBvbGUsXG4gIC8vIHByZXZpb3VzIHBvaW50LCBjdXJyZW50IHBvaW50LiAgVXNlcyBhIGZvcm11bGEgZGVyaXZlZCBmcm9tIENhZ25vbGnigJlzXG4gIC8vIHRoZW9yZW0uICBTZWUgVG9kaHVudGVyLCBTcGhlcmljYWwgVHJpZy4gKDE4NzEpLCBTZWMuIDEwMywgRXEuICgyKS5cbiAgdmFyIGRMYW1iZGEgPSBsYW1iZGEgLSBsYW1iZGEwLFxuICAgICAgc2RMYW1iZGEgPSBkTGFtYmRhID49IDAgPyAxIDogLTEsXG4gICAgICBhZExhbWJkYSA9IHNkTGFtYmRhICogZExhbWJkYSxcbiAgICAgIGNvc1BoaSA9IGNvcyhwaGkpLFxuICAgICAgc2luUGhpID0gc2luKHBoaSksXG4gICAgICBrID0gc2luUGhpMCAqIHNpblBoaSxcbiAgICAgIHUgPSBjb3NQaGkwICogY29zUGhpICsgayAqIGNvcyhhZExhbWJkYSksXG4gICAgICB2ID0gayAqIHNkTGFtYmRhICogc2luKGFkTGFtYmRhKTtcbiAgYXJlYVJpbmdTdW0uYWRkKGF0YW4yKHYsIHUpKTtcblxuICAvLyBBZHZhbmNlIHRoZSBwcmV2aW91cyBwb2ludHMuXG4gIGxhbWJkYTAgPSBsYW1iZGEsIGNvc1BoaTAgPSBjb3NQaGksIHNpblBoaTAgPSBzaW5QaGk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG9iamVjdCkge1xuICBhcmVhU3VtLnJlc2V0KCk7XG4gIHN0cmVhbShvYmplY3QsIGFyZWFTdHJlYW0pO1xuICByZXR1cm4gYXJlYVN1bSAqIDI7XG59XG4iLCJpbXBvcnQgYWRkZXIgZnJvbSBcIi4vYWRkZXIuanNcIjtcbmltcG9ydCB7YXJlYVN0cmVhbSwgYXJlYVJpbmdTdW19IGZyb20gXCIuL2FyZWEuanNcIjtcbmltcG9ydCB7Y2FydGVzaWFuLCBjYXJ0ZXNpYW5Dcm9zcywgY2FydGVzaWFuTm9ybWFsaXplSW5QbGFjZSwgc3BoZXJpY2FsfSBmcm9tIFwiLi9jYXJ0ZXNpYW4uanNcIjtcbmltcG9ydCB7YWJzLCBkZWdyZWVzLCBlcHNpbG9uLCByYWRpYW5zfSBmcm9tIFwiLi9tYXRoLmpzXCI7XG5pbXBvcnQgc3RyZWFtIGZyb20gXCIuL3N0cmVhbS5qc1wiO1xuXG52YXIgbGFtYmRhMCwgcGhpMCwgbGFtYmRhMSwgcGhpMSwgLy8gYm91bmRzXG4gICAgbGFtYmRhMiwgLy8gcHJldmlvdXMgbGFtYmRhLWNvb3JkaW5hdGVcbiAgICBsYW1iZGEwMCwgcGhpMDAsIC8vIGZpcnN0IHBvaW50XG4gICAgcDAsIC8vIHByZXZpb3VzIDNEIHBvaW50XG4gICAgZGVsdGFTdW0gPSBhZGRlcigpLFxuICAgIHJhbmdlcyxcbiAgICByYW5nZTtcblxudmFyIGJvdW5kc1N0cmVhbSA9IHtcbiAgcG9pbnQ6IGJvdW5kc1BvaW50LFxuICBsaW5lU3RhcnQ6IGJvdW5kc0xpbmVTdGFydCxcbiAgbGluZUVuZDogYm91bmRzTGluZUVuZCxcbiAgcG9seWdvblN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICBib3VuZHNTdHJlYW0ucG9pbnQgPSBib3VuZHNSaW5nUG9pbnQ7XG4gICAgYm91bmRzU3RyZWFtLmxpbmVTdGFydCA9IGJvdW5kc1JpbmdTdGFydDtcbiAgICBib3VuZHNTdHJlYW0ubGluZUVuZCA9IGJvdW5kc1JpbmdFbmQ7XG4gICAgZGVsdGFTdW0ucmVzZXQoKTtcbiAgICBhcmVhU3RyZWFtLnBvbHlnb25TdGFydCgpO1xuICB9LFxuICBwb2x5Z29uRW5kOiBmdW5jdGlvbigpIHtcbiAgICBhcmVhU3RyZWFtLnBvbHlnb25FbmQoKTtcbiAgICBib3VuZHNTdHJlYW0ucG9pbnQgPSBib3VuZHNQb2ludDtcbiAgICBib3VuZHNTdHJlYW0ubGluZVN0YXJ0ID0gYm91bmRzTGluZVN0YXJ0O1xuICAgIGJvdW5kc1N0cmVhbS5saW5lRW5kID0gYm91bmRzTGluZUVuZDtcbiAgICBpZiAoYXJlYVJpbmdTdW0gPCAwKSBsYW1iZGEwID0gLShsYW1iZGExID0gMTgwKSwgcGhpMCA9IC0ocGhpMSA9IDkwKTtcbiAgICBlbHNlIGlmIChkZWx0YVN1bSA+IGVwc2lsb24pIHBoaTEgPSA5MDtcbiAgICBlbHNlIGlmIChkZWx0YVN1bSA8IC1lcHNpbG9uKSBwaGkwID0gLTkwO1xuICAgIHJhbmdlWzBdID0gbGFtYmRhMCwgcmFuZ2VbMV0gPSBsYW1iZGExO1xuICB9LFxuICBzcGhlcmU6IGZ1bmN0aW9uKCkge1xuICAgIGxhbWJkYTAgPSAtKGxhbWJkYTEgPSAxODApLCBwaGkwID0gLShwaGkxID0gOTApO1xuICB9XG59O1xuXG5mdW5jdGlvbiBib3VuZHNQb2ludChsYW1iZGEsIHBoaSkge1xuICByYW5nZXMucHVzaChyYW5nZSA9IFtsYW1iZGEwID0gbGFtYmRhLCBsYW1iZGExID0gbGFtYmRhXSk7XG4gIGlmIChwaGkgPCBwaGkwKSBwaGkwID0gcGhpO1xuICBpZiAocGhpID4gcGhpMSkgcGhpMSA9IHBoaTtcbn1cblxuZnVuY3Rpb24gbGluZVBvaW50KGxhbWJkYSwgcGhpKSB7XG4gIHZhciBwID0gY2FydGVzaWFuKFtsYW1iZGEgKiByYWRpYW5zLCBwaGkgKiByYWRpYW5zXSk7XG4gIGlmIChwMCkge1xuICAgIHZhciBub3JtYWwgPSBjYXJ0ZXNpYW5Dcm9zcyhwMCwgcCksXG4gICAgICAgIGVxdWF0b3JpYWwgPSBbbm9ybWFsWzFdLCAtbm9ybWFsWzBdLCAwXSxcbiAgICAgICAgaW5mbGVjdGlvbiA9IGNhcnRlc2lhbkNyb3NzKGVxdWF0b3JpYWwsIG5vcm1hbCk7XG4gICAgY2FydGVzaWFuTm9ybWFsaXplSW5QbGFjZShpbmZsZWN0aW9uKTtcbiAgICBpbmZsZWN0aW9uID0gc3BoZXJpY2FsKGluZmxlY3Rpb24pO1xuICAgIHZhciBkZWx0YSA9IGxhbWJkYSAtIGxhbWJkYTIsXG4gICAgICAgIHNpZ24gPSBkZWx0YSA+IDAgPyAxIDogLTEsXG4gICAgICAgIGxhbWJkYWkgPSBpbmZsZWN0aW9uWzBdICogZGVncmVlcyAqIHNpZ24sXG4gICAgICAgIHBoaWksXG4gICAgICAgIGFudGltZXJpZGlhbiA9IGFicyhkZWx0YSkgPiAxODA7XG4gICAgaWYgKGFudGltZXJpZGlhbiBeIChzaWduICogbGFtYmRhMiA8IGxhbWJkYWkgJiYgbGFtYmRhaSA8IHNpZ24gKiBsYW1iZGEpKSB7XG4gICAgICBwaGlpID0gaW5mbGVjdGlvblsxXSAqIGRlZ3JlZXM7XG4gICAgICBpZiAocGhpaSA+IHBoaTEpIHBoaTEgPSBwaGlpO1xuICAgIH0gZWxzZSBpZiAobGFtYmRhaSA9IChsYW1iZGFpICsgMzYwKSAlIDM2MCAtIDE4MCwgYW50aW1lcmlkaWFuIF4gKHNpZ24gKiBsYW1iZGEyIDwgbGFtYmRhaSAmJiBsYW1iZGFpIDwgc2lnbiAqIGxhbWJkYSkpIHtcbiAgICAgIHBoaWkgPSAtaW5mbGVjdGlvblsxXSAqIGRlZ3JlZXM7XG4gICAgICBpZiAocGhpaSA8IHBoaTApIHBoaTAgPSBwaGlpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocGhpIDwgcGhpMCkgcGhpMCA9IHBoaTtcbiAgICAgIGlmIChwaGkgPiBwaGkxKSBwaGkxID0gcGhpO1xuICAgIH1cbiAgICBpZiAoYW50aW1lcmlkaWFuKSB7XG4gICAgICBpZiAobGFtYmRhIDwgbGFtYmRhMikge1xuICAgICAgICBpZiAoYW5nbGUobGFtYmRhMCwgbGFtYmRhKSA+IGFuZ2xlKGxhbWJkYTAsIGxhbWJkYTEpKSBsYW1iZGExID0gbGFtYmRhO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGFuZ2xlKGxhbWJkYSwgbGFtYmRhMSkgPiBhbmdsZShsYW1iZGEwLCBsYW1iZGExKSkgbGFtYmRhMCA9IGxhbWJkYTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGxhbWJkYTEgPj0gbGFtYmRhMCkge1xuICAgICAgICBpZiAobGFtYmRhIDwgbGFtYmRhMCkgbGFtYmRhMCA9IGxhbWJkYTtcbiAgICAgICAgaWYgKGxhbWJkYSA+IGxhbWJkYTEpIGxhbWJkYTEgPSBsYW1iZGE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAobGFtYmRhID4gbGFtYmRhMikge1xuICAgICAgICAgIGlmIChhbmdsZShsYW1iZGEwLCBsYW1iZGEpID4gYW5nbGUobGFtYmRhMCwgbGFtYmRhMSkpIGxhbWJkYTEgPSBsYW1iZGE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKGFuZ2xlKGxhbWJkYSwgbGFtYmRhMSkgPiBhbmdsZShsYW1iZGEwLCBsYW1iZGExKSkgbGFtYmRhMCA9IGxhbWJkYTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByYW5nZXMucHVzaChyYW5nZSA9IFtsYW1iZGEwID0gbGFtYmRhLCBsYW1iZGExID0gbGFtYmRhXSk7XG4gIH1cbiAgaWYgKHBoaSA8IHBoaTApIHBoaTAgPSBwaGk7XG4gIGlmIChwaGkgPiBwaGkxKSBwaGkxID0gcGhpO1xuICBwMCA9IHAsIGxhbWJkYTIgPSBsYW1iZGE7XG59XG5cbmZ1bmN0aW9uIGJvdW5kc0xpbmVTdGFydCgpIHtcbiAgYm91bmRzU3RyZWFtLnBvaW50ID0gbGluZVBvaW50O1xufVxuXG5mdW5jdGlvbiBib3VuZHNMaW5lRW5kKCkge1xuICByYW5nZVswXSA9IGxhbWJkYTAsIHJhbmdlWzFdID0gbGFtYmRhMTtcbiAgYm91bmRzU3RyZWFtLnBvaW50ID0gYm91bmRzUG9pbnQ7XG4gIHAwID0gbnVsbDtcbn1cblxuZnVuY3Rpb24gYm91bmRzUmluZ1BvaW50KGxhbWJkYSwgcGhpKSB7XG4gIGlmIChwMCkge1xuICAgIHZhciBkZWx0YSA9IGxhbWJkYSAtIGxhbWJkYTI7XG4gICAgZGVsdGFTdW0uYWRkKGFicyhkZWx0YSkgPiAxODAgPyBkZWx0YSArIChkZWx0YSA+IDAgPyAzNjAgOiAtMzYwKSA6IGRlbHRhKTtcbiAgfSBlbHNlIHtcbiAgICBsYW1iZGEwMCA9IGxhbWJkYSwgcGhpMDAgPSBwaGk7XG4gIH1cbiAgYXJlYVN0cmVhbS5wb2ludChsYW1iZGEsIHBoaSk7XG4gIGxpbmVQb2ludChsYW1iZGEsIHBoaSk7XG59XG5cbmZ1bmN0aW9uIGJvdW5kc1JpbmdTdGFydCgpIHtcbiAgYXJlYVN0cmVhbS5saW5lU3RhcnQoKTtcbn1cblxuZnVuY3Rpb24gYm91bmRzUmluZ0VuZCgpIHtcbiAgYm91bmRzUmluZ1BvaW50KGxhbWJkYTAwLCBwaGkwMCk7XG4gIGFyZWFTdHJlYW0ubGluZUVuZCgpO1xuICBpZiAoYWJzKGRlbHRhU3VtKSA+IGVwc2lsb24pIGxhbWJkYTAgPSAtKGxhbWJkYTEgPSAxODApO1xuICByYW5nZVswXSA9IGxhbWJkYTAsIHJhbmdlWzFdID0gbGFtYmRhMTtcbiAgcDAgPSBudWxsO1xufVxuXG4vLyBGaW5kcyB0aGUgbGVmdC1yaWdodCBkaXN0YW5jZSBiZXR3ZWVuIHR3byBsb25naXR1ZGVzLlxuLy8gVGhpcyBpcyBhbG1vc3QgdGhlIHNhbWUgYXMgKGxhbWJkYTEgLSBsYW1iZGEwICsgMzYwwrApICUgMzYwwrAsIGV4Y2VwdCB0aGF0IHdlIHdhbnRcbi8vIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIMKxMTgwwrAgdG8gYmUgMzYwwrAuXG5mdW5jdGlvbiBhbmdsZShsYW1iZGEwLCBsYW1iZGExKSB7XG4gIHJldHVybiAobGFtYmRhMSAtPSBsYW1iZGEwKSA8IDAgPyBsYW1iZGExICsgMzYwIDogbGFtYmRhMTtcbn1cblxuZnVuY3Rpb24gcmFuZ2VDb21wYXJlKGEsIGIpIHtcbiAgcmV0dXJuIGFbMF0gLSBiWzBdO1xufVxuXG5mdW5jdGlvbiByYW5nZUNvbnRhaW5zKHJhbmdlLCB4KSB7XG4gIHJldHVybiByYW5nZVswXSA8PSByYW5nZVsxXSA/IHJhbmdlWzBdIDw9IHggJiYgeCA8PSByYW5nZVsxXSA6IHggPCByYW5nZVswXSB8fCByYW5nZVsxXSA8IHg7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGZlYXR1cmUpIHtcbiAgdmFyIGksIG4sIGEsIGIsIG1lcmdlZCwgZGVsdGFNYXgsIGRlbHRhO1xuXG4gIHBoaTEgPSBsYW1iZGExID0gLShsYW1iZGEwID0gcGhpMCA9IEluZmluaXR5KTtcbiAgcmFuZ2VzID0gW107XG4gIHN0cmVhbShmZWF0dXJlLCBib3VuZHNTdHJlYW0pO1xuXG4gIC8vIEZpcnN0LCBzb3J0IHJhbmdlcyBieSB0aGVpciBtaW5pbXVtIGxvbmdpdHVkZXMuXG4gIGlmIChuID0gcmFuZ2VzLmxlbmd0aCkge1xuICAgIHJhbmdlcy5zb3J0KHJhbmdlQ29tcGFyZSk7XG5cbiAgICAvLyBUaGVuLCBtZXJnZSBhbnkgcmFuZ2VzIHRoYXQgb3ZlcmxhcC5cbiAgICBmb3IgKGkgPSAxLCBhID0gcmFuZ2VzWzBdLCBtZXJnZWQgPSBbYV07IGkgPCBuOyArK2kpIHtcbiAgICAgIGIgPSByYW5nZXNbaV07XG4gICAgICBpZiAocmFuZ2VDb250YWlucyhhLCBiWzBdKSB8fCByYW5nZUNvbnRhaW5zKGEsIGJbMV0pKSB7XG4gICAgICAgIGlmIChhbmdsZShhWzBdLCBiWzFdKSA+IGFuZ2xlKGFbMF0sIGFbMV0pKSBhWzFdID0gYlsxXTtcbiAgICAgICAgaWYgKGFuZ2xlKGJbMF0sIGFbMV0pID4gYW5nbGUoYVswXSwgYVsxXSkpIGFbMF0gPSBiWzBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWVyZ2VkLnB1c2goYSA9IGIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEZpbmFsbHksIGZpbmQgdGhlIGxhcmdlc3QgZ2FwIGJldHdlZW4gdGhlIG1lcmdlZCByYW5nZXMuXG4gICAgLy8gVGhlIGZpbmFsIGJvdW5kaW5nIGJveCB3aWxsIGJlIHRoZSBpbnZlcnNlIG9mIHRoaXMgZ2FwLlxuICAgIGZvciAoZGVsdGFNYXggPSAtSW5maW5pdHksIG4gPSBtZXJnZWQubGVuZ3RoIC0gMSwgaSA9IDAsIGEgPSBtZXJnZWRbbl07IGkgPD0gbjsgYSA9IGIsICsraSkge1xuICAgICAgYiA9IG1lcmdlZFtpXTtcbiAgICAgIGlmICgoZGVsdGEgPSBhbmdsZShhWzFdLCBiWzBdKSkgPiBkZWx0YU1heCkgZGVsdGFNYXggPSBkZWx0YSwgbGFtYmRhMCA9IGJbMF0sIGxhbWJkYTEgPSBhWzFdO1xuICAgIH1cbiAgfVxuXG4gIHJhbmdlcyA9IHJhbmdlID0gbnVsbDtcblxuICByZXR1cm4gbGFtYmRhMCA9PT0gSW5maW5pdHkgfHwgcGhpMCA9PT0gSW5maW5pdHlcbiAgICAgID8gW1tOYU4sIE5hTl0sIFtOYU4sIE5hTl1dXG4gICAgICA6IFtbbGFtYmRhMCwgcGhpMF0sIFtsYW1iZGExLCBwaGkxXV07XG59XG4iLCJpbXBvcnQge2FzaW4sIGF0YW4yLCBjb3MsIHNpbiwgc3FydH0gZnJvbSBcIi4vbWF0aC5qc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gc3BoZXJpY2FsKGNhcnRlc2lhbikge1xuICByZXR1cm4gW2F0YW4yKGNhcnRlc2lhblsxXSwgY2FydGVzaWFuWzBdKSwgYXNpbihjYXJ0ZXNpYW5bMl0pXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhcnRlc2lhbihzcGhlcmljYWwpIHtcbiAgdmFyIGxhbWJkYSA9IHNwaGVyaWNhbFswXSwgcGhpID0gc3BoZXJpY2FsWzFdLCBjb3NQaGkgPSBjb3MocGhpKTtcbiAgcmV0dXJuIFtjb3NQaGkgKiBjb3MobGFtYmRhKSwgY29zUGhpICogc2luKGxhbWJkYSksIHNpbihwaGkpXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhcnRlc2lhbkRvdChhLCBiKSB7XG4gIHJldHVybiBhWzBdICogYlswXSArIGFbMV0gKiBiWzFdICsgYVsyXSAqIGJbMl07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYXJ0ZXNpYW5Dcm9zcyhhLCBiKSB7XG4gIHJldHVybiBbYVsxXSAqIGJbMl0gLSBhWzJdICogYlsxXSwgYVsyXSAqIGJbMF0gLSBhWzBdICogYlsyXSwgYVswXSAqIGJbMV0gLSBhWzFdICogYlswXV07XG59XG5cbi8vIFRPRE8gcmV0dXJuIGFcbmV4cG9ydCBmdW5jdGlvbiBjYXJ0ZXNpYW5BZGRJblBsYWNlKGEsIGIpIHtcbiAgYVswXSArPSBiWzBdLCBhWzFdICs9IGJbMV0sIGFbMl0gKz0gYlsyXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhcnRlc2lhblNjYWxlKHZlY3Rvciwgaykge1xuICByZXR1cm4gW3ZlY3RvclswXSAqIGssIHZlY3RvclsxXSAqIGssIHZlY3RvclsyXSAqIGtdO1xufVxuXG4vLyBUT0RPIHJldHVybiBkXG5leHBvcnQgZnVuY3Rpb24gY2FydGVzaWFuTm9ybWFsaXplSW5QbGFjZShkKSB7XG4gIHZhciBsID0gc3FydChkWzBdICogZFswXSArIGRbMV0gKiBkWzFdICsgZFsyXSAqIGRbMl0pO1xuICBkWzBdIC89IGwsIGRbMV0gLz0gbCwgZFsyXSAvPSBsO1xufVxuIiwiaW1wb3J0IHthc2luLCBhdGFuMiwgY29zLCBkZWdyZWVzLCBlcHNpbG9uLCBlcHNpbG9uMiwgcmFkaWFucywgc2luLCBzcXJ0fSBmcm9tIFwiLi9tYXRoLmpzXCI7XG5pbXBvcnQgbm9vcCBmcm9tIFwiLi9ub29wLmpzXCI7XG5pbXBvcnQgc3RyZWFtIGZyb20gXCIuL3N0cmVhbS5qc1wiO1xuXG52YXIgVzAsIFcxLFxuICAgIFgwLCBZMCwgWjAsXG4gICAgWDEsIFkxLCBaMSxcbiAgICBYMiwgWTIsIFoyLFxuICAgIGxhbWJkYTAwLCBwaGkwMCwgLy8gZmlyc3QgcG9pbnRcbiAgICB4MCwgeTAsIHowOyAvLyBwcmV2aW91cyBwb2ludFxuXG52YXIgY2VudHJvaWRTdHJlYW0gPSB7XG4gIHNwaGVyZTogbm9vcCxcbiAgcG9pbnQ6IGNlbnRyb2lkUG9pbnQsXG4gIGxpbmVTdGFydDogY2VudHJvaWRMaW5lU3RhcnQsXG4gIGxpbmVFbmQ6IGNlbnRyb2lkTGluZUVuZCxcbiAgcG9seWdvblN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICBjZW50cm9pZFN0cmVhbS5saW5lU3RhcnQgPSBjZW50cm9pZFJpbmdTdGFydDtcbiAgICBjZW50cm9pZFN0cmVhbS5saW5lRW5kID0gY2VudHJvaWRSaW5nRW5kO1xuICB9LFxuICBwb2x5Z29uRW5kOiBmdW5jdGlvbigpIHtcbiAgICBjZW50cm9pZFN0cmVhbS5saW5lU3RhcnQgPSBjZW50cm9pZExpbmVTdGFydDtcbiAgICBjZW50cm9pZFN0cmVhbS5saW5lRW5kID0gY2VudHJvaWRMaW5lRW5kO1xuICB9XG59O1xuXG4vLyBBcml0aG1ldGljIG1lYW4gb2YgQ2FydGVzaWFuIHZlY3RvcnMuXG5mdW5jdGlvbiBjZW50cm9pZFBvaW50KGxhbWJkYSwgcGhpKSB7XG4gIGxhbWJkYSAqPSByYWRpYW5zLCBwaGkgKj0gcmFkaWFucztcbiAgdmFyIGNvc1BoaSA9IGNvcyhwaGkpO1xuICBjZW50cm9pZFBvaW50Q2FydGVzaWFuKGNvc1BoaSAqIGNvcyhsYW1iZGEpLCBjb3NQaGkgKiBzaW4obGFtYmRhKSwgc2luKHBoaSkpO1xufVxuXG5mdW5jdGlvbiBjZW50cm9pZFBvaW50Q2FydGVzaWFuKHgsIHksIHopIHtcbiAgKytXMDtcbiAgWDAgKz0gKHggLSBYMCkgLyBXMDtcbiAgWTAgKz0gKHkgLSBZMCkgLyBXMDtcbiAgWjAgKz0gKHogLSBaMCkgLyBXMDtcbn1cblxuZnVuY3Rpb24gY2VudHJvaWRMaW5lU3RhcnQoKSB7XG4gIGNlbnRyb2lkU3RyZWFtLnBvaW50ID0gY2VudHJvaWRMaW5lUG9pbnRGaXJzdDtcbn1cblxuZnVuY3Rpb24gY2VudHJvaWRMaW5lUG9pbnRGaXJzdChsYW1iZGEsIHBoaSkge1xuICBsYW1iZGEgKj0gcmFkaWFucywgcGhpICo9IHJhZGlhbnM7XG4gIHZhciBjb3NQaGkgPSBjb3MocGhpKTtcbiAgeDAgPSBjb3NQaGkgKiBjb3MobGFtYmRhKTtcbiAgeTAgPSBjb3NQaGkgKiBzaW4obGFtYmRhKTtcbiAgejAgPSBzaW4ocGhpKTtcbiAgY2VudHJvaWRTdHJlYW0ucG9pbnQgPSBjZW50cm9pZExpbmVQb2ludDtcbiAgY2VudHJvaWRQb2ludENhcnRlc2lhbih4MCwgeTAsIHowKTtcbn1cblxuZnVuY3Rpb24gY2VudHJvaWRMaW5lUG9pbnQobGFtYmRhLCBwaGkpIHtcbiAgbGFtYmRhICo9IHJhZGlhbnMsIHBoaSAqPSByYWRpYW5zO1xuICB2YXIgY29zUGhpID0gY29zKHBoaSksXG4gICAgICB4ID0gY29zUGhpICogY29zKGxhbWJkYSksXG4gICAgICB5ID0gY29zUGhpICogc2luKGxhbWJkYSksXG4gICAgICB6ID0gc2luKHBoaSksXG4gICAgICB3ID0gYXRhbjIoc3FydCgodyA9IHkwICogeiAtIHowICogeSkgKiB3ICsgKHcgPSB6MCAqIHggLSB4MCAqIHopICogdyArICh3ID0geDAgKiB5IC0geTAgKiB4KSAqIHcpLCB4MCAqIHggKyB5MCAqIHkgKyB6MCAqIHopO1xuICBXMSArPSB3O1xuICBYMSArPSB3ICogKHgwICsgKHgwID0geCkpO1xuICBZMSArPSB3ICogKHkwICsgKHkwID0geSkpO1xuICBaMSArPSB3ICogKHowICsgKHowID0geikpO1xuICBjZW50cm9pZFBvaW50Q2FydGVzaWFuKHgwLCB5MCwgejApO1xufVxuXG5mdW5jdGlvbiBjZW50cm9pZExpbmVFbmQoKSB7XG4gIGNlbnRyb2lkU3RyZWFtLnBvaW50ID0gY2VudHJvaWRQb2ludDtcbn1cblxuLy8gU2VlIEouIEUuIEJyb2NrLCBUaGUgSW5lcnRpYSBUZW5zb3IgZm9yIGEgU3BoZXJpY2FsIFRyaWFuZ2xlLFxuLy8gSi4gQXBwbGllZCBNZWNoYW5pY3MgNDIsIDIzOSAoMTk3NSkuXG5mdW5jdGlvbiBjZW50cm9pZFJpbmdTdGFydCgpIHtcbiAgY2VudHJvaWRTdHJlYW0ucG9pbnQgPSBjZW50cm9pZFJpbmdQb2ludEZpcnN0O1xufVxuXG5mdW5jdGlvbiBjZW50cm9pZFJpbmdFbmQoKSB7XG4gIGNlbnRyb2lkUmluZ1BvaW50KGxhbWJkYTAwLCBwaGkwMCk7XG4gIGNlbnRyb2lkU3RyZWFtLnBvaW50ID0gY2VudHJvaWRQb2ludDtcbn1cblxuZnVuY3Rpb24gY2VudHJvaWRSaW5nUG9pbnRGaXJzdChsYW1iZGEsIHBoaSkge1xuICBsYW1iZGEwMCA9IGxhbWJkYSwgcGhpMDAgPSBwaGk7XG4gIGxhbWJkYSAqPSByYWRpYW5zLCBwaGkgKj0gcmFkaWFucztcbiAgY2VudHJvaWRTdHJlYW0ucG9pbnQgPSBjZW50cm9pZFJpbmdQb2ludDtcbiAgdmFyIGNvc1BoaSA9IGNvcyhwaGkpO1xuICB4MCA9IGNvc1BoaSAqIGNvcyhsYW1iZGEpO1xuICB5MCA9IGNvc1BoaSAqIHNpbihsYW1iZGEpO1xuICB6MCA9IHNpbihwaGkpO1xuICBjZW50cm9pZFBvaW50Q2FydGVzaWFuKHgwLCB5MCwgejApO1xufVxuXG5mdW5jdGlvbiBjZW50cm9pZFJpbmdQb2ludChsYW1iZGEsIHBoaSkge1xuICBsYW1iZGEgKj0gcmFkaWFucywgcGhpICo9IHJhZGlhbnM7XG4gIHZhciBjb3NQaGkgPSBjb3MocGhpKSxcbiAgICAgIHggPSBjb3NQaGkgKiBjb3MobGFtYmRhKSxcbiAgICAgIHkgPSBjb3NQaGkgKiBzaW4obGFtYmRhKSxcbiAgICAgIHogPSBzaW4ocGhpKSxcbiAgICAgIGN4ID0geTAgKiB6IC0gejAgKiB5LFxuICAgICAgY3kgPSB6MCAqIHggLSB4MCAqIHosXG4gICAgICBjeiA9IHgwICogeSAtIHkwICogeCxcbiAgICAgIG0gPSBzcXJ0KGN4ICogY3ggKyBjeSAqIGN5ICsgY3ogKiBjeiksXG4gICAgICB3ID0gYXNpbihtKSwgLy8gbGluZSB3ZWlnaHQgPSBhbmdsZVxuICAgICAgdiA9IG0gJiYgLXcgLyBtOyAvLyBhcmVhIHdlaWdodCBtdWx0aXBsaWVyXG4gIFgyICs9IHYgKiBjeDtcbiAgWTIgKz0gdiAqIGN5O1xuICBaMiArPSB2ICogY3o7XG4gIFcxICs9IHc7XG4gIFgxICs9IHcgKiAoeDAgKyAoeDAgPSB4KSk7XG4gIFkxICs9IHcgKiAoeTAgKyAoeTAgPSB5KSk7XG4gIFoxICs9IHcgKiAoejAgKyAoejAgPSB6KSk7XG4gIGNlbnRyb2lkUG9pbnRDYXJ0ZXNpYW4oeDAsIHkwLCB6MCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG9iamVjdCkge1xuICBXMCA9IFcxID1cbiAgWDAgPSBZMCA9IFowID1cbiAgWDEgPSBZMSA9IFoxID1cbiAgWDIgPSBZMiA9IFoyID0gMDtcbiAgc3RyZWFtKG9iamVjdCwgY2VudHJvaWRTdHJlYW0pO1xuXG4gIHZhciB4ID0gWDIsXG4gICAgICB5ID0gWTIsXG4gICAgICB6ID0gWjIsXG4gICAgICBtID0geCAqIHggKyB5ICogeSArIHogKiB6O1xuXG4gIC8vIElmIHRoZSBhcmVhLXdlaWdodGVkIGNjZW50cm9pZCBpcyB1bmRlZmluZWQsIGZhbGwgYmFjayB0byBsZW5ndGgtd2VpZ2h0ZWQgY2NlbnRyb2lkLlxuICBpZiAobSA8IGVwc2lsb24yKSB7XG4gICAgeCA9IFgxLCB5ID0gWTEsIHogPSBaMTtcbiAgICAvLyBJZiB0aGUgZmVhdHVyZSBoYXMgemVybyBsZW5ndGgsIGZhbGwgYmFjayB0byBhcml0aG1ldGljIG1lYW4gb2YgcG9pbnQgdmVjdG9ycy5cbiAgICBpZiAoVzEgPCBlcHNpbG9uKSB4ID0gWDAsIHkgPSBZMCwgeiA9IFowO1xuICAgIG0gPSB4ICogeCArIHkgKiB5ICsgeiAqIHo7XG4gICAgLy8gSWYgdGhlIGZlYXR1cmUgc3RpbGwgaGFzIGFuIHVuZGVmaW5lZCBjY2VudHJvaWQsIHRoZW4gcmV0dXJuLlxuICAgIGlmIChtIDwgZXBzaWxvbjIpIHJldHVybiBbTmFOLCBOYU5dO1xuICB9XG5cbiAgcmV0dXJuIFthdGFuMih5LCB4KSAqIGRlZ3JlZXMsIGFzaW4oeiAvIHNxcnQobSkpICogZGVncmVlc107XG59XG4iLCJpbXBvcnQge2NhcnRlc2lhbiwgY2FydGVzaWFuTm9ybWFsaXplSW5QbGFjZSwgc3BoZXJpY2FsfSBmcm9tIFwiLi9jYXJ0ZXNpYW4uanNcIjtcbmltcG9ydCBjb25zdGFudCBmcm9tIFwiLi9jb25zdGFudC5qc1wiO1xuaW1wb3J0IHthY29zLCBjb3MsIGRlZ3JlZXMsIGVwc2lsb24sIHJhZGlhbnMsIHNpbiwgdGF1fSBmcm9tIFwiLi9tYXRoLmpzXCI7XG5pbXBvcnQge3JvdGF0ZVJhZGlhbnN9IGZyb20gXCIuL3JvdGF0aW9uLmpzXCI7XG5cbi8vIEdlbmVyYXRlcyBhIGNpcmNsZSBjZW50ZXJlZCBhdCBbMMKwLCAwwrBdLCB3aXRoIGEgZ2l2ZW4gcmFkaXVzIGFuZCBwcmVjaXNpb24uXG5leHBvcnQgZnVuY3Rpb24gY2lyY2xlU3RyZWFtKHN0cmVhbSwgcmFkaXVzLCBkZWx0YSwgZGlyZWN0aW9uLCB0MCwgdDEpIHtcbiAgaWYgKCFkZWx0YSkgcmV0dXJuO1xuICB2YXIgY29zUmFkaXVzID0gY29zKHJhZGl1cyksXG4gICAgICBzaW5SYWRpdXMgPSBzaW4ocmFkaXVzKSxcbiAgICAgIHN0ZXAgPSBkaXJlY3Rpb24gKiBkZWx0YTtcbiAgaWYgKHQwID09IG51bGwpIHtcbiAgICB0MCA9IHJhZGl1cyArIGRpcmVjdGlvbiAqIHRhdTtcbiAgICB0MSA9IHJhZGl1cyAtIHN0ZXAgLyAyO1xuICB9IGVsc2Uge1xuICAgIHQwID0gY2lyY2xlUmFkaXVzKGNvc1JhZGl1cywgdDApO1xuICAgIHQxID0gY2lyY2xlUmFkaXVzKGNvc1JhZGl1cywgdDEpO1xuICAgIGlmIChkaXJlY3Rpb24gPiAwID8gdDAgPCB0MSA6IHQwID4gdDEpIHQwICs9IGRpcmVjdGlvbiAqIHRhdTtcbiAgfVxuICBmb3IgKHZhciBwb2ludCwgdCA9IHQwOyBkaXJlY3Rpb24gPiAwID8gdCA+IHQxIDogdCA8IHQxOyB0IC09IHN0ZXApIHtcbiAgICBwb2ludCA9IHNwaGVyaWNhbChbY29zUmFkaXVzLCAtc2luUmFkaXVzICogY29zKHQpLCAtc2luUmFkaXVzICogc2luKHQpXSk7XG4gICAgc3RyZWFtLnBvaW50KHBvaW50WzBdLCBwb2ludFsxXSk7XG4gIH1cbn1cblxuLy8gUmV0dXJucyB0aGUgc2lnbmVkIGFuZ2xlIG9mIGEgY2FydGVzaWFuIHBvaW50IHJlbGF0aXZlIHRvIFtjb3NSYWRpdXMsIDAsIDBdLlxuZnVuY3Rpb24gY2lyY2xlUmFkaXVzKGNvc1JhZGl1cywgcG9pbnQpIHtcbiAgcG9pbnQgPSBjYXJ0ZXNpYW4ocG9pbnQpLCBwb2ludFswXSAtPSBjb3NSYWRpdXM7XG4gIGNhcnRlc2lhbk5vcm1hbGl6ZUluUGxhY2UocG9pbnQpO1xuICB2YXIgcmFkaXVzID0gYWNvcygtcG9pbnRbMV0pO1xuICByZXR1cm4gKCgtcG9pbnRbMl0gPCAwID8gLXJhZGl1cyA6IHJhZGl1cykgKyB0YXUgLSBlcHNpbG9uKSAlIHRhdTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBjZW50ZXIgPSBjb25zdGFudChbMCwgMF0pLFxuICAgICAgcmFkaXVzID0gY29uc3RhbnQoOTApLFxuICAgICAgcHJlY2lzaW9uID0gY29uc3RhbnQoNiksXG4gICAgICByaW5nLFxuICAgICAgcm90YXRlLFxuICAgICAgc3RyZWFtID0ge3BvaW50OiBwb2ludH07XG5cbiAgZnVuY3Rpb24gcG9pbnQoeCwgeSkge1xuICAgIHJpbmcucHVzaCh4ID0gcm90YXRlKHgsIHkpKTtcbiAgICB4WzBdICo9IGRlZ3JlZXMsIHhbMV0gKj0gZGVncmVlcztcbiAgfVxuXG4gIGZ1bmN0aW9uIGNpcmNsZSgpIHtcbiAgICB2YXIgYyA9IGNlbnRlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpLFxuICAgICAgICByID0gcmFkaXVzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgKiByYWRpYW5zLFxuICAgICAgICBwID0gcHJlY2lzaW9uLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgKiByYWRpYW5zO1xuICAgIHJpbmcgPSBbXTtcbiAgICByb3RhdGUgPSByb3RhdGVSYWRpYW5zKC1jWzBdICogcmFkaWFucywgLWNbMV0gKiByYWRpYW5zLCAwKS5pbnZlcnQ7XG4gICAgY2lyY2xlU3RyZWFtKHN0cmVhbSwgciwgcCwgMSk7XG4gICAgYyA9IHt0eXBlOiBcIlBvbHlnb25cIiwgY29vcmRpbmF0ZXM6IFtyaW5nXX07XG4gICAgcmluZyA9IHJvdGF0ZSA9IG51bGw7XG4gICAgcmV0dXJuIGM7XG4gIH1cblxuICBjaXJjbGUuY2VudGVyID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGNlbnRlciA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoWytfWzBdLCArX1sxXV0pLCBjaXJjbGUpIDogY2VudGVyO1xuICB9O1xuXG4gIGNpcmNsZS5yYWRpdXMgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocmFkaXVzID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGNpcmNsZSkgOiByYWRpdXM7XG4gIH07XG5cbiAgY2lyY2xlLnByZWNpc2lvbiA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChwcmVjaXNpb24gPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgY2lyY2xlKSA6IHByZWNpc2lvbjtcbiAgfTtcblxuICByZXR1cm4gY2lyY2xlO1xufVxuIiwiaW1wb3J0IGNsaXAgZnJvbSBcIi4vaW5kZXguanNcIjtcbmltcG9ydCB7YWJzLCBhdGFuLCBjb3MsIGVwc2lsb24sIGhhbGZQaSwgcGksIHNpbn0gZnJvbSBcIi4uL21hdGguanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xpcChcbiAgZnVuY3Rpb24oKSB7IHJldHVybiB0cnVlOyB9LFxuICBjbGlwQW50aW1lcmlkaWFuTGluZSxcbiAgY2xpcEFudGltZXJpZGlhbkludGVycG9sYXRlLFxuICBbLXBpLCAtaGFsZlBpXVxuKTtcblxuLy8gVGFrZXMgYSBsaW5lIGFuZCBjdXRzIGludG8gdmlzaWJsZSBzZWdtZW50cy4gUmV0dXJuIHZhbHVlczogMCAtIHRoZXJlIHdlcmVcbi8vIGludGVyc2VjdGlvbnMgb3IgdGhlIGxpbmUgd2FzIGVtcHR5OyAxIC0gbm8gaW50ZXJzZWN0aW9uczsgMiAtIHRoZXJlIHdlcmVcbi8vIGludGVyc2VjdGlvbnMsIGFuZCB0aGUgZmlyc3QgYW5kIGxhc3Qgc2VnbWVudHMgc2hvdWxkIGJlIHJlam9pbmVkLlxuZnVuY3Rpb24gY2xpcEFudGltZXJpZGlhbkxpbmUoc3RyZWFtKSB7XG4gIHZhciBsYW1iZGEwID0gTmFOLFxuICAgICAgcGhpMCA9IE5hTixcbiAgICAgIHNpZ24wID0gTmFOLFxuICAgICAgY2xlYW47IC8vIG5vIGludGVyc2VjdGlvbnNcblxuICByZXR1cm4ge1xuICAgIGxpbmVTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgICBzdHJlYW0ubGluZVN0YXJ0KCk7XG4gICAgICBjbGVhbiA9IDE7XG4gICAgfSxcbiAgICBwb2ludDogZnVuY3Rpb24obGFtYmRhMSwgcGhpMSkge1xuICAgICAgdmFyIHNpZ24xID0gbGFtYmRhMSA+IDAgPyBwaSA6IC1waSxcbiAgICAgICAgICBkZWx0YSA9IGFicyhsYW1iZGExIC0gbGFtYmRhMCk7XG4gICAgICBpZiAoYWJzKGRlbHRhIC0gcGkpIDwgZXBzaWxvbikgeyAvLyBsaW5lIGNyb3NzZXMgYSBwb2xlXG4gICAgICAgIHN0cmVhbS5wb2ludChsYW1iZGEwLCBwaGkwID0gKHBoaTAgKyBwaGkxKSAvIDIgPiAwID8gaGFsZlBpIDogLWhhbGZQaSk7XG4gICAgICAgIHN0cmVhbS5wb2ludChzaWduMCwgcGhpMCk7XG4gICAgICAgIHN0cmVhbS5saW5lRW5kKCk7XG4gICAgICAgIHN0cmVhbS5saW5lU3RhcnQoKTtcbiAgICAgICAgc3RyZWFtLnBvaW50KHNpZ24xLCBwaGkwKTtcbiAgICAgICAgc3RyZWFtLnBvaW50KGxhbWJkYTEsIHBoaTApO1xuICAgICAgICBjbGVhbiA9IDA7XG4gICAgICB9IGVsc2UgaWYgKHNpZ24wICE9PSBzaWduMSAmJiBkZWx0YSA+PSBwaSkgeyAvLyBsaW5lIGNyb3NzZXMgYW50aW1lcmlkaWFuXG4gICAgICAgIGlmIChhYnMobGFtYmRhMCAtIHNpZ24wKSA8IGVwc2lsb24pIGxhbWJkYTAgLT0gc2lnbjAgKiBlcHNpbG9uOyAvLyBoYW5kbGUgZGVnZW5lcmFjaWVzXG4gICAgICAgIGlmIChhYnMobGFtYmRhMSAtIHNpZ24xKSA8IGVwc2lsb24pIGxhbWJkYTEgLT0gc2lnbjEgKiBlcHNpbG9uO1xuICAgICAgICBwaGkwID0gY2xpcEFudGltZXJpZGlhbkludGVyc2VjdChsYW1iZGEwLCBwaGkwLCBsYW1iZGExLCBwaGkxKTtcbiAgICAgICAgc3RyZWFtLnBvaW50KHNpZ24wLCBwaGkwKTtcbiAgICAgICAgc3RyZWFtLmxpbmVFbmQoKTtcbiAgICAgICAgc3RyZWFtLmxpbmVTdGFydCgpO1xuICAgICAgICBzdHJlYW0ucG9pbnQoc2lnbjEsIHBoaTApO1xuICAgICAgICBjbGVhbiA9IDA7XG4gICAgICB9XG4gICAgICBzdHJlYW0ucG9pbnQobGFtYmRhMCA9IGxhbWJkYTEsIHBoaTAgPSBwaGkxKTtcbiAgICAgIHNpZ24wID0gc2lnbjE7XG4gICAgfSxcbiAgICBsaW5lRW5kOiBmdW5jdGlvbigpIHtcbiAgICAgIHN0cmVhbS5saW5lRW5kKCk7XG4gICAgICBsYW1iZGEwID0gcGhpMCA9IE5hTjtcbiAgICB9LFxuICAgIGNsZWFuOiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiAyIC0gY2xlYW47IC8vIGlmIGludGVyc2VjdGlvbnMsIHJlam9pbiBmaXJzdCBhbmQgbGFzdCBzZWdtZW50c1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gY2xpcEFudGltZXJpZGlhbkludGVyc2VjdChsYW1iZGEwLCBwaGkwLCBsYW1iZGExLCBwaGkxKSB7XG4gIHZhciBjb3NQaGkwLFxuICAgICAgY29zUGhpMSxcbiAgICAgIHNpbkxhbWJkYTBMYW1iZGExID0gc2luKGxhbWJkYTAgLSBsYW1iZGExKTtcbiAgcmV0dXJuIGFicyhzaW5MYW1iZGEwTGFtYmRhMSkgPiBlcHNpbG9uXG4gICAgICA/IGF0YW4oKHNpbihwaGkwKSAqIChjb3NQaGkxID0gY29zKHBoaTEpKSAqIHNpbihsYW1iZGExKVxuICAgICAgICAgIC0gc2luKHBoaTEpICogKGNvc1BoaTAgPSBjb3MocGhpMCkpICogc2luKGxhbWJkYTApKVxuICAgICAgICAgIC8gKGNvc1BoaTAgKiBjb3NQaGkxICogc2luTGFtYmRhMExhbWJkYTEpKVxuICAgICAgOiAocGhpMCArIHBoaTEpIC8gMjtcbn1cblxuZnVuY3Rpb24gY2xpcEFudGltZXJpZGlhbkludGVycG9sYXRlKGZyb20sIHRvLCBkaXJlY3Rpb24sIHN0cmVhbSkge1xuICB2YXIgcGhpO1xuICBpZiAoZnJvbSA9PSBudWxsKSB7XG4gICAgcGhpID0gZGlyZWN0aW9uICogaGFsZlBpO1xuICAgIHN0cmVhbS5wb2ludCgtcGksIHBoaSk7XG4gICAgc3RyZWFtLnBvaW50KDAsIHBoaSk7XG4gICAgc3RyZWFtLnBvaW50KHBpLCBwaGkpO1xuICAgIHN0cmVhbS5wb2ludChwaSwgMCk7XG4gICAgc3RyZWFtLnBvaW50KHBpLCAtcGhpKTtcbiAgICBzdHJlYW0ucG9pbnQoMCwgLXBoaSk7XG4gICAgc3RyZWFtLnBvaW50KC1waSwgLXBoaSk7XG4gICAgc3RyZWFtLnBvaW50KC1waSwgMCk7XG4gICAgc3RyZWFtLnBvaW50KC1waSwgcGhpKTtcbiAgfSBlbHNlIGlmIChhYnMoZnJvbVswXSAtIHRvWzBdKSA+IGVwc2lsb24pIHtcbiAgICB2YXIgbGFtYmRhID0gZnJvbVswXSA8IHRvWzBdID8gcGkgOiAtcGk7XG4gICAgcGhpID0gZGlyZWN0aW9uICogbGFtYmRhIC8gMjtcbiAgICBzdHJlYW0ucG9pbnQoLWxhbWJkYSwgcGhpKTtcbiAgICBzdHJlYW0ucG9pbnQoMCwgcGhpKTtcbiAgICBzdHJlYW0ucG9pbnQobGFtYmRhLCBwaGkpO1xuICB9IGVsc2Uge1xuICAgIHN0cmVhbS5wb2ludCh0b1swXSwgdG9bMV0pO1xuICB9XG59XG4iLCJpbXBvcnQgbm9vcCBmcm9tIFwiLi4vbm9vcC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIGxpbmVzID0gW10sXG4gICAgICBsaW5lO1xuICByZXR1cm4ge1xuICAgIHBvaW50OiBmdW5jdGlvbih4LCB5LCBtKSB7XG4gICAgICBsaW5lLnB1c2goW3gsIHksIG1dKTtcbiAgICB9LFxuICAgIGxpbmVTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgICBsaW5lcy5wdXNoKGxpbmUgPSBbXSk7XG4gICAgfSxcbiAgICBsaW5lRW5kOiBub29wLFxuICAgIHJlam9pbjogZnVuY3Rpb24oKSB7XG4gICAgICBpZiAobGluZXMubGVuZ3RoID4gMSkgbGluZXMucHVzaChsaW5lcy5wb3AoKS5jb25jYXQobGluZXMuc2hpZnQoKSkpO1xuICAgIH0sXG4gICAgcmVzdWx0OiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciByZXN1bHQgPSBsaW5lcztcbiAgICAgIGxpbmVzID0gW107XG4gICAgICBsaW5lID0gbnVsbDtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICB9O1xufVxuIiwiaW1wb3J0IHtjYXJ0ZXNpYW4sIGNhcnRlc2lhbkFkZEluUGxhY2UsIGNhcnRlc2lhbkNyb3NzLCBjYXJ0ZXNpYW5Eb3QsIGNhcnRlc2lhblNjYWxlLCBzcGhlcmljYWx9IGZyb20gXCIuLi9jYXJ0ZXNpYW4uanNcIjtcbmltcG9ydCB7Y2lyY2xlU3RyZWFtfSBmcm9tIFwiLi4vY2lyY2xlLmpzXCI7XG5pbXBvcnQge2FicywgY29zLCBlcHNpbG9uLCBwaSwgcmFkaWFucywgc3FydH0gZnJvbSBcIi4uL21hdGguanNcIjtcbmltcG9ydCBwb2ludEVxdWFsIGZyb20gXCIuLi9wb2ludEVxdWFsLmpzXCI7XG5pbXBvcnQgY2xpcCBmcm9tIFwiLi9pbmRleC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihyYWRpdXMpIHtcbiAgdmFyIGNyID0gY29zKHJhZGl1cyksXG4gICAgICBkZWx0YSA9IDYgKiByYWRpYW5zLFxuICAgICAgc21hbGxSYWRpdXMgPSBjciA+IDAsXG4gICAgICBub3RIZW1pc3BoZXJlID0gYWJzKGNyKSA+IGVwc2lsb247IC8vIFRPRE8gb3B0aW1pc2UgZm9yIHRoaXMgY29tbW9uIGNhc2VcblxuICBmdW5jdGlvbiBpbnRlcnBvbGF0ZShmcm9tLCB0bywgZGlyZWN0aW9uLCBzdHJlYW0pIHtcbiAgICBjaXJjbGVTdHJlYW0oc3RyZWFtLCByYWRpdXMsIGRlbHRhLCBkaXJlY3Rpb24sIGZyb20sIHRvKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHZpc2libGUobGFtYmRhLCBwaGkpIHtcbiAgICByZXR1cm4gY29zKGxhbWJkYSkgKiBjb3MocGhpKSA+IGNyO1xuICB9XG5cbiAgLy8gVGFrZXMgYSBsaW5lIGFuZCBjdXRzIGludG8gdmlzaWJsZSBzZWdtZW50cy4gUmV0dXJuIHZhbHVlcyB1c2VkIGZvciBwb2x5Z29uXG4gIC8vIGNsaXBwaW5nOiAwIC0gdGhlcmUgd2VyZSBpbnRlcnNlY3Rpb25zIG9yIHRoZSBsaW5lIHdhcyBlbXB0eTsgMSAtIG5vXG4gIC8vIGludGVyc2VjdGlvbnMgMiAtIHRoZXJlIHdlcmUgaW50ZXJzZWN0aW9ucywgYW5kIHRoZSBmaXJzdCBhbmQgbGFzdCBzZWdtZW50c1xuICAvLyBzaG91bGQgYmUgcmVqb2luZWQuXG4gIGZ1bmN0aW9uIGNsaXBMaW5lKHN0cmVhbSkge1xuICAgIHZhciBwb2ludDAsIC8vIHByZXZpb3VzIHBvaW50XG4gICAgICAgIGMwLCAvLyBjb2RlIGZvciBwcmV2aW91cyBwb2ludFxuICAgICAgICB2MCwgLy8gdmlzaWJpbGl0eSBvZiBwcmV2aW91cyBwb2ludFxuICAgICAgICB2MDAsIC8vIHZpc2liaWxpdHkgb2YgZmlyc3QgcG9pbnRcbiAgICAgICAgY2xlYW47IC8vIG5vIGludGVyc2VjdGlvbnNcbiAgICByZXR1cm4ge1xuICAgICAgbGluZVN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgdjAwID0gdjAgPSBmYWxzZTtcbiAgICAgICAgY2xlYW4gPSAxO1xuICAgICAgfSxcbiAgICAgIHBvaW50OiBmdW5jdGlvbihsYW1iZGEsIHBoaSkge1xuICAgICAgICB2YXIgcG9pbnQxID0gW2xhbWJkYSwgcGhpXSxcbiAgICAgICAgICAgIHBvaW50MixcbiAgICAgICAgICAgIHYgPSB2aXNpYmxlKGxhbWJkYSwgcGhpKSxcbiAgICAgICAgICAgIGMgPSBzbWFsbFJhZGl1c1xuICAgICAgICAgICAgICA/IHYgPyAwIDogY29kZShsYW1iZGEsIHBoaSlcbiAgICAgICAgICAgICAgOiB2ID8gY29kZShsYW1iZGEgKyAobGFtYmRhIDwgMCA/IHBpIDogLXBpKSwgcGhpKSA6IDA7XG4gICAgICAgIGlmICghcG9pbnQwICYmICh2MDAgPSB2MCA9IHYpKSBzdHJlYW0ubGluZVN0YXJ0KCk7XG4gICAgICAgIGlmICh2ICE9PSB2MCkge1xuICAgICAgICAgIHBvaW50MiA9IGludGVyc2VjdChwb2ludDAsIHBvaW50MSk7XG4gICAgICAgICAgaWYgKCFwb2ludDIgfHwgcG9pbnRFcXVhbChwb2ludDAsIHBvaW50MikgfHwgcG9pbnRFcXVhbChwb2ludDEsIHBvaW50MikpXG4gICAgICAgICAgICBwb2ludDFbMl0gPSAxO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2ICE9PSB2MCkge1xuICAgICAgICAgIGNsZWFuID0gMDtcbiAgICAgICAgICBpZiAodikge1xuICAgICAgICAgICAgLy8gb3V0c2lkZSBnb2luZyBpblxuICAgICAgICAgICAgc3RyZWFtLmxpbmVTdGFydCgpO1xuICAgICAgICAgICAgcG9pbnQyID0gaW50ZXJzZWN0KHBvaW50MSwgcG9pbnQwKTtcbiAgICAgICAgICAgIHN0cmVhbS5wb2ludChwb2ludDJbMF0sIHBvaW50MlsxXSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGluc2lkZSBnb2luZyBvdXRcbiAgICAgICAgICAgIHBvaW50MiA9IGludGVyc2VjdChwb2ludDAsIHBvaW50MSk7XG4gICAgICAgICAgICBzdHJlYW0ucG9pbnQocG9pbnQyWzBdLCBwb2ludDJbMV0sIDIpO1xuICAgICAgICAgICAgc3RyZWFtLmxpbmVFbmQoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcG9pbnQwID0gcG9pbnQyO1xuICAgICAgICB9IGVsc2UgaWYgKG5vdEhlbWlzcGhlcmUgJiYgcG9pbnQwICYmIHNtYWxsUmFkaXVzIF4gdikge1xuICAgICAgICAgIHZhciB0O1xuICAgICAgICAgIC8vIElmIHRoZSBjb2RlcyBmb3IgdHdvIHBvaW50cyBhcmUgZGlmZmVyZW50LCBvciBhcmUgYm90aCB6ZXJvLFxuICAgICAgICAgIC8vIGFuZCB0aGVyZSB0aGlzIHNlZ21lbnQgaW50ZXJzZWN0cyB3aXRoIHRoZSBzbWFsbCBjaXJjbGUuXG4gICAgICAgICAgaWYgKCEoYyAmIGMwKSAmJiAodCA9IGludGVyc2VjdChwb2ludDEsIHBvaW50MCwgdHJ1ZSkpKSB7XG4gICAgICAgICAgICBjbGVhbiA9IDA7XG4gICAgICAgICAgICBpZiAoc21hbGxSYWRpdXMpIHtcbiAgICAgICAgICAgICAgc3RyZWFtLmxpbmVTdGFydCgpO1xuICAgICAgICAgICAgICBzdHJlYW0ucG9pbnQodFswXVswXSwgdFswXVsxXSk7XG4gICAgICAgICAgICAgIHN0cmVhbS5wb2ludCh0WzFdWzBdLCB0WzFdWzFdKTtcbiAgICAgICAgICAgICAgc3RyZWFtLmxpbmVFbmQoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHN0cmVhbS5wb2ludCh0WzFdWzBdLCB0WzFdWzFdKTtcbiAgICAgICAgICAgICAgc3RyZWFtLmxpbmVFbmQoKTtcbiAgICAgICAgICAgICAgc3RyZWFtLmxpbmVTdGFydCgpO1xuICAgICAgICAgICAgICBzdHJlYW0ucG9pbnQodFswXVswXSwgdFswXVsxXSwgMyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh2ICYmICghcG9pbnQwIHx8ICFwb2ludEVxdWFsKHBvaW50MCwgcG9pbnQxKSkpIHtcbiAgICAgICAgICBzdHJlYW0ucG9pbnQocG9pbnQxWzBdLCBwb2ludDFbMV0pO1xuICAgICAgICB9XG4gICAgICAgIHBvaW50MCA9IHBvaW50MSwgdjAgPSB2LCBjMCA9IGM7XG4gICAgICB9LFxuICAgICAgbGluZUVuZDogZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh2MCkgc3RyZWFtLmxpbmVFbmQoKTtcbiAgICAgICAgcG9pbnQwID0gbnVsbDtcbiAgICAgIH0sXG4gICAgICAvLyBSZWpvaW4gZmlyc3QgYW5kIGxhc3Qgc2VnbWVudHMgaWYgdGhlcmUgd2VyZSBpbnRlcnNlY3Rpb25zIGFuZCB0aGUgZmlyc3RcbiAgICAgIC8vIGFuZCBsYXN0IHBvaW50cyB3ZXJlIHZpc2libGUuXG4gICAgICBjbGVhbjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBjbGVhbiB8ICgodjAwICYmIHYwKSA8PCAxKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgLy8gSW50ZXJzZWN0cyB0aGUgZ3JlYXQgY2lyY2xlIGJldHdlZW4gYSBhbmQgYiB3aXRoIHRoZSBjbGlwIGNpcmNsZS5cbiAgZnVuY3Rpb24gaW50ZXJzZWN0KGEsIGIsIHR3bykge1xuICAgIHZhciBwYSA9IGNhcnRlc2lhbihhKSxcbiAgICAgICAgcGIgPSBjYXJ0ZXNpYW4oYik7XG5cbiAgICAvLyBXZSBoYXZlIHR3byBwbGFuZXMsIG4xLnAgPSBkMSBhbmQgbjIucCA9IGQyLlxuICAgIC8vIEZpbmQgaW50ZXJzZWN0aW9uIGxpbmUgcCh0KSA9IGMxIG4xICsgYzIgbjIgKyB0IChuMSDiqK8gbjIpLlxuICAgIHZhciBuMSA9IFsxLCAwLCAwXSwgLy8gbm9ybWFsXG4gICAgICAgIG4yID0gY2FydGVzaWFuQ3Jvc3MocGEsIHBiKSxcbiAgICAgICAgbjJuMiA9IGNhcnRlc2lhbkRvdChuMiwgbjIpLFxuICAgICAgICBuMW4yID0gbjJbMF0sIC8vIGNhcnRlc2lhbkRvdChuMSwgbjIpLFxuICAgICAgICBkZXRlcm1pbmFudCA9IG4ybjIgLSBuMW4yICogbjFuMjtcblxuICAgIC8vIFR3byBwb2xhciBwb2ludHMuXG4gICAgaWYgKCFkZXRlcm1pbmFudCkgcmV0dXJuICF0d28gJiYgYTtcblxuICAgIHZhciBjMSA9ICBjciAqIG4ybjIgLyBkZXRlcm1pbmFudCxcbiAgICAgICAgYzIgPSAtY3IgKiBuMW4yIC8gZGV0ZXJtaW5hbnQsXG4gICAgICAgIG4xeG4yID0gY2FydGVzaWFuQ3Jvc3MobjEsIG4yKSxcbiAgICAgICAgQSA9IGNhcnRlc2lhblNjYWxlKG4xLCBjMSksXG4gICAgICAgIEIgPSBjYXJ0ZXNpYW5TY2FsZShuMiwgYzIpO1xuICAgIGNhcnRlc2lhbkFkZEluUGxhY2UoQSwgQik7XG5cbiAgICAvLyBTb2x2ZSB8cCh0KXxeMiA9IDEuXG4gICAgdmFyIHUgPSBuMXhuMixcbiAgICAgICAgdyA9IGNhcnRlc2lhbkRvdChBLCB1KSxcbiAgICAgICAgdXUgPSBjYXJ0ZXNpYW5Eb3QodSwgdSksXG4gICAgICAgIHQyID0gdyAqIHcgLSB1dSAqIChjYXJ0ZXNpYW5Eb3QoQSwgQSkgLSAxKTtcblxuICAgIGlmICh0MiA8IDApIHJldHVybjtcblxuICAgIHZhciB0ID0gc3FydCh0MiksXG4gICAgICAgIHEgPSBjYXJ0ZXNpYW5TY2FsZSh1LCAoLXcgLSB0KSAvIHV1KTtcbiAgICBjYXJ0ZXNpYW5BZGRJblBsYWNlKHEsIEEpO1xuICAgIHEgPSBzcGhlcmljYWwocSk7XG5cbiAgICBpZiAoIXR3bykgcmV0dXJuIHE7XG5cbiAgICAvLyBUd28gaW50ZXJzZWN0aW9uIHBvaW50cy5cbiAgICB2YXIgbGFtYmRhMCA9IGFbMF0sXG4gICAgICAgIGxhbWJkYTEgPSBiWzBdLFxuICAgICAgICBwaGkwID0gYVsxXSxcbiAgICAgICAgcGhpMSA9IGJbMV0sXG4gICAgICAgIHo7XG5cbiAgICBpZiAobGFtYmRhMSA8IGxhbWJkYTApIHogPSBsYW1iZGEwLCBsYW1iZGEwID0gbGFtYmRhMSwgbGFtYmRhMSA9IHo7XG5cbiAgICB2YXIgZGVsdGEgPSBsYW1iZGExIC0gbGFtYmRhMCxcbiAgICAgICAgcG9sYXIgPSBhYnMoZGVsdGEgLSBwaSkgPCBlcHNpbG9uLFxuICAgICAgICBtZXJpZGlhbiA9IHBvbGFyIHx8IGRlbHRhIDwgZXBzaWxvbjtcblxuICAgIGlmICghcG9sYXIgJiYgcGhpMSA8IHBoaTApIHogPSBwaGkwLCBwaGkwID0gcGhpMSwgcGhpMSA9IHo7XG5cbiAgICAvLyBDaGVjayB0aGF0IHRoZSBmaXJzdCBwb2ludCBpcyBiZXR3ZWVuIGEgYW5kIGIuXG4gICAgaWYgKG1lcmlkaWFuXG4gICAgICAgID8gcG9sYXJcbiAgICAgICAgICA/IHBoaTAgKyBwaGkxID4gMCBeIHFbMV0gPCAoYWJzKHFbMF0gLSBsYW1iZGEwKSA8IGVwc2lsb24gPyBwaGkwIDogcGhpMSlcbiAgICAgICAgICA6IHBoaTAgPD0gcVsxXSAmJiBxWzFdIDw9IHBoaTFcbiAgICAgICAgOiBkZWx0YSA+IHBpIF4gKGxhbWJkYTAgPD0gcVswXSAmJiBxWzBdIDw9IGxhbWJkYTEpKSB7XG4gICAgICB2YXIgcTEgPSBjYXJ0ZXNpYW5TY2FsZSh1LCAoLXcgKyB0KSAvIHV1KTtcbiAgICAgIGNhcnRlc2lhbkFkZEluUGxhY2UocTEsIEEpO1xuICAgICAgcmV0dXJuIFtxLCBzcGhlcmljYWwocTEpXTtcbiAgICB9XG4gIH1cblxuICAvLyBHZW5lcmF0ZXMgYSA0LWJpdCB2ZWN0b3IgcmVwcmVzZW50aW5nIHRoZSBsb2NhdGlvbiBvZiBhIHBvaW50IHJlbGF0aXZlIHRvXG4gIC8vIHRoZSBzbWFsbCBjaXJjbGUncyBib3VuZGluZyBib3guXG4gIGZ1bmN0aW9uIGNvZGUobGFtYmRhLCBwaGkpIHtcbiAgICB2YXIgciA9IHNtYWxsUmFkaXVzID8gcmFkaXVzIDogcGkgLSByYWRpdXMsXG4gICAgICAgIGNvZGUgPSAwO1xuICAgIGlmIChsYW1iZGEgPCAtcikgY29kZSB8PSAxOyAvLyBsZWZ0XG4gICAgZWxzZSBpZiAobGFtYmRhID4gcikgY29kZSB8PSAyOyAvLyByaWdodFxuICAgIGlmIChwaGkgPCAtcikgY29kZSB8PSA0OyAvLyBiZWxvd1xuICAgIGVsc2UgaWYgKHBoaSA+IHIpIGNvZGUgfD0gODsgLy8gYWJvdmVcbiAgICByZXR1cm4gY29kZTtcbiAgfVxuXG4gIHJldHVybiBjbGlwKHZpc2libGUsIGNsaXBMaW5lLCBpbnRlcnBvbGF0ZSwgc21hbGxSYWRpdXMgPyBbMCwgLXJhZGl1c10gOiBbLXBpLCByYWRpdXMgLSBwaV0pO1xufVxuIiwiaW1wb3J0IGNsaXBSZWN0YW5nbGUgZnJvbSBcIi4vcmVjdGFuZ2xlLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgeDAgPSAwLFxuICAgICAgeTAgPSAwLFxuICAgICAgeDEgPSA5NjAsXG4gICAgICB5MSA9IDUwMCxcbiAgICAgIGNhY2hlLFxuICAgICAgY2FjaGVTdHJlYW0sXG4gICAgICBjbGlwO1xuXG4gIHJldHVybiBjbGlwID0ge1xuICAgIHN0cmVhbTogZnVuY3Rpb24oc3RyZWFtKSB7XG4gICAgICByZXR1cm4gY2FjaGUgJiYgY2FjaGVTdHJlYW0gPT09IHN0cmVhbSA/IGNhY2hlIDogY2FjaGUgPSBjbGlwUmVjdGFuZ2xlKHgwLCB5MCwgeDEsIHkxKShjYWNoZVN0cmVhbSA9IHN0cmVhbSk7XG4gICAgfSxcbiAgICBleHRlbnQ6IGZ1bmN0aW9uKF8pIHtcbiAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHgwID0gK19bMF1bMF0sIHkwID0gK19bMF1bMV0sIHgxID0gK19bMV1bMF0sIHkxID0gK19bMV1bMV0sIGNhY2hlID0gY2FjaGVTdHJlYW0gPSBudWxsLCBjbGlwKSA6IFtbeDAsIHkwXSwgW3gxLCB5MV1dO1xuICAgIH1cbiAgfTtcbn1cbiIsImltcG9ydCBjbGlwQnVmZmVyIGZyb20gXCIuL2J1ZmZlci5qc1wiO1xuaW1wb3J0IGNsaXBSZWpvaW4gZnJvbSBcIi4vcmVqb2luLmpzXCI7XG5pbXBvcnQge2Vwc2lsb24sIGhhbGZQaX0gZnJvbSBcIi4uL21hdGguanNcIjtcbmltcG9ydCBwb2x5Z29uQ29udGFpbnMgZnJvbSBcIi4uL3BvbHlnb25Db250YWlucy5qc1wiO1xuaW1wb3J0IHttZXJnZX0gZnJvbSBcImQzLWFycmF5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHBvaW50VmlzaWJsZSwgY2xpcExpbmUsIGludGVycG9sYXRlLCBzdGFydCkge1xuICByZXR1cm4gZnVuY3Rpb24oc2luaykge1xuICAgIHZhciBsaW5lID0gY2xpcExpbmUoc2luayksXG4gICAgICAgIHJpbmdCdWZmZXIgPSBjbGlwQnVmZmVyKCksXG4gICAgICAgIHJpbmdTaW5rID0gY2xpcExpbmUocmluZ0J1ZmZlciksXG4gICAgICAgIHBvbHlnb25TdGFydGVkID0gZmFsc2UsXG4gICAgICAgIHBvbHlnb24sXG4gICAgICAgIHNlZ21lbnRzLFxuICAgICAgICByaW5nO1xuXG4gICAgdmFyIGNsaXAgPSB7XG4gICAgICBwb2ludDogcG9pbnQsXG4gICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCxcbiAgICAgIGxpbmVFbmQ6IGxpbmVFbmQsXG4gICAgICBwb2x5Z29uU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICBjbGlwLnBvaW50ID0gcG9pbnRSaW5nO1xuICAgICAgICBjbGlwLmxpbmVTdGFydCA9IHJpbmdTdGFydDtcbiAgICAgICAgY2xpcC5saW5lRW5kID0gcmluZ0VuZDtcbiAgICAgICAgc2VnbWVudHMgPSBbXTtcbiAgICAgICAgcG9seWdvbiA9IFtdO1xuICAgICAgfSxcbiAgICAgIHBvbHlnb25FbmQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICBjbGlwLnBvaW50ID0gcG9pbnQ7XG4gICAgICAgIGNsaXAubGluZVN0YXJ0ID0gbGluZVN0YXJ0O1xuICAgICAgICBjbGlwLmxpbmVFbmQgPSBsaW5lRW5kO1xuICAgICAgICBzZWdtZW50cyA9IG1lcmdlKHNlZ21lbnRzKTtcbiAgICAgICAgdmFyIHN0YXJ0SW5zaWRlID0gcG9seWdvbkNvbnRhaW5zKHBvbHlnb24sIHN0YXJ0KTtcbiAgICAgICAgaWYgKHNlZ21lbnRzLmxlbmd0aCkge1xuICAgICAgICAgIGlmICghcG9seWdvblN0YXJ0ZWQpIHNpbmsucG9seWdvblN0YXJ0KCksIHBvbHlnb25TdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICBjbGlwUmVqb2luKHNlZ21lbnRzLCBjb21wYXJlSW50ZXJzZWN0aW9uLCBzdGFydEluc2lkZSwgaW50ZXJwb2xhdGUsIHNpbmspO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0SW5zaWRlKSB7XG4gICAgICAgICAgaWYgKCFwb2x5Z29uU3RhcnRlZCkgc2luay5wb2x5Z29uU3RhcnQoKSwgcG9seWdvblN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICAgIHNpbmsubGluZVN0YXJ0KCk7XG4gICAgICAgICAgaW50ZXJwb2xhdGUobnVsbCwgbnVsbCwgMSwgc2luayk7XG4gICAgICAgICAgc2luay5saW5lRW5kKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBvbHlnb25TdGFydGVkKSBzaW5rLnBvbHlnb25FbmQoKSwgcG9seWdvblN0YXJ0ZWQgPSBmYWxzZTtcbiAgICAgICAgc2VnbWVudHMgPSBwb2x5Z29uID0gbnVsbDtcbiAgICAgIH0sXG4gICAgICBzcGhlcmU6IGZ1bmN0aW9uKCkge1xuICAgICAgICBzaW5rLnBvbHlnb25TdGFydCgpO1xuICAgICAgICBzaW5rLmxpbmVTdGFydCgpO1xuICAgICAgICBpbnRlcnBvbGF0ZShudWxsLCBudWxsLCAxLCBzaW5rKTtcbiAgICAgICAgc2luay5saW5lRW5kKCk7XG4gICAgICAgIHNpbmsucG9seWdvbkVuZCgpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBwb2ludChsYW1iZGEsIHBoaSkge1xuICAgICAgaWYgKHBvaW50VmlzaWJsZShsYW1iZGEsIHBoaSkpIHNpbmsucG9pbnQobGFtYmRhLCBwaGkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBvaW50TGluZShsYW1iZGEsIHBoaSkge1xuICAgICAgbGluZS5wb2ludChsYW1iZGEsIHBoaSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGluZVN0YXJ0KCkge1xuICAgICAgY2xpcC5wb2ludCA9IHBvaW50TGluZTtcbiAgICAgIGxpbmUubGluZVN0YXJ0KCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGluZUVuZCgpIHtcbiAgICAgIGNsaXAucG9pbnQgPSBwb2ludDtcbiAgICAgIGxpbmUubGluZUVuZCgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBvaW50UmluZyhsYW1iZGEsIHBoaSkge1xuICAgICAgcmluZy5wdXNoKFtsYW1iZGEsIHBoaV0pO1xuICAgICAgcmluZ1NpbmsucG9pbnQobGFtYmRhLCBwaGkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJpbmdTdGFydCgpIHtcbiAgICAgIHJpbmdTaW5rLmxpbmVTdGFydCgpO1xuICAgICAgcmluZyA9IFtdO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJpbmdFbmQoKSB7XG4gICAgICBwb2ludFJpbmcocmluZ1swXVswXSwgcmluZ1swXVsxXSk7XG4gICAgICByaW5nU2luay5saW5lRW5kKCk7XG5cbiAgICAgIHZhciBjbGVhbiA9IHJpbmdTaW5rLmNsZWFuKCksXG4gICAgICAgICAgcmluZ1NlZ21lbnRzID0gcmluZ0J1ZmZlci5yZXN1bHQoKSxcbiAgICAgICAgICBpLCBuID0gcmluZ1NlZ21lbnRzLmxlbmd0aCwgbSxcbiAgICAgICAgICBzZWdtZW50LFxuICAgICAgICAgIHBvaW50O1xuXG4gICAgICByaW5nLnBvcCgpO1xuICAgICAgcG9seWdvbi5wdXNoKHJpbmcpO1xuICAgICAgcmluZyA9IG51bGw7XG5cbiAgICAgIGlmICghbikgcmV0dXJuO1xuXG4gICAgICAvLyBObyBpbnRlcnNlY3Rpb25zLlxuICAgICAgaWYgKGNsZWFuICYgMSkge1xuICAgICAgICBzZWdtZW50ID0gcmluZ1NlZ21lbnRzWzBdO1xuICAgICAgICBpZiAoKG0gPSBzZWdtZW50Lmxlbmd0aCAtIDEpID4gMCkge1xuICAgICAgICAgIGlmICghcG9seWdvblN0YXJ0ZWQpIHNpbmsucG9seWdvblN0YXJ0KCksIHBvbHlnb25TdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICBzaW5rLmxpbmVTdGFydCgpO1xuICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBtOyArK2kpIHNpbmsucG9pbnQoKHBvaW50ID0gc2VnbWVudFtpXSlbMF0sIHBvaW50WzFdKTtcbiAgICAgICAgICBzaW5rLmxpbmVFbmQoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFJlam9pbiBjb25uZWN0ZWQgc2VnbWVudHMuXG4gICAgICAvLyBUT0RPIHJldXNlIHJpbmdCdWZmZXIucmVqb2luKCk/XG4gICAgICBpZiAobiA+IDEgJiYgY2xlYW4gJiAyKSByaW5nU2VnbWVudHMucHVzaChyaW5nU2VnbWVudHMucG9wKCkuY29uY2F0KHJpbmdTZWdtZW50cy5zaGlmdCgpKSk7XG5cbiAgICAgIHNlZ21lbnRzLnB1c2gocmluZ1NlZ21lbnRzLmZpbHRlcih2YWxpZFNlZ21lbnQpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2xpcDtcbiAgfTtcbn1cblxuZnVuY3Rpb24gdmFsaWRTZWdtZW50KHNlZ21lbnQpIHtcbiAgcmV0dXJuIHNlZ21lbnQubGVuZ3RoID4gMTtcbn1cblxuLy8gSW50ZXJzZWN0aW9ucyBhcmUgc29ydGVkIGFsb25nIHRoZSBjbGlwIGVkZ2UuIEZvciBib3RoIGFudGltZXJpZGlhbiBjdXR0aW5nXG4vLyBhbmQgY2lyY2xlIGNsaXBwaW5nLCB0aGUgc2FtZSBjb21wYXJpc29uIGlzIHVzZWQuXG5mdW5jdGlvbiBjb21wYXJlSW50ZXJzZWN0aW9uKGEsIGIpIHtcbiAgcmV0dXJuICgoYSA9IGEueClbMF0gPCAwID8gYVsxXSAtIGhhbGZQaSAtIGVwc2lsb24gOiBoYWxmUGkgLSBhWzFdKVxuICAgICAgIC0gKChiID0gYi54KVswXSA8IDAgPyBiWzFdIC0gaGFsZlBpIC0gZXBzaWxvbiA6IGhhbGZQaSAtIGJbMV0pO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYiwgeDAsIHkwLCB4MSwgeTEpIHtcbiAgdmFyIGF4ID0gYVswXSxcbiAgICAgIGF5ID0gYVsxXSxcbiAgICAgIGJ4ID0gYlswXSxcbiAgICAgIGJ5ID0gYlsxXSxcbiAgICAgIHQwID0gMCxcbiAgICAgIHQxID0gMSxcbiAgICAgIGR4ID0gYnggLSBheCxcbiAgICAgIGR5ID0gYnkgLSBheSxcbiAgICAgIHI7XG5cbiAgciA9IHgwIC0gYXg7XG4gIGlmICghZHggJiYgciA+IDApIHJldHVybjtcbiAgciAvPSBkeDtcbiAgaWYgKGR4IDwgMCkge1xuICAgIGlmIChyIDwgdDApIHJldHVybjtcbiAgICBpZiAociA8IHQxKSB0MSA9IHI7XG4gIH0gZWxzZSBpZiAoZHggPiAwKSB7XG4gICAgaWYgKHIgPiB0MSkgcmV0dXJuO1xuICAgIGlmIChyID4gdDApIHQwID0gcjtcbiAgfVxuXG4gIHIgPSB4MSAtIGF4O1xuICBpZiAoIWR4ICYmIHIgPCAwKSByZXR1cm47XG4gIHIgLz0gZHg7XG4gIGlmIChkeCA8IDApIHtcbiAgICBpZiAociA+IHQxKSByZXR1cm47XG4gICAgaWYgKHIgPiB0MCkgdDAgPSByO1xuICB9IGVsc2UgaWYgKGR4ID4gMCkge1xuICAgIGlmIChyIDwgdDApIHJldHVybjtcbiAgICBpZiAociA8IHQxKSB0MSA9IHI7XG4gIH1cblxuICByID0geTAgLSBheTtcbiAgaWYgKCFkeSAmJiByID4gMCkgcmV0dXJuO1xuICByIC89IGR5O1xuICBpZiAoZHkgPCAwKSB7XG4gICAgaWYgKHIgPCB0MCkgcmV0dXJuO1xuICAgIGlmIChyIDwgdDEpIHQxID0gcjtcbiAgfSBlbHNlIGlmIChkeSA+IDApIHtcbiAgICBpZiAociA+IHQxKSByZXR1cm47XG4gICAgaWYgKHIgPiB0MCkgdDAgPSByO1xuICB9XG5cbiAgciA9IHkxIC0gYXk7XG4gIGlmICghZHkgJiYgciA8IDApIHJldHVybjtcbiAgciAvPSBkeTtcbiAgaWYgKGR5IDwgMCkge1xuICAgIGlmIChyID4gdDEpIHJldHVybjtcbiAgICBpZiAociA+IHQwKSB0MCA9IHI7XG4gIH0gZWxzZSBpZiAoZHkgPiAwKSB7XG4gICAgaWYgKHIgPCB0MCkgcmV0dXJuO1xuICAgIGlmIChyIDwgdDEpIHQxID0gcjtcbiAgfVxuXG4gIGlmICh0MCA+IDApIGFbMF0gPSBheCArIHQwICogZHgsIGFbMV0gPSBheSArIHQwICogZHk7XG4gIGlmICh0MSA8IDEpIGJbMF0gPSBheCArIHQxICogZHgsIGJbMV0gPSBheSArIHQxICogZHk7XG4gIHJldHVybiB0cnVlO1xufVxuIiwiaW1wb3J0IHthYnMsIGVwc2lsb259IGZyb20gXCIuLi9tYXRoLmpzXCI7XG5pbXBvcnQgY2xpcEJ1ZmZlciBmcm9tIFwiLi9idWZmZXIuanNcIjtcbmltcG9ydCBjbGlwTGluZSBmcm9tIFwiLi9saW5lLmpzXCI7XG5pbXBvcnQgY2xpcFJlam9pbiBmcm9tIFwiLi9yZWpvaW4uanNcIjtcbmltcG9ydCB7bWVyZ2V9IGZyb20gXCJkMy1hcnJheVwiO1xuXG52YXIgY2xpcE1heCA9IDFlOSwgY2xpcE1pbiA9IC1jbGlwTWF4O1xuXG4vLyBUT0RPIFVzZSBkMy1wb2x5Z29u4oCZcyBwb2x5Z29uQ29udGFpbnMgaGVyZSBmb3IgdGhlIHJpbmcgY2hlY2s/XG4vLyBUT0RPIEVsaW1pbmF0ZSBkdXBsaWNhdGUgYnVmZmVyaW5nIGluIGNsaXBCdWZmZXIgYW5kIHBvbHlnb24ucHVzaD9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY2xpcFJlY3RhbmdsZSh4MCwgeTAsIHgxLCB5MSkge1xuXG4gIGZ1bmN0aW9uIHZpc2libGUoeCwgeSkge1xuICAgIHJldHVybiB4MCA8PSB4ICYmIHggPD0geDEgJiYgeTAgPD0geSAmJiB5IDw9IHkxO1xuICB9XG5cbiAgZnVuY3Rpb24gaW50ZXJwb2xhdGUoZnJvbSwgdG8sIGRpcmVjdGlvbiwgc3RyZWFtKSB7XG4gICAgdmFyIGEgPSAwLCBhMSA9IDA7XG4gICAgaWYgKGZyb20gPT0gbnVsbFxuICAgICAgICB8fCAoYSA9IGNvcm5lcihmcm9tLCBkaXJlY3Rpb24pKSAhPT0gKGExID0gY29ybmVyKHRvLCBkaXJlY3Rpb24pKVxuICAgICAgICB8fCBjb21wYXJlUG9pbnQoZnJvbSwgdG8pIDwgMCBeIGRpcmVjdGlvbiA+IDApIHtcbiAgICAgIGRvIHN0cmVhbS5wb2ludChhID09PSAwIHx8IGEgPT09IDMgPyB4MCA6IHgxLCBhID4gMSA/IHkxIDogeTApO1xuICAgICAgd2hpbGUgKChhID0gKGEgKyBkaXJlY3Rpb24gKyA0KSAlIDQpICE9PSBhMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0cmVhbS5wb2ludCh0b1swXSwgdG9bMV0pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNvcm5lcihwLCBkaXJlY3Rpb24pIHtcbiAgICByZXR1cm4gYWJzKHBbMF0gLSB4MCkgPCBlcHNpbG9uID8gZGlyZWN0aW9uID4gMCA/IDAgOiAzXG4gICAgICAgIDogYWJzKHBbMF0gLSB4MSkgPCBlcHNpbG9uID8gZGlyZWN0aW9uID4gMCA/IDIgOiAxXG4gICAgICAgIDogYWJzKHBbMV0gLSB5MCkgPCBlcHNpbG9uID8gZGlyZWN0aW9uID4gMCA/IDEgOiAwXG4gICAgICAgIDogZGlyZWN0aW9uID4gMCA/IDMgOiAyOyAvLyBhYnMocFsxXSAtIHkxKSA8IGVwc2lsb25cbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbXBhcmVJbnRlcnNlY3Rpb24oYSwgYikge1xuICAgIHJldHVybiBjb21wYXJlUG9pbnQoYS54LCBiLngpO1xuICB9XG5cbiAgZnVuY3Rpb24gY29tcGFyZVBvaW50KGEsIGIpIHtcbiAgICB2YXIgY2EgPSBjb3JuZXIoYSwgMSksXG4gICAgICAgIGNiID0gY29ybmVyKGIsIDEpO1xuICAgIHJldHVybiBjYSAhPT0gY2IgPyBjYSAtIGNiXG4gICAgICAgIDogY2EgPT09IDAgPyBiWzFdIC0gYVsxXVxuICAgICAgICA6IGNhID09PSAxID8gYVswXSAtIGJbMF1cbiAgICAgICAgOiBjYSA9PT0gMiA/IGFbMV0gLSBiWzFdXG4gICAgICAgIDogYlswXSAtIGFbMF07XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtKSB7XG4gICAgdmFyIGFjdGl2ZVN0cmVhbSA9IHN0cmVhbSxcbiAgICAgICAgYnVmZmVyU3RyZWFtID0gY2xpcEJ1ZmZlcigpLFxuICAgICAgICBzZWdtZW50cyxcbiAgICAgICAgcG9seWdvbixcbiAgICAgICAgcmluZyxcbiAgICAgICAgeF9fLCB5X18sIHZfXywgLy8gZmlyc3QgcG9pbnRcbiAgICAgICAgeF8sIHlfLCB2XywgLy8gcHJldmlvdXMgcG9pbnRcbiAgICAgICAgZmlyc3QsXG4gICAgICAgIGNsZWFuO1xuXG4gICAgdmFyIGNsaXBTdHJlYW0gPSB7XG4gICAgICBwb2ludDogcG9pbnQsXG4gICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCxcbiAgICAgIGxpbmVFbmQ6IGxpbmVFbmQsXG4gICAgICBwb2x5Z29uU3RhcnQ6IHBvbHlnb25TdGFydCxcbiAgICAgIHBvbHlnb25FbmQ6IHBvbHlnb25FbmRcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gcG9pbnQoeCwgeSkge1xuICAgICAgaWYgKHZpc2libGUoeCwgeSkpIGFjdGl2ZVN0cmVhbS5wb2ludCh4LCB5KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwb2x5Z29uSW5zaWRlKCkge1xuICAgICAgdmFyIHdpbmRpbmcgPSAwO1xuXG4gICAgICBmb3IgKHZhciBpID0gMCwgbiA9IHBvbHlnb24ubGVuZ3RoOyBpIDwgbjsgKytpKSB7XG4gICAgICAgIGZvciAodmFyIHJpbmcgPSBwb2x5Z29uW2ldLCBqID0gMSwgbSA9IHJpbmcubGVuZ3RoLCBwb2ludCA9IHJpbmdbMF0sIGEwLCBhMSwgYjAgPSBwb2ludFswXSwgYjEgPSBwb2ludFsxXTsgaiA8IG07ICsraikge1xuICAgICAgICAgIGEwID0gYjAsIGExID0gYjEsIHBvaW50ID0gcmluZ1tqXSwgYjAgPSBwb2ludFswXSwgYjEgPSBwb2ludFsxXTtcbiAgICAgICAgICBpZiAoYTEgPD0geTEpIHsgaWYgKGIxID4geTEgJiYgKGIwIC0gYTApICogKHkxIC0gYTEpID4gKGIxIC0gYTEpICogKHgwIC0gYTApKSArK3dpbmRpbmc7IH1cbiAgICAgICAgICBlbHNlIHsgaWYgKGIxIDw9IHkxICYmIChiMCAtIGEwKSAqICh5MSAtIGExKSA8IChiMSAtIGExKSAqICh4MCAtIGEwKSkgLS13aW5kaW5nOyB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHdpbmRpbmc7XG4gICAgfVxuXG4gICAgLy8gQnVmZmVyIGdlb21ldHJ5IHdpdGhpbiBhIHBvbHlnb24gYW5kIHRoZW4gY2xpcCBpdCBlbiBtYXNzZS5cbiAgICBmdW5jdGlvbiBwb2x5Z29uU3RhcnQoKSB7XG4gICAgICBhY3RpdmVTdHJlYW0gPSBidWZmZXJTdHJlYW0sIHNlZ21lbnRzID0gW10sIHBvbHlnb24gPSBbXSwgY2xlYW4gPSB0cnVlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBvbHlnb25FbmQoKSB7XG4gICAgICB2YXIgc3RhcnRJbnNpZGUgPSBwb2x5Z29uSW5zaWRlKCksXG4gICAgICAgICAgY2xlYW5JbnNpZGUgPSBjbGVhbiAmJiBzdGFydEluc2lkZSxcbiAgICAgICAgICB2aXNpYmxlID0gKHNlZ21lbnRzID0gbWVyZ2Uoc2VnbWVudHMpKS5sZW5ndGg7XG4gICAgICBpZiAoY2xlYW5JbnNpZGUgfHwgdmlzaWJsZSkge1xuICAgICAgICBzdHJlYW0ucG9seWdvblN0YXJ0KCk7XG4gICAgICAgIGlmIChjbGVhbkluc2lkZSkge1xuICAgICAgICAgIHN0cmVhbS5saW5lU3RhcnQoKTtcbiAgICAgICAgICBpbnRlcnBvbGF0ZShudWxsLCBudWxsLCAxLCBzdHJlYW0pO1xuICAgICAgICAgIHN0cmVhbS5saW5lRW5kKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZpc2libGUpIHtcbiAgICAgICAgICBjbGlwUmVqb2luKHNlZ21lbnRzLCBjb21wYXJlSW50ZXJzZWN0aW9uLCBzdGFydEluc2lkZSwgaW50ZXJwb2xhdGUsIHN0cmVhbSk7XG4gICAgICAgIH1cbiAgICAgICAgc3RyZWFtLnBvbHlnb25FbmQoKTtcbiAgICAgIH1cbiAgICAgIGFjdGl2ZVN0cmVhbSA9IHN0cmVhbSwgc2VnbWVudHMgPSBwb2x5Z29uID0gcmluZyA9IG51bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGluZVN0YXJ0KCkge1xuICAgICAgY2xpcFN0cmVhbS5wb2ludCA9IGxpbmVQb2ludDtcbiAgICAgIGlmIChwb2x5Z29uKSBwb2x5Z29uLnB1c2gocmluZyA9IFtdKTtcbiAgICAgIGZpcnN0ID0gdHJ1ZTtcbiAgICAgIHZfID0gZmFsc2U7XG4gICAgICB4XyA9IHlfID0gTmFOO1xuICAgIH1cblxuICAgIC8vIFRPRE8gcmF0aGVyIHRoYW4gc3BlY2lhbC1jYXNlIHBvbHlnb25zLCBzaW1wbHkgaGFuZGxlIHRoZW0gc2VwYXJhdGVseS5cbiAgICAvLyBJZGVhbGx5LCBjb2luY2lkZW50IGludGVyc2VjdGlvbiBwb2ludHMgc2hvdWxkIGJlIGppdHRlcmVkIHRvIGF2b2lkXG4gICAgLy8gY2xpcHBpbmcgaXNzdWVzLlxuICAgIGZ1bmN0aW9uIGxpbmVFbmQoKSB7XG4gICAgICBpZiAoc2VnbWVudHMpIHtcbiAgICAgICAgbGluZVBvaW50KHhfXywgeV9fKTtcbiAgICAgICAgaWYgKHZfXyAmJiB2XykgYnVmZmVyU3RyZWFtLnJlam9pbigpO1xuICAgICAgICBzZWdtZW50cy5wdXNoKGJ1ZmZlclN0cmVhbS5yZXN1bHQoKSk7XG4gICAgICB9XG4gICAgICBjbGlwU3RyZWFtLnBvaW50ID0gcG9pbnQ7XG4gICAgICBpZiAodl8pIGFjdGl2ZVN0cmVhbS5saW5lRW5kKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGluZVBvaW50KHgsIHkpIHtcbiAgICAgIHZhciB2ID0gdmlzaWJsZSh4LCB5KTtcbiAgICAgIGlmIChwb2x5Z29uKSByaW5nLnB1c2goW3gsIHldKTtcbiAgICAgIGlmIChmaXJzdCkge1xuICAgICAgICB4X18gPSB4LCB5X18gPSB5LCB2X18gPSB2O1xuICAgICAgICBmaXJzdCA9IGZhbHNlO1xuICAgICAgICBpZiAodikge1xuICAgICAgICAgIGFjdGl2ZVN0cmVhbS5saW5lU3RhcnQoKTtcbiAgICAgICAgICBhY3RpdmVTdHJlYW0ucG9pbnQoeCwgeSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh2ICYmIHZfKSBhY3RpdmVTdHJlYW0ucG9pbnQoeCwgeSk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHZhciBhID0gW3hfID0gTWF0aC5tYXgoY2xpcE1pbiwgTWF0aC5taW4oY2xpcE1heCwgeF8pKSwgeV8gPSBNYXRoLm1heChjbGlwTWluLCBNYXRoLm1pbihjbGlwTWF4LCB5XykpXSxcbiAgICAgICAgICAgICAgYiA9IFt4ID0gTWF0aC5tYXgoY2xpcE1pbiwgTWF0aC5taW4oY2xpcE1heCwgeCkpLCB5ID0gTWF0aC5tYXgoY2xpcE1pbiwgTWF0aC5taW4oY2xpcE1heCwgeSkpXTtcbiAgICAgICAgICBpZiAoY2xpcExpbmUoYSwgYiwgeDAsIHkwLCB4MSwgeTEpKSB7XG4gICAgICAgICAgICBpZiAoIXZfKSB7XG4gICAgICAgICAgICAgIGFjdGl2ZVN0cmVhbS5saW5lU3RhcnQoKTtcbiAgICAgICAgICAgICAgYWN0aXZlU3RyZWFtLnBvaW50KGFbMF0sIGFbMV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYWN0aXZlU3RyZWFtLnBvaW50KGJbMF0sIGJbMV0pO1xuICAgICAgICAgICAgaWYgKCF2KSBhY3RpdmVTdHJlYW0ubGluZUVuZCgpO1xuICAgICAgICAgICAgY2xlYW4gPSBmYWxzZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHYpIHtcbiAgICAgICAgICAgIGFjdGl2ZVN0cmVhbS5saW5lU3RhcnQoKTtcbiAgICAgICAgICAgIGFjdGl2ZVN0cmVhbS5wb2ludCh4LCB5KTtcbiAgICAgICAgICAgIGNsZWFuID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB4XyA9IHgsIHlfID0geSwgdl8gPSB2O1xuICAgIH1cblxuICAgIHJldHVybiBjbGlwU3RyZWFtO1xuICB9O1xufVxuIiwiaW1wb3J0IHBvaW50RXF1YWwgZnJvbSBcIi4uL3BvaW50RXF1YWwuanNcIjtcbmltcG9ydCB7ZXBzaWxvbn0gZnJvbSBcIi4uL21hdGguanNcIjtcblxuZnVuY3Rpb24gSW50ZXJzZWN0aW9uKHBvaW50LCBwb2ludHMsIG90aGVyLCBlbnRyeSkge1xuICB0aGlzLnggPSBwb2ludDtcbiAgdGhpcy56ID0gcG9pbnRzO1xuICB0aGlzLm8gPSBvdGhlcjsgLy8gYW5vdGhlciBpbnRlcnNlY3Rpb25cbiAgdGhpcy5lID0gZW50cnk7IC8vIGlzIGFuIGVudHJ5P1xuICB0aGlzLnYgPSBmYWxzZTsgLy8gdmlzaXRlZFxuICB0aGlzLm4gPSB0aGlzLnAgPSBudWxsOyAvLyBuZXh0ICYgcHJldmlvdXNcbn1cblxuLy8gQSBnZW5lcmFsaXplZCBwb2x5Z29uIGNsaXBwaW5nIGFsZ29yaXRobTogZ2l2ZW4gYSBwb2x5Z29uIHRoYXQgaGFzIGJlZW4gY3V0XG4vLyBpbnRvIGl0cyB2aXNpYmxlIGxpbmUgc2VnbWVudHMsIGFuZCByZWpvaW5zIHRoZSBzZWdtZW50cyBieSBpbnRlcnBvbGF0aW5nXG4vLyBhbG9uZyB0aGUgY2xpcCBlZGdlLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2VnbWVudHMsIGNvbXBhcmVJbnRlcnNlY3Rpb24sIHN0YXJ0SW5zaWRlLCBpbnRlcnBvbGF0ZSwgc3RyZWFtKSB7XG4gIHZhciBzdWJqZWN0ID0gW10sXG4gICAgICBjbGlwID0gW10sXG4gICAgICBpLFxuICAgICAgbjtcblxuICBzZWdtZW50cy5mb3JFYWNoKGZ1bmN0aW9uKHNlZ21lbnQpIHtcbiAgICBpZiAoKG4gPSBzZWdtZW50Lmxlbmd0aCAtIDEpIDw9IDApIHJldHVybjtcbiAgICB2YXIgbiwgcDAgPSBzZWdtZW50WzBdLCBwMSA9IHNlZ21lbnRbbl0sIHg7XG5cbiAgICBpZiAocG9pbnRFcXVhbChwMCwgcDEpKSB7XG4gICAgICBpZiAoIXAwWzJdICYmICFwMVsyXSkge1xuICAgICAgICBzdHJlYW0ubGluZVN0YXJ0KCk7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHN0cmVhbS5wb2ludCgocDAgPSBzZWdtZW50W2ldKVswXSwgcDBbMV0pO1xuICAgICAgICBzdHJlYW0ubGluZUVuZCgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyBoYW5kbGUgZGVnZW5lcmF0ZSBjYXNlcyBieSBtb3ZpbmcgdGhlIHBvaW50XG4gICAgICBwMVswXSArPSAyICogZXBzaWxvbjtcbiAgICB9XG5cbiAgICBzdWJqZWN0LnB1c2goeCA9IG5ldyBJbnRlcnNlY3Rpb24ocDAsIHNlZ21lbnQsIG51bGwsIHRydWUpKTtcbiAgICBjbGlwLnB1c2goeC5vID0gbmV3IEludGVyc2VjdGlvbihwMCwgbnVsbCwgeCwgZmFsc2UpKTtcbiAgICBzdWJqZWN0LnB1c2goeCA9IG5ldyBJbnRlcnNlY3Rpb24ocDEsIHNlZ21lbnQsIG51bGwsIGZhbHNlKSk7XG4gICAgY2xpcC5wdXNoKHgubyA9IG5ldyBJbnRlcnNlY3Rpb24ocDEsIG51bGwsIHgsIHRydWUpKTtcbiAgfSk7XG5cbiAgaWYgKCFzdWJqZWN0Lmxlbmd0aCkgcmV0dXJuO1xuXG4gIGNsaXAuc29ydChjb21wYXJlSW50ZXJzZWN0aW9uKTtcbiAgbGluayhzdWJqZWN0KTtcbiAgbGluayhjbGlwKTtcblxuICBmb3IgKGkgPSAwLCBuID0gY2xpcC5sZW5ndGg7IGkgPCBuOyArK2kpIHtcbiAgICBjbGlwW2ldLmUgPSBzdGFydEluc2lkZSA9ICFzdGFydEluc2lkZTtcbiAgfVxuXG4gIHZhciBzdGFydCA9IHN1YmplY3RbMF0sXG4gICAgICBwb2ludHMsXG4gICAgICBwb2ludDtcblxuICB3aGlsZSAoMSkge1xuICAgIC8vIEZpbmQgZmlyc3QgdW52aXNpdGVkIGludGVyc2VjdGlvbi5cbiAgICB2YXIgY3VycmVudCA9IHN0YXJ0LFxuICAgICAgICBpc1N1YmplY3QgPSB0cnVlO1xuICAgIHdoaWxlIChjdXJyZW50LnYpIGlmICgoY3VycmVudCA9IGN1cnJlbnQubikgPT09IHN0YXJ0KSByZXR1cm47XG4gICAgcG9pbnRzID0gY3VycmVudC56O1xuICAgIHN0cmVhbS5saW5lU3RhcnQoKTtcbiAgICBkbyB7XG4gICAgICBjdXJyZW50LnYgPSBjdXJyZW50Lm8udiA9IHRydWU7XG4gICAgICBpZiAoY3VycmVudC5lKSB7XG4gICAgICAgIGlmIChpc1N1YmplY3QpIHtcbiAgICAgICAgICBmb3IgKGkgPSAwLCBuID0gcG9pbnRzLmxlbmd0aDsgaSA8IG47ICsraSkgc3RyZWFtLnBvaW50KChwb2ludCA9IHBvaW50c1tpXSlbMF0sIHBvaW50WzFdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpbnRlcnBvbGF0ZShjdXJyZW50LngsIGN1cnJlbnQubi54LCAxLCBzdHJlYW0pO1xuICAgICAgICB9XG4gICAgICAgIGN1cnJlbnQgPSBjdXJyZW50Lm47XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoaXNTdWJqZWN0KSB7XG4gICAgICAgICAgcG9pbnRzID0gY3VycmVudC5wLno7XG4gICAgICAgICAgZm9yIChpID0gcG9pbnRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSBzdHJlYW0ucG9pbnQoKHBvaW50ID0gcG9pbnRzW2ldKVswXSwgcG9pbnRbMV0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGludGVycG9sYXRlKGN1cnJlbnQueCwgY3VycmVudC5wLngsIC0xLCBzdHJlYW0pO1xuICAgICAgICB9XG4gICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LnA7XG4gICAgICB9XG4gICAgICBjdXJyZW50ID0gY3VycmVudC5vO1xuICAgICAgcG9pbnRzID0gY3VycmVudC56O1xuICAgICAgaXNTdWJqZWN0ID0gIWlzU3ViamVjdDtcbiAgICB9IHdoaWxlICghY3VycmVudC52KTtcbiAgICBzdHJlYW0ubGluZUVuZCgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGxpbmsoYXJyYXkpIHtcbiAgaWYgKCEobiA9IGFycmF5Lmxlbmd0aCkpIHJldHVybjtcbiAgdmFyIG4sXG4gICAgICBpID0gMCxcbiAgICAgIGEgPSBhcnJheVswXSxcbiAgICAgIGI7XG4gIHdoaWxlICgrK2kgPCBuKSB7XG4gICAgYS5uID0gYiA9IGFycmF5W2ldO1xuICAgIGIucCA9IGE7XG4gICAgYSA9IGI7XG4gIH1cbiAgYS5uID0gYiA9IGFycmF5WzBdO1xuICBiLnAgPSBhO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuXG4gIGZ1bmN0aW9uIGNvbXBvc2UoeCwgeSkge1xuICAgIHJldHVybiB4ID0gYSh4LCB5KSwgYih4WzBdLCB4WzFdKTtcbiAgfVxuXG4gIGlmIChhLmludmVydCAmJiBiLmludmVydCkgY29tcG9zZS5pbnZlcnQgPSBmdW5jdGlvbih4LCB5KSB7XG4gICAgcmV0dXJuIHggPSBiLmludmVydCh4LCB5KSwgeCAmJiBhLmludmVydCh4WzBdLCB4WzFdKTtcbiAgfTtcblxuICByZXR1cm4gY29tcG9zZTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB4O1xuICB9O1xufVxuIiwiaW1wb3J0IHtkZWZhdWx0IGFzIHBvbHlnb25Db250YWluc30gZnJvbSBcIi4vcG9seWdvbkNvbnRhaW5zLmpzXCI7XG5pbXBvcnQge2RlZmF1bHQgYXMgZGlzdGFuY2V9IGZyb20gXCIuL2Rpc3RhbmNlLmpzXCI7XG5pbXBvcnQge2Vwc2lsb24yLCByYWRpYW5zfSBmcm9tIFwiLi9tYXRoLmpzXCI7XG5cbnZhciBjb250YWluc09iamVjdFR5cGUgPSB7XG4gIEZlYXR1cmU6IGZ1bmN0aW9uKG9iamVjdCwgcG9pbnQpIHtcbiAgICByZXR1cm4gY29udGFpbnNHZW9tZXRyeShvYmplY3QuZ2VvbWV0cnksIHBvaW50KTtcbiAgfSxcbiAgRmVhdHVyZUNvbGxlY3Rpb246IGZ1bmN0aW9uKG9iamVjdCwgcG9pbnQpIHtcbiAgICB2YXIgZmVhdHVyZXMgPSBvYmplY3QuZmVhdHVyZXMsIGkgPSAtMSwgbiA9IGZlYXR1cmVzLmxlbmd0aDtcbiAgICB3aGlsZSAoKytpIDwgbikgaWYgKGNvbnRhaW5zR2VvbWV0cnkoZmVhdHVyZXNbaV0uZ2VvbWV0cnksIHBvaW50KSkgcmV0dXJuIHRydWU7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuXG52YXIgY29udGFpbnNHZW9tZXRyeVR5cGUgPSB7XG4gIFNwaGVyZTogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0sXG4gIFBvaW50OiBmdW5jdGlvbihvYmplY3QsIHBvaW50KSB7XG4gICAgcmV0dXJuIGNvbnRhaW5zUG9pbnQob2JqZWN0LmNvb3JkaW5hdGVzLCBwb2ludCk7XG4gIH0sXG4gIE11bHRpUG9pbnQ6IGZ1bmN0aW9uKG9iamVjdCwgcG9pbnQpIHtcbiAgICB2YXIgY29vcmRpbmF0ZXMgPSBvYmplY3QuY29vcmRpbmF0ZXMsIGkgPSAtMSwgbiA9IGNvb3JkaW5hdGVzLmxlbmd0aDtcbiAgICB3aGlsZSAoKytpIDwgbikgaWYgKGNvbnRhaW5zUG9pbnQoY29vcmRpbmF0ZXNbaV0sIHBvaW50KSkgcmV0dXJuIHRydWU7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBMaW5lU3RyaW5nOiBmdW5jdGlvbihvYmplY3QsIHBvaW50KSB7XG4gICAgcmV0dXJuIGNvbnRhaW5zTGluZShvYmplY3QuY29vcmRpbmF0ZXMsIHBvaW50KTtcbiAgfSxcbiAgTXVsdGlMaW5lU3RyaW5nOiBmdW5jdGlvbihvYmplY3QsIHBvaW50KSB7XG4gICAgdmFyIGNvb3JkaW5hdGVzID0gb2JqZWN0LmNvb3JkaW5hdGVzLCBpID0gLTEsIG4gPSBjb29yZGluYXRlcy5sZW5ndGg7XG4gICAgd2hpbGUgKCsraSA8IG4pIGlmIChjb250YWluc0xpbmUoY29vcmRpbmF0ZXNbaV0sIHBvaW50KSkgcmV0dXJuIHRydWU7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBQb2x5Z29uOiBmdW5jdGlvbihvYmplY3QsIHBvaW50KSB7XG4gICAgcmV0dXJuIGNvbnRhaW5zUG9seWdvbihvYmplY3QuY29vcmRpbmF0ZXMsIHBvaW50KTtcbiAgfSxcbiAgTXVsdGlQb2x5Z29uOiBmdW5jdGlvbihvYmplY3QsIHBvaW50KSB7XG4gICAgdmFyIGNvb3JkaW5hdGVzID0gb2JqZWN0LmNvb3JkaW5hdGVzLCBpID0gLTEsIG4gPSBjb29yZGluYXRlcy5sZW5ndGg7XG4gICAgd2hpbGUgKCsraSA8IG4pIGlmIChjb250YWluc1BvbHlnb24oY29vcmRpbmF0ZXNbaV0sIHBvaW50KSkgcmV0dXJuIHRydWU7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBHZW9tZXRyeUNvbGxlY3Rpb246IGZ1bmN0aW9uKG9iamVjdCwgcG9pbnQpIHtcbiAgICB2YXIgZ2VvbWV0cmllcyA9IG9iamVjdC5nZW9tZXRyaWVzLCBpID0gLTEsIG4gPSBnZW9tZXRyaWVzLmxlbmd0aDtcbiAgICB3aGlsZSAoKytpIDwgbikgaWYgKGNvbnRhaW5zR2VvbWV0cnkoZ2VvbWV0cmllc1tpXSwgcG9pbnQpKSByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGNvbnRhaW5zR2VvbWV0cnkoZ2VvbWV0cnksIHBvaW50KSB7XG4gIHJldHVybiBnZW9tZXRyeSAmJiBjb250YWluc0dlb21ldHJ5VHlwZS5oYXNPd25Qcm9wZXJ0eShnZW9tZXRyeS50eXBlKVxuICAgICAgPyBjb250YWluc0dlb21ldHJ5VHlwZVtnZW9tZXRyeS50eXBlXShnZW9tZXRyeSwgcG9pbnQpXG4gICAgICA6IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBjb250YWluc1BvaW50KGNvb3JkaW5hdGVzLCBwb2ludCkge1xuICByZXR1cm4gZGlzdGFuY2UoY29vcmRpbmF0ZXMsIHBvaW50KSA9PT0gMDtcbn1cblxuZnVuY3Rpb24gY29udGFpbnNMaW5lKGNvb3JkaW5hdGVzLCBwb2ludCkge1xuICB2YXIgYW8sIGJvLCBhYjtcbiAgZm9yICh2YXIgaSA9IDAsIG4gPSBjb29yZGluYXRlcy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICBibyA9IGRpc3RhbmNlKGNvb3JkaW5hdGVzW2ldLCBwb2ludCk7XG4gICAgaWYgKGJvID09PSAwKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaSA+IDApIHtcbiAgICAgIGFiID0gZGlzdGFuY2UoY29vcmRpbmF0ZXNbaV0sIGNvb3JkaW5hdGVzW2kgLSAxXSk7XG4gICAgICBpZiAoXG4gICAgICAgIGFiID4gMCAmJlxuICAgICAgICBhbyA8PSBhYiAmJlxuICAgICAgICBibyA8PSBhYiAmJlxuICAgICAgICAoYW8gKyBibyAtIGFiKSAqICgxIC0gTWF0aC5wb3coKGFvIC0gYm8pIC8gYWIsIDIpKSA8IGVwc2lsb24yICogYWJcbiAgICAgIClcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGFvID0gYm87XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBjb250YWluc1BvbHlnb24oY29vcmRpbmF0ZXMsIHBvaW50KSB7XG4gIHJldHVybiAhIXBvbHlnb25Db250YWlucyhjb29yZGluYXRlcy5tYXAocmluZ1JhZGlhbnMpLCBwb2ludFJhZGlhbnMocG9pbnQpKTtcbn1cblxuZnVuY3Rpb24gcmluZ1JhZGlhbnMocmluZykge1xuICByZXR1cm4gcmluZyA9IHJpbmcubWFwKHBvaW50UmFkaWFucyksIHJpbmcucG9wKCksIHJpbmc7XG59XG5cbmZ1bmN0aW9uIHBvaW50UmFkaWFucyhwb2ludCkge1xuICByZXR1cm4gW3BvaW50WzBdICogcmFkaWFucywgcG9pbnRbMV0gKiByYWRpYW5zXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24ob2JqZWN0LCBwb2ludCkge1xuICByZXR1cm4gKG9iamVjdCAmJiBjb250YWluc09iamVjdFR5cGUuaGFzT3duUHJvcGVydHkob2JqZWN0LnR5cGUpXG4gICAgICA/IGNvbnRhaW5zT2JqZWN0VHlwZVtvYmplY3QudHlwZV1cbiAgICAgIDogY29udGFpbnNHZW9tZXRyeSkob2JqZWN0LCBwb2ludCk7XG59XG4iLCJpbXBvcnQgbGVuZ3RoIGZyb20gXCIuL2xlbmd0aC5qc1wiO1xuXG52YXIgY29vcmRpbmF0ZXMgPSBbbnVsbCwgbnVsbF0sXG4gICAgb2JqZWN0ID0ge3R5cGU6IFwiTGluZVN0cmluZ1wiLCBjb29yZGluYXRlczogY29vcmRpbmF0ZXN9O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIGNvb3JkaW5hdGVzWzBdID0gYTtcbiAgY29vcmRpbmF0ZXNbMV0gPSBiO1xuICByZXR1cm4gbGVuZ3RoKG9iamVjdCk7XG59XG4iLCJpbXBvcnQge3JhbmdlfSBmcm9tIFwiZDMtYXJyYXlcIjtcbmltcG9ydCB7YWJzLCBjZWlsLCBlcHNpbG9ufSBmcm9tIFwiLi9tYXRoLmpzXCI7XG5cbmZ1bmN0aW9uIGdyYXRpY3VsZVgoeTAsIHkxLCBkeSkge1xuICB2YXIgeSA9IHJhbmdlKHkwLCB5MSAtIGVwc2lsb24sIGR5KS5jb25jYXQoeTEpO1xuICByZXR1cm4gZnVuY3Rpb24oeCkgeyByZXR1cm4geS5tYXAoZnVuY3Rpb24oeSkgeyByZXR1cm4gW3gsIHldOyB9KTsgfTtcbn1cblxuZnVuY3Rpb24gZ3JhdGljdWxlWSh4MCwgeDEsIGR4KSB7XG4gIHZhciB4ID0gcmFuZ2UoeDAsIHgxIC0gZXBzaWxvbiwgZHgpLmNvbmNhdCh4MSk7XG4gIHJldHVybiBmdW5jdGlvbih5KSB7IHJldHVybiB4Lm1hcChmdW5jdGlvbih4KSB7IHJldHVybiBbeCwgeV07IH0pOyB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBncmF0aWN1bGUoKSB7XG4gIHZhciB4MSwgeDAsIFgxLCBYMCxcbiAgICAgIHkxLCB5MCwgWTEsIFkwLFxuICAgICAgZHggPSAxMCwgZHkgPSBkeCwgRFggPSA5MCwgRFkgPSAzNjAsXG4gICAgICB4LCB5LCBYLCBZLFxuICAgICAgcHJlY2lzaW9uID0gMi41O1xuXG4gIGZ1bmN0aW9uIGdyYXRpY3VsZSgpIHtcbiAgICByZXR1cm4ge3R5cGU6IFwiTXVsdGlMaW5lU3RyaW5nXCIsIGNvb3JkaW5hdGVzOiBsaW5lcygpfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGxpbmVzKCkge1xuICAgIHJldHVybiByYW5nZShjZWlsKFgwIC8gRFgpICogRFgsIFgxLCBEWCkubWFwKFgpXG4gICAgICAgIC5jb25jYXQocmFuZ2UoY2VpbChZMCAvIERZKSAqIERZLCBZMSwgRFkpLm1hcChZKSlcbiAgICAgICAgLmNvbmNhdChyYW5nZShjZWlsKHgwIC8gZHgpICogZHgsIHgxLCBkeCkuZmlsdGVyKGZ1bmN0aW9uKHgpIHsgcmV0dXJuIGFicyh4ICUgRFgpID4gZXBzaWxvbjsgfSkubWFwKHgpKVxuICAgICAgICAuY29uY2F0KHJhbmdlKGNlaWwoeTAgLyBkeSkgKiBkeSwgeTEsIGR5KS5maWx0ZXIoZnVuY3Rpb24oeSkgeyByZXR1cm4gYWJzKHkgJSBEWSkgPiBlcHNpbG9uOyB9KS5tYXAoeSkpO1xuICB9XG5cbiAgZ3JhdGljdWxlLmxpbmVzID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGxpbmVzKCkubWFwKGZ1bmN0aW9uKGNvb3JkaW5hdGVzKSB7IHJldHVybiB7dHlwZTogXCJMaW5lU3RyaW5nXCIsIGNvb3JkaW5hdGVzOiBjb29yZGluYXRlc307IH0pO1xuICB9O1xuXG4gIGdyYXRpY3VsZS5vdXRsaW5lID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiUG9seWdvblwiLFxuICAgICAgY29vcmRpbmF0ZXM6IFtcbiAgICAgICAgWChYMCkuY29uY2F0KFxuICAgICAgICBZKFkxKS5zbGljZSgxKSxcbiAgICAgICAgWChYMSkucmV2ZXJzZSgpLnNsaWNlKDEpLFxuICAgICAgICBZKFkwKS5yZXZlcnNlKCkuc2xpY2UoMSkpXG4gICAgICBdXG4gICAgfTtcbiAgfTtcblxuICBncmF0aWN1bGUuZXh0ZW50ID0gZnVuY3Rpb24oXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGdyYXRpY3VsZS5leHRlbnRNaW5vcigpO1xuICAgIHJldHVybiBncmF0aWN1bGUuZXh0ZW50TWFqb3IoXykuZXh0ZW50TWlub3IoXyk7XG4gIH07XG5cbiAgZ3JhdGljdWxlLmV4dGVudE1ham9yID0gZnVuY3Rpb24oXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIFtbWDAsIFkwXSwgW1gxLCBZMV1dO1xuICAgIFgwID0gK19bMF1bMF0sIFgxID0gK19bMV1bMF07XG4gICAgWTAgPSArX1swXVsxXSwgWTEgPSArX1sxXVsxXTtcbiAgICBpZiAoWDAgPiBYMSkgXyA9IFgwLCBYMCA9IFgxLCBYMSA9IF87XG4gICAgaWYgKFkwID4gWTEpIF8gPSBZMCwgWTAgPSBZMSwgWTEgPSBfO1xuICAgIHJldHVybiBncmF0aWN1bGUucHJlY2lzaW9uKHByZWNpc2lvbik7XG4gIH07XG5cbiAgZ3JhdGljdWxlLmV4dGVudE1pbm9yID0gZnVuY3Rpb24oXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIFtbeDAsIHkwXSwgW3gxLCB5MV1dO1xuICAgIHgwID0gK19bMF1bMF0sIHgxID0gK19bMV1bMF07XG4gICAgeTAgPSArX1swXVsxXSwgeTEgPSArX1sxXVsxXTtcbiAgICBpZiAoeDAgPiB4MSkgXyA9IHgwLCB4MCA9IHgxLCB4MSA9IF87XG4gICAgaWYgKHkwID4geTEpIF8gPSB5MCwgeTAgPSB5MSwgeTEgPSBfO1xuICAgIHJldHVybiBncmF0aWN1bGUucHJlY2lzaW9uKHByZWNpc2lvbik7XG4gIH07XG5cbiAgZ3JhdGljdWxlLnN0ZXAgPSBmdW5jdGlvbihfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gZ3JhdGljdWxlLnN0ZXBNaW5vcigpO1xuICAgIHJldHVybiBncmF0aWN1bGUuc3RlcE1ham9yKF8pLnN0ZXBNaW5vcihfKTtcbiAgfTtcblxuICBncmF0aWN1bGUuc3RlcE1ham9yID0gZnVuY3Rpb24oXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIFtEWCwgRFldO1xuICAgIERYID0gK19bMF0sIERZID0gK19bMV07XG4gICAgcmV0dXJuIGdyYXRpY3VsZTtcbiAgfTtcblxuICBncmF0aWN1bGUuc3RlcE1pbm9yID0gZnVuY3Rpb24oXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIFtkeCwgZHldO1xuICAgIGR4ID0gK19bMF0sIGR5ID0gK19bMV07XG4gICAgcmV0dXJuIGdyYXRpY3VsZTtcbiAgfTtcblxuICBncmF0aWN1bGUucHJlY2lzaW9uID0gZnVuY3Rpb24oXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIHByZWNpc2lvbjtcbiAgICBwcmVjaXNpb24gPSArXztcbiAgICB4ID0gZ3JhdGljdWxlWCh5MCwgeTEsIDkwKTtcbiAgICB5ID0gZ3JhdGljdWxlWSh4MCwgeDEsIHByZWNpc2lvbik7XG4gICAgWCA9IGdyYXRpY3VsZVgoWTAsIFkxLCA5MCk7XG4gICAgWSA9IGdyYXRpY3VsZVkoWDAsIFgxLCBwcmVjaXNpb24pO1xuICAgIHJldHVybiBncmF0aWN1bGU7XG4gIH07XG5cbiAgcmV0dXJuIGdyYXRpY3VsZVxuICAgICAgLmV4dGVudE1ham9yKFtbLTE4MCwgLTkwICsgZXBzaWxvbl0sIFsxODAsIDkwIC0gZXBzaWxvbl1dKVxuICAgICAgLmV4dGVudE1pbm9yKFtbLTE4MCwgLTgwIC0gZXBzaWxvbl0sIFsxODAsIDgwICsgZXBzaWxvbl1dKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdyYXRpY3VsZTEwKCkge1xuICByZXR1cm4gZ3JhdGljdWxlKCkoKTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIHg7XG59XG4iLCJleHBvcnQge2RlZmF1bHQgYXMgZ2VvQXJlYX0gZnJvbSBcIi4vYXJlYS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGdlb0JvdW5kc30gZnJvbSBcIi4vYm91bmRzLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZ2VvQ2VudHJvaWR9IGZyb20gXCIuL2NlbnRyb2lkLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZ2VvQ2lyY2xlfSBmcm9tIFwiLi9jaXJjbGUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBnZW9DbGlwQW50aW1lcmlkaWFufSBmcm9tIFwiLi9jbGlwL2FudGltZXJpZGlhbi5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGdlb0NsaXBDaXJjbGV9IGZyb20gXCIuL2NsaXAvY2lyY2xlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZ2VvQ2xpcEV4dGVudH0gZnJvbSBcIi4vY2xpcC9leHRlbnQuanNcIjsgLy8gREVQUkVDQVRFRCEgVXNlIGQzLmdlb0lkZW50aXR5KCkuY2xpcEV4dGVudCjigKYpLlxuZXhwb3J0IHtkZWZhdWx0IGFzIGdlb0NsaXBSZWN0YW5nbGV9IGZyb20gXCIuL2NsaXAvcmVjdGFuZ2xlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZ2VvQ29udGFpbnN9IGZyb20gXCIuL2NvbnRhaW5zLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZ2VvRGlzdGFuY2V9IGZyb20gXCIuL2Rpc3RhbmNlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZ2VvR3JhdGljdWxlLCBncmF0aWN1bGUxMCBhcyBnZW9HcmF0aWN1bGUxMH0gZnJvbSBcIi4vZ3JhdGljdWxlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZ2VvSW50ZXJwb2xhdGV9IGZyb20gXCIuL2ludGVycG9sYXRlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZ2VvTGVuZ3RofSBmcm9tIFwiLi9sZW5ndGguanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBnZW9QYXRofSBmcm9tIFwiLi9wYXRoL2luZGV4LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZ2VvQWxiZXJzfSBmcm9tIFwiLi9wcm9qZWN0aW9uL2FsYmVycy5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGdlb0FsYmVyc1VzYX0gZnJvbSBcIi4vcHJvamVjdGlvbi9hbGJlcnNVc2EuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBnZW9BemltdXRoYWxFcXVhbEFyZWEsIGF6aW11dGhhbEVxdWFsQXJlYVJhdyBhcyBnZW9BemltdXRoYWxFcXVhbEFyZWFSYXd9IGZyb20gXCIuL3Byb2plY3Rpb24vYXppbXV0aGFsRXF1YWxBcmVhLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZ2VvQXppbXV0aGFsRXF1aWRpc3RhbnQsIGF6aW11dGhhbEVxdWlkaXN0YW50UmF3IGFzIGdlb0F6aW11dGhhbEVxdWlkaXN0YW50UmF3fSBmcm9tIFwiLi9wcm9qZWN0aW9uL2F6aW11dGhhbEVxdWlkaXN0YW50LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZ2VvQ29uaWNDb25mb3JtYWwsIGNvbmljQ29uZm9ybWFsUmF3IGFzIGdlb0NvbmljQ29uZm9ybWFsUmF3fSBmcm9tIFwiLi9wcm9qZWN0aW9uL2NvbmljQ29uZm9ybWFsLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZ2VvQ29uaWNFcXVhbEFyZWEsIGNvbmljRXF1YWxBcmVhUmF3IGFzIGdlb0NvbmljRXF1YWxBcmVhUmF3fSBmcm9tIFwiLi9wcm9qZWN0aW9uL2NvbmljRXF1YWxBcmVhLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZ2VvQ29uaWNFcXVpZGlzdGFudCwgY29uaWNFcXVpZGlzdGFudFJhdyBhcyBnZW9Db25pY0VxdWlkaXN0YW50UmF3fSBmcm9tIFwiLi9wcm9qZWN0aW9uL2NvbmljRXF1aWRpc3RhbnQuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBnZW9FcXVhbEVhcnRoLCBlcXVhbEVhcnRoUmF3IGFzIGdlb0VxdWFsRWFydGhSYXd9IGZyb20gXCIuL3Byb2plY3Rpb24vZXF1YWxFYXJ0aC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGdlb0VxdWlyZWN0YW5ndWxhciwgZXF1aXJlY3Rhbmd1bGFyUmF3IGFzIGdlb0VxdWlyZWN0YW5ndWxhclJhd30gZnJvbSBcIi4vcHJvamVjdGlvbi9lcXVpcmVjdGFuZ3VsYXIuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBnZW9Hbm9tb25pYywgZ25vbW9uaWNSYXcgYXMgZ2VvR25vbW9uaWNSYXd9IGZyb20gXCIuL3Byb2plY3Rpb24vZ25vbW9uaWMuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBnZW9JZGVudGl0eX0gZnJvbSBcIi4vcHJvamVjdGlvbi9pZGVudGl0eS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGdlb1Byb2plY3Rpb24sIHByb2plY3Rpb25NdXRhdG9yIGFzIGdlb1Byb2plY3Rpb25NdXRhdG9yfSBmcm9tIFwiLi9wcm9qZWN0aW9uL2luZGV4LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZ2VvTWVyY2F0b3IsIG1lcmNhdG9yUmF3IGFzIGdlb01lcmNhdG9yUmF3fSBmcm9tIFwiLi9wcm9qZWN0aW9uL21lcmNhdG9yLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZ2VvTmF0dXJhbEVhcnRoMSwgbmF0dXJhbEVhcnRoMVJhdyBhcyBnZW9OYXR1cmFsRWFydGgxUmF3fSBmcm9tIFwiLi9wcm9qZWN0aW9uL25hdHVyYWxFYXJ0aDEuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBnZW9PcnRob2dyYXBoaWMsIG9ydGhvZ3JhcGhpY1JhdyBhcyBnZW9PcnRob2dyYXBoaWNSYXd9IGZyb20gXCIuL3Byb2plY3Rpb24vb3J0aG9ncmFwaGljLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZ2VvU3RlcmVvZ3JhcGhpYywgc3RlcmVvZ3JhcGhpY1JhdyBhcyBnZW9TdGVyZW9ncmFwaGljUmF3fSBmcm9tIFwiLi9wcm9qZWN0aW9uL3N0ZXJlb2dyYXBoaWMuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBnZW9UcmFuc3ZlcnNlTWVyY2F0b3IsIHRyYW5zdmVyc2VNZXJjYXRvclJhdyBhcyBnZW9UcmFuc3ZlcnNlTWVyY2F0b3JSYXd9IGZyb20gXCIuL3Byb2plY3Rpb24vdHJhbnN2ZXJzZU1lcmNhdG9yLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZ2VvUm90YXRpb259IGZyb20gXCIuL3JvdGF0aW9uLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZ2VvU3RyZWFtfSBmcm9tIFwiLi9zdHJlYW0uanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBnZW9UcmFuc2Zvcm19IGZyb20gXCIuL3RyYW5zZm9ybS5qc1wiO1xuIiwiaW1wb3J0IHthc2luLCBhdGFuMiwgY29zLCBkZWdyZWVzLCBoYXZlcnNpbiwgcmFkaWFucywgc2luLCBzcXJ0fSBmcm9tIFwiLi9tYXRoLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgdmFyIHgwID0gYVswXSAqIHJhZGlhbnMsXG4gICAgICB5MCA9IGFbMV0gKiByYWRpYW5zLFxuICAgICAgeDEgPSBiWzBdICogcmFkaWFucyxcbiAgICAgIHkxID0gYlsxXSAqIHJhZGlhbnMsXG4gICAgICBjeTAgPSBjb3MoeTApLFxuICAgICAgc3kwID0gc2luKHkwKSxcbiAgICAgIGN5MSA9IGNvcyh5MSksXG4gICAgICBzeTEgPSBzaW4oeTEpLFxuICAgICAga3gwID0gY3kwICogY29zKHgwKSxcbiAgICAgIGt5MCA9IGN5MCAqIHNpbih4MCksXG4gICAgICBreDEgPSBjeTEgKiBjb3MoeDEpLFxuICAgICAga3kxID0gY3kxICogc2luKHgxKSxcbiAgICAgIGQgPSAyICogYXNpbihzcXJ0KGhhdmVyc2luKHkxIC0geTApICsgY3kwICogY3kxICogaGF2ZXJzaW4oeDEgLSB4MCkpKSxcbiAgICAgIGsgPSBzaW4oZCk7XG5cbiAgdmFyIGludGVycG9sYXRlID0gZCA/IGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgQiA9IHNpbih0ICo9IGQpIC8gayxcbiAgICAgICAgQSA9IHNpbihkIC0gdCkgLyBrLFxuICAgICAgICB4ID0gQSAqIGt4MCArIEIgKiBreDEsXG4gICAgICAgIHkgPSBBICoga3kwICsgQiAqIGt5MSxcbiAgICAgICAgeiA9IEEgKiBzeTAgKyBCICogc3kxO1xuICAgIHJldHVybiBbXG4gICAgICBhdGFuMih5LCB4KSAqIGRlZ3JlZXMsXG4gICAgICBhdGFuMih6LCBzcXJ0KHggKiB4ICsgeSAqIHkpKSAqIGRlZ3JlZXNcbiAgICBdO1xuICB9IDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFt4MCAqIGRlZ3JlZXMsIHkwICogZGVncmVlc107XG4gIH07XG5cbiAgaW50ZXJwb2xhdGUuZGlzdGFuY2UgPSBkO1xuXG4gIHJldHVybiBpbnRlcnBvbGF0ZTtcbn1cbiIsImltcG9ydCBhZGRlciBmcm9tIFwiLi9hZGRlci5qc1wiO1xuaW1wb3J0IHthYnMsIGF0YW4yLCBjb3MsIHJhZGlhbnMsIHNpbiwgc3FydH0gZnJvbSBcIi4vbWF0aC5qc1wiO1xuaW1wb3J0IG5vb3AgZnJvbSBcIi4vbm9vcC5qc1wiO1xuaW1wb3J0IHN0cmVhbSBmcm9tIFwiLi9zdHJlYW0uanNcIjtcblxudmFyIGxlbmd0aFN1bSA9IGFkZGVyKCksXG4gICAgbGFtYmRhMCxcbiAgICBzaW5QaGkwLFxuICAgIGNvc1BoaTA7XG5cbnZhciBsZW5ndGhTdHJlYW0gPSB7XG4gIHNwaGVyZTogbm9vcCxcbiAgcG9pbnQ6IG5vb3AsXG4gIGxpbmVTdGFydDogbGVuZ3RoTGluZVN0YXJ0LFxuICBsaW5lRW5kOiBub29wLFxuICBwb2x5Z29uU3RhcnQ6IG5vb3AsXG4gIHBvbHlnb25FbmQ6IG5vb3Bcbn07XG5cbmZ1bmN0aW9uIGxlbmd0aExpbmVTdGFydCgpIHtcbiAgbGVuZ3RoU3RyZWFtLnBvaW50ID0gbGVuZ3RoUG9pbnRGaXJzdDtcbiAgbGVuZ3RoU3RyZWFtLmxpbmVFbmQgPSBsZW5ndGhMaW5lRW5kO1xufVxuXG5mdW5jdGlvbiBsZW5ndGhMaW5lRW5kKCkge1xuICBsZW5ndGhTdHJlYW0ucG9pbnQgPSBsZW5ndGhTdHJlYW0ubGluZUVuZCA9IG5vb3A7XG59XG5cbmZ1bmN0aW9uIGxlbmd0aFBvaW50Rmlyc3QobGFtYmRhLCBwaGkpIHtcbiAgbGFtYmRhICo9IHJhZGlhbnMsIHBoaSAqPSByYWRpYW5zO1xuICBsYW1iZGEwID0gbGFtYmRhLCBzaW5QaGkwID0gc2luKHBoaSksIGNvc1BoaTAgPSBjb3MocGhpKTtcbiAgbGVuZ3RoU3RyZWFtLnBvaW50ID0gbGVuZ3RoUG9pbnQ7XG59XG5cbmZ1bmN0aW9uIGxlbmd0aFBvaW50KGxhbWJkYSwgcGhpKSB7XG4gIGxhbWJkYSAqPSByYWRpYW5zLCBwaGkgKj0gcmFkaWFucztcbiAgdmFyIHNpblBoaSA9IHNpbihwaGkpLFxuICAgICAgY29zUGhpID0gY29zKHBoaSksXG4gICAgICBkZWx0YSA9IGFicyhsYW1iZGEgLSBsYW1iZGEwKSxcbiAgICAgIGNvc0RlbHRhID0gY29zKGRlbHRhKSxcbiAgICAgIHNpbkRlbHRhID0gc2luKGRlbHRhKSxcbiAgICAgIHggPSBjb3NQaGkgKiBzaW5EZWx0YSxcbiAgICAgIHkgPSBjb3NQaGkwICogc2luUGhpIC0gc2luUGhpMCAqIGNvc1BoaSAqIGNvc0RlbHRhLFxuICAgICAgeiA9IHNpblBoaTAgKiBzaW5QaGkgKyBjb3NQaGkwICogY29zUGhpICogY29zRGVsdGE7XG4gIGxlbmd0aFN1bS5hZGQoYXRhbjIoc3FydCh4ICogeCArIHkgKiB5KSwgeikpO1xuICBsYW1iZGEwID0gbGFtYmRhLCBzaW5QaGkwID0gc2luUGhpLCBjb3NQaGkwID0gY29zUGhpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihvYmplY3QpIHtcbiAgbGVuZ3RoU3VtLnJlc2V0KCk7XG4gIHN0cmVhbShvYmplY3QsIGxlbmd0aFN0cmVhbSk7XG4gIHJldHVybiArbGVuZ3RoU3VtO1xufVxuIiwiZXhwb3J0IHZhciBlcHNpbG9uID0gMWUtNjtcbmV4cG9ydCB2YXIgZXBzaWxvbjIgPSAxZS0xMjtcbmV4cG9ydCB2YXIgcGkgPSBNYXRoLlBJO1xuZXhwb3J0IHZhciBoYWxmUGkgPSBwaSAvIDI7XG5leHBvcnQgdmFyIHF1YXJ0ZXJQaSA9IHBpIC8gNDtcbmV4cG9ydCB2YXIgdGF1ID0gcGkgKiAyO1xuXG5leHBvcnQgdmFyIGRlZ3JlZXMgPSAxODAgLyBwaTtcbmV4cG9ydCB2YXIgcmFkaWFucyA9IHBpIC8gMTgwO1xuXG5leHBvcnQgdmFyIGFicyA9IE1hdGguYWJzO1xuZXhwb3J0IHZhciBhdGFuID0gTWF0aC5hdGFuO1xuZXhwb3J0IHZhciBhdGFuMiA9IE1hdGguYXRhbjI7XG5leHBvcnQgdmFyIGNvcyA9IE1hdGguY29zO1xuZXhwb3J0IHZhciBjZWlsID0gTWF0aC5jZWlsO1xuZXhwb3J0IHZhciBleHAgPSBNYXRoLmV4cDtcbmV4cG9ydCB2YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xuZXhwb3J0IHZhciBsb2cgPSBNYXRoLmxvZztcbmV4cG9ydCB2YXIgcG93ID0gTWF0aC5wb3c7XG5leHBvcnQgdmFyIHNpbiA9IE1hdGguc2luO1xuZXhwb3J0IHZhciBzaWduID0gTWF0aC5zaWduIHx8IGZ1bmN0aW9uKHgpIHsgcmV0dXJuIHggPiAwID8gMSA6IHggPCAwID8gLTEgOiAwOyB9O1xuZXhwb3J0IHZhciBzcXJ0ID0gTWF0aC5zcXJ0O1xuZXhwb3J0IHZhciB0YW4gPSBNYXRoLnRhbjtcblxuZXhwb3J0IGZ1bmN0aW9uIGFjb3MoeCkge1xuICByZXR1cm4geCA+IDEgPyAwIDogeCA8IC0xID8gcGkgOiBNYXRoLmFjb3MoeCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc2luKHgpIHtcbiAgcmV0dXJuIHggPiAxID8gaGFsZlBpIDogeCA8IC0xID8gLWhhbGZQaSA6IE1hdGguYXNpbih4KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhdmVyc2luKHgpIHtcbiAgcmV0dXJuICh4ID0gc2luKHggLyAyKSkgKiB4O1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbm9vcCgpIHt9XG4iLCJpbXBvcnQgYWRkZXIgZnJvbSBcIi4uL2FkZGVyLmpzXCI7XG5pbXBvcnQge2Fic30gZnJvbSBcIi4uL21hdGguanNcIjtcbmltcG9ydCBub29wIGZyb20gXCIuLi9ub29wLmpzXCI7XG5cbnZhciBhcmVhU3VtID0gYWRkZXIoKSxcbiAgICBhcmVhUmluZ1N1bSA9IGFkZGVyKCksXG4gICAgeDAwLFxuICAgIHkwMCxcbiAgICB4MCxcbiAgICB5MDtcblxudmFyIGFyZWFTdHJlYW0gPSB7XG4gIHBvaW50OiBub29wLFxuICBsaW5lU3RhcnQ6IG5vb3AsXG4gIGxpbmVFbmQ6IG5vb3AsXG4gIHBvbHlnb25TdGFydDogZnVuY3Rpb24oKSB7XG4gICAgYXJlYVN0cmVhbS5saW5lU3RhcnQgPSBhcmVhUmluZ1N0YXJ0O1xuICAgIGFyZWFTdHJlYW0ubGluZUVuZCA9IGFyZWFSaW5nRW5kO1xuICB9LFxuICBwb2x5Z29uRW5kOiBmdW5jdGlvbigpIHtcbiAgICBhcmVhU3RyZWFtLmxpbmVTdGFydCA9IGFyZWFTdHJlYW0ubGluZUVuZCA9IGFyZWFTdHJlYW0ucG9pbnQgPSBub29wO1xuICAgIGFyZWFTdW0uYWRkKGFicyhhcmVhUmluZ1N1bSkpO1xuICAgIGFyZWFSaW5nU3VtLnJlc2V0KCk7XG4gIH0sXG4gIHJlc3VsdDogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZWEgPSBhcmVhU3VtIC8gMjtcbiAgICBhcmVhU3VtLnJlc2V0KCk7XG4gICAgcmV0dXJuIGFyZWE7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGFyZWFSaW5nU3RhcnQoKSB7XG4gIGFyZWFTdHJlYW0ucG9pbnQgPSBhcmVhUG9pbnRGaXJzdDtcbn1cblxuZnVuY3Rpb24gYXJlYVBvaW50Rmlyc3QoeCwgeSkge1xuICBhcmVhU3RyZWFtLnBvaW50ID0gYXJlYVBvaW50O1xuICB4MDAgPSB4MCA9IHgsIHkwMCA9IHkwID0geTtcbn1cblxuZnVuY3Rpb24gYXJlYVBvaW50KHgsIHkpIHtcbiAgYXJlYVJpbmdTdW0uYWRkKHkwICogeCAtIHgwICogeSk7XG4gIHgwID0geCwgeTAgPSB5O1xufVxuXG5mdW5jdGlvbiBhcmVhUmluZ0VuZCgpIHtcbiAgYXJlYVBvaW50KHgwMCwgeTAwKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYXJlYVN0cmVhbTtcbiIsImltcG9ydCBub29wIGZyb20gXCIuLi9ub29wLmpzXCI7XG5cbnZhciB4MCA9IEluZmluaXR5LFxuICAgIHkwID0geDAsXG4gICAgeDEgPSAteDAsXG4gICAgeTEgPSB4MTtcblxudmFyIGJvdW5kc1N0cmVhbSA9IHtcbiAgcG9pbnQ6IGJvdW5kc1BvaW50LFxuICBsaW5lU3RhcnQ6IG5vb3AsXG4gIGxpbmVFbmQ6IG5vb3AsXG4gIHBvbHlnb25TdGFydDogbm9vcCxcbiAgcG9seWdvbkVuZDogbm9vcCxcbiAgcmVzdWx0OiBmdW5jdGlvbigpIHtcbiAgICB2YXIgYm91bmRzID0gW1t4MCwgeTBdLCBbeDEsIHkxXV07XG4gICAgeDEgPSB5MSA9IC0oeTAgPSB4MCA9IEluZmluaXR5KTtcbiAgICByZXR1cm4gYm91bmRzO1xuICB9XG59O1xuXG5mdW5jdGlvbiBib3VuZHNQb2ludCh4LCB5KSB7XG4gIGlmICh4IDwgeDApIHgwID0geDtcbiAgaWYgKHggPiB4MSkgeDEgPSB4O1xuICBpZiAoeSA8IHkwKSB5MCA9IHk7XG4gIGlmICh5ID4geTEpIHkxID0geTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYm91bmRzU3RyZWFtO1xuIiwiaW1wb3J0IHtzcXJ0fSBmcm9tIFwiLi4vbWF0aC5qc1wiO1xuXG4vLyBUT0RPIEVuZm9yY2UgcG9zaXRpdmUgYXJlYSBmb3IgZXh0ZXJpb3IsIG5lZ2F0aXZlIGFyZWEgZm9yIGludGVyaW9yP1xuXG52YXIgWDAgPSAwLFxuICAgIFkwID0gMCxcbiAgICBaMCA9IDAsXG4gICAgWDEgPSAwLFxuICAgIFkxID0gMCxcbiAgICBaMSA9IDAsXG4gICAgWDIgPSAwLFxuICAgIFkyID0gMCxcbiAgICBaMiA9IDAsXG4gICAgeDAwLFxuICAgIHkwMCxcbiAgICB4MCxcbiAgICB5MDtcblxudmFyIGNlbnRyb2lkU3RyZWFtID0ge1xuICBwb2ludDogY2VudHJvaWRQb2ludCxcbiAgbGluZVN0YXJ0OiBjZW50cm9pZExpbmVTdGFydCxcbiAgbGluZUVuZDogY2VudHJvaWRMaW5lRW5kLFxuICBwb2x5Z29uU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIGNlbnRyb2lkU3RyZWFtLmxpbmVTdGFydCA9IGNlbnRyb2lkUmluZ1N0YXJ0O1xuICAgIGNlbnRyb2lkU3RyZWFtLmxpbmVFbmQgPSBjZW50cm9pZFJpbmdFbmQ7XG4gIH0sXG4gIHBvbHlnb25FbmQ6IGZ1bmN0aW9uKCkge1xuICAgIGNlbnRyb2lkU3RyZWFtLnBvaW50ID0gY2VudHJvaWRQb2ludDtcbiAgICBjZW50cm9pZFN0cmVhbS5saW5lU3RhcnQgPSBjZW50cm9pZExpbmVTdGFydDtcbiAgICBjZW50cm9pZFN0cmVhbS5saW5lRW5kID0gY2VudHJvaWRMaW5lRW5kO1xuICB9LFxuICByZXN1bHQ6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBjZW50cm9pZCA9IFoyID8gW1gyIC8gWjIsIFkyIC8gWjJdXG4gICAgICAgIDogWjEgPyBbWDEgLyBaMSwgWTEgLyBaMV1cbiAgICAgICAgOiBaMCA/IFtYMCAvIFowLCBZMCAvIFowXVxuICAgICAgICA6IFtOYU4sIE5hTl07XG4gICAgWDAgPSBZMCA9IFowID1cbiAgICBYMSA9IFkxID0gWjEgPVxuICAgIFgyID0gWTIgPSBaMiA9IDA7XG4gICAgcmV0dXJuIGNlbnRyb2lkO1xuICB9XG59O1xuXG5mdW5jdGlvbiBjZW50cm9pZFBvaW50KHgsIHkpIHtcbiAgWDAgKz0geDtcbiAgWTAgKz0geTtcbiAgKytaMDtcbn1cblxuZnVuY3Rpb24gY2VudHJvaWRMaW5lU3RhcnQoKSB7XG4gIGNlbnRyb2lkU3RyZWFtLnBvaW50ID0gY2VudHJvaWRQb2ludEZpcnN0TGluZTtcbn1cblxuZnVuY3Rpb24gY2VudHJvaWRQb2ludEZpcnN0TGluZSh4LCB5KSB7XG4gIGNlbnRyb2lkU3RyZWFtLnBvaW50ID0gY2VudHJvaWRQb2ludExpbmU7XG4gIGNlbnRyb2lkUG9pbnQoeDAgPSB4LCB5MCA9IHkpO1xufVxuXG5mdW5jdGlvbiBjZW50cm9pZFBvaW50TGluZSh4LCB5KSB7XG4gIHZhciBkeCA9IHggLSB4MCwgZHkgPSB5IC0geTAsIHogPSBzcXJ0KGR4ICogZHggKyBkeSAqIGR5KTtcbiAgWDEgKz0geiAqICh4MCArIHgpIC8gMjtcbiAgWTEgKz0geiAqICh5MCArIHkpIC8gMjtcbiAgWjEgKz0gejtcbiAgY2VudHJvaWRQb2ludCh4MCA9IHgsIHkwID0geSk7XG59XG5cbmZ1bmN0aW9uIGNlbnRyb2lkTGluZUVuZCgpIHtcbiAgY2VudHJvaWRTdHJlYW0ucG9pbnQgPSBjZW50cm9pZFBvaW50O1xufVxuXG5mdW5jdGlvbiBjZW50cm9pZFJpbmdTdGFydCgpIHtcbiAgY2VudHJvaWRTdHJlYW0ucG9pbnQgPSBjZW50cm9pZFBvaW50Rmlyc3RSaW5nO1xufVxuXG5mdW5jdGlvbiBjZW50cm9pZFJpbmdFbmQoKSB7XG4gIGNlbnRyb2lkUG9pbnRSaW5nKHgwMCwgeTAwKTtcbn1cblxuZnVuY3Rpb24gY2VudHJvaWRQb2ludEZpcnN0UmluZyh4LCB5KSB7XG4gIGNlbnRyb2lkU3RyZWFtLnBvaW50ID0gY2VudHJvaWRQb2ludFJpbmc7XG4gIGNlbnRyb2lkUG9pbnQoeDAwID0geDAgPSB4LCB5MDAgPSB5MCA9IHkpO1xufVxuXG5mdW5jdGlvbiBjZW50cm9pZFBvaW50UmluZyh4LCB5KSB7XG4gIHZhciBkeCA9IHggLSB4MCxcbiAgICAgIGR5ID0geSAtIHkwLFxuICAgICAgeiA9IHNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xuXG4gIFgxICs9IHogKiAoeDAgKyB4KSAvIDI7XG4gIFkxICs9IHogKiAoeTAgKyB5KSAvIDI7XG4gIFoxICs9IHo7XG5cbiAgeiA9IHkwICogeCAtIHgwICogeTtcbiAgWDIgKz0geiAqICh4MCArIHgpO1xuICBZMiArPSB6ICogKHkwICsgeSk7XG4gIFoyICs9IHogKiAzO1xuICBjZW50cm9pZFBvaW50KHgwID0geCwgeTAgPSB5KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2VudHJvaWRTdHJlYW07XG4iLCJpbXBvcnQge3RhdX0gZnJvbSBcIi4uL21hdGguanNcIjtcbmltcG9ydCBub29wIGZyb20gXCIuLi9ub29wLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFBhdGhDb250ZXh0KGNvbnRleHQpIHtcbiAgdGhpcy5fY29udGV4dCA9IGNvbnRleHQ7XG59XG5cblBhdGhDb250ZXh0LnByb3RvdHlwZSA9IHtcbiAgX3JhZGl1czogNC41LFxuICBwb2ludFJhZGl1czogZnVuY3Rpb24oXykge1xuICAgIHJldHVybiB0aGlzLl9yYWRpdXMgPSBfLCB0aGlzO1xuICB9LFxuICBwb2x5Z29uU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xpbmUgPSAwO1xuICB9LFxuICBwb2x5Z29uRW5kOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9saW5lID0gTmFOO1xuICB9LFxuICBsaW5lU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX3BvaW50ID0gMDtcbiAgfSxcbiAgbGluZUVuZDogZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuX2xpbmUgPT09IDApIHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgdGhpcy5fcG9pbnQgPSBOYU47XG4gIH0sXG4gIHBvaW50OiBmdW5jdGlvbih4LCB5KSB7XG4gICAgc3dpdGNoICh0aGlzLl9wb2ludCkge1xuICAgICAgY2FzZSAwOiB7XG4gICAgICAgIHRoaXMuX2NvbnRleHQubW92ZVRvKHgsIHkpO1xuICAgICAgICB0aGlzLl9wb2ludCA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAxOiB7XG4gICAgICAgIHRoaXMuX2NvbnRleHQubGluZVRvKHgsIHkpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgdGhpcy5fY29udGV4dC5tb3ZlVG8oeCArIHRoaXMuX3JhZGl1cywgeSk7XG4gICAgICAgIHRoaXMuX2NvbnRleHQuYXJjKHgsIHksIHRoaXMuX3JhZGl1cywgMCwgdGF1KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICByZXN1bHQ6IG5vb3Bcbn07XG4iLCJpbXBvcnQgaWRlbnRpdHkgZnJvbSBcIi4uL2lkZW50aXR5LmpzXCI7XG5pbXBvcnQgc3RyZWFtIGZyb20gXCIuLi9zdHJlYW0uanNcIjtcbmltcG9ydCBwYXRoQXJlYSBmcm9tIFwiLi9hcmVhLmpzXCI7XG5pbXBvcnQgcGF0aEJvdW5kcyBmcm9tIFwiLi9ib3VuZHMuanNcIjtcbmltcG9ydCBwYXRoQ2VudHJvaWQgZnJvbSBcIi4vY2VudHJvaWQuanNcIjtcbmltcG9ydCBQYXRoQ29udGV4dCBmcm9tIFwiLi9jb250ZXh0LmpzXCI7XG5pbXBvcnQgcGF0aE1lYXN1cmUgZnJvbSBcIi4vbWVhc3VyZS5qc1wiO1xuaW1wb3J0IFBhdGhTdHJpbmcgZnJvbSBcIi4vc3RyaW5nLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHByb2plY3Rpb24sIGNvbnRleHQpIHtcbiAgdmFyIHBvaW50UmFkaXVzID0gNC41LFxuICAgICAgcHJvamVjdGlvblN0cmVhbSxcbiAgICAgIGNvbnRleHRTdHJlYW07XG5cbiAgZnVuY3Rpb24gcGF0aChvYmplY3QpIHtcbiAgICBpZiAob2JqZWN0KSB7XG4gICAgICBpZiAodHlwZW9mIHBvaW50UmFkaXVzID09PSBcImZ1bmN0aW9uXCIpIGNvbnRleHRTdHJlYW0ucG9pbnRSYWRpdXMoK3BvaW50UmFkaXVzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpO1xuICAgICAgc3RyZWFtKG9iamVjdCwgcHJvamVjdGlvblN0cmVhbShjb250ZXh0U3RyZWFtKSk7XG4gICAgfVxuICAgIHJldHVybiBjb250ZXh0U3RyZWFtLnJlc3VsdCgpO1xuICB9XG5cbiAgcGF0aC5hcmVhID0gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgc3RyZWFtKG9iamVjdCwgcHJvamVjdGlvblN0cmVhbShwYXRoQXJlYSkpO1xuICAgIHJldHVybiBwYXRoQXJlYS5yZXN1bHQoKTtcbiAgfTtcblxuICBwYXRoLm1lYXN1cmUgPSBmdW5jdGlvbihvYmplY3QpIHtcbiAgICBzdHJlYW0ob2JqZWN0LCBwcm9qZWN0aW9uU3RyZWFtKHBhdGhNZWFzdXJlKSk7XG4gICAgcmV0dXJuIHBhdGhNZWFzdXJlLnJlc3VsdCgpO1xuICB9O1xuXG4gIHBhdGguYm91bmRzID0gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgc3RyZWFtKG9iamVjdCwgcHJvamVjdGlvblN0cmVhbShwYXRoQm91bmRzKSk7XG4gICAgcmV0dXJuIHBhdGhCb3VuZHMucmVzdWx0KCk7XG4gIH07XG5cbiAgcGF0aC5jZW50cm9pZCA9IGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHN0cmVhbShvYmplY3QsIHByb2plY3Rpb25TdHJlYW0ocGF0aENlbnRyb2lkKSk7XG4gICAgcmV0dXJuIHBhdGhDZW50cm9pZC5yZXN1bHQoKTtcbiAgfTtcblxuICBwYXRoLnByb2plY3Rpb24gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocHJvamVjdGlvblN0cmVhbSA9IF8gPT0gbnVsbCA/IChwcm9qZWN0aW9uID0gbnVsbCwgaWRlbnRpdHkpIDogKHByb2plY3Rpb24gPSBfKS5zdHJlYW0sIHBhdGgpIDogcHJvamVjdGlvbjtcbiAgfTtcblxuICBwYXRoLmNvbnRleHQgPSBmdW5jdGlvbihfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gY29udGV4dDtcbiAgICBjb250ZXh0U3RyZWFtID0gXyA9PSBudWxsID8gKGNvbnRleHQgPSBudWxsLCBuZXcgUGF0aFN0cmluZykgOiBuZXcgUGF0aENvbnRleHQoY29udGV4dCA9IF8pO1xuICAgIGlmICh0eXBlb2YgcG9pbnRSYWRpdXMgIT09IFwiZnVuY3Rpb25cIikgY29udGV4dFN0cmVhbS5wb2ludFJhZGl1cyhwb2ludFJhZGl1cyk7XG4gICAgcmV0dXJuIHBhdGg7XG4gIH07XG5cbiAgcGF0aC5wb2ludFJhZGl1cyA9IGZ1bmN0aW9uKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBwb2ludFJhZGl1cztcbiAgICBwb2ludFJhZGl1cyA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogKGNvbnRleHRTdHJlYW0ucG9pbnRSYWRpdXMoK18pLCArXyk7XG4gICAgcmV0dXJuIHBhdGg7XG4gIH07XG5cbiAgcmV0dXJuIHBhdGgucHJvamVjdGlvbihwcm9qZWN0aW9uKS5jb250ZXh0KGNvbnRleHQpO1xufVxuIiwiaW1wb3J0IGFkZGVyIGZyb20gXCIuLi9hZGRlci5qc1wiO1xuaW1wb3J0IHtzcXJ0fSBmcm9tIFwiLi4vbWF0aC5qc1wiO1xuaW1wb3J0IG5vb3AgZnJvbSBcIi4uL25vb3AuanNcIjtcblxudmFyIGxlbmd0aFN1bSA9IGFkZGVyKCksXG4gICAgbGVuZ3RoUmluZyxcbiAgICB4MDAsXG4gICAgeTAwLFxuICAgIHgwLFxuICAgIHkwO1xuXG52YXIgbGVuZ3RoU3RyZWFtID0ge1xuICBwb2ludDogbm9vcCxcbiAgbGluZVN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICBsZW5ndGhTdHJlYW0ucG9pbnQgPSBsZW5ndGhQb2ludEZpcnN0O1xuICB9LFxuICBsaW5lRW5kOiBmdW5jdGlvbigpIHtcbiAgICBpZiAobGVuZ3RoUmluZykgbGVuZ3RoUG9pbnQoeDAwLCB5MDApO1xuICAgIGxlbmd0aFN0cmVhbS5wb2ludCA9IG5vb3A7XG4gIH0sXG4gIHBvbHlnb25TdGFydDogZnVuY3Rpb24oKSB7XG4gICAgbGVuZ3RoUmluZyA9IHRydWU7XG4gIH0sXG4gIHBvbHlnb25FbmQ6IGZ1bmN0aW9uKCkge1xuICAgIGxlbmd0aFJpbmcgPSBudWxsO1xuICB9LFxuICByZXN1bHQ6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBsZW5ndGggPSArbGVuZ3RoU3VtO1xuICAgIGxlbmd0aFN1bS5yZXNldCgpO1xuICAgIHJldHVybiBsZW5ndGg7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGxlbmd0aFBvaW50Rmlyc3QoeCwgeSkge1xuICBsZW5ndGhTdHJlYW0ucG9pbnQgPSBsZW5ndGhQb2ludDtcbiAgeDAwID0geDAgPSB4LCB5MDAgPSB5MCA9IHk7XG59XG5cbmZ1bmN0aW9uIGxlbmd0aFBvaW50KHgsIHkpIHtcbiAgeDAgLT0geCwgeTAgLT0geTtcbiAgbGVuZ3RoU3VtLmFkZChzcXJ0KHgwICogeDAgKyB5MCAqIHkwKSk7XG4gIHgwID0geCwgeTAgPSB5O1xufVxuXG5leHBvcnQgZGVmYXVsdCBsZW5ndGhTdHJlYW07XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBQYXRoU3RyaW5nKCkge1xuICB0aGlzLl9zdHJpbmcgPSBbXTtcbn1cblxuUGF0aFN0cmluZy5wcm90b3R5cGUgPSB7XG4gIF9yYWRpdXM6IDQuNSxcbiAgX2NpcmNsZTogY2lyY2xlKDQuNSksXG4gIHBvaW50UmFkaXVzOiBmdW5jdGlvbihfKSB7XG4gICAgaWYgKChfID0gK18pICE9PSB0aGlzLl9yYWRpdXMpIHRoaXMuX3JhZGl1cyA9IF8sIHRoaXMuX2NpcmNsZSA9IG51bGw7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG4gIHBvbHlnb25TdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fbGluZSA9IDA7XG4gIH0sXG4gIHBvbHlnb25FbmQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xpbmUgPSBOYU47XG4gIH0sXG4gIGxpbmVTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fcG9pbnQgPSAwO1xuICB9LFxuICBsaW5lRW5kOiBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5fbGluZSA9PT0gMCkgdGhpcy5fc3RyaW5nLnB1c2goXCJaXCIpO1xuICAgIHRoaXMuX3BvaW50ID0gTmFOO1xuICB9LFxuICBwb2ludDogZnVuY3Rpb24oeCwgeSkge1xuICAgIHN3aXRjaCAodGhpcy5fcG9pbnQpIHtcbiAgICAgIGNhc2UgMDoge1xuICAgICAgICB0aGlzLl9zdHJpbmcucHVzaChcIk1cIiwgeCwgXCIsXCIsIHkpO1xuICAgICAgICB0aGlzLl9wb2ludCA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAxOiB7XG4gICAgICAgIHRoaXMuX3N0cmluZy5wdXNoKFwiTFwiLCB4LCBcIixcIiwgeSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICBpZiAodGhpcy5fY2lyY2xlID09IG51bGwpIHRoaXMuX2NpcmNsZSA9IGNpcmNsZSh0aGlzLl9yYWRpdXMpO1xuICAgICAgICB0aGlzLl9zdHJpbmcucHVzaChcIk1cIiwgeCwgXCIsXCIsIHksIHRoaXMuX2NpcmNsZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgcmVzdWx0OiBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5fc3RyaW5nLmxlbmd0aCkge1xuICAgICAgdmFyIHJlc3VsdCA9IHRoaXMuX3N0cmluZy5qb2luKFwiXCIpO1xuICAgICAgdGhpcy5fc3RyaW5nID0gW107XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGNpcmNsZShyYWRpdXMpIHtcbiAgcmV0dXJuIFwibTAsXCIgKyByYWRpdXNcbiAgICAgICsgXCJhXCIgKyByYWRpdXMgKyBcIixcIiArIHJhZGl1cyArIFwiIDAgMSwxIDAsXCIgKyAtMiAqIHJhZGl1c1xuICAgICAgKyBcImFcIiArIHJhZGl1cyArIFwiLFwiICsgcmFkaXVzICsgXCIgMCAxLDEgMCxcIiArIDIgKiByYWRpdXNcbiAgICAgICsgXCJ6XCI7XG59XG4iLCJpbXBvcnQge2FicywgZXBzaWxvbn0gZnJvbSBcIi4vbWF0aC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHJldHVybiBhYnMoYVswXSAtIGJbMF0pIDwgZXBzaWxvbiAmJiBhYnMoYVsxXSAtIGJbMV0pIDwgZXBzaWxvbjtcbn1cbiIsImltcG9ydCBhZGRlciBmcm9tIFwiLi9hZGRlci5qc1wiO1xuaW1wb3J0IHtjYXJ0ZXNpYW4sIGNhcnRlc2lhbkNyb3NzLCBjYXJ0ZXNpYW5Ob3JtYWxpemVJblBsYWNlfSBmcm9tIFwiLi9jYXJ0ZXNpYW4uanNcIjtcbmltcG9ydCB7YWJzLCBhc2luLCBhdGFuMiwgY29zLCBlcHNpbG9uLCBoYWxmUGksIHBpLCBxdWFydGVyUGksIHNpZ24sIHNpbiwgdGF1fSBmcm9tIFwiLi9tYXRoLmpzXCI7XG5cbnZhciBzdW0gPSBhZGRlcigpO1xuXG5mdW5jdGlvbiBsb25naXR1ZGUocG9pbnQpIHtcbiAgaWYgKGFicyhwb2ludFswXSkgPD0gcGkpXG4gICAgcmV0dXJuIHBvaW50WzBdO1xuICBlbHNlXG4gICAgcmV0dXJuIHNpZ24ocG9pbnRbMF0pICogKChhYnMocG9pbnRbMF0pICsgcGkpICUgdGF1IC0gcGkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihwb2x5Z29uLCBwb2ludCkge1xuICB2YXIgbGFtYmRhID0gbG9uZ2l0dWRlKHBvaW50KSxcbiAgICAgIHBoaSA9IHBvaW50WzFdLFxuICAgICAgc2luUGhpID0gc2luKHBoaSksXG4gICAgICBub3JtYWwgPSBbc2luKGxhbWJkYSksIC1jb3MobGFtYmRhKSwgMF0sXG4gICAgICBhbmdsZSA9IDAsXG4gICAgICB3aW5kaW5nID0gMDtcblxuICBzdW0ucmVzZXQoKTtcblxuICBpZiAoc2luUGhpID09PSAxKSBwaGkgPSBoYWxmUGkgKyBlcHNpbG9uO1xuICBlbHNlIGlmIChzaW5QaGkgPT09IC0xKSBwaGkgPSAtaGFsZlBpIC0gZXBzaWxvbjtcblxuICBmb3IgKHZhciBpID0gMCwgbiA9IHBvbHlnb24ubGVuZ3RoOyBpIDwgbjsgKytpKSB7XG4gICAgaWYgKCEobSA9IChyaW5nID0gcG9seWdvbltpXSkubGVuZ3RoKSkgY29udGludWU7XG4gICAgdmFyIHJpbmcsXG4gICAgICAgIG0sXG4gICAgICAgIHBvaW50MCA9IHJpbmdbbSAtIDFdLFxuICAgICAgICBsYW1iZGEwID0gbG9uZ2l0dWRlKHBvaW50MCksXG4gICAgICAgIHBoaTAgPSBwb2ludDBbMV0gLyAyICsgcXVhcnRlclBpLFxuICAgICAgICBzaW5QaGkwID0gc2luKHBoaTApLFxuICAgICAgICBjb3NQaGkwID0gY29zKHBoaTApO1xuXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBtOyArK2osIGxhbWJkYTAgPSBsYW1iZGExLCBzaW5QaGkwID0gc2luUGhpMSwgY29zUGhpMCA9IGNvc1BoaTEsIHBvaW50MCA9IHBvaW50MSkge1xuICAgICAgdmFyIHBvaW50MSA9IHJpbmdbal0sXG4gICAgICAgICAgbGFtYmRhMSA9IGxvbmdpdHVkZShwb2ludDEpLFxuICAgICAgICAgIHBoaTEgPSBwb2ludDFbMV0gLyAyICsgcXVhcnRlclBpLFxuICAgICAgICAgIHNpblBoaTEgPSBzaW4ocGhpMSksXG4gICAgICAgICAgY29zUGhpMSA9IGNvcyhwaGkxKSxcbiAgICAgICAgICBkZWx0YSA9IGxhbWJkYTEgLSBsYW1iZGEwLFxuICAgICAgICAgIHNpZ24gPSBkZWx0YSA+PSAwID8gMSA6IC0xLFxuICAgICAgICAgIGFic0RlbHRhID0gc2lnbiAqIGRlbHRhLFxuICAgICAgICAgIGFudGltZXJpZGlhbiA9IGFic0RlbHRhID4gcGksXG4gICAgICAgICAgayA9IHNpblBoaTAgKiBzaW5QaGkxO1xuXG4gICAgICBzdW0uYWRkKGF0YW4yKGsgKiBzaWduICogc2luKGFic0RlbHRhKSwgY29zUGhpMCAqIGNvc1BoaTEgKyBrICogY29zKGFic0RlbHRhKSkpO1xuICAgICAgYW5nbGUgKz0gYW50aW1lcmlkaWFuID8gZGVsdGEgKyBzaWduICogdGF1IDogZGVsdGE7XG5cbiAgICAgIC8vIEFyZSB0aGUgbG9uZ2l0dWRlcyBlaXRoZXIgc2lkZSBvZiB0aGUgcG9pbnTigJlzIG1lcmlkaWFuIChsYW1iZGEpLFxuICAgICAgLy8gYW5kIGFyZSB0aGUgbGF0aXR1ZGVzIHNtYWxsZXIgdGhhbiB0aGUgcGFyYWxsZWwgKHBoaSk/XG4gICAgICBpZiAoYW50aW1lcmlkaWFuIF4gbGFtYmRhMCA+PSBsYW1iZGEgXiBsYW1iZGExID49IGxhbWJkYSkge1xuICAgICAgICB2YXIgYXJjID0gY2FydGVzaWFuQ3Jvc3MoY2FydGVzaWFuKHBvaW50MCksIGNhcnRlc2lhbihwb2ludDEpKTtcbiAgICAgICAgY2FydGVzaWFuTm9ybWFsaXplSW5QbGFjZShhcmMpO1xuICAgICAgICB2YXIgaW50ZXJzZWN0aW9uID0gY2FydGVzaWFuQ3Jvc3Mobm9ybWFsLCBhcmMpO1xuICAgICAgICBjYXJ0ZXNpYW5Ob3JtYWxpemVJblBsYWNlKGludGVyc2VjdGlvbik7XG4gICAgICAgIHZhciBwaGlBcmMgPSAoYW50aW1lcmlkaWFuIF4gZGVsdGEgPj0gMCA/IC0xIDogMSkgKiBhc2luKGludGVyc2VjdGlvblsyXSk7XG4gICAgICAgIGlmIChwaGkgPiBwaGlBcmMgfHwgcGhpID09PSBwaGlBcmMgJiYgKGFyY1swXSB8fCBhcmNbMV0pKSB7XG4gICAgICAgICAgd2luZGluZyArPSBhbnRpbWVyaWRpYW4gXiBkZWx0YSA+PSAwID8gMSA6IC0xO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gRmlyc3QsIGRldGVybWluZSB3aGV0aGVyIHRoZSBTb3V0aCBwb2xlIGlzIGluc2lkZSBvciBvdXRzaWRlOlxuICAvL1xuICAvLyBJdCBpcyBpbnNpZGUgaWY6XG4gIC8vICogdGhlIHBvbHlnb24gd2luZHMgYXJvdW5kIGl0IGluIGEgY2xvY2t3aXNlIGRpcmVjdGlvbi5cbiAgLy8gKiB0aGUgcG9seWdvbiBkb2VzIG5vdCAoY3VtdWxhdGl2ZWx5KSB3aW5kIGFyb3VuZCBpdCwgYnV0IGhhcyBhIG5lZ2F0aXZlXG4gIC8vICAgKGNvdW50ZXItY2xvY2t3aXNlKSBhcmVhLlxuICAvL1xuICAvLyBTZWNvbmQsIGNvdW50IHRoZSAoc2lnbmVkKSBudW1iZXIgb2YgdGltZXMgYSBzZWdtZW50IGNyb3NzZXMgYSBsYW1iZGFcbiAgLy8gZnJvbSB0aGUgcG9pbnQgdG8gdGhlIFNvdXRoIHBvbGUuICBJZiBpdCBpcyB6ZXJvLCB0aGVuIHRoZSBwb2ludCBpcyB0aGVcbiAgLy8gc2FtZSBzaWRlIGFzIHRoZSBTb3V0aCBwb2xlLlxuXG4gIHJldHVybiAoYW5nbGUgPCAtZXBzaWxvbiB8fCBhbmdsZSA8IGVwc2lsb24gJiYgc3VtIDwgLWVwc2lsb24pIF4gKHdpbmRpbmcgJiAxKTtcbn1cbiIsImltcG9ydCBjb25pY0VxdWFsQXJlYSBmcm9tIFwiLi9jb25pY0VxdWFsQXJlYS5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGNvbmljRXF1YWxBcmVhKClcbiAgICAgIC5wYXJhbGxlbHMoWzI5LjUsIDQ1LjVdKVxuICAgICAgLnNjYWxlKDEwNzApXG4gICAgICAudHJhbnNsYXRlKFs0ODAsIDI1MF0pXG4gICAgICAucm90YXRlKFs5NiwgMF0pXG4gICAgICAuY2VudGVyKFstMC42LCAzOC43XSk7XG59XG4iLCJpbXBvcnQge2Vwc2lsb259IGZyb20gXCIuLi9tYXRoLmpzXCI7XG5pbXBvcnQgYWxiZXJzIGZyb20gXCIuL2FsYmVycy5qc1wiO1xuaW1wb3J0IGNvbmljRXF1YWxBcmVhIGZyb20gXCIuL2NvbmljRXF1YWxBcmVhLmpzXCI7XG5pbXBvcnQge2ZpdEV4dGVudCwgZml0U2l6ZSwgZml0V2lkdGgsIGZpdEhlaWdodH0gZnJvbSBcIi4vZml0LmpzXCI7XG5cbi8vIFRoZSBwcm9qZWN0aW9ucyBtdXN0IGhhdmUgbXV0dWFsbHkgZXhjbHVzaXZlIGNsaXAgcmVnaW9ucyBvbiB0aGUgc3BoZXJlLFxuLy8gYXMgdGhpcyB3aWxsIGF2b2lkIGVtaXR0aW5nIGludGVybGVhdmluZyBsaW5lcyBhbmQgcG9seWdvbnMuXG5mdW5jdGlvbiBtdWx0aXBsZXgoc3RyZWFtcykge1xuICB2YXIgbiA9IHN0cmVhbXMubGVuZ3RoO1xuICByZXR1cm4ge1xuICAgIHBvaW50OiBmdW5jdGlvbih4LCB5KSB7IHZhciBpID0gLTE7IHdoaWxlICgrK2kgPCBuKSBzdHJlYW1zW2ldLnBvaW50KHgsIHkpOyB9LFxuICAgIHNwaGVyZTogZnVuY3Rpb24oKSB7IHZhciBpID0gLTE7IHdoaWxlICgrK2kgPCBuKSBzdHJlYW1zW2ldLnNwaGVyZSgpOyB9LFxuICAgIGxpbmVTdGFydDogZnVuY3Rpb24oKSB7IHZhciBpID0gLTE7IHdoaWxlICgrK2kgPCBuKSBzdHJlYW1zW2ldLmxpbmVTdGFydCgpOyB9LFxuICAgIGxpbmVFbmQ6IGZ1bmN0aW9uKCkgeyB2YXIgaSA9IC0xOyB3aGlsZSAoKytpIDwgbikgc3RyZWFtc1tpXS5saW5lRW5kKCk7IH0sXG4gICAgcG9seWdvblN0YXJ0OiBmdW5jdGlvbigpIHsgdmFyIGkgPSAtMTsgd2hpbGUgKCsraSA8IG4pIHN0cmVhbXNbaV0ucG9seWdvblN0YXJ0KCk7IH0sXG4gICAgcG9seWdvbkVuZDogZnVuY3Rpb24oKSB7IHZhciBpID0gLTE7IHdoaWxlICgrK2kgPCBuKSBzdHJlYW1zW2ldLnBvbHlnb25FbmQoKTsgfVxuICB9O1xufVxuXG4vLyBBIGNvbXBvc2l0ZSBwcm9qZWN0aW9uIGZvciB0aGUgVW5pdGVkIFN0YXRlcywgY29uZmlndXJlZCBieSBkZWZhdWx0IGZvclxuLy8gOTYww5c1MDAuIFRoZSBwcm9qZWN0aW9uIGFsc28gd29ya3MgcXVpdGUgd2VsbCBhdCA5NjDDlzYwMCBpZiB5b3UgY2hhbmdlIHRoZVxuLy8gc2NhbGUgdG8gMTI4NSBhbmQgYWRqdXN0IHRoZSB0cmFuc2xhdGUgYWNjb3JkaW5nbHkuIFRoZSBzZXQgb2Ygc3RhbmRhcmRcbi8vIHBhcmFsbGVscyBmb3IgZWFjaCByZWdpb24gY29tZXMgZnJvbSBVU0dTLCB3aGljaCBpcyBwdWJsaXNoZWQgaGVyZTpcbi8vIGh0dHA6Ly9lZ3NjLnVzZ3MuZ292L2lzYi9wdWJzL01hcFByb2plY3Rpb25zL3Byb2plY3Rpb25zLmh0bWwjYWxiZXJzXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIGNhY2hlLFxuICAgICAgY2FjaGVTdHJlYW0sXG4gICAgICBsb3dlcjQ4ID0gYWxiZXJzKCksIGxvd2VyNDhQb2ludCxcbiAgICAgIGFsYXNrYSA9IGNvbmljRXF1YWxBcmVhKCkucm90YXRlKFsxNTQsIDBdKS5jZW50ZXIoWy0yLCA1OC41XSkucGFyYWxsZWxzKFs1NSwgNjVdKSwgYWxhc2thUG9pbnQsIC8vIEVQU0c6MzMzOFxuICAgICAgaGF3YWlpID0gY29uaWNFcXVhbEFyZWEoKS5yb3RhdGUoWzE1NywgMF0pLmNlbnRlcihbLTMsIDE5LjldKS5wYXJhbGxlbHMoWzgsIDE4XSksIGhhd2FpaVBvaW50LCAvLyBFU1JJOjEwMjAwN1xuICAgICAgcG9pbnQsIHBvaW50U3RyZWFtID0ge3BvaW50OiBmdW5jdGlvbih4LCB5KSB7IHBvaW50ID0gW3gsIHldOyB9fTtcblxuICBmdW5jdGlvbiBhbGJlcnNVc2EoY29vcmRpbmF0ZXMpIHtcbiAgICB2YXIgeCA9IGNvb3JkaW5hdGVzWzBdLCB5ID0gY29vcmRpbmF0ZXNbMV07XG4gICAgcmV0dXJuIHBvaW50ID0gbnVsbCxcbiAgICAgICAgKGxvd2VyNDhQb2ludC5wb2ludCh4LCB5KSwgcG9pbnQpXG4gICAgICAgIHx8IChhbGFza2FQb2ludC5wb2ludCh4LCB5KSwgcG9pbnQpXG4gICAgICAgIHx8IChoYXdhaWlQb2ludC5wb2ludCh4LCB5KSwgcG9pbnQpO1xuICB9XG5cbiAgYWxiZXJzVXNhLmludmVydCA9IGZ1bmN0aW9uKGNvb3JkaW5hdGVzKSB7XG4gICAgdmFyIGsgPSBsb3dlcjQ4LnNjYWxlKCksXG4gICAgICAgIHQgPSBsb3dlcjQ4LnRyYW5zbGF0ZSgpLFxuICAgICAgICB4ID0gKGNvb3JkaW5hdGVzWzBdIC0gdFswXSkgLyBrLFxuICAgICAgICB5ID0gKGNvb3JkaW5hdGVzWzFdIC0gdFsxXSkgLyBrO1xuICAgIHJldHVybiAoeSA+PSAwLjEyMCAmJiB5IDwgMC4yMzQgJiYgeCA+PSAtMC40MjUgJiYgeCA8IC0wLjIxNCA/IGFsYXNrYVxuICAgICAgICA6IHkgPj0gMC4xNjYgJiYgeSA8IDAuMjM0ICYmIHggPj0gLTAuMjE0ICYmIHggPCAtMC4xMTUgPyBoYXdhaWlcbiAgICAgICAgOiBsb3dlcjQ4KS5pbnZlcnQoY29vcmRpbmF0ZXMpO1xuICB9O1xuXG4gIGFsYmVyc1VzYS5zdHJlYW0gPSBmdW5jdGlvbihzdHJlYW0pIHtcbiAgICByZXR1cm4gY2FjaGUgJiYgY2FjaGVTdHJlYW0gPT09IHN0cmVhbSA/IGNhY2hlIDogY2FjaGUgPSBtdWx0aXBsZXgoW2xvd2VyNDguc3RyZWFtKGNhY2hlU3RyZWFtID0gc3RyZWFtKSwgYWxhc2thLnN0cmVhbShzdHJlYW0pLCBoYXdhaWkuc3RyZWFtKHN0cmVhbSldKTtcbiAgfTtcblxuICBhbGJlcnNVc2EucHJlY2lzaW9uID0gZnVuY3Rpb24oXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGxvd2VyNDgucHJlY2lzaW9uKCk7XG4gICAgbG93ZXI0OC5wcmVjaXNpb24oXyksIGFsYXNrYS5wcmVjaXNpb24oXyksIGhhd2FpaS5wcmVjaXNpb24oXyk7XG4gICAgcmV0dXJuIHJlc2V0KCk7XG4gIH07XG5cbiAgYWxiZXJzVXNhLnNjYWxlID0gZnVuY3Rpb24oXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGxvd2VyNDguc2NhbGUoKTtcbiAgICBsb3dlcjQ4LnNjYWxlKF8pLCBhbGFza2Euc2NhbGUoXyAqIDAuMzUpLCBoYXdhaWkuc2NhbGUoXyk7XG4gICAgcmV0dXJuIGFsYmVyc1VzYS50cmFuc2xhdGUobG93ZXI0OC50cmFuc2xhdGUoKSk7XG4gIH07XG5cbiAgYWxiZXJzVXNhLnRyYW5zbGF0ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBsb3dlcjQ4LnRyYW5zbGF0ZSgpO1xuICAgIHZhciBrID0gbG93ZXI0OC5zY2FsZSgpLCB4ID0gK19bMF0sIHkgPSArX1sxXTtcblxuICAgIGxvd2VyNDhQb2ludCA9IGxvd2VyNDhcbiAgICAgICAgLnRyYW5zbGF0ZShfKVxuICAgICAgICAuY2xpcEV4dGVudChbW3ggLSAwLjQ1NSAqIGssIHkgLSAwLjIzOCAqIGtdLCBbeCArIDAuNDU1ICogaywgeSArIDAuMjM4ICoga11dKVxuICAgICAgICAuc3RyZWFtKHBvaW50U3RyZWFtKTtcblxuICAgIGFsYXNrYVBvaW50ID0gYWxhc2thXG4gICAgICAgIC50cmFuc2xhdGUoW3ggLSAwLjMwNyAqIGssIHkgKyAwLjIwMSAqIGtdKVxuICAgICAgICAuY2xpcEV4dGVudChbW3ggLSAwLjQyNSAqIGsgKyBlcHNpbG9uLCB5ICsgMC4xMjAgKiBrICsgZXBzaWxvbl0sIFt4IC0gMC4yMTQgKiBrIC0gZXBzaWxvbiwgeSArIDAuMjM0ICogayAtIGVwc2lsb25dXSlcbiAgICAgICAgLnN0cmVhbShwb2ludFN0cmVhbSk7XG5cbiAgICBoYXdhaWlQb2ludCA9IGhhd2FpaVxuICAgICAgICAudHJhbnNsYXRlKFt4IC0gMC4yMDUgKiBrLCB5ICsgMC4yMTIgKiBrXSlcbiAgICAgICAgLmNsaXBFeHRlbnQoW1t4IC0gMC4yMTQgKiBrICsgZXBzaWxvbiwgeSArIDAuMTY2ICogayArIGVwc2lsb25dLCBbeCAtIDAuMTE1ICogayAtIGVwc2lsb24sIHkgKyAwLjIzNCAqIGsgLSBlcHNpbG9uXV0pXG4gICAgICAgIC5zdHJlYW0ocG9pbnRTdHJlYW0pO1xuXG4gICAgcmV0dXJuIHJlc2V0KCk7XG4gIH07XG5cbiAgYWxiZXJzVXNhLmZpdEV4dGVudCA9IGZ1bmN0aW9uKGV4dGVudCwgb2JqZWN0KSB7XG4gICAgcmV0dXJuIGZpdEV4dGVudChhbGJlcnNVc2EsIGV4dGVudCwgb2JqZWN0KTtcbiAgfTtcblxuICBhbGJlcnNVc2EuZml0U2l6ZSA9IGZ1bmN0aW9uKHNpemUsIG9iamVjdCkge1xuICAgIHJldHVybiBmaXRTaXplKGFsYmVyc1VzYSwgc2l6ZSwgb2JqZWN0KTtcbiAgfTtcblxuICBhbGJlcnNVc2EuZml0V2lkdGggPSBmdW5jdGlvbih3aWR0aCwgb2JqZWN0KSB7XG4gICAgcmV0dXJuIGZpdFdpZHRoKGFsYmVyc1VzYSwgd2lkdGgsIG9iamVjdCk7XG4gIH07XG5cbiAgYWxiZXJzVXNhLmZpdEhlaWdodCA9IGZ1bmN0aW9uKGhlaWdodCwgb2JqZWN0KSB7XG4gICAgcmV0dXJuIGZpdEhlaWdodChhbGJlcnNVc2EsIGhlaWdodCwgb2JqZWN0KTtcbiAgfTtcblxuICBmdW5jdGlvbiByZXNldCgpIHtcbiAgICBjYWNoZSA9IGNhY2hlU3RyZWFtID0gbnVsbDtcbiAgICByZXR1cm4gYWxiZXJzVXNhO1xuICB9XG5cbiAgcmV0dXJuIGFsYmVyc1VzYS5zY2FsZSgxMDcwKTtcbn1cbiIsImltcG9ydCB7YXNpbiwgYXRhbjIsIGNvcywgc2luLCBzcXJ0fSBmcm9tIFwiLi4vbWF0aC5qc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gYXppbXV0aGFsUmF3KHNjYWxlKSB7XG4gIHJldHVybiBmdW5jdGlvbih4LCB5KSB7XG4gICAgdmFyIGN4ID0gY29zKHgpLFxuICAgICAgICBjeSA9IGNvcyh5KSxcbiAgICAgICAgayA9IHNjYWxlKGN4ICogY3kpO1xuICAgIHJldHVybiBbXG4gICAgICBrICogY3kgKiBzaW4oeCksXG4gICAgICBrICogc2luKHkpXG4gICAgXTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYXppbXV0aGFsSW52ZXJ0KGFuZ2xlKSB7XG4gIHJldHVybiBmdW5jdGlvbih4LCB5KSB7XG4gICAgdmFyIHogPSBzcXJ0KHggKiB4ICsgeSAqIHkpLFxuICAgICAgICBjID0gYW5nbGUoeiksXG4gICAgICAgIHNjID0gc2luKGMpLFxuICAgICAgICBjYyA9IGNvcyhjKTtcbiAgICByZXR1cm4gW1xuICAgICAgYXRhbjIoeCAqIHNjLCB6ICogY2MpLFxuICAgICAgYXNpbih6ICYmIHkgKiBzYyAvIHopXG4gICAgXTtcbiAgfVxufVxuIiwiaW1wb3J0IHthc2luLCBzcXJ0fSBmcm9tIFwiLi4vbWF0aC5qc1wiO1xuaW1wb3J0IHthemltdXRoYWxSYXcsIGF6aW11dGhhbEludmVydH0gZnJvbSBcIi4vYXppbXV0aGFsLmpzXCI7XG5pbXBvcnQgcHJvamVjdGlvbiBmcm9tIFwiLi9pbmRleC5qc1wiO1xuXG5leHBvcnQgdmFyIGF6aW11dGhhbEVxdWFsQXJlYVJhdyA9IGF6aW11dGhhbFJhdyhmdW5jdGlvbihjeGN5KSB7XG4gIHJldHVybiBzcXJ0KDIgLyAoMSArIGN4Y3kpKTtcbn0pO1xuXG5hemltdXRoYWxFcXVhbEFyZWFSYXcuaW52ZXJ0ID0gYXppbXV0aGFsSW52ZXJ0KGZ1bmN0aW9uKHopIHtcbiAgcmV0dXJuIDIgKiBhc2luKHogLyAyKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHByb2plY3Rpb24oYXppbXV0aGFsRXF1YWxBcmVhUmF3KVxuICAgICAgLnNjYWxlKDEyNC43NSlcbiAgICAgIC5jbGlwQW5nbGUoMTgwIC0gMWUtMyk7XG59XG4iLCJpbXBvcnQge2Fjb3MsIHNpbn0gZnJvbSBcIi4uL21hdGguanNcIjtcbmltcG9ydCB7YXppbXV0aGFsUmF3LCBhemltdXRoYWxJbnZlcnR9IGZyb20gXCIuL2F6aW11dGhhbC5qc1wiO1xuaW1wb3J0IHByb2plY3Rpb24gZnJvbSBcIi4vaW5kZXguanNcIjtcblxuZXhwb3J0IHZhciBhemltdXRoYWxFcXVpZGlzdGFudFJhdyA9IGF6aW11dGhhbFJhdyhmdW5jdGlvbihjKSB7XG4gIHJldHVybiAoYyA9IGFjb3MoYykpICYmIGMgLyBzaW4oYyk7XG59KTtcblxuYXppbXV0aGFsRXF1aWRpc3RhbnRSYXcuaW52ZXJ0ID0gYXppbXV0aGFsSW52ZXJ0KGZ1bmN0aW9uKHopIHtcbiAgcmV0dXJuIHo7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiBwcm9qZWN0aW9uKGF6aW11dGhhbEVxdWlkaXN0YW50UmF3KVxuICAgICAgLnNjYWxlKDc5LjQxODgpXG4gICAgICAuY2xpcEFuZ2xlKDE4MCAtIDFlLTMpO1xufVxuIiwiaW1wb3J0IHtkZWdyZWVzLCBwaSwgcmFkaWFuc30gZnJvbSBcIi4uL21hdGguanNcIjtcbmltcG9ydCB7cHJvamVjdGlvbk11dGF0b3J9IGZyb20gXCIuL2luZGV4LmpzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25pY1Byb2plY3Rpb24ocHJvamVjdEF0KSB7XG4gIHZhciBwaGkwID0gMCxcbiAgICAgIHBoaTEgPSBwaSAvIDMsXG4gICAgICBtID0gcHJvamVjdGlvbk11dGF0b3IocHJvamVjdEF0KSxcbiAgICAgIHAgPSBtKHBoaTAsIHBoaTEpO1xuXG4gIHAucGFyYWxsZWxzID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gbShwaGkwID0gX1swXSAqIHJhZGlhbnMsIHBoaTEgPSBfWzFdICogcmFkaWFucykgOiBbcGhpMCAqIGRlZ3JlZXMsIHBoaTEgKiBkZWdyZWVzXTtcbiAgfTtcblxuICByZXR1cm4gcDtcbn1cbiIsImltcG9ydCB7YWJzLCBhdGFuLCBhdGFuMiwgY29zLCBlcHNpbG9uLCBoYWxmUGksIGxvZywgcGksIHBvdywgc2lnbiwgc2luLCBzcXJ0LCB0YW59IGZyb20gXCIuLi9tYXRoLmpzXCI7XG5pbXBvcnQge2NvbmljUHJvamVjdGlvbn0gZnJvbSBcIi4vY29uaWMuanNcIjtcbmltcG9ydCB7bWVyY2F0b3JSYXd9IGZyb20gXCIuL21lcmNhdG9yLmpzXCI7XG5cbmZ1bmN0aW9uIHRhbnkoeSkge1xuICByZXR1cm4gdGFuKChoYWxmUGkgKyB5KSAvIDIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uaWNDb25mb3JtYWxSYXcoeTAsIHkxKSB7XG4gIHZhciBjeTAgPSBjb3MoeTApLFxuICAgICAgbiA9IHkwID09PSB5MSA/IHNpbih5MCkgOiBsb2coY3kwIC8gY29zKHkxKSkgLyBsb2codGFueSh5MSkgLyB0YW55KHkwKSksXG4gICAgICBmID0gY3kwICogcG93KHRhbnkoeTApLCBuKSAvIG47XG5cbiAgaWYgKCFuKSByZXR1cm4gbWVyY2F0b3JSYXc7XG5cbiAgZnVuY3Rpb24gcHJvamVjdCh4LCB5KSB7XG4gICAgaWYgKGYgPiAwKSB7IGlmICh5IDwgLWhhbGZQaSArIGVwc2lsb24pIHkgPSAtaGFsZlBpICsgZXBzaWxvbjsgfVxuICAgIGVsc2UgeyBpZiAoeSA+IGhhbGZQaSAtIGVwc2lsb24pIHkgPSBoYWxmUGkgLSBlcHNpbG9uOyB9XG4gICAgdmFyIHIgPSBmIC8gcG93KHRhbnkoeSksIG4pO1xuICAgIHJldHVybiBbciAqIHNpbihuICogeCksIGYgLSByICogY29zKG4gKiB4KV07XG4gIH1cblxuICBwcm9qZWN0LmludmVydCA9IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICB2YXIgZnkgPSBmIC0geSwgciA9IHNpZ24obikgKiBzcXJ0KHggKiB4ICsgZnkgKiBmeSksXG4gICAgICBsID0gYXRhbjIoeCwgYWJzKGZ5KSkgKiBzaWduKGZ5KTtcbiAgICBpZiAoZnkgKiBuIDwgMClcbiAgICAgIGwgLT0gcGkgKiBzaWduKHgpICogc2lnbihmeSk7XG4gICAgcmV0dXJuIFtsIC8gbiwgMiAqIGF0YW4ocG93KGYgLyByLCAxIC8gbikpIC0gaGFsZlBpXTtcbiAgfTtcblxuICByZXR1cm4gcHJvamVjdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiBjb25pY1Byb2plY3Rpb24oY29uaWNDb25mb3JtYWxSYXcpXG4gICAgICAuc2NhbGUoMTA5LjUpXG4gICAgICAucGFyYWxsZWxzKFszMCwgMzBdKTtcbn1cbiIsImltcG9ydCB7YWJzLCBhc2luLCBhdGFuMiwgY29zLCBlcHNpbG9uLCBwaSwgc2lnbiwgc2luLCBzcXJ0fSBmcm9tIFwiLi4vbWF0aC5qc1wiO1xuaW1wb3J0IHtjb25pY1Byb2plY3Rpb259IGZyb20gXCIuL2NvbmljLmpzXCI7XG5pbXBvcnQge2N5bGluZHJpY2FsRXF1YWxBcmVhUmF3fSBmcm9tIFwiLi9jeWxpbmRyaWNhbEVxdWFsQXJlYS5qc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gY29uaWNFcXVhbEFyZWFSYXcoeTAsIHkxKSB7XG4gIHZhciBzeTAgPSBzaW4oeTApLCBuID0gKHN5MCArIHNpbih5MSkpIC8gMjtcblxuICAvLyBBcmUgdGhlIHBhcmFsbGVscyBzeW1tZXRyaWNhbCBhcm91bmQgdGhlIEVxdWF0b3I/XG4gIGlmIChhYnMobikgPCBlcHNpbG9uKSByZXR1cm4gY3lsaW5kcmljYWxFcXVhbEFyZWFSYXcoeTApO1xuXG4gIHZhciBjID0gMSArIHN5MCAqICgyICogbiAtIHN5MCksIHIwID0gc3FydChjKSAvIG47XG5cbiAgZnVuY3Rpb24gcHJvamVjdCh4LCB5KSB7XG4gICAgdmFyIHIgPSBzcXJ0KGMgLSAyICogbiAqIHNpbih5KSkgLyBuO1xuICAgIHJldHVybiBbciAqIHNpbih4ICo9IG4pLCByMCAtIHIgKiBjb3MoeCldO1xuICB9XG5cbiAgcHJvamVjdC5pbnZlcnQgPSBmdW5jdGlvbih4LCB5KSB7XG4gICAgdmFyIHIweSA9IHIwIC0geSxcbiAgICAgICAgbCA9IGF0YW4yKHgsIGFicyhyMHkpKSAqIHNpZ24ocjB5KTtcbiAgICBpZiAocjB5ICogbiA8IDApXG4gICAgICBsIC09IHBpICogc2lnbih4KSAqIHNpZ24ocjB5KTtcbiAgICByZXR1cm4gW2wgLyBuLCBhc2luKChjIC0gKHggKiB4ICsgcjB5ICogcjB5KSAqIG4gKiBuKSAvICgyICogbikpXTtcbiAgfTtcblxuICByZXR1cm4gcHJvamVjdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiBjb25pY1Byb2plY3Rpb24oY29uaWNFcXVhbEFyZWFSYXcpXG4gICAgICAuc2NhbGUoMTU1LjQyNClcbiAgICAgIC5jZW50ZXIoWzAsIDMzLjY0NDJdKTtcbn1cbiIsImltcG9ydCB7YWJzLCBhdGFuMiwgY29zLCBlcHNpbG9uLCBwaSwgc2lnbiwgc2luLCBzcXJ0fSBmcm9tIFwiLi4vbWF0aC5qc1wiO1xuaW1wb3J0IHtjb25pY1Byb2plY3Rpb259IGZyb20gXCIuL2NvbmljLmpzXCI7XG5pbXBvcnQge2VxdWlyZWN0YW5ndWxhclJhd30gZnJvbSBcIi4vZXF1aXJlY3Rhbmd1bGFyLmpzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25pY0VxdWlkaXN0YW50UmF3KHkwLCB5MSkge1xuICB2YXIgY3kwID0gY29zKHkwKSxcbiAgICAgIG4gPSB5MCA9PT0geTEgPyBzaW4oeTApIDogKGN5MCAtIGNvcyh5MSkpIC8gKHkxIC0geTApLFxuICAgICAgZyA9IGN5MCAvIG4gKyB5MDtcblxuICBpZiAoYWJzKG4pIDwgZXBzaWxvbikgcmV0dXJuIGVxdWlyZWN0YW5ndWxhclJhdztcblxuICBmdW5jdGlvbiBwcm9qZWN0KHgsIHkpIHtcbiAgICB2YXIgZ3kgPSBnIC0geSwgbnggPSBuICogeDtcbiAgICByZXR1cm4gW2d5ICogc2luKG54KSwgZyAtIGd5ICogY29zKG54KV07XG4gIH1cblxuICBwcm9qZWN0LmludmVydCA9IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICB2YXIgZ3kgPSBnIC0geSxcbiAgICAgICAgbCA9IGF0YW4yKHgsIGFicyhneSkpICogc2lnbihneSk7XG4gICAgaWYgKGd5ICogbiA8IDApXG4gICAgICBsIC09IHBpICogc2lnbih4KSAqIHNpZ24oZ3kpO1xuICAgIHJldHVybiBbbCAvIG4sIGcgLSBzaWduKG4pICogc3FydCh4ICogeCArIGd5ICogZ3kpXTtcbiAgfTtcblxuICByZXR1cm4gcHJvamVjdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiBjb25pY1Byb2plY3Rpb24oY29uaWNFcXVpZGlzdGFudFJhdylcbiAgICAgIC5zY2FsZSgxMzEuMTU0KVxuICAgICAgLmNlbnRlcihbMCwgMTMuOTM4OV0pO1xufVxuIiwiaW1wb3J0IHthc2luLCBjb3MsIHNpbn0gZnJvbSBcIi4uL21hdGguanNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGN5bGluZHJpY2FsRXF1YWxBcmVhUmF3KHBoaTApIHtcbiAgdmFyIGNvc1BoaTAgPSBjb3MocGhpMCk7XG5cbiAgZnVuY3Rpb24gZm9yd2FyZChsYW1iZGEsIHBoaSkge1xuICAgIHJldHVybiBbbGFtYmRhICogY29zUGhpMCwgc2luKHBoaSkgLyBjb3NQaGkwXTtcbiAgfVxuXG4gIGZvcndhcmQuaW52ZXJ0ID0gZnVuY3Rpb24oeCwgeSkge1xuICAgIHJldHVybiBbeCAvIGNvc1BoaTAsIGFzaW4oeSAqIGNvc1BoaTApXTtcbiAgfTtcblxuICByZXR1cm4gZm9yd2FyZDtcbn1cbiIsImltcG9ydCBwcm9qZWN0aW9uIGZyb20gXCIuL2luZGV4LmpzXCI7XG5pbXBvcnQge2FicywgYXNpbiwgY29zLCBlcHNpbG9uMiwgc2luLCBzcXJ0fSBmcm9tIFwiLi4vbWF0aC5qc1wiO1xuXG52YXIgQTEgPSAxLjM0MDI2NCxcbiAgICBBMiA9IC0wLjA4MTEwNixcbiAgICBBMyA9IDAuMDAwODkzLFxuICAgIEE0ID0gMC4wMDM3OTYsXG4gICAgTSA9IHNxcnQoMykgLyAyLFxuICAgIGl0ZXJhdGlvbnMgPSAxMjtcblxuZXhwb3J0IGZ1bmN0aW9uIGVxdWFsRWFydGhSYXcobGFtYmRhLCBwaGkpIHtcbiAgdmFyIGwgPSBhc2luKE0gKiBzaW4ocGhpKSksIGwyID0gbCAqIGwsIGw2ID0gbDIgKiBsMiAqIGwyO1xuICByZXR1cm4gW1xuICAgIGxhbWJkYSAqIGNvcyhsKSAvIChNICogKEExICsgMyAqIEEyICogbDIgKyBsNiAqICg3ICogQTMgKyA5ICogQTQgKiBsMikpKSxcbiAgICBsICogKEExICsgQTIgKiBsMiArIGw2ICogKEEzICsgQTQgKiBsMikpXG4gIF07XG59XG5cbmVxdWFsRWFydGhSYXcuaW52ZXJ0ID0gZnVuY3Rpb24oeCwgeSkge1xuICB2YXIgbCA9IHksIGwyID0gbCAqIGwsIGw2ID0gbDIgKiBsMiAqIGwyO1xuICBmb3IgKHZhciBpID0gMCwgZGVsdGEsIGZ5LCBmcHk7IGkgPCBpdGVyYXRpb25zOyArK2kpIHtcbiAgICBmeSA9IGwgKiAoQTEgKyBBMiAqIGwyICsgbDYgKiAoQTMgKyBBNCAqIGwyKSkgLSB5O1xuICAgIGZweSA9IEExICsgMyAqIEEyICogbDIgKyBsNiAqICg3ICogQTMgKyA5ICogQTQgKiBsMik7XG4gICAgbCAtPSBkZWx0YSA9IGZ5IC8gZnB5LCBsMiA9IGwgKiBsLCBsNiA9IGwyICogbDIgKiBsMjtcbiAgICBpZiAoYWJzKGRlbHRhKSA8IGVwc2lsb24yKSBicmVhaztcbiAgfVxuICByZXR1cm4gW1xuICAgIE0gKiB4ICogKEExICsgMyAqIEEyICogbDIgKyBsNiAqICg3ICogQTMgKyA5ICogQTQgKiBsMikpIC8gY29zKGwpLFxuICAgIGFzaW4oc2luKGwpIC8gTSlcbiAgXTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gcHJvamVjdGlvbihlcXVhbEVhcnRoUmF3KVxuICAgICAgLnNjYWxlKDE3Ny4xNTgpO1xufVxuIiwiaW1wb3J0IHByb2plY3Rpb24gZnJvbSBcIi4vaW5kZXguanNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGVxdWlyZWN0YW5ndWxhclJhdyhsYW1iZGEsIHBoaSkge1xuICByZXR1cm4gW2xhbWJkYSwgcGhpXTtcbn1cblxuZXF1aXJlY3Rhbmd1bGFyUmF3LmludmVydCA9IGVxdWlyZWN0YW5ndWxhclJhdztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiBwcm9qZWN0aW9uKGVxdWlyZWN0YW5ndWxhclJhdylcbiAgICAgIC5zY2FsZSgxNTIuNjMpO1xufVxuIiwiaW1wb3J0IHtkZWZhdWx0IGFzIGdlb1N0cmVhbX0gZnJvbSBcIi4uL3N0cmVhbS5qc1wiO1xuaW1wb3J0IGJvdW5kc1N0cmVhbSBmcm9tIFwiLi4vcGF0aC9ib3VuZHMuanNcIjtcblxuZnVuY3Rpb24gZml0KHByb2plY3Rpb24sIGZpdEJvdW5kcywgb2JqZWN0KSB7XG4gIHZhciBjbGlwID0gcHJvamVjdGlvbi5jbGlwRXh0ZW50ICYmIHByb2plY3Rpb24uY2xpcEV4dGVudCgpO1xuICBwcm9qZWN0aW9uLnNjYWxlKDE1MCkudHJhbnNsYXRlKFswLCAwXSk7XG4gIGlmIChjbGlwICE9IG51bGwpIHByb2plY3Rpb24uY2xpcEV4dGVudChudWxsKTtcbiAgZ2VvU3RyZWFtKG9iamVjdCwgcHJvamVjdGlvbi5zdHJlYW0oYm91bmRzU3RyZWFtKSk7XG4gIGZpdEJvdW5kcyhib3VuZHNTdHJlYW0ucmVzdWx0KCkpO1xuICBpZiAoY2xpcCAhPSBudWxsKSBwcm9qZWN0aW9uLmNsaXBFeHRlbnQoY2xpcCk7XG4gIHJldHVybiBwcm9qZWN0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZml0RXh0ZW50KHByb2plY3Rpb24sIGV4dGVudCwgb2JqZWN0KSB7XG4gIHJldHVybiBmaXQocHJvamVjdGlvbiwgZnVuY3Rpb24oYikge1xuICAgIHZhciB3ID0gZXh0ZW50WzFdWzBdIC0gZXh0ZW50WzBdWzBdLFxuICAgICAgICBoID0gZXh0ZW50WzFdWzFdIC0gZXh0ZW50WzBdWzFdLFxuICAgICAgICBrID0gTWF0aC5taW4odyAvIChiWzFdWzBdIC0gYlswXVswXSksIGggLyAoYlsxXVsxXSAtIGJbMF1bMV0pKSxcbiAgICAgICAgeCA9ICtleHRlbnRbMF1bMF0gKyAodyAtIGsgKiAoYlsxXVswXSArIGJbMF1bMF0pKSAvIDIsXG4gICAgICAgIHkgPSArZXh0ZW50WzBdWzFdICsgKGggLSBrICogKGJbMV1bMV0gKyBiWzBdWzFdKSkgLyAyO1xuICAgIHByb2plY3Rpb24uc2NhbGUoMTUwICogaykudHJhbnNsYXRlKFt4LCB5XSk7XG4gIH0sIG9iamVjdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaXRTaXplKHByb2plY3Rpb24sIHNpemUsIG9iamVjdCkge1xuICByZXR1cm4gZml0RXh0ZW50KHByb2plY3Rpb24sIFtbMCwgMF0sIHNpemVdLCBvYmplY3QpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZml0V2lkdGgocHJvamVjdGlvbiwgd2lkdGgsIG9iamVjdCkge1xuICByZXR1cm4gZml0KHByb2plY3Rpb24sIGZ1bmN0aW9uKGIpIHtcbiAgICB2YXIgdyA9ICt3aWR0aCxcbiAgICAgICAgayA9IHcgLyAoYlsxXVswXSAtIGJbMF1bMF0pLFxuICAgICAgICB4ID0gKHcgLSBrICogKGJbMV1bMF0gKyBiWzBdWzBdKSkgLyAyLFxuICAgICAgICB5ID0gLWsgKiBiWzBdWzFdO1xuICAgIHByb2plY3Rpb24uc2NhbGUoMTUwICogaykudHJhbnNsYXRlKFt4LCB5XSk7XG4gIH0sIG9iamVjdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaXRIZWlnaHQocHJvamVjdGlvbiwgaGVpZ2h0LCBvYmplY3QpIHtcbiAgcmV0dXJuIGZpdChwcm9qZWN0aW9uLCBmdW5jdGlvbihiKSB7XG4gICAgdmFyIGggPSAraGVpZ2h0LFxuICAgICAgICBrID0gaCAvIChiWzFdWzFdIC0gYlswXVsxXSksXG4gICAgICAgIHggPSAtayAqIGJbMF1bMF0sXG4gICAgICAgIHkgPSAoaCAtIGsgKiAoYlsxXVsxXSArIGJbMF1bMV0pKSAvIDI7XG4gICAgcHJvamVjdGlvbi5zY2FsZSgxNTAgKiBrKS50cmFuc2xhdGUoW3gsIHldKTtcbiAgfSwgb2JqZWN0KTtcbn1cbiIsImltcG9ydCB7YXRhbiwgY29zLCBzaW59IGZyb20gXCIuLi9tYXRoLmpzXCI7XG5pbXBvcnQge2F6aW11dGhhbEludmVydH0gZnJvbSBcIi4vYXppbXV0aGFsLmpzXCI7XG5pbXBvcnQgcHJvamVjdGlvbiBmcm9tIFwiLi9pbmRleC5qc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gZ25vbW9uaWNSYXcoeCwgeSkge1xuICB2YXIgY3kgPSBjb3MoeSksIGsgPSBjb3MoeCkgKiBjeTtcbiAgcmV0dXJuIFtjeSAqIHNpbih4KSAvIGssIHNpbih5KSAvIGtdO1xufVxuXG5nbm9tb25pY1Jhdy5pbnZlcnQgPSBhemltdXRoYWxJbnZlcnQoYXRhbik7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gcHJvamVjdGlvbihnbm9tb25pY1JhdylcbiAgICAgIC5zY2FsZSgxNDQuMDQ5KVxuICAgICAgLmNsaXBBbmdsZSg2MCk7XG59XG4iLCJpbXBvcnQgY2xpcFJlY3RhbmdsZSBmcm9tIFwiLi4vY2xpcC9yZWN0YW5nbGUuanNcIjtcbmltcG9ydCBpZGVudGl0eSBmcm9tIFwiLi4vaWRlbnRpdHkuanNcIjtcbmltcG9ydCB7dHJhbnNmb3JtZXJ9IGZyb20gXCIuLi90cmFuc2Zvcm0uanNcIjtcbmltcG9ydCB7Zml0RXh0ZW50LCBmaXRTaXplLCBmaXRXaWR0aCwgZml0SGVpZ2h0fSBmcm9tIFwiLi9maXQuanNcIjtcbmltcG9ydCB7Y29zLCBkZWdyZWVzLCByYWRpYW5zLCBzaW59IGZyb20gXCIuLi9tYXRoLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgayA9IDEsIHR4ID0gMCwgdHkgPSAwLCBzeCA9IDEsIHN5ID0gMSwgLy8gc2NhbGUsIHRyYW5zbGF0ZSBhbmQgcmVmbGVjdFxuICAgICAgYWxwaGEgPSAwLCBjYSwgc2EsIC8vIGFuZ2xlXG4gICAgICB4MCA9IG51bGwsIHkwLCB4MSwgeTEsIC8vIGNsaXAgZXh0ZW50XG4gICAgICBreCA9IDEsIGt5ID0gMSxcbiAgICAgIHRyYW5zZm9ybSA9IHRyYW5zZm9ybWVyKHtcbiAgICAgICAgcG9pbnQ6IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICAgICAgICB2YXIgcCA9IHByb2plY3Rpb24oW3gsIHldKVxuICAgICAgICAgIHRoaXMuc3RyZWFtLnBvaW50KHBbMF0sIHBbMV0pO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIHBvc3RjbGlwID0gaWRlbnRpdHksXG4gICAgICBjYWNoZSxcbiAgICAgIGNhY2hlU3RyZWFtO1xuXG4gIGZ1bmN0aW9uIHJlc2V0KCkge1xuICAgIGt4ID0gayAqIHN4O1xuICAgIGt5ID0gayAqIHN5O1xuICAgIGNhY2hlID0gY2FjaGVTdHJlYW0gPSBudWxsO1xuICAgIHJldHVybiBwcm9qZWN0aW9uO1xuICB9XG5cbiAgZnVuY3Rpb24gcHJvamVjdGlvbiAocCkge1xuICAgIHZhciB4ID0gcFswXSAqIGt4LCB5ID0gcFsxXSAqIGt5O1xuICAgIGlmIChhbHBoYSkge1xuICAgICAgdmFyIHQgPSB5ICogY2EgLSB4ICogc2E7XG4gICAgICB4ID0geCAqIGNhICsgeSAqIHNhO1xuICAgICAgeSA9IHQ7XG4gICAgfSAgICBcbiAgICByZXR1cm4gW3ggKyB0eCwgeSArIHR5XTtcbiAgfVxuICBwcm9qZWN0aW9uLmludmVydCA9IGZ1bmN0aW9uKHApIHtcbiAgICB2YXIgeCA9IHBbMF0gLSB0eCwgeSA9IHBbMV0gLSB0eTtcbiAgICBpZiAoYWxwaGEpIHtcbiAgICAgIHZhciB0ID0geSAqIGNhICsgeCAqIHNhO1xuICAgICAgeCA9IHggKiBjYSAtIHkgKiBzYTtcbiAgICAgIHkgPSB0O1xuICAgIH1cbiAgICByZXR1cm4gW3ggLyBreCwgeSAvIGt5XTtcbiAgfTtcbiAgcHJvamVjdGlvbi5zdHJlYW0gPSBmdW5jdGlvbihzdHJlYW0pIHtcbiAgICByZXR1cm4gY2FjaGUgJiYgY2FjaGVTdHJlYW0gPT09IHN0cmVhbSA/IGNhY2hlIDogY2FjaGUgPSB0cmFuc2Zvcm0ocG9zdGNsaXAoY2FjaGVTdHJlYW0gPSBzdHJlYW0pKTtcbiAgfTtcbiAgcHJvamVjdGlvbi5wb3N0Y2xpcCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChwb3N0Y2xpcCA9IF8sIHgwID0geTAgPSB4MSA9IHkxID0gbnVsbCwgcmVzZXQoKSkgOiBwb3N0Y2xpcDtcbiAgfTtcbiAgcHJvamVjdGlvbi5jbGlwRXh0ZW50ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHBvc3RjbGlwID0gXyA9PSBudWxsID8gKHgwID0geTAgPSB4MSA9IHkxID0gbnVsbCwgaWRlbnRpdHkpIDogY2xpcFJlY3RhbmdsZSh4MCA9ICtfWzBdWzBdLCB5MCA9ICtfWzBdWzFdLCB4MSA9ICtfWzFdWzBdLCB5MSA9ICtfWzFdWzFdKSwgcmVzZXQoKSkgOiB4MCA9PSBudWxsID8gbnVsbCA6IFtbeDAsIHkwXSwgW3gxLCB5MV1dO1xuICB9O1xuICBwcm9qZWN0aW9uLnNjYWxlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGsgPSArXywgcmVzZXQoKSkgOiBrO1xuICB9O1xuICBwcm9qZWN0aW9uLnRyYW5zbGF0ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0eCA9ICtfWzBdLCB0eSA9ICtfWzFdLCByZXNldCgpKSA6IFt0eCwgdHldO1xuICB9XG4gIHByb2plY3Rpb24uYW5nbGUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoYWxwaGEgPSBfICUgMzYwICogcmFkaWFucywgc2EgPSBzaW4oYWxwaGEpLCBjYSA9IGNvcyhhbHBoYSksIHJlc2V0KCkpIDogYWxwaGEgKiBkZWdyZWVzO1xuICB9O1xuICBwcm9qZWN0aW9uLnJlZmxlY3RYID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHN4ID0gXyA/IC0xIDogMSwgcmVzZXQoKSkgOiBzeCA8IDA7XG4gIH07XG4gIHByb2plY3Rpb24ucmVmbGVjdFkgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoc3kgPSBfID8gLTEgOiAxLCByZXNldCgpKSA6IHN5IDwgMDtcbiAgfTtcbiAgcHJvamVjdGlvbi5maXRFeHRlbnQgPSBmdW5jdGlvbihleHRlbnQsIG9iamVjdCkge1xuICAgIHJldHVybiBmaXRFeHRlbnQocHJvamVjdGlvbiwgZXh0ZW50LCBvYmplY3QpO1xuICB9O1xuICBwcm9qZWN0aW9uLmZpdFNpemUgPSBmdW5jdGlvbihzaXplLCBvYmplY3QpIHtcbiAgICByZXR1cm4gZml0U2l6ZShwcm9qZWN0aW9uLCBzaXplLCBvYmplY3QpO1xuICB9O1xuICBwcm9qZWN0aW9uLmZpdFdpZHRoID0gZnVuY3Rpb24od2lkdGgsIG9iamVjdCkge1xuICAgIHJldHVybiBmaXRXaWR0aChwcm9qZWN0aW9uLCB3aWR0aCwgb2JqZWN0KTtcbiAgfTtcbiAgcHJvamVjdGlvbi5maXRIZWlnaHQgPSBmdW5jdGlvbihoZWlnaHQsIG9iamVjdCkge1xuICAgIHJldHVybiBmaXRIZWlnaHQocHJvamVjdGlvbiwgaGVpZ2h0LCBvYmplY3QpO1xuICB9O1xuXG4gIHJldHVybiBwcm9qZWN0aW9uO1xufVxuIiwiaW1wb3J0IGNsaXBBbnRpbWVyaWRpYW4gZnJvbSBcIi4uL2NsaXAvYW50aW1lcmlkaWFuLmpzXCI7XG5pbXBvcnQgY2xpcENpcmNsZSBmcm9tIFwiLi4vY2xpcC9jaXJjbGUuanNcIjtcbmltcG9ydCBjbGlwUmVjdGFuZ2xlIGZyb20gXCIuLi9jbGlwL3JlY3RhbmdsZS5qc1wiO1xuaW1wb3J0IGNvbXBvc2UgZnJvbSBcIi4uL2NvbXBvc2UuanNcIjtcbmltcG9ydCBpZGVudGl0eSBmcm9tIFwiLi4vaWRlbnRpdHkuanNcIjtcbmltcG9ydCB7Y29zLCBkZWdyZWVzLCByYWRpYW5zLCBzaW4sIHNxcnR9IGZyb20gXCIuLi9tYXRoLmpzXCI7XG5pbXBvcnQge3JvdGF0ZVJhZGlhbnN9IGZyb20gXCIuLi9yb3RhdGlvbi5qc1wiO1xuaW1wb3J0IHt0cmFuc2Zvcm1lcn0gZnJvbSBcIi4uL3RyYW5zZm9ybS5qc1wiO1xuaW1wb3J0IHtmaXRFeHRlbnQsIGZpdFNpemUsIGZpdFdpZHRoLCBmaXRIZWlnaHR9IGZyb20gXCIuL2ZpdC5qc1wiO1xuaW1wb3J0IHJlc2FtcGxlIGZyb20gXCIuL3Jlc2FtcGxlLmpzXCI7XG5cbnZhciB0cmFuc2Zvcm1SYWRpYW5zID0gdHJhbnNmb3JtZXIoe1xuICBwb2ludDogZnVuY3Rpb24oeCwgeSkge1xuICAgIHRoaXMuc3RyZWFtLnBvaW50KHggKiByYWRpYW5zLCB5ICogcmFkaWFucyk7XG4gIH1cbn0pO1xuXG5mdW5jdGlvbiB0cmFuc2Zvcm1Sb3RhdGUocm90YXRlKSB7XG4gIHJldHVybiB0cmFuc2Zvcm1lcih7XG4gICAgcG9pbnQ6IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICAgIHZhciByID0gcm90YXRlKHgsIHkpO1xuICAgICAgcmV0dXJuIHRoaXMuc3RyZWFtLnBvaW50KHJbMF0sIHJbMV0pO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHNjYWxlVHJhbnNsYXRlKGssIGR4LCBkeSwgc3gsIHN5KSB7XG4gIGZ1bmN0aW9uIHRyYW5zZm9ybSh4LCB5KSB7XG4gICAgeCAqPSBzeDsgeSAqPSBzeTtcbiAgICByZXR1cm4gW2R4ICsgayAqIHgsIGR5IC0gayAqIHldO1xuICB9XG4gIHRyYW5zZm9ybS5pbnZlcnQgPSBmdW5jdGlvbih4LCB5KSB7XG4gICAgcmV0dXJuIFsoeCAtIGR4KSAvIGsgKiBzeCwgKGR5IC0geSkgLyBrICogc3ldO1xuICB9O1xuICByZXR1cm4gdHJhbnNmb3JtO1xufVxuXG5mdW5jdGlvbiBzY2FsZVRyYW5zbGF0ZVJvdGF0ZShrLCBkeCwgZHksIHN4LCBzeSwgYWxwaGEpIHtcbiAgdmFyIGNvc0FscGhhID0gY29zKGFscGhhKSxcbiAgICAgIHNpbkFscGhhID0gc2luKGFscGhhKSxcbiAgICAgIGEgPSBjb3NBbHBoYSAqIGssXG4gICAgICBiID0gc2luQWxwaGEgKiBrLFxuICAgICAgYWkgPSBjb3NBbHBoYSAvIGssXG4gICAgICBiaSA9IHNpbkFscGhhIC8gayxcbiAgICAgIGNpID0gKHNpbkFscGhhICogZHkgLSBjb3NBbHBoYSAqIGR4KSAvIGssXG4gICAgICBmaSA9IChzaW5BbHBoYSAqIGR4ICsgY29zQWxwaGEgKiBkeSkgLyBrO1xuICBmdW5jdGlvbiB0cmFuc2Zvcm0oeCwgeSkge1xuICAgIHggKj0gc3g7IHkgKj0gc3k7XG4gICAgcmV0dXJuIFthICogeCAtIGIgKiB5ICsgZHgsIGR5IC0gYiAqIHggLSBhICogeV07XG4gIH1cbiAgdHJhbnNmb3JtLmludmVydCA9IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICByZXR1cm4gW3N4ICogKGFpICogeCAtIGJpICogeSArIGNpKSwgc3kgKiAoZmkgLSBiaSAqIHggLSBhaSAqIHkpXTtcbiAgfTtcbiAgcmV0dXJuIHRyYW5zZm9ybTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcHJvamVjdGlvbihwcm9qZWN0KSB7XG4gIHJldHVybiBwcm9qZWN0aW9uTXV0YXRvcihmdW5jdGlvbigpIHsgcmV0dXJuIHByb2plY3Q7IH0pKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9qZWN0aW9uTXV0YXRvcihwcm9qZWN0QXQpIHtcbiAgdmFyIHByb2plY3QsXG4gICAgICBrID0gMTUwLCAvLyBzY2FsZVxuICAgICAgeCA9IDQ4MCwgeSA9IDI1MCwgLy8gdHJhbnNsYXRlXG4gICAgICBsYW1iZGEgPSAwLCBwaGkgPSAwLCAvLyBjZW50ZXJcbiAgICAgIGRlbHRhTGFtYmRhID0gMCwgZGVsdGFQaGkgPSAwLCBkZWx0YUdhbW1hID0gMCwgcm90YXRlLCAvLyBwcmUtcm90YXRlXG4gICAgICBhbHBoYSA9IDAsIC8vIHBvc3Qtcm90YXRlIGFuZ2xlXG4gICAgICBzeCA9IDEsIC8vIHJlZmxlY3RYXG4gICAgICBzeSA9IDEsIC8vIHJlZmxlY3RYXG4gICAgICB0aGV0YSA9IG51bGwsIHByZWNsaXAgPSBjbGlwQW50aW1lcmlkaWFuLCAvLyBwcmUtY2xpcCBhbmdsZVxuICAgICAgeDAgPSBudWxsLCB5MCwgeDEsIHkxLCBwb3N0Y2xpcCA9IGlkZW50aXR5LCAvLyBwb3N0LWNsaXAgZXh0ZW50XG4gICAgICBkZWx0YTIgPSAwLjUsIC8vIHByZWNpc2lvblxuICAgICAgcHJvamVjdFJlc2FtcGxlLFxuICAgICAgcHJvamVjdFRyYW5zZm9ybSxcbiAgICAgIHByb2plY3RSb3RhdGVUcmFuc2Zvcm0sXG4gICAgICBjYWNoZSxcbiAgICAgIGNhY2hlU3RyZWFtO1xuXG4gIGZ1bmN0aW9uIHByb2plY3Rpb24ocG9pbnQpIHtcbiAgICByZXR1cm4gcHJvamVjdFJvdGF0ZVRyYW5zZm9ybShwb2ludFswXSAqIHJhZGlhbnMsIHBvaW50WzFdICogcmFkaWFucyk7XG4gIH1cblxuICBmdW5jdGlvbiBpbnZlcnQocG9pbnQpIHtcbiAgICBwb2ludCA9IHByb2plY3RSb3RhdGVUcmFuc2Zvcm0uaW52ZXJ0KHBvaW50WzBdLCBwb2ludFsxXSk7XG4gICAgcmV0dXJuIHBvaW50ICYmIFtwb2ludFswXSAqIGRlZ3JlZXMsIHBvaW50WzFdICogZGVncmVlc107XG4gIH1cblxuICBwcm9qZWN0aW9uLnN0cmVhbSA9IGZ1bmN0aW9uKHN0cmVhbSkge1xuICAgIHJldHVybiBjYWNoZSAmJiBjYWNoZVN0cmVhbSA9PT0gc3RyZWFtID8gY2FjaGUgOiBjYWNoZSA9IHRyYW5zZm9ybVJhZGlhbnModHJhbnNmb3JtUm90YXRlKHJvdGF0ZSkocHJlY2xpcChwcm9qZWN0UmVzYW1wbGUocG9zdGNsaXAoY2FjaGVTdHJlYW0gPSBzdHJlYW0pKSkpKTtcbiAgfTtcblxuICBwcm9qZWN0aW9uLnByZWNsaXAgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocHJlY2xpcCA9IF8sIHRoZXRhID0gdW5kZWZpbmVkLCByZXNldCgpKSA6IHByZWNsaXA7XG4gIH07XG5cbiAgcHJvamVjdGlvbi5wb3N0Y2xpcCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChwb3N0Y2xpcCA9IF8sIHgwID0geTAgPSB4MSA9IHkxID0gbnVsbCwgcmVzZXQoKSkgOiBwb3N0Y2xpcDtcbiAgfTtcblxuICBwcm9qZWN0aW9uLmNsaXBBbmdsZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChwcmVjbGlwID0gK18gPyBjbGlwQ2lyY2xlKHRoZXRhID0gXyAqIHJhZGlhbnMpIDogKHRoZXRhID0gbnVsbCwgY2xpcEFudGltZXJpZGlhbiksIHJlc2V0KCkpIDogdGhldGEgKiBkZWdyZWVzO1xuICB9O1xuXG4gIHByb2plY3Rpb24uY2xpcEV4dGVudCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChwb3N0Y2xpcCA9IF8gPT0gbnVsbCA/ICh4MCA9IHkwID0geDEgPSB5MSA9IG51bGwsIGlkZW50aXR5KSA6IGNsaXBSZWN0YW5nbGUoeDAgPSArX1swXVswXSwgeTAgPSArX1swXVsxXSwgeDEgPSArX1sxXVswXSwgeTEgPSArX1sxXVsxXSksIHJlc2V0KCkpIDogeDAgPT0gbnVsbCA/IG51bGwgOiBbW3gwLCB5MF0sIFt4MSwgeTFdXTtcbiAgfTtcblxuICBwcm9qZWN0aW9uLnNjYWxlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGsgPSArXywgcmVjZW50ZXIoKSkgOiBrO1xuICB9O1xuXG4gIHByb2plY3Rpb24udHJhbnNsYXRlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHggPSArX1swXSwgeSA9ICtfWzFdLCByZWNlbnRlcigpKSA6IFt4LCB5XTtcbiAgfTtcblxuICBwcm9qZWN0aW9uLmNlbnRlciA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChsYW1iZGEgPSBfWzBdICUgMzYwICogcmFkaWFucywgcGhpID0gX1sxXSAlIDM2MCAqIHJhZGlhbnMsIHJlY2VudGVyKCkpIDogW2xhbWJkYSAqIGRlZ3JlZXMsIHBoaSAqIGRlZ3JlZXNdO1xuICB9O1xuXG4gIHByb2plY3Rpb24ucm90YXRlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGRlbHRhTGFtYmRhID0gX1swXSAlIDM2MCAqIHJhZGlhbnMsIGRlbHRhUGhpID0gX1sxXSAlIDM2MCAqIHJhZGlhbnMsIGRlbHRhR2FtbWEgPSBfLmxlbmd0aCA+IDIgPyBfWzJdICUgMzYwICogcmFkaWFucyA6IDAsIHJlY2VudGVyKCkpIDogW2RlbHRhTGFtYmRhICogZGVncmVlcywgZGVsdGFQaGkgKiBkZWdyZWVzLCBkZWx0YUdhbW1hICogZGVncmVlc107XG4gIH07XG5cbiAgcHJvamVjdGlvbi5hbmdsZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChhbHBoYSA9IF8gJSAzNjAgKiByYWRpYW5zLCByZWNlbnRlcigpKSA6IGFscGhhICogZGVncmVlcztcbiAgfTtcblxuICBwcm9qZWN0aW9uLnJlZmxlY3RYID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHN4ID0gXyA/IC0xIDogMSwgcmVjZW50ZXIoKSkgOiBzeCA8IDA7XG4gIH07XG5cbiAgcHJvamVjdGlvbi5yZWZsZWN0WSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChzeSA9IF8gPyAtMSA6IDEsIHJlY2VudGVyKCkpIDogc3kgPCAwO1xuICB9O1xuXG4gIHByb2plY3Rpb24ucHJlY2lzaW9uID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHByb2plY3RSZXNhbXBsZSA9IHJlc2FtcGxlKHByb2plY3RUcmFuc2Zvcm0sIGRlbHRhMiA9IF8gKiBfKSwgcmVzZXQoKSkgOiBzcXJ0KGRlbHRhMik7XG4gIH07XG5cbiAgcHJvamVjdGlvbi5maXRFeHRlbnQgPSBmdW5jdGlvbihleHRlbnQsIG9iamVjdCkge1xuICAgIHJldHVybiBmaXRFeHRlbnQocHJvamVjdGlvbiwgZXh0ZW50LCBvYmplY3QpO1xuICB9O1xuXG4gIHByb2plY3Rpb24uZml0U2l6ZSA9IGZ1bmN0aW9uKHNpemUsIG9iamVjdCkge1xuICAgIHJldHVybiBmaXRTaXplKHByb2plY3Rpb24sIHNpemUsIG9iamVjdCk7XG4gIH07XG5cbiAgcHJvamVjdGlvbi5maXRXaWR0aCA9IGZ1bmN0aW9uKHdpZHRoLCBvYmplY3QpIHtcbiAgICByZXR1cm4gZml0V2lkdGgocHJvamVjdGlvbiwgd2lkdGgsIG9iamVjdCk7XG4gIH07XG5cbiAgcHJvamVjdGlvbi5maXRIZWlnaHQgPSBmdW5jdGlvbihoZWlnaHQsIG9iamVjdCkge1xuICAgIHJldHVybiBmaXRIZWlnaHQocHJvamVjdGlvbiwgaGVpZ2h0LCBvYmplY3QpO1xuICB9O1xuXG4gIGZ1bmN0aW9uIHJlY2VudGVyKCkge1xuICAgIHZhciBjZW50ZXIgPSBzY2FsZVRyYW5zbGF0ZVJvdGF0ZShrLCAwLCAwLCBzeCwgc3ksIGFscGhhKS5hcHBseShudWxsLCBwcm9qZWN0KGxhbWJkYSwgcGhpKSksXG4gICAgICAgIHRyYW5zZm9ybSA9IChhbHBoYSA/IHNjYWxlVHJhbnNsYXRlUm90YXRlIDogc2NhbGVUcmFuc2xhdGUpKGssIHggLSBjZW50ZXJbMF0sIHkgLSBjZW50ZXJbMV0sIHN4LCBzeSwgYWxwaGEpO1xuICAgIHJvdGF0ZSA9IHJvdGF0ZVJhZGlhbnMoZGVsdGFMYW1iZGEsIGRlbHRhUGhpLCBkZWx0YUdhbW1hKTtcbiAgICBwcm9qZWN0VHJhbnNmb3JtID0gY29tcG9zZShwcm9qZWN0LCB0cmFuc2Zvcm0pO1xuICAgIHByb2plY3RSb3RhdGVUcmFuc2Zvcm0gPSBjb21wb3NlKHJvdGF0ZSwgcHJvamVjdFRyYW5zZm9ybSk7XG4gICAgcHJvamVjdFJlc2FtcGxlID0gcmVzYW1wbGUocHJvamVjdFRyYW5zZm9ybSwgZGVsdGEyKTtcbiAgICByZXR1cm4gcmVzZXQoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc2V0KCkge1xuICAgIGNhY2hlID0gY2FjaGVTdHJlYW0gPSBudWxsO1xuICAgIHJldHVybiBwcm9qZWN0aW9uO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHByb2plY3QgPSBwcm9qZWN0QXQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBwcm9qZWN0aW9uLmludmVydCA9IHByb2plY3QuaW52ZXJ0ICYmIGludmVydDtcbiAgICByZXR1cm4gcmVjZW50ZXIoKTtcbiAgfTtcbn1cbiIsImltcG9ydCB7YXRhbiwgZXhwLCBoYWxmUGksIGxvZywgcGksIHRhbiwgdGF1fSBmcm9tIFwiLi4vbWF0aC5qc1wiO1xuaW1wb3J0IHJvdGF0aW9uIGZyb20gXCIuLi9yb3RhdGlvbi5qc1wiO1xuaW1wb3J0IHByb2plY3Rpb24gZnJvbSBcIi4vaW5kZXguanNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIG1lcmNhdG9yUmF3KGxhbWJkYSwgcGhpKSB7XG4gIHJldHVybiBbbGFtYmRhLCBsb2codGFuKChoYWxmUGkgKyBwaGkpIC8gMikpXTtcbn1cblxubWVyY2F0b3JSYXcuaW52ZXJ0ID0gZnVuY3Rpb24oeCwgeSkge1xuICByZXR1cm4gW3gsIDIgKiBhdGFuKGV4cCh5KSkgLSBoYWxmUGldO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiBtZXJjYXRvclByb2plY3Rpb24obWVyY2F0b3JSYXcpXG4gICAgICAuc2NhbGUoOTYxIC8gdGF1KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1lcmNhdG9yUHJvamVjdGlvbihwcm9qZWN0KSB7XG4gIHZhciBtID0gcHJvamVjdGlvbihwcm9qZWN0KSxcbiAgICAgIGNlbnRlciA9IG0uY2VudGVyLFxuICAgICAgc2NhbGUgPSBtLnNjYWxlLFxuICAgICAgdHJhbnNsYXRlID0gbS50cmFuc2xhdGUsXG4gICAgICBjbGlwRXh0ZW50ID0gbS5jbGlwRXh0ZW50LFxuICAgICAgeDAgPSBudWxsLCB5MCwgeDEsIHkxOyAvLyBjbGlwIGV4dGVudFxuXG4gIG0uc2NhbGUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoc2NhbGUoXyksIHJlY2xpcCgpKSA6IHNjYWxlKCk7XG4gIH07XG5cbiAgbS50cmFuc2xhdGUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodHJhbnNsYXRlKF8pLCByZWNsaXAoKSkgOiB0cmFuc2xhdGUoKTtcbiAgfTtcblxuICBtLmNlbnRlciA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChjZW50ZXIoXyksIHJlY2xpcCgpKSA6IGNlbnRlcigpO1xuICB9O1xuXG4gIG0uY2xpcEV4dGVudCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICgoXyA9PSBudWxsID8geDAgPSB5MCA9IHgxID0geTEgPSBudWxsIDogKHgwID0gK19bMF1bMF0sIHkwID0gK19bMF1bMV0sIHgxID0gK19bMV1bMF0sIHkxID0gK19bMV1bMV0pKSwgcmVjbGlwKCkpIDogeDAgPT0gbnVsbCA/IG51bGwgOiBbW3gwLCB5MF0sIFt4MSwgeTFdXTtcbiAgfTtcblxuICBmdW5jdGlvbiByZWNsaXAoKSB7XG4gICAgdmFyIGsgPSBwaSAqIHNjYWxlKCksXG4gICAgICAgIHQgPSBtKHJvdGF0aW9uKG0ucm90YXRlKCkpLmludmVydChbMCwgMF0pKTtcbiAgICByZXR1cm4gY2xpcEV4dGVudCh4MCA9PSBudWxsXG4gICAgICAgID8gW1t0WzBdIC0gaywgdFsxXSAtIGtdLCBbdFswXSArIGssIHRbMV0gKyBrXV0gOiBwcm9qZWN0ID09PSBtZXJjYXRvclJhd1xuICAgICAgICA/IFtbTWF0aC5tYXgodFswXSAtIGssIHgwKSwgeTBdLCBbTWF0aC5taW4odFswXSArIGssIHgxKSwgeTFdXVxuICAgICAgICA6IFtbeDAsIE1hdGgubWF4KHRbMV0gLSBrLCB5MCldLCBbeDEsIE1hdGgubWluKHRbMV0gKyBrLCB5MSldXSk7XG4gIH1cblxuICByZXR1cm4gcmVjbGlwKCk7XG59XG4iLCJpbXBvcnQgcHJvamVjdGlvbiBmcm9tIFwiLi9pbmRleC5qc1wiO1xuaW1wb3J0IHthYnMsIGVwc2lsb259IGZyb20gXCIuLi9tYXRoLmpzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBuYXR1cmFsRWFydGgxUmF3KGxhbWJkYSwgcGhpKSB7XG4gIHZhciBwaGkyID0gcGhpICogcGhpLCBwaGk0ID0gcGhpMiAqIHBoaTI7XG4gIHJldHVybiBbXG4gICAgbGFtYmRhICogKDAuODcwNyAtIDAuMTMxOTc5ICogcGhpMiArIHBoaTQgKiAoLTAuMDEzNzkxICsgcGhpNCAqICgwLjAwMzk3MSAqIHBoaTIgLSAwLjAwMTUyOSAqIHBoaTQpKSksXG4gICAgcGhpICogKDEuMDA3MjI2ICsgcGhpMiAqICgwLjAxNTA4NSArIHBoaTQgKiAoLTAuMDQ0NDc1ICsgMC4wMjg4NzQgKiBwaGkyIC0gMC4wMDU5MTYgKiBwaGk0KSkpXG4gIF07XG59XG5cbm5hdHVyYWxFYXJ0aDFSYXcuaW52ZXJ0ID0gZnVuY3Rpb24oeCwgeSkge1xuICB2YXIgcGhpID0geSwgaSA9IDI1LCBkZWx0YTtcbiAgZG8ge1xuICAgIHZhciBwaGkyID0gcGhpICogcGhpLCBwaGk0ID0gcGhpMiAqIHBoaTI7XG4gICAgcGhpIC09IGRlbHRhID0gKHBoaSAqICgxLjAwNzIyNiArIHBoaTIgKiAoMC4wMTUwODUgKyBwaGk0ICogKC0wLjA0NDQ3NSArIDAuMDI4ODc0ICogcGhpMiAtIDAuMDA1OTE2ICogcGhpNCkpKSAtIHkpIC9cbiAgICAgICAgKDEuMDA3MjI2ICsgcGhpMiAqICgwLjAxNTA4NSAqIDMgKyBwaGk0ICogKC0wLjA0NDQ3NSAqIDcgKyAwLjAyODg3NCAqIDkgKiBwaGkyIC0gMC4wMDU5MTYgKiAxMSAqIHBoaTQpKSk7XG4gIH0gd2hpbGUgKGFicyhkZWx0YSkgPiBlcHNpbG9uICYmIC0taSA+IDApO1xuICByZXR1cm4gW1xuICAgIHggLyAoMC44NzA3ICsgKHBoaTIgPSBwaGkgKiBwaGkpICogKC0wLjEzMTk3OSArIHBoaTIgKiAoLTAuMDEzNzkxICsgcGhpMiAqIHBoaTIgKiBwaGkyICogKDAuMDAzOTcxIC0gMC4wMDE1MjkgKiBwaGkyKSkpKSxcbiAgICBwaGlcbiAgXTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gcHJvamVjdGlvbihuYXR1cmFsRWFydGgxUmF3KVxuICAgICAgLnNjYWxlKDE3NS4yOTUpO1xufVxuIiwiaW1wb3J0IHthc2luLCBjb3MsIGVwc2lsb24sIHNpbn0gZnJvbSBcIi4uL21hdGguanNcIjtcbmltcG9ydCB7YXppbXV0aGFsSW52ZXJ0fSBmcm9tIFwiLi9hemltdXRoYWwuanNcIjtcbmltcG9ydCBwcm9qZWN0aW9uIGZyb20gXCIuL2luZGV4LmpzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBvcnRob2dyYXBoaWNSYXcoeCwgeSkge1xuICByZXR1cm4gW2Nvcyh5KSAqIHNpbih4KSwgc2luKHkpXTtcbn1cblxub3J0aG9ncmFwaGljUmF3LmludmVydCA9IGF6aW11dGhhbEludmVydChhc2luKTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiBwcm9qZWN0aW9uKG9ydGhvZ3JhcGhpY1JhdylcbiAgICAgIC5zY2FsZSgyNDkuNSlcbiAgICAgIC5jbGlwQW5nbGUoOTAgKyBlcHNpbG9uKTtcbn1cbiIsImltcG9ydCB7Y2FydGVzaWFufSBmcm9tIFwiLi4vY2FydGVzaWFuLmpzXCI7XG5pbXBvcnQge2FicywgYXNpbiwgYXRhbjIsIGNvcywgZXBzaWxvbiwgcmFkaWFucywgc3FydH0gZnJvbSBcIi4uL21hdGguanNcIjtcbmltcG9ydCB7dHJhbnNmb3JtZXJ9IGZyb20gXCIuLi90cmFuc2Zvcm0uanNcIjtcblxudmFyIG1heERlcHRoID0gMTYsIC8vIG1heGltdW0gZGVwdGggb2Ygc3ViZGl2aXNpb25cbiAgICBjb3NNaW5EaXN0YW5jZSA9IGNvcygzMCAqIHJhZGlhbnMpOyAvLyBjb3MobWluaW11bSBhbmd1bGFyIGRpc3RhbmNlKVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihwcm9qZWN0LCBkZWx0YTIpIHtcbiAgcmV0dXJuICtkZWx0YTIgPyByZXNhbXBsZShwcm9qZWN0LCBkZWx0YTIpIDogcmVzYW1wbGVOb25lKHByb2plY3QpO1xufVxuXG5mdW5jdGlvbiByZXNhbXBsZU5vbmUocHJvamVjdCkge1xuICByZXR1cm4gdHJhbnNmb3JtZXIoe1xuICAgIHBvaW50OiBmdW5jdGlvbih4LCB5KSB7XG4gICAgICB4ID0gcHJvamVjdCh4LCB5KTtcbiAgICAgIHRoaXMuc3RyZWFtLnBvaW50KHhbMF0sIHhbMV0pO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlc2FtcGxlKHByb2plY3QsIGRlbHRhMikge1xuXG4gIGZ1bmN0aW9uIHJlc2FtcGxlTGluZVRvKHgwLCB5MCwgbGFtYmRhMCwgYTAsIGIwLCBjMCwgeDEsIHkxLCBsYW1iZGExLCBhMSwgYjEsIGMxLCBkZXB0aCwgc3RyZWFtKSB7XG4gICAgdmFyIGR4ID0geDEgLSB4MCxcbiAgICAgICAgZHkgPSB5MSAtIHkwLFxuICAgICAgICBkMiA9IGR4ICogZHggKyBkeSAqIGR5O1xuICAgIGlmIChkMiA+IDQgKiBkZWx0YTIgJiYgZGVwdGgtLSkge1xuICAgICAgdmFyIGEgPSBhMCArIGExLFxuICAgICAgICAgIGIgPSBiMCArIGIxLFxuICAgICAgICAgIGMgPSBjMCArIGMxLFxuICAgICAgICAgIG0gPSBzcXJ0KGEgKiBhICsgYiAqIGIgKyBjICogYyksXG4gICAgICAgICAgcGhpMiA9IGFzaW4oYyAvPSBtKSxcbiAgICAgICAgICBsYW1iZGEyID0gYWJzKGFicyhjKSAtIDEpIDwgZXBzaWxvbiB8fCBhYnMobGFtYmRhMCAtIGxhbWJkYTEpIDwgZXBzaWxvbiA/IChsYW1iZGEwICsgbGFtYmRhMSkgLyAyIDogYXRhbjIoYiwgYSksXG4gICAgICAgICAgcCA9IHByb2plY3QobGFtYmRhMiwgcGhpMiksXG4gICAgICAgICAgeDIgPSBwWzBdLFxuICAgICAgICAgIHkyID0gcFsxXSxcbiAgICAgICAgICBkeDIgPSB4MiAtIHgwLFxuICAgICAgICAgIGR5MiA9IHkyIC0geTAsXG4gICAgICAgICAgZHogPSBkeSAqIGR4MiAtIGR4ICogZHkyO1xuICAgICAgaWYgKGR6ICogZHogLyBkMiA+IGRlbHRhMiAvLyBwZXJwZW5kaWN1bGFyIHByb2plY3RlZCBkaXN0YW5jZVxuICAgICAgICAgIHx8IGFicygoZHggKiBkeDIgKyBkeSAqIGR5MikgLyBkMiAtIDAuNSkgPiAwLjMgLy8gbWlkcG9pbnQgY2xvc2UgdG8gYW4gZW5kXG4gICAgICAgICAgfHwgYTAgKiBhMSArIGIwICogYjEgKyBjMCAqIGMxIDwgY29zTWluRGlzdGFuY2UpIHsgLy8gYW5ndWxhciBkaXN0YW5jZVxuICAgICAgICByZXNhbXBsZUxpbmVUbyh4MCwgeTAsIGxhbWJkYTAsIGEwLCBiMCwgYzAsIHgyLCB5MiwgbGFtYmRhMiwgYSAvPSBtLCBiIC89IG0sIGMsIGRlcHRoLCBzdHJlYW0pO1xuICAgICAgICBzdHJlYW0ucG9pbnQoeDIsIHkyKTtcbiAgICAgICAgcmVzYW1wbGVMaW5lVG8oeDIsIHkyLCBsYW1iZGEyLCBhLCBiLCBjLCB4MSwgeTEsIGxhbWJkYTEsIGExLCBiMSwgYzEsIGRlcHRoLCBzdHJlYW0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtKSB7XG4gICAgdmFyIGxhbWJkYTAwLCB4MDAsIHkwMCwgYTAwLCBiMDAsIGMwMCwgLy8gZmlyc3QgcG9pbnRcbiAgICAgICAgbGFtYmRhMCwgeDAsIHkwLCBhMCwgYjAsIGMwOyAvLyBwcmV2aW91cyBwb2ludFxuXG4gICAgdmFyIHJlc2FtcGxlU3RyZWFtID0ge1xuICAgICAgcG9pbnQ6IHBvaW50LFxuICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsXG4gICAgICBsaW5lRW5kOiBsaW5lRW5kLFxuICAgICAgcG9seWdvblN0YXJ0OiBmdW5jdGlvbigpIHsgc3RyZWFtLnBvbHlnb25TdGFydCgpOyByZXNhbXBsZVN0cmVhbS5saW5lU3RhcnQgPSByaW5nU3RhcnQ7IH0sXG4gICAgICBwb2x5Z29uRW5kOiBmdW5jdGlvbigpIHsgc3RyZWFtLnBvbHlnb25FbmQoKTsgcmVzYW1wbGVTdHJlYW0ubGluZVN0YXJ0ID0gbGluZVN0YXJ0OyB9XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIHBvaW50KHgsIHkpIHtcbiAgICAgIHggPSBwcm9qZWN0KHgsIHkpO1xuICAgICAgc3RyZWFtLnBvaW50KHhbMF0sIHhbMV0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpbmVTdGFydCgpIHtcbiAgICAgIHgwID0gTmFOO1xuICAgICAgcmVzYW1wbGVTdHJlYW0ucG9pbnQgPSBsaW5lUG9pbnQ7XG4gICAgICBzdHJlYW0ubGluZVN0YXJ0KCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGluZVBvaW50KGxhbWJkYSwgcGhpKSB7XG4gICAgICB2YXIgYyA9IGNhcnRlc2lhbihbbGFtYmRhLCBwaGldKSwgcCA9IHByb2plY3QobGFtYmRhLCBwaGkpO1xuICAgICAgcmVzYW1wbGVMaW5lVG8oeDAsIHkwLCBsYW1iZGEwLCBhMCwgYjAsIGMwLCB4MCA9IHBbMF0sIHkwID0gcFsxXSwgbGFtYmRhMCA9IGxhbWJkYSwgYTAgPSBjWzBdLCBiMCA9IGNbMV0sIGMwID0gY1syXSwgbWF4RGVwdGgsIHN0cmVhbSk7XG4gICAgICBzdHJlYW0ucG9pbnQoeDAsIHkwKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaW5lRW5kKCkge1xuICAgICAgcmVzYW1wbGVTdHJlYW0ucG9pbnQgPSBwb2ludDtcbiAgICAgIHN0cmVhbS5saW5lRW5kKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmluZ1N0YXJ0KCkge1xuICAgICAgbGluZVN0YXJ0KCk7XG4gICAgICByZXNhbXBsZVN0cmVhbS5wb2ludCA9IHJpbmdQb2ludDtcbiAgICAgIHJlc2FtcGxlU3RyZWFtLmxpbmVFbmQgPSByaW5nRW5kO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJpbmdQb2ludChsYW1iZGEsIHBoaSkge1xuICAgICAgbGluZVBvaW50KGxhbWJkYTAwID0gbGFtYmRhLCBwaGkpLCB4MDAgPSB4MCwgeTAwID0geTAsIGEwMCA9IGEwLCBiMDAgPSBiMCwgYzAwID0gYzA7XG4gICAgICByZXNhbXBsZVN0cmVhbS5wb2ludCA9IGxpbmVQb2ludDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByaW5nRW5kKCkge1xuICAgICAgcmVzYW1wbGVMaW5lVG8oeDAsIHkwLCBsYW1iZGEwLCBhMCwgYjAsIGMwLCB4MDAsIHkwMCwgbGFtYmRhMDAsIGEwMCwgYjAwLCBjMDAsIG1heERlcHRoLCBzdHJlYW0pO1xuICAgICAgcmVzYW1wbGVTdHJlYW0ubGluZUVuZCA9IGxpbmVFbmQ7XG4gICAgICBsaW5lRW5kKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc2FtcGxlU3RyZWFtO1xuICB9O1xufVxuIiwiaW1wb3J0IHthdGFuLCBjb3MsIHNpbn0gZnJvbSBcIi4uL21hdGguanNcIjtcbmltcG9ydCB7YXppbXV0aGFsSW52ZXJ0fSBmcm9tIFwiLi9hemltdXRoYWwuanNcIjtcbmltcG9ydCBwcm9qZWN0aW9uIGZyb20gXCIuL2luZGV4LmpzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGVyZW9ncmFwaGljUmF3KHgsIHkpIHtcbiAgdmFyIGN5ID0gY29zKHkpLCBrID0gMSArIGNvcyh4KSAqIGN5O1xuICByZXR1cm4gW2N5ICogc2luKHgpIC8gaywgc2luKHkpIC8ga107XG59XG5cbnN0ZXJlb2dyYXBoaWNSYXcuaW52ZXJ0ID0gYXppbXV0aGFsSW52ZXJ0KGZ1bmN0aW9uKHopIHtcbiAgcmV0dXJuIDIgKiBhdGFuKHopO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gcHJvamVjdGlvbihzdGVyZW9ncmFwaGljUmF3KVxuICAgICAgLnNjYWxlKDI1MClcbiAgICAgIC5jbGlwQW5nbGUoMTQyKTtcbn1cbiIsImltcG9ydCB7YXRhbiwgZXhwLCBoYWxmUGksIGxvZywgdGFufSBmcm9tIFwiLi4vbWF0aC5qc1wiO1xuaW1wb3J0IHttZXJjYXRvclByb2plY3Rpb259IGZyb20gXCIuL21lcmNhdG9yLmpzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc3ZlcnNlTWVyY2F0b3JSYXcobGFtYmRhLCBwaGkpIHtcbiAgcmV0dXJuIFtsb2codGFuKChoYWxmUGkgKyBwaGkpIC8gMikpLCAtbGFtYmRhXTtcbn1cblxudHJhbnN2ZXJzZU1lcmNhdG9yUmF3LmludmVydCA9IGZ1bmN0aW9uKHgsIHkpIHtcbiAgcmV0dXJuIFsteSwgMiAqIGF0YW4oZXhwKHgpKSAtIGhhbGZQaV07XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIG0gPSBtZXJjYXRvclByb2plY3Rpb24odHJhbnN2ZXJzZU1lcmNhdG9yUmF3KSxcbiAgICAgIGNlbnRlciA9IG0uY2VudGVyLFxuICAgICAgcm90YXRlID0gbS5yb3RhdGU7XG5cbiAgbS5jZW50ZXIgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyBjZW50ZXIoWy1fWzFdLCBfWzBdXSkgOiAoXyA9IGNlbnRlcigpLCBbX1sxXSwgLV9bMF1dKTtcbiAgfTtcblxuICBtLnJvdGF0ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IHJvdGF0ZShbX1swXSwgX1sxXSwgXy5sZW5ndGggPiAyID8gX1syXSArIDkwIDogOTBdKSA6IChfID0gcm90YXRlKCksIFtfWzBdLCBfWzFdLCBfWzJdIC0gOTBdKTtcbiAgfTtcblxuICByZXR1cm4gcm90YXRlKFswLCAwLCA5MF0pXG4gICAgICAuc2NhbGUoMTU5LjE1NSk7XG59XG4iLCJpbXBvcnQgY29tcG9zZSBmcm9tIFwiLi9jb21wb3NlLmpzXCI7XG5pbXBvcnQge2FicywgYXNpbiwgYXRhbjIsIGNvcywgZGVncmVlcywgcGksIHJhZGlhbnMsIHNpbiwgdGF1fSBmcm9tIFwiLi9tYXRoLmpzXCI7XG5cbmZ1bmN0aW9uIHJvdGF0aW9uSWRlbnRpdHkobGFtYmRhLCBwaGkpIHtcbiAgcmV0dXJuIFthYnMobGFtYmRhKSA+IHBpID8gbGFtYmRhICsgTWF0aC5yb3VuZCgtbGFtYmRhIC8gdGF1KSAqIHRhdSA6IGxhbWJkYSwgcGhpXTtcbn1cblxucm90YXRpb25JZGVudGl0eS5pbnZlcnQgPSByb3RhdGlvbklkZW50aXR5O1xuXG5leHBvcnQgZnVuY3Rpb24gcm90YXRlUmFkaWFucyhkZWx0YUxhbWJkYSwgZGVsdGFQaGksIGRlbHRhR2FtbWEpIHtcbiAgcmV0dXJuIChkZWx0YUxhbWJkYSAlPSB0YXUpID8gKGRlbHRhUGhpIHx8IGRlbHRhR2FtbWEgPyBjb21wb3NlKHJvdGF0aW9uTGFtYmRhKGRlbHRhTGFtYmRhKSwgcm90YXRpb25QaGlHYW1tYShkZWx0YVBoaSwgZGVsdGFHYW1tYSkpXG4gICAgOiByb3RhdGlvbkxhbWJkYShkZWx0YUxhbWJkYSkpXG4gICAgOiAoZGVsdGFQaGkgfHwgZGVsdGFHYW1tYSA/IHJvdGF0aW9uUGhpR2FtbWEoZGVsdGFQaGksIGRlbHRhR2FtbWEpXG4gICAgOiByb3RhdGlvbklkZW50aXR5KTtcbn1cblxuZnVuY3Rpb24gZm9yd2FyZFJvdGF0aW9uTGFtYmRhKGRlbHRhTGFtYmRhKSB7XG4gIHJldHVybiBmdW5jdGlvbihsYW1iZGEsIHBoaSkge1xuICAgIHJldHVybiBsYW1iZGEgKz0gZGVsdGFMYW1iZGEsIFtsYW1iZGEgPiBwaSA/IGxhbWJkYSAtIHRhdSA6IGxhbWJkYSA8IC1waSA/IGxhbWJkYSArIHRhdSA6IGxhbWJkYSwgcGhpXTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gcm90YXRpb25MYW1iZGEoZGVsdGFMYW1iZGEpIHtcbiAgdmFyIHJvdGF0aW9uID0gZm9yd2FyZFJvdGF0aW9uTGFtYmRhKGRlbHRhTGFtYmRhKTtcbiAgcm90YXRpb24uaW52ZXJ0ID0gZm9yd2FyZFJvdGF0aW9uTGFtYmRhKC1kZWx0YUxhbWJkYSk7XG4gIHJldHVybiByb3RhdGlvbjtcbn1cblxuZnVuY3Rpb24gcm90YXRpb25QaGlHYW1tYShkZWx0YVBoaSwgZGVsdGFHYW1tYSkge1xuICB2YXIgY29zRGVsdGFQaGkgPSBjb3MoZGVsdGFQaGkpLFxuICAgICAgc2luRGVsdGFQaGkgPSBzaW4oZGVsdGFQaGkpLFxuICAgICAgY29zRGVsdGFHYW1tYSA9IGNvcyhkZWx0YUdhbW1hKSxcbiAgICAgIHNpbkRlbHRhR2FtbWEgPSBzaW4oZGVsdGFHYW1tYSk7XG5cbiAgZnVuY3Rpb24gcm90YXRpb24obGFtYmRhLCBwaGkpIHtcbiAgICB2YXIgY29zUGhpID0gY29zKHBoaSksXG4gICAgICAgIHggPSBjb3MobGFtYmRhKSAqIGNvc1BoaSxcbiAgICAgICAgeSA9IHNpbihsYW1iZGEpICogY29zUGhpLFxuICAgICAgICB6ID0gc2luKHBoaSksXG4gICAgICAgIGsgPSB6ICogY29zRGVsdGFQaGkgKyB4ICogc2luRGVsdGFQaGk7XG4gICAgcmV0dXJuIFtcbiAgICAgIGF0YW4yKHkgKiBjb3NEZWx0YUdhbW1hIC0gayAqIHNpbkRlbHRhR2FtbWEsIHggKiBjb3NEZWx0YVBoaSAtIHogKiBzaW5EZWx0YVBoaSksXG4gICAgICBhc2luKGsgKiBjb3NEZWx0YUdhbW1hICsgeSAqIHNpbkRlbHRhR2FtbWEpXG4gICAgXTtcbiAgfVxuXG4gIHJvdGF0aW9uLmludmVydCA9IGZ1bmN0aW9uKGxhbWJkYSwgcGhpKSB7XG4gICAgdmFyIGNvc1BoaSA9IGNvcyhwaGkpLFxuICAgICAgICB4ID0gY29zKGxhbWJkYSkgKiBjb3NQaGksXG4gICAgICAgIHkgPSBzaW4obGFtYmRhKSAqIGNvc1BoaSxcbiAgICAgICAgeiA9IHNpbihwaGkpLFxuICAgICAgICBrID0geiAqIGNvc0RlbHRhR2FtbWEgLSB5ICogc2luRGVsdGFHYW1tYTtcbiAgICByZXR1cm4gW1xuICAgICAgYXRhbjIoeSAqIGNvc0RlbHRhR2FtbWEgKyB6ICogc2luRGVsdGFHYW1tYSwgeCAqIGNvc0RlbHRhUGhpICsgayAqIHNpbkRlbHRhUGhpKSxcbiAgICAgIGFzaW4oayAqIGNvc0RlbHRhUGhpIC0geCAqIHNpbkRlbHRhUGhpKVxuICAgIF07XG4gIH07XG5cbiAgcmV0dXJuIHJvdGF0aW9uO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihyb3RhdGUpIHtcbiAgcm90YXRlID0gcm90YXRlUmFkaWFucyhyb3RhdGVbMF0gKiByYWRpYW5zLCByb3RhdGVbMV0gKiByYWRpYW5zLCByb3RhdGUubGVuZ3RoID4gMiA/IHJvdGF0ZVsyXSAqIHJhZGlhbnMgOiAwKTtcblxuICBmdW5jdGlvbiBmb3J3YXJkKGNvb3JkaW5hdGVzKSB7XG4gICAgY29vcmRpbmF0ZXMgPSByb3RhdGUoY29vcmRpbmF0ZXNbMF0gKiByYWRpYW5zLCBjb29yZGluYXRlc1sxXSAqIHJhZGlhbnMpO1xuICAgIHJldHVybiBjb29yZGluYXRlc1swXSAqPSBkZWdyZWVzLCBjb29yZGluYXRlc1sxXSAqPSBkZWdyZWVzLCBjb29yZGluYXRlcztcbiAgfVxuXG4gIGZvcndhcmQuaW52ZXJ0ID0gZnVuY3Rpb24oY29vcmRpbmF0ZXMpIHtcbiAgICBjb29yZGluYXRlcyA9IHJvdGF0ZS5pbnZlcnQoY29vcmRpbmF0ZXNbMF0gKiByYWRpYW5zLCBjb29yZGluYXRlc1sxXSAqIHJhZGlhbnMpO1xuICAgIHJldHVybiBjb29yZGluYXRlc1swXSAqPSBkZWdyZWVzLCBjb29yZGluYXRlc1sxXSAqPSBkZWdyZWVzLCBjb29yZGluYXRlcztcbiAgfTtcblxuICByZXR1cm4gZm9yd2FyZDtcbn1cbiIsImZ1bmN0aW9uIHN0cmVhbUdlb21ldHJ5KGdlb21ldHJ5LCBzdHJlYW0pIHtcbiAgaWYgKGdlb21ldHJ5ICYmIHN0cmVhbUdlb21ldHJ5VHlwZS5oYXNPd25Qcm9wZXJ0eShnZW9tZXRyeS50eXBlKSkge1xuICAgIHN0cmVhbUdlb21ldHJ5VHlwZVtnZW9tZXRyeS50eXBlXShnZW9tZXRyeSwgc3RyZWFtKTtcbiAgfVxufVxuXG52YXIgc3RyZWFtT2JqZWN0VHlwZSA9IHtcbiAgRmVhdHVyZTogZnVuY3Rpb24ob2JqZWN0LCBzdHJlYW0pIHtcbiAgICBzdHJlYW1HZW9tZXRyeShvYmplY3QuZ2VvbWV0cnksIHN0cmVhbSk7XG4gIH0sXG4gIEZlYXR1cmVDb2xsZWN0aW9uOiBmdW5jdGlvbihvYmplY3QsIHN0cmVhbSkge1xuICAgIHZhciBmZWF0dXJlcyA9IG9iamVjdC5mZWF0dXJlcywgaSA9IC0xLCBuID0gZmVhdHVyZXMubGVuZ3RoO1xuICAgIHdoaWxlICgrK2kgPCBuKSBzdHJlYW1HZW9tZXRyeShmZWF0dXJlc1tpXS5nZW9tZXRyeSwgc3RyZWFtKTtcbiAgfVxufTtcblxudmFyIHN0cmVhbUdlb21ldHJ5VHlwZSA9IHtcbiAgU3BoZXJlOiBmdW5jdGlvbihvYmplY3QsIHN0cmVhbSkge1xuICAgIHN0cmVhbS5zcGhlcmUoKTtcbiAgfSxcbiAgUG9pbnQ6IGZ1bmN0aW9uKG9iamVjdCwgc3RyZWFtKSB7XG4gICAgb2JqZWN0ID0gb2JqZWN0LmNvb3JkaW5hdGVzO1xuICAgIHN0cmVhbS5wb2ludChvYmplY3RbMF0sIG9iamVjdFsxXSwgb2JqZWN0WzJdKTtcbiAgfSxcbiAgTXVsdGlQb2ludDogZnVuY3Rpb24ob2JqZWN0LCBzdHJlYW0pIHtcbiAgICB2YXIgY29vcmRpbmF0ZXMgPSBvYmplY3QuY29vcmRpbmF0ZXMsIGkgPSAtMSwgbiA9IGNvb3JkaW5hdGVzLmxlbmd0aDtcbiAgICB3aGlsZSAoKytpIDwgbikgb2JqZWN0ID0gY29vcmRpbmF0ZXNbaV0sIHN0cmVhbS5wb2ludChvYmplY3RbMF0sIG9iamVjdFsxXSwgb2JqZWN0WzJdKTtcbiAgfSxcbiAgTGluZVN0cmluZzogZnVuY3Rpb24ob2JqZWN0LCBzdHJlYW0pIHtcbiAgICBzdHJlYW1MaW5lKG9iamVjdC5jb29yZGluYXRlcywgc3RyZWFtLCAwKTtcbiAgfSxcbiAgTXVsdGlMaW5lU3RyaW5nOiBmdW5jdGlvbihvYmplY3QsIHN0cmVhbSkge1xuICAgIHZhciBjb29yZGluYXRlcyA9IG9iamVjdC5jb29yZGluYXRlcywgaSA9IC0xLCBuID0gY29vcmRpbmF0ZXMubGVuZ3RoO1xuICAgIHdoaWxlICgrK2kgPCBuKSBzdHJlYW1MaW5lKGNvb3JkaW5hdGVzW2ldLCBzdHJlYW0sIDApO1xuICB9LFxuICBQb2x5Z29uOiBmdW5jdGlvbihvYmplY3QsIHN0cmVhbSkge1xuICAgIHN0cmVhbVBvbHlnb24ob2JqZWN0LmNvb3JkaW5hdGVzLCBzdHJlYW0pO1xuICB9LFxuICBNdWx0aVBvbHlnb246IGZ1bmN0aW9uKG9iamVjdCwgc3RyZWFtKSB7XG4gICAgdmFyIGNvb3JkaW5hdGVzID0gb2JqZWN0LmNvb3JkaW5hdGVzLCBpID0gLTEsIG4gPSBjb29yZGluYXRlcy5sZW5ndGg7XG4gICAgd2hpbGUgKCsraSA8IG4pIHN0cmVhbVBvbHlnb24oY29vcmRpbmF0ZXNbaV0sIHN0cmVhbSk7XG4gIH0sXG4gIEdlb21ldHJ5Q29sbGVjdGlvbjogZnVuY3Rpb24ob2JqZWN0LCBzdHJlYW0pIHtcbiAgICB2YXIgZ2VvbWV0cmllcyA9IG9iamVjdC5nZW9tZXRyaWVzLCBpID0gLTEsIG4gPSBnZW9tZXRyaWVzLmxlbmd0aDtcbiAgICB3aGlsZSAoKytpIDwgbikgc3RyZWFtR2VvbWV0cnkoZ2VvbWV0cmllc1tpXSwgc3RyZWFtKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gc3RyZWFtTGluZShjb29yZGluYXRlcywgc3RyZWFtLCBjbG9zZWQpIHtcbiAgdmFyIGkgPSAtMSwgbiA9IGNvb3JkaW5hdGVzLmxlbmd0aCAtIGNsb3NlZCwgY29vcmRpbmF0ZTtcbiAgc3RyZWFtLmxpbmVTdGFydCgpO1xuICB3aGlsZSAoKytpIDwgbikgY29vcmRpbmF0ZSA9IGNvb3JkaW5hdGVzW2ldLCBzdHJlYW0ucG9pbnQoY29vcmRpbmF0ZVswXSwgY29vcmRpbmF0ZVsxXSwgY29vcmRpbmF0ZVsyXSk7XG4gIHN0cmVhbS5saW5lRW5kKCk7XG59XG5cbmZ1bmN0aW9uIHN0cmVhbVBvbHlnb24oY29vcmRpbmF0ZXMsIHN0cmVhbSkge1xuICB2YXIgaSA9IC0xLCBuID0gY29vcmRpbmF0ZXMubGVuZ3RoO1xuICBzdHJlYW0ucG9seWdvblN0YXJ0KCk7XG4gIHdoaWxlICgrK2kgPCBuKSBzdHJlYW1MaW5lKGNvb3JkaW5hdGVzW2ldLCBzdHJlYW0sIDEpO1xuICBzdHJlYW0ucG9seWdvbkVuZCgpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihvYmplY3QsIHN0cmVhbSkge1xuICBpZiAob2JqZWN0ICYmIHN0cmVhbU9iamVjdFR5cGUuaGFzT3duUHJvcGVydHkob2JqZWN0LnR5cGUpKSB7XG4gICAgc3RyZWFtT2JqZWN0VHlwZVtvYmplY3QudHlwZV0ob2JqZWN0LCBzdHJlYW0pO1xuICB9IGVsc2Uge1xuICAgIHN0cmVhbUdlb21ldHJ5KG9iamVjdCwgc3RyZWFtKTtcbiAgfVxufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obWV0aG9kcykge1xuICByZXR1cm4ge1xuICAgIHN0cmVhbTogdHJhbnNmb3JtZXIobWV0aG9kcylcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybWVyKG1ldGhvZHMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSkge1xuICAgIHZhciBzID0gbmV3IFRyYW5zZm9ybVN0cmVhbTtcbiAgICBmb3IgKHZhciBrZXkgaW4gbWV0aG9kcykgc1trZXldID0gbWV0aG9kc1trZXldO1xuICAgIHMuc3RyZWFtID0gc3RyZWFtO1xuICAgIHJldHVybiBzO1xuICB9O1xufVxuXG5mdW5jdGlvbiBUcmFuc2Zvcm1TdHJlYW0oKSB7fVxuXG5UcmFuc2Zvcm1TdHJlYW0ucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogVHJhbnNmb3JtU3RyZWFtLFxuICBwb2ludDogZnVuY3Rpb24oeCwgeSkgeyB0aGlzLnN0cmVhbS5wb2ludCh4LCB5KTsgfSxcbiAgc3BoZXJlOiBmdW5jdGlvbigpIHsgdGhpcy5zdHJlYW0uc3BoZXJlKCk7IH0sXG4gIGxpbmVTdGFydDogZnVuY3Rpb24oKSB7IHRoaXMuc3RyZWFtLmxpbmVTdGFydCgpOyB9LFxuICBsaW5lRW5kOiBmdW5jdGlvbigpIHsgdGhpcy5zdHJlYW0ubGluZUVuZCgpOyB9LFxuICBwb2x5Z29uU3RhcnQ6IGZ1bmN0aW9uKCkgeyB0aGlzLnN0cmVhbS5wb2x5Z29uU3RhcnQoKTsgfSxcbiAgcG9seWdvbkVuZDogZnVuY3Rpb24oKSB7IHRoaXMuc3RyZWFtLnBvbHlnb25FbmQoKTsgfVxufTtcbiIsImV4cG9ydCBmdW5jdGlvbiBvcHRpb25hbChmKSB7XG4gIHJldHVybiBmID09IG51bGwgPyBudWxsIDogcmVxdWlyZWQoZik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXF1aXJlZChmKSB7XG4gIGlmICh0eXBlb2YgZiAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgRXJyb3I7XG4gIHJldHVybiBmO1xufVxuIiwiZXhwb3J0IHZhciBzbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTtcblxuZXhwb3J0IGZ1bmN0aW9uIHNodWZmbGUoYXJyYXkpIHtcbiAgdmFyIG0gPSBhcnJheS5sZW5ndGgsXG4gICAgICB0LFxuICAgICAgaTtcblxuICB3aGlsZSAobSkge1xuICAgIGkgPSBNYXRoLnJhbmRvbSgpICogbS0tIHwgMDtcbiAgICB0ID0gYXJyYXlbbV07XG4gICAgYXJyYXlbbV0gPSBhcnJheVtpXTtcbiAgICBhcnJheVtpXSA9IHQ7XG4gIH1cblxuICByZXR1cm4gYXJyYXk7XG59XG4iLCJmdW5jdGlvbiBkZWZhdWx0U2VwYXJhdGlvbihhLCBiKSB7XG4gIHJldHVybiBhLnBhcmVudCA9PT0gYi5wYXJlbnQgPyAxIDogMjtcbn1cblxuZnVuY3Rpb24gbWVhblgoY2hpbGRyZW4pIHtcbiAgcmV0dXJuIGNoaWxkcmVuLnJlZHVjZShtZWFuWFJlZHVjZSwgMCkgLyBjaGlsZHJlbi5sZW5ndGg7XG59XG5cbmZ1bmN0aW9uIG1lYW5YUmVkdWNlKHgsIGMpIHtcbiAgcmV0dXJuIHggKyBjLng7XG59XG5cbmZ1bmN0aW9uIG1heFkoY2hpbGRyZW4pIHtcbiAgcmV0dXJuIDEgKyBjaGlsZHJlbi5yZWR1Y2UobWF4WVJlZHVjZSwgMCk7XG59XG5cbmZ1bmN0aW9uIG1heFlSZWR1Y2UoeSwgYykge1xuICByZXR1cm4gTWF0aC5tYXgoeSwgYy55KTtcbn1cblxuZnVuY3Rpb24gbGVhZkxlZnQobm9kZSkge1xuICB2YXIgY2hpbGRyZW47XG4gIHdoaWxlIChjaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW4pIG5vZGUgPSBjaGlsZHJlblswXTtcbiAgcmV0dXJuIG5vZGU7XG59XG5cbmZ1bmN0aW9uIGxlYWZSaWdodChub2RlKSB7XG4gIHZhciBjaGlsZHJlbjtcbiAgd2hpbGUgKGNoaWxkcmVuID0gbm9kZS5jaGlsZHJlbikgbm9kZSA9IGNoaWxkcmVuW2NoaWxkcmVuLmxlbmd0aCAtIDFdO1xuICByZXR1cm4gbm9kZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBzZXBhcmF0aW9uID0gZGVmYXVsdFNlcGFyYXRpb24sXG4gICAgICBkeCA9IDEsXG4gICAgICBkeSA9IDEsXG4gICAgICBub2RlU2l6ZSA9IGZhbHNlO1xuXG4gIGZ1bmN0aW9uIGNsdXN0ZXIocm9vdCkge1xuICAgIHZhciBwcmV2aW91c05vZGUsXG4gICAgICAgIHggPSAwO1xuXG4gICAgLy8gRmlyc3Qgd2FsaywgY29tcHV0aW5nIHRoZSBpbml0aWFsIHggJiB5IHZhbHVlcy5cbiAgICByb290LmVhY2hBZnRlcihmdW5jdGlvbihub2RlKSB7XG4gICAgICB2YXIgY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuO1xuICAgICAgaWYgKGNoaWxkcmVuKSB7XG4gICAgICAgIG5vZGUueCA9IG1lYW5YKGNoaWxkcmVuKTtcbiAgICAgICAgbm9kZS55ID0gbWF4WShjaGlsZHJlbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2RlLnggPSBwcmV2aW91c05vZGUgPyB4ICs9IHNlcGFyYXRpb24obm9kZSwgcHJldmlvdXNOb2RlKSA6IDA7XG4gICAgICAgIG5vZGUueSA9IDA7XG4gICAgICAgIHByZXZpb3VzTm9kZSA9IG5vZGU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB2YXIgbGVmdCA9IGxlYWZMZWZ0KHJvb3QpLFxuICAgICAgICByaWdodCA9IGxlYWZSaWdodChyb290KSxcbiAgICAgICAgeDAgPSBsZWZ0LnggLSBzZXBhcmF0aW9uKGxlZnQsIHJpZ2h0KSAvIDIsXG4gICAgICAgIHgxID0gcmlnaHQueCArIHNlcGFyYXRpb24ocmlnaHQsIGxlZnQpIC8gMjtcblxuICAgIC8vIFNlY29uZCB3YWxrLCBub3JtYWxpemluZyB4ICYgeSB0byB0aGUgZGVzaXJlZCBzaXplLlxuICAgIHJldHVybiByb290LmVhY2hBZnRlcihub2RlU2l6ZSA/IGZ1bmN0aW9uKG5vZGUpIHtcbiAgICAgIG5vZGUueCA9IChub2RlLnggLSByb290LngpICogZHg7XG4gICAgICBub2RlLnkgPSAocm9vdC55IC0gbm9kZS55KSAqIGR5O1xuICAgIH0gOiBmdW5jdGlvbihub2RlKSB7XG4gICAgICBub2RlLnggPSAobm9kZS54IC0geDApIC8gKHgxIC0geDApICogZHg7XG4gICAgICBub2RlLnkgPSAoMSAtIChyb290LnkgPyBub2RlLnkgLyByb290LnkgOiAxKSkgKiBkeTtcbiAgICB9KTtcbiAgfVxuXG4gIGNsdXN0ZXIuc2VwYXJhdGlvbiA9IGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChzZXBhcmF0aW9uID0geCwgY2x1c3RlcikgOiBzZXBhcmF0aW9uO1xuICB9O1xuXG4gIGNsdXN0ZXIuc2l6ZSA9IGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChub2RlU2l6ZSA9IGZhbHNlLCBkeCA9ICt4WzBdLCBkeSA9ICt4WzFdLCBjbHVzdGVyKSA6IChub2RlU2l6ZSA/IG51bGwgOiBbZHgsIGR5XSk7XG4gIH07XG5cbiAgY2x1c3Rlci5ub2RlU2l6ZSA9IGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChub2RlU2l6ZSA9IHRydWUsIGR4ID0gK3hbMF0sIGR5ID0gK3hbMV0sIGNsdXN0ZXIpIDogKG5vZGVTaXplID8gW2R4LCBkeV0gOiBudWxsKTtcbiAgfTtcblxuICByZXR1cm4gY2x1c3Rlcjtcbn1cbiIsImV4cG9ydCBmdW5jdGlvbiBjb25zdGFudFplcm8oKSB7XG4gIHJldHVybiAwO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4geDtcbiAgfTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgbm9kZSA9IHRoaXMsIG5vZGVzID0gW25vZGVdO1xuICB3aGlsZSAobm9kZSA9IG5vZGUucGFyZW50KSB7XG4gICAgbm9kZXMucHVzaChub2RlKTtcbiAgfVxuICByZXR1cm4gbm9kZXM7XG59XG4iLCJmdW5jdGlvbiBjb3VudChub2RlKSB7XG4gIHZhciBzdW0gPSAwLFxuICAgICAgY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuLFxuICAgICAgaSA9IGNoaWxkcmVuICYmIGNoaWxkcmVuLmxlbmd0aDtcbiAgaWYgKCFpKSBzdW0gPSAxO1xuICBlbHNlIHdoaWxlICgtLWkgPj0gMCkgc3VtICs9IGNoaWxkcmVuW2ldLnZhbHVlO1xuICBub2RlLnZhbHVlID0gc3VtO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuZWFjaEFmdGVyKGNvdW50KTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgbm9kZXMgPSBbXTtcbiAgdGhpcy5lYWNoKGZ1bmN0aW9uKG5vZGUpIHtcbiAgICBub2Rlcy5wdXNoKG5vZGUpO1xuICB9KTtcbiAgcmV0dXJuIG5vZGVzO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgdmFyIG5vZGUgPSB0aGlzLCBjdXJyZW50LCBuZXh0ID0gW25vZGVdLCBjaGlsZHJlbiwgaSwgbjtcbiAgZG8ge1xuICAgIGN1cnJlbnQgPSBuZXh0LnJldmVyc2UoKSwgbmV4dCA9IFtdO1xuICAgIHdoaWxlIChub2RlID0gY3VycmVudC5wb3AoKSkge1xuICAgICAgY2FsbGJhY2sobm9kZSksIGNoaWxkcmVuID0gbm9kZS5jaGlsZHJlbjtcbiAgICAgIGlmIChjaGlsZHJlbikgZm9yIChpID0gMCwgbiA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgICAgICBuZXh0LnB1c2goY2hpbGRyZW5baV0pO1xuICAgICAgfVxuICAgIH1cbiAgfSB3aGlsZSAobmV4dC5sZW5ndGgpO1xuICByZXR1cm4gdGhpcztcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gIHZhciBub2RlID0gdGhpcywgbm9kZXMgPSBbbm9kZV0sIG5leHQgPSBbXSwgY2hpbGRyZW4sIGksIG47XG4gIHdoaWxlIChub2RlID0gbm9kZXMucG9wKCkpIHtcbiAgICBuZXh0LnB1c2gobm9kZSksIGNoaWxkcmVuID0gbm9kZS5jaGlsZHJlbjtcbiAgICBpZiAoY2hpbGRyZW4pIGZvciAoaSA9IDAsIG4gPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBuOyArK2kpIHtcbiAgICAgIG5vZGVzLnB1c2goY2hpbGRyZW5baV0pO1xuICAgIH1cbiAgfVxuICB3aGlsZSAobm9kZSA9IG5leHQucG9wKCkpIHtcbiAgICBjYWxsYmFjayhub2RlKTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gIHZhciBub2RlID0gdGhpcywgbm9kZXMgPSBbbm9kZV0sIGNoaWxkcmVuLCBpO1xuICB3aGlsZSAobm9kZSA9IG5vZGVzLnBvcCgpKSB7XG4gICAgY2FsbGJhY2sobm9kZSksIGNoaWxkcmVuID0gbm9kZS5jaGlsZHJlbjtcbiAgICBpZiAoY2hpbGRyZW4pIGZvciAoaSA9IGNoaWxkcmVuLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICBub2Rlcy5wdXNoKGNoaWxkcmVuW2ldKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59XG4iLCJpbXBvcnQgbm9kZV9jb3VudCBmcm9tIFwiLi9jb3VudC5qc1wiO1xuaW1wb3J0IG5vZGVfZWFjaCBmcm9tIFwiLi9lYWNoLmpzXCI7XG5pbXBvcnQgbm9kZV9lYWNoQmVmb3JlIGZyb20gXCIuL2VhY2hCZWZvcmUuanNcIjtcbmltcG9ydCBub2RlX2VhY2hBZnRlciBmcm9tIFwiLi9lYWNoQWZ0ZXIuanNcIjtcbmltcG9ydCBub2RlX3N1bSBmcm9tIFwiLi9zdW0uanNcIjtcbmltcG9ydCBub2RlX3NvcnQgZnJvbSBcIi4vc29ydC5qc1wiO1xuaW1wb3J0IG5vZGVfcGF0aCBmcm9tIFwiLi9wYXRoLmpzXCI7XG5pbXBvcnQgbm9kZV9hbmNlc3RvcnMgZnJvbSBcIi4vYW5jZXN0b3JzLmpzXCI7XG5pbXBvcnQgbm9kZV9kZXNjZW5kYW50cyBmcm9tIFwiLi9kZXNjZW5kYW50cy5qc1wiO1xuaW1wb3J0IG5vZGVfbGVhdmVzIGZyb20gXCIuL2xlYXZlcy5qc1wiO1xuaW1wb3J0IG5vZGVfbGlua3MgZnJvbSBcIi4vbGlua3MuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaGllcmFyY2h5KGRhdGEsIGNoaWxkcmVuKSB7XG4gIHZhciByb290ID0gbmV3IE5vZGUoZGF0YSksXG4gICAgICB2YWx1ZWQgPSArZGF0YS52YWx1ZSAmJiAocm9vdC52YWx1ZSA9IGRhdGEudmFsdWUpLFxuICAgICAgbm9kZSxcbiAgICAgIG5vZGVzID0gW3Jvb3RdLFxuICAgICAgY2hpbGQsXG4gICAgICBjaGlsZHMsXG4gICAgICBpLFxuICAgICAgbjtcblxuICBpZiAoY2hpbGRyZW4gPT0gbnVsbCkgY2hpbGRyZW4gPSBkZWZhdWx0Q2hpbGRyZW47XG5cbiAgd2hpbGUgKG5vZGUgPSBub2Rlcy5wb3AoKSkge1xuICAgIGlmICh2YWx1ZWQpIG5vZGUudmFsdWUgPSArbm9kZS5kYXRhLnZhbHVlO1xuICAgIGlmICgoY2hpbGRzID0gY2hpbGRyZW4obm9kZS5kYXRhKSkgJiYgKG4gPSBjaGlsZHMubGVuZ3RoKSkge1xuICAgICAgbm9kZS5jaGlsZHJlbiA9IG5ldyBBcnJheShuKTtcbiAgICAgIGZvciAoaSA9IG4gLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICBub2Rlcy5wdXNoKGNoaWxkID0gbm9kZS5jaGlsZHJlbltpXSA9IG5ldyBOb2RlKGNoaWxkc1tpXSkpO1xuICAgICAgICBjaGlsZC5wYXJlbnQgPSBub2RlO1xuICAgICAgICBjaGlsZC5kZXB0aCA9IG5vZGUuZGVwdGggKyAxO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiByb290LmVhY2hCZWZvcmUoY29tcHV0ZUhlaWdodCk7XG59XG5cbmZ1bmN0aW9uIG5vZGVfY29weSgpIHtcbiAgcmV0dXJuIGhpZXJhcmNoeSh0aGlzKS5lYWNoQmVmb3JlKGNvcHlEYXRhKTtcbn1cblxuZnVuY3Rpb24gZGVmYXVsdENoaWxkcmVuKGQpIHtcbiAgcmV0dXJuIGQuY2hpbGRyZW47XG59XG5cbmZ1bmN0aW9uIGNvcHlEYXRhKG5vZGUpIHtcbiAgbm9kZS5kYXRhID0gbm9kZS5kYXRhLmRhdGE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlSGVpZ2h0KG5vZGUpIHtcbiAgdmFyIGhlaWdodCA9IDA7XG4gIGRvIG5vZGUuaGVpZ2h0ID0gaGVpZ2h0O1xuICB3aGlsZSAoKG5vZGUgPSBub2RlLnBhcmVudCkgJiYgKG5vZGUuaGVpZ2h0IDwgKytoZWlnaHQpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE5vZGUoZGF0YSkge1xuICB0aGlzLmRhdGEgPSBkYXRhO1xuICB0aGlzLmRlcHRoID1cbiAgdGhpcy5oZWlnaHQgPSAwO1xuICB0aGlzLnBhcmVudCA9IG51bGw7XG59XG5cbk5vZGUucHJvdG90eXBlID0gaGllcmFyY2h5LnByb3RvdHlwZSA9IHtcbiAgY29uc3RydWN0b3I6IE5vZGUsXG4gIGNvdW50OiBub2RlX2NvdW50LFxuICBlYWNoOiBub2RlX2VhY2gsXG4gIGVhY2hBZnRlcjogbm9kZV9lYWNoQWZ0ZXIsXG4gIGVhY2hCZWZvcmU6IG5vZGVfZWFjaEJlZm9yZSxcbiAgc3VtOiBub2RlX3N1bSxcbiAgc29ydDogbm9kZV9zb3J0LFxuICBwYXRoOiBub2RlX3BhdGgsXG4gIGFuY2VzdG9yczogbm9kZV9hbmNlc3RvcnMsXG4gIGRlc2NlbmRhbnRzOiBub2RlX2Rlc2NlbmRhbnRzLFxuICBsZWF2ZXM6IG5vZGVfbGVhdmVzLFxuICBsaW5rczogbm9kZV9saW5rcyxcbiAgY29weTogbm9kZV9jb3B5XG59O1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBsZWF2ZXMgPSBbXTtcbiAgdGhpcy5lYWNoQmVmb3JlKGZ1bmN0aW9uKG5vZGUpIHtcbiAgICBpZiAoIW5vZGUuY2hpbGRyZW4pIHtcbiAgICAgIGxlYXZlcy5wdXNoKG5vZGUpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBsZWF2ZXM7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIHJvb3QgPSB0aGlzLCBsaW5rcyA9IFtdO1xuICByb290LmVhY2goZnVuY3Rpb24obm9kZSkge1xuICAgIGlmIChub2RlICE9PSByb290KSB7IC8vIERvbuKAmXQgaW5jbHVkZSB0aGUgcm9vdOKAmXMgcGFyZW50LCBpZiBhbnkuXG4gICAgICBsaW5rcy5wdXNoKHtzb3VyY2U6IG5vZGUucGFyZW50LCB0YXJnZXQ6IG5vZGV9KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gbGlua3M7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihlbmQpIHtcbiAgdmFyIHN0YXJ0ID0gdGhpcyxcbiAgICAgIGFuY2VzdG9yID0gbGVhc3RDb21tb25BbmNlc3RvcihzdGFydCwgZW5kKSxcbiAgICAgIG5vZGVzID0gW3N0YXJ0XTtcbiAgd2hpbGUgKHN0YXJ0ICE9PSBhbmNlc3Rvcikge1xuICAgIHN0YXJ0ID0gc3RhcnQucGFyZW50O1xuICAgIG5vZGVzLnB1c2goc3RhcnQpO1xuICB9XG4gIHZhciBrID0gbm9kZXMubGVuZ3RoO1xuICB3aGlsZSAoZW5kICE9PSBhbmNlc3Rvcikge1xuICAgIG5vZGVzLnNwbGljZShrLCAwLCBlbmQpO1xuICAgIGVuZCA9IGVuZC5wYXJlbnQ7XG4gIH1cbiAgcmV0dXJuIG5vZGVzO1xufVxuXG5mdW5jdGlvbiBsZWFzdENvbW1vbkFuY2VzdG9yKGEsIGIpIHtcbiAgaWYgKGEgPT09IGIpIHJldHVybiBhO1xuICB2YXIgYU5vZGVzID0gYS5hbmNlc3RvcnMoKSxcbiAgICAgIGJOb2RlcyA9IGIuYW5jZXN0b3JzKCksXG4gICAgICBjID0gbnVsbDtcbiAgYSA9IGFOb2Rlcy5wb3AoKTtcbiAgYiA9IGJOb2Rlcy5wb3AoKTtcbiAgd2hpbGUgKGEgPT09IGIpIHtcbiAgICBjID0gYTtcbiAgICBhID0gYU5vZGVzLnBvcCgpO1xuICAgIGIgPSBiTm9kZXMucG9wKCk7XG4gIH1cbiAgcmV0dXJuIGM7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjb21wYXJlKSB7XG4gIHJldHVybiB0aGlzLmVhY2hCZWZvcmUoZnVuY3Rpb24obm9kZSkge1xuICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICBub2RlLmNoaWxkcmVuLnNvcnQoY29tcGFyZSk7XG4gICAgfVxuICB9KTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiB0aGlzLmVhY2hBZnRlcihmdW5jdGlvbihub2RlKSB7XG4gICAgdmFyIHN1bSA9ICt2YWx1ZShub2RlLmRhdGEpIHx8IDAsXG4gICAgICAgIGNoaWxkcmVuID0gbm9kZS5jaGlsZHJlbixcbiAgICAgICAgaSA9IGNoaWxkcmVuICYmIGNoaWxkcmVuLmxlbmd0aDtcbiAgICB3aGlsZSAoLS1pID49IDApIHN1bSArPSBjaGlsZHJlbltpXS52YWx1ZTtcbiAgICBub2RlLnZhbHVlID0gc3VtO1xuICB9KTtcbn1cbiIsImV4cG9ydCB7ZGVmYXVsdCBhcyBjbHVzdGVyfSBmcm9tIFwiLi9jbHVzdGVyLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaGllcmFyY2h5fSBmcm9tIFwiLi9oaWVyYXJjaHkvaW5kZXguanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBwYWNrfSBmcm9tIFwiLi9wYWNrL2luZGV4LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgcGFja1NpYmxpbmdzfSBmcm9tIFwiLi9wYWNrL3NpYmxpbmdzLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgcGFja0VuY2xvc2V9IGZyb20gXCIuL3BhY2svZW5jbG9zZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHBhcnRpdGlvbn0gZnJvbSBcIi4vcGFydGl0aW9uLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc3RyYXRpZnl9IGZyb20gXCIuL3N0cmF0aWZ5LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgdHJlZX0gZnJvbSBcIi4vdHJlZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHRyZWVtYXB9IGZyb20gXCIuL3RyZWVtYXAvaW5kZXguanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyB0cmVlbWFwQmluYXJ5fSBmcm9tIFwiLi90cmVlbWFwL2JpbmFyeS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHRyZWVtYXBEaWNlfSBmcm9tIFwiLi90cmVlbWFwL2RpY2UuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyB0cmVlbWFwU2xpY2V9IGZyb20gXCIuL3RyZWVtYXAvc2xpY2UuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyB0cmVlbWFwU2xpY2VEaWNlfSBmcm9tIFwiLi90cmVlbWFwL3NsaWNlRGljZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHRyZWVtYXBTcXVhcmlmeX0gZnJvbSBcIi4vdHJlZW1hcC9zcXVhcmlmeS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHRyZWVtYXBSZXNxdWFyaWZ5fSBmcm9tIFwiLi90cmVlbWFwL3Jlc3F1YXJpZnkuanNcIjtcbiIsImltcG9ydCB7c2h1ZmZsZSwgc2xpY2V9IGZyb20gXCIuLi9hcnJheS5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjaXJjbGVzKSB7XG4gIHZhciBpID0gMCwgbiA9IChjaXJjbGVzID0gc2h1ZmZsZShzbGljZS5jYWxsKGNpcmNsZXMpKSkubGVuZ3RoLCBCID0gW10sIHAsIGU7XG5cbiAgd2hpbGUgKGkgPCBuKSB7XG4gICAgcCA9IGNpcmNsZXNbaV07XG4gICAgaWYgKGUgJiYgZW5jbG9zZXNXZWFrKGUsIHApKSArK2k7XG4gICAgZWxzZSBlID0gZW5jbG9zZUJhc2lzKEIgPSBleHRlbmRCYXNpcyhCLCBwKSksIGkgPSAwO1xuICB9XG5cbiAgcmV0dXJuIGU7XG59XG5cbmZ1bmN0aW9uIGV4dGVuZEJhc2lzKEIsIHApIHtcbiAgdmFyIGksIGo7XG5cbiAgaWYgKGVuY2xvc2VzV2Vha0FsbChwLCBCKSkgcmV0dXJuIFtwXTtcblxuICAvLyBJZiB3ZSBnZXQgaGVyZSB0aGVuIEIgbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBlbGVtZW50LlxuICBmb3IgKGkgPSAwOyBpIDwgQi5sZW5ndGg7ICsraSkge1xuICAgIGlmIChlbmNsb3Nlc05vdChwLCBCW2ldKVxuICAgICAgICAmJiBlbmNsb3Nlc1dlYWtBbGwoZW5jbG9zZUJhc2lzMihCW2ldLCBwKSwgQikpIHtcbiAgICAgIHJldHVybiBbQltpXSwgcF07XG4gICAgfVxuICB9XG5cbiAgLy8gSWYgd2UgZ2V0IGhlcmUgdGhlbiBCIG11c3QgaGF2ZSBhdCBsZWFzdCB0d28gZWxlbWVudHMuXG4gIGZvciAoaSA9IDA7IGkgPCBCLmxlbmd0aCAtIDE7ICsraSkge1xuICAgIGZvciAoaiA9IGkgKyAxOyBqIDwgQi5sZW5ndGg7ICsraikge1xuICAgICAgaWYgKGVuY2xvc2VzTm90KGVuY2xvc2VCYXNpczIoQltpXSwgQltqXSksIHApXG4gICAgICAgICAgJiYgZW5jbG9zZXNOb3QoZW5jbG9zZUJhc2lzMihCW2ldLCBwKSwgQltqXSlcbiAgICAgICAgICAmJiBlbmNsb3Nlc05vdChlbmNsb3NlQmFzaXMyKEJbal0sIHApLCBCW2ldKVxuICAgICAgICAgICYmIGVuY2xvc2VzV2Vha0FsbChlbmNsb3NlQmFzaXMzKEJbaV0sIEJbal0sIHApLCBCKSkge1xuICAgICAgICByZXR1cm4gW0JbaV0sIEJbal0sIHBdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIElmIHdlIGdldCBoZXJlIHRoZW4gc29tZXRoaW5nIGlzIHZlcnkgd3JvbmcuXG4gIHRocm93IG5ldyBFcnJvcjtcbn1cblxuZnVuY3Rpb24gZW5jbG9zZXNOb3QoYSwgYikge1xuICB2YXIgZHIgPSBhLnIgLSBiLnIsIGR4ID0gYi54IC0gYS54LCBkeSA9IGIueSAtIGEueTtcbiAgcmV0dXJuIGRyIDwgMCB8fCBkciAqIGRyIDwgZHggKiBkeCArIGR5ICogZHk7XG59XG5cbmZ1bmN0aW9uIGVuY2xvc2VzV2VhayhhLCBiKSB7XG4gIHZhciBkciA9IGEuciAtIGIuciArIDFlLTYsIGR4ID0gYi54IC0gYS54LCBkeSA9IGIueSAtIGEueTtcbiAgcmV0dXJuIGRyID4gMCAmJiBkciAqIGRyID4gZHggKiBkeCArIGR5ICogZHk7XG59XG5cbmZ1bmN0aW9uIGVuY2xvc2VzV2Vha0FsbChhLCBCKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgQi5sZW5ndGg7ICsraSkge1xuICAgIGlmICghZW5jbG9zZXNXZWFrKGEsIEJbaV0pKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBlbmNsb3NlQmFzaXMoQikge1xuICBzd2l0Y2ggKEIubGVuZ3RoKSB7XG4gICAgY2FzZSAxOiByZXR1cm4gZW5jbG9zZUJhc2lzMShCWzBdKTtcbiAgICBjYXNlIDI6IHJldHVybiBlbmNsb3NlQmFzaXMyKEJbMF0sIEJbMV0pO1xuICAgIGNhc2UgMzogcmV0dXJuIGVuY2xvc2VCYXNpczMoQlswXSwgQlsxXSwgQlsyXSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZW5jbG9zZUJhc2lzMShhKSB7XG4gIHJldHVybiB7XG4gICAgeDogYS54LFxuICAgIHk6IGEueSxcbiAgICByOiBhLnJcbiAgfTtcbn1cblxuZnVuY3Rpb24gZW5jbG9zZUJhc2lzMihhLCBiKSB7XG4gIHZhciB4MSA9IGEueCwgeTEgPSBhLnksIHIxID0gYS5yLFxuICAgICAgeDIgPSBiLngsIHkyID0gYi55LCByMiA9IGIucixcbiAgICAgIHgyMSA9IHgyIC0geDEsIHkyMSA9IHkyIC0geTEsIHIyMSA9IHIyIC0gcjEsXG4gICAgICBsID0gTWF0aC5zcXJ0KHgyMSAqIHgyMSArIHkyMSAqIHkyMSk7XG4gIHJldHVybiB7XG4gICAgeDogKHgxICsgeDIgKyB4MjEgLyBsICogcjIxKSAvIDIsXG4gICAgeTogKHkxICsgeTIgKyB5MjEgLyBsICogcjIxKSAvIDIsXG4gICAgcjogKGwgKyByMSArIHIyKSAvIDJcbiAgfTtcbn1cblxuZnVuY3Rpb24gZW5jbG9zZUJhc2lzMyhhLCBiLCBjKSB7XG4gIHZhciB4MSA9IGEueCwgeTEgPSBhLnksIHIxID0gYS5yLFxuICAgICAgeDIgPSBiLngsIHkyID0gYi55LCByMiA9IGIucixcbiAgICAgIHgzID0gYy54LCB5MyA9IGMueSwgcjMgPSBjLnIsXG4gICAgICBhMiA9IHgxIC0geDIsXG4gICAgICBhMyA9IHgxIC0geDMsXG4gICAgICBiMiA9IHkxIC0geTIsXG4gICAgICBiMyA9IHkxIC0geTMsXG4gICAgICBjMiA9IHIyIC0gcjEsXG4gICAgICBjMyA9IHIzIC0gcjEsXG4gICAgICBkMSA9IHgxICogeDEgKyB5MSAqIHkxIC0gcjEgKiByMSxcbiAgICAgIGQyID0gZDEgLSB4MiAqIHgyIC0geTIgKiB5MiArIHIyICogcjIsXG4gICAgICBkMyA9IGQxIC0geDMgKiB4MyAtIHkzICogeTMgKyByMyAqIHIzLFxuICAgICAgYWIgPSBhMyAqIGIyIC0gYTIgKiBiMyxcbiAgICAgIHhhID0gKGIyICogZDMgLSBiMyAqIGQyKSAvIChhYiAqIDIpIC0geDEsXG4gICAgICB4YiA9IChiMyAqIGMyIC0gYjIgKiBjMykgLyBhYixcbiAgICAgIHlhID0gKGEzICogZDIgLSBhMiAqIGQzKSAvIChhYiAqIDIpIC0geTEsXG4gICAgICB5YiA9IChhMiAqIGMzIC0gYTMgKiBjMikgLyBhYixcbiAgICAgIEEgPSB4YiAqIHhiICsgeWIgKiB5YiAtIDEsXG4gICAgICBCID0gMiAqIChyMSArIHhhICogeGIgKyB5YSAqIHliKSxcbiAgICAgIEMgPSB4YSAqIHhhICsgeWEgKiB5YSAtIHIxICogcjEsXG4gICAgICByID0gLShBID8gKEIgKyBNYXRoLnNxcnQoQiAqIEIgLSA0ICogQSAqIEMpKSAvICgyICogQSkgOiBDIC8gQik7XG4gIHJldHVybiB7XG4gICAgeDogeDEgKyB4YSArIHhiICogcixcbiAgICB5OiB5MSArIHlhICsgeWIgKiByLFxuICAgIHI6IHJcbiAgfTtcbn1cbiIsImltcG9ydCB7cGFja0VuY2xvc2V9IGZyb20gXCIuL3NpYmxpbmdzLmpzXCI7XG5pbXBvcnQge29wdGlvbmFsfSBmcm9tIFwiLi4vYWNjZXNzb3JzLmpzXCI7XG5pbXBvcnQgY29uc3RhbnQsIHtjb25zdGFudFplcm99IGZyb20gXCIuLi9jb25zdGFudC5qc1wiO1xuXG5mdW5jdGlvbiBkZWZhdWx0UmFkaXVzKGQpIHtcbiAgcmV0dXJuIE1hdGguc3FydChkLnZhbHVlKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciByYWRpdXMgPSBudWxsLFxuICAgICAgZHggPSAxLFxuICAgICAgZHkgPSAxLFxuICAgICAgcGFkZGluZyA9IGNvbnN0YW50WmVybztcblxuICBmdW5jdGlvbiBwYWNrKHJvb3QpIHtcbiAgICByb290LnggPSBkeCAvIDIsIHJvb3QueSA9IGR5IC8gMjtcbiAgICBpZiAocmFkaXVzKSB7XG4gICAgICByb290LmVhY2hCZWZvcmUocmFkaXVzTGVhZihyYWRpdXMpKVxuICAgICAgICAgIC5lYWNoQWZ0ZXIocGFja0NoaWxkcmVuKHBhZGRpbmcsIDAuNSkpXG4gICAgICAgICAgLmVhY2hCZWZvcmUodHJhbnNsYXRlQ2hpbGQoMSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICByb290LmVhY2hCZWZvcmUocmFkaXVzTGVhZihkZWZhdWx0UmFkaXVzKSlcbiAgICAgICAgICAuZWFjaEFmdGVyKHBhY2tDaGlsZHJlbihjb25zdGFudFplcm8sIDEpKVxuICAgICAgICAgIC5lYWNoQWZ0ZXIocGFja0NoaWxkcmVuKHBhZGRpbmcsIHJvb3QuciAvIE1hdGgubWluKGR4LCBkeSkpKVxuICAgICAgICAgIC5lYWNoQmVmb3JlKHRyYW5zbGF0ZUNoaWxkKE1hdGgubWluKGR4LCBkeSkgLyAoMiAqIHJvb3QucikpKTtcbiAgICB9XG4gICAgcmV0dXJuIHJvb3Q7XG4gIH1cblxuICBwYWNrLnJhZGl1cyA9IGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChyYWRpdXMgPSBvcHRpb25hbCh4KSwgcGFjaykgOiByYWRpdXM7XG4gIH07XG5cbiAgcGFjay5zaXplID0gZnVuY3Rpb24oeCkge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGR4ID0gK3hbMF0sIGR5ID0gK3hbMV0sIHBhY2spIDogW2R4LCBkeV07XG4gIH07XG5cbiAgcGFjay5wYWRkaW5nID0gZnVuY3Rpb24oeCkge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHBhZGRpbmcgPSB0eXBlb2YgeCA9PT0gXCJmdW5jdGlvblwiID8geCA6IGNvbnN0YW50KCt4KSwgcGFjaykgOiBwYWRkaW5nO1xuICB9O1xuXG4gIHJldHVybiBwYWNrO1xufVxuXG5mdW5jdGlvbiByYWRpdXNMZWFmKHJhZGl1cykge1xuICByZXR1cm4gZnVuY3Rpb24obm9kZSkge1xuICAgIGlmICghbm9kZS5jaGlsZHJlbikge1xuICAgICAgbm9kZS5yID0gTWF0aC5tYXgoMCwgK3JhZGl1cyhub2RlKSB8fCAwKTtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIHBhY2tDaGlsZHJlbihwYWRkaW5nLCBrKSB7XG4gIHJldHVybiBmdW5jdGlvbihub2RlKSB7XG4gICAgaWYgKGNoaWxkcmVuID0gbm9kZS5jaGlsZHJlbikge1xuICAgICAgdmFyIGNoaWxkcmVuLFxuICAgICAgICAgIGksXG4gICAgICAgICAgbiA9IGNoaWxkcmVuLmxlbmd0aCxcbiAgICAgICAgICByID0gcGFkZGluZyhub2RlKSAqIGsgfHwgMCxcbiAgICAgICAgICBlO1xuXG4gICAgICBpZiAocikgZm9yIChpID0gMDsgaSA8IG47ICsraSkgY2hpbGRyZW5baV0uciArPSByO1xuICAgICAgZSA9IHBhY2tFbmNsb3NlKGNoaWxkcmVuKTtcbiAgICAgIGlmIChyKSBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSBjaGlsZHJlbltpXS5yIC09IHI7XG4gICAgICBub2RlLnIgPSBlICsgcjtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIHRyYW5zbGF0ZUNoaWxkKGspIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG5vZGUpIHtcbiAgICB2YXIgcGFyZW50ID0gbm9kZS5wYXJlbnQ7XG4gICAgbm9kZS5yICo9IGs7XG4gICAgaWYgKHBhcmVudCkge1xuICAgICAgbm9kZS54ID0gcGFyZW50LnggKyBrICogbm9kZS54O1xuICAgICAgbm9kZS55ID0gcGFyZW50LnkgKyBrICogbm9kZS55O1xuICAgIH1cbiAgfTtcbn1cbiIsImltcG9ydCBlbmNsb3NlIGZyb20gXCIuL2VuY2xvc2UuanNcIjtcblxuZnVuY3Rpb24gcGxhY2UoYiwgYSwgYykge1xuICB2YXIgZHggPSBiLnggLSBhLngsIHgsIGEyLFxuICAgICAgZHkgPSBiLnkgLSBhLnksIHksIGIyLFxuICAgICAgZDIgPSBkeCAqIGR4ICsgZHkgKiBkeTtcbiAgaWYgKGQyKSB7XG4gICAgYTIgPSBhLnIgKyBjLnIsIGEyICo9IGEyO1xuICAgIGIyID0gYi5yICsgYy5yLCBiMiAqPSBiMjtcbiAgICBpZiAoYTIgPiBiMikge1xuICAgICAgeCA9IChkMiArIGIyIC0gYTIpIC8gKDIgKiBkMik7XG4gICAgICB5ID0gTWF0aC5zcXJ0KE1hdGgubWF4KDAsIGIyIC8gZDIgLSB4ICogeCkpO1xuICAgICAgYy54ID0gYi54IC0geCAqIGR4IC0geSAqIGR5O1xuICAgICAgYy55ID0gYi55IC0geCAqIGR5ICsgeSAqIGR4O1xuICAgIH0gZWxzZSB7XG4gICAgICB4ID0gKGQyICsgYTIgLSBiMikgLyAoMiAqIGQyKTtcbiAgICAgIHkgPSBNYXRoLnNxcnQoTWF0aC5tYXgoMCwgYTIgLyBkMiAtIHggKiB4KSk7XG4gICAgICBjLnggPSBhLnggKyB4ICogZHggLSB5ICogZHk7XG4gICAgICBjLnkgPSBhLnkgKyB4ICogZHkgKyB5ICogZHg7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGMueCA9IGEueCArIGMucjtcbiAgICBjLnkgPSBhLnk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW50ZXJzZWN0cyhhLCBiKSB7XG4gIHZhciBkciA9IGEuciArIGIuciAtIDFlLTYsIGR4ID0gYi54IC0gYS54LCBkeSA9IGIueSAtIGEueTtcbiAgcmV0dXJuIGRyID4gMCAmJiBkciAqIGRyID4gZHggKiBkeCArIGR5ICogZHk7XG59XG5cbmZ1bmN0aW9uIHNjb3JlKG5vZGUpIHtcbiAgdmFyIGEgPSBub2RlLl8sXG4gICAgICBiID0gbm9kZS5uZXh0Ll8sXG4gICAgICBhYiA9IGEuciArIGIucixcbiAgICAgIGR4ID0gKGEueCAqIGIuciArIGIueCAqIGEucikgLyBhYixcbiAgICAgIGR5ID0gKGEueSAqIGIuciArIGIueSAqIGEucikgLyBhYjtcbiAgcmV0dXJuIGR4ICogZHggKyBkeSAqIGR5O1xufVxuXG5mdW5jdGlvbiBOb2RlKGNpcmNsZSkge1xuICB0aGlzLl8gPSBjaXJjbGU7XG4gIHRoaXMubmV4dCA9IG51bGw7XG4gIHRoaXMucHJldmlvdXMgPSBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFja0VuY2xvc2UoY2lyY2xlcykge1xuICBpZiAoIShuID0gY2lyY2xlcy5sZW5ndGgpKSByZXR1cm4gMDtcblxuICB2YXIgYSwgYiwgYywgbiwgYWEsIGNhLCBpLCBqLCBrLCBzaiwgc2s7XG5cbiAgLy8gUGxhY2UgdGhlIGZpcnN0IGNpcmNsZS5cbiAgYSA9IGNpcmNsZXNbMF0sIGEueCA9IDAsIGEueSA9IDA7XG4gIGlmICghKG4gPiAxKSkgcmV0dXJuIGEucjtcblxuICAvLyBQbGFjZSB0aGUgc2Vjb25kIGNpcmNsZS5cbiAgYiA9IGNpcmNsZXNbMV0sIGEueCA9IC1iLnIsIGIueCA9IGEuciwgYi55ID0gMDtcbiAgaWYgKCEobiA+IDIpKSByZXR1cm4gYS5yICsgYi5yO1xuXG4gIC8vIFBsYWNlIHRoZSB0aGlyZCBjaXJjbGUuXG4gIHBsYWNlKGIsIGEsIGMgPSBjaXJjbGVzWzJdKTtcblxuICAvLyBJbml0aWFsaXplIHRoZSBmcm9udC1jaGFpbiB1c2luZyB0aGUgZmlyc3QgdGhyZWUgY2lyY2xlcyBhLCBiIGFuZCBjLlxuICBhID0gbmV3IE5vZGUoYSksIGIgPSBuZXcgTm9kZShiKSwgYyA9IG5ldyBOb2RlKGMpO1xuICBhLm5leHQgPSBjLnByZXZpb3VzID0gYjtcbiAgYi5uZXh0ID0gYS5wcmV2aW91cyA9IGM7XG4gIGMubmV4dCA9IGIucHJldmlvdXMgPSBhO1xuXG4gIC8vIEF0dGVtcHQgdG8gcGxhY2UgZWFjaCByZW1haW5pbmcgY2lyY2xl4oCmXG4gIHBhY2s6IGZvciAoaSA9IDM7IGkgPCBuOyArK2kpIHtcbiAgICBwbGFjZShhLl8sIGIuXywgYyA9IGNpcmNsZXNbaV0pLCBjID0gbmV3IE5vZGUoYyk7XG5cbiAgICAvLyBGaW5kIHRoZSBjbG9zZXN0IGludGVyc2VjdGluZyBjaXJjbGUgb24gdGhlIGZyb250LWNoYWluLCBpZiBhbnkuXG4gICAgLy8g4oCcQ2xvc2VuZXNz4oCdIGlzIGRldGVybWluZWQgYnkgbGluZWFyIGRpc3RhbmNlIGFsb25nIHRoZSBmcm9udC1jaGFpbi5cbiAgICAvLyDigJxBaGVhZOKAnSBvciDigJxiZWhpbmTigJ0gaXMgbGlrZXdpc2UgZGV0ZXJtaW5lZCBieSBsaW5lYXIgZGlzdGFuY2UuXG4gICAgaiA9IGIubmV4dCwgayA9IGEucHJldmlvdXMsIHNqID0gYi5fLnIsIHNrID0gYS5fLnI7XG4gICAgZG8ge1xuICAgICAgaWYgKHNqIDw9IHNrKSB7XG4gICAgICAgIGlmIChpbnRlcnNlY3RzKGouXywgYy5fKSkge1xuICAgICAgICAgIGIgPSBqLCBhLm5leHQgPSBiLCBiLnByZXZpb3VzID0gYSwgLS1pO1xuICAgICAgICAgIGNvbnRpbnVlIHBhY2s7XG4gICAgICAgIH1cbiAgICAgICAgc2ogKz0gai5fLnIsIGogPSBqLm5leHQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoaW50ZXJzZWN0cyhrLl8sIGMuXykpIHtcbiAgICAgICAgICBhID0gaywgYS5uZXh0ID0gYiwgYi5wcmV2aW91cyA9IGEsIC0taTtcbiAgICAgICAgICBjb250aW51ZSBwYWNrO1xuICAgICAgICB9XG4gICAgICAgIHNrICs9IGsuXy5yLCBrID0gay5wcmV2aW91cztcbiAgICAgIH1cbiAgICB9IHdoaWxlIChqICE9PSBrLm5leHQpO1xuXG4gICAgLy8gU3VjY2VzcyEgSW5zZXJ0IHRoZSBuZXcgY2lyY2xlIGMgYmV0d2VlbiBhIGFuZCBiLlxuICAgIGMucHJldmlvdXMgPSBhLCBjLm5leHQgPSBiLCBhLm5leHQgPSBiLnByZXZpb3VzID0gYiA9IGM7XG5cbiAgICAvLyBDb21wdXRlIHRoZSBuZXcgY2xvc2VzdCBjaXJjbGUgcGFpciB0byB0aGUgY2VudHJvaWQuXG4gICAgYWEgPSBzY29yZShhKTtcbiAgICB3aGlsZSAoKGMgPSBjLm5leHQpICE9PSBiKSB7XG4gICAgICBpZiAoKGNhID0gc2NvcmUoYykpIDwgYWEpIHtcbiAgICAgICAgYSA9IGMsIGFhID0gY2E7XG4gICAgICB9XG4gICAgfVxuICAgIGIgPSBhLm5leHQ7XG4gIH1cblxuICAvLyBDb21wdXRlIHRoZSBlbmNsb3NpbmcgY2lyY2xlIG9mIHRoZSBmcm9udCBjaGFpbi5cbiAgYSA9IFtiLl9dLCBjID0gYjsgd2hpbGUgKChjID0gYy5uZXh0KSAhPT0gYikgYS5wdXNoKGMuXyk7IGMgPSBlbmNsb3NlKGEpO1xuXG4gIC8vIFRyYW5zbGF0ZSB0aGUgY2lyY2xlcyB0byBwdXQgdGhlIGVuY2xvc2luZyBjaXJjbGUgYXJvdW5kIHRoZSBvcmlnaW4uXG4gIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIGEgPSBjaXJjbGVzW2ldLCBhLnggLT0gYy54LCBhLnkgLT0gYy55O1xuXG4gIHJldHVybiBjLnI7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNpcmNsZXMpIHtcbiAgcGFja0VuY2xvc2UoY2lyY2xlcyk7XG4gIHJldHVybiBjaXJjbGVzO1xufVxuIiwiaW1wb3J0IHJvdW5kTm9kZSBmcm9tIFwiLi90cmVlbWFwL3JvdW5kLmpzXCI7XG5pbXBvcnQgdHJlZW1hcERpY2UgZnJvbSBcIi4vdHJlZW1hcC9kaWNlLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgZHggPSAxLFxuICAgICAgZHkgPSAxLFxuICAgICAgcGFkZGluZyA9IDAsXG4gICAgICByb3VuZCA9IGZhbHNlO1xuXG4gIGZ1bmN0aW9uIHBhcnRpdGlvbihyb290KSB7XG4gICAgdmFyIG4gPSByb290LmhlaWdodCArIDE7XG4gICAgcm9vdC54MCA9XG4gICAgcm9vdC55MCA9IHBhZGRpbmc7XG4gICAgcm9vdC54MSA9IGR4O1xuICAgIHJvb3QueTEgPSBkeSAvIG47XG4gICAgcm9vdC5lYWNoQmVmb3JlKHBvc2l0aW9uTm9kZShkeSwgbikpO1xuICAgIGlmIChyb3VuZCkgcm9vdC5lYWNoQmVmb3JlKHJvdW5kTm9kZSk7XG4gICAgcmV0dXJuIHJvb3Q7XG4gIH1cblxuICBmdW5jdGlvbiBwb3NpdGlvbk5vZGUoZHksIG4pIHtcbiAgICByZXR1cm4gZnVuY3Rpb24obm9kZSkge1xuICAgICAgaWYgKG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgdHJlZW1hcERpY2Uobm9kZSwgbm9kZS54MCwgZHkgKiAobm9kZS5kZXB0aCArIDEpIC8gbiwgbm9kZS54MSwgZHkgKiAobm9kZS5kZXB0aCArIDIpIC8gbik7XG4gICAgICB9XG4gICAgICB2YXIgeDAgPSBub2RlLngwLFxuICAgICAgICAgIHkwID0gbm9kZS55MCxcbiAgICAgICAgICB4MSA9IG5vZGUueDEgLSBwYWRkaW5nLFxuICAgICAgICAgIHkxID0gbm9kZS55MSAtIHBhZGRpbmc7XG4gICAgICBpZiAoeDEgPCB4MCkgeDAgPSB4MSA9ICh4MCArIHgxKSAvIDI7XG4gICAgICBpZiAoeTEgPCB5MCkgeTAgPSB5MSA9ICh5MCArIHkxKSAvIDI7XG4gICAgICBub2RlLngwID0geDA7XG4gICAgICBub2RlLnkwID0geTA7XG4gICAgICBub2RlLngxID0geDE7XG4gICAgICBub2RlLnkxID0geTE7XG4gICAgfTtcbiAgfVxuXG4gIHBhcnRpdGlvbi5yb3VuZCA9IGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChyb3VuZCA9ICEheCwgcGFydGl0aW9uKSA6IHJvdW5kO1xuICB9O1xuXG4gIHBhcnRpdGlvbi5zaXplID0gZnVuY3Rpb24oeCkge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGR4ID0gK3hbMF0sIGR5ID0gK3hbMV0sIHBhcnRpdGlvbikgOiBbZHgsIGR5XTtcbiAgfTtcblxuICBwYXJ0aXRpb24ucGFkZGluZyA9IGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChwYWRkaW5nID0gK3gsIHBhcnRpdGlvbikgOiBwYWRkaW5nO1xuICB9O1xuXG4gIHJldHVybiBwYXJ0aXRpb247XG59XG4iLCJpbXBvcnQge3JlcXVpcmVkfSBmcm9tIFwiLi9hY2Nlc3NvcnMuanNcIjtcbmltcG9ydCB7Tm9kZSwgY29tcHV0ZUhlaWdodH0gZnJvbSBcIi4vaGllcmFyY2h5L2luZGV4LmpzXCI7XG5cbnZhciBrZXlQcmVmaXggPSBcIiRcIiwgLy8gUHJvdGVjdCBhZ2FpbnN0IGtleXMgbGlrZSDigJxfX3Byb3RvX1/igJ0uXG4gICAgcHJlcm9vdCA9IHtkZXB0aDogLTF9LFxuICAgIGFtYmlndW91cyA9IHt9O1xuXG5mdW5jdGlvbiBkZWZhdWx0SWQoZCkge1xuICByZXR1cm4gZC5pZDtcbn1cblxuZnVuY3Rpb24gZGVmYXVsdFBhcmVudElkKGQpIHtcbiAgcmV0dXJuIGQucGFyZW50SWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgaWQgPSBkZWZhdWx0SWQsXG4gICAgICBwYXJlbnRJZCA9IGRlZmF1bHRQYXJlbnRJZDtcblxuICBmdW5jdGlvbiBzdHJhdGlmeShkYXRhKSB7XG4gICAgdmFyIGQsXG4gICAgICAgIGksXG4gICAgICAgIG4gPSBkYXRhLmxlbmd0aCxcbiAgICAgICAgcm9vdCxcbiAgICAgICAgcGFyZW50LFxuICAgICAgICBub2RlLFxuICAgICAgICBub2RlcyA9IG5ldyBBcnJheShuKSxcbiAgICAgICAgbm9kZUlkLFxuICAgICAgICBub2RlS2V5LFxuICAgICAgICBub2RlQnlLZXkgPSB7fTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGQgPSBkYXRhW2ldLCBub2RlID0gbm9kZXNbaV0gPSBuZXcgTm9kZShkKTtcbiAgICAgIGlmICgobm9kZUlkID0gaWQoZCwgaSwgZGF0YSkpICE9IG51bGwgJiYgKG5vZGVJZCArPSBcIlwiKSkge1xuICAgICAgICBub2RlS2V5ID0ga2V5UHJlZml4ICsgKG5vZGUuaWQgPSBub2RlSWQpO1xuICAgICAgICBub2RlQnlLZXlbbm9kZUtleV0gPSBub2RlS2V5IGluIG5vZGVCeUtleSA/IGFtYmlndW91cyA6IG5vZGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgbm9kZSA9IG5vZGVzW2ldLCBub2RlSWQgPSBwYXJlbnRJZChkYXRhW2ldLCBpLCBkYXRhKTtcbiAgICAgIGlmIChub2RlSWQgPT0gbnVsbCB8fCAhKG5vZGVJZCArPSBcIlwiKSkge1xuICAgICAgICBpZiAocm9vdCkgdGhyb3cgbmV3IEVycm9yKFwibXVsdGlwbGUgcm9vdHNcIik7XG4gICAgICAgIHJvb3QgPSBub2RlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyZW50ID0gbm9kZUJ5S2V5W2tleVByZWZpeCArIG5vZGVJZF07XG4gICAgICAgIGlmICghcGFyZW50KSB0aHJvdyBuZXcgRXJyb3IoXCJtaXNzaW5nOiBcIiArIG5vZGVJZCk7XG4gICAgICAgIGlmIChwYXJlbnQgPT09IGFtYmlndW91cykgdGhyb3cgbmV3IEVycm9yKFwiYW1iaWd1b3VzOiBcIiArIG5vZGVJZCk7XG4gICAgICAgIGlmIChwYXJlbnQuY2hpbGRyZW4pIHBhcmVudC5jaGlsZHJlbi5wdXNoKG5vZGUpO1xuICAgICAgICBlbHNlIHBhcmVudC5jaGlsZHJlbiA9IFtub2RlXTtcbiAgICAgICAgbm9kZS5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFyb290KSB0aHJvdyBuZXcgRXJyb3IoXCJubyByb290XCIpO1xuICAgIHJvb3QucGFyZW50ID0gcHJlcm9vdDtcbiAgICByb290LmVhY2hCZWZvcmUoZnVuY3Rpb24obm9kZSkgeyBub2RlLmRlcHRoID0gbm9kZS5wYXJlbnQuZGVwdGggKyAxOyAtLW47IH0pLmVhY2hCZWZvcmUoY29tcHV0ZUhlaWdodCk7XG4gICAgcm9vdC5wYXJlbnQgPSBudWxsO1xuICAgIGlmIChuID4gMCkgdGhyb3cgbmV3IEVycm9yKFwiY3ljbGVcIik7XG5cbiAgICByZXR1cm4gcm9vdDtcbiAgfVxuXG4gIHN0cmF0aWZ5LmlkID0gZnVuY3Rpb24oeCkge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGlkID0gcmVxdWlyZWQoeCksIHN0cmF0aWZ5KSA6IGlkO1xuICB9O1xuXG4gIHN0cmF0aWZ5LnBhcmVudElkID0gZnVuY3Rpb24oeCkge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHBhcmVudElkID0gcmVxdWlyZWQoeCksIHN0cmF0aWZ5KSA6IHBhcmVudElkO1xuICB9O1xuXG4gIHJldHVybiBzdHJhdGlmeTtcbn1cbiIsImltcG9ydCB7Tm9kZX0gZnJvbSBcIi4vaGllcmFyY2h5L2luZGV4LmpzXCI7XG5cbmZ1bmN0aW9uIGRlZmF1bHRTZXBhcmF0aW9uKGEsIGIpIHtcbiAgcmV0dXJuIGEucGFyZW50ID09PSBiLnBhcmVudCA/IDEgOiAyO1xufVxuXG4vLyBmdW5jdGlvbiByYWRpYWxTZXBhcmF0aW9uKGEsIGIpIHtcbi8vICAgcmV0dXJuIChhLnBhcmVudCA9PT0gYi5wYXJlbnQgPyAxIDogMikgLyBhLmRlcHRoO1xuLy8gfVxuXG4vLyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gdHJhdmVyc2UgdGhlIGxlZnQgY29udG91ciBvZiBhIHN1YnRyZWUgKG9yXG4vLyBzdWJmb3Jlc3QpLiBJdCByZXR1cm5zIHRoZSBzdWNjZXNzb3Igb2YgdiBvbiB0aGlzIGNvbnRvdXIuIFRoaXMgc3VjY2Vzc29yIGlzXG4vLyBlaXRoZXIgZ2l2ZW4gYnkgdGhlIGxlZnRtb3N0IGNoaWxkIG9mIHYgb3IgYnkgdGhlIHRocmVhZCBvZiB2LiBUaGUgZnVuY3Rpb25cbi8vIHJldHVybnMgbnVsbCBpZiBhbmQgb25seSBpZiB2IGlzIG9uIHRoZSBoaWdoZXN0IGxldmVsIG9mIGl0cyBzdWJ0cmVlLlxuZnVuY3Rpb24gbmV4dExlZnQodikge1xuICB2YXIgY2hpbGRyZW4gPSB2LmNoaWxkcmVuO1xuICByZXR1cm4gY2hpbGRyZW4gPyBjaGlsZHJlblswXSA6IHYudDtcbn1cblxuLy8gVGhpcyBmdW5jdGlvbiB3b3JrcyBhbmFsb2dvdXNseSB0byBuZXh0TGVmdC5cbmZ1bmN0aW9uIG5leHRSaWdodCh2KSB7XG4gIHZhciBjaGlsZHJlbiA9IHYuY2hpbGRyZW47XG4gIHJldHVybiBjaGlsZHJlbiA/IGNoaWxkcmVuW2NoaWxkcmVuLmxlbmd0aCAtIDFdIDogdi50O1xufVxuXG4vLyBTaGlmdHMgdGhlIGN1cnJlbnQgc3VidHJlZSByb290ZWQgYXQgdysuIFRoaXMgaXMgZG9uZSBieSBpbmNyZWFzaW5nXG4vLyBwcmVsaW0odyspIGFuZCBtb2QodyspIGJ5IHNoaWZ0LlxuZnVuY3Rpb24gbW92ZVN1YnRyZWUod20sIHdwLCBzaGlmdCkge1xuICB2YXIgY2hhbmdlID0gc2hpZnQgLyAod3AuaSAtIHdtLmkpO1xuICB3cC5jIC09IGNoYW5nZTtcbiAgd3AucyArPSBzaGlmdDtcbiAgd20uYyArPSBjaGFuZ2U7XG4gIHdwLnogKz0gc2hpZnQ7XG4gIHdwLm0gKz0gc2hpZnQ7XG59XG5cbi8vIEFsbCBvdGhlciBzaGlmdHMsIGFwcGxpZWQgdG8gdGhlIHNtYWxsZXIgc3VidHJlZXMgYmV0d2VlbiB3LSBhbmQgdyssIGFyZVxuLy8gcGVyZm9ybWVkIGJ5IHRoaXMgZnVuY3Rpb24uIFRvIHByZXBhcmUgdGhlIHNoaWZ0cywgd2UgaGF2ZSB0byBhZGp1c3Rcbi8vIGNoYW5nZSh3KyksIHNoaWZ0KHcrKSwgYW5kIGNoYW5nZSh3LSkuXG5mdW5jdGlvbiBleGVjdXRlU2hpZnRzKHYpIHtcbiAgdmFyIHNoaWZ0ID0gMCxcbiAgICAgIGNoYW5nZSA9IDAsXG4gICAgICBjaGlsZHJlbiA9IHYuY2hpbGRyZW4sXG4gICAgICBpID0gY2hpbGRyZW4ubGVuZ3RoLFxuICAgICAgdztcbiAgd2hpbGUgKC0taSA+PSAwKSB7XG4gICAgdyA9IGNoaWxkcmVuW2ldO1xuICAgIHcueiArPSBzaGlmdDtcbiAgICB3Lm0gKz0gc2hpZnQ7XG4gICAgc2hpZnQgKz0gdy5zICsgKGNoYW5nZSArPSB3LmMpO1xuICB9XG59XG5cbi8vIElmIHZpLeKAmXMgYW5jZXN0b3IgaXMgYSBzaWJsaW5nIG9mIHYsIHJldHVybnMgdmkt4oCZcyBhbmNlc3Rvci4gT3RoZXJ3aXNlLFxuLy8gcmV0dXJucyB0aGUgc3BlY2lmaWVkIChkZWZhdWx0KSBhbmNlc3Rvci5cbmZ1bmN0aW9uIG5leHRBbmNlc3Rvcih2aW0sIHYsIGFuY2VzdG9yKSB7XG4gIHJldHVybiB2aW0uYS5wYXJlbnQgPT09IHYucGFyZW50ID8gdmltLmEgOiBhbmNlc3Rvcjtcbn1cblxuZnVuY3Rpb24gVHJlZU5vZGUobm9kZSwgaSkge1xuICB0aGlzLl8gPSBub2RlO1xuICB0aGlzLnBhcmVudCA9IG51bGw7XG4gIHRoaXMuY2hpbGRyZW4gPSBudWxsO1xuICB0aGlzLkEgPSBudWxsOyAvLyBkZWZhdWx0IGFuY2VzdG9yXG4gIHRoaXMuYSA9IHRoaXM7IC8vIGFuY2VzdG9yXG4gIHRoaXMueiA9IDA7IC8vIHByZWxpbVxuICB0aGlzLm0gPSAwOyAvLyBtb2RcbiAgdGhpcy5jID0gMDsgLy8gY2hhbmdlXG4gIHRoaXMucyA9IDA7IC8vIHNoaWZ0XG4gIHRoaXMudCA9IG51bGw7IC8vIHRocmVhZFxuICB0aGlzLmkgPSBpOyAvLyBudW1iZXJcbn1cblxuVHJlZU5vZGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShOb2RlLnByb3RvdHlwZSk7XG5cbmZ1bmN0aW9uIHRyZWVSb290KHJvb3QpIHtcbiAgdmFyIHRyZWUgPSBuZXcgVHJlZU5vZGUocm9vdCwgMCksXG4gICAgICBub2RlLFxuICAgICAgbm9kZXMgPSBbdHJlZV0sXG4gICAgICBjaGlsZCxcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgaSxcbiAgICAgIG47XG5cbiAgd2hpbGUgKG5vZGUgPSBub2Rlcy5wb3AoKSkge1xuICAgIGlmIChjaGlsZHJlbiA9IG5vZGUuXy5jaGlsZHJlbikge1xuICAgICAgbm9kZS5jaGlsZHJlbiA9IG5ldyBBcnJheShuID0gY2hpbGRyZW4ubGVuZ3RoKTtcbiAgICAgIGZvciAoaSA9IG4gLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICBub2Rlcy5wdXNoKGNoaWxkID0gbm9kZS5jaGlsZHJlbltpXSA9IG5ldyBUcmVlTm9kZShjaGlsZHJlbltpXSwgaSkpO1xuICAgICAgICBjaGlsZC5wYXJlbnQgPSBub2RlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICh0cmVlLnBhcmVudCA9IG5ldyBUcmVlTm9kZShudWxsLCAwKSkuY2hpbGRyZW4gPSBbdHJlZV07XG4gIHJldHVybiB0cmVlO1xufVxuXG4vLyBOb2RlLWxpbmsgdHJlZSBkaWFncmFtIHVzaW5nIHRoZSBSZWluZ29sZC1UaWxmb3JkIFwidGlkeVwiIGFsZ29yaXRobVxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBzZXBhcmF0aW9uID0gZGVmYXVsdFNlcGFyYXRpb24sXG4gICAgICBkeCA9IDEsXG4gICAgICBkeSA9IDEsXG4gICAgICBub2RlU2l6ZSA9IG51bGw7XG5cbiAgZnVuY3Rpb24gdHJlZShyb290KSB7XG4gICAgdmFyIHQgPSB0cmVlUm9vdChyb290KTtcblxuICAgIC8vIENvbXB1dGUgdGhlIGxheW91dCB1c2luZyBCdWNoaGVpbSBldCBhbC7igJlzIGFsZ29yaXRobS5cbiAgICB0LmVhY2hBZnRlcihmaXJzdFdhbGspLCB0LnBhcmVudC5tID0gLXQuejtcbiAgICB0LmVhY2hCZWZvcmUoc2Vjb25kV2Fsayk7XG5cbiAgICAvLyBJZiBhIGZpeGVkIG5vZGUgc2l6ZSBpcyBzcGVjaWZpZWQsIHNjYWxlIHggYW5kIHkuXG4gICAgaWYgKG5vZGVTaXplKSByb290LmVhY2hCZWZvcmUoc2l6ZU5vZGUpO1xuXG4gICAgLy8gSWYgYSBmaXhlZCB0cmVlIHNpemUgaXMgc3BlY2lmaWVkLCBzY2FsZSB4IGFuZCB5IGJhc2VkIG9uIHRoZSBleHRlbnQuXG4gICAgLy8gQ29tcHV0ZSB0aGUgbGVmdC1tb3N0LCByaWdodC1tb3N0LCBhbmQgZGVwdGgtbW9zdCBub2RlcyBmb3IgZXh0ZW50cy5cbiAgICBlbHNlIHtcbiAgICAgIHZhciBsZWZ0ID0gcm9vdCxcbiAgICAgICAgICByaWdodCA9IHJvb3QsXG4gICAgICAgICAgYm90dG9tID0gcm9vdDtcbiAgICAgIHJvb3QuZWFjaEJlZm9yZShmdW5jdGlvbihub2RlKSB7XG4gICAgICAgIGlmIChub2RlLnggPCBsZWZ0LngpIGxlZnQgPSBub2RlO1xuICAgICAgICBpZiAobm9kZS54ID4gcmlnaHQueCkgcmlnaHQgPSBub2RlO1xuICAgICAgICBpZiAobm9kZS5kZXB0aCA+IGJvdHRvbS5kZXB0aCkgYm90dG9tID0gbm9kZTtcbiAgICAgIH0pO1xuICAgICAgdmFyIHMgPSBsZWZ0ID09PSByaWdodCA/IDEgOiBzZXBhcmF0aW9uKGxlZnQsIHJpZ2h0KSAvIDIsXG4gICAgICAgICAgdHggPSBzIC0gbGVmdC54LFxuICAgICAgICAgIGt4ID0gZHggLyAocmlnaHQueCArIHMgKyB0eCksXG4gICAgICAgICAga3kgPSBkeSAvIChib3R0b20uZGVwdGggfHwgMSk7XG4gICAgICByb290LmVhY2hCZWZvcmUoZnVuY3Rpb24obm9kZSkge1xuICAgICAgICBub2RlLnggPSAobm9kZS54ICsgdHgpICoga3g7XG4gICAgICAgIG5vZGUueSA9IG5vZGUuZGVwdGggKiBreTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiByb290O1xuICB9XG5cbiAgLy8gQ29tcHV0ZXMgYSBwcmVsaW1pbmFyeSB4LWNvb3JkaW5hdGUgZm9yIHYuIEJlZm9yZSB0aGF0LCBGSVJTVCBXQUxLIGlzXG4gIC8vIGFwcGxpZWQgcmVjdXJzaXZlbHkgdG8gdGhlIGNoaWxkcmVuIG9mIHYsIGFzIHdlbGwgYXMgdGhlIGZ1bmN0aW9uXG4gIC8vIEFQUE9SVElPTi4gQWZ0ZXIgc3BhY2luZyBvdXQgdGhlIGNoaWxkcmVuIGJ5IGNhbGxpbmcgRVhFQ1VURSBTSElGVFMsIHRoZVxuICAvLyBub2RlIHYgaXMgcGxhY2VkIHRvIHRoZSBtaWRwb2ludCBvZiBpdHMgb3V0ZXJtb3N0IGNoaWxkcmVuLlxuICBmdW5jdGlvbiBmaXJzdFdhbGsodikge1xuICAgIHZhciBjaGlsZHJlbiA9IHYuY2hpbGRyZW4sXG4gICAgICAgIHNpYmxpbmdzID0gdi5wYXJlbnQuY2hpbGRyZW4sXG4gICAgICAgIHcgPSB2LmkgPyBzaWJsaW5nc1t2LmkgLSAxXSA6IG51bGw7XG4gICAgaWYgKGNoaWxkcmVuKSB7XG4gICAgICBleGVjdXRlU2hpZnRzKHYpO1xuICAgICAgdmFyIG1pZHBvaW50ID0gKGNoaWxkcmVuWzBdLnogKyBjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAxXS56KSAvIDI7XG4gICAgICBpZiAodykge1xuICAgICAgICB2LnogPSB3LnogKyBzZXBhcmF0aW9uKHYuXywgdy5fKTtcbiAgICAgICAgdi5tID0gdi56IC0gbWlkcG9pbnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2LnogPSBtaWRwb2ludDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHcpIHtcbiAgICAgIHYueiA9IHcueiArIHNlcGFyYXRpb24odi5fLCB3Ll8pO1xuICAgIH1cbiAgICB2LnBhcmVudC5BID0gYXBwb3J0aW9uKHYsIHcsIHYucGFyZW50LkEgfHwgc2libGluZ3NbMF0pO1xuICB9XG5cbiAgLy8gQ29tcHV0ZXMgYWxsIHJlYWwgeC1jb29yZGluYXRlcyBieSBzdW1taW5nIHVwIHRoZSBtb2RpZmllcnMgcmVjdXJzaXZlbHkuXG4gIGZ1bmN0aW9uIHNlY29uZFdhbGsodikge1xuICAgIHYuXy54ID0gdi56ICsgdi5wYXJlbnQubTtcbiAgICB2Lm0gKz0gdi5wYXJlbnQubTtcbiAgfVxuXG4gIC8vIFRoZSBjb3JlIG9mIHRoZSBhbGdvcml0aG0uIEhlcmUsIGEgbmV3IHN1YnRyZWUgaXMgY29tYmluZWQgd2l0aCB0aGVcbiAgLy8gcHJldmlvdXMgc3VidHJlZXMuIFRocmVhZHMgYXJlIHVzZWQgdG8gdHJhdmVyc2UgdGhlIGluc2lkZSBhbmQgb3V0c2lkZVxuICAvLyBjb250b3VycyBvZiB0aGUgbGVmdCBhbmQgcmlnaHQgc3VidHJlZSB1cCB0byB0aGUgaGlnaGVzdCBjb21tb24gbGV2ZWwuIFRoZVxuICAvLyB2ZXJ0aWNlcyB1c2VkIGZvciB0aGUgdHJhdmVyc2FscyBhcmUgdmkrLCB2aS0sIHZvLSwgYW5kIHZvKywgd2hlcmUgdGhlXG4gIC8vIHN1cGVyc2NyaXB0IG8gbWVhbnMgb3V0c2lkZSBhbmQgaSBtZWFucyBpbnNpZGUsIHRoZSBzdWJzY3JpcHQgLSBtZWFucyBsZWZ0XG4gIC8vIHN1YnRyZWUgYW5kICsgbWVhbnMgcmlnaHQgc3VidHJlZS4gRm9yIHN1bW1pbmcgdXAgdGhlIG1vZGlmaWVycyBhbG9uZyB0aGVcbiAgLy8gY29udG91ciwgd2UgdXNlIHJlc3BlY3RpdmUgdmFyaWFibGVzIHNpKywgc2ktLCBzby0sIGFuZCBzbysuIFdoZW5ldmVyIHR3b1xuICAvLyBub2RlcyBvZiB0aGUgaW5zaWRlIGNvbnRvdXJzIGNvbmZsaWN0LCB3ZSBjb21wdXRlIHRoZSBsZWZ0IG9uZSBvZiB0aGVcbiAgLy8gZ3JlYXRlc3QgdW5jb21tb24gYW5jZXN0b3JzIHVzaW5nIHRoZSBmdW5jdGlvbiBBTkNFU1RPUiBhbmQgY2FsbCBNT1ZFXG4gIC8vIFNVQlRSRUUgdG8gc2hpZnQgdGhlIHN1YnRyZWUgYW5kIHByZXBhcmUgdGhlIHNoaWZ0cyBvZiBzbWFsbGVyIHN1YnRyZWVzLlxuICAvLyBGaW5hbGx5LCB3ZSBhZGQgYSBuZXcgdGhyZWFkIChpZiBuZWNlc3NhcnkpLlxuICBmdW5jdGlvbiBhcHBvcnRpb24odiwgdywgYW5jZXN0b3IpIHtcbiAgICBpZiAodykge1xuICAgICAgdmFyIHZpcCA9IHYsXG4gICAgICAgICAgdm9wID0gdixcbiAgICAgICAgICB2aW0gPSB3LFxuICAgICAgICAgIHZvbSA9IHZpcC5wYXJlbnQuY2hpbGRyZW5bMF0sXG4gICAgICAgICAgc2lwID0gdmlwLm0sXG4gICAgICAgICAgc29wID0gdm9wLm0sXG4gICAgICAgICAgc2ltID0gdmltLm0sXG4gICAgICAgICAgc29tID0gdm9tLm0sXG4gICAgICAgICAgc2hpZnQ7XG4gICAgICB3aGlsZSAodmltID0gbmV4dFJpZ2h0KHZpbSksIHZpcCA9IG5leHRMZWZ0KHZpcCksIHZpbSAmJiB2aXApIHtcbiAgICAgICAgdm9tID0gbmV4dExlZnQodm9tKTtcbiAgICAgICAgdm9wID0gbmV4dFJpZ2h0KHZvcCk7XG4gICAgICAgIHZvcC5hID0gdjtcbiAgICAgICAgc2hpZnQgPSB2aW0ueiArIHNpbSAtIHZpcC56IC0gc2lwICsgc2VwYXJhdGlvbih2aW0uXywgdmlwLl8pO1xuICAgICAgICBpZiAoc2hpZnQgPiAwKSB7XG4gICAgICAgICAgbW92ZVN1YnRyZWUobmV4dEFuY2VzdG9yKHZpbSwgdiwgYW5jZXN0b3IpLCB2LCBzaGlmdCk7XG4gICAgICAgICAgc2lwICs9IHNoaWZ0O1xuICAgICAgICAgIHNvcCArPSBzaGlmdDtcbiAgICAgICAgfVxuICAgICAgICBzaW0gKz0gdmltLm07XG4gICAgICAgIHNpcCArPSB2aXAubTtcbiAgICAgICAgc29tICs9IHZvbS5tO1xuICAgICAgICBzb3AgKz0gdm9wLm07XG4gICAgICB9XG4gICAgICBpZiAodmltICYmICFuZXh0UmlnaHQodm9wKSkge1xuICAgICAgICB2b3AudCA9IHZpbTtcbiAgICAgICAgdm9wLm0gKz0gc2ltIC0gc29wO1xuICAgICAgfVxuICAgICAgaWYgKHZpcCAmJiAhbmV4dExlZnQodm9tKSkge1xuICAgICAgICB2b20udCA9IHZpcDtcbiAgICAgICAgdm9tLm0gKz0gc2lwIC0gc29tO1xuICAgICAgICBhbmNlc3RvciA9IHY7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhbmNlc3RvcjtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNpemVOb2RlKG5vZGUpIHtcbiAgICBub2RlLnggKj0gZHg7XG4gICAgbm9kZS55ID0gbm9kZS5kZXB0aCAqIGR5O1xuICB9XG5cbiAgdHJlZS5zZXBhcmF0aW9uID0gZnVuY3Rpb24oeCkge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHNlcGFyYXRpb24gPSB4LCB0cmVlKSA6IHNlcGFyYXRpb247XG4gIH07XG5cbiAgdHJlZS5zaXplID0gZnVuY3Rpb24oeCkge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKG5vZGVTaXplID0gZmFsc2UsIGR4ID0gK3hbMF0sIGR5ID0gK3hbMV0sIHRyZWUpIDogKG5vZGVTaXplID8gbnVsbCA6IFtkeCwgZHldKTtcbiAgfTtcblxuICB0cmVlLm5vZGVTaXplID0gZnVuY3Rpb24oeCkge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKG5vZGVTaXplID0gdHJ1ZSwgZHggPSAreFswXSwgZHkgPSAreFsxXSwgdHJlZSkgOiAobm9kZVNpemUgPyBbZHgsIGR5XSA6IG51bGwpO1xuICB9O1xuXG4gIHJldHVybiB0cmVlO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24ocGFyZW50LCB4MCwgeTAsIHgxLCB5MSkge1xuICB2YXIgbm9kZXMgPSBwYXJlbnQuY2hpbGRyZW4sXG4gICAgICBpLCBuID0gbm9kZXMubGVuZ3RoLFxuICAgICAgc3VtLCBzdW1zID0gbmV3IEFycmF5KG4gKyAxKTtcblxuICBmb3IgKHN1bXNbMF0gPSBzdW0gPSBpID0gMDsgaSA8IG47ICsraSkge1xuICAgIHN1bXNbaSArIDFdID0gc3VtICs9IG5vZGVzW2ldLnZhbHVlO1xuICB9XG5cbiAgcGFydGl0aW9uKDAsIG4sIHBhcmVudC52YWx1ZSwgeDAsIHkwLCB4MSwgeTEpO1xuXG4gIGZ1bmN0aW9uIHBhcnRpdGlvbihpLCBqLCB2YWx1ZSwgeDAsIHkwLCB4MSwgeTEpIHtcbiAgICBpZiAoaSA+PSBqIC0gMSkge1xuICAgICAgdmFyIG5vZGUgPSBub2Rlc1tpXTtcbiAgICAgIG5vZGUueDAgPSB4MCwgbm9kZS55MCA9IHkwO1xuICAgICAgbm9kZS54MSA9IHgxLCBub2RlLnkxID0geTE7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHZhbHVlT2Zmc2V0ID0gc3Vtc1tpXSxcbiAgICAgICAgdmFsdWVUYXJnZXQgPSAodmFsdWUgLyAyKSArIHZhbHVlT2Zmc2V0LFxuICAgICAgICBrID0gaSArIDEsXG4gICAgICAgIGhpID0gaiAtIDE7XG5cbiAgICB3aGlsZSAoayA8IGhpKSB7XG4gICAgICB2YXIgbWlkID0gayArIGhpID4+PiAxO1xuICAgICAgaWYgKHN1bXNbbWlkXSA8IHZhbHVlVGFyZ2V0KSBrID0gbWlkICsgMTtcbiAgICAgIGVsc2UgaGkgPSBtaWQ7XG4gICAgfVxuXG4gICAgaWYgKCh2YWx1ZVRhcmdldCAtIHN1bXNbayAtIDFdKSA8IChzdW1zW2tdIC0gdmFsdWVUYXJnZXQpICYmIGkgKyAxIDwgaykgLS1rO1xuXG4gICAgdmFyIHZhbHVlTGVmdCA9IHN1bXNba10gLSB2YWx1ZU9mZnNldCxcbiAgICAgICAgdmFsdWVSaWdodCA9IHZhbHVlIC0gdmFsdWVMZWZ0O1xuXG4gICAgaWYgKCh4MSAtIHgwKSA+ICh5MSAtIHkwKSkge1xuICAgICAgdmFyIHhrID0gKHgwICogdmFsdWVSaWdodCArIHgxICogdmFsdWVMZWZ0KSAvIHZhbHVlO1xuICAgICAgcGFydGl0aW9uKGksIGssIHZhbHVlTGVmdCwgeDAsIHkwLCB4aywgeTEpO1xuICAgICAgcGFydGl0aW9uKGssIGosIHZhbHVlUmlnaHQsIHhrLCB5MCwgeDEsIHkxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHlrID0gKHkwICogdmFsdWVSaWdodCArIHkxICogdmFsdWVMZWZ0KSAvIHZhbHVlO1xuICAgICAgcGFydGl0aW9uKGksIGssIHZhbHVlTGVmdCwgeDAsIHkwLCB4MSwgeWspO1xuICAgICAgcGFydGl0aW9uKGssIGosIHZhbHVlUmlnaHQsIHgwLCB5aywgeDEsIHkxKTtcbiAgICB9XG4gIH1cbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHBhcmVudCwgeDAsIHkwLCB4MSwgeTEpIHtcbiAgdmFyIG5vZGVzID0gcGFyZW50LmNoaWxkcmVuLFxuICAgICAgbm9kZSxcbiAgICAgIGkgPSAtMSxcbiAgICAgIG4gPSBub2Rlcy5sZW5ndGgsXG4gICAgICBrID0gcGFyZW50LnZhbHVlICYmICh4MSAtIHgwKSAvIHBhcmVudC52YWx1ZTtcblxuICB3aGlsZSAoKytpIDwgbikge1xuICAgIG5vZGUgPSBub2Rlc1tpXSwgbm9kZS55MCA9IHkwLCBub2RlLnkxID0geTE7XG4gICAgbm9kZS54MCA9IHgwLCBub2RlLngxID0geDAgKz0gbm9kZS52YWx1ZSAqIGs7XG4gIH1cbn1cbiIsImltcG9ydCByb3VuZE5vZGUgZnJvbSBcIi4vcm91bmQuanNcIjtcbmltcG9ydCBzcXVhcmlmeSBmcm9tIFwiLi9zcXVhcmlmeS5qc1wiO1xuaW1wb3J0IHtyZXF1aXJlZH0gZnJvbSBcIi4uL2FjY2Vzc29ycy5qc1wiO1xuaW1wb3J0IGNvbnN0YW50LCB7Y29uc3RhbnRaZXJvfSBmcm9tIFwiLi4vY29uc3RhbnQuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciB0aWxlID0gc3F1YXJpZnksXG4gICAgICByb3VuZCA9IGZhbHNlLFxuICAgICAgZHggPSAxLFxuICAgICAgZHkgPSAxLFxuICAgICAgcGFkZGluZ1N0YWNrID0gWzBdLFxuICAgICAgcGFkZGluZ0lubmVyID0gY29uc3RhbnRaZXJvLFxuICAgICAgcGFkZGluZ1RvcCA9IGNvbnN0YW50WmVybyxcbiAgICAgIHBhZGRpbmdSaWdodCA9IGNvbnN0YW50WmVybyxcbiAgICAgIHBhZGRpbmdCb3R0b20gPSBjb25zdGFudFplcm8sXG4gICAgICBwYWRkaW5nTGVmdCA9IGNvbnN0YW50WmVybztcblxuICBmdW5jdGlvbiB0cmVlbWFwKHJvb3QpIHtcbiAgICByb290LngwID1cbiAgICByb290LnkwID0gMDtcbiAgICByb290LngxID0gZHg7XG4gICAgcm9vdC55MSA9IGR5O1xuICAgIHJvb3QuZWFjaEJlZm9yZShwb3NpdGlvbk5vZGUpO1xuICAgIHBhZGRpbmdTdGFjayA9IFswXTtcbiAgICBpZiAocm91bmQpIHJvb3QuZWFjaEJlZm9yZShyb3VuZE5vZGUpO1xuICAgIHJldHVybiByb290O1xuICB9XG5cbiAgZnVuY3Rpb24gcG9zaXRpb25Ob2RlKG5vZGUpIHtcbiAgICB2YXIgcCA9IHBhZGRpbmdTdGFja1tub2RlLmRlcHRoXSxcbiAgICAgICAgeDAgPSBub2RlLngwICsgcCxcbiAgICAgICAgeTAgPSBub2RlLnkwICsgcCxcbiAgICAgICAgeDEgPSBub2RlLngxIC0gcCxcbiAgICAgICAgeTEgPSBub2RlLnkxIC0gcDtcbiAgICBpZiAoeDEgPCB4MCkgeDAgPSB4MSA9ICh4MCArIHgxKSAvIDI7XG4gICAgaWYgKHkxIDwgeTApIHkwID0geTEgPSAoeTAgKyB5MSkgLyAyO1xuICAgIG5vZGUueDAgPSB4MDtcbiAgICBub2RlLnkwID0geTA7XG4gICAgbm9kZS54MSA9IHgxO1xuICAgIG5vZGUueTEgPSB5MTtcbiAgICBpZiAobm9kZS5jaGlsZHJlbikge1xuICAgICAgcCA9IHBhZGRpbmdTdGFja1tub2RlLmRlcHRoICsgMV0gPSBwYWRkaW5nSW5uZXIobm9kZSkgLyAyO1xuICAgICAgeDAgKz0gcGFkZGluZ0xlZnQobm9kZSkgLSBwO1xuICAgICAgeTAgKz0gcGFkZGluZ1RvcChub2RlKSAtIHA7XG4gICAgICB4MSAtPSBwYWRkaW5nUmlnaHQobm9kZSkgLSBwO1xuICAgICAgeTEgLT0gcGFkZGluZ0JvdHRvbShub2RlKSAtIHA7XG4gICAgICBpZiAoeDEgPCB4MCkgeDAgPSB4MSA9ICh4MCArIHgxKSAvIDI7XG4gICAgICBpZiAoeTEgPCB5MCkgeTAgPSB5MSA9ICh5MCArIHkxKSAvIDI7XG4gICAgICB0aWxlKG5vZGUsIHgwLCB5MCwgeDEsIHkxKTtcbiAgICB9XG4gIH1cblxuICB0cmVlbWFwLnJvdW5kID0gZnVuY3Rpb24oeCkge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHJvdW5kID0gISF4LCB0cmVlbWFwKSA6IHJvdW5kO1xuICB9O1xuXG4gIHRyZWVtYXAuc2l6ZSA9IGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChkeCA9ICt4WzBdLCBkeSA9ICt4WzFdLCB0cmVlbWFwKSA6IFtkeCwgZHldO1xuICB9O1xuXG4gIHRyZWVtYXAudGlsZSA9IGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0aWxlID0gcmVxdWlyZWQoeCksIHRyZWVtYXApIDogdGlsZTtcbiAgfTtcblxuICB0cmVlbWFwLnBhZGRpbmcgPSBmdW5jdGlvbih4KSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyB0cmVlbWFwLnBhZGRpbmdJbm5lcih4KS5wYWRkaW5nT3V0ZXIoeCkgOiB0cmVlbWFwLnBhZGRpbmdJbm5lcigpO1xuICB9O1xuXG4gIHRyZWVtYXAucGFkZGluZ0lubmVyID0gZnVuY3Rpb24oeCkge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHBhZGRpbmdJbm5lciA9IHR5cGVvZiB4ID09PSBcImZ1bmN0aW9uXCIgPyB4IDogY29uc3RhbnQoK3gpLCB0cmVlbWFwKSA6IHBhZGRpbmdJbm5lcjtcbiAgfTtcblxuICB0cmVlbWFwLnBhZGRpbmdPdXRlciA9IGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IHRyZWVtYXAucGFkZGluZ1RvcCh4KS5wYWRkaW5nUmlnaHQoeCkucGFkZGluZ0JvdHRvbSh4KS5wYWRkaW5nTGVmdCh4KSA6IHRyZWVtYXAucGFkZGluZ1RvcCgpO1xuICB9O1xuXG4gIHRyZWVtYXAucGFkZGluZ1RvcCA9IGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChwYWRkaW5nVG9wID0gdHlwZW9mIHggPT09IFwiZnVuY3Rpb25cIiA/IHggOiBjb25zdGFudCgreCksIHRyZWVtYXApIDogcGFkZGluZ1RvcDtcbiAgfTtcblxuICB0cmVlbWFwLnBhZGRpbmdSaWdodCA9IGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChwYWRkaW5nUmlnaHQgPSB0eXBlb2YgeCA9PT0gXCJmdW5jdGlvblwiID8geCA6IGNvbnN0YW50KCt4KSwgdHJlZW1hcCkgOiBwYWRkaW5nUmlnaHQ7XG4gIH07XG5cbiAgdHJlZW1hcC5wYWRkaW5nQm90dG9tID0gZnVuY3Rpb24oeCkge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHBhZGRpbmdCb3R0b20gPSB0eXBlb2YgeCA9PT0gXCJmdW5jdGlvblwiID8geCA6IGNvbnN0YW50KCt4KSwgdHJlZW1hcCkgOiBwYWRkaW5nQm90dG9tO1xuICB9O1xuXG4gIHRyZWVtYXAucGFkZGluZ0xlZnQgPSBmdW5jdGlvbih4KSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocGFkZGluZ0xlZnQgPSB0eXBlb2YgeCA9PT0gXCJmdW5jdGlvblwiID8geCA6IGNvbnN0YW50KCt4KSwgdHJlZW1hcCkgOiBwYWRkaW5nTGVmdDtcbiAgfTtcblxuICByZXR1cm4gdHJlZW1hcDtcbn1cbiIsImltcG9ydCB0cmVlbWFwRGljZSBmcm9tIFwiLi9kaWNlLmpzXCI7XG5pbXBvcnQgdHJlZW1hcFNsaWNlIGZyb20gXCIuL3NsaWNlLmpzXCI7XG5pbXBvcnQge3BoaSwgc3F1YXJpZnlSYXRpb30gZnJvbSBcIi4vc3F1YXJpZnkuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgKGZ1bmN0aW9uIGN1c3RvbShyYXRpbykge1xuXG4gIGZ1bmN0aW9uIHJlc3F1YXJpZnkocGFyZW50LCB4MCwgeTAsIHgxLCB5MSkge1xuICAgIGlmICgocm93cyA9IHBhcmVudC5fc3F1YXJpZnkpICYmIChyb3dzLnJhdGlvID09PSByYXRpbykpIHtcbiAgICAgIHZhciByb3dzLFxuICAgICAgICAgIHJvdyxcbiAgICAgICAgICBub2RlcyxcbiAgICAgICAgICBpLFxuICAgICAgICAgIGogPSAtMSxcbiAgICAgICAgICBuLFxuICAgICAgICAgIG0gPSByb3dzLmxlbmd0aCxcbiAgICAgICAgICB2YWx1ZSA9IHBhcmVudC52YWx1ZTtcblxuICAgICAgd2hpbGUgKCsraiA8IG0pIHtcbiAgICAgICAgcm93ID0gcm93c1tqXSwgbm9kZXMgPSByb3cuY2hpbGRyZW47XG4gICAgICAgIGZvciAoaSA9IHJvdy52YWx1ZSA9IDAsIG4gPSBub2Rlcy5sZW5ndGg7IGkgPCBuOyArK2kpIHJvdy52YWx1ZSArPSBub2Rlc1tpXS52YWx1ZTtcbiAgICAgICAgaWYgKHJvdy5kaWNlKSB0cmVlbWFwRGljZShyb3csIHgwLCB5MCwgeDEsIHkwICs9ICh5MSAtIHkwKSAqIHJvdy52YWx1ZSAvIHZhbHVlKTtcbiAgICAgICAgZWxzZSB0cmVlbWFwU2xpY2Uocm93LCB4MCwgeTAsIHgwICs9ICh4MSAtIHgwKSAqIHJvdy52YWx1ZSAvIHZhbHVlLCB5MSk7XG4gICAgICAgIHZhbHVlIC09IHJvdy52YWx1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGFyZW50Ll9zcXVhcmlmeSA9IHJvd3MgPSBzcXVhcmlmeVJhdGlvKHJhdGlvLCBwYXJlbnQsIHgwLCB5MCwgeDEsIHkxKTtcbiAgICAgIHJvd3MucmF0aW8gPSByYXRpbztcbiAgICB9XG4gIH1cblxuICByZXNxdWFyaWZ5LnJhdGlvID0gZnVuY3Rpb24oeCkge1xuICAgIHJldHVybiBjdXN0b20oKHggPSAreCkgPiAxID8geCA6IDEpO1xuICB9O1xuXG4gIHJldHVybiByZXNxdWFyaWZ5O1xufSkocGhpKTtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5vZGUpIHtcbiAgbm9kZS54MCA9IE1hdGgucm91bmQobm9kZS54MCk7XG4gIG5vZGUueTAgPSBNYXRoLnJvdW5kKG5vZGUueTApO1xuICBub2RlLngxID0gTWF0aC5yb3VuZChub2RlLngxKTtcbiAgbm9kZS55MSA9IE1hdGgucm91bmQobm9kZS55MSk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihwYXJlbnQsIHgwLCB5MCwgeDEsIHkxKSB7XG4gIHZhciBub2RlcyA9IHBhcmVudC5jaGlsZHJlbixcbiAgICAgIG5vZGUsXG4gICAgICBpID0gLTEsXG4gICAgICBuID0gbm9kZXMubGVuZ3RoLFxuICAgICAgayA9IHBhcmVudC52YWx1ZSAmJiAoeTEgLSB5MCkgLyBwYXJlbnQudmFsdWU7XG5cbiAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICBub2RlID0gbm9kZXNbaV0sIG5vZGUueDAgPSB4MCwgbm9kZS54MSA9IHgxO1xuICAgIG5vZGUueTAgPSB5MCwgbm9kZS55MSA9IHkwICs9IG5vZGUudmFsdWUgKiBrO1xuICB9XG59XG4iLCJpbXBvcnQgZGljZSBmcm9tIFwiLi9kaWNlLmpzXCI7XG5pbXBvcnQgc2xpY2UgZnJvbSBcIi4vc2xpY2UuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24ocGFyZW50LCB4MCwgeTAsIHgxLCB5MSkge1xuICAocGFyZW50LmRlcHRoICYgMSA/IHNsaWNlIDogZGljZSkocGFyZW50LCB4MCwgeTAsIHgxLCB5MSk7XG59XG4iLCJpbXBvcnQgdHJlZW1hcERpY2UgZnJvbSBcIi4vZGljZS5qc1wiO1xuaW1wb3J0IHRyZWVtYXBTbGljZSBmcm9tIFwiLi9zbGljZS5qc1wiO1xuXG5leHBvcnQgdmFyIHBoaSA9ICgxICsgTWF0aC5zcXJ0KDUpKSAvIDI7XG5cbmV4cG9ydCBmdW5jdGlvbiBzcXVhcmlmeVJhdGlvKHJhdGlvLCBwYXJlbnQsIHgwLCB5MCwgeDEsIHkxKSB7XG4gIHZhciByb3dzID0gW10sXG4gICAgICBub2RlcyA9IHBhcmVudC5jaGlsZHJlbixcbiAgICAgIHJvdyxcbiAgICAgIG5vZGVWYWx1ZSxcbiAgICAgIGkwID0gMCxcbiAgICAgIGkxID0gMCxcbiAgICAgIG4gPSBub2Rlcy5sZW5ndGgsXG4gICAgICBkeCwgZHksXG4gICAgICB2YWx1ZSA9IHBhcmVudC52YWx1ZSxcbiAgICAgIHN1bVZhbHVlLFxuICAgICAgbWluVmFsdWUsXG4gICAgICBtYXhWYWx1ZSxcbiAgICAgIG5ld1JhdGlvLFxuICAgICAgbWluUmF0aW8sXG4gICAgICBhbHBoYSxcbiAgICAgIGJldGE7XG5cbiAgd2hpbGUgKGkwIDwgbikge1xuICAgIGR4ID0geDEgLSB4MCwgZHkgPSB5MSAtIHkwO1xuXG4gICAgLy8gRmluZCB0aGUgbmV4dCBub24tZW1wdHkgbm9kZS5cbiAgICBkbyBzdW1WYWx1ZSA9IG5vZGVzW2kxKytdLnZhbHVlOyB3aGlsZSAoIXN1bVZhbHVlICYmIGkxIDwgbik7XG4gICAgbWluVmFsdWUgPSBtYXhWYWx1ZSA9IHN1bVZhbHVlO1xuICAgIGFscGhhID0gTWF0aC5tYXgoZHkgLyBkeCwgZHggLyBkeSkgLyAodmFsdWUgKiByYXRpbyk7XG4gICAgYmV0YSA9IHN1bVZhbHVlICogc3VtVmFsdWUgKiBhbHBoYTtcbiAgICBtaW5SYXRpbyA9IE1hdGgubWF4KG1heFZhbHVlIC8gYmV0YSwgYmV0YSAvIG1pblZhbHVlKTtcblxuICAgIC8vIEtlZXAgYWRkaW5nIG5vZGVzIHdoaWxlIHRoZSBhc3BlY3QgcmF0aW8gbWFpbnRhaW5zIG9yIGltcHJvdmVzLlxuICAgIGZvciAoOyBpMSA8IG47ICsraTEpIHtcbiAgICAgIHN1bVZhbHVlICs9IG5vZGVWYWx1ZSA9IG5vZGVzW2kxXS52YWx1ZTtcbiAgICAgIGlmIChub2RlVmFsdWUgPCBtaW5WYWx1ZSkgbWluVmFsdWUgPSBub2RlVmFsdWU7XG4gICAgICBpZiAobm9kZVZhbHVlID4gbWF4VmFsdWUpIG1heFZhbHVlID0gbm9kZVZhbHVlO1xuICAgICAgYmV0YSA9IHN1bVZhbHVlICogc3VtVmFsdWUgKiBhbHBoYTtcbiAgICAgIG5ld1JhdGlvID0gTWF0aC5tYXgobWF4VmFsdWUgLyBiZXRhLCBiZXRhIC8gbWluVmFsdWUpO1xuICAgICAgaWYgKG5ld1JhdGlvID4gbWluUmF0aW8pIHsgc3VtVmFsdWUgLT0gbm9kZVZhbHVlOyBicmVhazsgfVxuICAgICAgbWluUmF0aW8gPSBuZXdSYXRpbztcbiAgICB9XG5cbiAgICAvLyBQb3NpdGlvbiBhbmQgcmVjb3JkIHRoZSByb3cgb3JpZW50YXRpb24uXG4gICAgcm93cy5wdXNoKHJvdyA9IHt2YWx1ZTogc3VtVmFsdWUsIGRpY2U6IGR4IDwgZHksIGNoaWxkcmVuOiBub2Rlcy5zbGljZShpMCwgaTEpfSk7XG4gICAgaWYgKHJvdy5kaWNlKSB0cmVlbWFwRGljZShyb3csIHgwLCB5MCwgeDEsIHZhbHVlID8geTAgKz0gZHkgKiBzdW1WYWx1ZSAvIHZhbHVlIDogeTEpO1xuICAgIGVsc2UgdHJlZW1hcFNsaWNlKHJvdywgeDAsIHkwLCB2YWx1ZSA/IHgwICs9IGR4ICogc3VtVmFsdWUgLyB2YWx1ZSA6IHgxLCB5MSk7XG4gICAgdmFsdWUgLT0gc3VtVmFsdWUsIGkwID0gaTE7XG4gIH1cblxuICByZXR1cm4gcm93cztcbn1cblxuZXhwb3J0IGRlZmF1bHQgKGZ1bmN0aW9uIGN1c3RvbShyYXRpbykge1xuXG4gIGZ1bmN0aW9uIHNxdWFyaWZ5KHBhcmVudCwgeDAsIHkwLCB4MSwgeTEpIHtcbiAgICBzcXVhcmlmeVJhdGlvKHJhdGlvLCBwYXJlbnQsIHgwLCB5MCwgeDEsIHkxKTtcbiAgfVxuXG4gIHNxdWFyaWZ5LnJhdGlvID0gZnVuY3Rpb24oeCkge1xuICAgIHJldHVybiBjdXN0b20oKHggPSAreCkgPiAxID8geCA6IDEpO1xuICB9O1xuXG4gIHJldHVybiBzcXVhcmlmeTtcbn0pKHBoaSk7XG4iLCJpbXBvcnQgdmFsdWUgZnJvbSBcIi4vdmFsdWUuanNcIjtcbmltcG9ydCBudW1iZXJBcnJheSwge2lzTnVtYmVyQXJyYXl9IGZyb20gXCIuL251bWJlckFycmF5LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgcmV0dXJuIChpc051bWJlckFycmF5KGIpID8gbnVtYmVyQXJyYXkgOiBnZW5lcmljQXJyYXkpKGEsIGIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJpY0FycmF5KGEsIGIpIHtcbiAgdmFyIG5iID0gYiA/IGIubGVuZ3RoIDogMCxcbiAgICAgIG5hID0gYSA/IE1hdGgubWluKG5iLCBhLmxlbmd0aCkgOiAwLFxuICAgICAgeCA9IG5ldyBBcnJheShuYSksXG4gICAgICBjID0gbmV3IEFycmF5KG5iKSxcbiAgICAgIGk7XG5cbiAgZm9yIChpID0gMDsgaSA8IG5hOyArK2kpIHhbaV0gPSB2YWx1ZShhW2ldLCBiW2ldKTtcbiAgZm9yICg7IGkgPCBuYjsgKytpKSBjW2ldID0gYltpXTtcblxuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIGZvciAoaSA9IDA7IGkgPCBuYTsgKytpKSBjW2ldID0geFtpXSh0KTtcbiAgICByZXR1cm4gYztcbiAgfTtcbn1cbiIsImV4cG9ydCBmdW5jdGlvbiBiYXNpcyh0MSwgdjAsIHYxLCB2MiwgdjMpIHtcbiAgdmFyIHQyID0gdDEgKiB0MSwgdDMgPSB0MiAqIHQxO1xuICByZXR1cm4gKCgxIC0gMyAqIHQxICsgMyAqIHQyIC0gdDMpICogdjBcbiAgICAgICsgKDQgLSA2ICogdDIgKyAzICogdDMpICogdjFcbiAgICAgICsgKDEgKyAzICogdDEgKyAzICogdDIgLSAzICogdDMpICogdjJcbiAgICAgICsgdDMgKiB2MykgLyA2O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZXMpIHtcbiAgdmFyIG4gPSB2YWx1ZXMubGVuZ3RoIC0gMTtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgaSA9IHQgPD0gMCA/ICh0ID0gMCkgOiB0ID49IDEgPyAodCA9IDEsIG4gLSAxKSA6IE1hdGguZmxvb3IodCAqIG4pLFxuICAgICAgICB2MSA9IHZhbHVlc1tpXSxcbiAgICAgICAgdjIgPSB2YWx1ZXNbaSArIDFdLFxuICAgICAgICB2MCA9IGkgPiAwID8gdmFsdWVzW2kgLSAxXSA6IDIgKiB2MSAtIHYyLFxuICAgICAgICB2MyA9IGkgPCBuIC0gMSA/IHZhbHVlc1tpICsgMl0gOiAyICogdjIgLSB2MTtcbiAgICByZXR1cm4gYmFzaXMoKHQgLSBpIC8gbikgKiBuLCB2MCwgdjEsIHYyLCB2Myk7XG4gIH07XG59XG4iLCJpbXBvcnQge2Jhc2lzfSBmcm9tIFwiLi9iYXNpcy5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZXMpIHtcbiAgdmFyIG4gPSB2YWx1ZXMubGVuZ3RoO1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIHZhciBpID0gTWF0aC5mbG9vcigoKHQgJT0gMSkgPCAwID8gKyt0IDogdCkgKiBuKSxcbiAgICAgICAgdjAgPSB2YWx1ZXNbKGkgKyBuIC0gMSkgJSBuXSxcbiAgICAgICAgdjEgPSB2YWx1ZXNbaSAlIG5dLFxuICAgICAgICB2MiA9IHZhbHVlc1soaSArIDEpICUgbl0sXG4gICAgICAgIHYzID0gdmFsdWVzWyhpICsgMikgJSBuXTtcbiAgICByZXR1cm4gYmFzaXMoKHQgLSBpIC8gbikgKiBuLCB2MCwgdjEsIHYyLCB2Myk7XG4gIH07XG59XG4iLCJpbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnQuanNcIjtcblxuZnVuY3Rpb24gbGluZWFyKGEsIGQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gYSArIHQgKiBkO1xuICB9O1xufVxuXG5mdW5jdGlvbiBleHBvbmVudGlhbChhLCBiLCB5KSB7XG4gIHJldHVybiBhID0gTWF0aC5wb3coYSwgeSksIGIgPSBNYXRoLnBvdyhiLCB5KSAtIGEsIHkgPSAxIC8geSwgZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBNYXRoLnBvdyhhICsgdCAqIGIsIHkpO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaHVlKGEsIGIpIHtcbiAgdmFyIGQgPSBiIC0gYTtcbiAgcmV0dXJuIGQgPyBsaW5lYXIoYSwgZCA+IDE4MCB8fCBkIDwgLTE4MCA/IGQgLSAzNjAgKiBNYXRoLnJvdW5kKGQgLyAzNjApIDogZCkgOiBjb25zdGFudChpc05hTihhKSA/IGIgOiBhKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdhbW1hKHkpIHtcbiAgcmV0dXJuICh5ID0gK3kpID09PSAxID8gbm9nYW1tYSA6IGZ1bmN0aW9uKGEsIGIpIHtcbiAgICByZXR1cm4gYiAtIGEgPyBleHBvbmVudGlhbChhLCBiLCB5KSA6IGNvbnN0YW50KGlzTmFOKGEpID8gYiA6IGEpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBub2dhbW1hKGEsIGIpIHtcbiAgdmFyIGQgPSBiIC0gYTtcbiAgcmV0dXJuIGQgPyBsaW5lYXIoYSwgZCkgOiBjb25zdGFudChpc05hTihhKSA/IGIgOiBhKTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB4O1xuICB9O1xufVxuIiwiaW1wb3J0IHtjdWJlaGVsaXggYXMgY29sb3JDdWJlaGVsaXh9IGZyb20gXCJkMy1jb2xvclwiO1xuaW1wb3J0IGNvbG9yLCB7aHVlfSBmcm9tIFwiLi9jb2xvci5qc1wiO1xuXG5mdW5jdGlvbiBjdWJlaGVsaXgoaHVlKSB7XG4gIHJldHVybiAoZnVuY3Rpb24gY3ViZWhlbGl4R2FtbWEoeSkge1xuICAgIHkgPSAreTtcblxuICAgIGZ1bmN0aW9uIGN1YmVoZWxpeChzdGFydCwgZW5kKSB7XG4gICAgICB2YXIgaCA9IGh1ZSgoc3RhcnQgPSBjb2xvckN1YmVoZWxpeChzdGFydCkpLmgsIChlbmQgPSBjb2xvckN1YmVoZWxpeChlbmQpKS5oKSxcbiAgICAgICAgICBzID0gY29sb3Ioc3RhcnQucywgZW5kLnMpLFxuICAgICAgICAgIGwgPSBjb2xvcihzdGFydC5sLCBlbmQubCksXG4gICAgICAgICAgb3BhY2l0eSA9IGNvbG9yKHN0YXJ0Lm9wYWNpdHksIGVuZC5vcGFjaXR5KTtcbiAgICAgIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgICAgIHN0YXJ0LmggPSBoKHQpO1xuICAgICAgICBzdGFydC5zID0gcyh0KTtcbiAgICAgICAgc3RhcnQubCA9IGwoTWF0aC5wb3codCwgeSkpO1xuICAgICAgICBzdGFydC5vcGFjaXR5ID0gb3BhY2l0eSh0KTtcbiAgICAgICAgcmV0dXJuIHN0YXJ0ICsgXCJcIjtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY3ViZWhlbGl4LmdhbW1hID0gY3ViZWhlbGl4R2FtbWE7XG5cbiAgICByZXR1cm4gY3ViZWhlbGl4O1xuICB9KSgxKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY3ViZWhlbGl4KGh1ZSk7XG5leHBvcnQgdmFyIGN1YmVoZWxpeExvbmcgPSBjdWJlaGVsaXgoY29sb3IpO1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICB2YXIgZCA9IG5ldyBEYXRlO1xuICByZXR1cm4gYSA9ICthLCBiID0gK2IsIGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gZC5zZXRUaW1lKGEgKiAoMSAtIHQpICsgYiAqIHQpLCBkO1xuICB9O1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24ocmFuZ2UpIHtcbiAgdmFyIG4gPSByYW5nZS5sZW5ndGg7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIHJhbmdlW01hdGgubWF4KDAsIE1hdGgubWluKG4gLSAxLCBNYXRoLmZsb29yKHQgKiBuKSkpXTtcbiAgfTtcbn1cbiIsImltcG9ydCB7aGNsIGFzIGNvbG9ySGNsfSBmcm9tIFwiZDMtY29sb3JcIjtcbmltcG9ydCBjb2xvciwge2h1ZX0gZnJvbSBcIi4vY29sb3IuanNcIjtcblxuZnVuY3Rpb24gaGNsKGh1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICAgIHZhciBoID0gaHVlKChzdGFydCA9IGNvbG9ySGNsKHN0YXJ0KSkuaCwgKGVuZCA9IGNvbG9ySGNsKGVuZCkpLmgpLFxuICAgICAgICBjID0gY29sb3Ioc3RhcnQuYywgZW5kLmMpLFxuICAgICAgICBsID0gY29sb3Ioc3RhcnQubCwgZW5kLmwpLFxuICAgICAgICBvcGFjaXR5ID0gY29sb3Ioc3RhcnQub3BhY2l0eSwgZW5kLm9wYWNpdHkpO1xuICAgIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgICBzdGFydC5oID0gaCh0KTtcbiAgICAgIHN0YXJ0LmMgPSBjKHQpO1xuICAgICAgc3RhcnQubCA9IGwodCk7XG4gICAgICBzdGFydC5vcGFjaXR5ID0gb3BhY2l0eSh0KTtcbiAgICAgIHJldHVybiBzdGFydCArIFwiXCI7XG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBoY2woaHVlKTtcbmV4cG9ydCB2YXIgaGNsTG9uZyA9IGhjbChjb2xvcik7XG4iLCJpbXBvcnQge2hzbCBhcyBjb2xvckhzbH0gZnJvbSBcImQzLWNvbG9yXCI7XG5pbXBvcnQgY29sb3IsIHtodWV9IGZyb20gXCIuL2NvbG9yLmpzXCI7XG5cbmZ1bmN0aW9uIGhzbChodWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgICB2YXIgaCA9IGh1ZSgoc3RhcnQgPSBjb2xvckhzbChzdGFydCkpLmgsIChlbmQgPSBjb2xvckhzbChlbmQpKS5oKSxcbiAgICAgICAgcyA9IGNvbG9yKHN0YXJ0LnMsIGVuZC5zKSxcbiAgICAgICAgbCA9IGNvbG9yKHN0YXJ0LmwsIGVuZC5sKSxcbiAgICAgICAgb3BhY2l0eSA9IGNvbG9yKHN0YXJ0Lm9wYWNpdHksIGVuZC5vcGFjaXR5KTtcbiAgICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgICAgc3RhcnQuaCA9IGgodCk7XG4gICAgICBzdGFydC5zID0gcyh0KTtcbiAgICAgIHN0YXJ0LmwgPSBsKHQpO1xuICAgICAgc3RhcnQub3BhY2l0eSA9IG9wYWNpdHkodCk7XG4gICAgICByZXR1cm4gc3RhcnQgKyBcIlwiO1xuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgaHNsKGh1ZSk7XG5leHBvcnQgdmFyIGhzbExvbmcgPSBoc2woY29sb3IpO1xuIiwiaW1wb3J0IHtodWV9IGZyb20gXCIuL2NvbG9yLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgdmFyIGkgPSBodWUoK2EsICtiKTtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgeCA9IGkodCk7XG4gICAgcmV0dXJuIHggLSAzNjAgKiBNYXRoLmZsb29yKHggLyAzNjApO1xuICB9O1xufVxuIiwiZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlfSBmcm9tIFwiLi92YWx1ZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlQXJyYXl9IGZyb20gXCIuL2FycmF5LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVCYXNpc30gZnJvbSBcIi4vYmFzaXMuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZUJhc2lzQ2xvc2VkfSBmcm9tIFwiLi9iYXNpc0Nsb3NlZC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlRGF0ZX0gZnJvbSBcIi4vZGF0ZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlRGlzY3JldGV9IGZyb20gXCIuL2Rpc2NyZXRlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVIdWV9IGZyb20gXCIuL2h1ZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlTnVtYmVyfSBmcm9tIFwiLi9udW1iZXIuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZU51bWJlckFycmF5fSBmcm9tIFwiLi9udW1iZXJBcnJheS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlT2JqZWN0fSBmcm9tIFwiLi9vYmplY3QuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZVJvdW5kfSBmcm9tIFwiLi9yb3VuZC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlU3RyaW5nfSBmcm9tIFwiLi9zdHJpbmcuanNcIjtcbmV4cG9ydCB7aW50ZXJwb2xhdGVUcmFuc2Zvcm1Dc3MsIGludGVycG9sYXRlVHJhbnNmb3JtU3ZnfSBmcm9tIFwiLi90cmFuc2Zvcm0vaW5kZXguanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZVpvb219IGZyb20gXCIuL3pvb20uanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZVJnYiwgcmdiQmFzaXMgYXMgaW50ZXJwb2xhdGVSZ2JCYXNpcywgcmdiQmFzaXNDbG9zZWQgYXMgaW50ZXJwb2xhdGVSZ2JCYXNpc0Nsb3NlZH0gZnJvbSBcIi4vcmdiLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVIc2wsIGhzbExvbmcgYXMgaW50ZXJwb2xhdGVIc2xMb25nfSBmcm9tIFwiLi9oc2wuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZUxhYn0gZnJvbSBcIi4vbGFiLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVIY2wsIGhjbExvbmcgYXMgaW50ZXJwb2xhdGVIY2xMb25nfSBmcm9tIFwiLi9oY2wuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZUN1YmVoZWxpeCwgY3ViZWhlbGl4TG9uZyBhcyBpbnRlcnBvbGF0ZUN1YmVoZWxpeExvbmd9IGZyb20gXCIuL2N1YmVoZWxpeC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHBpZWNld2lzZX0gZnJvbSBcIi4vcGllY2V3aXNlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgcXVhbnRpemV9IGZyb20gXCIuL3F1YW50aXplLmpzXCI7XG4iLCJpbXBvcnQge2xhYiBhcyBjb2xvckxhYn0gZnJvbSBcImQzLWNvbG9yXCI7XG5pbXBvcnQgY29sb3IgZnJvbSBcIi4vY29sb3IuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbGFiKHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGwgPSBjb2xvcigoc3RhcnQgPSBjb2xvckxhYihzdGFydCkpLmwsIChlbmQgPSBjb2xvckxhYihlbmQpKS5sKSxcbiAgICAgIGEgPSBjb2xvcihzdGFydC5hLCBlbmQuYSksXG4gICAgICBiID0gY29sb3Ioc3RhcnQuYiwgZW5kLmIpLFxuICAgICAgb3BhY2l0eSA9IGNvbG9yKHN0YXJ0Lm9wYWNpdHksIGVuZC5vcGFjaXR5KTtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICBzdGFydC5sID0gbCh0KTtcbiAgICBzdGFydC5hID0gYSh0KTtcbiAgICBzdGFydC5iID0gYih0KTtcbiAgICBzdGFydC5vcGFjaXR5ID0gb3BhY2l0eSh0KTtcbiAgICByZXR1cm4gc3RhcnQgKyBcIlwiO1xuICB9O1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICByZXR1cm4gYSA9ICthLCBiID0gK2IsIGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gYSAqICgxIC0gdCkgKyBiICogdDtcbiAgfTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgaWYgKCFiKSBiID0gW107XG4gIHZhciBuID0gYSA/IE1hdGgubWluKGIubGVuZ3RoLCBhLmxlbmd0aCkgOiAwLFxuICAgICAgYyA9IGIuc2xpY2UoKSxcbiAgICAgIGk7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkgY1tpXSA9IGFbaV0gKiAoMSAtIHQpICsgYltpXSAqIHQ7XG4gICAgcmV0dXJuIGM7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc051bWJlckFycmF5KHgpIHtcbiAgcmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyh4KSAmJiAhKHggaW5zdGFuY2VvZiBEYXRhVmlldyk7XG59XG4iLCJpbXBvcnQgdmFsdWUgZnJvbSBcIi4vdmFsdWUuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICB2YXIgaSA9IHt9LFxuICAgICAgYyA9IHt9LFxuICAgICAgaztcblxuICBpZiAoYSA9PT0gbnVsbCB8fCB0eXBlb2YgYSAhPT0gXCJvYmplY3RcIikgYSA9IHt9O1xuICBpZiAoYiA9PT0gbnVsbCB8fCB0eXBlb2YgYiAhPT0gXCJvYmplY3RcIikgYiA9IHt9O1xuXG4gIGZvciAoayBpbiBiKSB7XG4gICAgaWYgKGsgaW4gYSkge1xuICAgICAgaVtrXSA9IHZhbHVlKGFba10sIGJba10pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjW2tdID0gYltrXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIGZvciAoayBpbiBpKSBjW2tdID0gaVtrXSh0KTtcbiAgICByZXR1cm4gYztcbiAgfTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHBpZWNld2lzZShpbnRlcnBvbGF0ZSwgdmFsdWVzKSB7XG4gIHZhciBpID0gMCwgbiA9IHZhbHVlcy5sZW5ndGggLSAxLCB2ID0gdmFsdWVzWzBdLCBJID0gbmV3IEFycmF5KG4gPCAwID8gMCA6IG4pO1xuICB3aGlsZSAoaSA8IG4pIElbaV0gPSBpbnRlcnBvbGF0ZSh2LCB2ID0gdmFsdWVzWysraV0pO1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIHZhciBpID0gTWF0aC5tYXgoMCwgTWF0aC5taW4obiAtIDEsIE1hdGguZmxvb3IodCAqPSBuKSkpO1xuICAgIHJldHVybiBJW2ldKHQgLSBpKTtcbiAgfTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGludGVycG9sYXRvciwgbikge1xuICB2YXIgc2FtcGxlcyA9IG5ldyBBcnJheShuKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyArK2kpIHNhbXBsZXNbaV0gPSBpbnRlcnBvbGF0b3IoaSAvIChuIC0gMSkpO1xuICByZXR1cm4gc2FtcGxlcztcbn1cbiIsImltcG9ydCB7cmdiIGFzIGNvbG9yUmdifSBmcm9tIFwiZDMtY29sb3JcIjtcbmltcG9ydCBiYXNpcyBmcm9tIFwiLi9iYXNpcy5qc1wiO1xuaW1wb3J0IGJhc2lzQ2xvc2VkIGZyb20gXCIuL2Jhc2lzQ2xvc2VkLmpzXCI7XG5pbXBvcnQgbm9nYW1tYSwge2dhbW1hfSBmcm9tIFwiLi9jb2xvci5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCAoZnVuY3Rpb24gcmdiR2FtbWEoeSkge1xuICB2YXIgY29sb3IgPSBnYW1tYSh5KTtcblxuICBmdW5jdGlvbiByZ2Ioc3RhcnQsIGVuZCkge1xuICAgIHZhciByID0gY29sb3IoKHN0YXJ0ID0gY29sb3JSZ2Ioc3RhcnQpKS5yLCAoZW5kID0gY29sb3JSZ2IoZW5kKSkuciksXG4gICAgICAgIGcgPSBjb2xvcihzdGFydC5nLCBlbmQuZyksXG4gICAgICAgIGIgPSBjb2xvcihzdGFydC5iLCBlbmQuYiksXG4gICAgICAgIG9wYWNpdHkgPSBub2dhbW1hKHN0YXJ0Lm9wYWNpdHksIGVuZC5vcGFjaXR5KTtcbiAgICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgICAgc3RhcnQuciA9IHIodCk7XG4gICAgICBzdGFydC5nID0gZyh0KTtcbiAgICAgIHN0YXJ0LmIgPSBiKHQpO1xuICAgICAgc3RhcnQub3BhY2l0eSA9IG9wYWNpdHkodCk7XG4gICAgICByZXR1cm4gc3RhcnQgKyBcIlwiO1xuICAgIH07XG4gIH1cblxuICByZ2IuZ2FtbWEgPSByZ2JHYW1tYTtcblxuICByZXR1cm4gcmdiO1xufSkoMSk7XG5cbmZ1bmN0aW9uIHJnYlNwbGluZShzcGxpbmUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGNvbG9ycykge1xuICAgIHZhciBuID0gY29sb3JzLmxlbmd0aCxcbiAgICAgICAgciA9IG5ldyBBcnJheShuKSxcbiAgICAgICAgZyA9IG5ldyBBcnJheShuKSxcbiAgICAgICAgYiA9IG5ldyBBcnJheShuKSxcbiAgICAgICAgaSwgY29sb3I7XG4gICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgY29sb3IgPSBjb2xvclJnYihjb2xvcnNbaV0pO1xuICAgICAgcltpXSA9IGNvbG9yLnIgfHwgMDtcbiAgICAgIGdbaV0gPSBjb2xvci5nIHx8IDA7XG4gICAgICBiW2ldID0gY29sb3IuYiB8fCAwO1xuICAgIH1cbiAgICByID0gc3BsaW5lKHIpO1xuICAgIGcgPSBzcGxpbmUoZyk7XG4gICAgYiA9IHNwbGluZShiKTtcbiAgICBjb2xvci5vcGFjaXR5ID0gMTtcbiAgICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgICAgY29sb3IuciA9IHIodCk7XG4gICAgICBjb2xvci5nID0gZyh0KTtcbiAgICAgIGNvbG9yLmIgPSBiKHQpO1xuICAgICAgcmV0dXJuIGNvbG9yICsgXCJcIjtcbiAgICB9O1xuICB9O1xufVxuXG5leHBvcnQgdmFyIHJnYkJhc2lzID0gcmdiU3BsaW5lKGJhc2lzKTtcbmV4cG9ydCB2YXIgcmdiQmFzaXNDbG9zZWQgPSByZ2JTcGxpbmUoYmFzaXNDbG9zZWQpO1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICByZXR1cm4gYSA9ICthLCBiID0gK2IsIGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChhICogKDEgLSB0KSArIGIgKiB0KTtcbiAgfTtcbn1cbiIsImltcG9ydCBudW1iZXIgZnJvbSBcIi4vbnVtYmVyLmpzXCI7XG5cbnZhciByZUEgPSAvWy0rXT8oPzpcXGQrXFwuP1xcZCp8XFwuP1xcZCspKD86W2VFXVstK10/XFxkKyk/L2csXG4gICAgcmVCID0gbmV3IFJlZ0V4cChyZUEuc291cmNlLCBcImdcIik7XG5cbmZ1bmN0aW9uIHplcm8oYikge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGI7XG4gIH07XG59XG5cbmZ1bmN0aW9uIG9uZShiKSB7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIGIodCkgKyBcIlwiO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHZhciBiaSA9IHJlQS5sYXN0SW5kZXggPSByZUIubGFzdEluZGV4ID0gMCwgLy8gc2NhbiBpbmRleCBmb3IgbmV4dCBudW1iZXIgaW4gYlxuICAgICAgYW0sIC8vIGN1cnJlbnQgbWF0Y2ggaW4gYVxuICAgICAgYm0sIC8vIGN1cnJlbnQgbWF0Y2ggaW4gYlxuICAgICAgYnMsIC8vIHN0cmluZyBwcmVjZWRpbmcgY3VycmVudCBudW1iZXIgaW4gYiwgaWYgYW55XG4gICAgICBpID0gLTEsIC8vIGluZGV4IGluIHNcbiAgICAgIHMgPSBbXSwgLy8gc3RyaW5nIGNvbnN0YW50cyBhbmQgcGxhY2Vob2xkZXJzXG4gICAgICBxID0gW107IC8vIG51bWJlciBpbnRlcnBvbGF0b3JzXG5cbiAgLy8gQ29lcmNlIGlucHV0cyB0byBzdHJpbmdzLlxuICBhID0gYSArIFwiXCIsIGIgPSBiICsgXCJcIjtcblxuICAvLyBJbnRlcnBvbGF0ZSBwYWlycyBvZiBudW1iZXJzIGluIGEgJiBiLlxuICB3aGlsZSAoKGFtID0gcmVBLmV4ZWMoYSkpXG4gICAgICAmJiAoYm0gPSByZUIuZXhlYyhiKSkpIHtcbiAgICBpZiAoKGJzID0gYm0uaW5kZXgpID4gYmkpIHsgLy8gYSBzdHJpbmcgcHJlY2VkZXMgdGhlIG5leHQgbnVtYmVyIGluIGJcbiAgICAgIGJzID0gYi5zbGljZShiaSwgYnMpO1xuICAgICAgaWYgKHNbaV0pIHNbaV0gKz0gYnM7IC8vIGNvYWxlc2NlIHdpdGggcHJldmlvdXMgc3RyaW5nXG4gICAgICBlbHNlIHNbKytpXSA9IGJzO1xuICAgIH1cbiAgICBpZiAoKGFtID0gYW1bMF0pID09PSAoYm0gPSBibVswXSkpIHsgLy8gbnVtYmVycyBpbiBhICYgYiBtYXRjaFxuICAgICAgaWYgKHNbaV0pIHNbaV0gKz0gYm07IC8vIGNvYWxlc2NlIHdpdGggcHJldmlvdXMgc3RyaW5nXG4gICAgICBlbHNlIHNbKytpXSA9IGJtO1xuICAgIH0gZWxzZSB7IC8vIGludGVycG9sYXRlIG5vbi1tYXRjaGluZyBudW1iZXJzXG4gICAgICBzWysraV0gPSBudWxsO1xuICAgICAgcS5wdXNoKHtpOiBpLCB4OiBudW1iZXIoYW0sIGJtKX0pO1xuICAgIH1cbiAgICBiaSA9IHJlQi5sYXN0SW5kZXg7XG4gIH1cblxuICAvLyBBZGQgcmVtYWlucyBvZiBiLlxuICBpZiAoYmkgPCBiLmxlbmd0aCkge1xuICAgIGJzID0gYi5zbGljZShiaSk7XG4gICAgaWYgKHNbaV0pIHNbaV0gKz0gYnM7IC8vIGNvYWxlc2NlIHdpdGggcHJldmlvdXMgc3RyaW5nXG4gICAgZWxzZSBzWysraV0gPSBicztcbiAgfVxuXG4gIC8vIFNwZWNpYWwgb3B0aW1pemF0aW9uIGZvciBvbmx5IGEgc2luZ2xlIG1hdGNoLlxuICAvLyBPdGhlcndpc2UsIGludGVycG9sYXRlIGVhY2ggb2YgdGhlIG51bWJlcnMgYW5kIHJlam9pbiB0aGUgc3RyaW5nLlxuICByZXR1cm4gcy5sZW5ndGggPCAyID8gKHFbMF1cbiAgICAgID8gb25lKHFbMF0ueClcbiAgICAgIDogemVybyhiKSlcbiAgICAgIDogKGIgPSBxLmxlbmd0aCwgZnVuY3Rpb24odCkge1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBvOyBpIDwgYjsgKytpKSBzWyhvID0gcVtpXSkuaV0gPSBvLngodCk7XG4gICAgICAgICAgcmV0dXJuIHMuam9pbihcIlwiKTtcbiAgICAgICAgfSk7XG59XG4iLCJ2YXIgZGVncmVlcyA9IDE4MCAvIE1hdGguUEk7XG5cbmV4cG9ydCB2YXIgaWRlbnRpdHkgPSB7XG4gIHRyYW5zbGF0ZVg6IDAsXG4gIHRyYW5zbGF0ZVk6IDAsXG4gIHJvdGF0ZTogMCxcbiAgc2tld1g6IDAsXG4gIHNjYWxlWDogMSxcbiAgc2NhbGVZOiAxXG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiLCBjLCBkLCBlLCBmKSB7XG4gIHZhciBzY2FsZVgsIHNjYWxlWSwgc2tld1g7XG4gIGlmIChzY2FsZVggPSBNYXRoLnNxcnQoYSAqIGEgKyBiICogYikpIGEgLz0gc2NhbGVYLCBiIC89IHNjYWxlWDtcbiAgaWYgKHNrZXdYID0gYSAqIGMgKyBiICogZCkgYyAtPSBhICogc2tld1gsIGQgLT0gYiAqIHNrZXdYO1xuICBpZiAoc2NhbGVZID0gTWF0aC5zcXJ0KGMgKiBjICsgZCAqIGQpKSBjIC89IHNjYWxlWSwgZCAvPSBzY2FsZVksIHNrZXdYIC89IHNjYWxlWTtcbiAgaWYgKGEgKiBkIDwgYiAqIGMpIGEgPSAtYSwgYiA9IC1iLCBza2V3WCA9IC1za2V3WCwgc2NhbGVYID0gLXNjYWxlWDtcbiAgcmV0dXJuIHtcbiAgICB0cmFuc2xhdGVYOiBlLFxuICAgIHRyYW5zbGF0ZVk6IGYsXG4gICAgcm90YXRlOiBNYXRoLmF0YW4yKGIsIGEpICogZGVncmVlcyxcbiAgICBza2V3WDogTWF0aC5hdGFuKHNrZXdYKSAqIGRlZ3JlZXMsXG4gICAgc2NhbGVYOiBzY2FsZVgsXG4gICAgc2NhbGVZOiBzY2FsZVlcbiAgfTtcbn1cbiIsImltcG9ydCBudW1iZXIgZnJvbSBcIi4uL251bWJlci5qc1wiO1xuaW1wb3J0IHtwYXJzZUNzcywgcGFyc2VTdmd9IGZyb20gXCIuL3BhcnNlLmpzXCI7XG5cbmZ1bmN0aW9uIGludGVycG9sYXRlVHJhbnNmb3JtKHBhcnNlLCBweENvbW1hLCBweFBhcmVuLCBkZWdQYXJlbikge1xuXG4gIGZ1bmN0aW9uIHBvcChzKSB7XG4gICAgcmV0dXJuIHMubGVuZ3RoID8gcy5wb3AoKSArIFwiIFwiIDogXCJcIjtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRyYW5zbGF0ZSh4YSwgeWEsIHhiLCB5YiwgcywgcSkge1xuICAgIGlmICh4YSAhPT0geGIgfHwgeWEgIT09IHliKSB7XG4gICAgICB2YXIgaSA9IHMucHVzaChcInRyYW5zbGF0ZShcIiwgbnVsbCwgcHhDb21tYSwgbnVsbCwgcHhQYXJlbik7XG4gICAgICBxLnB1c2goe2k6IGkgLSA0LCB4OiBudW1iZXIoeGEsIHhiKX0sIHtpOiBpIC0gMiwgeDogbnVtYmVyKHlhLCB5Yil9KTtcbiAgICB9IGVsc2UgaWYgKHhiIHx8IHliKSB7XG4gICAgICBzLnB1c2goXCJ0cmFuc2xhdGUoXCIgKyB4YiArIHB4Q29tbWEgKyB5YiArIHB4UGFyZW4pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJvdGF0ZShhLCBiLCBzLCBxKSB7XG4gICAgaWYgKGEgIT09IGIpIHtcbiAgICAgIGlmIChhIC0gYiA+IDE4MCkgYiArPSAzNjA7IGVsc2UgaWYgKGIgLSBhID4gMTgwKSBhICs9IDM2MDsgLy8gc2hvcnRlc3QgcGF0aFxuICAgICAgcS5wdXNoKHtpOiBzLnB1c2gocG9wKHMpICsgXCJyb3RhdGUoXCIsIG51bGwsIGRlZ1BhcmVuKSAtIDIsIHg6IG51bWJlcihhLCBiKX0pO1xuICAgIH0gZWxzZSBpZiAoYikge1xuICAgICAgcy5wdXNoKHBvcChzKSArIFwicm90YXRlKFwiICsgYiArIGRlZ1BhcmVuKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBza2V3WChhLCBiLCBzLCBxKSB7XG4gICAgaWYgKGEgIT09IGIpIHtcbiAgICAgIHEucHVzaCh7aTogcy5wdXNoKHBvcChzKSArIFwic2tld1goXCIsIG51bGwsIGRlZ1BhcmVuKSAtIDIsIHg6IG51bWJlcihhLCBiKX0pO1xuICAgIH0gZWxzZSBpZiAoYikge1xuICAgICAgcy5wdXNoKHBvcChzKSArIFwic2tld1goXCIgKyBiICsgZGVnUGFyZW4pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNjYWxlKHhhLCB5YSwgeGIsIHliLCBzLCBxKSB7XG4gICAgaWYgKHhhICE9PSB4YiB8fCB5YSAhPT0geWIpIHtcbiAgICAgIHZhciBpID0gcy5wdXNoKHBvcChzKSArIFwic2NhbGUoXCIsIG51bGwsIFwiLFwiLCBudWxsLCBcIilcIik7XG4gICAgICBxLnB1c2goe2k6IGkgLSA0LCB4OiBudW1iZXIoeGEsIHhiKX0sIHtpOiBpIC0gMiwgeDogbnVtYmVyKHlhLCB5Yil9KTtcbiAgICB9IGVsc2UgaWYgKHhiICE9PSAxIHx8IHliICE9PSAxKSB7XG4gICAgICBzLnB1c2gocG9wKHMpICsgXCJzY2FsZShcIiArIHhiICsgXCIsXCIgKyB5YiArIFwiKVwiKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24oYSwgYikge1xuICAgIHZhciBzID0gW10sIC8vIHN0cmluZyBjb25zdGFudHMgYW5kIHBsYWNlaG9sZGVyc1xuICAgICAgICBxID0gW107IC8vIG51bWJlciBpbnRlcnBvbGF0b3JzXG4gICAgYSA9IHBhcnNlKGEpLCBiID0gcGFyc2UoYik7XG4gICAgdHJhbnNsYXRlKGEudHJhbnNsYXRlWCwgYS50cmFuc2xhdGVZLCBiLnRyYW5zbGF0ZVgsIGIudHJhbnNsYXRlWSwgcywgcSk7XG4gICAgcm90YXRlKGEucm90YXRlLCBiLnJvdGF0ZSwgcywgcSk7XG4gICAgc2tld1goYS5za2V3WCwgYi5za2V3WCwgcywgcSk7XG4gICAgc2NhbGUoYS5zY2FsZVgsIGEuc2NhbGVZLCBiLnNjYWxlWCwgYi5zY2FsZVksIHMsIHEpO1xuICAgIGEgPSBiID0gbnVsbDsgLy8gZ2NcbiAgICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgICAgdmFyIGkgPSAtMSwgbiA9IHEubGVuZ3RoLCBvO1xuICAgICAgd2hpbGUgKCsraSA8IG4pIHNbKG8gPSBxW2ldKS5pXSA9IG8ueCh0KTtcbiAgICAgIHJldHVybiBzLmpvaW4oXCJcIik7XG4gICAgfTtcbiAgfTtcbn1cblxuZXhwb3J0IHZhciBpbnRlcnBvbGF0ZVRyYW5zZm9ybUNzcyA9IGludGVycG9sYXRlVHJhbnNmb3JtKHBhcnNlQ3NzLCBcInB4LCBcIiwgXCJweClcIiwgXCJkZWcpXCIpO1xuZXhwb3J0IHZhciBpbnRlcnBvbGF0ZVRyYW5zZm9ybVN2ZyA9IGludGVycG9sYXRlVHJhbnNmb3JtKHBhcnNlU3ZnLCBcIiwgXCIsIFwiKVwiLCBcIilcIik7XG4iLCJpbXBvcnQgZGVjb21wb3NlLCB7aWRlbnRpdHl9IGZyb20gXCIuL2RlY29tcG9zZS5qc1wiO1xuXG52YXIgY3NzTm9kZSxcbiAgICBjc3NSb290LFxuICAgIGNzc1ZpZXcsXG4gICAgc3ZnTm9kZTtcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQ3NzKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PT0gXCJub25lXCIpIHJldHVybiBpZGVudGl0eTtcbiAgaWYgKCFjc3NOb2RlKSBjc3NOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcIkRJVlwiKSwgY3NzUm9vdCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgY3NzVmlldyA9IGRvY3VtZW50LmRlZmF1bHRWaWV3O1xuICBjc3NOb2RlLnN0eWxlLnRyYW5zZm9ybSA9IHZhbHVlO1xuICB2YWx1ZSA9IGNzc1ZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShjc3NSb290LmFwcGVuZENoaWxkKGNzc05vZGUpLCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKFwidHJhbnNmb3JtXCIpO1xuICBjc3NSb290LnJlbW92ZUNoaWxkKGNzc05vZGUpO1xuICB2YWx1ZSA9IHZhbHVlLnNsaWNlKDcsIC0xKS5zcGxpdChcIixcIik7XG4gIHJldHVybiBkZWNvbXBvc2UoK3ZhbHVlWzBdLCArdmFsdWVbMV0sICt2YWx1ZVsyXSwgK3ZhbHVlWzNdLCArdmFsdWVbNF0sICt2YWx1ZVs1XSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVN2Zyh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIGlkZW50aXR5O1xuICBpZiAoIXN2Z05vZGUpIHN2Z05vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBcImdcIik7XG4gIHN2Z05vZGUuc2V0QXR0cmlidXRlKFwidHJhbnNmb3JtXCIsIHZhbHVlKTtcbiAgaWYgKCEodmFsdWUgPSBzdmdOb2RlLnRyYW5zZm9ybS5iYXNlVmFsLmNvbnNvbGlkYXRlKCkpKSByZXR1cm4gaWRlbnRpdHk7XG4gIHZhbHVlID0gdmFsdWUubWF0cml4O1xuICByZXR1cm4gZGVjb21wb3NlKHZhbHVlLmEsIHZhbHVlLmIsIHZhbHVlLmMsIHZhbHVlLmQsIHZhbHVlLmUsIHZhbHVlLmYpO1xufVxuIiwiaW1wb3J0IHtjb2xvcn0gZnJvbSBcImQzLWNvbG9yXCI7XG5pbXBvcnQgcmdiIGZyb20gXCIuL3JnYi5qc1wiO1xuaW1wb3J0IHtnZW5lcmljQXJyYXl9IGZyb20gXCIuL2FycmF5LmpzXCI7XG5pbXBvcnQgZGF0ZSBmcm9tIFwiLi9kYXRlLmpzXCI7XG5pbXBvcnQgbnVtYmVyIGZyb20gXCIuL251bWJlci5qc1wiO1xuaW1wb3J0IG9iamVjdCBmcm9tIFwiLi9vYmplY3QuanNcIjtcbmltcG9ydCBzdHJpbmcgZnJvbSBcIi4vc3RyaW5nLmpzXCI7XG5pbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnQuanNcIjtcbmltcG9ydCBudW1iZXJBcnJheSwge2lzTnVtYmVyQXJyYXl9IGZyb20gXCIuL251bWJlckFycmF5LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgdmFyIHQgPSB0eXBlb2YgYiwgYztcbiAgcmV0dXJuIGIgPT0gbnVsbCB8fCB0ID09PSBcImJvb2xlYW5cIiA/IGNvbnN0YW50KGIpXG4gICAgICA6ICh0ID09PSBcIm51bWJlclwiID8gbnVtYmVyXG4gICAgICA6IHQgPT09IFwic3RyaW5nXCIgPyAoKGMgPSBjb2xvcihiKSkgPyAoYiA9IGMsIHJnYikgOiBzdHJpbmcpXG4gICAgICA6IGIgaW5zdGFuY2VvZiBjb2xvciA/IHJnYlxuICAgICAgOiBiIGluc3RhbmNlb2YgRGF0ZSA/IGRhdGVcbiAgICAgIDogaXNOdW1iZXJBcnJheShiKSA/IG51bWJlckFycmF5XG4gICAgICA6IEFycmF5LmlzQXJyYXkoYikgPyBnZW5lcmljQXJyYXlcbiAgICAgIDogdHlwZW9mIGIudmFsdWVPZiAhPT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBiLnRvU3RyaW5nICE9PSBcImZ1bmN0aW9uXCIgfHwgaXNOYU4oYikgPyBvYmplY3RcbiAgICAgIDogbnVtYmVyKShhLCBiKTtcbn1cbiIsInZhciByaG8gPSBNYXRoLlNRUlQyLFxuICAgIHJobzIgPSAyLFxuICAgIHJobzQgPSA0LFxuICAgIGVwc2lsb24yID0gMWUtMTI7XG5cbmZ1bmN0aW9uIGNvc2goeCkge1xuICByZXR1cm4gKCh4ID0gTWF0aC5leHAoeCkpICsgMSAvIHgpIC8gMjtcbn1cblxuZnVuY3Rpb24gc2luaCh4KSB7XG4gIHJldHVybiAoKHggPSBNYXRoLmV4cCh4KSkgLSAxIC8geCkgLyAyO1xufVxuXG5mdW5jdGlvbiB0YW5oKHgpIHtcbiAgcmV0dXJuICgoeCA9IE1hdGguZXhwKDIgKiB4KSkgLSAxKSAvICh4ICsgMSk7XG59XG5cbi8vIHAwID0gW3V4MCwgdXkwLCB3MF1cbi8vIHAxID0gW3V4MSwgdXkxLCB3MV1cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHAwLCBwMSkge1xuICB2YXIgdXgwID0gcDBbMF0sIHV5MCA9IHAwWzFdLCB3MCA9IHAwWzJdLFxuICAgICAgdXgxID0gcDFbMF0sIHV5MSA9IHAxWzFdLCB3MSA9IHAxWzJdLFxuICAgICAgZHggPSB1eDEgLSB1eDAsXG4gICAgICBkeSA9IHV5MSAtIHV5MCxcbiAgICAgIGQyID0gZHggKiBkeCArIGR5ICogZHksXG4gICAgICBpLFxuICAgICAgUztcblxuICAvLyBTcGVjaWFsIGNhc2UgZm9yIHUwIOKJhSB1MS5cbiAgaWYgKGQyIDwgZXBzaWxvbjIpIHtcbiAgICBTID0gTWF0aC5sb2codzEgLyB3MCkgLyByaG87XG4gICAgaSA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIHV4MCArIHQgKiBkeCxcbiAgICAgICAgdXkwICsgdCAqIGR5LFxuICAgICAgICB3MCAqIE1hdGguZXhwKHJobyAqIHQgKiBTKVxuICAgICAgXTtcbiAgICB9XG4gIH1cblxuICAvLyBHZW5lcmFsIGNhc2UuXG4gIGVsc2Uge1xuICAgIHZhciBkMSA9IE1hdGguc3FydChkMiksXG4gICAgICAgIGIwID0gKHcxICogdzEgLSB3MCAqIHcwICsgcmhvNCAqIGQyKSAvICgyICogdzAgKiByaG8yICogZDEpLFxuICAgICAgICBiMSA9ICh3MSAqIHcxIC0gdzAgKiB3MCAtIHJobzQgKiBkMikgLyAoMiAqIHcxICogcmhvMiAqIGQxKSxcbiAgICAgICAgcjAgPSBNYXRoLmxvZyhNYXRoLnNxcnQoYjAgKiBiMCArIDEpIC0gYjApLFxuICAgICAgICByMSA9IE1hdGgubG9nKE1hdGguc3FydChiMSAqIGIxICsgMSkgLSBiMSk7XG4gICAgUyA9IChyMSAtIHIwKSAvIHJobztcbiAgICBpID0gZnVuY3Rpb24odCkge1xuICAgICAgdmFyIHMgPSB0ICogUyxcbiAgICAgICAgICBjb3NocjAgPSBjb3NoKHIwKSxcbiAgICAgICAgICB1ID0gdzAgLyAocmhvMiAqIGQxKSAqIChjb3NocjAgKiB0YW5oKHJobyAqIHMgKyByMCkgLSBzaW5oKHIwKSk7XG4gICAgICByZXR1cm4gW1xuICAgICAgICB1eDAgKyB1ICogZHgsXG4gICAgICAgIHV5MCArIHUgKiBkeSxcbiAgICAgICAgdzAgKiBjb3NocjAgLyBjb3NoKHJobyAqIHMgKyByMClcbiAgICAgIF07XG4gICAgfVxuICB9XG5cbiAgaS5kdXJhdGlvbiA9IFMgKiAxMDAwO1xuXG4gIHJldHVybiBpO1xufVxuIiwiZXhwb3J0IHtkZWZhdWx0IGFzIHBhdGh9IGZyb20gXCIuL3BhdGguanNcIjtcbiIsInZhciBwaSA9IE1hdGguUEksXG4gICAgdGF1ID0gMiAqIHBpLFxuICAgIGVwc2lsb24gPSAxZS02LFxuICAgIHRhdUVwc2lsb24gPSB0YXUgLSBlcHNpbG9uO1xuXG5mdW5jdGlvbiBQYXRoKCkge1xuICB0aGlzLl94MCA9IHRoaXMuX3kwID0gLy8gc3RhcnQgb2YgY3VycmVudCBzdWJwYXRoXG4gIHRoaXMuX3gxID0gdGhpcy5feTEgPSBudWxsOyAvLyBlbmQgb2YgY3VycmVudCBzdWJwYXRoXG4gIHRoaXMuXyA9IFwiXCI7XG59XG5cbmZ1bmN0aW9uIHBhdGgoKSB7XG4gIHJldHVybiBuZXcgUGF0aDtcbn1cblxuUGF0aC5wcm90b3R5cGUgPSBwYXRoLnByb3RvdHlwZSA9IHtcbiAgY29uc3RydWN0b3I6IFBhdGgsXG4gIG1vdmVUbzogZnVuY3Rpb24oeCwgeSkge1xuICAgIHRoaXMuXyArPSBcIk1cIiArICh0aGlzLl94MCA9IHRoaXMuX3gxID0gK3gpICsgXCIsXCIgKyAodGhpcy5feTAgPSB0aGlzLl95MSA9ICt5KTtcbiAgfSxcbiAgY2xvc2VQYXRoOiBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5feDEgIT09IG51bGwpIHtcbiAgICAgIHRoaXMuX3gxID0gdGhpcy5feDAsIHRoaXMuX3kxID0gdGhpcy5feTA7XG4gICAgICB0aGlzLl8gKz0gXCJaXCI7XG4gICAgfVxuICB9LFxuICBsaW5lVG86IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICB0aGlzLl8gKz0gXCJMXCIgKyAodGhpcy5feDEgPSAreCkgKyBcIixcIiArICh0aGlzLl95MSA9ICt5KTtcbiAgfSxcbiAgcXVhZHJhdGljQ3VydmVUbzogZnVuY3Rpb24oeDEsIHkxLCB4LCB5KSB7XG4gICAgdGhpcy5fICs9IFwiUVwiICsgKCt4MSkgKyBcIixcIiArICgreTEpICsgXCIsXCIgKyAodGhpcy5feDEgPSAreCkgKyBcIixcIiArICh0aGlzLl95MSA9ICt5KTtcbiAgfSxcbiAgYmV6aWVyQ3VydmVUbzogZnVuY3Rpb24oeDEsIHkxLCB4MiwgeTIsIHgsIHkpIHtcbiAgICB0aGlzLl8gKz0gXCJDXCIgKyAoK3gxKSArIFwiLFwiICsgKCt5MSkgKyBcIixcIiArICgreDIpICsgXCIsXCIgKyAoK3kyKSArIFwiLFwiICsgKHRoaXMuX3gxID0gK3gpICsgXCIsXCIgKyAodGhpcy5feTEgPSAreSk7XG4gIH0sXG4gIGFyY1RvOiBmdW5jdGlvbih4MSwgeTEsIHgyLCB5Miwgcikge1xuICAgIHgxID0gK3gxLCB5MSA9ICt5MSwgeDIgPSAreDIsIHkyID0gK3kyLCByID0gK3I7XG4gICAgdmFyIHgwID0gdGhpcy5feDEsXG4gICAgICAgIHkwID0gdGhpcy5feTEsXG4gICAgICAgIHgyMSA9IHgyIC0geDEsXG4gICAgICAgIHkyMSA9IHkyIC0geTEsXG4gICAgICAgIHgwMSA9IHgwIC0geDEsXG4gICAgICAgIHkwMSA9IHkwIC0geTEsXG4gICAgICAgIGwwMV8yID0geDAxICogeDAxICsgeTAxICogeTAxO1xuXG4gICAgLy8gSXMgdGhlIHJhZGl1cyBuZWdhdGl2ZT8gRXJyb3IuXG4gICAgaWYgKHIgPCAwKSB0aHJvdyBuZXcgRXJyb3IoXCJuZWdhdGl2ZSByYWRpdXM6IFwiICsgcik7XG5cbiAgICAvLyBJcyB0aGlzIHBhdGggZW1wdHk/IE1vdmUgdG8gKHgxLHkxKS5cbiAgICBpZiAodGhpcy5feDEgPT09IG51bGwpIHtcbiAgICAgIHRoaXMuXyArPSBcIk1cIiArICh0aGlzLl94MSA9IHgxKSArIFwiLFwiICsgKHRoaXMuX3kxID0geTEpO1xuICAgIH1cblxuICAgIC8vIE9yLCBpcyAoeDEseTEpIGNvaW5jaWRlbnQgd2l0aCAoeDAseTApPyBEbyBub3RoaW5nLlxuICAgIGVsc2UgaWYgKCEobDAxXzIgPiBlcHNpbG9uKSk7XG5cbiAgICAvLyBPciwgYXJlICh4MCx5MCksICh4MSx5MSkgYW5kICh4Mix5MikgY29sbGluZWFyP1xuICAgIC8vIEVxdWl2YWxlbnRseSwgaXMgKHgxLHkxKSBjb2luY2lkZW50IHdpdGggKHgyLHkyKT9cbiAgICAvLyBPciwgaXMgdGhlIHJhZGl1cyB6ZXJvPyBMaW5lIHRvICh4MSx5MSkuXG4gICAgZWxzZSBpZiAoIShNYXRoLmFicyh5MDEgKiB4MjEgLSB5MjEgKiB4MDEpID4gZXBzaWxvbikgfHwgIXIpIHtcbiAgICAgIHRoaXMuXyArPSBcIkxcIiArICh0aGlzLl94MSA9IHgxKSArIFwiLFwiICsgKHRoaXMuX3kxID0geTEpO1xuICAgIH1cblxuICAgIC8vIE90aGVyd2lzZSwgZHJhdyBhbiBhcmMhXG4gICAgZWxzZSB7XG4gICAgICB2YXIgeDIwID0geDIgLSB4MCxcbiAgICAgICAgICB5MjAgPSB5MiAtIHkwLFxuICAgICAgICAgIGwyMV8yID0geDIxICogeDIxICsgeTIxICogeTIxLFxuICAgICAgICAgIGwyMF8yID0geDIwICogeDIwICsgeTIwICogeTIwLFxuICAgICAgICAgIGwyMSA9IE1hdGguc3FydChsMjFfMiksXG4gICAgICAgICAgbDAxID0gTWF0aC5zcXJ0KGwwMV8yKSxcbiAgICAgICAgICBsID0gciAqIE1hdGgudGFuKChwaSAtIE1hdGguYWNvcygobDIxXzIgKyBsMDFfMiAtIGwyMF8yKSAvICgyICogbDIxICogbDAxKSkpIC8gMiksXG4gICAgICAgICAgdDAxID0gbCAvIGwwMSxcbiAgICAgICAgICB0MjEgPSBsIC8gbDIxO1xuXG4gICAgICAvLyBJZiB0aGUgc3RhcnQgdGFuZ2VudCBpcyBub3QgY29pbmNpZGVudCB3aXRoICh4MCx5MCksIGxpbmUgdG8uXG4gICAgICBpZiAoTWF0aC5hYnModDAxIC0gMSkgPiBlcHNpbG9uKSB7XG4gICAgICAgIHRoaXMuXyArPSBcIkxcIiArICh4MSArIHQwMSAqIHgwMSkgKyBcIixcIiArICh5MSArIHQwMSAqIHkwMSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuXyArPSBcIkFcIiArIHIgKyBcIixcIiArIHIgKyBcIiwwLDAsXCIgKyAoKyh5MDEgKiB4MjAgPiB4MDEgKiB5MjApKSArIFwiLFwiICsgKHRoaXMuX3gxID0geDEgKyB0MjEgKiB4MjEpICsgXCIsXCIgKyAodGhpcy5feTEgPSB5MSArIHQyMSAqIHkyMSk7XG4gICAgfVxuICB9LFxuICBhcmM6IGZ1bmN0aW9uKHgsIHksIHIsIGEwLCBhMSwgY2N3KSB7XG4gICAgeCA9ICt4LCB5ID0gK3ksIHIgPSArciwgY2N3ID0gISFjY3c7XG4gICAgdmFyIGR4ID0gciAqIE1hdGguY29zKGEwKSxcbiAgICAgICAgZHkgPSByICogTWF0aC5zaW4oYTApLFxuICAgICAgICB4MCA9IHggKyBkeCxcbiAgICAgICAgeTAgPSB5ICsgZHksXG4gICAgICAgIGN3ID0gMSBeIGNjdyxcbiAgICAgICAgZGEgPSBjY3cgPyBhMCAtIGExIDogYTEgLSBhMDtcblxuICAgIC8vIElzIHRoZSByYWRpdXMgbmVnYXRpdmU/IEVycm9yLlxuICAgIGlmIChyIDwgMCkgdGhyb3cgbmV3IEVycm9yKFwibmVnYXRpdmUgcmFkaXVzOiBcIiArIHIpO1xuXG4gICAgLy8gSXMgdGhpcyBwYXRoIGVtcHR5PyBNb3ZlIHRvICh4MCx5MCkuXG4gICAgaWYgKHRoaXMuX3gxID09PSBudWxsKSB7XG4gICAgICB0aGlzLl8gKz0gXCJNXCIgKyB4MCArIFwiLFwiICsgeTA7XG4gICAgfVxuXG4gICAgLy8gT3IsIGlzICh4MCx5MCkgbm90IGNvaW5jaWRlbnQgd2l0aCB0aGUgcHJldmlvdXMgcG9pbnQ/IExpbmUgdG8gKHgwLHkwKS5cbiAgICBlbHNlIGlmIChNYXRoLmFicyh0aGlzLl94MSAtIHgwKSA+IGVwc2lsb24gfHwgTWF0aC5hYnModGhpcy5feTEgLSB5MCkgPiBlcHNpbG9uKSB7XG4gICAgICB0aGlzLl8gKz0gXCJMXCIgKyB4MCArIFwiLFwiICsgeTA7XG4gICAgfVxuXG4gICAgLy8gSXMgdGhpcyBhcmMgZW1wdHk/IFdl4oCZcmUgZG9uZS5cbiAgICBpZiAoIXIpIHJldHVybjtcblxuICAgIC8vIERvZXMgdGhlIGFuZ2xlIGdvIHRoZSB3cm9uZyB3YXk/IEZsaXAgdGhlIGRpcmVjdGlvbi5cbiAgICBpZiAoZGEgPCAwKSBkYSA9IGRhICUgdGF1ICsgdGF1O1xuXG4gICAgLy8gSXMgdGhpcyBhIGNvbXBsZXRlIGNpcmNsZT8gRHJhdyB0d28gYXJjcyB0byBjb21wbGV0ZSB0aGUgY2lyY2xlLlxuICAgIGlmIChkYSA+IHRhdUVwc2lsb24pIHtcbiAgICAgIHRoaXMuXyArPSBcIkFcIiArIHIgKyBcIixcIiArIHIgKyBcIiwwLDEsXCIgKyBjdyArIFwiLFwiICsgKHggLSBkeCkgKyBcIixcIiArICh5IC0gZHkpICsgXCJBXCIgKyByICsgXCIsXCIgKyByICsgXCIsMCwxLFwiICsgY3cgKyBcIixcIiArICh0aGlzLl94MSA9IHgwKSArIFwiLFwiICsgKHRoaXMuX3kxID0geTApO1xuICAgIH1cblxuICAgIC8vIElzIHRoaXMgYXJjIG5vbi1lbXB0eT8gRHJhdyBhbiBhcmMhXG4gICAgZWxzZSBpZiAoZGEgPiBlcHNpbG9uKSB7XG4gICAgICB0aGlzLl8gKz0gXCJBXCIgKyByICsgXCIsXCIgKyByICsgXCIsMCxcIiArICgrKGRhID49IHBpKSkgKyBcIixcIiArIGN3ICsgXCIsXCIgKyAodGhpcy5feDEgPSB4ICsgciAqIE1hdGguY29zKGExKSkgKyBcIixcIiArICh0aGlzLl95MSA9IHkgKyByICogTWF0aC5zaW4oYTEpKTtcbiAgICB9XG4gIH0sXG4gIHJlY3Q6IGZ1bmN0aW9uKHgsIHksIHcsIGgpIHtcbiAgICB0aGlzLl8gKz0gXCJNXCIgKyAodGhpcy5feDAgPSB0aGlzLl94MSA9ICt4KSArIFwiLFwiICsgKHRoaXMuX3kwID0gdGhpcy5feTEgPSAreSkgKyBcImhcIiArICgrdykgKyBcInZcIiArICgraCkgKyBcImhcIiArICgtdykgKyBcIlpcIjtcbiAgfSxcbiAgdG9TdHJpbmc6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLl87XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IHBhdGg7XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihwb2x5Z29uKSB7XG4gIHZhciBpID0gLTEsXG4gICAgICBuID0gcG9seWdvbi5sZW5ndGgsXG4gICAgICBhLFxuICAgICAgYiA9IHBvbHlnb25bbiAtIDFdLFxuICAgICAgYXJlYSA9IDA7XG5cbiAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICBhID0gYjtcbiAgICBiID0gcG9seWdvbltpXTtcbiAgICBhcmVhICs9IGFbMV0gKiBiWzBdIC0gYVswXSAqIGJbMV07XG4gIH1cblxuICByZXR1cm4gYXJlYSAvIDI7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihwb2x5Z29uKSB7XG4gIHZhciBpID0gLTEsXG4gICAgICBuID0gcG9seWdvbi5sZW5ndGgsXG4gICAgICB4ID0gMCxcbiAgICAgIHkgPSAwLFxuICAgICAgYSxcbiAgICAgIGIgPSBwb2x5Z29uW24gLSAxXSxcbiAgICAgIGMsXG4gICAgICBrID0gMDtcblxuICB3aGlsZSAoKytpIDwgbikge1xuICAgIGEgPSBiO1xuICAgIGIgPSBwb2x5Z29uW2ldO1xuICAgIGsgKz0gYyA9IGFbMF0gKiBiWzFdIC0gYlswXSAqIGFbMV07XG4gICAgeCArPSAoYVswXSArIGJbMF0pICogYztcbiAgICB5ICs9IChhWzFdICsgYlsxXSkgKiBjO1xuICB9XG5cbiAgcmV0dXJuIGsgKj0gMywgW3ggLyBrLCB5IC8ga107XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihwb2x5Z29uLCBwb2ludCkge1xuICB2YXIgbiA9IHBvbHlnb24ubGVuZ3RoLFxuICAgICAgcCA9IHBvbHlnb25bbiAtIDFdLFxuICAgICAgeCA9IHBvaW50WzBdLCB5ID0gcG9pbnRbMV0sXG4gICAgICB4MCA9IHBbMF0sIHkwID0gcFsxXSxcbiAgICAgIHgxLCB5MSxcbiAgICAgIGluc2lkZSA9IGZhbHNlO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgcCA9IHBvbHlnb25baV0sIHgxID0gcFswXSwgeTEgPSBwWzFdO1xuICAgIGlmICgoKHkxID4geSkgIT09ICh5MCA+IHkpKSAmJiAoeCA8ICh4MCAtIHgxKSAqICh5IC0geTEpIC8gKHkwIC0geTEpICsgeDEpKSBpbnNpZGUgPSAhaW5zaWRlO1xuICAgIHgwID0geDEsIHkwID0geTE7XG4gIH1cblxuICByZXR1cm4gaW5zaWRlO1xufVxuIiwiLy8gUmV0dXJucyB0aGUgMkQgY3Jvc3MgcHJvZHVjdCBvZiBBQiBhbmQgQUMgdmVjdG9ycywgaS5lLiwgdGhlIHotY29tcG9uZW50IG9mXG4vLyB0aGUgM0QgY3Jvc3MgcHJvZHVjdCBpbiBhIHF1YWRyYW50IEkgQ2FydGVzaWFuIGNvb3JkaW5hdGUgc3lzdGVtICgreCBpc1xuLy8gcmlnaHQsICt5IGlzIHVwKS4gUmV0dXJucyBhIHBvc2l0aXZlIHZhbHVlIGlmIEFCQyBpcyBjb3VudGVyLWNsb2Nrd2lzZSxcbi8vIG5lZ2F0aXZlIGlmIGNsb2Nrd2lzZSwgYW5kIHplcm8gaWYgdGhlIHBvaW50cyBhcmUgY29sbGluZWFyLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYiwgYykge1xuICByZXR1cm4gKGJbMF0gLSBhWzBdKSAqIChjWzFdIC0gYVsxXSkgLSAoYlsxXSAtIGFbMV0pICogKGNbMF0gLSBhWzBdKTtcbn1cbiIsImltcG9ydCBjcm9zcyBmcm9tIFwiLi9jcm9zcy5qc1wiO1xuXG5mdW5jdGlvbiBsZXhpY29ncmFwaGljT3JkZXIoYSwgYikge1xuICByZXR1cm4gYVswXSAtIGJbMF0gfHwgYVsxXSAtIGJbMV07XG59XG5cbi8vIENvbXB1dGVzIHRoZSB1cHBlciBjb252ZXggaHVsbCBwZXIgdGhlIG1vbm90b25lIGNoYWluIGFsZ29yaXRobS5cbi8vIEFzc3VtZXMgcG9pbnRzLmxlbmd0aCA+PSAzLCBpcyBzb3J0ZWQgYnkgeCwgdW5pcXVlIGluIHkuXG4vLyBSZXR1cm5zIGFuIGFycmF5IG9mIGluZGljZXMgaW50byBwb2ludHMgaW4gbGVmdC10by1yaWdodCBvcmRlci5cbmZ1bmN0aW9uIGNvbXB1dGVVcHBlckh1bGxJbmRleGVzKHBvaW50cykge1xuICB2YXIgbiA9IHBvaW50cy5sZW5ndGgsXG4gICAgICBpbmRleGVzID0gWzAsIDFdLFxuICAgICAgc2l6ZSA9IDI7XG5cbiAgZm9yICh2YXIgaSA9IDI7IGkgPCBuOyArK2kpIHtcbiAgICB3aGlsZSAoc2l6ZSA+IDEgJiYgY3Jvc3MocG9pbnRzW2luZGV4ZXNbc2l6ZSAtIDJdXSwgcG9pbnRzW2luZGV4ZXNbc2l6ZSAtIDFdXSwgcG9pbnRzW2ldKSA8PSAwKSAtLXNpemU7XG4gICAgaW5kZXhlc1tzaXplKytdID0gaTtcbiAgfVxuXG4gIHJldHVybiBpbmRleGVzLnNsaWNlKDAsIHNpemUpOyAvLyByZW1vdmUgcG9wcGVkIHBvaW50c1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihwb2ludHMpIHtcbiAgaWYgKChuID0gcG9pbnRzLmxlbmd0aCkgPCAzKSByZXR1cm4gbnVsbDtcblxuICB2YXIgaSxcbiAgICAgIG4sXG4gICAgICBzb3J0ZWRQb2ludHMgPSBuZXcgQXJyYXkobiksXG4gICAgICBmbGlwcGVkUG9pbnRzID0gbmV3IEFycmF5KG4pO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHNvcnRlZFBvaW50c1tpXSA9IFsrcG9pbnRzW2ldWzBdLCArcG9pbnRzW2ldWzFdLCBpXTtcbiAgc29ydGVkUG9pbnRzLnNvcnQobGV4aWNvZ3JhcGhpY09yZGVyKTtcbiAgZm9yIChpID0gMDsgaSA8IG47ICsraSkgZmxpcHBlZFBvaW50c1tpXSA9IFtzb3J0ZWRQb2ludHNbaV1bMF0sIC1zb3J0ZWRQb2ludHNbaV1bMV1dO1xuXG4gIHZhciB1cHBlckluZGV4ZXMgPSBjb21wdXRlVXBwZXJIdWxsSW5kZXhlcyhzb3J0ZWRQb2ludHMpLFxuICAgICAgbG93ZXJJbmRleGVzID0gY29tcHV0ZVVwcGVySHVsbEluZGV4ZXMoZmxpcHBlZFBvaW50cyk7XG5cbiAgLy8gQ29uc3RydWN0IHRoZSBodWxsIHBvbHlnb24sIHJlbW92aW5nIHBvc3NpYmxlIGR1cGxpY2F0ZSBlbmRwb2ludHMuXG4gIHZhciBza2lwTGVmdCA9IGxvd2VySW5kZXhlc1swXSA9PT0gdXBwZXJJbmRleGVzWzBdLFxuICAgICAgc2tpcFJpZ2h0ID0gbG93ZXJJbmRleGVzW2xvd2VySW5kZXhlcy5sZW5ndGggLSAxXSA9PT0gdXBwZXJJbmRleGVzW3VwcGVySW5kZXhlcy5sZW5ndGggLSAxXSxcbiAgICAgIGh1bGwgPSBbXTtcblxuICAvLyBBZGQgdXBwZXIgaHVsbCBpbiByaWdodC10by1sIG9yZGVyLlxuICAvLyBUaGVuIGFkZCBsb3dlciBodWxsIGluIGxlZnQtdG8tcmlnaHQgb3JkZXIuXG4gIGZvciAoaSA9IHVwcGVySW5kZXhlcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkgaHVsbC5wdXNoKHBvaW50c1tzb3J0ZWRQb2ludHNbdXBwZXJJbmRleGVzW2ldXVsyXV0pO1xuICBmb3IgKGkgPSArc2tpcExlZnQ7IGkgPCBsb3dlckluZGV4ZXMubGVuZ3RoIC0gc2tpcFJpZ2h0OyArK2kpIGh1bGwucHVzaChwb2ludHNbc29ydGVkUG9pbnRzW2xvd2VySW5kZXhlc1tpXV1bMl1dKTtcblxuICByZXR1cm4gaHVsbDtcbn1cbiIsImV4cG9ydCB7ZGVmYXVsdCBhcyBwb2x5Z29uQXJlYX0gZnJvbSBcIi4vYXJlYS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHBvbHlnb25DZW50cm9pZH0gZnJvbSBcIi4vY2VudHJvaWQuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBwb2x5Z29uSHVsbH0gZnJvbSBcIi4vaHVsbC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHBvbHlnb25Db250YWluc30gZnJvbSBcIi4vY29udGFpbnMuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBwb2x5Z29uTGVuZ3RofSBmcm9tIFwiLi9sZW5ndGguanNcIjtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHBvbHlnb24pIHtcbiAgdmFyIGkgPSAtMSxcbiAgICAgIG4gPSBwb2x5Z29uLmxlbmd0aCxcbiAgICAgIGIgPSBwb2x5Z29uW24gLSAxXSxcbiAgICAgIHhhLFxuICAgICAgeWEsXG4gICAgICB4YiA9IGJbMF0sXG4gICAgICB5YiA9IGJbMV0sXG4gICAgICBwZXJpbWV0ZXIgPSAwO1xuXG4gIHdoaWxlICgrK2kgPCBuKSB7XG4gICAgeGEgPSB4YjtcbiAgICB5YSA9IHliO1xuICAgIGIgPSBwb2x5Z29uW2ldO1xuICAgIHhiID0gYlswXTtcbiAgICB5YiA9IGJbMV07XG4gICAgeGEgLT0geGI7XG4gICAgeWEgLT0geWI7XG4gICAgcGVyaW1ldGVyICs9IE1hdGguc3FydCh4YSAqIHhhICsgeWEgKiB5YSk7XG4gIH1cblxuICByZXR1cm4gcGVyaW1ldGVyO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oZCkge1xuICB2YXIgeCA9ICt0aGlzLl94LmNhbGwobnVsbCwgZCksXG4gICAgICB5ID0gK3RoaXMuX3kuY2FsbChudWxsLCBkKTtcbiAgcmV0dXJuIGFkZCh0aGlzLmNvdmVyKHgsIHkpLCB4LCB5LCBkKTtcbn1cblxuZnVuY3Rpb24gYWRkKHRyZWUsIHgsIHksIGQpIHtcbiAgaWYgKGlzTmFOKHgpIHx8IGlzTmFOKHkpKSByZXR1cm4gdHJlZTsgLy8gaWdub3JlIGludmFsaWQgcG9pbnRzXG5cbiAgdmFyIHBhcmVudCxcbiAgICAgIG5vZGUgPSB0cmVlLl9yb290LFxuICAgICAgbGVhZiA9IHtkYXRhOiBkfSxcbiAgICAgIHgwID0gdHJlZS5feDAsXG4gICAgICB5MCA9IHRyZWUuX3kwLFxuICAgICAgeDEgPSB0cmVlLl94MSxcbiAgICAgIHkxID0gdHJlZS5feTEsXG4gICAgICB4bSxcbiAgICAgIHltLFxuICAgICAgeHAsXG4gICAgICB5cCxcbiAgICAgIHJpZ2h0LFxuICAgICAgYm90dG9tLFxuICAgICAgaSxcbiAgICAgIGo7XG5cbiAgLy8gSWYgdGhlIHRyZWUgaXMgZW1wdHksIGluaXRpYWxpemUgdGhlIHJvb3QgYXMgYSBsZWFmLlxuICBpZiAoIW5vZGUpIHJldHVybiB0cmVlLl9yb290ID0gbGVhZiwgdHJlZTtcblxuICAvLyBGaW5kIHRoZSBleGlzdGluZyBsZWFmIGZvciB0aGUgbmV3IHBvaW50LCBvciBhZGQgaXQuXG4gIHdoaWxlIChub2RlLmxlbmd0aCkge1xuICAgIGlmIChyaWdodCA9IHggPj0gKHhtID0gKHgwICsgeDEpIC8gMikpIHgwID0geG07IGVsc2UgeDEgPSB4bTtcbiAgICBpZiAoYm90dG9tID0geSA+PSAoeW0gPSAoeTAgKyB5MSkgLyAyKSkgeTAgPSB5bTsgZWxzZSB5MSA9IHltO1xuICAgIGlmIChwYXJlbnQgPSBub2RlLCAhKG5vZGUgPSBub2RlW2kgPSBib3R0b20gPDwgMSB8IHJpZ2h0XSkpIHJldHVybiBwYXJlbnRbaV0gPSBsZWFmLCB0cmVlO1xuICB9XG5cbiAgLy8gSXMgdGhlIG5ldyBwb2ludCBpcyBleGFjdGx5IGNvaW5jaWRlbnQgd2l0aCB0aGUgZXhpc3RpbmcgcG9pbnQ/XG4gIHhwID0gK3RyZWUuX3guY2FsbChudWxsLCBub2RlLmRhdGEpO1xuICB5cCA9ICt0cmVlLl95LmNhbGwobnVsbCwgbm9kZS5kYXRhKTtcbiAgaWYgKHggPT09IHhwICYmIHkgPT09IHlwKSByZXR1cm4gbGVhZi5uZXh0ID0gbm9kZSwgcGFyZW50ID8gcGFyZW50W2ldID0gbGVhZiA6IHRyZWUuX3Jvb3QgPSBsZWFmLCB0cmVlO1xuXG4gIC8vIE90aGVyd2lzZSwgc3BsaXQgdGhlIGxlYWYgbm9kZSB1bnRpbCB0aGUgb2xkIGFuZCBuZXcgcG9pbnQgYXJlIHNlcGFyYXRlZC5cbiAgZG8ge1xuICAgIHBhcmVudCA9IHBhcmVudCA/IHBhcmVudFtpXSA9IG5ldyBBcnJheSg0KSA6IHRyZWUuX3Jvb3QgPSBuZXcgQXJyYXkoNCk7XG4gICAgaWYgKHJpZ2h0ID0geCA+PSAoeG0gPSAoeDAgKyB4MSkgLyAyKSkgeDAgPSB4bTsgZWxzZSB4MSA9IHhtO1xuICAgIGlmIChib3R0b20gPSB5ID49ICh5bSA9ICh5MCArIHkxKSAvIDIpKSB5MCA9IHltOyBlbHNlIHkxID0geW07XG4gIH0gd2hpbGUgKChpID0gYm90dG9tIDw8IDEgfCByaWdodCkgPT09IChqID0gKHlwID49IHltKSA8PCAxIHwgKHhwID49IHhtKSkpO1xuICByZXR1cm4gcGFyZW50W2pdID0gbm9kZSwgcGFyZW50W2ldID0gbGVhZiwgdHJlZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZEFsbChkYXRhKSB7XG4gIHZhciBkLCBpLCBuID0gZGF0YS5sZW5ndGgsXG4gICAgICB4LFxuICAgICAgeSxcbiAgICAgIHh6ID0gbmV3IEFycmF5KG4pLFxuICAgICAgeXogPSBuZXcgQXJyYXkobiksXG4gICAgICB4MCA9IEluZmluaXR5LFxuICAgICAgeTAgPSBJbmZpbml0eSxcbiAgICAgIHgxID0gLUluZmluaXR5LFxuICAgICAgeTEgPSAtSW5maW5pdHk7XG5cbiAgLy8gQ29tcHV0ZSB0aGUgcG9pbnRzIGFuZCB0aGVpciBleHRlbnQuXG4gIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICBpZiAoaXNOYU4oeCA9ICt0aGlzLl94LmNhbGwobnVsbCwgZCA9IGRhdGFbaV0pKSB8fCBpc05hTih5ID0gK3RoaXMuX3kuY2FsbChudWxsLCBkKSkpIGNvbnRpbnVlO1xuICAgIHh6W2ldID0geDtcbiAgICB5eltpXSA9IHk7XG4gICAgaWYgKHggPCB4MCkgeDAgPSB4O1xuICAgIGlmICh4ID4geDEpIHgxID0geDtcbiAgICBpZiAoeSA8IHkwKSB5MCA9IHk7XG4gICAgaWYgKHkgPiB5MSkgeTEgPSB5O1xuICB9XG5cbiAgLy8gSWYgdGhlcmUgd2VyZSBubyAodmFsaWQpIHBvaW50cywgYWJvcnQuXG4gIGlmICh4MCA+IHgxIHx8IHkwID4geTEpIHJldHVybiB0aGlzO1xuXG4gIC8vIEV4cGFuZCB0aGUgdHJlZSB0byBjb3ZlciB0aGUgbmV3IHBvaW50cy5cbiAgdGhpcy5jb3Zlcih4MCwgeTApLmNvdmVyKHgxLCB5MSk7XG5cbiAgLy8gQWRkIHRoZSBuZXcgcG9pbnRzLlxuICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgYWRkKHRoaXMsIHh6W2ldLCB5eltpXSwgZGF0YVtpXSk7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgsIHkpIHtcbiAgaWYgKGlzTmFOKHggPSAreCkgfHwgaXNOYU4oeSA9ICt5KSkgcmV0dXJuIHRoaXM7IC8vIGlnbm9yZSBpbnZhbGlkIHBvaW50c1xuXG4gIHZhciB4MCA9IHRoaXMuX3gwLFxuICAgICAgeTAgPSB0aGlzLl95MCxcbiAgICAgIHgxID0gdGhpcy5feDEsXG4gICAgICB5MSA9IHRoaXMuX3kxO1xuXG4gIC8vIElmIHRoZSBxdWFkdHJlZSBoYXMgbm8gZXh0ZW50LCBpbml0aWFsaXplIHRoZW0uXG4gIC8vIEludGVnZXIgZXh0ZW50IGFyZSBuZWNlc3Nhcnkgc28gdGhhdCBpZiB3ZSBsYXRlciBkb3VibGUgdGhlIGV4dGVudCxcbiAgLy8gdGhlIGV4aXN0aW5nIHF1YWRyYW50IGJvdW5kYXJpZXMgZG9u4oCZdCBjaGFuZ2UgZHVlIHRvIGZsb2F0aW5nIHBvaW50IGVycm9yIVxuICBpZiAoaXNOYU4oeDApKSB7XG4gICAgeDEgPSAoeDAgPSBNYXRoLmZsb29yKHgpKSArIDE7XG4gICAgeTEgPSAoeTAgPSBNYXRoLmZsb29yKHkpKSArIDE7XG4gIH1cblxuICAvLyBPdGhlcndpc2UsIGRvdWJsZSByZXBlYXRlZGx5IHRvIGNvdmVyLlxuICBlbHNlIHtcbiAgICB2YXIgeiA9IHgxIC0geDAsXG4gICAgICAgIG5vZGUgPSB0aGlzLl9yb290LFxuICAgICAgICBwYXJlbnQsXG4gICAgICAgIGk7XG5cbiAgICB3aGlsZSAoeDAgPiB4IHx8IHggPj0geDEgfHwgeTAgPiB5IHx8IHkgPj0geTEpIHtcbiAgICAgIGkgPSAoeSA8IHkwKSA8PCAxIHwgKHggPCB4MCk7XG4gICAgICBwYXJlbnQgPSBuZXcgQXJyYXkoNCksIHBhcmVudFtpXSA9IG5vZGUsIG5vZGUgPSBwYXJlbnQsIHogKj0gMjtcbiAgICAgIHN3aXRjaCAoaSkge1xuICAgICAgICBjYXNlIDA6IHgxID0geDAgKyB6LCB5MSA9IHkwICsgejsgYnJlYWs7XG4gICAgICAgIGNhc2UgMTogeDAgPSB4MSAtIHosIHkxID0geTAgKyB6OyBicmVhaztcbiAgICAgICAgY2FzZSAyOiB4MSA9IHgwICsgeiwgeTAgPSB5MSAtIHo7IGJyZWFrO1xuICAgICAgICBjYXNlIDM6IHgwID0geDEgLSB6LCB5MCA9IHkxIC0gejsgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3Jvb3QgJiYgdGhpcy5fcm9vdC5sZW5ndGgpIHRoaXMuX3Jvb3QgPSBub2RlO1xuICB9XG5cbiAgdGhpcy5feDAgPSB4MDtcbiAgdGhpcy5feTAgPSB5MDtcbiAgdGhpcy5feDEgPSB4MTtcbiAgdGhpcy5feTEgPSB5MTtcbiAgcmV0dXJuIHRoaXM7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIGRhdGEgPSBbXTtcbiAgdGhpcy52aXNpdChmdW5jdGlvbihub2RlKSB7XG4gICAgaWYgKCFub2RlLmxlbmd0aCkgZG8gZGF0YS5wdXNoKG5vZGUuZGF0YSk7IHdoaWxlIChub2RlID0gbm9kZS5uZXh0KVxuICB9KTtcbiAgcmV0dXJuIGRhdGE7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihfKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICA/IHRoaXMuY292ZXIoK19bMF1bMF0sICtfWzBdWzFdKS5jb3ZlcigrX1sxXVswXSwgK19bMV1bMV0pXG4gICAgICA6IGlzTmFOKHRoaXMuX3gwKSA/IHVuZGVmaW5lZCA6IFtbdGhpcy5feDAsIHRoaXMuX3kwXSwgW3RoaXMuX3gxLCB0aGlzLl95MV1dO1xufVxuIiwiaW1wb3J0IFF1YWQgZnJvbSBcIi4vcXVhZC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4LCB5LCByYWRpdXMpIHtcbiAgdmFyIGRhdGEsXG4gICAgICB4MCA9IHRoaXMuX3gwLFxuICAgICAgeTAgPSB0aGlzLl95MCxcbiAgICAgIHgxLFxuICAgICAgeTEsXG4gICAgICB4MixcbiAgICAgIHkyLFxuICAgICAgeDMgPSB0aGlzLl94MSxcbiAgICAgIHkzID0gdGhpcy5feTEsXG4gICAgICBxdWFkcyA9IFtdLFxuICAgICAgbm9kZSA9IHRoaXMuX3Jvb3QsXG4gICAgICBxLFxuICAgICAgaTtcblxuICBpZiAobm9kZSkgcXVhZHMucHVzaChuZXcgUXVhZChub2RlLCB4MCwgeTAsIHgzLCB5MykpO1xuICBpZiAocmFkaXVzID09IG51bGwpIHJhZGl1cyA9IEluZmluaXR5O1xuICBlbHNlIHtcbiAgICB4MCA9IHggLSByYWRpdXMsIHkwID0geSAtIHJhZGl1cztcbiAgICB4MyA9IHggKyByYWRpdXMsIHkzID0geSArIHJhZGl1cztcbiAgICByYWRpdXMgKj0gcmFkaXVzO1xuICB9XG5cbiAgd2hpbGUgKHEgPSBxdWFkcy5wb3AoKSkge1xuXG4gICAgLy8gU3RvcCBzZWFyY2hpbmcgaWYgdGhpcyBxdWFkcmFudCBjYW7igJl0IGNvbnRhaW4gYSBjbG9zZXIgbm9kZS5cbiAgICBpZiAoIShub2RlID0gcS5ub2RlKVxuICAgICAgICB8fCAoeDEgPSBxLngwKSA+IHgzXG4gICAgICAgIHx8ICh5MSA9IHEueTApID4geTNcbiAgICAgICAgfHwgKHgyID0gcS54MSkgPCB4MFxuICAgICAgICB8fCAoeTIgPSBxLnkxKSA8IHkwKSBjb250aW51ZTtcblxuICAgIC8vIEJpc2VjdCB0aGUgY3VycmVudCBxdWFkcmFudC5cbiAgICBpZiAobm9kZS5sZW5ndGgpIHtcbiAgICAgIHZhciB4bSA9ICh4MSArIHgyKSAvIDIsXG4gICAgICAgICAgeW0gPSAoeTEgKyB5MikgLyAyO1xuXG4gICAgICBxdWFkcy5wdXNoKFxuICAgICAgICBuZXcgUXVhZChub2RlWzNdLCB4bSwgeW0sIHgyLCB5MiksXG4gICAgICAgIG5ldyBRdWFkKG5vZGVbMl0sIHgxLCB5bSwgeG0sIHkyKSxcbiAgICAgICAgbmV3IFF1YWQobm9kZVsxXSwgeG0sIHkxLCB4MiwgeW0pLFxuICAgICAgICBuZXcgUXVhZChub2RlWzBdLCB4MSwgeTEsIHhtLCB5bSlcbiAgICAgICk7XG5cbiAgICAgIC8vIFZpc2l0IHRoZSBjbG9zZXN0IHF1YWRyYW50IGZpcnN0LlxuICAgICAgaWYgKGkgPSAoeSA+PSB5bSkgPDwgMSB8ICh4ID49IHhtKSkge1xuICAgICAgICBxID0gcXVhZHNbcXVhZHMubGVuZ3RoIC0gMV07XG4gICAgICAgIHF1YWRzW3F1YWRzLmxlbmd0aCAtIDFdID0gcXVhZHNbcXVhZHMubGVuZ3RoIC0gMSAtIGldO1xuICAgICAgICBxdWFkc1txdWFkcy5sZW5ndGggLSAxIC0gaV0gPSBxO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFZpc2l0IHRoaXMgcG9pbnQuIChWaXNpdGluZyBjb2luY2lkZW50IHBvaW50cyBpc27igJl0IG5lY2Vzc2FyeSEpXG4gICAgZWxzZSB7XG4gICAgICB2YXIgZHggPSB4IC0gK3RoaXMuX3guY2FsbChudWxsLCBub2RlLmRhdGEpLFxuICAgICAgICAgIGR5ID0geSAtICt0aGlzLl95LmNhbGwobnVsbCwgbm9kZS5kYXRhKSxcbiAgICAgICAgICBkMiA9IGR4ICogZHggKyBkeSAqIGR5O1xuICAgICAgaWYgKGQyIDwgcmFkaXVzKSB7XG4gICAgICAgIHZhciBkID0gTWF0aC5zcXJ0KHJhZGl1cyA9IGQyKTtcbiAgICAgICAgeDAgPSB4IC0gZCwgeTAgPSB5IC0gZDtcbiAgICAgICAgeDMgPSB4ICsgZCwgeTMgPSB5ICsgZDtcbiAgICAgICAgZGF0YSA9IG5vZGUuZGF0YTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZGF0YTtcbn1cbiIsImV4cG9ydCB7ZGVmYXVsdCBhcyBxdWFkdHJlZX0gZnJvbSBcIi4vcXVhZHRyZWUuanNcIjtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5vZGUsIHgwLCB5MCwgeDEsIHkxKSB7XG4gIHRoaXMubm9kZSA9IG5vZGU7XG4gIHRoaXMueDAgPSB4MDtcbiAgdGhpcy55MCA9IHkwO1xuICB0aGlzLngxID0geDE7XG4gIHRoaXMueTEgPSB5MTtcbn1cbiIsImltcG9ydCB0cmVlX2FkZCwge2FkZEFsbCBhcyB0cmVlX2FkZEFsbH0gZnJvbSBcIi4vYWRkLmpzXCI7XG5pbXBvcnQgdHJlZV9jb3ZlciBmcm9tIFwiLi9jb3Zlci5qc1wiO1xuaW1wb3J0IHRyZWVfZGF0YSBmcm9tIFwiLi9kYXRhLmpzXCI7XG5pbXBvcnQgdHJlZV9leHRlbnQgZnJvbSBcIi4vZXh0ZW50LmpzXCI7XG5pbXBvcnQgdHJlZV9maW5kIGZyb20gXCIuL2ZpbmQuanNcIjtcbmltcG9ydCB0cmVlX3JlbW92ZSwge3JlbW92ZUFsbCBhcyB0cmVlX3JlbW92ZUFsbH0gZnJvbSBcIi4vcmVtb3ZlLmpzXCI7XG5pbXBvcnQgdHJlZV9yb290IGZyb20gXCIuL3Jvb3QuanNcIjtcbmltcG9ydCB0cmVlX3NpemUgZnJvbSBcIi4vc2l6ZS5qc1wiO1xuaW1wb3J0IHRyZWVfdmlzaXQgZnJvbSBcIi4vdmlzaXQuanNcIjtcbmltcG9ydCB0cmVlX3Zpc2l0QWZ0ZXIgZnJvbSBcIi4vdmlzaXRBZnRlci5qc1wiO1xuaW1wb3J0IHRyZWVfeCwge2RlZmF1bHRYfSBmcm9tIFwiLi94LmpzXCI7XG5pbXBvcnQgdHJlZV95LCB7ZGVmYXVsdFl9IGZyb20gXCIuL3kuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcXVhZHRyZWUobm9kZXMsIHgsIHkpIHtcbiAgdmFyIHRyZWUgPSBuZXcgUXVhZHRyZWUoeCA9PSBudWxsID8gZGVmYXVsdFggOiB4LCB5ID09IG51bGwgPyBkZWZhdWx0WSA6IHksIE5hTiwgTmFOLCBOYU4sIE5hTik7XG4gIHJldHVybiBub2RlcyA9PSBudWxsID8gdHJlZSA6IHRyZWUuYWRkQWxsKG5vZGVzKTtcbn1cblxuZnVuY3Rpb24gUXVhZHRyZWUoeCwgeSwgeDAsIHkwLCB4MSwgeTEpIHtcbiAgdGhpcy5feCA9IHg7XG4gIHRoaXMuX3kgPSB5O1xuICB0aGlzLl94MCA9IHgwO1xuICB0aGlzLl95MCA9IHkwO1xuICB0aGlzLl94MSA9IHgxO1xuICB0aGlzLl95MSA9IHkxO1xuICB0aGlzLl9yb290ID0gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBsZWFmX2NvcHkobGVhZikge1xuICB2YXIgY29weSA9IHtkYXRhOiBsZWFmLmRhdGF9LCBuZXh0ID0gY29weTtcbiAgd2hpbGUgKGxlYWYgPSBsZWFmLm5leHQpIG5leHQgPSBuZXh0Lm5leHQgPSB7ZGF0YTogbGVhZi5kYXRhfTtcbiAgcmV0dXJuIGNvcHk7XG59XG5cbnZhciB0cmVlUHJvdG8gPSBxdWFkdHJlZS5wcm90b3R5cGUgPSBRdWFkdHJlZS5wcm90b3R5cGU7XG5cbnRyZWVQcm90by5jb3B5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBjb3B5ID0gbmV3IFF1YWR0cmVlKHRoaXMuX3gsIHRoaXMuX3ksIHRoaXMuX3gwLCB0aGlzLl95MCwgdGhpcy5feDEsIHRoaXMuX3kxKSxcbiAgICAgIG5vZGUgPSB0aGlzLl9yb290LFxuICAgICAgbm9kZXMsXG4gICAgICBjaGlsZDtcblxuICBpZiAoIW5vZGUpIHJldHVybiBjb3B5O1xuXG4gIGlmICghbm9kZS5sZW5ndGgpIHJldHVybiBjb3B5Ll9yb290ID0gbGVhZl9jb3B5KG5vZGUpLCBjb3B5O1xuXG4gIG5vZGVzID0gW3tzb3VyY2U6IG5vZGUsIHRhcmdldDogY29weS5fcm9vdCA9IG5ldyBBcnJheSg0KX1dO1xuICB3aGlsZSAobm9kZSA9IG5vZGVzLnBvcCgpKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCA0OyArK2kpIHtcbiAgICAgIGlmIChjaGlsZCA9IG5vZGUuc291cmNlW2ldKSB7XG4gICAgICAgIGlmIChjaGlsZC5sZW5ndGgpIG5vZGVzLnB1c2goe3NvdXJjZTogY2hpbGQsIHRhcmdldDogbm9kZS50YXJnZXRbaV0gPSBuZXcgQXJyYXkoNCl9KTtcbiAgICAgICAgZWxzZSBub2RlLnRhcmdldFtpXSA9IGxlYWZfY29weShjaGlsZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNvcHk7XG59O1xuXG50cmVlUHJvdG8uYWRkID0gdHJlZV9hZGQ7XG50cmVlUHJvdG8uYWRkQWxsID0gdHJlZV9hZGRBbGw7XG50cmVlUHJvdG8uY292ZXIgPSB0cmVlX2NvdmVyO1xudHJlZVByb3RvLmRhdGEgPSB0cmVlX2RhdGE7XG50cmVlUHJvdG8uZXh0ZW50ID0gdHJlZV9leHRlbnQ7XG50cmVlUHJvdG8uZmluZCA9IHRyZWVfZmluZDtcbnRyZWVQcm90by5yZW1vdmUgPSB0cmVlX3JlbW92ZTtcbnRyZWVQcm90by5yZW1vdmVBbGwgPSB0cmVlX3JlbW92ZUFsbDtcbnRyZWVQcm90by5yb290ID0gdHJlZV9yb290O1xudHJlZVByb3RvLnNpemUgPSB0cmVlX3NpemU7XG50cmVlUHJvdG8udmlzaXQgPSB0cmVlX3Zpc2l0O1xudHJlZVByb3RvLnZpc2l0QWZ0ZXIgPSB0cmVlX3Zpc2l0QWZ0ZXI7XG50cmVlUHJvdG8ueCA9IHRyZWVfeDtcbnRyZWVQcm90by55ID0gdHJlZV95O1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oZCkge1xuICBpZiAoaXNOYU4oeCA9ICt0aGlzLl94LmNhbGwobnVsbCwgZCkpIHx8IGlzTmFOKHkgPSArdGhpcy5feS5jYWxsKG51bGwsIGQpKSkgcmV0dXJuIHRoaXM7IC8vIGlnbm9yZSBpbnZhbGlkIHBvaW50c1xuXG4gIHZhciBwYXJlbnQsXG4gICAgICBub2RlID0gdGhpcy5fcm9vdCxcbiAgICAgIHJldGFpbmVyLFxuICAgICAgcHJldmlvdXMsXG4gICAgICBuZXh0LFxuICAgICAgeDAgPSB0aGlzLl94MCxcbiAgICAgIHkwID0gdGhpcy5feTAsXG4gICAgICB4MSA9IHRoaXMuX3gxLFxuICAgICAgeTEgPSB0aGlzLl95MSxcbiAgICAgIHgsXG4gICAgICB5LFxuICAgICAgeG0sXG4gICAgICB5bSxcbiAgICAgIHJpZ2h0LFxuICAgICAgYm90dG9tLFxuICAgICAgaSxcbiAgICAgIGo7XG5cbiAgLy8gSWYgdGhlIHRyZWUgaXMgZW1wdHksIGluaXRpYWxpemUgdGhlIHJvb3QgYXMgYSBsZWFmLlxuICBpZiAoIW5vZGUpIHJldHVybiB0aGlzO1xuXG4gIC8vIEZpbmQgdGhlIGxlYWYgbm9kZSBmb3IgdGhlIHBvaW50LlxuICAvLyBXaGlsZSBkZXNjZW5kaW5nLCBhbHNvIHJldGFpbiB0aGUgZGVlcGVzdCBwYXJlbnQgd2l0aCBhIG5vbi1yZW1vdmVkIHNpYmxpbmcuXG4gIGlmIChub2RlLmxlbmd0aCkgd2hpbGUgKHRydWUpIHtcbiAgICBpZiAocmlnaHQgPSB4ID49ICh4bSA9ICh4MCArIHgxKSAvIDIpKSB4MCA9IHhtOyBlbHNlIHgxID0geG07XG4gICAgaWYgKGJvdHRvbSA9IHkgPj0gKHltID0gKHkwICsgeTEpIC8gMikpIHkwID0geW07IGVsc2UgeTEgPSB5bTtcbiAgICBpZiAoIShwYXJlbnQgPSBub2RlLCBub2RlID0gbm9kZVtpID0gYm90dG9tIDw8IDEgfCByaWdodF0pKSByZXR1cm4gdGhpcztcbiAgICBpZiAoIW5vZGUubGVuZ3RoKSBicmVhaztcbiAgICBpZiAocGFyZW50WyhpICsgMSkgJiAzXSB8fCBwYXJlbnRbKGkgKyAyKSAmIDNdIHx8IHBhcmVudFsoaSArIDMpICYgM10pIHJldGFpbmVyID0gcGFyZW50LCBqID0gaTtcbiAgfVxuXG4gIC8vIEZpbmQgdGhlIHBvaW50IHRvIHJlbW92ZS5cbiAgd2hpbGUgKG5vZGUuZGF0YSAhPT0gZCkgaWYgKCEocHJldmlvdXMgPSBub2RlLCBub2RlID0gbm9kZS5uZXh0KSkgcmV0dXJuIHRoaXM7XG4gIGlmIChuZXh0ID0gbm9kZS5uZXh0KSBkZWxldGUgbm9kZS5uZXh0O1xuXG4gIC8vIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBjb2luY2lkZW50IHBvaW50cywgcmVtb3ZlIGp1c3QgdGhlIHBvaW50LlxuICBpZiAocHJldmlvdXMpIHJldHVybiAobmV4dCA/IHByZXZpb3VzLm5leHQgPSBuZXh0IDogZGVsZXRlIHByZXZpb3VzLm5leHQpLCB0aGlzO1xuXG4gIC8vIElmIHRoaXMgaXMgdGhlIHJvb3QgcG9pbnQsIHJlbW92ZSBpdC5cbiAgaWYgKCFwYXJlbnQpIHJldHVybiB0aGlzLl9yb290ID0gbmV4dCwgdGhpcztcblxuICAvLyBSZW1vdmUgdGhpcyBsZWFmLlxuICBuZXh0ID8gcGFyZW50W2ldID0gbmV4dCA6IGRlbGV0ZSBwYXJlbnRbaV07XG5cbiAgLy8gSWYgdGhlIHBhcmVudCBub3cgY29udGFpbnMgZXhhY3RseSBvbmUgbGVhZiwgY29sbGFwc2Ugc3VwZXJmbHVvdXMgcGFyZW50cy5cbiAgaWYgKChub2RlID0gcGFyZW50WzBdIHx8IHBhcmVudFsxXSB8fCBwYXJlbnRbMl0gfHwgcGFyZW50WzNdKVxuICAgICAgJiYgbm9kZSA9PT0gKHBhcmVudFszXSB8fCBwYXJlbnRbMl0gfHwgcGFyZW50WzFdIHx8IHBhcmVudFswXSlcbiAgICAgICYmICFub2RlLmxlbmd0aCkge1xuICAgIGlmIChyZXRhaW5lcikgcmV0YWluZXJbal0gPSBub2RlO1xuICAgIGVsc2UgdGhpcy5fcm9vdCA9IG5vZGU7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUFsbChkYXRhKSB7XG4gIGZvciAodmFyIGkgPSAwLCBuID0gZGF0YS5sZW5ndGg7IGkgPCBuOyArK2kpIHRoaXMucmVtb3ZlKGRhdGFbaV0pO1xuICByZXR1cm4gdGhpcztcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5fcm9vdDtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgc2l6ZSA9IDA7XG4gIHRoaXMudmlzaXQoZnVuY3Rpb24obm9kZSkge1xuICAgIGlmICghbm9kZS5sZW5ndGgpIGRvICsrc2l6ZTsgd2hpbGUgKG5vZGUgPSBub2RlLm5leHQpXG4gIH0pO1xuICByZXR1cm4gc2l6ZTtcbn1cbiIsImltcG9ydCBRdWFkIGZyb20gXCIuL3F1YWQuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgdmFyIHF1YWRzID0gW10sIHEsIG5vZGUgPSB0aGlzLl9yb290LCBjaGlsZCwgeDAsIHkwLCB4MSwgeTE7XG4gIGlmIChub2RlKSBxdWFkcy5wdXNoKG5ldyBRdWFkKG5vZGUsIHRoaXMuX3gwLCB0aGlzLl95MCwgdGhpcy5feDEsIHRoaXMuX3kxKSk7XG4gIHdoaWxlIChxID0gcXVhZHMucG9wKCkpIHtcbiAgICBpZiAoIWNhbGxiYWNrKG5vZGUgPSBxLm5vZGUsIHgwID0gcS54MCwgeTAgPSBxLnkwLCB4MSA9IHEueDEsIHkxID0gcS55MSkgJiYgbm9kZS5sZW5ndGgpIHtcbiAgICAgIHZhciB4bSA9ICh4MCArIHgxKSAvIDIsIHltID0gKHkwICsgeTEpIC8gMjtcbiAgICAgIGlmIChjaGlsZCA9IG5vZGVbM10pIHF1YWRzLnB1c2gobmV3IFF1YWQoY2hpbGQsIHhtLCB5bSwgeDEsIHkxKSk7XG4gICAgICBpZiAoY2hpbGQgPSBub2RlWzJdKSBxdWFkcy5wdXNoKG5ldyBRdWFkKGNoaWxkLCB4MCwgeW0sIHhtLCB5MSkpO1xuICAgICAgaWYgKGNoaWxkID0gbm9kZVsxXSkgcXVhZHMucHVzaChuZXcgUXVhZChjaGlsZCwgeG0sIHkwLCB4MSwgeW0pKTtcbiAgICAgIGlmIChjaGlsZCA9IG5vZGVbMF0pIHF1YWRzLnB1c2gobmV3IFF1YWQoY2hpbGQsIHgwLCB5MCwgeG0sIHltKSk7XG4gICAgfVxuICB9XG4gIHJldHVybiB0aGlzO1xufVxuIiwiaW1wb3J0IFF1YWQgZnJvbSBcIi4vcXVhZC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjYWxsYmFjaykge1xuICB2YXIgcXVhZHMgPSBbXSwgbmV4dCA9IFtdLCBxO1xuICBpZiAodGhpcy5fcm9vdCkgcXVhZHMucHVzaChuZXcgUXVhZCh0aGlzLl9yb290LCB0aGlzLl94MCwgdGhpcy5feTAsIHRoaXMuX3gxLCB0aGlzLl95MSkpO1xuICB3aGlsZSAocSA9IHF1YWRzLnBvcCgpKSB7XG4gICAgdmFyIG5vZGUgPSBxLm5vZGU7XG4gICAgaWYgKG5vZGUubGVuZ3RoKSB7XG4gICAgICB2YXIgY2hpbGQsIHgwID0gcS54MCwgeTAgPSBxLnkwLCB4MSA9IHEueDEsIHkxID0gcS55MSwgeG0gPSAoeDAgKyB4MSkgLyAyLCB5bSA9ICh5MCArIHkxKSAvIDI7XG4gICAgICBpZiAoY2hpbGQgPSBub2RlWzBdKSBxdWFkcy5wdXNoKG5ldyBRdWFkKGNoaWxkLCB4MCwgeTAsIHhtLCB5bSkpO1xuICAgICAgaWYgKGNoaWxkID0gbm9kZVsxXSkgcXVhZHMucHVzaChuZXcgUXVhZChjaGlsZCwgeG0sIHkwLCB4MSwgeW0pKTtcbiAgICAgIGlmIChjaGlsZCA9IG5vZGVbMl0pIHF1YWRzLnB1c2gobmV3IFF1YWQoY2hpbGQsIHgwLCB5bSwgeG0sIHkxKSk7XG4gICAgICBpZiAoY2hpbGQgPSBub2RlWzNdKSBxdWFkcy5wdXNoKG5ldyBRdWFkKGNoaWxkLCB4bSwgeW0sIHgxLCB5MSkpO1xuICAgIH1cbiAgICBuZXh0LnB1c2gocSk7XG4gIH1cbiAgd2hpbGUgKHEgPSBuZXh0LnBvcCgpKSB7XG4gICAgY2FsbGJhY2socS5ub2RlLCBxLngwLCBxLnkwLCBxLngxLCBxLnkxKTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn1cbiIsImV4cG9ydCBmdW5jdGlvbiBkZWZhdWx0WChkKSB7XG4gIHJldHVybiBkWzBdO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihfKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRoaXMuX3ggPSBfLCB0aGlzKSA6IHRoaXMuX3g7XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gZGVmYXVsdFkoZCkge1xuICByZXR1cm4gZFsxXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oXykge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0aGlzLl95ID0gXywgdGhpcykgOiB0aGlzLl95O1xufVxuIiwiaW1wb3J0IGRlZmF1bHRTb3VyY2UgZnJvbSBcIi4vZGVmYXVsdFNvdXJjZVwiO1xuaW1wb3J0IGlyd2luSGFsbCBmcm9tIFwiLi9pcndpbkhhbGxcIjtcblxuZXhwb3J0IGRlZmF1bHQgKGZ1bmN0aW9uIHNvdXJjZVJhbmRvbUJhdGVzKHNvdXJjZSkge1xuICBmdW5jdGlvbiByYW5kb21CYXRlcyhuKSB7XG4gICAgdmFyIHJhbmRvbUlyd2luSGFsbCA9IGlyd2luSGFsbC5zb3VyY2Uoc291cmNlKShuKTtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gcmFuZG9tSXJ3aW5IYWxsKCkgLyBuO1xuICAgIH07XG4gIH1cblxuICByYW5kb21CYXRlcy5zb3VyY2UgPSBzb3VyY2VSYW5kb21CYXRlcztcblxuICByZXR1cm4gcmFuZG9tQmF0ZXM7XG59KShkZWZhdWx0U291cmNlKTtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gTWF0aC5yYW5kb20oKTtcbn1cbiIsImltcG9ydCBkZWZhdWx0U291cmNlIGZyb20gXCIuL2RlZmF1bHRTb3VyY2VcIjtcblxuZXhwb3J0IGRlZmF1bHQgKGZ1bmN0aW9uIHNvdXJjZVJhbmRvbUV4cG9uZW50aWFsKHNvdXJjZSkge1xuICBmdW5jdGlvbiByYW5kb21FeHBvbmVudGlhbChsYW1iZGEpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gLU1hdGgubG9nKDEgLSBzb3VyY2UoKSkgLyBsYW1iZGE7XG4gICAgfTtcbiAgfVxuXG4gIHJhbmRvbUV4cG9uZW50aWFsLnNvdXJjZSA9IHNvdXJjZVJhbmRvbUV4cG9uZW50aWFsO1xuXG4gIHJldHVybiByYW5kb21FeHBvbmVudGlhbDtcbn0pKGRlZmF1bHRTb3VyY2UpO1xuIiwiZXhwb3J0IHtkZWZhdWx0IGFzIHJhbmRvbVVuaWZvcm19IGZyb20gXCIuL3VuaWZvcm1cIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyByYW5kb21Ob3JtYWx9IGZyb20gXCIuL25vcm1hbFwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHJhbmRvbUxvZ05vcm1hbH0gZnJvbSBcIi4vbG9nTm9ybWFsXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgcmFuZG9tQmF0ZXN9IGZyb20gXCIuL2JhdGVzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgcmFuZG9tSXJ3aW5IYWxsfSBmcm9tIFwiLi9pcndpbkhhbGxcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyByYW5kb21FeHBvbmVudGlhbH0gZnJvbSBcIi4vZXhwb25lbnRpYWxcIjtcbiIsImltcG9ydCBkZWZhdWx0U291cmNlIGZyb20gXCIuL2RlZmF1bHRTb3VyY2VcIjtcblxuZXhwb3J0IGRlZmF1bHQgKGZ1bmN0aW9uIHNvdXJjZVJhbmRvbUlyd2luSGFsbChzb3VyY2UpIHtcbiAgZnVuY3Rpb24gcmFuZG9tSXJ3aW5IYWxsKG4pIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICBmb3IgKHZhciBzdW0gPSAwLCBpID0gMDsgaSA8IG47ICsraSkgc3VtICs9IHNvdXJjZSgpO1xuICAgICAgcmV0dXJuIHN1bTtcbiAgICB9O1xuICB9XG5cbiAgcmFuZG9tSXJ3aW5IYWxsLnNvdXJjZSA9IHNvdXJjZVJhbmRvbUlyd2luSGFsbDtcblxuICByZXR1cm4gcmFuZG9tSXJ3aW5IYWxsO1xufSkoZGVmYXVsdFNvdXJjZSk7XG4iLCJpbXBvcnQgZGVmYXVsdFNvdXJjZSBmcm9tIFwiLi9kZWZhdWx0U291cmNlXCI7XG5pbXBvcnQgbm9ybWFsIGZyb20gXCIuL25vcm1hbFwiO1xuXG5leHBvcnQgZGVmYXVsdCAoZnVuY3Rpb24gc291cmNlUmFuZG9tTG9nTm9ybWFsKHNvdXJjZSkge1xuICBmdW5jdGlvbiByYW5kb21Mb2dOb3JtYWwoKSB7XG4gICAgdmFyIHJhbmRvbU5vcm1hbCA9IG5vcm1hbC5zb3VyY2Uoc291cmNlKS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBNYXRoLmV4cChyYW5kb21Ob3JtYWwoKSk7XG4gICAgfTtcbiAgfVxuXG4gIHJhbmRvbUxvZ05vcm1hbC5zb3VyY2UgPSBzb3VyY2VSYW5kb21Mb2dOb3JtYWw7XG5cbiAgcmV0dXJuIHJhbmRvbUxvZ05vcm1hbDtcbn0pKGRlZmF1bHRTb3VyY2UpO1xuIiwiaW1wb3J0IGRlZmF1bHRTb3VyY2UgZnJvbSBcIi4vZGVmYXVsdFNvdXJjZVwiO1xuXG5leHBvcnQgZGVmYXVsdCAoZnVuY3Rpb24gc291cmNlUmFuZG9tTm9ybWFsKHNvdXJjZSkge1xuICBmdW5jdGlvbiByYW5kb21Ob3JtYWwobXUsIHNpZ21hKSB7XG4gICAgdmFyIHgsIHI7XG4gICAgbXUgPSBtdSA9PSBudWxsID8gMCA6ICttdTtcbiAgICBzaWdtYSA9IHNpZ21hID09IG51bGwgPyAxIDogK3NpZ21hO1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciB5O1xuXG4gICAgICAvLyBJZiBhdmFpbGFibGUsIHVzZSB0aGUgc2Vjb25kIHByZXZpb3VzbHktZ2VuZXJhdGVkIHVuaWZvcm0gcmFuZG9tLlxuICAgICAgaWYgKHggIT0gbnVsbCkgeSA9IHgsIHggPSBudWxsO1xuXG4gICAgICAvLyBPdGhlcndpc2UsIGdlbmVyYXRlIGEgbmV3IHggYW5kIHkuXG4gICAgICBlbHNlIGRvIHtcbiAgICAgICAgeCA9IHNvdXJjZSgpICogMiAtIDE7XG4gICAgICAgIHkgPSBzb3VyY2UoKSAqIDIgLSAxO1xuICAgICAgICByID0geCAqIHggKyB5ICogeTtcbiAgICAgIH0gd2hpbGUgKCFyIHx8IHIgPiAxKTtcblxuICAgICAgcmV0dXJuIG11ICsgc2lnbWEgKiB5ICogTWF0aC5zcXJ0KC0yICogTWF0aC5sb2cocikgLyByKTtcbiAgICB9O1xuICB9XG5cbiAgcmFuZG9tTm9ybWFsLnNvdXJjZSA9IHNvdXJjZVJhbmRvbU5vcm1hbDtcblxuICByZXR1cm4gcmFuZG9tTm9ybWFsO1xufSkoZGVmYXVsdFNvdXJjZSk7XG4iLCJpbXBvcnQgZGVmYXVsdFNvdXJjZSBmcm9tIFwiLi9kZWZhdWx0U291cmNlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IChmdW5jdGlvbiBzb3VyY2VSYW5kb21Vbmlmb3JtKHNvdXJjZSkge1xuICBmdW5jdGlvbiByYW5kb21Vbmlmb3JtKG1pbiwgbWF4KSB7XG4gICAgbWluID0gbWluID09IG51bGwgPyAwIDogK21pbjtcbiAgICBtYXggPSBtYXggPT0gbnVsbCA/IDEgOiArbWF4O1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSBtYXggPSBtaW4sIG1pbiA9IDA7XG4gICAgZWxzZSBtYXggLT0gbWluO1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBzb3VyY2UoKSAqIG1heCArIG1pbjtcbiAgICB9O1xuICB9XG5cbiAgcmFuZG9tVW5pZm9ybS5zb3VyY2UgPSBzb3VyY2VSYW5kb21Vbmlmb3JtO1xuXG4gIHJldHVybiByYW5kb21Vbmlmb3JtO1xufSkoZGVmYXVsdFNvdXJjZSk7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnMuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY29sb3JzKFwiN2ZjOTdmYmVhZWQ0ZmRjMDg2ZmZmZjk5Mzg2Y2IwZjAwMjdmYmY1YjE3NjY2NjY2XCIpO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbG9ycyhcIjFiOWU3N2Q5NWYwMjc1NzBiM2U3Mjk4YTY2YTYxZWU2YWIwMmE2NzYxZDY2NjY2NlwiKTtcbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9ycy5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjb2xvcnMoXCJhNmNlZTMxZjc4YjRiMmRmOGEzM2EwMmNmYjlhOTllMzFhMWNmZGJmNmZmZjdmMDBjYWIyZDY2YTNkOWFmZmZmOTliMTU5MjhcIik7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnMuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY29sb3JzKFwiZmJiNGFlYjNjZGUzY2NlYmM1ZGVjYmU0ZmVkOWE2ZmZmZmNjZTVkOGJkZmRkYWVjZjJmMmYyXCIpO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbG9ycyhcImIzZTJjZGZkY2RhY2NiZDVlOGY0Y2FlNGU2ZjVjOWZmZjJhZWYxZTJjY2NjY2NjY1wiKTtcbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9ycy5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjb2xvcnMoXCJlNDFhMWMzNzdlYjg0ZGFmNGE5ODRlYTNmZjdmMDBmZmZmMzNhNjU2MjhmNzgxYmY5OTk5OTlcIik7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnMuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY29sb3JzKFwiNjZjMmE1ZmM4ZDYyOGRhMGNiZTc4YWMzYTZkODU0ZmZkOTJmZTVjNDk0YjNiM2IzXCIpO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbG9ycyhcIjhkZDNjN2ZmZmZiM2JlYmFkYWZiODA3MjgwYjFkM2ZkYjQ2MmIzZGU2OWZjY2RlNWQ5ZDlkOWJjODBiZGNjZWJjNWZmZWQ2ZlwiKTtcbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9ycy5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjb2xvcnMoXCI0ZTc5YTdmMjhlMmNlMTU3NTk3NmI3YjI1OWExNGZlZGM5NDlhZjdhYTFmZjlkYTc5Yzc1NWZiYWIwYWJcIik7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnMuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY29sb3JzKFwiMWY3N2I0ZmY3ZjBlMmNhMDJjZDYyNzI4OTQ2N2JkOGM1NjRiZTM3N2MyN2Y3ZjdmYmNiZDIyMTdiZWNmXCIpO1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc3BlY2lmaWVyKSB7XG4gIHZhciBuID0gc3BlY2lmaWVyLmxlbmd0aCAvIDYgfCAwLCBjb2xvcnMgPSBuZXcgQXJyYXkobiksIGkgPSAwO1xuICB3aGlsZSAoaSA8IG4pIGNvbG9yc1tpXSA9IFwiI1wiICsgc3BlY2lmaWVyLnNsaWNlKGkgKiA2LCArK2kgKiA2KTtcbiAgcmV0dXJuIGNvbG9ycztcbn1cbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9ycy5qc1wiO1xuaW1wb3J0IHJhbXAgZnJvbSBcIi4uL3JhbXAuanNcIjtcblxuZXhwb3J0IHZhciBzY2hlbWUgPSBuZXcgQXJyYXkoMykuY29uY2F0KFxuICBcImQ4YjM2NWY1ZjVmNTVhYjRhY1wiLFxuICBcImE2NjExYWRmYzI3ZDgwY2RjMTAxODU3MVwiLFxuICBcImE2NjExYWRmYzI3ZGY1ZjVmNTgwY2RjMTAxODU3MVwiLFxuICBcIjhjNTEwYWQ4YjM2NWY2ZThjM2M3ZWFlNTVhYjRhYzAxNjY1ZVwiLFxuICBcIjhjNTEwYWQ4YjM2NWY2ZThjM2Y1ZjVmNWM3ZWFlNTVhYjRhYzAxNjY1ZVwiLFxuICBcIjhjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2M3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZVwiLFxuICBcIjhjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2Y1ZjVmNWM3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZVwiLFxuICBcIjU0MzAwNThjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2M3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZTAwM2MzMFwiLFxuICBcIjU0MzAwNThjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2Y1ZjVmNWM3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZTAwM2MzMFwiXG4pLm1hcChjb2xvcnMpO1xuXG5leHBvcnQgZGVmYXVsdCByYW1wKHNjaGVtZSk7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnMuanNcIjtcbmltcG9ydCByYW1wIGZyb20gXCIuLi9yYW1wLmpzXCI7XG5cbmV4cG9ydCB2YXIgc2NoZW1lID0gbmV3IEFycmF5KDMpLmNvbmNhdChcbiAgXCJhZjhkYzNmN2Y3Zjc3ZmJmN2JcIixcbiAgXCI3YjMyOTRjMmE1Y2ZhNmRiYTAwMDg4MzdcIixcbiAgXCI3YjMyOTRjMmE1Y2ZmN2Y3ZjdhNmRiYTAwMDg4MzdcIixcbiAgXCI3NjJhODNhZjhkYzNlN2Q0ZThkOWYwZDM3ZmJmN2IxYjc4MzdcIixcbiAgXCI3NjJhODNhZjhkYzNlN2Q0ZThmN2Y3ZjdkOWYwZDM3ZmJmN2IxYjc4MzdcIixcbiAgXCI3NjJhODM5OTcwYWJjMmE1Y2ZlN2Q0ZThkOWYwZDNhNmRiYTA1YWFlNjExYjc4MzdcIixcbiAgXCI3NjJhODM5OTcwYWJjMmE1Y2ZlN2Q0ZThmN2Y3ZjdkOWYwZDNhNmRiYTA1YWFlNjExYjc4MzdcIixcbiAgXCI0MDAwNGI3NjJhODM5OTcwYWJjMmE1Y2ZlN2Q0ZThkOWYwZDNhNmRiYTA1YWFlNjExYjc4MzcwMDQ0MWJcIixcbiAgXCI0MDAwNGI3NjJhODM5OTcwYWJjMmE1Y2ZlN2Q0ZThmN2Y3ZjdkOWYwZDNhNmRiYTA1YWFlNjExYjc4MzcwMDQ0MWJcIlxuKS5tYXAoY29sb3JzKTtcblxuZXhwb3J0IGRlZmF1bHQgcmFtcChzY2hlbWUpO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzLmpzXCI7XG5pbXBvcnQgcmFtcCBmcm9tIFwiLi4vcmFtcC5qc1wiO1xuXG5leHBvcnQgdmFyIHNjaGVtZSA9IG5ldyBBcnJheSgzKS5jb25jYXQoXG4gIFwiZTlhM2M5ZjdmN2Y3YTFkNzZhXCIsXG4gIFwiZDAxYzhiZjFiNmRhYjhlMTg2NGRhYzI2XCIsXG4gIFwiZDAxYzhiZjFiNmRhZjdmN2Y3YjhlMTg2NGRhYzI2XCIsXG4gIFwiYzUxYjdkZTlhM2M5ZmRlMGVmZTZmNWQwYTFkNzZhNGQ5MjIxXCIsXG4gIFwiYzUxYjdkZTlhM2M5ZmRlMGVmZjdmN2Y3ZTZmNWQwYTFkNzZhNGQ5MjIxXCIsXG4gIFwiYzUxYjdkZGU3N2FlZjFiNmRhZmRlMGVmZTZmNWQwYjhlMTg2N2ZiYzQxNGQ5MjIxXCIsXG4gIFwiYzUxYjdkZGU3N2FlZjFiNmRhZmRlMGVmZjdmN2Y3ZTZmNWQwYjhlMTg2N2ZiYzQxNGQ5MjIxXCIsXG4gIFwiOGUwMTUyYzUxYjdkZGU3N2FlZjFiNmRhZmRlMGVmZTZmNWQwYjhlMTg2N2ZiYzQxNGQ5MjIxMjc2NDE5XCIsXG4gIFwiOGUwMTUyYzUxYjdkZGU3N2FlZjFiNmRhZmRlMGVmZjdmN2Y3ZTZmNWQwYjhlMTg2N2ZiYzQxNGQ5MjIxMjc2NDE5XCJcbikubWFwKGNvbG9ycyk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbXAoc2NoZW1lKTtcbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9ycy5qc1wiO1xuaW1wb3J0IHJhbXAgZnJvbSBcIi4uL3JhbXAuanNcIjtcblxuZXhwb3J0IHZhciBzY2hlbWUgPSBuZXcgQXJyYXkoMykuY29uY2F0KFxuICBcIjk5OGVjM2Y3ZjdmN2YxYTM0MFwiLFxuICBcIjVlM2M5OWIyYWJkMmZkYjg2M2U2NjEwMVwiLFxuICBcIjVlM2M5OWIyYWJkMmY3ZjdmN2ZkYjg2M2U2NjEwMVwiLFxuICBcIjU0Mjc4ODk5OGVjM2Q4ZGFlYmZlZTBiNmYxYTM0MGIzNTgwNlwiLFxuICBcIjU0Mjc4ODk5OGVjM2Q4ZGFlYmY3ZjdmN2ZlZTBiNmYxYTM0MGIzNTgwNlwiLFxuICBcIjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNlwiLFxuICBcIjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmY3ZjdmN2ZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNlwiLFxuICBcIjJkMDA0YjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNjdmM2IwOFwiLFxuICBcIjJkMDA0YjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmY3ZjdmN2ZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNjdmM2IwOFwiXG4pLm1hcChjb2xvcnMpO1xuXG5leHBvcnQgZGVmYXVsdCByYW1wKHNjaGVtZSk7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnMuanNcIjtcbmltcG9ydCByYW1wIGZyb20gXCIuLi9yYW1wLmpzXCI7XG5cbmV4cG9ydCB2YXIgc2NoZW1lID0gbmV3IEFycmF5KDMpLmNvbmNhdChcbiAgXCJlZjhhNjJmN2Y3Zjc2N2E5Y2ZcIixcbiAgXCJjYTAwMjBmNGE1ODI5MmM1ZGUwNTcxYjBcIixcbiAgXCJjYTAwMjBmNGE1ODJmN2Y3Zjc5MmM1ZGUwNTcxYjBcIixcbiAgXCJiMjE4MmJlZjhhNjJmZGRiYzdkMWU1ZjA2N2E5Y2YyMTY2YWNcIixcbiAgXCJiMjE4MmJlZjhhNjJmZGRiYzdmN2Y3ZjdkMWU1ZjA2N2E5Y2YyMTY2YWNcIixcbiAgXCJiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdkMWU1ZjA5MmM1ZGU0MzkzYzMyMTY2YWNcIixcbiAgXCJiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdmN2Y3ZjdkMWU1ZjA5MmM1ZGU0MzkzYzMyMTY2YWNcIixcbiAgXCI2NzAwMWZiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdkMWU1ZjA5MmM1ZGU0MzkzYzMyMTY2YWMwNTMwNjFcIixcbiAgXCI2NzAwMWZiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdmN2Y3ZjdkMWU1ZjA5MmM1ZGU0MzkzYzMyMTY2YWMwNTMwNjFcIlxuKS5tYXAoY29sb3JzKTtcblxuZXhwb3J0IGRlZmF1bHQgcmFtcChzY2hlbWUpO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzLmpzXCI7XG5pbXBvcnQgcmFtcCBmcm9tIFwiLi4vcmFtcC5qc1wiO1xuXG5leHBvcnQgdmFyIHNjaGVtZSA9IG5ldyBBcnJheSgzKS5jb25jYXQoXG4gIFwiZWY4YTYyZmZmZmZmOTk5OTk5XCIsXG4gIFwiY2EwMDIwZjRhNTgyYmFiYWJhNDA0MDQwXCIsXG4gIFwiY2EwMDIwZjRhNTgyZmZmZmZmYmFiYWJhNDA0MDQwXCIsXG4gIFwiYjIxODJiZWY4YTYyZmRkYmM3ZTBlMGUwOTk5OTk5NGQ0ZDRkXCIsXG4gIFwiYjIxODJiZWY4YTYyZmRkYmM3ZmZmZmZmZTBlMGUwOTk5OTk5NGQ0ZDRkXCIsXG4gIFwiYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZTBlMGUwYmFiYWJhODc4Nzg3NGQ0ZDRkXCIsXG4gIFwiYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZmZmZmZmZTBlMGUwYmFiYWJhODc4Nzg3NGQ0ZDRkXCIsXG4gIFwiNjcwMDFmYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZTBlMGUwYmFiYWJhODc4Nzg3NGQ0ZDRkMWExYTFhXCIsXG4gIFwiNjcwMDFmYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZmZmZmZmZTBlMGUwYmFiYWJhODc4Nzg3NGQ0ZDRkMWExYTFhXCJcbikubWFwKGNvbG9ycyk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbXAoc2NoZW1lKTtcbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9ycy5qc1wiO1xuaW1wb3J0IHJhbXAgZnJvbSBcIi4uL3JhbXAuanNcIjtcblxuZXhwb3J0IHZhciBzY2hlbWUgPSBuZXcgQXJyYXkoMykuY29uY2F0KFxuICBcImZjOGQ1OWZmZmZiZjkxYmZkYlwiLFxuICBcImQ3MTkxY2ZkYWU2MWFiZDllOTJjN2JiNlwiLFxuICBcImQ3MTkxY2ZkYWU2MWZmZmZiZmFiZDllOTJjN2JiNlwiLFxuICBcImQ3MzAyN2ZjOGQ1OWZlZTA5MGUwZjNmODkxYmZkYjQ1NzViNFwiLFxuICBcImQ3MzAyN2ZjOGQ1OWZlZTA5MGZmZmZiZmUwZjNmODkxYmZkYjQ1NzViNFwiLFxuICBcImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNFwiLFxuICBcImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGZmZmZiZmUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNFwiLFxuICBcImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNDMxMzY5NVwiLFxuICBcImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGZmZmZiZmUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNDMxMzY5NVwiXG4pLm1hcChjb2xvcnMpO1xuXG5leHBvcnQgZGVmYXVsdCByYW1wKHNjaGVtZSk7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnMuanNcIjtcbmltcG9ydCByYW1wIGZyb20gXCIuLi9yYW1wLmpzXCI7XG5cbmV4cG9ydCB2YXIgc2NoZW1lID0gbmV3IEFycmF5KDMpLmNvbmNhdChcbiAgXCJmYzhkNTlmZmZmYmY5MWNmNjBcIixcbiAgXCJkNzE5MWNmZGFlNjFhNmQ5NmExYTk2NDFcIixcbiAgXCJkNzE5MWNmZGFlNjFmZmZmYmZhNmQ5NmExYTk2NDFcIixcbiAgXCJkNzMwMjdmYzhkNTlmZWUwOGJkOWVmOGI5MWNmNjAxYTk4NTBcIixcbiAgXCJkNzMwMjdmYzhkNTlmZWUwOGJmZmZmYmZkOWVmOGI5MWNmNjAxYTk4NTBcIixcbiAgXCJkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOGJkOWVmOGJhNmQ5NmE2NmJkNjMxYTk4NTBcIixcbiAgXCJkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOGJmZmZmYmZkOWVmOGJhNmQ5NmE2NmJkNjMxYTk4NTBcIixcbiAgXCJhNTAwMjZkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOGJkOWVmOGJhNmQ5NmE2NmJkNjMxYTk4NTAwMDY4MzdcIixcbiAgXCJhNTAwMjZkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOGJmZmZmYmZkOWVmOGJhNmQ5NmE2NmJkNjMxYTk4NTAwMDY4MzdcIlxuKS5tYXAoY29sb3JzKTtcblxuZXhwb3J0IGRlZmF1bHQgcmFtcChzY2hlbWUpO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzLmpzXCI7XG5pbXBvcnQgcmFtcCBmcm9tIFwiLi4vcmFtcC5qc1wiO1xuXG5leHBvcnQgdmFyIHNjaGVtZSA9IG5ldyBBcnJheSgzKS5jb25jYXQoXG4gIFwiZmM4ZDU5ZmZmZmJmOTlkNTk0XCIsXG4gIFwiZDcxOTFjZmRhZTYxYWJkZGE0MmI4M2JhXCIsXG4gIFwiZDcxOTFjZmRhZTYxZmZmZmJmYWJkZGE0MmI4M2JhXCIsXG4gIFwiZDUzZTRmZmM4ZDU5ZmVlMDhiZTZmNTk4OTlkNTk0MzI4OGJkXCIsXG4gIFwiZDUzZTRmZmM4ZDU5ZmVlMDhiZmZmZmJmZTZmNTk4OTlkNTk0MzI4OGJkXCIsXG4gIFwiZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkXCIsXG4gIFwiZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZmZmZmJmZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkXCIsXG4gIFwiOWUwMTQyZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkNWU0ZmEyXCIsXG4gIFwiOWUwMTQyZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZmZmZmJmZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkNWU0ZmEyXCJcbikubWFwKGNvbG9ycyk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbXAoc2NoZW1lKTtcbiIsImV4cG9ydCB7ZGVmYXVsdCBhcyBzY2hlbWVDYXRlZ29yeTEwfSBmcm9tIFwiLi9jYXRlZ29yaWNhbC9jYXRlZ29yeTEwLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc2NoZW1lQWNjZW50fSBmcm9tIFwiLi9jYXRlZ29yaWNhbC9BY2NlbnQuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzY2hlbWVEYXJrMn0gZnJvbSBcIi4vY2F0ZWdvcmljYWwvRGFyazIuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzY2hlbWVQYWlyZWR9IGZyb20gXCIuL2NhdGVnb3JpY2FsL1BhaXJlZC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHNjaGVtZVBhc3RlbDF9IGZyb20gXCIuL2NhdGVnb3JpY2FsL1Bhc3RlbDEuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzY2hlbWVQYXN0ZWwyfSBmcm9tIFwiLi9jYXRlZ29yaWNhbC9QYXN0ZWwyLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc2NoZW1lU2V0MX0gZnJvbSBcIi4vY2F0ZWdvcmljYWwvU2V0MS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHNjaGVtZVNldDJ9IGZyb20gXCIuL2NhdGVnb3JpY2FsL1NldDIuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzY2hlbWVTZXQzfSBmcm9tIFwiLi9jYXRlZ29yaWNhbC9TZXQzLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc2NoZW1lVGFibGVhdTEwfSBmcm9tIFwiLi9jYXRlZ29yaWNhbC9UYWJsZWF1MTAuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZUJyQkcsIHNjaGVtZSBhcyBzY2hlbWVCckJHfSBmcm9tIFwiLi9kaXZlcmdpbmcvQnJCRy5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlUFJHbiwgc2NoZW1lIGFzIHNjaGVtZVBSR259IGZyb20gXCIuL2RpdmVyZ2luZy9QUkduLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVQaVlHLCBzY2hlbWUgYXMgc2NoZW1lUGlZR30gZnJvbSBcIi4vZGl2ZXJnaW5nL1BpWUcuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZVB1T3IsIHNjaGVtZSBhcyBzY2hlbWVQdU9yfSBmcm9tIFwiLi9kaXZlcmdpbmcvUHVPci5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlUmRCdSwgc2NoZW1lIGFzIHNjaGVtZVJkQnV9IGZyb20gXCIuL2RpdmVyZ2luZy9SZEJ1LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVSZEd5LCBzY2hlbWUgYXMgc2NoZW1lUmRHeX0gZnJvbSBcIi4vZGl2ZXJnaW5nL1JkR3kuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZVJkWWxCdSwgc2NoZW1lIGFzIHNjaGVtZVJkWWxCdX0gZnJvbSBcIi4vZGl2ZXJnaW5nL1JkWWxCdS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlUmRZbEduLCBzY2hlbWUgYXMgc2NoZW1lUmRZbEdufSBmcm9tIFwiLi9kaXZlcmdpbmcvUmRZbEduLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVTcGVjdHJhbCwgc2NoZW1lIGFzIHNjaGVtZVNwZWN0cmFsfSBmcm9tIFwiLi9kaXZlcmdpbmcvU3BlY3RyYWwuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZUJ1R24sIHNjaGVtZSBhcyBzY2hlbWVCdUdufSBmcm9tIFwiLi9zZXF1ZW50aWFsLW11bHRpL0J1R24uanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZUJ1UHUsIHNjaGVtZSBhcyBzY2hlbWVCdVB1fSBmcm9tIFwiLi9zZXF1ZW50aWFsLW11bHRpL0J1UHUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZUduQnUsIHNjaGVtZSBhcyBzY2hlbWVHbkJ1fSBmcm9tIFwiLi9zZXF1ZW50aWFsLW11bHRpL0duQnUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZU9yUmQsIHNjaGVtZSBhcyBzY2hlbWVPclJkfSBmcm9tIFwiLi9zZXF1ZW50aWFsLW11bHRpL09yUmQuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZVB1QnVHbiwgc2NoZW1lIGFzIHNjaGVtZVB1QnVHbn0gZnJvbSBcIi4vc2VxdWVudGlhbC1tdWx0aS9QdUJ1R24uanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZVB1QnUsIHNjaGVtZSBhcyBzY2hlbWVQdUJ1fSBmcm9tIFwiLi9zZXF1ZW50aWFsLW11bHRpL1B1QnUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZVB1UmQsIHNjaGVtZSBhcyBzY2hlbWVQdVJkfSBmcm9tIFwiLi9zZXF1ZW50aWFsLW11bHRpL1B1UmQuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZVJkUHUsIHNjaGVtZSBhcyBzY2hlbWVSZFB1fSBmcm9tIFwiLi9zZXF1ZW50aWFsLW11bHRpL1JkUHUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZVlsR25CdSwgc2NoZW1lIGFzIHNjaGVtZVlsR25CdX0gZnJvbSBcIi4vc2VxdWVudGlhbC1tdWx0aS9ZbEduQnUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZVlsR24sIHNjaGVtZSBhcyBzY2hlbWVZbEdufSBmcm9tIFwiLi9zZXF1ZW50aWFsLW11bHRpL1lsR24uanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZVlsT3JCciwgc2NoZW1lIGFzIHNjaGVtZVlsT3JCcn0gZnJvbSBcIi4vc2VxdWVudGlhbC1tdWx0aS9ZbE9yQnIuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZVlsT3JSZCwgc2NoZW1lIGFzIHNjaGVtZVlsT3JSZH0gZnJvbSBcIi4vc2VxdWVudGlhbC1tdWx0aS9ZbE9yUmQuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZUJsdWVzLCBzY2hlbWUgYXMgc2NoZW1lQmx1ZXN9IGZyb20gXCIuL3NlcXVlbnRpYWwtc2luZ2xlL0JsdWVzLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVHcmVlbnMsIHNjaGVtZSBhcyBzY2hlbWVHcmVlbnN9IGZyb20gXCIuL3NlcXVlbnRpYWwtc2luZ2xlL0dyZWVucy5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlR3JleXMsIHNjaGVtZSBhcyBzY2hlbWVHcmV5c30gZnJvbSBcIi4vc2VxdWVudGlhbC1zaW5nbGUvR3JleXMuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZVB1cnBsZXMsIHNjaGVtZSBhcyBzY2hlbWVQdXJwbGVzfSBmcm9tIFwiLi9zZXF1ZW50aWFsLXNpbmdsZS9QdXJwbGVzLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVSZWRzLCBzY2hlbWUgYXMgc2NoZW1lUmVkc30gZnJvbSBcIi4vc2VxdWVudGlhbC1zaW5nbGUvUmVkcy5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlT3Jhbmdlcywgc2NoZW1lIGFzIHNjaGVtZU9yYW5nZXN9IGZyb20gXCIuL3NlcXVlbnRpYWwtc2luZ2xlL09yYW5nZXMuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZUNpdmlkaXN9IGZyb20gXCIuL3NlcXVlbnRpYWwtbXVsdGkvY2l2aWRpcy5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlQ3ViZWhlbGl4RGVmYXVsdH0gZnJvbSBcIi4vc2VxdWVudGlhbC1tdWx0aS9jdWJlaGVsaXguanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZVJhaW5ib3csIHdhcm0gYXMgaW50ZXJwb2xhdGVXYXJtLCBjb29sIGFzIGludGVycG9sYXRlQ29vbH0gZnJvbSBcIi4vc2VxdWVudGlhbC1tdWx0aS9yYWluYm93LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVTaW5lYm93fSBmcm9tIFwiLi9zZXF1ZW50aWFsLW11bHRpL3NpbmVib3cuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZVR1cmJvfSBmcm9tIFwiLi9zZXF1ZW50aWFsLW11bHRpL3R1cmJvLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVWaXJpZGlzLCBtYWdtYSBhcyBpbnRlcnBvbGF0ZU1hZ21hLCBpbmZlcm5vIGFzIGludGVycG9sYXRlSW5mZXJubywgcGxhc21hIGFzIGludGVycG9sYXRlUGxhc21hfSBmcm9tIFwiLi9zZXF1ZW50aWFsLW11bHRpL3ZpcmlkaXMuanNcIjtcbiIsImltcG9ydCB7aW50ZXJwb2xhdGVSZ2JCYXNpc30gZnJvbSBcImQzLWludGVycG9sYXRlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNjaGVtZSkge1xuICByZXR1cm4gaW50ZXJwb2xhdGVSZ2JCYXNpcyhzY2hlbWVbc2NoZW1lLmxlbmd0aCAtIDFdKTtcbn1cbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9ycy5qc1wiO1xuaW1wb3J0IHJhbXAgZnJvbSBcIi4uL3JhbXAuanNcIjtcblxuZXhwb3J0IHZhciBzY2hlbWUgPSBuZXcgQXJyYXkoMykuY29uY2F0KFxuICBcImU1ZjVmOTk5ZDhjOTJjYTI1ZlwiLFxuICBcImVkZjhmYmIyZTJlMjY2YzJhNDIzOGI0NVwiLFxuICBcImVkZjhmYmIyZTJlMjY2YzJhNDJjYTI1ZjAwNmQyY1wiLFxuICBcImVkZjhmYmNjZWNlNjk5ZDhjOTY2YzJhNDJjYTI1ZjAwNmQyY1wiLFxuICBcImVkZjhmYmNjZWNlNjk5ZDhjOTY2YzJhNDQxYWU3NjIzOGI0NTAwNTgyNFwiLFxuICBcImY3ZmNmZGU1ZjVmOWNjZWNlNjk5ZDhjOTY2YzJhNDQxYWU3NjIzOGI0NTAwNTgyNFwiLFxuICBcImY3ZmNmZGU1ZjVmOWNjZWNlNjk5ZDhjOTY2YzJhNDQxYWU3NjIzOGI0NTAwNmQyYzAwNDQxYlwiXG4pLm1hcChjb2xvcnMpO1xuXG5leHBvcnQgZGVmYXVsdCByYW1wKHNjaGVtZSk7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnMuanNcIjtcbmltcG9ydCByYW1wIGZyb20gXCIuLi9yYW1wLmpzXCI7XG5cbmV4cG9ydCB2YXIgc2NoZW1lID0gbmV3IEFycmF5KDMpLmNvbmNhdChcbiAgXCJlMGVjZjQ5ZWJjZGE4ODU2YTdcIixcbiAgXCJlZGY4ZmJiM2NkZTM4Yzk2YzY4ODQxOWRcIixcbiAgXCJlZGY4ZmJiM2NkZTM4Yzk2YzY4ODU2YTc4MTBmN2NcIixcbiAgXCJlZGY4ZmJiZmQzZTY5ZWJjZGE4Yzk2YzY4ODU2YTc4MTBmN2NcIixcbiAgXCJlZGY4ZmJiZmQzZTY5ZWJjZGE4Yzk2YzY4YzZiYjE4ODQxOWQ2ZTAxNmJcIixcbiAgXCJmN2ZjZmRlMGVjZjRiZmQzZTY5ZWJjZGE4Yzk2YzY4YzZiYjE4ODQxOWQ2ZTAxNmJcIixcbiAgXCJmN2ZjZmRlMGVjZjRiZmQzZTY5ZWJjZGE4Yzk2YzY4YzZiYjE4ODQxOWQ4MTBmN2M0ZDAwNGJcIlxuKS5tYXAoY29sb3JzKTtcblxuZXhwb3J0IGRlZmF1bHQgcmFtcChzY2hlbWUpO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzLmpzXCI7XG5pbXBvcnQgcmFtcCBmcm9tIFwiLi4vcmFtcC5qc1wiO1xuXG5leHBvcnQgdmFyIHNjaGVtZSA9IG5ldyBBcnJheSgzKS5jb25jYXQoXG4gIFwiZTBmM2RiYThkZGI1NDNhMmNhXCIsXG4gIFwiZjBmOWU4YmFlNGJjN2JjY2M0MmI4Y2JlXCIsXG4gIFwiZjBmOWU4YmFlNGJjN2JjY2M0NDNhMmNhMDg2OGFjXCIsXG4gIFwiZjBmOWU4Y2NlYmM1YThkZGI1N2JjY2M0NDNhMmNhMDg2OGFjXCIsXG4gIFwiZjBmOWU4Y2NlYmM1YThkZGI1N2JjY2M0NGViM2QzMmI4Y2JlMDg1ODllXCIsXG4gIFwiZjdmY2YwZTBmM2RiY2NlYmM1YThkZGI1N2JjY2M0NGViM2QzMmI4Y2JlMDg1ODllXCIsXG4gIFwiZjdmY2YwZTBmM2RiY2NlYmM1YThkZGI1N2JjY2M0NGViM2QzMmI4Y2JlMDg2OGFjMDg0MDgxXCJcbikubWFwKGNvbG9ycyk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbXAoc2NoZW1lKTtcbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9ycy5qc1wiO1xuaW1wb3J0IHJhbXAgZnJvbSBcIi4uL3JhbXAuanNcIjtcblxuZXhwb3J0IHZhciBzY2hlbWUgPSBuZXcgQXJyYXkoMykuY29uY2F0KFxuICBcImZlZThjOGZkYmI4NGUzNGEzM1wiLFxuICBcImZlZjBkOWZkY2M4YWZjOGQ1OWQ3MzAxZlwiLFxuICBcImZlZjBkOWZkY2M4YWZjOGQ1OWUzNGEzM2IzMDAwMFwiLFxuICBcImZlZjBkOWZkZDQ5ZWZkYmI4NGZjOGQ1OWUzNGEzM2IzMDAwMFwiLFxuICBcImZlZjBkOWZkZDQ5ZWZkYmI4NGZjOGQ1OWVmNjU0OGQ3MzAxZjk5MDAwMFwiLFxuICBcImZmZjdlY2ZlZThjOGZkZDQ5ZWZkYmI4NGZjOGQ1OWVmNjU0OGQ3MzAxZjk5MDAwMFwiLFxuICBcImZmZjdlY2ZlZThjOGZkZDQ5ZWZkYmI4NGZjOGQ1OWVmNjU0OGQ3MzAxZmIzMDAwMDdmMDAwMFwiXG4pLm1hcChjb2xvcnMpO1xuXG5leHBvcnQgZGVmYXVsdCByYW1wKHNjaGVtZSk7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnMuanNcIjtcbmltcG9ydCByYW1wIGZyb20gXCIuLi9yYW1wLmpzXCI7XG5cbmV4cG9ydCB2YXIgc2NoZW1lID0gbmV3IEFycmF5KDMpLmNvbmNhdChcbiAgXCJlY2U3ZjJhNmJkZGIyYjhjYmVcIixcbiAgXCJmMWVlZjZiZGM5ZTE3NGE5Y2YwNTcwYjBcIixcbiAgXCJmMWVlZjZiZGM5ZTE3NGE5Y2YyYjhjYmUwNDVhOGRcIixcbiAgXCJmMWVlZjZkMGQxZTZhNmJkZGI3NGE5Y2YyYjhjYmUwNDVhOGRcIixcbiAgXCJmMWVlZjZkMGQxZTZhNmJkZGI3NGE5Y2YzNjkwYzAwNTcwYjAwMzRlN2JcIixcbiAgXCJmZmY3ZmJlY2U3ZjJkMGQxZTZhNmJkZGI3NGE5Y2YzNjkwYzAwNTcwYjAwMzRlN2JcIixcbiAgXCJmZmY3ZmJlY2U3ZjJkMGQxZTZhNmJkZGI3NGE5Y2YzNjkwYzAwNTcwYjAwNDVhOGQwMjM4NThcIlxuKS5tYXAoY29sb3JzKTtcblxuZXhwb3J0IGRlZmF1bHQgcmFtcChzY2hlbWUpO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzLmpzXCI7XG5pbXBvcnQgcmFtcCBmcm9tIFwiLi4vcmFtcC5qc1wiO1xuXG5leHBvcnQgdmFyIHNjaGVtZSA9IG5ldyBBcnJheSgzKS5jb25jYXQoXG4gIFwiZWNlMmYwYTZiZGRiMWM5MDk5XCIsXG4gIFwiZjZlZmY3YmRjOWUxNjdhOWNmMDI4MThhXCIsXG4gIFwiZjZlZmY3YmRjOWUxNjdhOWNmMWM5MDk5MDE2YzU5XCIsXG4gIFwiZjZlZmY3ZDBkMWU2YTZiZGRiNjdhOWNmMWM5MDk5MDE2YzU5XCIsXG4gIFwiZjZlZmY3ZDBkMWU2YTZiZGRiNjdhOWNmMzY5MGMwMDI4MThhMDE2NDUwXCIsXG4gIFwiZmZmN2ZiZWNlMmYwZDBkMWU2YTZiZGRiNjdhOWNmMzY5MGMwMDI4MThhMDE2NDUwXCIsXG4gIFwiZmZmN2ZiZWNlMmYwZDBkMWU2YTZiZGRiNjdhOWNmMzY5MGMwMDI4MThhMDE2YzU5MDE0NjM2XCJcbikubWFwKGNvbG9ycyk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbXAoc2NoZW1lKTtcbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9ycy5qc1wiO1xuaW1wb3J0IHJhbXAgZnJvbSBcIi4uL3JhbXAuanNcIjtcblxuZXhwb3J0IHZhciBzY2hlbWUgPSBuZXcgQXJyYXkoMykuY29uY2F0KFxuICBcImU3ZTFlZmM5OTRjN2RkMWM3N1wiLFxuICBcImYxZWVmNmQ3YjVkOGRmNjViMGNlMTI1NlwiLFxuICBcImYxZWVmNmQ3YjVkOGRmNjViMGRkMWM3Nzk4MDA0M1wiLFxuICBcImYxZWVmNmQ0YjlkYWM5OTRjN2RmNjViMGRkMWM3Nzk4MDA0M1wiLFxuICBcImYxZWVmNmQ0YjlkYWM5OTRjN2RmNjViMGU3Mjk4YWNlMTI1NjkxMDAzZlwiLFxuICBcImY3ZjRmOWU3ZTFlZmQ0YjlkYWM5OTRjN2RmNjViMGU3Mjk4YWNlMTI1NjkxMDAzZlwiLFxuICBcImY3ZjRmOWU3ZTFlZmQ0YjlkYWM5OTRjN2RmNjViMGU3Mjk4YWNlMTI1Njk4MDA0MzY3MDAxZlwiXG4pLm1hcChjb2xvcnMpO1xuXG5leHBvcnQgZGVmYXVsdCByYW1wKHNjaGVtZSk7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnMuanNcIjtcbmltcG9ydCByYW1wIGZyb20gXCIuLi9yYW1wLmpzXCI7XG5cbmV4cG9ydCB2YXIgc2NoZW1lID0gbmV3IEFycmF5KDMpLmNvbmNhdChcbiAgXCJmZGUwZGRmYTlmYjVjNTFiOGFcIixcbiAgXCJmZWViZTJmYmI0YjlmNzY4YTFhZTAxN2VcIixcbiAgXCJmZWViZTJmYmI0YjlmNzY4YTFjNTFiOGE3YTAxNzdcIixcbiAgXCJmZWViZTJmY2M1YzBmYTlmYjVmNzY4YTFjNTFiOGE3YTAxNzdcIixcbiAgXCJmZWViZTJmY2M1YzBmYTlmYjVmNzY4YTFkZDM0OTdhZTAxN2U3YTAxNzdcIixcbiAgXCJmZmY3ZjNmZGUwZGRmY2M1YzBmYTlmYjVmNzY4YTFkZDM0OTdhZTAxN2U3YTAxNzdcIixcbiAgXCJmZmY3ZjNmZGUwZGRmY2M1YzBmYTlmYjVmNzY4YTFkZDM0OTdhZTAxN2U3YTAxNzc0OTAwNmFcIlxuKS5tYXAoY29sb3JzKTtcblxuZXhwb3J0IGRlZmF1bHQgcmFtcChzY2hlbWUpO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzLmpzXCI7XG5pbXBvcnQgcmFtcCBmcm9tIFwiLi4vcmFtcC5qc1wiO1xuXG5leHBvcnQgdmFyIHNjaGVtZSA9IG5ldyBBcnJheSgzKS5jb25jYXQoXG4gIFwiZjdmY2I5YWRkZDhlMzFhMzU0XCIsXG4gIFwiZmZmZmNjYzJlNjk5NzhjNjc5MjM4NDQzXCIsXG4gIFwiZmZmZmNjYzJlNjk5NzhjNjc5MzFhMzU0MDA2ODM3XCIsXG4gIFwiZmZmZmNjZDlmMGEzYWRkZDhlNzhjNjc5MzFhMzU0MDA2ODM3XCIsXG4gIFwiZmZmZmNjZDlmMGEzYWRkZDhlNzhjNjc5NDFhYjVkMjM4NDQzMDA1YTMyXCIsXG4gIFwiZmZmZmU1ZjdmY2I5ZDlmMGEzYWRkZDhlNzhjNjc5NDFhYjVkMjM4NDQzMDA1YTMyXCIsXG4gIFwiZmZmZmU1ZjdmY2I5ZDlmMGEzYWRkZDhlNzhjNjc5NDFhYjVkMjM4NDQzMDA2ODM3MDA0NTI5XCJcbikubWFwKGNvbG9ycyk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbXAoc2NoZW1lKTtcbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9ycy5qc1wiO1xuaW1wb3J0IHJhbXAgZnJvbSBcIi4uL3JhbXAuanNcIjtcblxuZXhwb3J0IHZhciBzY2hlbWUgPSBuZXcgQXJyYXkoMykuY29uY2F0KFxuICBcImVkZjhiMTdmY2RiYjJjN2ZiOFwiLFxuICBcImZmZmZjY2ExZGFiNDQxYjZjNDIyNWVhOFwiLFxuICBcImZmZmZjY2ExZGFiNDQxYjZjNDJjN2ZiODI1MzQ5NFwiLFxuICBcImZmZmZjY2M3ZTliNDdmY2RiYjQxYjZjNDJjN2ZiODI1MzQ5NFwiLFxuICBcImZmZmZjY2M3ZTliNDdmY2RiYjQxYjZjNDFkOTFjMDIyNWVhODBjMmM4NFwiLFxuICBcImZmZmZkOWVkZjhiMWM3ZTliNDdmY2RiYjQxYjZjNDFkOTFjMDIyNWVhODBjMmM4NFwiLFxuICBcImZmZmZkOWVkZjhiMWM3ZTliNDdmY2RiYjQxYjZjNDFkOTFjMDIyNWVhODI1MzQ5NDA4MWQ1OFwiXG4pLm1hcChjb2xvcnMpO1xuXG5leHBvcnQgZGVmYXVsdCByYW1wKHNjaGVtZSk7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnMuanNcIjtcbmltcG9ydCByYW1wIGZyb20gXCIuLi9yYW1wLmpzXCI7XG5cbmV4cG9ydCB2YXIgc2NoZW1lID0gbmV3IEFycmF5KDMpLmNvbmNhdChcbiAgXCJmZmY3YmNmZWM0NGZkOTVmMGVcIixcbiAgXCJmZmZmZDRmZWQ5OGVmZTk5MjljYzRjMDJcIixcbiAgXCJmZmZmZDRmZWQ5OGVmZTk5MjlkOTVmMGU5OTM0MDRcIixcbiAgXCJmZmZmZDRmZWUzOTFmZWM0NGZmZTk5MjlkOTVmMGU5OTM0MDRcIixcbiAgXCJmZmZmZDRmZWUzOTFmZWM0NGZmZTk5MjllYzcwMTRjYzRjMDI4YzJkMDRcIixcbiAgXCJmZmZmZTVmZmY3YmNmZWUzOTFmZWM0NGZmZTk5MjllYzcwMTRjYzRjMDI4YzJkMDRcIixcbiAgXCJmZmZmZTVmZmY3YmNmZWUzOTFmZWM0NGZmZTk5MjllYzcwMTRjYzRjMDI5OTM0MDQ2NjI1MDZcIlxuKS5tYXAoY29sb3JzKTtcblxuZXhwb3J0IGRlZmF1bHQgcmFtcChzY2hlbWUpO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzLmpzXCI7XG5pbXBvcnQgcmFtcCBmcm9tIFwiLi4vcmFtcC5qc1wiO1xuXG5leHBvcnQgdmFyIHNjaGVtZSA9IG5ldyBBcnJheSgzKS5jb25jYXQoXG4gIFwiZmZlZGEwZmViMjRjZjAzYjIwXCIsXG4gIFwiZmZmZmIyZmVjYzVjZmQ4ZDNjZTMxYTFjXCIsXG4gIFwiZmZmZmIyZmVjYzVjZmQ4ZDNjZjAzYjIwYmQwMDI2XCIsXG4gIFwiZmZmZmIyZmVkOTc2ZmViMjRjZmQ4ZDNjZjAzYjIwYmQwMDI2XCIsXG4gIFwiZmZmZmIyZmVkOTc2ZmViMjRjZmQ4ZDNjZmM0ZTJhZTMxYTFjYjEwMDI2XCIsXG4gIFwiZmZmZmNjZmZlZGEwZmVkOTc2ZmViMjRjZmQ4ZDNjZmM0ZTJhZTMxYTFjYjEwMDI2XCIsXG4gIFwiZmZmZmNjZmZlZGEwZmVkOTc2ZmViMjRjZmQ4ZDNjZmM0ZTJhZTMxYTFjYmQwMDI2ODAwMDI2XCJcbikubWFwKGNvbG9ycyk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbXAoc2NoZW1lKTtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHQpIHtcbiAgdCA9IE1hdGgubWF4KDAsIE1hdGgubWluKDEsIHQpKTtcbiAgcmV0dXJuIFwicmdiKFwiXG4gICAgICArIE1hdGgubWF4KDAsIE1hdGgubWluKDI1NSwgTWF0aC5yb3VuZCgtNC41NCAtIHQgKiAoMzUuMzQgLSB0ICogKDIzODEuNzMgLSB0ICogKDY0MDIuNyAtIHQgKiAoNzAyNC43MiAtIHQgKiAyNzEwLjU3KSkpKSkpKSArIFwiLCBcIlxuICAgICAgKyBNYXRoLm1heCgwLCBNYXRoLm1pbigyNTUsIE1hdGgucm91bmQoMzIuNDkgKyB0ICogKDE3MC43MyArIHQgKiAoNTIuODIgLSB0ICogKDEzMS40NiAtIHQgKiAoMTc2LjU4IC0gdCAqIDY3LjM3KSkpKSkpKSArIFwiLCBcIlxuICAgICAgKyBNYXRoLm1heCgwLCBNYXRoLm1pbigyNTUsIE1hdGgucm91bmQoODEuMjQgKyB0ICogKDQ0Mi4zNiAtIHQgKiAoMjQ4Mi40MyAtIHQgKiAoNjE2Ny4yNCAtIHQgKiAoNjYxNC45NCAtIHQgKiAyNDc1LjY3KSkpKSkpKVxuICAgICAgKyBcIilcIjtcbn1cbiIsImltcG9ydCB7Y3ViZWhlbGl4fSBmcm9tIFwiZDMtY29sb3JcIjtcbmltcG9ydCB7aW50ZXJwb2xhdGVDdWJlaGVsaXhMb25nfSBmcm9tIFwiZDMtaW50ZXJwb2xhdGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgaW50ZXJwb2xhdGVDdWJlaGVsaXhMb25nKGN1YmVoZWxpeCgzMDAsIDAuNSwgMC4wKSwgY3ViZWhlbGl4KC0yNDAsIDAuNSwgMS4wKSk7XG4iLCJpbXBvcnQge2N1YmVoZWxpeH0gZnJvbSBcImQzLWNvbG9yXCI7XG5pbXBvcnQge2ludGVycG9sYXRlQ3ViZWhlbGl4TG9uZ30gZnJvbSBcImQzLWludGVycG9sYXRlXCI7XG5cbmV4cG9ydCB2YXIgd2FybSA9IGludGVycG9sYXRlQ3ViZWhlbGl4TG9uZyhjdWJlaGVsaXgoLTEwMCwgMC43NSwgMC4zNSksIGN1YmVoZWxpeCg4MCwgMS41MCwgMC44KSk7XG5cbmV4cG9ydCB2YXIgY29vbCA9IGludGVycG9sYXRlQ3ViZWhlbGl4TG9uZyhjdWJlaGVsaXgoMjYwLCAwLjc1LCAwLjM1KSwgY3ViZWhlbGl4KDgwLCAxLjUwLCAwLjgpKTtcblxudmFyIGMgPSBjdWJlaGVsaXgoKTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odCkge1xuICBpZiAodCA8IDAgfHwgdCA+IDEpIHQgLT0gTWF0aC5mbG9vcih0KTtcbiAgdmFyIHRzID0gTWF0aC5hYnModCAtIDAuNSk7XG4gIGMuaCA9IDM2MCAqIHQgLSAxMDA7XG4gIGMucyA9IDEuNSAtIDEuNSAqIHRzO1xuICBjLmwgPSAwLjggLSAwLjkgKiB0cztcbiAgcmV0dXJuIGMgKyBcIlwiO1xufVxuIiwiaW1wb3J0IHtyZ2J9IGZyb20gXCJkMy1jb2xvclwiO1xuXG52YXIgYyA9IHJnYigpLFxuICAgIHBpXzFfMyA9IE1hdGguUEkgLyAzLFxuICAgIHBpXzJfMyA9IE1hdGguUEkgKiAyIC8gMztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odCkge1xuICB2YXIgeDtcbiAgdCA9ICgwLjUgLSB0KSAqIE1hdGguUEk7XG4gIGMuciA9IDI1NSAqICh4ID0gTWF0aC5zaW4odCkpICogeDtcbiAgYy5nID0gMjU1ICogKHggPSBNYXRoLnNpbih0ICsgcGlfMV8zKSkgKiB4O1xuICBjLmIgPSAyNTUgKiAoeCA9IE1hdGguc2luKHQgKyBwaV8yXzMpKSAqIHg7XG4gIHJldHVybiBjICsgXCJcIjtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHQpIHtcbiAgdCA9IE1hdGgubWF4KDAsIE1hdGgubWluKDEsIHQpKTtcbiAgcmV0dXJuIFwicmdiKFwiXG4gICAgICArIE1hdGgubWF4KDAsIE1hdGgubWluKDI1NSwgTWF0aC5yb3VuZCgzNC42MSArIHQgKiAoMTE3Mi4zMyAtIHQgKiAoMTA3OTMuNTYgLSB0ICogKDMzMzAwLjEyIC0gdCAqICgzODM5NC40OSAtIHQgKiAxNDgyNS4wNSkpKSkpKSkgKyBcIiwgXCJcbiAgICAgICsgTWF0aC5tYXgoMCwgTWF0aC5taW4oMjU1LCBNYXRoLnJvdW5kKDIzLjMxICsgdCAqICg1NTcuMzMgKyB0ICogKDEyMjUuMzMgLSB0ICogKDM1NzQuOTYgLSB0ICogKDEwNzMuNzcgKyB0ICogNzA3LjU2KSkpKSkpKSArIFwiLCBcIlxuICAgICAgKyBNYXRoLm1heCgwLCBNYXRoLm1pbigyNTUsIE1hdGgucm91bmQoMjcuMiArIHQgKiAoMzIxMS4xIC0gdCAqICgxNTMyNy45NyAtIHQgKiAoMjc4MTQgLSB0ICogKDIyNTY5LjE4IC0gdCAqIDY4MzguNjYpKSkpKSkpXG4gICAgICArIFwiKVwiO1xufVxuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzLmpzXCI7XG5cbmZ1bmN0aW9uIHJhbXAocmFuZ2UpIHtcbiAgdmFyIG4gPSByYW5nZS5sZW5ndGg7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIHJhbmdlW01hdGgubWF4KDAsIE1hdGgubWluKG4gLSAxLCBNYXRoLmZsb29yKHQgKiBuKSkpXTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgcmFtcChjb2xvcnMoXCI0NDAxNTQ0NDAyNTY0NTA0NTc0NTA1NTk0NjA3NWE0NjA4NWM0NjBhNWQ0NjBiNWU0NzBkNjA0NzBlNjE0NzEwNjM0NzExNjQ0NzEzNjU0ODE0Njc0ODE2Njg0ODE3Njk0ODE4NmE0ODFhNmM0ODFiNmQ0ODFjNmU0ODFkNmY0ODFmNzA0ODIwNzE0ODIxNzM0ODIzNzQ0ODI0NzU0ODI1NzY0ODI2Nzc0ODI4Nzg0ODI5Nzk0NzJhN2E0NzJjN2E0NzJkN2I0NzJlN2M0NzJmN2Q0NjMwN2U0NjMyN2U0NjMzN2Y0NjM0ODA0NTM1ODE0NTM3ODE0NTM4ODI0NDM5ODM0NDNhODM0NDNiODQ0MzNkODQ0MzNlODU0MjNmODU0MjQwODY0MjQxODY0MTQyODc0MTQ0ODc0MDQ1ODg0MDQ2ODgzZjQ3ODgzZjQ4ODkzZTQ5ODkzZTRhODkzZTRjOGEzZDRkOGEzZDRlOGEzYzRmOGEzYzUwOGIzYjUxOGIzYjUyOGIzYTUzOGIzYTU0OGMzOTU1OGMzOTU2OGMzODU4OGMzODU5OGMzNzVhOGMzNzViOGQzNjVjOGQzNjVkOGQzNTVlOGQzNTVmOGQzNDYwOGQzNDYxOGQzMzYyOGQzMzYzOGQzMjY0OGUzMjY1OGUzMTY2OGUzMTY3OGUzMTY4OGUzMDY5OGUzMDZhOGUyZjZiOGUyZjZjOGUyZTZkOGUyZTZlOGUyZTZmOGUyZDcwOGUyZDcxOGUyYzcxOGUyYzcyOGUyYzczOGUyYjc0OGUyYjc1OGUyYTc2OGUyYTc3OGUyYTc4OGUyOTc5OGUyOTdhOGUyOTdiOGUyODdjOGUyODdkOGUyNzdlOGUyNzdmOGUyNzgwOGUyNjgxOGUyNjgyOGUyNjgyOGUyNTgzOGUyNTg0OGUyNTg1OGUyNDg2OGUyNDg3OGUyMzg4OGUyMzg5OGUyMzhhOGQyMjhiOGQyMjhjOGQyMjhkOGQyMThlOGQyMThmOGQyMTkwOGQyMTkxOGMyMDkyOGMyMDkyOGMyMDkzOGMxZjk0OGMxZjk1OGIxZjk2OGIxZjk3OGIxZjk4OGIxZjk5OGExZjlhOGExZTliOGExZTljODkxZTlkODkxZjllODkxZjlmODgxZmEwODgxZmExODgxZmExODcxZmEyODcyMGEzODYyMGE0ODYyMWE1ODUyMWE2ODUyMmE3ODUyMmE4ODQyM2E5ODMyNGFhODMyNWFiODIyNWFjODIyNmFkODEyN2FkODEyOGFlODAyOWFmN2YyYWIwN2YyY2IxN2UyZGIyN2QyZWIzN2MyZmI0N2MzMWI1N2IzMmI2N2EzNGI2NzkzNWI3NzkzN2I4NzgzOGI5NzczYWJhNzYzYmJiNzUzZGJjNzQzZmJjNzM0MGJkNzI0MmJlNzE0NGJmNzA0NmMwNmY0OGMxNmU0YWMxNmQ0Y2MyNmM0ZWMzNmI1MGM0NmE1MmM1Njk1NGM1Njg1NmM2Njc1OGM3NjU1YWM4NjQ1Y2M4NjM1ZWM5NjI2MGNhNjA2M2NiNWY2NWNiNWU2N2NjNWM2OWNkNWI2Y2NkNWE2ZWNlNTg3MGNmNTc3M2QwNTY3NWQwNTQ3N2QxNTM3YWQxNTE3Y2QyNTA3ZmQzNGU4MWQzNGQ4NGQ0NGI4NmQ1NDk4OWQ1NDg4YmQ2NDY4ZWQ2NDU5MGQ3NDM5M2Q3NDE5NWQ4NDA5OGQ4M2U5YmQ5M2M5ZGQ5M2JhMGRhMzlhMmRhMzdhNWRiMzZhOGRiMzRhYWRjMzJhZGRjMzBiMGRkMmZiMmRkMmRiNWRlMmJiOGRlMjliYWRlMjhiZGRmMjZjMGRmMjVjMmRmMjNjNWUwMjFjOGUwMjBjYWUxMWZjZGUxMWRkMGUxMWNkMmUyMWJkNWUyMWFkOGUyMTlkYWUzMTlkZGUzMThkZmUzMThlMmU0MThlNWU0MTllN2U0MTllYWU1MWFlY2U1MWJlZmU1MWNmMWU1MWRmNGU2MWVmNmU2MjBmOGU2MjFmYmU3MjNmZGU3MjVcIikpO1xuXG5leHBvcnQgdmFyIG1hZ21hID0gcmFtcChjb2xvcnMoXCIwMDAwMDQwMTAwMDUwMTAxMDYwMTAxMDgwMjAxMDkwMjAyMGIwMjAyMGQwMzAzMGYwMzAzMTIwNDA0MTQwNTA0MTYwNjA1MTgwNjA1MWEwNzA2MWMwODA3MWUwOTA3MjAwYTA4MjIwYjA5MjQwYzA5MjYwZDBhMjkwZTBiMmIxMDBiMmQxMTBjMmYxMjBkMzExMzBkMzQxNDBlMzYxNTBlMzgxNjBmM2IxODBmM2QxOTEwM2YxYTEwNDIxYzEwNDQxZDExNDcxZTExNDkyMDExNGIyMTExNGUyMjExNTAyNDEyNTMyNTEyNTUyNzEyNTgyOTExNWEyYTExNWMyYzExNWYyZDExNjEyZjExNjMzMTExNjUzMzEwNjczNDEwNjkzNjEwNmIzODEwNmMzOTBmNmUzYjBmNzAzZDBmNzEzZjBmNzI0MDBmNzQ0MjBmNzU0NDBmNzY0NTEwNzc0NzEwNzg0OTEwNzg0YTEwNzk0YzExN2E0ZTExN2I0ZjEyN2I1MTEyN2M1MjEzN2M1NDEzN2Q1NjE0N2Q1NzE1N2U1OTE1N2U1YTE2N2U1YzE2N2Y1ZDE3N2Y1ZjE4N2Y2MDE4ODA2MjE5ODA2NDFhODA2NTFhODA2NzFiODA2ODFjODE2YTFjODE2YjFkODE2ZDFkODE2ZTFlODE3MDFmODE3MjFmODE3MzIwODE3NTIxODE3NjIxODE3ODIyODE3OTIyODI3YjIzODI3YzIzODI3ZTI0ODI4MDI1ODI4MTI1ODE4MzI2ODE4NDI2ODE4NjI3ODE4ODI3ODE4OTI4ODE4YjI5ODE4YzI5ODE4ZTJhODE5MDJhODE5MTJiODE5MzJiODA5NDJjODA5NjJjODA5ODJkODA5OTJkODA5YjJlN2Y5YzJlN2Y5ZTJmN2ZhMDJmN2ZhMTMwN2VhMzMwN2VhNTMxN2VhNjMxN2RhODMyN2RhYTMzN2RhYjMzN2NhZDM0N2NhZTM0N2JiMDM1N2JiMjM1N2JiMzM2N2FiNTM2N2FiNzM3NzliODM3NzliYTM4NzhiYzM5NzhiZDM5NzdiZjNhNzdjMDNhNzZjMjNiNzVjNDNjNzVjNTNjNzRjNzNkNzNjODNlNzNjYTNlNzJjYzNmNzFjZDQwNzFjZjQwNzBkMDQxNmZkMjQyNmZkMzQzNmVkNTQ0NmRkNjQ1NmNkODQ1NmNkOTQ2NmJkYjQ3NmFkYzQ4NjlkZTQ5NjhkZjRhNjhlMDRjNjdlMjRkNjZlMzRlNjVlNDRmNjRlNTUwNjRlNzUyNjNlODUzNjJlOTU0NjJlYTU2NjFlYjU3NjBlYzU4NjBlZDVhNWZlZTViNWVlZjVkNWVmMDVmNWVmMTYwNWRmMjYyNWRmMjY0NWNmMzY1NWNmNDY3NWNmNDY5NWNmNTZiNWNmNjZjNWNmNjZlNWNmNzcwNWNmNzcyNWNmODc0NWNmODc2NWNmOTc4NWRmOTc5NWRmOTdiNWRmYTdkNWVmYTdmNWVmYTgxNWZmYjgzNWZmYjg1NjBmYjg3NjFmYzg5NjFmYzhhNjJmYzhjNjNmYzhlNjRmYzkwNjVmZDkyNjZmZDk0NjdmZDk2NjhmZDk4NjlmZDlhNmFmZDliNmJmZTlkNmNmZTlmNmRmZWExNmVmZWEzNmZmZWE1NzFmZWE3NzJmZWE5NzNmZWFhNzRmZWFjNzZmZWFlNzdmZWIwNzhmZWIyN2FmZWI0N2JmZWI2N2NmZWI3N2VmZWI5N2ZmZWJiODFmZWJkODJmZWJmODRmZWMxODVmZWMyODdmZWM0ODhmZWM2OGFmZWM4OGNmZWNhOGRmZWNjOGZmZWNkOTBmZWNmOTJmZWQxOTRmZWQzOTVmZWQ1OTdmZWQ3OTlmZWQ4OWFmZGRhOWNmZGRjOWVmZGRlYTBmZGUwYTFmZGUyYTNmZGUzYTVmZGU1YTdmZGU3YTlmZGU5YWFmZGViYWNmY2VjYWVmY2VlYjBmY2YwYjJmY2YyYjRmY2Y0YjZmY2Y2YjhmY2Y3YjlmY2Y5YmJmY2ZiYmRmY2ZkYmZcIikpO1xuXG5leHBvcnQgdmFyIGluZmVybm8gPSByYW1wKGNvbG9ycyhcIjAwMDAwNDAxMDAwNTAxMDEwNjAxMDEwODAyMDEwYTAyMDIwYzAyMDIwZTAzMDIxMDA0MDMxMjA0MDMxNDA1MDQxNzA2MDQxOTA3MDUxYjA4MDUxZDA5MDYxZjBhMDcyMjBiMDcyNDBjMDgyNjBkMDgyOTBlMDkyYjEwMDkyZDExMGEzMDEyMGEzMjE0MGIzNDE1MGIzNzE2MGIzOTE4MGMzYzE5MGMzZTFiMGM0MTFjMGM0MzFlMGM0NTFmMGM0ODIxMGM0YTIzMGM0YzI0MGM0ZjI2MGM1MTI4MGI1MzI5MGI1NTJiMGI1NzJkMGI1OTJmMGE1YjMxMGE1YzMyMGE1ZTM0MGE1ZjM2MDk2MTM4MDk2MjM5MDk2MzNiMDk2NDNkMDk2NTNlMDk2NjQwMGE2NzQyMGE2ODQ0MGE2ODQ1MGE2OTQ3MGI2YTQ5MGI2YTRhMGM2YjRjMGM2YjRkMGQ2YzRmMGQ2YzUxMGU2YzUyMGU2ZDU0MGY2ZDU1MGY2ZDU3MTA2ZTU5MTA2ZTVhMTE2ZTVjMTI2ZTVkMTI2ZTVmMTM2ZTYxMTM2ZTYyMTQ2ZTY0MTU2ZTY1MTU2ZTY3MTY2ZTY5MTY2ZTZhMTc2ZTZjMTg2ZTZkMTg2ZTZmMTk2ZTcxMTk2ZTcyMWE2ZTc0MWE2ZTc1MWI2ZTc3MWM2ZDc4MWM2ZDdhMWQ2ZDdjMWQ2ZDdkMWU2ZDdmMWU2YzgwMWY2YzgyMjA2Yzg0MjA2Yjg1MjE2Yjg3MjE2Yjg4MjI2YThhMjI2YThjMjM2OThkMjM2OThmMjQ2OTkwMjU2ODkyMjU2ODkzMjY2Nzk1MjY2Nzk3Mjc2Njk4Mjc2NjlhMjg2NTliMjk2NDlkMjk2NDlmMmE2M2EwMmE2M2EyMmI2MmEzMmM2MWE1MmM2MGE2MmQ2MGE4MmU1ZmE5MmU1ZWFiMmY1ZWFkMzA1ZGFlMzA1Y2IwMzE1YmIxMzI1YWIzMzI1YWI0MzM1OWI2MzQ1OGI3MzU1N2I5MzU1NmJhMzY1NWJjMzc1NGJkMzg1M2JmMzk1MmMwM2E1MWMxM2E1MGMzM2I0ZmM0M2M0ZWM2M2Q0ZGM3M2U0Y2M4M2Y0YmNhNDA0YWNiNDE0OWNjNDI0OGNlNDM0N2NmNDQ0NmQwNDU0NWQyNDY0NGQzNDc0M2Q0NDg0MmQ1NGE0MWQ3NGIzZmQ4NGMzZWQ5NGQzZGRhNGUzY2RiNTAzYmRkNTEzYWRlNTIzOGRmNTMzN2UwNTUzNmUxNTYzNWUyNTczNGUzNTkzM2U0NWEzMWU1NWMzMGU2NWQyZmU3NWUyZWU4NjAyZGU5NjEyYmVhNjMyYWViNjQyOWViNjYyOGVjNjcyNmVkNjkyNWVlNmEyNGVmNmMyM2VmNmUyMWYwNmYyMGYxNzExZmYxNzMxZGYyNzQxY2YzNzYxYmYzNzgxOWY0NzkxOGY1N2IxN2Y1N2QxNWY2N2UxNGY2ODAxM2Y3ODIxMmY3ODQxMGY4ODUwZmY4ODcwZWY4ODkwY2Y5OGIwYmY5OGMwYWY5OGUwOWZhOTAwOGZhOTIwN2ZhOTQwN2ZiOTYwNmZiOTcwNmZiOTkwNmZiOWIwNmZiOWQwN2ZjOWYwN2ZjYTEwOGZjYTMwOWZjYTUwYWZjYTYwY2ZjYTgwZGZjYWEwZmZjYWMxMWZjYWUxMmZjYjAxNGZjYjIxNmZjYjQxOGZiYjYxYWZiYjgxZGZiYmExZmZiYmMyMWZiYmUyM2ZhYzAyNmZhYzIyOGZhYzQyYWZhYzYyZGY5YzcyZmY5YzkzMmY5Y2IzNWY4Y2QzN2Y4Y2YzYWY3ZDEzZGY3ZDM0MGY2ZDU0M2Y2ZDc0NmY1ZDk0OWY1ZGI0Y2Y0ZGQ0ZmY0ZGY1M2Y0ZTE1NmYzZTM1YWYzZTU1ZGYyZTY2MWYyZTg2NWYyZWE2OWYxZWM2ZGYxZWQ3MWYxZWY3NWYxZjE3OWYyZjI3ZGYyZjQ4MmYzZjU4NmYzZjY4YWY0Zjg4ZWY1Zjk5MmY2ZmE5NmY4ZmI5YWY5ZmM5ZGZhZmRhMWZjZmZhNFwiKSk7XG5cbmV4cG9ydCB2YXIgcGxhc21hID0gcmFtcChjb2xvcnMoXCIwZDA4ODcxMDA3ODgxMzA3ODkxNjA3OGExOTA2OGMxYjA2OGQxZDA2OGUyMDA2OGYyMjA2OTAyNDA2OTEyNjA1OTEyODA1OTIyYTA1OTMyYzA1OTQyZTA1OTUyZjA1OTYzMTA1OTczMzA1OTczNTA0OTgzNzA0OTkzODA0OWEzYTA0OWEzYzA0OWIzZTA0OWMzZjA0OWM0MTA0OWQ0MzAzOWU0NDAzOWU0NjAzOWY0ODAzOWY0OTAzYTA0YjAzYTE0YzAyYTE0ZTAyYTI1MDAyYTI1MTAyYTM1MzAyYTM1NTAyYTQ1NjAxYTQ1ODAxYTQ1OTAxYTU1YjAxYTU1YzAxYTY1ZTAxYTY2MDAxYTY2MTAwYTc2MzAwYTc2NDAwYTc2NjAwYTc2NzAwYTg2OTAwYTg2YTAwYTg2YzAwYTg2ZTAwYTg2ZjAwYTg3MTAwYTg3MjAxYTg3NDAxYTg3NTAxYTg3NzAxYTg3ODAxYTg3YTAyYTg3YjAyYTg3ZDAzYTg3ZTAzYTg4MDA0YTg4MTA0YTc4MzA1YTc4NDA1YTc4NjA2YTY4NzA3YTY4ODA4YTY4YTA5YTU4YjBhYTU4ZDBiYTU4ZTBjYTQ4ZjBkYTQ5MTBlYTM5MjBmYTM5NDEwYTI5NTExYTE5NjEzYTE5ODE0YTA5OTE1OWY5YTE2OWY5YzE3OWU5ZDE4OWQ5ZTE5OWRhMDFhOWNhMTFiOWJhMjFkOWFhMzFlOWFhNTFmOTlhNjIwOThhNzIxOTdhODIyOTZhYTIzOTVhYjI0OTRhYzI2OTRhZDI3OTNhZTI4OTJiMDI5OTFiMTJhOTBiMjJiOGZiMzJjOGViNDJlOGRiNTJmOGNiNjMwOGJiNzMxOGFiODMyODliYTMzODhiYjM0ODhiYzM1ODdiZDM3ODZiZTM4ODViZjM5ODRjMDNhODNjMTNiODJjMjNjODFjMzNkODBjNDNlN2ZjNTQwN2VjNjQxN2RjNzQyN2NjODQzN2JjOTQ0N2FjYTQ1N2FjYjQ2NzljYzQ3NzhjYzQ5NzdjZDRhNzZjZTRiNzVjZjRjNzRkMDRkNzNkMTRlNzJkMjRmNzFkMzUxNzFkNDUyNzBkNTUzNmZkNTU0NmVkNjU1NmRkNzU2NmNkODU3NmJkOTU4NmFkYTVhNmFkYTViNjlkYjVjNjhkYzVkNjdkZDVlNjZkZTVmNjVkZTYxNjRkZjYyNjNlMDYzNjNlMTY0NjJlMjY1NjFlMjY2NjBlMzY4NWZlNDY5NWVlNTZhNWRlNTZiNWRlNjZjNWNlNzZlNWJlNzZmNWFlODcwNTllOTcxNThlOTcyNTdlYTc0NTdlYjc1NTZlYjc2NTVlYzc3NTRlZDc5NTNlZDdhNTJlZTdiNTFlZjdjNTFlZjdlNTBmMDdmNGZmMDgwNGVmMTgxNGRmMTgzNGNmMjg0NGJmMzg1NGJmMzg3NGFmNDg4NDlmNDg5NDhmNThiNDdmNThjNDZmNjhkNDVmNjhmNDRmNzkwNDRmNzkxNDNmNzkzNDJmODk0NDFmODk1NDBmOTk3M2ZmOTk4M2VmOTlhM2VmYTliM2RmYTljM2NmYTllM2JmYjlmM2FmYmExMzlmYmEyMzhmY2EzMzhmY2E1MzdmY2E2MzZmY2E4MzVmY2E5MzRmZGFiMzNmZGFjMzNmZGFlMzJmZGFmMzFmZGIxMzBmZGIyMmZmZGI0MmZmZGI1MmVmZWI3MmRmZWI4MmNmZWJhMmNmZWJiMmJmZWJkMmFmZWJlMmFmZWMwMjlmZGMyMjlmZGMzMjhmZGM1MjdmZGM2MjdmZGM4MjdmZGNhMjZmZGNiMjZmY2NkMjVmY2NlMjVmY2QwMjVmY2QyMjVmYmQzMjRmYmQ1MjRmYmQ3MjRmYWQ4MjRmYWRhMjRmOWRjMjRmOWRkMjVmOGRmMjVmOGUxMjVmN2UyMjVmN2U0MjVmNmU2MjZmNmU4MjZmNWU5MjZmNWViMjdmNGVkMjdmM2VlMjdmM2YwMjdmMmYyMjdmMWY0MjZmMWY1MjVmMGY3MjRmMGY5MjFcIikpO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzLmpzXCI7XG5pbXBvcnQgcmFtcCBmcm9tIFwiLi4vcmFtcC5qc1wiO1xuXG5leHBvcnQgdmFyIHNjaGVtZSA9IG5ldyBBcnJheSgzKS5jb25jYXQoXG4gIFwiZGVlYmY3OWVjYWUxMzE4MmJkXCIsXG4gIFwiZWZmM2ZmYmRkN2U3NmJhZWQ2MjE3MWI1XCIsXG4gIFwiZWZmM2ZmYmRkN2U3NmJhZWQ2MzE4MmJkMDg1MTljXCIsXG4gIFwiZWZmM2ZmYzZkYmVmOWVjYWUxNmJhZWQ2MzE4MmJkMDg1MTljXCIsXG4gIFwiZWZmM2ZmYzZkYmVmOWVjYWUxNmJhZWQ2NDI5MmM2MjE3MWI1MDg0NTk0XCIsXG4gIFwiZjdmYmZmZGVlYmY3YzZkYmVmOWVjYWUxNmJhZWQ2NDI5MmM2MjE3MWI1MDg0NTk0XCIsXG4gIFwiZjdmYmZmZGVlYmY3YzZkYmVmOWVjYWUxNmJhZWQ2NDI5MmM2MjE3MWI1MDg1MTljMDgzMDZiXCJcbikubWFwKGNvbG9ycyk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbXAoc2NoZW1lKTtcbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9ycy5qc1wiO1xuaW1wb3J0IHJhbXAgZnJvbSBcIi4uL3JhbXAuanNcIjtcblxuZXhwb3J0IHZhciBzY2hlbWUgPSBuZXcgQXJyYXkoMykuY29uY2F0KFxuICBcImU1ZjVlMGExZDk5YjMxYTM1NFwiLFxuICBcImVkZjhlOWJhZTRiMzc0YzQ3NjIzOGI0NVwiLFxuICBcImVkZjhlOWJhZTRiMzc0YzQ3NjMxYTM1NDAwNmQyY1wiLFxuICBcImVkZjhlOWM3ZTljMGExZDk5Yjc0YzQ3NjMxYTM1NDAwNmQyY1wiLFxuICBcImVkZjhlOWM3ZTljMGExZDk5Yjc0YzQ3NjQxYWI1ZDIzOGI0NTAwNWEzMlwiLFxuICBcImY3ZmNmNWU1ZjVlMGM3ZTljMGExZDk5Yjc0YzQ3NjQxYWI1ZDIzOGI0NTAwNWEzMlwiLFxuICBcImY3ZmNmNWU1ZjVlMGM3ZTljMGExZDk5Yjc0YzQ3NjQxYWI1ZDIzOGI0NTAwNmQyYzAwNDQxYlwiXG4pLm1hcChjb2xvcnMpO1xuXG5leHBvcnQgZGVmYXVsdCByYW1wKHNjaGVtZSk7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnMuanNcIjtcbmltcG9ydCByYW1wIGZyb20gXCIuLi9yYW1wLmpzXCI7XG5cbmV4cG9ydCB2YXIgc2NoZW1lID0gbmV3IEFycmF5KDMpLmNvbmNhdChcbiAgXCJmMGYwZjBiZGJkYmQ2MzYzNjNcIixcbiAgXCJmN2Y3ZjdjY2NjY2M5Njk2OTY1MjUyNTJcIixcbiAgXCJmN2Y3ZjdjY2NjY2M5Njk2OTY2MzYzNjMyNTI1MjVcIixcbiAgXCJmN2Y3ZjdkOWQ5ZDliZGJkYmQ5Njk2OTY2MzYzNjMyNTI1MjVcIixcbiAgXCJmN2Y3ZjdkOWQ5ZDliZGJkYmQ5Njk2OTY3MzczNzM1MjUyNTIyNTI1MjVcIixcbiAgXCJmZmZmZmZmMGYwZjBkOWQ5ZDliZGJkYmQ5Njk2OTY3MzczNzM1MjUyNTIyNTI1MjVcIixcbiAgXCJmZmZmZmZmMGYwZjBkOWQ5ZDliZGJkYmQ5Njk2OTY3MzczNzM1MjUyNTIyNTI1MjUwMDAwMDBcIlxuKS5tYXAoY29sb3JzKTtcblxuZXhwb3J0IGRlZmF1bHQgcmFtcChzY2hlbWUpO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzLmpzXCI7XG5pbXBvcnQgcmFtcCBmcm9tIFwiLi4vcmFtcC5qc1wiO1xuXG5leHBvcnQgdmFyIHNjaGVtZSA9IG5ldyBBcnJheSgzKS5jb25jYXQoXG4gIFwiZmVlNmNlZmRhZTZiZTY1NTBkXCIsXG4gIFwiZmVlZGRlZmRiZTg1ZmQ4ZDNjZDk0NzAxXCIsXG4gIFwiZmVlZGRlZmRiZTg1ZmQ4ZDNjZTY1NTBkYTYzNjAzXCIsXG4gIFwiZmVlZGRlZmRkMGEyZmRhZTZiZmQ4ZDNjZTY1NTBkYTYzNjAzXCIsXG4gIFwiZmVlZGRlZmRkMGEyZmRhZTZiZmQ4ZDNjZjE2OTEzZDk0ODAxOGMyZDA0XCIsXG4gIFwiZmZmNWViZmVlNmNlZmRkMGEyZmRhZTZiZmQ4ZDNjZjE2OTEzZDk0ODAxOGMyZDA0XCIsXG4gIFwiZmZmNWViZmVlNmNlZmRkMGEyZmRhZTZiZmQ4ZDNjZjE2OTEzZDk0ODAxYTYzNjAzN2YyNzA0XCJcbikubWFwKGNvbG9ycyk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbXAoc2NoZW1lKTtcbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9ycy5qc1wiO1xuaW1wb3J0IHJhbXAgZnJvbSBcIi4uL3JhbXAuanNcIjtcblxuZXhwb3J0IHZhciBzY2hlbWUgPSBuZXcgQXJyYXkoMykuY29uY2F0KFxuICBcImVmZWRmNWJjYmRkYzc1NmJiMVwiLFxuICBcImYyZjBmN2NiYzllMjllOWFjODZhNTFhM1wiLFxuICBcImYyZjBmN2NiYzllMjllOWFjODc1NmJiMTU0Mjc4ZlwiLFxuICBcImYyZjBmN2RhZGFlYmJjYmRkYzllOWFjODc1NmJiMTU0Mjc4ZlwiLFxuICBcImYyZjBmN2RhZGFlYmJjYmRkYzllOWFjODgwN2RiYTZhNTFhMzRhMTQ4NlwiLFxuICBcImZjZmJmZGVmZWRmNWRhZGFlYmJjYmRkYzllOWFjODgwN2RiYTZhNTFhMzRhMTQ4NlwiLFxuICBcImZjZmJmZGVmZWRmNWRhZGFlYmJjYmRkYzllOWFjODgwN2RiYTZhNTFhMzU0Mjc4ZjNmMDA3ZFwiXG4pLm1hcChjb2xvcnMpO1xuXG5leHBvcnQgZGVmYXVsdCByYW1wKHNjaGVtZSk7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnMuanNcIjtcbmltcG9ydCByYW1wIGZyb20gXCIuLi9yYW1wLmpzXCI7XG5cbmV4cG9ydCB2YXIgc2NoZW1lID0gbmV3IEFycmF5KDMpLmNvbmNhdChcbiAgXCJmZWUwZDJmYzkyNzJkZTJkMjZcIixcbiAgXCJmZWU1ZDlmY2FlOTFmYjZhNGFjYjE4MWRcIixcbiAgXCJmZWU1ZDlmY2FlOTFmYjZhNGFkZTJkMjZhNTBmMTVcIixcbiAgXCJmZWU1ZDlmY2JiYTFmYzkyNzJmYjZhNGFkZTJkMjZhNTBmMTVcIixcbiAgXCJmZWU1ZDlmY2JiYTFmYzkyNzJmYjZhNGFlZjNiMmNjYjE4MWQ5OTAwMGRcIixcbiAgXCJmZmY1ZjBmZWUwZDJmY2JiYTFmYzkyNzJmYjZhNGFlZjNiMmNjYjE4MWQ5OTAwMGRcIixcbiAgXCJmZmY1ZjBmZWUwZDJmY2JiYTFmYzkyNzJmYjZhNGFlZjNiMmNjYjE4MWRhNTBmMTU2NzAwMGRcIlxuKS5tYXAoY29sb3JzKTtcblxuZXhwb3J0IGRlZmF1bHQgcmFtcChzY2hlbWUpO1xuIiwidmFyIGFycmF5ID0gQXJyYXkucHJvdG90eXBlO1xuXG5leHBvcnQgdmFyIG1hcCA9IGFycmF5Lm1hcDtcbmV4cG9ydCB2YXIgc2xpY2UgPSBhcnJheS5zbGljZTtcbiIsImltcG9ydCB7cmFuZ2UgYXMgc2VxdWVuY2V9IGZyb20gXCJkMy1hcnJheVwiO1xuaW1wb3J0IHtpbml0UmFuZ2V9IGZyb20gXCIuL2luaXRcIjtcbmltcG9ydCBvcmRpbmFsIGZyb20gXCIuL29yZGluYWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYmFuZCgpIHtcbiAgdmFyIHNjYWxlID0gb3JkaW5hbCgpLnVua25vd24odW5kZWZpbmVkKSxcbiAgICAgIGRvbWFpbiA9IHNjYWxlLmRvbWFpbixcbiAgICAgIG9yZGluYWxSYW5nZSA9IHNjYWxlLnJhbmdlLFxuICAgICAgcmFuZ2UgPSBbMCwgMV0sXG4gICAgICBzdGVwLFxuICAgICAgYmFuZHdpZHRoLFxuICAgICAgcm91bmQgPSBmYWxzZSxcbiAgICAgIHBhZGRpbmdJbm5lciA9IDAsXG4gICAgICBwYWRkaW5nT3V0ZXIgPSAwLFxuICAgICAgYWxpZ24gPSAwLjU7XG5cbiAgZGVsZXRlIHNjYWxlLnVua25vd247XG5cbiAgZnVuY3Rpb24gcmVzY2FsZSgpIHtcbiAgICB2YXIgbiA9IGRvbWFpbigpLmxlbmd0aCxcbiAgICAgICAgcmV2ZXJzZSA9IHJhbmdlWzFdIDwgcmFuZ2VbMF0sXG4gICAgICAgIHN0YXJ0ID0gcmFuZ2VbcmV2ZXJzZSAtIDBdLFxuICAgICAgICBzdG9wID0gcmFuZ2VbMSAtIHJldmVyc2VdO1xuICAgIHN0ZXAgPSAoc3RvcCAtIHN0YXJ0KSAvIE1hdGgubWF4KDEsIG4gLSBwYWRkaW5nSW5uZXIgKyBwYWRkaW5nT3V0ZXIgKiAyKTtcbiAgICBpZiAocm91bmQpIHN0ZXAgPSBNYXRoLmZsb29yKHN0ZXApO1xuICAgIHN0YXJ0ICs9IChzdG9wIC0gc3RhcnQgLSBzdGVwICogKG4gLSBwYWRkaW5nSW5uZXIpKSAqIGFsaWduO1xuICAgIGJhbmR3aWR0aCA9IHN0ZXAgKiAoMSAtIHBhZGRpbmdJbm5lcik7XG4gICAgaWYgKHJvdW5kKSBzdGFydCA9IE1hdGgucm91bmQoc3RhcnQpLCBiYW5kd2lkdGggPSBNYXRoLnJvdW5kKGJhbmR3aWR0aCk7XG4gICAgdmFyIHZhbHVlcyA9IHNlcXVlbmNlKG4pLm1hcChmdW5jdGlvbihpKSB7IHJldHVybiBzdGFydCArIHN0ZXAgKiBpOyB9KTtcbiAgICByZXR1cm4gb3JkaW5hbFJhbmdlKHJldmVyc2UgPyB2YWx1ZXMucmV2ZXJzZSgpIDogdmFsdWVzKTtcbiAgfVxuXG4gIHNjYWxlLmRvbWFpbiA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChkb21haW4oXyksIHJlc2NhbGUoKSkgOiBkb21haW4oKTtcbiAgfTtcblxuICBzY2FsZS5yYW5nZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChyYW5nZSA9IFsrX1swXSwgK19bMV1dLCByZXNjYWxlKCkpIDogcmFuZ2Uuc2xpY2UoKTtcbiAgfTtcblxuICBzY2FsZS5yYW5nZVJvdW5kID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiByYW5nZSA9IFsrX1swXSwgK19bMV1dLCByb3VuZCA9IHRydWUsIHJlc2NhbGUoKTtcbiAgfTtcblxuICBzY2FsZS5iYW5kd2lkdGggPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gYmFuZHdpZHRoO1xuICB9O1xuXG4gIHNjYWxlLnN0ZXAgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gc3RlcDtcbiAgfTtcblxuICBzY2FsZS5yb3VuZCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChyb3VuZCA9ICEhXywgcmVzY2FsZSgpKSA6IHJvdW5kO1xuICB9O1xuXG4gIHNjYWxlLnBhZGRpbmcgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocGFkZGluZ0lubmVyID0gTWF0aC5taW4oMSwgcGFkZGluZ091dGVyID0gK18pLCByZXNjYWxlKCkpIDogcGFkZGluZ0lubmVyO1xuICB9O1xuXG4gIHNjYWxlLnBhZGRpbmdJbm5lciA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChwYWRkaW5nSW5uZXIgPSBNYXRoLm1pbigxLCBfKSwgcmVzY2FsZSgpKSA6IHBhZGRpbmdJbm5lcjtcbiAgfTtcblxuICBzY2FsZS5wYWRkaW5nT3V0ZXIgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocGFkZGluZ091dGVyID0gK18sIHJlc2NhbGUoKSkgOiBwYWRkaW5nT3V0ZXI7XG4gIH07XG5cbiAgc2NhbGUuYWxpZ24gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoYWxpZ24gPSBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCBfKSksIHJlc2NhbGUoKSkgOiBhbGlnbjtcbiAgfTtcblxuICBzY2FsZS5jb3B5ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGJhbmQoZG9tYWluKCksIHJhbmdlKVxuICAgICAgICAucm91bmQocm91bmQpXG4gICAgICAgIC5wYWRkaW5nSW5uZXIocGFkZGluZ0lubmVyKVxuICAgICAgICAucGFkZGluZ091dGVyKHBhZGRpbmdPdXRlcilcbiAgICAgICAgLmFsaWduKGFsaWduKTtcbiAgfTtcblxuICByZXR1cm4gaW5pdFJhbmdlLmFwcGx5KHJlc2NhbGUoKSwgYXJndW1lbnRzKTtcbn1cblxuZnVuY3Rpb24gcG9pbnRpc2goc2NhbGUpIHtcbiAgdmFyIGNvcHkgPSBzY2FsZS5jb3B5O1xuXG4gIHNjYWxlLnBhZGRpbmcgPSBzY2FsZS5wYWRkaW5nT3V0ZXI7XG4gIGRlbGV0ZSBzY2FsZS5wYWRkaW5nSW5uZXI7XG4gIGRlbGV0ZSBzY2FsZS5wYWRkaW5nT3V0ZXI7XG5cbiAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBwb2ludGlzaChjb3B5KCkpO1xuICB9O1xuXG4gIHJldHVybiBzY2FsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBvaW50KCkge1xuICByZXR1cm4gcG9pbnRpc2goYmFuZC5hcHBseShudWxsLCBhcmd1bWVudHMpLnBhZGRpbmdJbm5lcigxKSk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4geDtcbiAgfTtcbn1cbiIsImltcG9ydCB7YmlzZWN0fSBmcm9tIFwiZDMtYXJyYXlcIjtcbmltcG9ydCB7aW50ZXJwb2xhdGUgYXMgaW50ZXJwb2xhdGVWYWx1ZSwgaW50ZXJwb2xhdGVOdW1iZXIsIGludGVycG9sYXRlUm91bmR9IGZyb20gXCJkMy1pbnRlcnBvbGF0ZVwiO1xuaW1wb3J0IHttYXAsIHNsaWNlfSBmcm9tIFwiLi9hcnJheVwiO1xuaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuL2NvbnN0YW50XCI7XG5pbXBvcnQgbnVtYmVyIGZyb20gXCIuL251bWJlclwiO1xuXG52YXIgdW5pdCA9IFswLCAxXTtcblxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aXR5KHgpIHtcbiAgcmV0dXJuIHg7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZShhLCBiKSB7XG4gIHJldHVybiAoYiAtPSAoYSA9ICthKSlcbiAgICAgID8gZnVuY3Rpb24oeCkgeyByZXR1cm4gKHggLSBhKSAvIGI7IH1cbiAgICAgIDogY29uc3RhbnQoaXNOYU4oYikgPyBOYU4gOiAwLjUpO1xufVxuXG5mdW5jdGlvbiBjbGFtcGVyKGRvbWFpbikge1xuICB2YXIgYSA9IGRvbWFpblswXSwgYiA9IGRvbWFpbltkb21haW4ubGVuZ3RoIC0gMV0sIHQ7XG4gIGlmIChhID4gYikgdCA9IGEsIGEgPSBiLCBiID0gdDtcbiAgcmV0dXJuIGZ1bmN0aW9uKHgpIHsgcmV0dXJuIE1hdGgubWF4KGEsIE1hdGgubWluKGIsIHgpKTsgfTtcbn1cblxuLy8gbm9ybWFsaXplKGEsIGIpKHgpIHRha2VzIGEgZG9tYWluIHZhbHVlIHggaW4gW2EsYl0gYW5kIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgcGFyYW1ldGVyIHQgaW4gWzAsMV0uXG4vLyBpbnRlcnBvbGF0ZShhLCBiKSh0KSB0YWtlcyBhIHBhcmFtZXRlciB0IGluIFswLDFdIGFuZCByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIHJhbmdlIHZhbHVlIHggaW4gW2EsYl0uXG5mdW5jdGlvbiBiaW1hcChkb21haW4sIHJhbmdlLCBpbnRlcnBvbGF0ZSkge1xuICB2YXIgZDAgPSBkb21haW5bMF0sIGQxID0gZG9tYWluWzFdLCByMCA9IHJhbmdlWzBdLCByMSA9IHJhbmdlWzFdO1xuICBpZiAoZDEgPCBkMCkgZDAgPSBub3JtYWxpemUoZDEsIGQwKSwgcjAgPSBpbnRlcnBvbGF0ZShyMSwgcjApO1xuICBlbHNlIGQwID0gbm9ybWFsaXplKGQwLCBkMSksIHIwID0gaW50ZXJwb2xhdGUocjAsIHIxKTtcbiAgcmV0dXJuIGZ1bmN0aW9uKHgpIHsgcmV0dXJuIHIwKGQwKHgpKTsgfTtcbn1cblxuZnVuY3Rpb24gcG9seW1hcChkb21haW4sIHJhbmdlLCBpbnRlcnBvbGF0ZSkge1xuICB2YXIgaiA9IE1hdGgubWluKGRvbWFpbi5sZW5ndGgsIHJhbmdlLmxlbmd0aCkgLSAxLFxuICAgICAgZCA9IG5ldyBBcnJheShqKSxcbiAgICAgIHIgPSBuZXcgQXJyYXkoaiksXG4gICAgICBpID0gLTE7XG5cbiAgLy8gUmV2ZXJzZSBkZXNjZW5kaW5nIGRvbWFpbnMuXG4gIGlmIChkb21haW5bal0gPCBkb21haW5bMF0pIHtcbiAgICBkb21haW4gPSBkb21haW4uc2xpY2UoKS5yZXZlcnNlKCk7XG4gICAgcmFuZ2UgPSByYW5nZS5zbGljZSgpLnJldmVyc2UoKTtcbiAgfVxuXG4gIHdoaWxlICgrK2kgPCBqKSB7XG4gICAgZFtpXSA9IG5vcm1hbGl6ZShkb21haW5baV0sIGRvbWFpbltpICsgMV0pO1xuICAgIHJbaV0gPSBpbnRlcnBvbGF0ZShyYW5nZVtpXSwgcmFuZ2VbaSArIDFdKTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbih4KSB7XG4gICAgdmFyIGkgPSBiaXNlY3QoZG9tYWluLCB4LCAxLCBqKSAtIDE7XG4gICAgcmV0dXJuIHJbaV0oZFtpXSh4KSk7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb3B5KHNvdXJjZSwgdGFyZ2V0KSB7XG4gIHJldHVybiB0YXJnZXRcbiAgICAgIC5kb21haW4oc291cmNlLmRvbWFpbigpKVxuICAgICAgLnJhbmdlKHNvdXJjZS5yYW5nZSgpKVxuICAgICAgLmludGVycG9sYXRlKHNvdXJjZS5pbnRlcnBvbGF0ZSgpKVxuICAgICAgLmNsYW1wKHNvdXJjZS5jbGFtcCgpKVxuICAgICAgLnVua25vd24oc291cmNlLnVua25vd24oKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2Zvcm1lcigpIHtcbiAgdmFyIGRvbWFpbiA9IHVuaXQsXG4gICAgICByYW5nZSA9IHVuaXQsXG4gICAgICBpbnRlcnBvbGF0ZSA9IGludGVycG9sYXRlVmFsdWUsXG4gICAgICB0cmFuc2Zvcm0sXG4gICAgICB1bnRyYW5zZm9ybSxcbiAgICAgIHVua25vd24sXG4gICAgICBjbGFtcCA9IGlkZW50aXR5LFxuICAgICAgcGllY2V3aXNlLFxuICAgICAgb3V0cHV0LFxuICAgICAgaW5wdXQ7XG5cbiAgZnVuY3Rpb24gcmVzY2FsZSgpIHtcbiAgICBwaWVjZXdpc2UgPSBNYXRoLm1pbihkb21haW4ubGVuZ3RoLCByYW5nZS5sZW5ndGgpID4gMiA/IHBvbHltYXAgOiBiaW1hcDtcbiAgICBvdXRwdXQgPSBpbnB1dCA9IG51bGw7XG4gICAgcmV0dXJuIHNjYWxlO1xuICB9XG5cbiAgZnVuY3Rpb24gc2NhbGUoeCkge1xuICAgIHJldHVybiBpc05hTih4ID0gK3gpID8gdW5rbm93biA6IChvdXRwdXQgfHwgKG91dHB1dCA9IHBpZWNld2lzZShkb21haW4ubWFwKHRyYW5zZm9ybSksIHJhbmdlLCBpbnRlcnBvbGF0ZSkpKSh0cmFuc2Zvcm0oY2xhbXAoeCkpKTtcbiAgfVxuXG4gIHNjYWxlLmludmVydCA9IGZ1bmN0aW9uKHkpIHtcbiAgICByZXR1cm4gY2xhbXAodW50cmFuc2Zvcm0oKGlucHV0IHx8IChpbnB1dCA9IHBpZWNld2lzZShyYW5nZSwgZG9tYWluLm1hcCh0cmFuc2Zvcm0pLCBpbnRlcnBvbGF0ZU51bWJlcikpKSh5KSkpO1xuICB9O1xuXG4gIHNjYWxlLmRvbWFpbiA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChkb21haW4gPSBtYXAuY2FsbChfLCBudW1iZXIpLCBjbGFtcCA9PT0gaWRlbnRpdHkgfHwgKGNsYW1wID0gY2xhbXBlcihkb21haW4pKSwgcmVzY2FsZSgpKSA6IGRvbWFpbi5zbGljZSgpO1xuICB9O1xuXG4gIHNjYWxlLnJhbmdlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHJhbmdlID0gc2xpY2UuY2FsbChfKSwgcmVzY2FsZSgpKSA6IHJhbmdlLnNsaWNlKCk7XG4gIH07XG5cbiAgc2NhbGUucmFuZ2VSb3VuZCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gcmFuZ2UgPSBzbGljZS5jYWxsKF8pLCBpbnRlcnBvbGF0ZSA9IGludGVycG9sYXRlUm91bmQsIHJlc2NhbGUoKTtcbiAgfTtcblxuICBzY2FsZS5jbGFtcCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChjbGFtcCA9IF8gPyBjbGFtcGVyKGRvbWFpbikgOiBpZGVudGl0eSwgc2NhbGUpIDogY2xhbXAgIT09IGlkZW50aXR5O1xuICB9O1xuXG4gIHNjYWxlLmludGVycG9sYXRlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGludGVycG9sYXRlID0gXywgcmVzY2FsZSgpKSA6IGludGVycG9sYXRlO1xuICB9O1xuXG4gIHNjYWxlLnVua25vd24gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodW5rbm93biA9IF8sIHNjYWxlKSA6IHVua25vd247XG4gIH07XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKHQsIHUpIHtcbiAgICB0cmFuc2Zvcm0gPSB0LCB1bnRyYW5zZm9ybSA9IHU7XG4gICAgcmV0dXJuIHJlc2NhbGUoKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29udGludW91cyh0cmFuc2Zvcm0sIHVudHJhbnNmb3JtKSB7XG4gIHJldHVybiB0cmFuc2Zvcm1lcigpKHRyYW5zZm9ybSwgdW50cmFuc2Zvcm0pO1xufVxuIiwiaW1wb3J0IHtpZGVudGl0eX0gZnJvbSBcIi4vY29udGludW91c1wiO1xuaW1wb3J0IHtpbml0SW50ZXJwb2xhdG9yfSBmcm9tIFwiLi9pbml0XCI7XG5pbXBvcnQge2xpbmVhcmlzaH0gZnJvbSBcIi4vbGluZWFyXCI7XG5pbXBvcnQge2xvZ2dpc2h9IGZyb20gXCIuL2xvZ1wiO1xuaW1wb3J0IHtjb3B5fSBmcm9tIFwiLi9zZXF1ZW50aWFsXCI7XG5pbXBvcnQge3N5bWxvZ2lzaH0gZnJvbSBcIi4vc3ltbG9nXCI7XG5pbXBvcnQge3Bvd2lzaH0gZnJvbSBcIi4vcG93XCI7XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybWVyKCkge1xuICB2YXIgeDAgPSAwLFxuICAgICAgeDEgPSAwLjUsXG4gICAgICB4MiA9IDEsXG4gICAgICB0MCxcbiAgICAgIHQxLFxuICAgICAgdDIsXG4gICAgICBrMTAsXG4gICAgICBrMjEsXG4gICAgICBpbnRlcnBvbGF0b3IgPSBpZGVudGl0eSxcbiAgICAgIHRyYW5zZm9ybSxcbiAgICAgIGNsYW1wID0gZmFsc2UsXG4gICAgICB1bmtub3duO1xuXG4gIGZ1bmN0aW9uIHNjYWxlKHgpIHtcbiAgICByZXR1cm4gaXNOYU4oeCA9ICt4KSA/IHVua25vd24gOiAoeCA9IDAuNSArICgoeCA9ICt0cmFuc2Zvcm0oeCkpIC0gdDEpICogKHggPCB0MSA/IGsxMCA6IGsyMSksIGludGVycG9sYXRvcihjbGFtcCA/IE1hdGgubWF4KDAsIE1hdGgubWluKDEsIHgpKSA6IHgpKTtcbiAgfVxuXG4gIHNjYWxlLmRvbWFpbiA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0MCA9IHRyYW5zZm9ybSh4MCA9ICtfWzBdKSwgdDEgPSB0cmFuc2Zvcm0oeDEgPSArX1sxXSksIHQyID0gdHJhbnNmb3JtKHgyID0gK19bMl0pLCBrMTAgPSB0MCA9PT0gdDEgPyAwIDogMC41IC8gKHQxIC0gdDApLCBrMjEgPSB0MSA9PT0gdDIgPyAwIDogMC41IC8gKHQyIC0gdDEpLCBzY2FsZSkgOiBbeDAsIHgxLCB4Ml07XG4gIH07XG5cbiAgc2NhbGUuY2xhbXAgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoY2xhbXAgPSAhIV8sIHNjYWxlKSA6IGNsYW1wO1xuICB9O1xuXG4gIHNjYWxlLmludGVycG9sYXRvciA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChpbnRlcnBvbGF0b3IgPSBfLCBzY2FsZSkgOiBpbnRlcnBvbGF0b3I7XG4gIH07XG5cbiAgc2NhbGUudW5rbm93biA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh1bmtub3duID0gXywgc2NhbGUpIDogdW5rbm93bjtcbiAgfTtcblxuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIHRyYW5zZm9ybSA9IHQsIHQwID0gdCh4MCksIHQxID0gdCh4MSksIHQyID0gdCh4MiksIGsxMCA9IHQwID09PSB0MSA/IDAgOiAwLjUgLyAodDEgLSB0MCksIGsyMSA9IHQxID09PSB0MiA/IDAgOiAwLjUgLyAodDIgLSB0MSk7XG4gICAgcmV0dXJuIHNjYWxlO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkaXZlcmdpbmcoKSB7XG4gIHZhciBzY2FsZSA9IGxpbmVhcmlzaCh0cmFuc2Zvcm1lcigpKGlkZW50aXR5KSk7XG5cbiAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBjb3B5KHNjYWxlLCBkaXZlcmdpbmcoKSk7XG4gIH07XG5cbiAgcmV0dXJuIGluaXRJbnRlcnBvbGF0b3IuYXBwbHkoc2NhbGUsIGFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkaXZlcmdpbmdMb2coKSB7XG4gIHZhciBzY2FsZSA9IGxvZ2dpc2godHJhbnNmb3JtZXIoKSkuZG9tYWluKFswLjEsIDEsIDEwXSk7XG5cbiAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBjb3B5KHNjYWxlLCBkaXZlcmdpbmdMb2coKSkuYmFzZShzY2FsZS5iYXNlKCkpO1xuICB9O1xuXG4gIHJldHVybiBpbml0SW50ZXJwb2xhdG9yLmFwcGx5KHNjYWxlLCBhcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGl2ZXJnaW5nU3ltbG9nKCkge1xuICB2YXIgc2NhbGUgPSBzeW1sb2dpc2godHJhbnNmb3JtZXIoKSk7XG5cbiAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBjb3B5KHNjYWxlLCBkaXZlcmdpbmdTeW1sb2coKSkuY29uc3RhbnQoc2NhbGUuY29uc3RhbnQoKSk7XG4gIH07XG5cbiAgcmV0dXJuIGluaXRJbnRlcnBvbGF0b3IuYXBwbHkoc2NhbGUsIGFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkaXZlcmdpbmdQb3coKSB7XG4gIHZhciBzY2FsZSA9IHBvd2lzaCh0cmFuc2Zvcm1lcigpKTtcblxuICBzY2FsZS5jb3B5ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGNvcHkoc2NhbGUsIGRpdmVyZ2luZ1BvdygpKS5leHBvbmVudChzY2FsZS5leHBvbmVudCgpKTtcbiAgfTtcblxuICByZXR1cm4gaW5pdEludGVycG9sYXRvci5hcHBseShzY2FsZSwgYXJndW1lbnRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpdmVyZ2luZ1NxcnQoKSB7XG4gIHJldHVybiBkaXZlcmdpbmdQb3cuYXBwbHkobnVsbCwgYXJndW1lbnRzKS5leHBvbmVudCgwLjUpO1xufVxuIiwiaW1wb3J0IHttYXB9IGZyb20gXCIuL2FycmF5XCI7XG5pbXBvcnQge2xpbmVhcmlzaH0gZnJvbSBcIi4vbGluZWFyXCI7XG5pbXBvcnQgbnVtYmVyIGZyb20gXCIuL251bWJlclwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpZGVudGl0eShkb21haW4pIHtcbiAgdmFyIHVua25vd247XG5cbiAgZnVuY3Rpb24gc2NhbGUoeCkge1xuICAgIHJldHVybiBpc05hTih4ID0gK3gpID8gdW5rbm93biA6IHg7XG4gIH1cblxuICBzY2FsZS5pbnZlcnQgPSBzY2FsZTtcblxuICBzY2FsZS5kb21haW4gPSBzY2FsZS5yYW5nZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChkb21haW4gPSBtYXAuY2FsbChfLCBudW1iZXIpLCBzY2FsZSkgOiBkb21haW4uc2xpY2UoKTtcbiAgfTtcblxuICBzY2FsZS51bmtub3duID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHVua25vd24gPSBfLCBzY2FsZSkgOiB1bmtub3duO1xuICB9O1xuXG4gIHNjYWxlLmNvcHkgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gaWRlbnRpdHkoZG9tYWluKS51bmtub3duKHVua25vd24pO1xuICB9O1xuXG4gIGRvbWFpbiA9IGFyZ3VtZW50cy5sZW5ndGggPyBtYXAuY2FsbChkb21haW4sIG51bWJlcikgOiBbMCwgMV07XG5cbiAgcmV0dXJuIGxpbmVhcmlzaChzY2FsZSk7XG59XG4iLCJleHBvcnQge1xuICBkZWZhdWx0IGFzIHNjYWxlQmFuZCxcbiAgcG9pbnQgYXMgc2NhbGVQb2ludFxufSBmcm9tIFwiLi9iYW5kXCI7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgc2NhbGVJZGVudGl0eVxufSBmcm9tIFwiLi9pZGVudGl0eVwiO1xuXG5leHBvcnQge1xuICBkZWZhdWx0IGFzIHNjYWxlTGluZWFyXG59IGZyb20gXCIuL2xpbmVhclwiO1xuXG5leHBvcnQge1xuICBkZWZhdWx0IGFzIHNjYWxlTG9nXG59IGZyb20gXCIuL2xvZ1wiO1xuXG5leHBvcnQge1xuICBkZWZhdWx0IGFzIHNjYWxlU3ltbG9nXG59IGZyb20gXCIuL3N5bWxvZ1wiO1xuXG5leHBvcnQge1xuICBkZWZhdWx0IGFzIHNjYWxlT3JkaW5hbCxcbiAgaW1wbGljaXQgYXMgc2NhbGVJbXBsaWNpdFxufSBmcm9tIFwiLi9vcmRpbmFsXCI7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgc2NhbGVQb3csXG4gIHNxcnQgYXMgc2NhbGVTcXJ0XG59IGZyb20gXCIuL3Bvd1wiO1xuXG5leHBvcnQge1xuICBkZWZhdWx0IGFzIHNjYWxlUXVhbnRpbGVcbn0gZnJvbSBcIi4vcXVhbnRpbGVcIjtcblxuZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyBzY2FsZVF1YW50aXplXG59IGZyb20gXCIuL3F1YW50aXplXCI7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgc2NhbGVUaHJlc2hvbGRcbn0gZnJvbSBcIi4vdGhyZXNob2xkXCI7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgc2NhbGVUaW1lXG59IGZyb20gXCIuL3RpbWVcIjtcblxuZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyBzY2FsZVV0Y1xufSBmcm9tIFwiLi91dGNUaW1lXCI7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgc2NhbGVTZXF1ZW50aWFsLFxuICBzZXF1ZW50aWFsTG9nIGFzIHNjYWxlU2VxdWVudGlhbExvZyxcbiAgc2VxdWVudGlhbFBvdyBhcyBzY2FsZVNlcXVlbnRpYWxQb3csXG4gIHNlcXVlbnRpYWxTcXJ0IGFzIHNjYWxlU2VxdWVudGlhbFNxcnQsXG4gIHNlcXVlbnRpYWxTeW1sb2cgYXMgc2NhbGVTZXF1ZW50aWFsU3ltbG9nXG59IGZyb20gXCIuL3NlcXVlbnRpYWxcIjtcblxuZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyBzY2FsZVNlcXVlbnRpYWxRdWFudGlsZVxufSBmcm9tIFwiLi9zZXF1ZW50aWFsUXVhbnRpbGVcIjtcblxuZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyBzY2FsZURpdmVyZ2luZyxcbiAgZGl2ZXJnaW5nTG9nIGFzIHNjYWxlRGl2ZXJnaW5nTG9nLFxuICBkaXZlcmdpbmdQb3cgYXMgc2NhbGVEaXZlcmdpbmdQb3csXG4gIGRpdmVyZ2luZ1NxcnQgYXMgc2NhbGVEaXZlcmdpbmdTcXJ0LFxuICBkaXZlcmdpbmdTeW1sb2cgYXMgc2NhbGVEaXZlcmdpbmdTeW1sb2dcbn0gZnJvbSBcIi4vZGl2ZXJnaW5nXCI7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgdGlja0Zvcm1hdFxufSBmcm9tIFwiLi90aWNrRm9ybWF0XCI7XG4iLCJleHBvcnQgZnVuY3Rpb24gaW5pdFJhbmdlKGRvbWFpbiwgcmFuZ2UpIHtcbiAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgY2FzZSAwOiBicmVhaztcbiAgICBjYXNlIDE6IHRoaXMucmFuZ2UoZG9tYWluKTsgYnJlYWs7XG4gICAgZGVmYXVsdDogdGhpcy5yYW5nZShyYW5nZSkuZG9tYWluKGRvbWFpbik7IGJyZWFrO1xuICB9XG4gIHJldHVybiB0aGlzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5pdEludGVycG9sYXRvcihkb21haW4sIGludGVycG9sYXRvcikge1xuICBzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICBjYXNlIDA6IGJyZWFrO1xuICAgIGNhc2UgMTogdGhpcy5pbnRlcnBvbGF0b3IoZG9tYWluKTsgYnJlYWs7XG4gICAgZGVmYXVsdDogdGhpcy5pbnRlcnBvbGF0b3IoaW50ZXJwb2xhdG9yKS5kb21haW4oZG9tYWluKTsgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59XG4iLCJpbXBvcnQge3RpY2tzLCB0aWNrSW5jcmVtZW50fSBmcm9tIFwiZDMtYXJyYXlcIjtcbmltcG9ydCBjb250aW51b3VzLCB7Y29weSwgaWRlbnRpdHl9IGZyb20gXCIuL2NvbnRpbnVvdXNcIjtcbmltcG9ydCB7aW5pdFJhbmdlfSBmcm9tIFwiLi9pbml0XCI7XG5pbXBvcnQgdGlja0Zvcm1hdCBmcm9tIFwiLi90aWNrRm9ybWF0XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBsaW5lYXJpc2goc2NhbGUpIHtcbiAgdmFyIGRvbWFpbiA9IHNjYWxlLmRvbWFpbjtcblxuICBzY2FsZS50aWNrcyA9IGZ1bmN0aW9uKGNvdW50KSB7XG4gICAgdmFyIGQgPSBkb21haW4oKTtcbiAgICByZXR1cm4gdGlja3MoZFswXSwgZFtkLmxlbmd0aCAtIDFdLCBjb3VudCA9PSBudWxsID8gMTAgOiBjb3VudCk7XG4gIH07XG5cbiAgc2NhbGUudGlja0Zvcm1hdCA9IGZ1bmN0aW9uKGNvdW50LCBzcGVjaWZpZXIpIHtcbiAgICB2YXIgZCA9IGRvbWFpbigpO1xuICAgIHJldHVybiB0aWNrRm9ybWF0KGRbMF0sIGRbZC5sZW5ndGggLSAxXSwgY291bnQgPT0gbnVsbCA/IDEwIDogY291bnQsIHNwZWNpZmllcik7XG4gIH07XG5cbiAgc2NhbGUubmljZSA9IGZ1bmN0aW9uKGNvdW50KSB7XG4gICAgaWYgKGNvdW50ID09IG51bGwpIGNvdW50ID0gMTA7XG5cbiAgICB2YXIgZCA9IGRvbWFpbigpLFxuICAgICAgICBpMCA9IDAsXG4gICAgICAgIGkxID0gZC5sZW5ndGggLSAxLFxuICAgICAgICBzdGFydCA9IGRbaTBdLFxuICAgICAgICBzdG9wID0gZFtpMV0sXG4gICAgICAgIHN0ZXA7XG5cbiAgICBpZiAoc3RvcCA8IHN0YXJ0KSB7XG4gICAgICBzdGVwID0gc3RhcnQsIHN0YXJ0ID0gc3RvcCwgc3RvcCA9IHN0ZXA7XG4gICAgICBzdGVwID0gaTAsIGkwID0gaTEsIGkxID0gc3RlcDtcbiAgICB9XG5cbiAgICBzdGVwID0gdGlja0luY3JlbWVudChzdGFydCwgc3RvcCwgY291bnQpO1xuXG4gICAgaWYgKHN0ZXAgPiAwKSB7XG4gICAgICBzdGFydCA9IE1hdGguZmxvb3Ioc3RhcnQgLyBzdGVwKSAqIHN0ZXA7XG4gICAgICBzdG9wID0gTWF0aC5jZWlsKHN0b3AgLyBzdGVwKSAqIHN0ZXA7XG4gICAgICBzdGVwID0gdGlja0luY3JlbWVudChzdGFydCwgc3RvcCwgY291bnQpO1xuICAgIH0gZWxzZSBpZiAoc3RlcCA8IDApIHtcbiAgICAgIHN0YXJ0ID0gTWF0aC5jZWlsKHN0YXJ0ICogc3RlcCkgLyBzdGVwO1xuICAgICAgc3RvcCA9IE1hdGguZmxvb3Ioc3RvcCAqIHN0ZXApIC8gc3RlcDtcbiAgICAgIHN0ZXAgPSB0aWNrSW5jcmVtZW50KHN0YXJ0LCBzdG9wLCBjb3VudCk7XG4gICAgfVxuXG4gICAgaWYgKHN0ZXAgPiAwKSB7XG4gICAgICBkW2kwXSA9IE1hdGguZmxvb3Ioc3RhcnQgLyBzdGVwKSAqIHN0ZXA7XG4gICAgICBkW2kxXSA9IE1hdGguY2VpbChzdG9wIC8gc3RlcCkgKiBzdGVwO1xuICAgICAgZG9tYWluKGQpO1xuICAgIH0gZWxzZSBpZiAoc3RlcCA8IDApIHtcbiAgICAgIGRbaTBdID0gTWF0aC5jZWlsKHN0YXJ0ICogc3RlcCkgLyBzdGVwO1xuICAgICAgZFtpMV0gPSBNYXRoLmZsb29yKHN0b3AgKiBzdGVwKSAvIHN0ZXA7XG4gICAgICBkb21haW4oZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNjYWxlO1xuICB9O1xuXG4gIHJldHVybiBzY2FsZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbGluZWFyKCkge1xuICB2YXIgc2NhbGUgPSBjb250aW51b3VzKGlkZW50aXR5LCBpZGVudGl0eSk7XG5cbiAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBjb3B5KHNjYWxlLCBsaW5lYXIoKSk7XG4gIH07XG5cbiAgaW5pdFJhbmdlLmFwcGx5KHNjYWxlLCBhcmd1bWVudHMpO1xuXG4gIHJldHVybiBsaW5lYXJpc2goc2NhbGUpO1xufVxuIiwiaW1wb3J0IHt0aWNrc30gZnJvbSBcImQzLWFycmF5XCI7XG5pbXBvcnQge2Zvcm1hdH0gZnJvbSBcImQzLWZvcm1hdFwiO1xuaW1wb3J0IG5pY2UgZnJvbSBcIi4vbmljZVwiO1xuaW1wb3J0IHtjb3B5LCB0cmFuc2Zvcm1lcn0gZnJvbSBcIi4vY29udGludW91c1wiO1xuaW1wb3J0IHtpbml0UmFuZ2V9IGZyb20gXCIuL2luaXRcIjtcblxuZnVuY3Rpb24gdHJhbnNmb3JtTG9nKHgpIHtcbiAgcmV0dXJuIE1hdGgubG9nKHgpO1xufVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm1FeHAoeCkge1xuICByZXR1cm4gTWF0aC5leHAoeCk7XG59XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybUxvZ24oeCkge1xuICByZXR1cm4gLU1hdGgubG9nKC14KTtcbn1cblxuZnVuY3Rpb24gdHJhbnNmb3JtRXhwbih4KSB7XG4gIHJldHVybiAtTWF0aC5leHAoLXgpO1xufVxuXG5mdW5jdGlvbiBwb3cxMCh4KSB7XG4gIHJldHVybiBpc0Zpbml0ZSh4KSA/ICsoXCIxZVwiICsgeCkgOiB4IDwgMCA/IDAgOiB4O1xufVxuXG5mdW5jdGlvbiBwb3dwKGJhc2UpIHtcbiAgcmV0dXJuIGJhc2UgPT09IDEwID8gcG93MTBcbiAgICAgIDogYmFzZSA9PT0gTWF0aC5FID8gTWF0aC5leHBcbiAgICAgIDogZnVuY3Rpb24oeCkgeyByZXR1cm4gTWF0aC5wb3coYmFzZSwgeCk7IH07XG59XG5cbmZ1bmN0aW9uIGxvZ3AoYmFzZSkge1xuICByZXR1cm4gYmFzZSA9PT0gTWF0aC5FID8gTWF0aC5sb2dcbiAgICAgIDogYmFzZSA9PT0gMTAgJiYgTWF0aC5sb2cxMFxuICAgICAgfHwgYmFzZSA9PT0gMiAmJiBNYXRoLmxvZzJcbiAgICAgIHx8IChiYXNlID0gTWF0aC5sb2coYmFzZSksIGZ1bmN0aW9uKHgpIHsgcmV0dXJuIE1hdGgubG9nKHgpIC8gYmFzZTsgfSk7XG59XG5cbmZ1bmN0aW9uIHJlZmxlY3QoZikge1xuICByZXR1cm4gZnVuY3Rpb24oeCkge1xuICAgIHJldHVybiAtZigteCk7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2dnaXNoKHRyYW5zZm9ybSkge1xuICB2YXIgc2NhbGUgPSB0cmFuc2Zvcm0odHJhbnNmb3JtTG9nLCB0cmFuc2Zvcm1FeHApLFxuICAgICAgZG9tYWluID0gc2NhbGUuZG9tYWluLFxuICAgICAgYmFzZSA9IDEwLFxuICAgICAgbG9ncyxcbiAgICAgIHBvd3M7XG5cbiAgZnVuY3Rpb24gcmVzY2FsZSgpIHtcbiAgICBsb2dzID0gbG9ncChiYXNlKSwgcG93cyA9IHBvd3AoYmFzZSk7XG4gICAgaWYgKGRvbWFpbigpWzBdIDwgMCkge1xuICAgICAgbG9ncyA9IHJlZmxlY3QobG9ncyksIHBvd3MgPSByZWZsZWN0KHBvd3MpO1xuICAgICAgdHJhbnNmb3JtKHRyYW5zZm9ybUxvZ24sIHRyYW5zZm9ybUV4cG4pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0cmFuc2Zvcm0odHJhbnNmb3JtTG9nLCB0cmFuc2Zvcm1FeHApO1xuICAgIH1cbiAgICByZXR1cm4gc2NhbGU7XG4gIH1cblxuICBzY2FsZS5iYXNlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGJhc2UgPSArXywgcmVzY2FsZSgpKSA6IGJhc2U7XG4gIH07XG5cbiAgc2NhbGUuZG9tYWluID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGRvbWFpbihfKSwgcmVzY2FsZSgpKSA6IGRvbWFpbigpO1xuICB9O1xuXG4gIHNjYWxlLnRpY2tzID0gZnVuY3Rpb24oY291bnQpIHtcbiAgICB2YXIgZCA9IGRvbWFpbigpLFxuICAgICAgICB1ID0gZFswXSxcbiAgICAgICAgdiA9IGRbZC5sZW5ndGggLSAxXSxcbiAgICAgICAgcjtcblxuICAgIGlmIChyID0gdiA8IHUpIGkgPSB1LCB1ID0gdiwgdiA9IGk7XG5cbiAgICB2YXIgaSA9IGxvZ3ModSksXG4gICAgICAgIGogPSBsb2dzKHYpLFxuICAgICAgICBwLFxuICAgICAgICBrLFxuICAgICAgICB0LFxuICAgICAgICBuID0gY291bnQgPT0gbnVsbCA/IDEwIDogK2NvdW50LFxuICAgICAgICB6ID0gW107XG5cbiAgICBpZiAoIShiYXNlICUgMSkgJiYgaiAtIGkgPCBuKSB7XG4gICAgICBpID0gTWF0aC5yb3VuZChpKSAtIDEsIGogPSBNYXRoLnJvdW5kKGopICsgMTtcbiAgICAgIGlmICh1ID4gMCkgZm9yICg7IGkgPCBqOyArK2kpIHtcbiAgICAgICAgZm9yIChrID0gMSwgcCA9IHBvd3MoaSk7IGsgPCBiYXNlOyArK2spIHtcbiAgICAgICAgICB0ID0gcCAqIGs7XG4gICAgICAgICAgaWYgKHQgPCB1KSBjb250aW51ZTtcbiAgICAgICAgICBpZiAodCA+IHYpIGJyZWFrO1xuICAgICAgICAgIHoucHVzaCh0KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGZvciAoOyBpIDwgajsgKytpKSB7XG4gICAgICAgIGZvciAoayA9IGJhc2UgLSAxLCBwID0gcG93cyhpKTsgayA+PSAxOyAtLWspIHtcbiAgICAgICAgICB0ID0gcCAqIGs7XG4gICAgICAgICAgaWYgKHQgPCB1KSBjb250aW51ZTtcbiAgICAgICAgICBpZiAodCA+IHYpIGJyZWFrO1xuICAgICAgICAgIHoucHVzaCh0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB6ID0gdGlja3MoaSwgaiwgTWF0aC5taW4oaiAtIGksIG4pKS5tYXAocG93cyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHIgPyB6LnJldmVyc2UoKSA6IHo7XG4gIH07XG5cbiAgc2NhbGUudGlja0Zvcm1hdCA9IGZ1bmN0aW9uKGNvdW50LCBzcGVjaWZpZXIpIHtcbiAgICBpZiAoc3BlY2lmaWVyID09IG51bGwpIHNwZWNpZmllciA9IGJhc2UgPT09IDEwID8gXCIuMGVcIiA6IFwiLFwiO1xuICAgIGlmICh0eXBlb2Ygc3BlY2lmaWVyICE9PSBcImZ1bmN0aW9uXCIpIHNwZWNpZmllciA9IGZvcm1hdChzcGVjaWZpZXIpO1xuICAgIGlmIChjb3VudCA9PT0gSW5maW5pdHkpIHJldHVybiBzcGVjaWZpZXI7XG4gICAgaWYgKGNvdW50ID09IG51bGwpIGNvdW50ID0gMTA7XG4gICAgdmFyIGsgPSBNYXRoLm1heCgxLCBiYXNlICogY291bnQgLyBzY2FsZS50aWNrcygpLmxlbmd0aCk7IC8vIFRPRE8gZmFzdCBlc3RpbWF0ZT9cbiAgICByZXR1cm4gZnVuY3Rpb24oZCkge1xuICAgICAgdmFyIGkgPSBkIC8gcG93cyhNYXRoLnJvdW5kKGxvZ3MoZCkpKTtcbiAgICAgIGlmIChpICogYmFzZSA8IGJhc2UgLSAwLjUpIGkgKj0gYmFzZTtcbiAgICAgIHJldHVybiBpIDw9IGsgPyBzcGVjaWZpZXIoZCkgOiBcIlwiO1xuICAgIH07XG4gIH07XG5cbiAgc2NhbGUubmljZSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBkb21haW4obmljZShkb21haW4oKSwge1xuICAgICAgZmxvb3I6IGZ1bmN0aW9uKHgpIHsgcmV0dXJuIHBvd3MoTWF0aC5mbG9vcihsb2dzKHgpKSk7IH0sXG4gICAgICBjZWlsOiBmdW5jdGlvbih4KSB7IHJldHVybiBwb3dzKE1hdGguY2VpbChsb2dzKHgpKSk7IH1cbiAgICB9KSk7XG4gIH07XG5cbiAgcmV0dXJuIHNjYWxlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBsb2coKSB7XG4gIHZhciBzY2FsZSA9IGxvZ2dpc2godHJhbnNmb3JtZXIoKSkuZG9tYWluKFsxLCAxMF0pO1xuXG4gIHNjYWxlLmNvcHkgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gY29weShzY2FsZSwgbG9nKCkpLmJhc2Uoc2NhbGUuYmFzZSgpKTtcbiAgfTtcblxuICBpbml0UmFuZ2UuYXBwbHkoc2NhbGUsIGFyZ3VtZW50cyk7XG5cbiAgcmV0dXJuIHNjYWxlO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oZG9tYWluLCBpbnRlcnZhbCkge1xuICBkb21haW4gPSBkb21haW4uc2xpY2UoKTtcblxuICB2YXIgaTAgPSAwLFxuICAgICAgaTEgPSBkb21haW4ubGVuZ3RoIC0gMSxcbiAgICAgIHgwID0gZG9tYWluW2kwXSxcbiAgICAgIHgxID0gZG9tYWluW2kxXSxcbiAgICAgIHQ7XG5cbiAgaWYgKHgxIDwgeDApIHtcbiAgICB0ID0gaTAsIGkwID0gaTEsIGkxID0gdDtcbiAgICB0ID0geDAsIHgwID0geDEsIHgxID0gdDtcbiAgfVxuXG4gIGRvbWFpbltpMF0gPSBpbnRlcnZhbC5mbG9vcih4MCk7XG4gIGRvbWFpbltpMV0gPSBpbnRlcnZhbC5jZWlsKHgxKTtcbiAgcmV0dXJuIGRvbWFpbjtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuICt4O1xufVxuIiwiaW1wb3J0IHttYXB9IGZyb20gXCJkMy1jb2xsZWN0aW9uXCI7XG5pbXBvcnQge3NsaWNlfSBmcm9tIFwiLi9hcnJheVwiO1xuaW1wb3J0IHtpbml0UmFuZ2V9IGZyb20gXCIuL2luaXRcIjtcblxuZXhwb3J0IHZhciBpbXBsaWNpdCA9IHtuYW1lOiBcImltcGxpY2l0XCJ9O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBvcmRpbmFsKCkge1xuICB2YXIgaW5kZXggPSBtYXAoKSxcbiAgICAgIGRvbWFpbiA9IFtdLFxuICAgICAgcmFuZ2UgPSBbXSxcbiAgICAgIHVua25vd24gPSBpbXBsaWNpdDtcblxuICBmdW5jdGlvbiBzY2FsZShkKSB7XG4gICAgdmFyIGtleSA9IGQgKyBcIlwiLCBpID0gaW5kZXguZ2V0KGtleSk7XG4gICAgaWYgKCFpKSB7XG4gICAgICBpZiAodW5rbm93biAhPT0gaW1wbGljaXQpIHJldHVybiB1bmtub3duO1xuICAgICAgaW5kZXguc2V0KGtleSwgaSA9IGRvbWFpbi5wdXNoKGQpKTtcbiAgICB9XG4gICAgcmV0dXJuIHJhbmdlWyhpIC0gMSkgJSByYW5nZS5sZW5ndGhdO1xuICB9XG5cbiAgc2NhbGUuZG9tYWluID0gZnVuY3Rpb24oXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGRvbWFpbi5zbGljZSgpO1xuICAgIGRvbWFpbiA9IFtdLCBpbmRleCA9IG1hcCgpO1xuICAgIHZhciBpID0gLTEsIG4gPSBfLmxlbmd0aCwgZCwga2V5O1xuICAgIHdoaWxlICgrK2kgPCBuKSBpZiAoIWluZGV4LmhhcyhrZXkgPSAoZCA9IF9baV0pICsgXCJcIikpIGluZGV4LnNldChrZXksIGRvbWFpbi5wdXNoKGQpKTtcbiAgICByZXR1cm4gc2NhbGU7XG4gIH07XG5cbiAgc2NhbGUucmFuZ2UgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocmFuZ2UgPSBzbGljZS5jYWxsKF8pLCBzY2FsZSkgOiByYW5nZS5zbGljZSgpO1xuICB9O1xuXG4gIHNjYWxlLnVua25vd24gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodW5rbm93biA9IF8sIHNjYWxlKSA6IHVua25vd247XG4gIH07XG5cbiAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBvcmRpbmFsKGRvbWFpbiwgcmFuZ2UpLnVua25vd24odW5rbm93bik7XG4gIH07XG5cbiAgaW5pdFJhbmdlLmFwcGx5KHNjYWxlLCBhcmd1bWVudHMpO1xuXG4gIHJldHVybiBzY2FsZTtcbn1cbiIsImltcG9ydCB7bGluZWFyaXNofSBmcm9tIFwiLi9saW5lYXJcIjtcbmltcG9ydCB7Y29weSwgaWRlbnRpdHksIHRyYW5zZm9ybWVyfSBmcm9tIFwiLi9jb250aW51b3VzXCI7XG5pbXBvcnQge2luaXRSYW5nZX0gZnJvbSBcIi4vaW5pdFwiO1xuXG5mdW5jdGlvbiB0cmFuc2Zvcm1Qb3coZXhwb25lbnQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4geCA8IDAgPyAtTWF0aC5wb3coLXgsIGV4cG9uZW50KSA6IE1hdGgucG93KHgsIGV4cG9uZW50KTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gdHJhbnNmb3JtU3FydCh4KSB7XG4gIHJldHVybiB4IDwgMCA/IC1NYXRoLnNxcnQoLXgpIDogTWF0aC5zcXJ0KHgpO1xufVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm1TcXVhcmUoeCkge1xuICByZXR1cm4geCA8IDAgPyAteCAqIHggOiB4ICogeDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBvd2lzaCh0cmFuc2Zvcm0pIHtcbiAgdmFyIHNjYWxlID0gdHJhbnNmb3JtKGlkZW50aXR5LCBpZGVudGl0eSksXG4gICAgICBleHBvbmVudCA9IDE7XG5cbiAgZnVuY3Rpb24gcmVzY2FsZSgpIHtcbiAgICByZXR1cm4gZXhwb25lbnQgPT09IDEgPyB0cmFuc2Zvcm0oaWRlbnRpdHksIGlkZW50aXR5KVxuICAgICAgICA6IGV4cG9uZW50ID09PSAwLjUgPyB0cmFuc2Zvcm0odHJhbnNmb3JtU3FydCwgdHJhbnNmb3JtU3F1YXJlKVxuICAgICAgICA6IHRyYW5zZm9ybSh0cmFuc2Zvcm1Qb3coZXhwb25lbnQpLCB0cmFuc2Zvcm1Qb3coMSAvIGV4cG9uZW50KSk7XG4gIH1cblxuICBzY2FsZS5leHBvbmVudCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChleHBvbmVudCA9ICtfLCByZXNjYWxlKCkpIDogZXhwb25lbnQ7XG4gIH07XG5cbiAgcmV0dXJuIGxpbmVhcmlzaChzY2FsZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHBvdygpIHtcbiAgdmFyIHNjYWxlID0gcG93aXNoKHRyYW5zZm9ybWVyKCkpO1xuXG4gIHNjYWxlLmNvcHkgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gY29weShzY2FsZSwgcG93KCkpLmV4cG9uZW50KHNjYWxlLmV4cG9uZW50KCkpO1xuICB9O1xuXG4gIGluaXRSYW5nZS5hcHBseShzY2FsZSwgYXJndW1lbnRzKTtcblxuICByZXR1cm4gc2NhbGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzcXJ0KCkge1xuICByZXR1cm4gcG93LmFwcGx5KG51bGwsIGFyZ3VtZW50cykuZXhwb25lbnQoMC41KTtcbn1cbiIsImltcG9ydCB7YXNjZW5kaW5nLCBiaXNlY3QsIHF1YW50aWxlIGFzIHRocmVzaG9sZH0gZnJvbSBcImQzLWFycmF5XCI7XG5pbXBvcnQge3NsaWNlfSBmcm9tIFwiLi9hcnJheVwiO1xuaW1wb3J0IHtpbml0UmFuZ2V9IGZyb20gXCIuL2luaXRcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcXVhbnRpbGUoKSB7XG4gIHZhciBkb21haW4gPSBbXSxcbiAgICAgIHJhbmdlID0gW10sXG4gICAgICB0aHJlc2hvbGRzID0gW10sXG4gICAgICB1bmtub3duO1xuXG4gIGZ1bmN0aW9uIHJlc2NhbGUoKSB7XG4gICAgdmFyIGkgPSAwLCBuID0gTWF0aC5tYXgoMSwgcmFuZ2UubGVuZ3RoKTtcbiAgICB0aHJlc2hvbGRzID0gbmV3IEFycmF5KG4gLSAxKTtcbiAgICB3aGlsZSAoKytpIDwgbikgdGhyZXNob2xkc1tpIC0gMV0gPSB0aHJlc2hvbGQoZG9tYWluLCBpIC8gbik7XG4gICAgcmV0dXJuIHNjYWxlO1xuICB9XG5cbiAgZnVuY3Rpb24gc2NhbGUoeCkge1xuICAgIHJldHVybiBpc05hTih4ID0gK3gpID8gdW5rbm93biA6IHJhbmdlW2Jpc2VjdCh0aHJlc2hvbGRzLCB4KV07XG4gIH1cblxuICBzY2FsZS5pbnZlcnRFeHRlbnQgPSBmdW5jdGlvbih5KSB7XG4gICAgdmFyIGkgPSByYW5nZS5pbmRleE9mKHkpO1xuICAgIHJldHVybiBpIDwgMCA/IFtOYU4sIE5hTl0gOiBbXG4gICAgICBpID4gMCA/IHRocmVzaG9sZHNbaSAtIDFdIDogZG9tYWluWzBdLFxuICAgICAgaSA8IHRocmVzaG9sZHMubGVuZ3RoID8gdGhyZXNob2xkc1tpXSA6IGRvbWFpbltkb21haW4ubGVuZ3RoIC0gMV1cbiAgICBdO1xuICB9O1xuXG4gIHNjYWxlLmRvbWFpbiA9IGZ1bmN0aW9uKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBkb21haW4uc2xpY2UoKTtcbiAgICBkb21haW4gPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMCwgbiA9IF8ubGVuZ3RoLCBkOyBpIDwgbjsgKytpKSBpZiAoZCA9IF9baV0sIGQgIT0gbnVsbCAmJiAhaXNOYU4oZCA9ICtkKSkgZG9tYWluLnB1c2goZCk7XG4gICAgZG9tYWluLnNvcnQoYXNjZW5kaW5nKTtcbiAgICByZXR1cm4gcmVzY2FsZSgpO1xuICB9O1xuXG4gIHNjYWxlLnJhbmdlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHJhbmdlID0gc2xpY2UuY2FsbChfKSwgcmVzY2FsZSgpKSA6IHJhbmdlLnNsaWNlKCk7XG4gIH07XG5cbiAgc2NhbGUudW5rbm93biA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh1bmtub3duID0gXywgc2NhbGUpIDogdW5rbm93bjtcbiAgfTtcblxuICBzY2FsZS5xdWFudGlsZXMgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhyZXNob2xkcy5zbGljZSgpO1xuICB9O1xuXG4gIHNjYWxlLmNvcHkgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gcXVhbnRpbGUoKVxuICAgICAgICAuZG9tYWluKGRvbWFpbilcbiAgICAgICAgLnJhbmdlKHJhbmdlKVxuICAgICAgICAudW5rbm93bih1bmtub3duKTtcbiAgfTtcblxuICByZXR1cm4gaW5pdFJhbmdlLmFwcGx5KHNjYWxlLCBhcmd1bWVudHMpO1xufVxuIiwiaW1wb3J0IHtiaXNlY3R9IGZyb20gXCJkMy1hcnJheVwiO1xuaW1wb3J0IHtzbGljZX0gZnJvbSBcIi4vYXJyYXlcIjtcbmltcG9ydCB7bGluZWFyaXNofSBmcm9tIFwiLi9saW5lYXJcIjtcbmltcG9ydCB7aW5pdFJhbmdlfSBmcm9tIFwiLi9pbml0XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHF1YW50aXplKCkge1xuICB2YXIgeDAgPSAwLFxuICAgICAgeDEgPSAxLFxuICAgICAgbiA9IDEsXG4gICAgICBkb21haW4gPSBbMC41XSxcbiAgICAgIHJhbmdlID0gWzAsIDFdLFxuICAgICAgdW5rbm93bjtcblxuICBmdW5jdGlvbiBzY2FsZSh4KSB7XG4gICAgcmV0dXJuIHggPD0geCA/IHJhbmdlW2Jpc2VjdChkb21haW4sIHgsIDAsIG4pXSA6IHVua25vd247XG4gIH1cblxuICBmdW5jdGlvbiByZXNjYWxlKCkge1xuICAgIHZhciBpID0gLTE7XG4gICAgZG9tYWluID0gbmV3IEFycmF5KG4pO1xuICAgIHdoaWxlICgrK2kgPCBuKSBkb21haW5baV0gPSAoKGkgKyAxKSAqIHgxIC0gKGkgLSBuKSAqIHgwKSAvIChuICsgMSk7XG4gICAgcmV0dXJuIHNjYWxlO1xuICB9XG5cbiAgc2NhbGUuZG9tYWluID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHgwID0gK19bMF0sIHgxID0gK19bMV0sIHJlc2NhbGUoKSkgOiBbeDAsIHgxXTtcbiAgfTtcblxuICBzY2FsZS5yYW5nZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChuID0gKHJhbmdlID0gc2xpY2UuY2FsbChfKSkubGVuZ3RoIC0gMSwgcmVzY2FsZSgpKSA6IHJhbmdlLnNsaWNlKCk7XG4gIH07XG5cbiAgc2NhbGUuaW52ZXJ0RXh0ZW50ID0gZnVuY3Rpb24oeSkge1xuICAgIHZhciBpID0gcmFuZ2UuaW5kZXhPZih5KTtcbiAgICByZXR1cm4gaSA8IDAgPyBbTmFOLCBOYU5dXG4gICAgICAgIDogaSA8IDEgPyBbeDAsIGRvbWFpblswXV1cbiAgICAgICAgOiBpID49IG4gPyBbZG9tYWluW24gLSAxXSwgeDFdXG4gICAgICAgIDogW2RvbWFpbltpIC0gMV0sIGRvbWFpbltpXV07XG4gIH07XG5cbiAgc2NhbGUudW5rbm93biA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh1bmtub3duID0gXywgc2NhbGUpIDogc2NhbGU7XG4gIH07XG5cbiAgc2NhbGUudGhyZXNob2xkcyA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBkb21haW4uc2xpY2UoKTtcbiAgfTtcblxuICBzY2FsZS5jb3B5ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHF1YW50aXplKClcbiAgICAgICAgLmRvbWFpbihbeDAsIHgxXSlcbiAgICAgICAgLnJhbmdlKHJhbmdlKVxuICAgICAgICAudW5rbm93bih1bmtub3duKTtcbiAgfTtcblxuICByZXR1cm4gaW5pdFJhbmdlLmFwcGx5KGxpbmVhcmlzaChzY2FsZSksIGFyZ3VtZW50cyk7XG59XG4iLCJpbXBvcnQge2lkZW50aXR5fSBmcm9tIFwiLi9jb250aW51b3VzXCI7XG5pbXBvcnQge2luaXRJbnRlcnBvbGF0b3J9IGZyb20gXCIuL2luaXRcIjtcbmltcG9ydCB7bGluZWFyaXNofSBmcm9tIFwiLi9saW5lYXJcIjtcbmltcG9ydCB7bG9nZ2lzaH0gZnJvbSBcIi4vbG9nXCI7XG5pbXBvcnQge3N5bWxvZ2lzaH0gZnJvbSBcIi4vc3ltbG9nXCI7XG5pbXBvcnQge3Bvd2lzaH0gZnJvbSBcIi4vcG93XCI7XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybWVyKCkge1xuICB2YXIgeDAgPSAwLFxuICAgICAgeDEgPSAxLFxuICAgICAgdDAsXG4gICAgICB0MSxcbiAgICAgIGsxMCxcbiAgICAgIHRyYW5zZm9ybSxcbiAgICAgIGludGVycG9sYXRvciA9IGlkZW50aXR5LFxuICAgICAgY2xhbXAgPSBmYWxzZSxcbiAgICAgIHVua25vd247XG5cbiAgZnVuY3Rpb24gc2NhbGUoeCkge1xuICAgIHJldHVybiBpc05hTih4ID0gK3gpID8gdW5rbm93biA6IGludGVycG9sYXRvcihrMTAgPT09IDAgPyAwLjUgOiAoeCA9ICh0cmFuc2Zvcm0oeCkgLSB0MCkgKiBrMTAsIGNsYW1wID8gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgeCkpIDogeCkpO1xuICB9XG5cbiAgc2NhbGUuZG9tYWluID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHQwID0gdHJhbnNmb3JtKHgwID0gK19bMF0pLCB0MSA9IHRyYW5zZm9ybSh4MSA9ICtfWzFdKSwgazEwID0gdDAgPT09IHQxID8gMCA6IDEgLyAodDEgLSB0MCksIHNjYWxlKSA6IFt4MCwgeDFdO1xuICB9O1xuXG4gIHNjYWxlLmNsYW1wID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGNsYW1wID0gISFfLCBzY2FsZSkgOiBjbGFtcDtcbiAgfTtcblxuICBzY2FsZS5pbnRlcnBvbGF0b3IgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoaW50ZXJwb2xhdG9yID0gXywgc2NhbGUpIDogaW50ZXJwb2xhdG9yO1xuICB9O1xuXG4gIHNjYWxlLnVua25vd24gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodW5rbm93biA9IF8sIHNjYWxlKSA6IHVua25vd247XG4gIH07XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICB0cmFuc2Zvcm0gPSB0LCB0MCA9IHQoeDApLCB0MSA9IHQoeDEpLCBrMTAgPSB0MCA9PT0gdDEgPyAwIDogMSAvICh0MSAtIHQwKTtcbiAgICByZXR1cm4gc2NhbGU7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb3B5KHNvdXJjZSwgdGFyZ2V0KSB7XG4gIHJldHVybiB0YXJnZXRcbiAgICAgIC5kb21haW4oc291cmNlLmRvbWFpbigpKVxuICAgICAgLmludGVycG9sYXRvcihzb3VyY2UuaW50ZXJwb2xhdG9yKCkpXG4gICAgICAuY2xhbXAoc291cmNlLmNsYW1wKCkpXG4gICAgICAudW5rbm93bihzb3VyY2UudW5rbm93bigpKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2VxdWVudGlhbCgpIHtcbiAgdmFyIHNjYWxlID0gbGluZWFyaXNoKHRyYW5zZm9ybWVyKCkoaWRlbnRpdHkpKTtcblxuICBzY2FsZS5jb3B5ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGNvcHkoc2NhbGUsIHNlcXVlbnRpYWwoKSk7XG4gIH07XG5cbiAgcmV0dXJuIGluaXRJbnRlcnBvbGF0b3IuYXBwbHkoc2NhbGUsIGFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXF1ZW50aWFsTG9nKCkge1xuICB2YXIgc2NhbGUgPSBsb2dnaXNoKHRyYW5zZm9ybWVyKCkpLmRvbWFpbihbMSwgMTBdKTtcblxuICBzY2FsZS5jb3B5ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGNvcHkoc2NhbGUsIHNlcXVlbnRpYWxMb2coKSkuYmFzZShzY2FsZS5iYXNlKCkpO1xuICB9O1xuXG4gIHJldHVybiBpbml0SW50ZXJwb2xhdG9yLmFwcGx5KHNjYWxlLCBhcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VxdWVudGlhbFN5bWxvZygpIHtcbiAgdmFyIHNjYWxlID0gc3ltbG9naXNoKHRyYW5zZm9ybWVyKCkpO1xuXG4gIHNjYWxlLmNvcHkgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gY29weShzY2FsZSwgc2VxdWVudGlhbFN5bWxvZygpKS5jb25zdGFudChzY2FsZS5jb25zdGFudCgpKTtcbiAgfTtcblxuICByZXR1cm4gaW5pdEludGVycG9sYXRvci5hcHBseShzY2FsZSwgYXJndW1lbnRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlcXVlbnRpYWxQb3coKSB7XG4gIHZhciBzY2FsZSA9IHBvd2lzaCh0cmFuc2Zvcm1lcigpKTtcblxuICBzY2FsZS5jb3B5ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGNvcHkoc2NhbGUsIHNlcXVlbnRpYWxQb3coKSkuZXhwb25lbnQoc2NhbGUuZXhwb25lbnQoKSk7XG4gIH07XG5cbiAgcmV0dXJuIGluaXRJbnRlcnBvbGF0b3IuYXBwbHkoc2NhbGUsIGFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXF1ZW50aWFsU3FydCgpIHtcbiAgcmV0dXJuIHNlcXVlbnRpYWxQb3cuYXBwbHkobnVsbCwgYXJndW1lbnRzKS5leHBvbmVudCgwLjUpO1xufVxuIiwiaW1wb3J0IHthc2NlbmRpbmcsIGJpc2VjdH0gZnJvbSBcImQzLWFycmF5XCI7XG5pbXBvcnQge2lkZW50aXR5fSBmcm9tIFwiLi9jb250aW51b3VzXCI7XG5pbXBvcnQge2luaXRJbnRlcnBvbGF0b3J9IGZyb20gXCIuL2luaXRcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2VxdWVudGlhbFF1YW50aWxlKCkge1xuICB2YXIgZG9tYWluID0gW10sXG4gICAgICBpbnRlcnBvbGF0b3IgPSBpZGVudGl0eTtcblxuICBmdW5jdGlvbiBzY2FsZSh4KSB7XG4gICAgaWYgKCFpc05hTih4ID0gK3gpKSByZXR1cm4gaW50ZXJwb2xhdG9yKChiaXNlY3QoZG9tYWluLCB4KSAtIDEpIC8gKGRvbWFpbi5sZW5ndGggLSAxKSk7XG4gIH1cblxuICBzY2FsZS5kb21haW4gPSBmdW5jdGlvbihfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gZG9tYWluLnNsaWNlKCk7XG4gICAgZG9tYWluID0gW107XG4gICAgZm9yICh2YXIgaSA9IDAsIG4gPSBfLmxlbmd0aCwgZDsgaSA8IG47ICsraSkgaWYgKGQgPSBfW2ldLCBkICE9IG51bGwgJiYgIWlzTmFOKGQgPSArZCkpIGRvbWFpbi5wdXNoKGQpO1xuICAgIGRvbWFpbi5zb3J0KGFzY2VuZGluZyk7XG4gICAgcmV0dXJuIHNjYWxlO1xuICB9O1xuXG4gIHNjYWxlLmludGVycG9sYXRvciA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChpbnRlcnBvbGF0b3IgPSBfLCBzY2FsZSkgOiBpbnRlcnBvbGF0b3I7XG4gIH07XG5cbiAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBzZXF1ZW50aWFsUXVhbnRpbGUoaW50ZXJwb2xhdG9yKS5kb21haW4oZG9tYWluKTtcbiAgfTtcblxuICByZXR1cm4gaW5pdEludGVycG9sYXRvci5hcHBseShzY2FsZSwgYXJndW1lbnRzKTtcbn1cbiIsImltcG9ydCB7bGluZWFyaXNofSBmcm9tIFwiLi9saW5lYXJcIjtcbmltcG9ydCB7Y29weSwgdHJhbnNmb3JtZXJ9IGZyb20gXCIuL2NvbnRpbnVvdXNcIjtcbmltcG9ydCB7aW5pdFJhbmdlfSBmcm9tIFwiLi9pbml0XCI7XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybVN5bWxvZyhjKSB7XG4gIHJldHVybiBmdW5jdGlvbih4KSB7XG4gICAgcmV0dXJuIE1hdGguc2lnbih4KSAqIE1hdGgubG9nMXAoTWF0aC5hYnMoeCAvIGMpKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gdHJhbnNmb3JtU3ltZXhwKGMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4gTWF0aC5zaWduKHgpICogTWF0aC5leHBtMShNYXRoLmFicyh4KSkgKiBjO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3ltbG9naXNoKHRyYW5zZm9ybSkge1xuICB2YXIgYyA9IDEsIHNjYWxlID0gdHJhbnNmb3JtKHRyYW5zZm9ybVN5bWxvZyhjKSwgdHJhbnNmb3JtU3ltZXhwKGMpKTtcblxuICBzY2FsZS5jb25zdGFudCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IHRyYW5zZm9ybSh0cmFuc2Zvcm1TeW1sb2coYyA9ICtfKSwgdHJhbnNmb3JtU3ltZXhwKGMpKSA6IGM7XG4gIH07XG5cbiAgcmV0dXJuIGxpbmVhcmlzaChzY2FsZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN5bWxvZygpIHtcbiAgdmFyIHNjYWxlID0gc3ltbG9naXNoKHRyYW5zZm9ybWVyKCkpO1xuXG4gIHNjYWxlLmNvcHkgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gY29weShzY2FsZSwgc3ltbG9nKCkpLmNvbnN0YW50KHNjYWxlLmNvbnN0YW50KCkpO1xuICB9O1xuXG4gIHJldHVybiBpbml0UmFuZ2UuYXBwbHkoc2NhbGUsIGFyZ3VtZW50cyk7XG59XG4iLCJpbXBvcnQge2Jpc2VjdH0gZnJvbSBcImQzLWFycmF5XCI7XG5pbXBvcnQge3NsaWNlfSBmcm9tIFwiLi9hcnJheVwiO1xuaW1wb3J0IHtpbml0UmFuZ2V9IGZyb20gXCIuL2luaXRcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdGhyZXNob2xkKCkge1xuICB2YXIgZG9tYWluID0gWzAuNV0sXG4gICAgICByYW5nZSA9IFswLCAxXSxcbiAgICAgIHVua25vd24sXG4gICAgICBuID0gMTtcblxuICBmdW5jdGlvbiBzY2FsZSh4KSB7XG4gICAgcmV0dXJuIHggPD0geCA/IHJhbmdlW2Jpc2VjdChkb21haW4sIHgsIDAsIG4pXSA6IHVua25vd247XG4gIH1cblxuICBzY2FsZS5kb21haW4gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZG9tYWluID0gc2xpY2UuY2FsbChfKSwgbiA9IE1hdGgubWluKGRvbWFpbi5sZW5ndGgsIHJhbmdlLmxlbmd0aCAtIDEpLCBzY2FsZSkgOiBkb21haW4uc2xpY2UoKTtcbiAgfTtcblxuICBzY2FsZS5yYW5nZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChyYW5nZSA9IHNsaWNlLmNhbGwoXyksIG4gPSBNYXRoLm1pbihkb21haW4ubGVuZ3RoLCByYW5nZS5sZW5ndGggLSAxKSwgc2NhbGUpIDogcmFuZ2Uuc2xpY2UoKTtcbiAgfTtcblxuICBzY2FsZS5pbnZlcnRFeHRlbnQgPSBmdW5jdGlvbih5KSB7XG4gICAgdmFyIGkgPSByYW5nZS5pbmRleE9mKHkpO1xuICAgIHJldHVybiBbZG9tYWluW2kgLSAxXSwgZG9tYWluW2ldXTtcbiAgfTtcblxuICBzY2FsZS51bmtub3duID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHVua25vd24gPSBfLCBzY2FsZSkgOiB1bmtub3duO1xuICB9O1xuXG4gIHNjYWxlLmNvcHkgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhyZXNob2xkKClcbiAgICAgICAgLmRvbWFpbihkb21haW4pXG4gICAgICAgIC5yYW5nZShyYW5nZSlcbiAgICAgICAgLnVua25vd24odW5rbm93bik7XG4gIH07XG5cbiAgcmV0dXJuIGluaXRSYW5nZS5hcHBseShzY2FsZSwgYXJndW1lbnRzKTtcbn1cbiIsImltcG9ydCB7dGlja1N0ZXB9IGZyb20gXCJkMy1hcnJheVwiO1xuaW1wb3J0IHtmb3JtYXQsIGZvcm1hdFByZWZpeCwgZm9ybWF0U3BlY2lmaWVyLCBwcmVjaXNpb25GaXhlZCwgcHJlY2lzaW9uUHJlZml4LCBwcmVjaXNpb25Sb3VuZH0gZnJvbSBcImQzLWZvcm1hdFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzdGFydCwgc3RvcCwgY291bnQsIHNwZWNpZmllcikge1xuICB2YXIgc3RlcCA9IHRpY2tTdGVwKHN0YXJ0LCBzdG9wLCBjb3VudCksXG4gICAgICBwcmVjaXNpb247XG4gIHNwZWNpZmllciA9IGZvcm1hdFNwZWNpZmllcihzcGVjaWZpZXIgPT0gbnVsbCA/IFwiLGZcIiA6IHNwZWNpZmllcik7XG4gIHN3aXRjaCAoc3BlY2lmaWVyLnR5cGUpIHtcbiAgICBjYXNlIFwic1wiOiB7XG4gICAgICB2YXIgdmFsdWUgPSBNYXRoLm1heChNYXRoLmFicyhzdGFydCksIE1hdGguYWJzKHN0b3ApKTtcbiAgICAgIGlmIChzcGVjaWZpZXIucHJlY2lzaW9uID09IG51bGwgJiYgIWlzTmFOKHByZWNpc2lvbiA9IHByZWNpc2lvblByZWZpeChzdGVwLCB2YWx1ZSkpKSBzcGVjaWZpZXIucHJlY2lzaW9uID0gcHJlY2lzaW9uO1xuICAgICAgcmV0dXJuIGZvcm1hdFByZWZpeChzcGVjaWZpZXIsIHZhbHVlKTtcbiAgICB9XG4gICAgY2FzZSBcIlwiOlxuICAgIGNhc2UgXCJlXCI6XG4gICAgY2FzZSBcImdcIjpcbiAgICBjYXNlIFwicFwiOlxuICAgIGNhc2UgXCJyXCI6IHtcbiAgICAgIGlmIChzcGVjaWZpZXIucHJlY2lzaW9uID09IG51bGwgJiYgIWlzTmFOKHByZWNpc2lvbiA9IHByZWNpc2lvblJvdW5kKHN0ZXAsIE1hdGgubWF4KE1hdGguYWJzKHN0YXJ0KSwgTWF0aC5hYnMoc3RvcCkpKSkpIHNwZWNpZmllci5wcmVjaXNpb24gPSBwcmVjaXNpb24gLSAoc3BlY2lmaWVyLnR5cGUgPT09IFwiZVwiKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlIFwiZlwiOlxuICAgIGNhc2UgXCIlXCI6IHtcbiAgICAgIGlmIChzcGVjaWZpZXIucHJlY2lzaW9uID09IG51bGwgJiYgIWlzTmFOKHByZWNpc2lvbiA9IHByZWNpc2lvbkZpeGVkKHN0ZXApKSkgc3BlY2lmaWVyLnByZWNpc2lvbiA9IHByZWNpc2lvbiAtIChzcGVjaWZpZXIudHlwZSA9PT0gXCIlXCIpICogMjtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZm9ybWF0KHNwZWNpZmllcik7XG59XG4iLCJpbXBvcnQge2Jpc2VjdG9yLCB0aWNrU3RlcH0gZnJvbSBcImQzLWFycmF5XCI7XG5pbXBvcnQge3RpbWVZZWFyLCB0aW1lTW9udGgsIHRpbWVXZWVrLCB0aW1lRGF5LCB0aW1lSG91ciwgdGltZU1pbnV0ZSwgdGltZVNlY29uZCwgdGltZU1pbGxpc2Vjb25kfSBmcm9tIFwiZDMtdGltZVwiO1xuaW1wb3J0IHt0aW1lRm9ybWF0fSBmcm9tIFwiZDMtdGltZS1mb3JtYXRcIjtcbmltcG9ydCB7bWFwfSBmcm9tIFwiLi9hcnJheVwiO1xuaW1wb3J0IGNvbnRpbnVvdXMsIHtjb3B5LCBpZGVudGl0eX0gZnJvbSBcIi4vY29udGludW91c1wiO1xuaW1wb3J0IHtpbml0UmFuZ2V9IGZyb20gXCIuL2luaXRcIjtcbmltcG9ydCBuaWNlIGZyb20gXCIuL25pY2VcIjtcblxudmFyIGR1cmF0aW9uU2Vjb25kID0gMTAwMCxcbiAgICBkdXJhdGlvbk1pbnV0ZSA9IGR1cmF0aW9uU2Vjb25kICogNjAsXG4gICAgZHVyYXRpb25Ib3VyID0gZHVyYXRpb25NaW51dGUgKiA2MCxcbiAgICBkdXJhdGlvbkRheSA9IGR1cmF0aW9uSG91ciAqIDI0LFxuICAgIGR1cmF0aW9uV2VlayA9IGR1cmF0aW9uRGF5ICogNyxcbiAgICBkdXJhdGlvbk1vbnRoID0gZHVyYXRpb25EYXkgKiAzMCxcbiAgICBkdXJhdGlvblllYXIgPSBkdXJhdGlvbkRheSAqIDM2NTtcblxuZnVuY3Rpb24gZGF0ZSh0KSB7XG4gIHJldHVybiBuZXcgRGF0ZSh0KTtcbn1cblxuZnVuY3Rpb24gbnVtYmVyKHQpIHtcbiAgcmV0dXJuIHQgaW5zdGFuY2VvZiBEYXRlID8gK3QgOiArbmV3IERhdGUoK3QpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FsZW5kYXIoeWVhciwgbW9udGgsIHdlZWssIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmQsIG1pbGxpc2Vjb25kLCBmb3JtYXQpIHtcbiAgdmFyIHNjYWxlID0gY29udGludW91cyhpZGVudGl0eSwgaWRlbnRpdHkpLFxuICAgICAgaW52ZXJ0ID0gc2NhbGUuaW52ZXJ0LFxuICAgICAgZG9tYWluID0gc2NhbGUuZG9tYWluO1xuXG4gIHZhciBmb3JtYXRNaWxsaXNlY29uZCA9IGZvcm1hdChcIi4lTFwiKSxcbiAgICAgIGZvcm1hdFNlY29uZCA9IGZvcm1hdChcIjolU1wiKSxcbiAgICAgIGZvcm1hdE1pbnV0ZSA9IGZvcm1hdChcIiVJOiVNXCIpLFxuICAgICAgZm9ybWF0SG91ciA9IGZvcm1hdChcIiVJICVwXCIpLFxuICAgICAgZm9ybWF0RGF5ID0gZm9ybWF0KFwiJWEgJWRcIiksXG4gICAgICBmb3JtYXRXZWVrID0gZm9ybWF0KFwiJWIgJWRcIiksXG4gICAgICBmb3JtYXRNb250aCA9IGZvcm1hdChcIiVCXCIpLFxuICAgICAgZm9ybWF0WWVhciA9IGZvcm1hdChcIiVZXCIpO1xuXG4gIHZhciB0aWNrSW50ZXJ2YWxzID0gW1xuICAgIFtzZWNvbmQsICAxLCAgICAgIGR1cmF0aW9uU2Vjb25kXSxcbiAgICBbc2Vjb25kLCAgNSwgIDUgKiBkdXJhdGlvblNlY29uZF0sXG4gICAgW3NlY29uZCwgMTUsIDE1ICogZHVyYXRpb25TZWNvbmRdLFxuICAgIFtzZWNvbmQsIDMwLCAzMCAqIGR1cmF0aW9uU2Vjb25kXSxcbiAgICBbbWludXRlLCAgMSwgICAgICBkdXJhdGlvbk1pbnV0ZV0sXG4gICAgW21pbnV0ZSwgIDUsICA1ICogZHVyYXRpb25NaW51dGVdLFxuICAgIFttaW51dGUsIDE1LCAxNSAqIGR1cmF0aW9uTWludXRlXSxcbiAgICBbbWludXRlLCAzMCwgMzAgKiBkdXJhdGlvbk1pbnV0ZV0sXG4gICAgWyAgaG91ciwgIDEsICAgICAgZHVyYXRpb25Ib3VyICBdLFxuICAgIFsgIGhvdXIsICAzLCAgMyAqIGR1cmF0aW9uSG91ciAgXSxcbiAgICBbICBob3VyLCAgNiwgIDYgKiBkdXJhdGlvbkhvdXIgIF0sXG4gICAgWyAgaG91ciwgMTIsIDEyICogZHVyYXRpb25Ib3VyICBdLFxuICAgIFsgICBkYXksICAxLCAgICAgIGR1cmF0aW9uRGF5ICAgXSxcbiAgICBbICAgZGF5LCAgMiwgIDIgKiBkdXJhdGlvbkRheSAgIF0sXG4gICAgWyAgd2VlaywgIDEsICAgICAgZHVyYXRpb25XZWVrICBdLFxuICAgIFsgbW9udGgsICAxLCAgICAgIGR1cmF0aW9uTW9udGggXSxcbiAgICBbIG1vbnRoLCAgMywgIDMgKiBkdXJhdGlvbk1vbnRoIF0sXG4gICAgWyAgeWVhciwgIDEsICAgICAgZHVyYXRpb25ZZWFyICBdXG4gIF07XG5cbiAgZnVuY3Rpb24gdGlja0Zvcm1hdChkYXRlKSB7XG4gICAgcmV0dXJuIChzZWNvbmQoZGF0ZSkgPCBkYXRlID8gZm9ybWF0TWlsbGlzZWNvbmRcbiAgICAgICAgOiBtaW51dGUoZGF0ZSkgPCBkYXRlID8gZm9ybWF0U2Vjb25kXG4gICAgICAgIDogaG91cihkYXRlKSA8IGRhdGUgPyBmb3JtYXRNaW51dGVcbiAgICAgICAgOiBkYXkoZGF0ZSkgPCBkYXRlID8gZm9ybWF0SG91clxuICAgICAgICA6IG1vbnRoKGRhdGUpIDwgZGF0ZSA/ICh3ZWVrKGRhdGUpIDwgZGF0ZSA/IGZvcm1hdERheSA6IGZvcm1hdFdlZWspXG4gICAgICAgIDogeWVhcihkYXRlKSA8IGRhdGUgPyBmb3JtYXRNb250aFxuICAgICAgICA6IGZvcm1hdFllYXIpKGRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gdGlja0ludGVydmFsKGludGVydmFsLCBzdGFydCwgc3RvcCwgc3RlcCkge1xuICAgIGlmIChpbnRlcnZhbCA9PSBudWxsKSBpbnRlcnZhbCA9IDEwO1xuXG4gICAgLy8gSWYgYSBkZXNpcmVkIHRpY2sgY291bnQgaXMgc3BlY2lmaWVkLCBwaWNrIGEgcmVhc29uYWJsZSB0aWNrIGludGVydmFsXG4gICAgLy8gYmFzZWQgb24gdGhlIGV4dGVudCBvZiB0aGUgZG9tYWluIGFuZCBhIHJvdWdoIGVzdGltYXRlIG9mIHRpY2sgc2l6ZS5cbiAgICAvLyBPdGhlcndpc2UsIGFzc3VtZSBpbnRlcnZhbCBpcyBhbHJlYWR5IGEgdGltZSBpbnRlcnZhbCBhbmQgdXNlIGl0LlxuICAgIGlmICh0eXBlb2YgaW50ZXJ2YWwgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIHZhciB0YXJnZXQgPSBNYXRoLmFicyhzdG9wIC0gc3RhcnQpIC8gaW50ZXJ2YWwsXG4gICAgICAgICAgaSA9IGJpc2VjdG9yKGZ1bmN0aW9uKGkpIHsgcmV0dXJuIGlbMl07IH0pLnJpZ2h0KHRpY2tJbnRlcnZhbHMsIHRhcmdldCk7XG4gICAgICBpZiAoaSA9PT0gdGlja0ludGVydmFscy5sZW5ndGgpIHtcbiAgICAgICAgc3RlcCA9IHRpY2tTdGVwKHN0YXJ0IC8gZHVyYXRpb25ZZWFyLCBzdG9wIC8gZHVyYXRpb25ZZWFyLCBpbnRlcnZhbCk7XG4gICAgICAgIGludGVydmFsID0geWVhcjtcbiAgICAgIH0gZWxzZSBpZiAoaSkge1xuICAgICAgICBpID0gdGlja0ludGVydmFsc1t0YXJnZXQgLyB0aWNrSW50ZXJ2YWxzW2kgLSAxXVsyXSA8IHRpY2tJbnRlcnZhbHNbaV1bMl0gLyB0YXJnZXQgPyBpIC0gMSA6IGldO1xuICAgICAgICBzdGVwID0gaVsxXTtcbiAgICAgICAgaW50ZXJ2YWwgPSBpWzBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RlcCA9IE1hdGgubWF4KHRpY2tTdGVwKHN0YXJ0LCBzdG9wLCBpbnRlcnZhbCksIDEpO1xuICAgICAgICBpbnRlcnZhbCA9IG1pbGxpc2Vjb25kO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzdGVwID09IG51bGwgPyBpbnRlcnZhbCA6IGludGVydmFsLmV2ZXJ5KHN0ZXApO1xuICB9XG5cbiAgc2NhbGUuaW52ZXJ0ID0gZnVuY3Rpb24oeSkge1xuICAgIHJldHVybiBuZXcgRGF0ZShpbnZlcnQoeSkpO1xuICB9O1xuXG4gIHNjYWxlLmRvbWFpbiA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IGRvbWFpbihtYXAuY2FsbChfLCBudW1iZXIpKSA6IGRvbWFpbigpLm1hcChkYXRlKTtcbiAgfTtcblxuICBzY2FsZS50aWNrcyA9IGZ1bmN0aW9uKGludGVydmFsLCBzdGVwKSB7XG4gICAgdmFyIGQgPSBkb21haW4oKSxcbiAgICAgICAgdDAgPSBkWzBdLFxuICAgICAgICB0MSA9IGRbZC5sZW5ndGggLSAxXSxcbiAgICAgICAgciA9IHQxIDwgdDAsXG4gICAgICAgIHQ7XG4gICAgaWYgKHIpIHQgPSB0MCwgdDAgPSB0MSwgdDEgPSB0O1xuICAgIHQgPSB0aWNrSW50ZXJ2YWwoaW50ZXJ2YWwsIHQwLCB0MSwgc3RlcCk7XG4gICAgdCA9IHQgPyB0LnJhbmdlKHQwLCB0MSArIDEpIDogW107IC8vIGluY2x1c2l2ZSBzdG9wXG4gICAgcmV0dXJuIHIgPyB0LnJldmVyc2UoKSA6IHQ7XG4gIH07XG5cbiAgc2NhbGUudGlja0Zvcm1hdCA9IGZ1bmN0aW9uKGNvdW50LCBzcGVjaWZpZXIpIHtcbiAgICByZXR1cm4gc3BlY2lmaWVyID09IG51bGwgPyB0aWNrRm9ybWF0IDogZm9ybWF0KHNwZWNpZmllcik7XG4gIH07XG5cbiAgc2NhbGUubmljZSA9IGZ1bmN0aW9uKGludGVydmFsLCBzdGVwKSB7XG4gICAgdmFyIGQgPSBkb21haW4oKTtcbiAgICByZXR1cm4gKGludGVydmFsID0gdGlja0ludGVydmFsKGludGVydmFsLCBkWzBdLCBkW2QubGVuZ3RoIC0gMV0sIHN0ZXApKVxuICAgICAgICA/IGRvbWFpbihuaWNlKGQsIGludGVydmFsKSlcbiAgICAgICAgOiBzY2FsZTtcbiAgfTtcblxuICBzY2FsZS5jb3B5ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGNvcHkoc2NhbGUsIGNhbGVuZGFyKHllYXIsIG1vbnRoLCB3ZWVrLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBtaWxsaXNlY29uZCwgZm9ybWF0KSk7XG4gIH07XG5cbiAgcmV0dXJuIHNjYWxlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGluaXRSYW5nZS5hcHBseShjYWxlbmRhcih0aW1lWWVhciwgdGltZU1vbnRoLCB0aW1lV2VlaywgdGltZURheSwgdGltZUhvdXIsIHRpbWVNaW51dGUsIHRpbWVTZWNvbmQsIHRpbWVNaWxsaXNlY29uZCwgdGltZUZvcm1hdCkuZG9tYWluKFtuZXcgRGF0ZSgyMDAwLCAwLCAxKSwgbmV3IERhdGUoMjAwMCwgMCwgMildKSwgYXJndW1lbnRzKTtcbn1cbiIsImltcG9ydCB7Y2FsZW5kYXJ9IGZyb20gXCIuL3RpbWVcIjtcbmltcG9ydCB7dXRjRm9ybWF0fSBmcm9tIFwiZDMtdGltZS1mb3JtYXRcIjtcbmltcG9ydCB7dXRjWWVhciwgdXRjTW9udGgsIHV0Y1dlZWssIHV0Y0RheSwgdXRjSG91ciwgdXRjTWludXRlLCB1dGNTZWNvbmQsIHV0Y01pbGxpc2Vjb25kfSBmcm9tIFwiZDMtdGltZVwiO1xuaW1wb3J0IHtpbml0UmFuZ2V9IGZyb20gXCIuL2luaXRcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiBpbml0UmFuZ2UuYXBwbHkoY2FsZW5kYXIodXRjWWVhciwgdXRjTW9udGgsIHV0Y1dlZWssIHV0Y0RheSwgdXRjSG91ciwgdXRjTWludXRlLCB1dGNTZWNvbmQsIHV0Y01pbGxpc2Vjb25kLCB1dGNGb3JtYXQpLmRvbWFpbihbRGF0ZS5VVEMoMjAwMCwgMCwgMSksIERhdGUuVVRDKDIwMDAsIDAsIDIpXSksIGFyZ3VtZW50cyk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4geDtcbiAgfTtcbn1cbiIsImltcG9ydCBjcmVhdG9yIGZyb20gXCIuL2NyZWF0b3JcIjtcbmltcG9ydCBzZWxlY3QgZnJvbSBcIi4vc2VsZWN0XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUpIHtcbiAgcmV0dXJuIHNlbGVjdChjcmVhdG9yKG5hbWUpLmNhbGwoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSk7XG59XG4iLCJpbXBvcnQgbmFtZXNwYWNlIGZyb20gXCIuL25hbWVzcGFjZVwiO1xuaW1wb3J0IHt4aHRtbH0gZnJvbSBcIi4vbmFtZXNwYWNlc1wiO1xuXG5mdW5jdGlvbiBjcmVhdG9ySW5oZXJpdChuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgZG9jdW1lbnQgPSB0aGlzLm93bmVyRG9jdW1lbnQsXG4gICAgICAgIHVyaSA9IHRoaXMubmFtZXNwYWNlVVJJO1xuICAgIHJldHVybiB1cmkgPT09IHhodG1sICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5uYW1lc3BhY2VVUkkgPT09IHhodG1sXG4gICAgICAgID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChuYW1lKVxuICAgICAgICA6IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyh1cmksIG5hbWUpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdG9yRml4ZWQoZnVsbG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUpIHtcbiAgdmFyIGZ1bGxuYW1lID0gbmFtZXNwYWNlKG5hbWUpO1xuICByZXR1cm4gKGZ1bGxuYW1lLmxvY2FsXG4gICAgICA/IGNyZWF0b3JGaXhlZFxuICAgICAgOiBjcmVhdG9ySW5oZXJpdCkoZnVsbG5hbWUpO1xufVxuIiwiZXhwb3J0IHtkZWZhdWx0IGFzIGNyZWF0ZX0gZnJvbSBcIi4vY3JlYXRlXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgY3JlYXRvcn0gZnJvbSBcIi4vY3JlYXRvclwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGxvY2FsfSBmcm9tIFwiLi9sb2NhbFwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIG1hdGNoZXJ9IGZyb20gXCIuL21hdGNoZXJcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBtb3VzZX0gZnJvbSBcIi4vbW91c2VcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBuYW1lc3BhY2V9IGZyb20gXCIuL25hbWVzcGFjZVwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIG5hbWVzcGFjZXN9IGZyb20gXCIuL25hbWVzcGFjZXNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBjbGllbnRQb2ludH0gZnJvbSBcIi4vcG9pbnRcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzZWxlY3R9IGZyb20gXCIuL3NlbGVjdFwiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHNlbGVjdEFsbH0gZnJvbSBcIi4vc2VsZWN0QWxsXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc2VsZWN0aW9ufSBmcm9tIFwiLi9zZWxlY3Rpb24vaW5kZXhcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzZWxlY3Rvcn0gZnJvbSBcIi4vc2VsZWN0b3JcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzZWxlY3RvckFsbH0gZnJvbSBcIi4vc2VsZWN0b3JBbGxcIjtcbmV4cG9ydCB7c3R5bGVWYWx1ZSBhcyBzdHlsZX0gZnJvbSBcIi4vc2VsZWN0aW9uL3N0eWxlXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgdG91Y2h9IGZyb20gXCIuL3RvdWNoXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgdG91Y2hlc30gZnJvbSBcIi4vdG91Y2hlc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHdpbmRvd30gZnJvbSBcIi4vd2luZG93XCI7XG5leHBvcnQge2V2ZW50LCBjdXN0b21FdmVudH0gZnJvbSBcIi4vc2VsZWN0aW9uL29uXCI7XG4iLCJ2YXIgbmV4dElkID0gMDtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbG9jYWwoKSB7XG4gIHJldHVybiBuZXcgTG9jYWw7XG59XG5cbmZ1bmN0aW9uIExvY2FsKCkge1xuICB0aGlzLl8gPSBcIkBcIiArICgrK25leHRJZCkudG9TdHJpbmcoMzYpO1xufVxuXG5Mb2NhbC5wcm90b3R5cGUgPSBsb2NhbC5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBMb2NhbCxcbiAgZ2V0OiBmdW5jdGlvbihub2RlKSB7XG4gICAgdmFyIGlkID0gdGhpcy5fO1xuICAgIHdoaWxlICghKGlkIGluIG5vZGUpKSBpZiAoIShub2RlID0gbm9kZS5wYXJlbnROb2RlKSkgcmV0dXJuO1xuICAgIHJldHVybiBub2RlW2lkXTtcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbihub2RlLCB2YWx1ZSkge1xuICAgIHJldHVybiBub2RlW3RoaXMuX10gPSB2YWx1ZTtcbiAgfSxcbiAgcmVtb3ZlOiBmdW5jdGlvbihub2RlKSB7XG4gICAgcmV0dXJuIHRoaXMuXyBpbiBub2RlICYmIGRlbGV0ZSBub2RlW3RoaXMuX107XG4gIH0sXG4gIHRvU3RyaW5nOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5fO1xuICB9XG59O1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2VsZWN0b3IpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLm1hdGNoZXMoc2VsZWN0b3IpO1xuICB9O1xufVxuIiwiaW1wb3J0IHNvdXJjZUV2ZW50IGZyb20gXCIuL3NvdXJjZUV2ZW50XCI7XG5pbXBvcnQgcG9pbnQgZnJvbSBcIi4vcG9pbnRcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obm9kZSkge1xuICB2YXIgZXZlbnQgPSBzb3VyY2VFdmVudCgpO1xuICBpZiAoZXZlbnQuY2hhbmdlZFRvdWNoZXMpIGV2ZW50ID0gZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF07XG4gIHJldHVybiBwb2ludChub2RlLCBldmVudCk7XG59XG4iLCJpbXBvcnQgbmFtZXNwYWNlcyBmcm9tIFwiLi9uYW1lc3BhY2VzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUpIHtcbiAgdmFyIHByZWZpeCA9IG5hbWUgKz0gXCJcIiwgaSA9IHByZWZpeC5pbmRleE9mKFwiOlwiKTtcbiAgaWYgKGkgPj0gMCAmJiAocHJlZml4ID0gbmFtZS5zbGljZSgwLCBpKSkgIT09IFwieG1sbnNcIikgbmFtZSA9IG5hbWUuc2xpY2UoaSArIDEpO1xuICByZXR1cm4gbmFtZXNwYWNlcy5oYXNPd25Qcm9wZXJ0eShwcmVmaXgpID8ge3NwYWNlOiBuYW1lc3BhY2VzW3ByZWZpeF0sIGxvY2FsOiBuYW1lfSA6IG5hbWU7XG59XG4iLCJleHBvcnQgdmFyIHhodG1sID0gXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgc3ZnOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gIHhodG1sOiB4aHRtbCxcbiAgeGxpbms6IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiLFxuICB4bWw6IFwiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlXCIsXG4gIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvXCJcbn07XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihub2RlLCBldmVudCkge1xuICB2YXIgc3ZnID0gbm9kZS5vd25lclNWR0VsZW1lbnQgfHwgbm9kZTtcblxuICBpZiAoc3ZnLmNyZWF0ZVNWR1BvaW50KSB7XG4gICAgdmFyIHBvaW50ID0gc3ZnLmNyZWF0ZVNWR1BvaW50KCk7XG4gICAgcG9pbnQueCA9IGV2ZW50LmNsaWVudFgsIHBvaW50LnkgPSBldmVudC5jbGllbnRZO1xuICAgIHBvaW50ID0gcG9pbnQubWF0cml4VHJhbnNmb3JtKG5vZGUuZ2V0U2NyZWVuQ1RNKCkuaW52ZXJzZSgpKTtcbiAgICByZXR1cm4gW3BvaW50LngsIHBvaW50LnldO1xuICB9XG5cbiAgdmFyIHJlY3QgPSBub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICByZXR1cm4gW2V2ZW50LmNsaWVudFggLSByZWN0LmxlZnQgLSBub2RlLmNsaWVudExlZnQsIGV2ZW50LmNsaWVudFkgLSByZWN0LnRvcCAtIG5vZGUuY2xpZW50VG9wXTtcbn1cbiIsImltcG9ydCB7U2VsZWN0aW9uLCByb290fSBmcm9tIFwiLi9zZWxlY3Rpb24vaW5kZXhcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2VsZWN0b3IpIHtcbiAgcmV0dXJuIHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIlxuICAgICAgPyBuZXcgU2VsZWN0aW9uKFtbZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3RvcildXSwgW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF0pXG4gICAgICA6IG5ldyBTZWxlY3Rpb24oW1tzZWxlY3Rvcl1dLCByb290KTtcbn1cbiIsImltcG9ydCB7U2VsZWN0aW9uLCByb290fSBmcm9tIFwiLi9zZWxlY3Rpb24vaW5kZXhcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2VsZWN0b3IpIHtcbiAgcmV0dXJuIHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIlxuICAgICAgPyBuZXcgU2VsZWN0aW9uKFtkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKV0sIFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKVxuICAgICAgOiBuZXcgU2VsZWN0aW9uKFtzZWxlY3RvciA9PSBudWxsID8gW10gOiBzZWxlY3Rvcl0sIHJvb3QpO1xufVxuIiwiaW1wb3J0IGNyZWF0b3IgZnJvbSBcIi4uL2NyZWF0b3JcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSkge1xuICB2YXIgY3JlYXRlID0gdHlwZW9mIG5hbWUgPT09IFwiZnVuY3Rpb25cIiA/IG5hbWUgOiBjcmVhdG9yKG5hbWUpO1xuICByZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQoY3JlYXRlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpO1xuICB9KTtcbn1cbiIsImltcG9ydCBuYW1lc3BhY2UgZnJvbSBcIi4uL25hbWVzcGFjZVwiO1xuXG5mdW5jdGlvbiBhdHRyUmVtb3ZlKG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyUmVtb3ZlTlMoZnVsbG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0ckNvbnN0YW50KG5hbWUsIHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJDb25zdGFudE5TKGZ1bGxuYW1lLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwsIHZhbHVlKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0ckZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgdiA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKHYgPT0gbnVsbCkgdGhpcy5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gICAgZWxzZSB0aGlzLnNldEF0dHJpYnV0ZShuYW1lLCB2KTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0ckZ1bmN0aW9uTlMoZnVsbG5hbWUsIHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgdiA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKHYgPT0gbnVsbCkgdGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpO1xuICAgIGVsc2UgdGhpcy5zZXRBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwsIHYpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICB2YXIgZnVsbG5hbWUgPSBuYW1lc3BhY2UobmFtZSk7XG5cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgdmFyIG5vZGUgPSB0aGlzLm5vZGUoKTtcbiAgICByZXR1cm4gZnVsbG5hbWUubG9jYWxcbiAgICAgICAgPyBub2RlLmdldEF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbClcbiAgICAgICAgOiBub2RlLmdldEF0dHJpYnV0ZShmdWxsbmFtZSk7XG4gIH1cblxuICByZXR1cm4gdGhpcy5lYWNoKCh2YWx1ZSA9PSBudWxsXG4gICAgICA/IChmdWxsbmFtZS5sb2NhbCA/IGF0dHJSZW1vdmVOUyA6IGF0dHJSZW1vdmUpIDogKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICA/IChmdWxsbmFtZS5sb2NhbCA/IGF0dHJGdW5jdGlvbk5TIDogYXR0ckZ1bmN0aW9uKVxuICAgICAgOiAoZnVsbG5hbWUubG9jYWwgPyBhdHRyQ29uc3RhbnROUyA6IGF0dHJDb25zdGFudCkpKShmdWxsbmFtZSwgdmFsdWUpKTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgY2FsbGJhY2sgPSBhcmd1bWVudHNbMF07XG4gIGFyZ3VtZW50c1swXSA9IHRoaXM7XG4gIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gIHJldHVybiB0aGlzO1xufVxuIiwiZnVuY3Rpb24gY2xhc3NBcnJheShzdHJpbmcpIHtcbiAgcmV0dXJuIHN0cmluZy50cmltKCkuc3BsaXQoL158XFxzKy8pO1xufVxuXG5mdW5jdGlvbiBjbGFzc0xpc3Qobm9kZSkge1xuICByZXR1cm4gbm9kZS5jbGFzc0xpc3QgfHwgbmV3IENsYXNzTGlzdChub2RlKTtcbn1cblxuZnVuY3Rpb24gQ2xhc3NMaXN0KG5vZGUpIHtcbiAgdGhpcy5fbm9kZSA9IG5vZGU7XG4gIHRoaXMuX25hbWVzID0gY2xhc3NBcnJheShub2RlLmdldEF0dHJpYnV0ZShcImNsYXNzXCIpIHx8IFwiXCIpO1xufVxuXG5DbGFzc0xpc3QucHJvdG90eXBlID0ge1xuICBhZGQ6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICB2YXIgaSA9IHRoaXMuX25hbWVzLmluZGV4T2YobmFtZSk7XG4gICAgaWYgKGkgPCAwKSB7XG4gICAgICB0aGlzLl9uYW1lcy5wdXNoKG5hbWUpO1xuICAgICAgdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCB0aGlzLl9uYW1lcy5qb2luKFwiIFwiKSk7XG4gICAgfVxuICB9LFxuICByZW1vdmU6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICB2YXIgaSA9IHRoaXMuX25hbWVzLmluZGV4T2YobmFtZSk7XG4gICAgaWYgKGkgPj0gMCkge1xuICAgICAgdGhpcy5fbmFtZXMuc3BsaWNlKGksIDEpO1xuICAgICAgdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCB0aGlzLl9uYW1lcy5qb2luKFwiIFwiKSk7XG4gICAgfVxuICB9LFxuICBjb250YWluczogZnVuY3Rpb24obmFtZSkge1xuICAgIHJldHVybiB0aGlzLl9uYW1lcy5pbmRleE9mKG5hbWUpID49IDA7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGNsYXNzZWRBZGQobm9kZSwgbmFtZXMpIHtcbiAgdmFyIGxpc3QgPSBjbGFzc0xpc3Qobm9kZSksIGkgPSAtMSwgbiA9IG5hbWVzLmxlbmd0aDtcbiAgd2hpbGUgKCsraSA8IG4pIGxpc3QuYWRkKG5hbWVzW2ldKTtcbn1cblxuZnVuY3Rpb24gY2xhc3NlZFJlbW92ZShub2RlLCBuYW1lcykge1xuICB2YXIgbGlzdCA9IGNsYXNzTGlzdChub2RlKSwgaSA9IC0xLCBuID0gbmFtZXMubGVuZ3RoO1xuICB3aGlsZSAoKytpIDwgbikgbGlzdC5yZW1vdmUobmFtZXNbaV0pO1xufVxuXG5mdW5jdGlvbiBjbGFzc2VkVHJ1ZShuYW1lcykge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgY2xhc3NlZEFkZCh0aGlzLCBuYW1lcyk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNsYXNzZWRGYWxzZShuYW1lcykge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgY2xhc3NlZFJlbW92ZSh0aGlzLCBuYW1lcyk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNsYXNzZWRGdW5jdGlvbihuYW1lcywgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICh2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpID8gY2xhc3NlZEFkZCA6IGNsYXNzZWRSZW1vdmUpKHRoaXMsIG5hbWVzKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgdmFyIG5hbWVzID0gY2xhc3NBcnJheShuYW1lICsgXCJcIik7XG5cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgdmFyIGxpc3QgPSBjbGFzc0xpc3QodGhpcy5ub2RlKCkpLCBpID0gLTEsIG4gPSBuYW1lcy5sZW5ndGg7XG4gICAgd2hpbGUgKCsraSA8IG4pIGlmICghbGlzdC5jb250YWlucyhuYW1lc1tpXSkpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiB0aGlzLmVhY2goKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICA/IGNsYXNzZWRGdW5jdGlvbiA6IHZhbHVlXG4gICAgICA/IGNsYXNzZWRUcnVlXG4gICAgICA6IGNsYXNzZWRGYWxzZSkobmFtZXMsIHZhbHVlKSk7XG59XG4iLCJmdW5jdGlvbiBzZWxlY3Rpb25fY2xvbmVTaGFsbG93KCkge1xuICB2YXIgY2xvbmUgPSB0aGlzLmNsb25lTm9kZShmYWxzZSksIHBhcmVudCA9IHRoaXMucGFyZW50Tm9kZTtcbiAgcmV0dXJuIHBhcmVudCA/IHBhcmVudC5pbnNlcnRCZWZvcmUoY2xvbmUsIHRoaXMubmV4dFNpYmxpbmcpIDogY2xvbmU7XG59XG5cbmZ1bmN0aW9uIHNlbGVjdGlvbl9jbG9uZURlZXAoKSB7XG4gIHZhciBjbG9uZSA9IHRoaXMuY2xvbmVOb2RlKHRydWUpLCBwYXJlbnQgPSB0aGlzLnBhcmVudE5vZGU7XG4gIHJldHVybiBwYXJlbnQgPyBwYXJlbnQuaW5zZXJ0QmVmb3JlKGNsb25lLCB0aGlzLm5leHRTaWJsaW5nKSA6IGNsb25lO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihkZWVwKSB7XG4gIHJldHVybiB0aGlzLnNlbGVjdChkZWVwID8gc2VsZWN0aW9uX2Nsb25lRGVlcCA6IHNlbGVjdGlvbl9jbG9uZVNoYWxsb3cpO1xufVxuIiwiaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4XCI7XG5pbXBvcnQge0VudGVyTm9kZX0gZnJvbSBcIi4vZW50ZXJcIjtcbmltcG9ydCBjb25zdGFudCBmcm9tIFwiLi4vY29uc3RhbnRcIjtcblxudmFyIGtleVByZWZpeCA9IFwiJFwiOyAvLyBQcm90ZWN0IGFnYWluc3Qga2V5cyBsaWtlIOKAnF9fcHJvdG9fX+KAnS5cblxuZnVuY3Rpb24gYmluZEluZGV4KHBhcmVudCwgZ3JvdXAsIGVudGVyLCB1cGRhdGUsIGV4aXQsIGRhdGEpIHtcbiAgdmFyIGkgPSAwLFxuICAgICAgbm9kZSxcbiAgICAgIGdyb3VwTGVuZ3RoID0gZ3JvdXAubGVuZ3RoLFxuICAgICAgZGF0YUxlbmd0aCA9IGRhdGEubGVuZ3RoO1xuXG4gIC8vIFB1dCBhbnkgbm9uLW51bGwgbm9kZXMgdGhhdCBmaXQgaW50byB1cGRhdGUuXG4gIC8vIFB1dCBhbnkgbnVsbCBub2RlcyBpbnRvIGVudGVyLlxuICAvLyBQdXQgYW55IHJlbWFpbmluZyBkYXRhIGludG8gZW50ZXIuXG4gIGZvciAoOyBpIDwgZGF0YUxlbmd0aDsgKytpKSB7XG4gICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgbm9kZS5fX2RhdGFfXyA9IGRhdGFbaV07XG4gICAgICB1cGRhdGVbaV0gPSBub2RlO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbnRlcltpXSA9IG5ldyBFbnRlck5vZGUocGFyZW50LCBkYXRhW2ldKTtcbiAgICB9XG4gIH1cblxuICAvLyBQdXQgYW55IG5vbi1udWxsIG5vZGVzIHRoYXQgZG9u4oCZdCBmaXQgaW50byBleGl0LlxuICBmb3IgKDsgaSA8IGdyb3VwTGVuZ3RoOyArK2kpIHtcbiAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7XG4gICAgICBleGl0W2ldID0gbm9kZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYmluZEtleShwYXJlbnQsIGdyb3VwLCBlbnRlciwgdXBkYXRlLCBleGl0LCBkYXRhLCBrZXkpIHtcbiAgdmFyIGksXG4gICAgICBub2RlLFxuICAgICAgbm9kZUJ5S2V5VmFsdWUgPSB7fSxcbiAgICAgIGdyb3VwTGVuZ3RoID0gZ3JvdXAubGVuZ3RoLFxuICAgICAgZGF0YUxlbmd0aCA9IGRhdGEubGVuZ3RoLFxuICAgICAga2V5VmFsdWVzID0gbmV3IEFycmF5KGdyb3VwTGVuZ3RoKSxcbiAgICAgIGtleVZhbHVlO1xuXG4gIC8vIENvbXB1dGUgdGhlIGtleSBmb3IgZWFjaCBub2RlLlxuICAvLyBJZiBtdWx0aXBsZSBub2RlcyBoYXZlIHRoZSBzYW1lIGtleSwgdGhlIGR1cGxpY2F0ZXMgYXJlIGFkZGVkIHRvIGV4aXQuXG4gIGZvciAoaSA9IDA7IGkgPCBncm91cExlbmd0aDsgKytpKSB7XG4gICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAga2V5VmFsdWVzW2ldID0ga2V5VmFsdWUgPSBrZXlQcmVmaXggKyBrZXkuY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBpLCBncm91cCk7XG4gICAgICBpZiAoa2V5VmFsdWUgaW4gbm9kZUJ5S2V5VmFsdWUpIHtcbiAgICAgICAgZXhpdFtpXSA9IG5vZGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2RlQnlLZXlWYWx1ZVtrZXlWYWx1ZV0gPSBub2RlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIENvbXB1dGUgdGhlIGtleSBmb3IgZWFjaCBkYXR1bS5cbiAgLy8gSWYgdGhlcmUgYSBub2RlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGtleSwgam9pbiBhbmQgYWRkIGl0IHRvIHVwZGF0ZS5cbiAgLy8gSWYgdGhlcmUgaXMgbm90IChvciB0aGUga2V5IGlzIGEgZHVwbGljYXRlKSwgYWRkIGl0IHRvIGVudGVyLlxuICBmb3IgKGkgPSAwOyBpIDwgZGF0YUxlbmd0aDsgKytpKSB7XG4gICAga2V5VmFsdWUgPSBrZXlQcmVmaXggKyBrZXkuY2FsbChwYXJlbnQsIGRhdGFbaV0sIGksIGRhdGEpO1xuICAgIGlmIChub2RlID0gbm9kZUJ5S2V5VmFsdWVba2V5VmFsdWVdKSB7XG4gICAgICB1cGRhdGVbaV0gPSBub2RlO1xuICAgICAgbm9kZS5fX2RhdGFfXyA9IGRhdGFbaV07XG4gICAgICBub2RlQnlLZXlWYWx1ZVtrZXlWYWx1ZV0gPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbnRlcltpXSA9IG5ldyBFbnRlck5vZGUocGFyZW50LCBkYXRhW2ldKTtcbiAgICB9XG4gIH1cblxuICAvLyBBZGQgYW55IHJlbWFpbmluZyBub2RlcyB0aGF0IHdlcmUgbm90IGJvdW5kIHRvIGRhdGEgdG8gZXhpdC5cbiAgZm9yIChpID0gMDsgaSA8IGdyb3VwTGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoKG5vZGUgPSBncm91cFtpXSkgJiYgKG5vZGVCeUtleVZhbHVlW2tleVZhbHVlc1tpXV0gPT09IG5vZGUpKSB7XG4gICAgICBleGl0W2ldID0gbm9kZTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWUsIGtleSkge1xuICBpZiAoIXZhbHVlKSB7XG4gICAgZGF0YSA9IG5ldyBBcnJheSh0aGlzLnNpemUoKSksIGogPSAtMTtcbiAgICB0aGlzLmVhY2goZnVuY3Rpb24oZCkgeyBkYXRhWysral0gPSBkOyB9KTtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIHZhciBiaW5kID0ga2V5ID8gYmluZEtleSA6IGJpbmRJbmRleCxcbiAgICAgIHBhcmVudHMgPSB0aGlzLl9wYXJlbnRzLFxuICAgICAgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzO1xuXG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdmFsdWUgPSBjb25zdGFudCh2YWx1ZSk7XG5cbiAgZm9yICh2YXIgbSA9IGdyb3Vwcy5sZW5ndGgsIHVwZGF0ZSA9IG5ldyBBcnJheShtKSwgZW50ZXIgPSBuZXcgQXJyYXkobSksIGV4aXQgPSBuZXcgQXJyYXkobSksIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgdmFyIHBhcmVudCA9IHBhcmVudHNbal0sXG4gICAgICAgIGdyb3VwID0gZ3JvdXBzW2pdLFxuICAgICAgICBncm91cExlbmd0aCA9IGdyb3VwLmxlbmd0aCxcbiAgICAgICAgZGF0YSA9IHZhbHVlLmNhbGwocGFyZW50LCBwYXJlbnQgJiYgcGFyZW50Ll9fZGF0YV9fLCBqLCBwYXJlbnRzKSxcbiAgICAgICAgZGF0YUxlbmd0aCA9IGRhdGEubGVuZ3RoLFxuICAgICAgICBlbnRlckdyb3VwID0gZW50ZXJbal0gPSBuZXcgQXJyYXkoZGF0YUxlbmd0aCksXG4gICAgICAgIHVwZGF0ZUdyb3VwID0gdXBkYXRlW2pdID0gbmV3IEFycmF5KGRhdGFMZW5ndGgpLFxuICAgICAgICBleGl0R3JvdXAgPSBleGl0W2pdID0gbmV3IEFycmF5KGdyb3VwTGVuZ3RoKTtcblxuICAgIGJpbmQocGFyZW50LCBncm91cCwgZW50ZXJHcm91cCwgdXBkYXRlR3JvdXAsIGV4aXRHcm91cCwgZGF0YSwga2V5KTtcblxuICAgIC8vIE5vdyBjb25uZWN0IHRoZSBlbnRlciBub2RlcyB0byB0aGVpciBmb2xsb3dpbmcgdXBkYXRlIG5vZGUsIHN1Y2ggdGhhdFxuICAgIC8vIGFwcGVuZENoaWxkIGNhbiBpbnNlcnQgdGhlIG1hdGVyaWFsaXplZCBlbnRlciBub2RlIGJlZm9yZSB0aGlzIG5vZGUsXG4gICAgLy8gcmF0aGVyIHRoYW4gYXQgdGhlIGVuZCBvZiB0aGUgcGFyZW50IG5vZGUuXG4gICAgZm9yICh2YXIgaTAgPSAwLCBpMSA9IDAsIHByZXZpb3VzLCBuZXh0OyBpMCA8IGRhdGFMZW5ndGg7ICsraTApIHtcbiAgICAgIGlmIChwcmV2aW91cyA9IGVudGVyR3JvdXBbaTBdKSB7XG4gICAgICAgIGlmIChpMCA+PSBpMSkgaTEgPSBpMCArIDE7XG4gICAgICAgIHdoaWxlICghKG5leHQgPSB1cGRhdGVHcm91cFtpMV0pICYmICsraTEgPCBkYXRhTGVuZ3RoKTtcbiAgICAgICAgcHJldmlvdXMuX25leHQgPSBuZXh0IHx8IG51bGw7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlID0gbmV3IFNlbGVjdGlvbih1cGRhdGUsIHBhcmVudHMpO1xuICB1cGRhdGUuX2VudGVyID0gZW50ZXI7XG4gIHVwZGF0ZS5fZXhpdCA9IGV4aXQ7XG4gIHJldHVybiB1cGRhdGU7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aFxuICAgICAgPyB0aGlzLnByb3BlcnR5KFwiX19kYXRhX19cIiwgdmFsdWUpXG4gICAgICA6IHRoaXMubm9kZSgpLl9fZGF0YV9fO1xufVxuIiwiaW1wb3J0IGRlZmF1bHRWaWV3IGZyb20gXCIuLi93aW5kb3dcIjtcblxuZnVuY3Rpb24gZGlzcGF0Y2hFdmVudChub2RlLCB0eXBlLCBwYXJhbXMpIHtcbiAgdmFyIHdpbmRvdyA9IGRlZmF1bHRWaWV3KG5vZGUpLFxuICAgICAgZXZlbnQgPSB3aW5kb3cuQ3VzdG9tRXZlbnQ7XG5cbiAgaWYgKHR5cGVvZiBldmVudCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgZXZlbnQgPSBuZXcgZXZlbnQodHlwZSwgcGFyYW1zKTtcbiAgfSBlbHNlIHtcbiAgICBldmVudCA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFdmVudChcIkV2ZW50XCIpO1xuICAgIGlmIChwYXJhbXMpIGV2ZW50LmluaXRFdmVudCh0eXBlLCBwYXJhbXMuYnViYmxlcywgcGFyYW1zLmNhbmNlbGFibGUpLCBldmVudC5kZXRhaWwgPSBwYXJhbXMuZGV0YWlsO1xuICAgIGVsc2UgZXZlbnQuaW5pdEV2ZW50KHR5cGUsIGZhbHNlLCBmYWxzZSk7XG4gIH1cblxuICBub2RlLmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xufVxuXG5mdW5jdGlvbiBkaXNwYXRjaENvbnN0YW50KHR5cGUsIHBhcmFtcykge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRpc3BhdGNoRXZlbnQodGhpcywgdHlwZSwgcGFyYW1zKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZGlzcGF0Y2hGdW5jdGlvbih0eXBlLCBwYXJhbXMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBkaXNwYXRjaEV2ZW50KHRoaXMsIHR5cGUsIHBhcmFtcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odHlwZSwgcGFyYW1zKSB7XG4gIHJldHVybiB0aGlzLmVhY2goKHR5cGVvZiBwYXJhbXMgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgPyBkaXNwYXRjaEZ1bmN0aW9uXG4gICAgICA6IGRpc3BhdGNoQ29uc3RhbnQpKHR5cGUsIHBhcmFtcykpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY2FsbGJhY2spIHtcblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIGogPSAwLCBtID0gZ3JvdXBzLmxlbmd0aDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBpID0gMCwgbiA9IGdyb3VwLmxlbmd0aCwgbm9kZTsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkgY2FsbGJhY2suY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBpLCBncm91cCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuICF0aGlzLm5vZGUoKTtcbn1cbiIsImltcG9ydCBzcGFyc2UgZnJvbSBcIi4vc3BhcnNlXCI7XG5pbXBvcnQge1NlbGVjdGlvbn0gZnJvbSBcIi4vaW5kZXhcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgU2VsZWN0aW9uKHRoaXMuX2VudGVyIHx8IHRoaXMuX2dyb3Vwcy5tYXAoc3BhcnNlKSwgdGhpcy5fcGFyZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBFbnRlck5vZGUocGFyZW50LCBkYXR1bSkge1xuICB0aGlzLm93bmVyRG9jdW1lbnQgPSBwYXJlbnQub3duZXJEb2N1bWVudDtcbiAgdGhpcy5uYW1lc3BhY2VVUkkgPSBwYXJlbnQubmFtZXNwYWNlVVJJO1xuICB0aGlzLl9uZXh0ID0gbnVsbDtcbiAgdGhpcy5fcGFyZW50ID0gcGFyZW50O1xuICB0aGlzLl9fZGF0YV9fID0gZGF0dW07XG59XG5cbkVudGVyTm9kZS5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBFbnRlck5vZGUsXG4gIGFwcGVuZENoaWxkOiBmdW5jdGlvbihjaGlsZCkgeyByZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShjaGlsZCwgdGhpcy5fbmV4dCk7IH0sXG4gIGluc2VydEJlZm9yZTogZnVuY3Rpb24oY2hpbGQsIG5leHQpIHsgcmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoY2hpbGQsIG5leHQpOyB9LFxuICBxdWVyeVNlbGVjdG9yOiBmdW5jdGlvbihzZWxlY3RvcikgeyByZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpOyB9LFxuICBxdWVyeVNlbGVjdG9yQWxsOiBmdW5jdGlvbihzZWxlY3RvcikgeyByZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpOyB9XG59O1xuIiwiaW1wb3J0IHNwYXJzZSBmcm9tIFwiLi9zcGFyc2VcIjtcbmltcG9ydCB7U2VsZWN0aW9ufSBmcm9tIFwiLi9pbmRleFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24odGhpcy5fZXhpdCB8fCB0aGlzLl9ncm91cHMubWFwKHNwYXJzZSksIHRoaXMuX3BhcmVudHMpO1xufVxuIiwiaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4XCI7XG5pbXBvcnQgbWF0Y2hlciBmcm9tIFwiLi4vbWF0Y2hlclwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihtYXRjaCkge1xuICBpZiAodHlwZW9mIG1hdGNoICE9PSBcImZ1bmN0aW9uXCIpIG1hdGNoID0gbWF0Y2hlcihtYXRjaCk7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgc3ViZ3JvdXBzID0gbmV3IEFycmF5KG0pLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBzdWJncm91cCA9IHN1Ymdyb3Vwc1tqXSA9IFtdLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKChub2RlID0gZ3JvdXBbaV0pICYmIG1hdGNoLmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApKSB7XG4gICAgICAgIHN1Ymdyb3VwLnB1c2gobm9kZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24oc3ViZ3JvdXBzLCB0aGlzLl9wYXJlbnRzKTtcbn1cbiIsImZ1bmN0aW9uIGh0bWxSZW1vdmUoKSB7XG4gIHRoaXMuaW5uZXJIVE1MID0gXCJcIjtcbn1cblxuZnVuY3Rpb24gaHRtbENvbnN0YW50KHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmlubmVySFRNTCA9IHZhbHVlO1xuICB9O1xufVxuXG5mdW5jdGlvbiBodG1sRnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2ID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB0aGlzLmlubmVySFRNTCA9IHYgPT0gbnVsbCA/IFwiXCIgOiB2O1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aFxuICAgICAgPyB0aGlzLmVhY2godmFsdWUgPT0gbnVsbFxuICAgICAgICAgID8gaHRtbFJlbW92ZSA6ICh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgID8gaHRtbEZ1bmN0aW9uXG4gICAgICAgICAgOiBodG1sQ29uc3RhbnQpKHZhbHVlKSlcbiAgICAgIDogdGhpcy5ub2RlKCkuaW5uZXJIVE1MO1xufVxuIiwiaW1wb3J0IHNlbGVjdGlvbl9zZWxlY3QgZnJvbSBcIi4vc2VsZWN0XCI7XG5pbXBvcnQgc2VsZWN0aW9uX3NlbGVjdEFsbCBmcm9tIFwiLi9zZWxlY3RBbGxcIjtcbmltcG9ydCBzZWxlY3Rpb25fZmlsdGVyIGZyb20gXCIuL2ZpbHRlclwiO1xuaW1wb3J0IHNlbGVjdGlvbl9kYXRhIGZyb20gXCIuL2RhdGFcIjtcbmltcG9ydCBzZWxlY3Rpb25fZW50ZXIgZnJvbSBcIi4vZW50ZXJcIjtcbmltcG9ydCBzZWxlY3Rpb25fZXhpdCBmcm9tIFwiLi9leGl0XCI7XG5pbXBvcnQgc2VsZWN0aW9uX2pvaW4gZnJvbSBcIi4vam9pblwiO1xuaW1wb3J0IHNlbGVjdGlvbl9tZXJnZSBmcm9tIFwiLi9tZXJnZVwiO1xuaW1wb3J0IHNlbGVjdGlvbl9vcmRlciBmcm9tIFwiLi9vcmRlclwiO1xuaW1wb3J0IHNlbGVjdGlvbl9zb3J0IGZyb20gXCIuL3NvcnRcIjtcbmltcG9ydCBzZWxlY3Rpb25fY2FsbCBmcm9tIFwiLi9jYWxsXCI7XG5pbXBvcnQgc2VsZWN0aW9uX25vZGVzIGZyb20gXCIuL25vZGVzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX25vZGUgZnJvbSBcIi4vbm9kZVwiO1xuaW1wb3J0IHNlbGVjdGlvbl9zaXplIGZyb20gXCIuL3NpemVcIjtcbmltcG9ydCBzZWxlY3Rpb25fZW1wdHkgZnJvbSBcIi4vZW1wdHlcIjtcbmltcG9ydCBzZWxlY3Rpb25fZWFjaCBmcm9tIFwiLi9lYWNoXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2F0dHIgZnJvbSBcIi4vYXR0clwiO1xuaW1wb3J0IHNlbGVjdGlvbl9zdHlsZSBmcm9tIFwiLi9zdHlsZVwiO1xuaW1wb3J0IHNlbGVjdGlvbl9wcm9wZXJ0eSBmcm9tIFwiLi9wcm9wZXJ0eVwiO1xuaW1wb3J0IHNlbGVjdGlvbl9jbGFzc2VkIGZyb20gXCIuL2NsYXNzZWRcIjtcbmltcG9ydCBzZWxlY3Rpb25fdGV4dCBmcm9tIFwiLi90ZXh0XCI7XG5pbXBvcnQgc2VsZWN0aW9uX2h0bWwgZnJvbSBcIi4vaHRtbFwiO1xuaW1wb3J0IHNlbGVjdGlvbl9yYWlzZSBmcm9tIFwiLi9yYWlzZVwiO1xuaW1wb3J0IHNlbGVjdGlvbl9sb3dlciBmcm9tIFwiLi9sb3dlclwiO1xuaW1wb3J0IHNlbGVjdGlvbl9hcHBlbmQgZnJvbSBcIi4vYXBwZW5kXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2luc2VydCBmcm9tIFwiLi9pbnNlcnRcIjtcbmltcG9ydCBzZWxlY3Rpb25fcmVtb3ZlIGZyb20gXCIuL3JlbW92ZVwiO1xuaW1wb3J0IHNlbGVjdGlvbl9jbG9uZSBmcm9tIFwiLi9jbG9uZVwiO1xuaW1wb3J0IHNlbGVjdGlvbl9kYXR1bSBmcm9tIFwiLi9kYXR1bVwiO1xuaW1wb3J0IHNlbGVjdGlvbl9vbiBmcm9tIFwiLi9vblwiO1xuaW1wb3J0IHNlbGVjdGlvbl9kaXNwYXRjaCBmcm9tIFwiLi9kaXNwYXRjaFwiO1xuXG5leHBvcnQgdmFyIHJvb3QgPSBbbnVsbF07XG5cbmV4cG9ydCBmdW5jdGlvbiBTZWxlY3Rpb24oZ3JvdXBzLCBwYXJlbnRzKSB7XG4gIHRoaXMuX2dyb3VwcyA9IGdyb3VwcztcbiAgdGhpcy5fcGFyZW50cyA9IHBhcmVudHM7XG59XG5cbmZ1bmN0aW9uIHNlbGVjdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24oW1tkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdXSwgcm9vdCk7XG59XG5cblNlbGVjdGlvbi5wcm90b3R5cGUgPSBzZWxlY3Rpb24ucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogU2VsZWN0aW9uLFxuICBzZWxlY3Q6IHNlbGVjdGlvbl9zZWxlY3QsXG4gIHNlbGVjdEFsbDogc2VsZWN0aW9uX3NlbGVjdEFsbCxcbiAgZmlsdGVyOiBzZWxlY3Rpb25fZmlsdGVyLFxuICBkYXRhOiBzZWxlY3Rpb25fZGF0YSxcbiAgZW50ZXI6IHNlbGVjdGlvbl9lbnRlcixcbiAgZXhpdDogc2VsZWN0aW9uX2V4aXQsXG4gIGpvaW46IHNlbGVjdGlvbl9qb2luLFxuICBtZXJnZTogc2VsZWN0aW9uX21lcmdlLFxuICBvcmRlcjogc2VsZWN0aW9uX29yZGVyLFxuICBzb3J0OiBzZWxlY3Rpb25fc29ydCxcbiAgY2FsbDogc2VsZWN0aW9uX2NhbGwsXG4gIG5vZGVzOiBzZWxlY3Rpb25fbm9kZXMsXG4gIG5vZGU6IHNlbGVjdGlvbl9ub2RlLFxuICBzaXplOiBzZWxlY3Rpb25fc2l6ZSxcbiAgZW1wdHk6IHNlbGVjdGlvbl9lbXB0eSxcbiAgZWFjaDogc2VsZWN0aW9uX2VhY2gsXG4gIGF0dHI6IHNlbGVjdGlvbl9hdHRyLFxuICBzdHlsZTogc2VsZWN0aW9uX3N0eWxlLFxuICBwcm9wZXJ0eTogc2VsZWN0aW9uX3Byb3BlcnR5LFxuICBjbGFzc2VkOiBzZWxlY3Rpb25fY2xhc3NlZCxcbiAgdGV4dDogc2VsZWN0aW9uX3RleHQsXG4gIGh0bWw6IHNlbGVjdGlvbl9odG1sLFxuICByYWlzZTogc2VsZWN0aW9uX3JhaXNlLFxuICBsb3dlcjogc2VsZWN0aW9uX2xvd2VyLFxuICBhcHBlbmQ6IHNlbGVjdGlvbl9hcHBlbmQsXG4gIGluc2VydDogc2VsZWN0aW9uX2luc2VydCxcbiAgcmVtb3ZlOiBzZWxlY3Rpb25fcmVtb3ZlLFxuICBjbG9uZTogc2VsZWN0aW9uX2Nsb25lLFxuICBkYXR1bTogc2VsZWN0aW9uX2RhdHVtLFxuICBvbjogc2VsZWN0aW9uX29uLFxuICBkaXNwYXRjaDogc2VsZWN0aW9uX2Rpc3BhdGNoXG59O1xuXG5leHBvcnQgZGVmYXVsdCBzZWxlY3Rpb247XG4iLCJpbXBvcnQgY3JlYXRvciBmcm9tIFwiLi4vY3JlYXRvclwiO1xuaW1wb3J0IHNlbGVjdG9yIGZyb20gXCIuLi9zZWxlY3RvclwiO1xuXG5mdW5jdGlvbiBjb25zdGFudE51bGwoKSB7XG4gIHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCBiZWZvcmUpIHtcbiAgdmFyIGNyZWF0ZSA9IHR5cGVvZiBuYW1lID09PSBcImZ1bmN0aW9uXCIgPyBuYW1lIDogY3JlYXRvcihuYW1lKSxcbiAgICAgIHNlbGVjdCA9IGJlZm9yZSA9PSBudWxsID8gY29uc3RhbnROdWxsIDogdHlwZW9mIGJlZm9yZSA9PT0gXCJmdW5jdGlvblwiID8gYmVmb3JlIDogc2VsZWN0b3IoYmVmb3JlKTtcbiAgcmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmluc2VydEJlZm9yZShjcmVhdGUuYXBwbHkodGhpcywgYXJndW1lbnRzKSwgc2VsZWN0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgbnVsbCk7XG4gIH0pO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24ob25lbnRlciwgb251cGRhdGUsIG9uZXhpdCkge1xuICB2YXIgZW50ZXIgPSB0aGlzLmVudGVyKCksIHVwZGF0ZSA9IHRoaXMsIGV4aXQgPSB0aGlzLmV4aXQoKTtcbiAgZW50ZXIgPSB0eXBlb2Ygb25lbnRlciA9PT0gXCJmdW5jdGlvblwiID8gb25lbnRlcihlbnRlcikgOiBlbnRlci5hcHBlbmQob25lbnRlciArIFwiXCIpO1xuICBpZiAob251cGRhdGUgIT0gbnVsbCkgdXBkYXRlID0gb251cGRhdGUodXBkYXRlKTtcbiAgaWYgKG9uZXhpdCA9PSBudWxsKSBleGl0LnJlbW92ZSgpOyBlbHNlIG9uZXhpdChleGl0KTtcbiAgcmV0dXJuIGVudGVyICYmIHVwZGF0ZSA/IGVudGVyLm1lcmdlKHVwZGF0ZSkub3JkZXIoKSA6IHVwZGF0ZTtcbn1cbiIsImZ1bmN0aW9uIGxvd2VyKCkge1xuICBpZiAodGhpcy5wcmV2aW91c1NpYmxpbmcpIHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcywgdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuZWFjaChsb3dlcik7XG59XG4iLCJpbXBvcnQge1NlbGVjdGlvbn0gZnJvbSBcIi4vaW5kZXhcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2VsZWN0aW9uKSB7XG5cbiAgZm9yICh2YXIgZ3JvdXBzMCA9IHRoaXMuX2dyb3VwcywgZ3JvdXBzMSA9IHNlbGVjdGlvbi5fZ3JvdXBzLCBtMCA9IGdyb3VwczAubGVuZ3RoLCBtMSA9IGdyb3VwczEubGVuZ3RoLCBtID0gTWF0aC5taW4obTAsIG0xKSwgbWVyZ2VzID0gbmV3IEFycmF5KG0wKSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cDAgPSBncm91cHMwW2pdLCBncm91cDEgPSBncm91cHMxW2pdLCBuID0gZ3JvdXAwLmxlbmd0aCwgbWVyZ2UgPSBtZXJnZXNbal0gPSBuZXcgQXJyYXkobiksIG5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAobm9kZSA9IGdyb3VwMFtpXSB8fCBncm91cDFbaV0pIHtcbiAgICAgICAgbWVyZ2VbaV0gPSBub2RlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZvciAoOyBqIDwgbTA7ICsraikge1xuICAgIG1lcmdlc1tqXSA9IGdyb3VwczBbal07XG4gIH1cblxuICByZXR1cm4gbmV3IFNlbGVjdGlvbihtZXJnZXMsIHRoaXMuX3BhcmVudHMpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBqID0gMCwgbSA9IGdyb3Vwcy5sZW5ndGg7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgaSA9IDAsIG4gPSBncm91cC5sZW5ndGg7IGkgPCBuOyArK2kpIHtcbiAgICAgIHZhciBub2RlID0gZ3JvdXBbaV07XG4gICAgICBpZiAobm9kZSkgcmV0dXJuIG5vZGU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIG5vZGVzID0gbmV3IEFycmF5KHRoaXMuc2l6ZSgpKSwgaSA9IC0xO1xuICB0aGlzLmVhY2goZnVuY3Rpb24oKSB7IG5vZGVzWysraV0gPSB0aGlzOyB9KTtcbiAgcmV0dXJuIG5vZGVzO1xufVxuIiwidmFyIGZpbHRlckV2ZW50cyA9IHt9O1xuXG5leHBvcnQgdmFyIGV2ZW50ID0gbnVsbDtcblxuaWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIikge1xuICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgaWYgKCEoXCJvbm1vdXNlZW50ZXJcIiBpbiBlbGVtZW50KSkge1xuICAgIGZpbHRlckV2ZW50cyA9IHttb3VzZWVudGVyOiBcIm1vdXNlb3ZlclwiLCBtb3VzZWxlYXZlOiBcIm1vdXNlb3V0XCJ9O1xuICB9XG59XG5cbmZ1bmN0aW9uIGZpbHRlckNvbnRleHRMaXN0ZW5lcihsaXN0ZW5lciwgaW5kZXgsIGdyb3VwKSB7XG4gIGxpc3RlbmVyID0gY29udGV4dExpc3RlbmVyKGxpc3RlbmVyLCBpbmRleCwgZ3JvdXApO1xuICByZXR1cm4gZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgcmVsYXRlZCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQ7XG4gICAgaWYgKCFyZWxhdGVkIHx8IChyZWxhdGVkICE9PSB0aGlzICYmICEocmVsYXRlZC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0aGlzKSAmIDgpKSkge1xuICAgICAgbGlzdGVuZXIuY2FsbCh0aGlzLCBldmVudCk7XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBjb250ZXh0TGlzdGVuZXIobGlzdGVuZXIsIGluZGV4LCBncm91cCkge1xuICByZXR1cm4gZnVuY3Rpb24oZXZlbnQxKSB7XG4gICAgdmFyIGV2ZW50MCA9IGV2ZW50OyAvLyBFdmVudHMgY2FuIGJlIHJlZW50cmFudCAoZS5nLiwgZm9jdXMpLlxuICAgIGV2ZW50ID0gZXZlbnQxO1xuICAgIHRyeSB7XG4gICAgICBsaXN0ZW5lci5jYWxsKHRoaXMsIHRoaXMuX19kYXRhX18sIGluZGV4LCBncm91cCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGV2ZW50ID0gZXZlbnQwO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gcGFyc2VUeXBlbmFtZXModHlwZW5hbWVzKSB7XG4gIHJldHVybiB0eXBlbmFtZXMudHJpbSgpLnNwbGl0KC9efFxccysvKS5tYXAoZnVuY3Rpb24odCkge1xuICAgIHZhciBuYW1lID0gXCJcIiwgaSA9IHQuaW5kZXhPZihcIi5cIik7XG4gICAgaWYgKGkgPj0gMCkgbmFtZSA9IHQuc2xpY2UoaSArIDEpLCB0ID0gdC5zbGljZSgwLCBpKTtcbiAgICByZXR1cm4ge3R5cGU6IHQsIG5hbWU6IG5hbWV9O1xuICB9KTtcbn1cblxuZnVuY3Rpb24gb25SZW1vdmUodHlwZW5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBvbiA9IHRoaXMuX19vbjtcbiAgICBpZiAoIW9uKSByZXR1cm47XG4gICAgZm9yICh2YXIgaiA9IDAsIGkgPSAtMSwgbSA9IG9uLmxlbmd0aCwgbzsgaiA8IG07ICsraikge1xuICAgICAgaWYgKG8gPSBvbltqXSwgKCF0eXBlbmFtZS50eXBlIHx8IG8udHlwZSA9PT0gdHlwZW5hbWUudHlwZSkgJiYgby5uYW1lID09PSB0eXBlbmFtZS5uYW1lKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihvLnR5cGUsIG8ubGlzdGVuZXIsIG8uY2FwdHVyZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvblsrK2ldID0gbztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCsraSkgb24ubGVuZ3RoID0gaTtcbiAgICBlbHNlIGRlbGV0ZSB0aGlzLl9fb247XG4gIH07XG59XG5cbmZ1bmN0aW9uIG9uQWRkKHR5cGVuYW1lLCB2YWx1ZSwgY2FwdHVyZSkge1xuICB2YXIgd3JhcCA9IGZpbHRlckV2ZW50cy5oYXNPd25Qcm9wZXJ0eSh0eXBlbmFtZS50eXBlKSA/IGZpbHRlckNvbnRleHRMaXN0ZW5lciA6IGNvbnRleHRMaXN0ZW5lcjtcbiAgcmV0dXJuIGZ1bmN0aW9uKGQsIGksIGdyb3VwKSB7XG4gICAgdmFyIG9uID0gdGhpcy5fX29uLCBvLCBsaXN0ZW5lciA9IHdyYXAodmFsdWUsIGksIGdyb3VwKTtcbiAgICBpZiAob24pIGZvciAodmFyIGogPSAwLCBtID0gb24ubGVuZ3RoOyBqIDwgbTsgKytqKSB7XG4gICAgICBpZiAoKG8gPSBvbltqXSkudHlwZSA9PT0gdHlwZW5hbWUudHlwZSAmJiBvLm5hbWUgPT09IHR5cGVuYW1lLm5hbWUpIHtcbiAgICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKG8udHlwZSwgby5saXN0ZW5lciwgby5jYXB0dXJlKTtcbiAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKG8udHlwZSwgby5saXN0ZW5lciA9IGxpc3RlbmVyLCBvLmNhcHR1cmUgPSBjYXB0dXJlKTtcbiAgICAgICAgby52YWx1ZSA9IHZhbHVlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcih0eXBlbmFtZS50eXBlLCBsaXN0ZW5lciwgY2FwdHVyZSk7XG4gICAgbyA9IHt0eXBlOiB0eXBlbmFtZS50eXBlLCBuYW1lOiB0eXBlbmFtZS5uYW1lLCB2YWx1ZTogdmFsdWUsIGxpc3RlbmVyOiBsaXN0ZW5lciwgY2FwdHVyZTogY2FwdHVyZX07XG4gICAgaWYgKCFvbikgdGhpcy5fX29uID0gW29dO1xuICAgIGVsc2Ugb24ucHVzaChvKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odHlwZW5hbWUsIHZhbHVlLCBjYXB0dXJlKSB7XG4gIHZhciB0eXBlbmFtZXMgPSBwYXJzZVR5cGVuYW1lcyh0eXBlbmFtZSArIFwiXCIpLCBpLCBuID0gdHlwZW5hbWVzLmxlbmd0aCwgdDtcblxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICB2YXIgb24gPSB0aGlzLm5vZGUoKS5fX29uO1xuICAgIGlmIChvbikgZm9yICh2YXIgaiA9IDAsIG0gPSBvbi5sZW5ndGgsIG87IGogPCBtOyArK2opIHtcbiAgICAgIGZvciAoaSA9IDAsIG8gPSBvbltqXTsgaSA8IG47ICsraSkge1xuICAgICAgICBpZiAoKHQgPSB0eXBlbmFtZXNbaV0pLnR5cGUgPT09IG8udHlwZSAmJiB0Lm5hbWUgPT09IG8ubmFtZSkge1xuICAgICAgICAgIHJldHVybiBvLnZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIG9uID0gdmFsdWUgPyBvbkFkZCA6IG9uUmVtb3ZlO1xuICBpZiAoY2FwdHVyZSA9PSBudWxsKSBjYXB0dXJlID0gZmFsc2U7XG4gIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHRoaXMuZWFjaChvbih0eXBlbmFtZXNbaV0sIHZhbHVlLCBjYXB0dXJlKSk7XG4gIHJldHVybiB0aGlzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3VzdG9tRXZlbnQoZXZlbnQxLCBsaXN0ZW5lciwgdGhhdCwgYXJncykge1xuICB2YXIgZXZlbnQwID0gZXZlbnQ7XG4gIGV2ZW50MS5zb3VyY2VFdmVudCA9IGV2ZW50O1xuICBldmVudCA9IGV2ZW50MTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gbGlzdGVuZXIuYXBwbHkodGhhdCwgYXJncyk7XG4gIH0gZmluYWxseSB7XG4gICAgZXZlbnQgPSBldmVudDA7XG4gIH1cbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgaiA9IC0xLCBtID0gZ3JvdXBzLmxlbmd0aDsgKytqIDwgbTspIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgaSA9IGdyb3VwLmxlbmd0aCAtIDEsIG5leHQgPSBncm91cFtpXSwgbm9kZTsgLS1pID49IDA7KSB7XG4gICAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7XG4gICAgICAgIGlmIChuZXh0ICYmIG5vZGUuY29tcGFyZURvY3VtZW50UG9zaXRpb24obmV4dCkgXiA0KSBuZXh0LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG5vZGUsIG5leHQpO1xuICAgICAgICBuZXh0ID0gbm9kZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn1cbiIsImZ1bmN0aW9uIHByb3BlcnR5UmVtb3ZlKG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIGRlbGV0ZSB0aGlzW25hbWVdO1xuICB9O1xufVxuXG5mdW5jdGlvbiBwcm9wZXJ0eUNvbnN0YW50KG5hbWUsIHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzW25hbWVdID0gdmFsdWU7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHByb3BlcnR5RnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2ID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAodiA9PSBudWxsKSBkZWxldGUgdGhpc1tuYW1lXTtcbiAgICBlbHNlIHRoaXNbbmFtZV0gPSB2O1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA+IDFcbiAgICAgID8gdGhpcy5lYWNoKCh2YWx1ZSA9PSBudWxsXG4gICAgICAgICAgPyBwcm9wZXJ0eVJlbW92ZSA6IHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgPyBwcm9wZXJ0eUZ1bmN0aW9uXG4gICAgICAgICAgOiBwcm9wZXJ0eUNvbnN0YW50KShuYW1lLCB2YWx1ZSkpXG4gICAgICA6IHRoaXMubm9kZSgpW25hbWVdO1xufVxuIiwiZnVuY3Rpb24gcmFpc2UoKSB7XG4gIGlmICh0aGlzLm5leHRTaWJsaW5nKSB0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5lYWNoKHJhaXNlKTtcbn1cbiIsImZ1bmN0aW9uIHJlbW92ZSgpIHtcbiAgdmFyIHBhcmVudCA9IHRoaXMucGFyZW50Tm9kZTtcbiAgaWYgKHBhcmVudCkgcGFyZW50LnJlbW92ZUNoaWxkKHRoaXMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuZWFjaChyZW1vdmUpO1xufVxuIiwiaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4XCI7XG5pbXBvcnQgc2VsZWN0b3IgZnJvbSBcIi4uL3NlbGVjdG9yXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdCkge1xuICBpZiAodHlwZW9mIHNlbGVjdCAhPT0gXCJmdW5jdGlvblwiKSBzZWxlY3QgPSBzZWxlY3RvcihzZWxlY3QpO1xuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgbSA9IGdyb3Vwcy5sZW5ndGgsIHN1Ymdyb3VwcyA9IG5ldyBBcnJheShtKSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgc3ViZ3JvdXAgPSBzdWJncm91cHNbal0gPSBuZXcgQXJyYXkobiksIG5vZGUsIHN1Ym5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAoKG5vZGUgPSBncm91cFtpXSkgJiYgKHN1Ym5vZGUgPSBzZWxlY3QuY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBpLCBncm91cCkpKSB7XG4gICAgICAgIGlmIChcIl9fZGF0YV9fXCIgaW4gbm9kZSkgc3Vibm9kZS5fX2RhdGFfXyA9IG5vZGUuX19kYXRhX187XG4gICAgICAgIHN1Ymdyb3VwW2ldID0gc3Vibm9kZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IFNlbGVjdGlvbihzdWJncm91cHMsIHRoaXMuX3BhcmVudHMpO1xufVxuIiwiaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4XCI7XG5pbXBvcnQgc2VsZWN0b3JBbGwgZnJvbSBcIi4uL3NlbGVjdG9yQWxsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdCkge1xuICBpZiAodHlwZW9mIHNlbGVjdCAhPT0gXCJmdW5jdGlvblwiKSBzZWxlY3QgPSBzZWxlY3RvckFsbChzZWxlY3QpO1xuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgbSA9IGdyb3Vwcy5sZW5ndGgsIHN1Ymdyb3VwcyA9IFtdLCBwYXJlbnRzID0gW10sIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIG4gPSBncm91cC5sZW5ndGgsIG5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7XG4gICAgICAgIHN1Ymdyb3Vwcy5wdXNoKHNlbGVjdC5jYWxsKG5vZGUsIG5vZGUuX19kYXRhX18sIGksIGdyb3VwKSk7XG4gICAgICAgIHBhcmVudHMucHVzaChub2RlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IFNlbGVjdGlvbihzdWJncm91cHMsIHBhcmVudHMpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBzaXplID0gMDtcbiAgdGhpcy5lYWNoKGZ1bmN0aW9uKCkgeyArK3NpemU7IH0pO1xuICByZXR1cm4gc2l6ZTtcbn1cbiIsImltcG9ydCB7U2VsZWN0aW9ufSBmcm9tIFwiLi9pbmRleFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjb21wYXJlKSB7XG4gIGlmICghY29tcGFyZSkgY29tcGFyZSA9IGFzY2VuZGluZztcblxuICBmdW5jdGlvbiBjb21wYXJlTm9kZShhLCBiKSB7XG4gICAgcmV0dXJuIGEgJiYgYiA/IGNvbXBhcmUoYS5fX2RhdGFfXywgYi5fX2RhdGFfXykgOiAhYSAtICFiO1xuICB9XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgc29ydGdyb3VwcyA9IG5ldyBBcnJheShtKSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgc29ydGdyb3VwID0gc29ydGdyb3Vwc1tqXSA9IG5ldyBBcnJheShuKSwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgICAgc29ydGdyb3VwW2ldID0gbm9kZTtcbiAgICAgIH1cbiAgICB9XG4gICAgc29ydGdyb3VwLnNvcnQoY29tcGFyZU5vZGUpO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24oc29ydGdyb3VwcywgdGhpcy5fcGFyZW50cykub3JkZXIoKTtcbn1cblxuZnVuY3Rpb24gYXNjZW5kaW5nKGEsIGIpIHtcbiAgcmV0dXJuIGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiBhID49IGIgPyAwIDogTmFOO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odXBkYXRlKSB7XG4gIHJldHVybiBuZXcgQXJyYXkodXBkYXRlLmxlbmd0aCk7XG59XG4iLCJpbXBvcnQgZGVmYXVsdFZpZXcgZnJvbSBcIi4uL3dpbmRvd1wiO1xuXG5mdW5jdGlvbiBzdHlsZVJlbW92ZShuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG5hbWUpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBzdHlsZUNvbnN0YW50KG5hbWUsIHZhbHVlLCBwcmlvcml0eSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShuYW1lLCB2YWx1ZSwgcHJpb3JpdHkpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBzdHlsZUZ1bmN0aW9uKG5hbWUsIHZhbHVlLCBwcmlvcml0eSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHYgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmICh2ID09IG51bGwpIHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobmFtZSk7XG4gICAgZWxzZSB0aGlzLnN0eWxlLnNldFByb3BlcnR5KG5hbWUsIHYsIHByaW9yaXR5KTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgdmFsdWUsIHByaW9yaXR5KSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID4gMVxuICAgICAgPyB0aGlzLmVhY2goKHZhbHVlID09IG51bGxcbiAgICAgICAgICAgID8gc3R5bGVSZW1vdmUgOiB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgICAgPyBzdHlsZUZ1bmN0aW9uXG4gICAgICAgICAgICA6IHN0eWxlQ29uc3RhbnQpKG5hbWUsIHZhbHVlLCBwcmlvcml0eSA9PSBudWxsID8gXCJcIiA6IHByaW9yaXR5KSlcbiAgICAgIDogc3R5bGVWYWx1ZSh0aGlzLm5vZGUoKSwgbmFtZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHlsZVZhbHVlKG5vZGUsIG5hbWUpIHtcbiAgcmV0dXJuIG5vZGUuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShuYW1lKVxuICAgICAgfHwgZGVmYXVsdFZpZXcobm9kZSkuZ2V0Q29tcHV0ZWRTdHlsZShub2RlLCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKG5hbWUpO1xufVxuIiwiZnVuY3Rpb24gdGV4dFJlbW92ZSgpIHtcbiAgdGhpcy50ZXh0Q29udGVudCA9IFwiXCI7XG59XG5cbmZ1bmN0aW9uIHRleHRDb25zdGFudCh2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy50ZXh0Q29udGVudCA9IHZhbHVlO1xuICB9O1xufVxuXG5mdW5jdGlvbiB0ZXh0RnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2ID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB0aGlzLnRleHRDb250ZW50ID0gdiA9PSBudWxsID8gXCJcIiA6IHY7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICA/IHRoaXMuZWFjaCh2YWx1ZSA9PSBudWxsXG4gICAgICAgICAgPyB0ZXh0UmVtb3ZlIDogKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgPyB0ZXh0RnVuY3Rpb25cbiAgICAgICAgICA6IHRleHRDb25zdGFudCkodmFsdWUpKVxuICAgICAgOiB0aGlzLm5vZGUoKS50ZXh0Q29udGVudDtcbn1cbiIsImZ1bmN0aW9uIG5vbmUoKSB7fVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZWxlY3Rvcikge1xuICByZXR1cm4gc2VsZWN0b3IgPT0gbnVsbCA/IG5vbmUgOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTtcbiAgfTtcbn1cbiIsImZ1bmN0aW9uIGVtcHR5KCkge1xuICByZXR1cm4gW107XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdG9yKSB7XG4gIHJldHVybiBzZWxlY3RvciA9PSBudWxsID8gZW1wdHkgOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTtcbiAgfTtcbn1cbiIsImltcG9ydCB7ZXZlbnR9IGZyb20gXCIuL3NlbGVjdGlvbi9vblwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIGN1cnJlbnQgPSBldmVudCwgc291cmNlO1xuICB3aGlsZSAoc291cmNlID0gY3VycmVudC5zb3VyY2VFdmVudCkgY3VycmVudCA9IHNvdXJjZTtcbiAgcmV0dXJuIGN1cnJlbnQ7XG59XG4iLCJpbXBvcnQgc291cmNlRXZlbnQgZnJvbSBcIi4vc291cmNlRXZlbnRcIjtcbmltcG9ydCBwb2ludCBmcm9tIFwiLi9wb2ludFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihub2RlLCB0b3VjaGVzLCBpZGVudGlmaWVyKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMykgaWRlbnRpZmllciA9IHRvdWNoZXMsIHRvdWNoZXMgPSBzb3VyY2VFdmVudCgpLmNoYW5nZWRUb3VjaGVzO1xuXG4gIGZvciAodmFyIGkgPSAwLCBuID0gdG91Y2hlcyA/IHRvdWNoZXMubGVuZ3RoIDogMCwgdG91Y2g7IGkgPCBuOyArK2kpIHtcbiAgICBpZiAoKHRvdWNoID0gdG91Y2hlc1tpXSkuaWRlbnRpZmllciA9PT0gaWRlbnRpZmllcikge1xuICAgICAgcmV0dXJuIHBvaW50KG5vZGUsIHRvdWNoKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbiIsImltcG9ydCBzb3VyY2VFdmVudCBmcm9tIFwiLi9zb3VyY2VFdmVudFwiO1xuaW1wb3J0IHBvaW50IGZyb20gXCIuL3BvaW50XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5vZGUsIHRvdWNoZXMpIHtcbiAgaWYgKHRvdWNoZXMgPT0gbnVsbCkgdG91Y2hlcyA9IHNvdXJjZUV2ZW50KCkudG91Y2hlcztcblxuICBmb3IgKHZhciBpID0gMCwgbiA9IHRvdWNoZXMgPyB0b3VjaGVzLmxlbmd0aCA6IDAsIHBvaW50cyA9IG5ldyBBcnJheShuKTsgaSA8IG47ICsraSkge1xuICAgIHBvaW50c1tpXSA9IHBvaW50KG5vZGUsIHRvdWNoZXNbaV0pO1xuICB9XG5cbiAgcmV0dXJuIHBvaW50cztcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5vZGUpIHtcbiAgcmV0dXJuIChub2RlLm93bmVyRG9jdW1lbnQgJiYgbm9kZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3KSAvLyBub2RlIGlzIGEgTm9kZVxuICAgICAgfHwgKG5vZGUuZG9jdW1lbnQgJiYgbm9kZSkgLy8gbm9kZSBpcyBhIFdpbmRvd1xuICAgICAgfHwgbm9kZS5kZWZhdWx0VmlldzsgLy8gbm9kZSBpcyBhIERvY3VtZW50XG59XG4iLCJpbXBvcnQge3BhdGh9IGZyb20gXCJkMy1wYXRoXCI7XG5pbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnQuanNcIjtcbmltcG9ydCB7YWJzLCBhY29zLCBhc2luLCBhdGFuMiwgY29zLCBlcHNpbG9uLCBoYWxmUGksIG1heCwgbWluLCBwaSwgc2luLCBzcXJ0LCB0YXV9IGZyb20gXCIuL21hdGguanNcIjtcblxuZnVuY3Rpb24gYXJjSW5uZXJSYWRpdXMoZCkge1xuICByZXR1cm4gZC5pbm5lclJhZGl1cztcbn1cblxuZnVuY3Rpb24gYXJjT3V0ZXJSYWRpdXMoZCkge1xuICByZXR1cm4gZC5vdXRlclJhZGl1cztcbn1cblxuZnVuY3Rpb24gYXJjU3RhcnRBbmdsZShkKSB7XG4gIHJldHVybiBkLnN0YXJ0QW5nbGU7XG59XG5cbmZ1bmN0aW9uIGFyY0VuZEFuZ2xlKGQpIHtcbiAgcmV0dXJuIGQuZW5kQW5nbGU7XG59XG5cbmZ1bmN0aW9uIGFyY1BhZEFuZ2xlKGQpIHtcbiAgcmV0dXJuIGQgJiYgZC5wYWRBbmdsZTsgLy8gTm90ZTogb3B0aW9uYWwhXG59XG5cbmZ1bmN0aW9uIGludGVyc2VjdCh4MCwgeTAsIHgxLCB5MSwgeDIsIHkyLCB4MywgeTMpIHtcbiAgdmFyIHgxMCA9IHgxIC0geDAsIHkxMCA9IHkxIC0geTAsXG4gICAgICB4MzIgPSB4MyAtIHgyLCB5MzIgPSB5MyAtIHkyLFxuICAgICAgdCA9IHkzMiAqIHgxMCAtIHgzMiAqIHkxMDtcbiAgaWYgKHQgKiB0IDwgZXBzaWxvbikgcmV0dXJuO1xuICB0ID0gKHgzMiAqICh5MCAtIHkyKSAtIHkzMiAqICh4MCAtIHgyKSkgLyB0O1xuICByZXR1cm4gW3gwICsgdCAqIHgxMCwgeTAgKyB0ICogeTEwXTtcbn1cblxuLy8gQ29tcHV0ZSBwZXJwZW5kaWN1bGFyIG9mZnNldCBsaW5lIG9mIGxlbmd0aCByYy5cbi8vIGh0dHA6Ly9tYXRod29ybGQud29sZnJhbS5jb20vQ2lyY2xlLUxpbmVJbnRlcnNlY3Rpb24uaHRtbFxuZnVuY3Rpb24gY29ybmVyVGFuZ2VudHMoeDAsIHkwLCB4MSwgeTEsIHIxLCByYywgY3cpIHtcbiAgdmFyIHgwMSA9IHgwIC0geDEsXG4gICAgICB5MDEgPSB5MCAtIHkxLFxuICAgICAgbG8gPSAoY3cgPyByYyA6IC1yYykgLyBzcXJ0KHgwMSAqIHgwMSArIHkwMSAqIHkwMSksXG4gICAgICBveCA9IGxvICogeTAxLFxuICAgICAgb3kgPSAtbG8gKiB4MDEsXG4gICAgICB4MTEgPSB4MCArIG94LFxuICAgICAgeTExID0geTAgKyBveSxcbiAgICAgIHgxMCA9IHgxICsgb3gsXG4gICAgICB5MTAgPSB5MSArIG95LFxuICAgICAgeDAwID0gKHgxMSArIHgxMCkgLyAyLFxuICAgICAgeTAwID0gKHkxMSArIHkxMCkgLyAyLFxuICAgICAgZHggPSB4MTAgLSB4MTEsXG4gICAgICBkeSA9IHkxMCAtIHkxMSxcbiAgICAgIGQyID0gZHggKiBkeCArIGR5ICogZHksXG4gICAgICByID0gcjEgLSByYyxcbiAgICAgIEQgPSB4MTEgKiB5MTAgLSB4MTAgKiB5MTEsXG4gICAgICBkID0gKGR5IDwgMCA/IC0xIDogMSkgKiBzcXJ0KG1heCgwLCByICogciAqIGQyIC0gRCAqIEQpKSxcbiAgICAgIGN4MCA9IChEICogZHkgLSBkeCAqIGQpIC8gZDIsXG4gICAgICBjeTAgPSAoLUQgKiBkeCAtIGR5ICogZCkgLyBkMixcbiAgICAgIGN4MSA9IChEICogZHkgKyBkeCAqIGQpIC8gZDIsXG4gICAgICBjeTEgPSAoLUQgKiBkeCArIGR5ICogZCkgLyBkMixcbiAgICAgIGR4MCA9IGN4MCAtIHgwMCxcbiAgICAgIGR5MCA9IGN5MCAtIHkwMCxcbiAgICAgIGR4MSA9IGN4MSAtIHgwMCxcbiAgICAgIGR5MSA9IGN5MSAtIHkwMDtcblxuICAvLyBQaWNrIHRoZSBjbG9zZXIgb2YgdGhlIHR3byBpbnRlcnNlY3Rpb24gcG9pbnRzLlxuICAvLyBUT0RPIElzIHRoZXJlIGEgZmFzdGVyIHdheSB0byBkZXRlcm1pbmUgd2hpY2ggaW50ZXJzZWN0aW9uIHRvIHVzZT9cbiAgaWYgKGR4MCAqIGR4MCArIGR5MCAqIGR5MCA+IGR4MSAqIGR4MSArIGR5MSAqIGR5MSkgY3gwID0gY3gxLCBjeTAgPSBjeTE7XG5cbiAgcmV0dXJuIHtcbiAgICBjeDogY3gwLFxuICAgIGN5OiBjeTAsXG4gICAgeDAxOiAtb3gsXG4gICAgeTAxOiAtb3ksXG4gICAgeDExOiBjeDAgKiAocjEgLyByIC0gMSksXG4gICAgeTExOiBjeTAgKiAocjEgLyByIC0gMSlcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBpbm5lclJhZGl1cyA9IGFyY0lubmVyUmFkaXVzLFxuICAgICAgb3V0ZXJSYWRpdXMgPSBhcmNPdXRlclJhZGl1cyxcbiAgICAgIGNvcm5lclJhZGl1cyA9IGNvbnN0YW50KDApLFxuICAgICAgcGFkUmFkaXVzID0gbnVsbCxcbiAgICAgIHN0YXJ0QW5nbGUgPSBhcmNTdGFydEFuZ2xlLFxuICAgICAgZW5kQW5nbGUgPSBhcmNFbmRBbmdsZSxcbiAgICAgIHBhZEFuZ2xlID0gYXJjUGFkQW5nbGUsXG4gICAgICBjb250ZXh0ID0gbnVsbDtcblxuICBmdW5jdGlvbiBhcmMoKSB7XG4gICAgdmFyIGJ1ZmZlcixcbiAgICAgICAgcixcbiAgICAgICAgcjAgPSAraW5uZXJSYWRpdXMuYXBwbHkodGhpcywgYXJndW1lbnRzKSxcbiAgICAgICAgcjEgPSArb3V0ZXJSYWRpdXMuYXBwbHkodGhpcywgYXJndW1lbnRzKSxcbiAgICAgICAgYTAgPSBzdGFydEFuZ2xlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgLSBoYWxmUGksXG4gICAgICAgIGExID0gZW5kQW5nbGUuYXBwbHkodGhpcywgYXJndW1lbnRzKSAtIGhhbGZQaSxcbiAgICAgICAgZGEgPSBhYnMoYTEgLSBhMCksXG4gICAgICAgIGN3ID0gYTEgPiBhMDtcblxuICAgIGlmICghY29udGV4dCkgY29udGV4dCA9IGJ1ZmZlciA9IHBhdGgoKTtcblxuICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBvdXRlciByYWRpdXMgaXMgYWx3YXlzIGxhcmdlciB0aGFuIHRoZSBpbm5lciByYWRpdXMuXG4gICAgaWYgKHIxIDwgcjApIHIgPSByMSwgcjEgPSByMCwgcjAgPSByO1xuXG4gICAgLy8gSXMgaXQgYSBwb2ludD9cbiAgICBpZiAoIShyMSA+IGVwc2lsb24pKSBjb250ZXh0Lm1vdmVUbygwLCAwKTtcblxuICAgIC8vIE9yIGlzIGl0IGEgY2lyY2xlIG9yIGFubnVsdXM/XG4gICAgZWxzZSBpZiAoZGEgPiB0YXUgLSBlcHNpbG9uKSB7XG4gICAgICBjb250ZXh0Lm1vdmVUbyhyMSAqIGNvcyhhMCksIHIxICogc2luKGEwKSk7XG4gICAgICBjb250ZXh0LmFyYygwLCAwLCByMSwgYTAsIGExLCAhY3cpO1xuICAgICAgaWYgKHIwID4gZXBzaWxvbikge1xuICAgICAgICBjb250ZXh0Lm1vdmVUbyhyMCAqIGNvcyhhMSksIHIwICogc2luKGExKSk7XG4gICAgICAgIGNvbnRleHQuYXJjKDAsIDAsIHIwLCBhMSwgYTAsIGN3KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBPciBpcyBpdCBhIGNpcmN1bGFyIG9yIGFubnVsYXIgc2VjdG9yP1xuICAgIGVsc2Uge1xuICAgICAgdmFyIGEwMSA9IGEwLFxuICAgICAgICAgIGExMSA9IGExLFxuICAgICAgICAgIGEwMCA9IGEwLFxuICAgICAgICAgIGExMCA9IGExLFxuICAgICAgICAgIGRhMCA9IGRhLFxuICAgICAgICAgIGRhMSA9IGRhLFxuICAgICAgICAgIGFwID0gcGFkQW5nbGUuYXBwbHkodGhpcywgYXJndW1lbnRzKSAvIDIsXG4gICAgICAgICAgcnAgPSAoYXAgPiBlcHNpbG9uKSAmJiAocGFkUmFkaXVzID8gK3BhZFJhZGl1cy5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDogc3FydChyMCAqIHIwICsgcjEgKiByMSkpLFxuICAgICAgICAgIHJjID0gbWluKGFicyhyMSAtIHIwKSAvIDIsICtjb3JuZXJSYWRpdXMuYXBwbHkodGhpcywgYXJndW1lbnRzKSksXG4gICAgICAgICAgcmMwID0gcmMsXG4gICAgICAgICAgcmMxID0gcmMsXG4gICAgICAgICAgdDAsXG4gICAgICAgICAgdDE7XG5cbiAgICAgIC8vIEFwcGx5IHBhZGRpbmc/IE5vdGUgdGhhdCBzaW5jZSByMSDiiaUgcjAsIGRhMSDiiaUgZGEwLlxuICAgICAgaWYgKHJwID4gZXBzaWxvbikge1xuICAgICAgICB2YXIgcDAgPSBhc2luKHJwIC8gcjAgKiBzaW4oYXApKSxcbiAgICAgICAgICAgIHAxID0gYXNpbihycCAvIHIxICogc2luKGFwKSk7XG4gICAgICAgIGlmICgoZGEwIC09IHAwICogMikgPiBlcHNpbG9uKSBwMCAqPSAoY3cgPyAxIDogLTEpLCBhMDAgKz0gcDAsIGExMCAtPSBwMDtcbiAgICAgICAgZWxzZSBkYTAgPSAwLCBhMDAgPSBhMTAgPSAoYTAgKyBhMSkgLyAyO1xuICAgICAgICBpZiAoKGRhMSAtPSBwMSAqIDIpID4gZXBzaWxvbikgcDEgKj0gKGN3ID8gMSA6IC0xKSwgYTAxICs9IHAxLCBhMTEgLT0gcDE7XG4gICAgICAgIGVsc2UgZGExID0gMCwgYTAxID0gYTExID0gKGEwICsgYTEpIC8gMjtcbiAgICAgIH1cblxuICAgICAgdmFyIHgwMSA9IHIxICogY29zKGEwMSksXG4gICAgICAgICAgeTAxID0gcjEgKiBzaW4oYTAxKSxcbiAgICAgICAgICB4MTAgPSByMCAqIGNvcyhhMTApLFxuICAgICAgICAgIHkxMCA9IHIwICogc2luKGExMCk7XG5cbiAgICAgIC8vIEFwcGx5IHJvdW5kZWQgY29ybmVycz9cbiAgICAgIGlmIChyYyA+IGVwc2lsb24pIHtcbiAgICAgICAgdmFyIHgxMSA9IHIxICogY29zKGExMSksXG4gICAgICAgICAgICB5MTEgPSByMSAqIHNpbihhMTEpLFxuICAgICAgICAgICAgeDAwID0gcjAgKiBjb3MoYTAwKSxcbiAgICAgICAgICAgIHkwMCA9IHIwICogc2luKGEwMCksXG4gICAgICAgICAgICBvYztcblxuICAgICAgICAvLyBSZXN0cmljdCB0aGUgY29ybmVyIHJhZGl1cyBhY2NvcmRpbmcgdG8gdGhlIHNlY3RvciBhbmdsZS5cbiAgICAgICAgaWYgKGRhIDwgcGkgJiYgKG9jID0gaW50ZXJzZWN0KHgwMSwgeTAxLCB4MDAsIHkwMCwgeDExLCB5MTEsIHgxMCwgeTEwKSkpIHtcbiAgICAgICAgICB2YXIgYXggPSB4MDEgLSBvY1swXSxcbiAgICAgICAgICAgICAgYXkgPSB5MDEgLSBvY1sxXSxcbiAgICAgICAgICAgICAgYnggPSB4MTEgLSBvY1swXSxcbiAgICAgICAgICAgICAgYnkgPSB5MTEgLSBvY1sxXSxcbiAgICAgICAgICAgICAga2MgPSAxIC8gc2luKGFjb3MoKGF4ICogYnggKyBheSAqIGJ5KSAvIChzcXJ0KGF4ICogYXggKyBheSAqIGF5KSAqIHNxcnQoYnggKiBieCArIGJ5ICogYnkpKSkgLyAyKSxcbiAgICAgICAgICAgICAgbGMgPSBzcXJ0KG9jWzBdICogb2NbMF0gKyBvY1sxXSAqIG9jWzFdKTtcbiAgICAgICAgICByYzAgPSBtaW4ocmMsIChyMCAtIGxjKSAvIChrYyAtIDEpKTtcbiAgICAgICAgICByYzEgPSBtaW4ocmMsIChyMSAtIGxjKSAvIChrYyArIDEpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBJcyB0aGUgc2VjdG9yIGNvbGxhcHNlZCB0byBhIGxpbmU/XG4gICAgICBpZiAoIShkYTEgPiBlcHNpbG9uKSkgY29udGV4dC5tb3ZlVG8oeDAxLCB5MDEpO1xuXG4gICAgICAvLyBEb2VzIHRoZSBzZWN0b3LigJlzIG91dGVyIHJpbmcgaGF2ZSByb3VuZGVkIGNvcm5lcnM/XG4gICAgICBlbHNlIGlmIChyYzEgPiBlcHNpbG9uKSB7XG4gICAgICAgIHQwID0gY29ybmVyVGFuZ2VudHMoeDAwLCB5MDAsIHgwMSwgeTAxLCByMSwgcmMxLCBjdyk7XG4gICAgICAgIHQxID0gY29ybmVyVGFuZ2VudHMoeDExLCB5MTEsIHgxMCwgeTEwLCByMSwgcmMxLCBjdyk7XG5cbiAgICAgICAgY29udGV4dC5tb3ZlVG8odDAuY3ggKyB0MC54MDEsIHQwLmN5ICsgdDAueTAxKTtcblxuICAgICAgICAvLyBIYXZlIHRoZSBjb3JuZXJzIG1lcmdlZD9cbiAgICAgICAgaWYgKHJjMSA8IHJjKSBjb250ZXh0LmFyYyh0MC5jeCwgdDAuY3ksIHJjMSwgYXRhbjIodDAueTAxLCB0MC54MDEpLCBhdGFuMih0MS55MDEsIHQxLngwMSksICFjdyk7XG5cbiAgICAgICAgLy8gT3RoZXJ3aXNlLCBkcmF3IHRoZSB0d28gY29ybmVycyBhbmQgdGhlIHJpbmcuXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGNvbnRleHQuYXJjKHQwLmN4LCB0MC5jeSwgcmMxLCBhdGFuMih0MC55MDEsIHQwLngwMSksIGF0YW4yKHQwLnkxMSwgdDAueDExKSwgIWN3KTtcbiAgICAgICAgICBjb250ZXh0LmFyYygwLCAwLCByMSwgYXRhbjIodDAuY3kgKyB0MC55MTEsIHQwLmN4ICsgdDAueDExKSwgYXRhbjIodDEuY3kgKyB0MS55MTEsIHQxLmN4ICsgdDEueDExKSwgIWN3KTtcbiAgICAgICAgICBjb250ZXh0LmFyYyh0MS5jeCwgdDEuY3ksIHJjMSwgYXRhbjIodDEueTExLCB0MS54MTEpLCBhdGFuMih0MS55MDEsIHQxLngwMSksICFjdyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gT3IgaXMgdGhlIG91dGVyIHJpbmcganVzdCBhIGNpcmN1bGFyIGFyYz9cbiAgICAgIGVsc2UgY29udGV4dC5tb3ZlVG8oeDAxLCB5MDEpLCBjb250ZXh0LmFyYygwLCAwLCByMSwgYTAxLCBhMTEsICFjdyk7XG5cbiAgICAgIC8vIElzIHRoZXJlIG5vIGlubmVyIHJpbmcsIGFuZCBpdOKAmXMgYSBjaXJjdWxhciBzZWN0b3I/XG4gICAgICAvLyBPciBwZXJoYXBzIGl04oCZcyBhbiBhbm51bGFyIHNlY3RvciBjb2xsYXBzZWQgZHVlIHRvIHBhZGRpbmc/XG4gICAgICBpZiAoIShyMCA+IGVwc2lsb24pIHx8ICEoZGEwID4gZXBzaWxvbikpIGNvbnRleHQubGluZVRvKHgxMCwgeTEwKTtcblxuICAgICAgLy8gRG9lcyB0aGUgc2VjdG9y4oCZcyBpbm5lciByaW5nIChvciBwb2ludCkgaGF2ZSByb3VuZGVkIGNvcm5lcnM/XG4gICAgICBlbHNlIGlmIChyYzAgPiBlcHNpbG9uKSB7XG4gICAgICAgIHQwID0gY29ybmVyVGFuZ2VudHMoeDEwLCB5MTAsIHgxMSwgeTExLCByMCwgLXJjMCwgY3cpO1xuICAgICAgICB0MSA9IGNvcm5lclRhbmdlbnRzKHgwMSwgeTAxLCB4MDAsIHkwMCwgcjAsIC1yYzAsIGN3KTtcblxuICAgICAgICBjb250ZXh0LmxpbmVUbyh0MC5jeCArIHQwLngwMSwgdDAuY3kgKyB0MC55MDEpO1xuXG4gICAgICAgIC8vIEhhdmUgdGhlIGNvcm5lcnMgbWVyZ2VkP1xuICAgICAgICBpZiAocmMwIDwgcmMpIGNvbnRleHQuYXJjKHQwLmN4LCB0MC5jeSwgcmMwLCBhdGFuMih0MC55MDEsIHQwLngwMSksIGF0YW4yKHQxLnkwMSwgdDEueDAxKSwgIWN3KTtcblxuICAgICAgICAvLyBPdGhlcndpc2UsIGRyYXcgdGhlIHR3byBjb3JuZXJzIGFuZCB0aGUgcmluZy5cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgY29udGV4dC5hcmModDAuY3gsIHQwLmN5LCByYzAsIGF0YW4yKHQwLnkwMSwgdDAueDAxKSwgYXRhbjIodDAueTExLCB0MC54MTEpLCAhY3cpO1xuICAgICAgICAgIGNvbnRleHQuYXJjKDAsIDAsIHIwLCBhdGFuMih0MC5jeSArIHQwLnkxMSwgdDAuY3ggKyB0MC54MTEpLCBhdGFuMih0MS5jeSArIHQxLnkxMSwgdDEuY3ggKyB0MS54MTEpLCBjdyk7XG4gICAgICAgICAgY29udGV4dC5hcmModDEuY3gsIHQxLmN5LCByYzAsIGF0YW4yKHQxLnkxMSwgdDEueDExKSwgYXRhbjIodDEueTAxLCB0MS54MDEpLCAhY3cpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIE9yIGlzIHRoZSBpbm5lciByaW5nIGp1c3QgYSBjaXJjdWxhciBhcmM/XG4gICAgICBlbHNlIGNvbnRleHQuYXJjKDAsIDAsIHIwLCBhMTAsIGEwMCwgY3cpO1xuICAgIH1cblxuICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICBpZiAoYnVmZmVyKSByZXR1cm4gY29udGV4dCA9IG51bGwsIGJ1ZmZlciArIFwiXCIgfHwgbnVsbDtcbiAgfVxuXG4gIGFyYy5jZW50cm9pZCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciByID0gKCtpbm5lclJhZGl1cy5hcHBseSh0aGlzLCBhcmd1bWVudHMpICsgK291dGVyUmFkaXVzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpIC8gMixcbiAgICAgICAgYSA9ICgrc3RhcnRBbmdsZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpICsgK2VuZEFuZ2xlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpIC8gMiAtIHBpIC8gMjtcbiAgICByZXR1cm4gW2NvcyhhKSAqIHIsIHNpbihhKSAqIHJdO1xuICB9O1xuXG4gIGFyYy5pbm5lclJhZGl1cyA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChpbm5lclJhZGl1cyA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBhcmMpIDogaW5uZXJSYWRpdXM7XG4gIH07XG5cbiAgYXJjLm91dGVyUmFkaXVzID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKG91dGVyUmFkaXVzID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGFyYykgOiBvdXRlclJhZGl1cztcbiAgfTtcblxuICBhcmMuY29ybmVyUmFkaXVzID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGNvcm5lclJhZGl1cyA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBhcmMpIDogY29ybmVyUmFkaXVzO1xuICB9O1xuXG4gIGFyYy5wYWRSYWRpdXMgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocGFkUmFkaXVzID0gXyA9PSBudWxsID8gbnVsbCA6IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBhcmMpIDogcGFkUmFkaXVzO1xuICB9O1xuXG4gIGFyYy5zdGFydEFuZ2xlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHN0YXJ0QW5nbGUgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgYXJjKSA6IHN0YXJ0QW5nbGU7XG4gIH07XG5cbiAgYXJjLmVuZEFuZ2xlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGVuZEFuZ2xlID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGFyYykgOiBlbmRBbmdsZTtcbiAgfTtcblxuICBhcmMucGFkQW5nbGUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocGFkQW5nbGUgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgYXJjKSA6IHBhZEFuZ2xlO1xuICB9O1xuXG4gIGFyYy5jb250ZXh0ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKChjb250ZXh0ID0gXyA9PSBudWxsID8gbnVsbCA6IF8pLCBhcmMpIDogY29udGV4dDtcbiAgfTtcblxuICByZXR1cm4gYXJjO1xufVxuIiwiaW1wb3J0IHtwYXRofSBmcm9tIFwiZDMtcGF0aFwiO1xuaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuL2NvbnN0YW50LmpzXCI7XG5pbXBvcnQgY3VydmVMaW5lYXIgZnJvbSBcIi4vY3VydmUvbGluZWFyLmpzXCI7XG5pbXBvcnQgbGluZSBmcm9tIFwiLi9saW5lLmpzXCI7XG5pbXBvcnQge3ggYXMgcG9pbnRYLCB5IGFzIHBvaW50WX0gZnJvbSBcIi4vcG9pbnQuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciB4MCA9IHBvaW50WCxcbiAgICAgIHgxID0gbnVsbCxcbiAgICAgIHkwID0gY29uc3RhbnQoMCksXG4gICAgICB5MSA9IHBvaW50WSxcbiAgICAgIGRlZmluZWQgPSBjb25zdGFudCh0cnVlKSxcbiAgICAgIGNvbnRleHQgPSBudWxsLFxuICAgICAgY3VydmUgPSBjdXJ2ZUxpbmVhcixcbiAgICAgIG91dHB1dCA9IG51bGw7XG5cbiAgZnVuY3Rpb24gYXJlYShkYXRhKSB7XG4gICAgdmFyIGksXG4gICAgICAgIGosXG4gICAgICAgIGssXG4gICAgICAgIG4gPSBkYXRhLmxlbmd0aCxcbiAgICAgICAgZCxcbiAgICAgICAgZGVmaW5lZDAgPSBmYWxzZSxcbiAgICAgICAgYnVmZmVyLFxuICAgICAgICB4MHogPSBuZXcgQXJyYXkobiksXG4gICAgICAgIHkweiA9IG5ldyBBcnJheShuKTtcblxuICAgIGlmIChjb250ZXh0ID09IG51bGwpIG91dHB1dCA9IGN1cnZlKGJ1ZmZlciA9IHBhdGgoKSk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDw9IG47ICsraSkge1xuICAgICAgaWYgKCEoaSA8IG4gJiYgZGVmaW5lZChkID0gZGF0YVtpXSwgaSwgZGF0YSkpID09PSBkZWZpbmVkMCkge1xuICAgICAgICBpZiAoZGVmaW5lZDAgPSAhZGVmaW5lZDApIHtcbiAgICAgICAgICBqID0gaTtcbiAgICAgICAgICBvdXRwdXQuYXJlYVN0YXJ0KCk7XG4gICAgICAgICAgb3V0cHV0LmxpbmVTdGFydCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dHB1dC5saW5lRW5kKCk7XG4gICAgICAgICAgb3V0cHV0LmxpbmVTdGFydCgpO1xuICAgICAgICAgIGZvciAoayA9IGkgLSAxOyBrID49IGo7IC0taykge1xuICAgICAgICAgICAgb3V0cHV0LnBvaW50KHgweltrXSwgeTB6W2tdKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgb3V0cHV0LmxpbmVFbmQoKTtcbiAgICAgICAgICBvdXRwdXQuYXJlYUVuZCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZGVmaW5lZDApIHtcbiAgICAgICAgeDB6W2ldID0gK3gwKGQsIGksIGRhdGEpLCB5MHpbaV0gPSAreTAoZCwgaSwgZGF0YSk7XG4gICAgICAgIG91dHB1dC5wb2ludCh4MSA/ICt4MShkLCBpLCBkYXRhKSA6IHgweltpXSwgeTEgPyAreTEoZCwgaSwgZGF0YSkgOiB5MHpbaV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChidWZmZXIpIHJldHVybiBvdXRwdXQgPSBudWxsLCBidWZmZXIgKyBcIlwiIHx8IG51bGw7XG4gIH1cblxuICBmdW5jdGlvbiBhcmVhbGluZSgpIHtcbiAgICByZXR1cm4gbGluZSgpLmRlZmluZWQoZGVmaW5lZCkuY3VydmUoY3VydmUpLmNvbnRleHQoY29udGV4dCk7XG4gIH1cblxuICBhcmVhLnggPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoeDAgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgeDEgPSBudWxsLCBhcmVhKSA6IHgwO1xuICB9O1xuXG4gIGFyZWEueDAgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoeDAgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgYXJlYSkgOiB4MDtcbiAgfTtcblxuICBhcmVhLngxID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHgxID0gXyA9PSBudWxsID8gbnVsbCA6IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBhcmVhKSA6IHgxO1xuICB9O1xuXG4gIGFyZWEueSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh5MCA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCB5MSA9IG51bGwsIGFyZWEpIDogeTA7XG4gIH07XG5cbiAgYXJlYS55MCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh5MCA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBhcmVhKSA6IHkwO1xuICB9O1xuXG4gIGFyZWEueTEgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoeTEgPSBfID09IG51bGwgPyBudWxsIDogdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGFyZWEpIDogeTE7XG4gIH07XG5cbiAgYXJlYS5saW5lWDAgPVxuICBhcmVhLmxpbmVZMCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBhcmVhbGluZSgpLngoeDApLnkoeTApO1xuICB9O1xuXG4gIGFyZWEubGluZVkxID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGFyZWFsaW5lKCkueCh4MCkueSh5MSk7XG4gIH07XG5cbiAgYXJlYS5saW5lWDEgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gYXJlYWxpbmUoKS54KHgxKS55KHkwKTtcbiAgfTtcblxuICBhcmVhLmRlZmluZWQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZGVmaW5lZCA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoISFfKSwgYXJlYSkgOiBkZWZpbmVkO1xuICB9O1xuXG4gIGFyZWEuY3VydmUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoY3VydmUgPSBfLCBjb250ZXh0ICE9IG51bGwgJiYgKG91dHB1dCA9IGN1cnZlKGNvbnRleHQpKSwgYXJlYSkgOiBjdXJ2ZTtcbiAgfTtcblxuICBhcmVhLmNvbnRleHQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoXyA9PSBudWxsID8gY29udGV4dCA9IG91dHB1dCA9IG51bGwgOiBvdXRwdXQgPSBjdXJ2ZShjb250ZXh0ID0gXyksIGFyZWEpIDogY29udGV4dDtcbiAgfTtcblxuICByZXR1cm4gYXJlYTtcbn1cbiIsImltcG9ydCBjdXJ2ZVJhZGlhbCwge2N1cnZlUmFkaWFsTGluZWFyfSBmcm9tIFwiLi9jdXJ2ZS9yYWRpYWwuanNcIjtcbmltcG9ydCBhcmVhIGZyb20gXCIuL2FyZWEuanNcIjtcbmltcG9ydCB7bGluZVJhZGlhbH0gZnJvbSBcIi4vbGluZVJhZGlhbC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIGEgPSBhcmVhKCkuY3VydmUoY3VydmVSYWRpYWxMaW5lYXIpLFxuICAgICAgYyA9IGEuY3VydmUsXG4gICAgICB4MCA9IGEubGluZVgwLFxuICAgICAgeDEgPSBhLmxpbmVYMSxcbiAgICAgIHkwID0gYS5saW5lWTAsXG4gICAgICB5MSA9IGEubGluZVkxO1xuXG4gIGEuYW5nbGUgPSBhLngsIGRlbGV0ZSBhLng7XG4gIGEuc3RhcnRBbmdsZSA9IGEueDAsIGRlbGV0ZSBhLngwO1xuICBhLmVuZEFuZ2xlID0gYS54MSwgZGVsZXRlIGEueDE7XG4gIGEucmFkaXVzID0gYS55LCBkZWxldGUgYS55O1xuICBhLmlubmVyUmFkaXVzID0gYS55MCwgZGVsZXRlIGEueTA7XG4gIGEub3V0ZXJSYWRpdXMgPSBhLnkxLCBkZWxldGUgYS55MTtcbiAgYS5saW5lU3RhcnRBbmdsZSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gbGluZVJhZGlhbCh4MCgpKTsgfSwgZGVsZXRlIGEubGluZVgwO1xuICBhLmxpbmVFbmRBbmdsZSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gbGluZVJhZGlhbCh4MSgpKTsgfSwgZGVsZXRlIGEubGluZVgxO1xuICBhLmxpbmVJbm5lclJhZGl1cyA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gbGluZVJhZGlhbCh5MCgpKTsgfSwgZGVsZXRlIGEubGluZVkwO1xuICBhLmxpbmVPdXRlclJhZGl1cyA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gbGluZVJhZGlhbCh5MSgpKTsgfSwgZGVsZXRlIGEubGluZVkxO1xuXG4gIGEuY3VydmUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyBjKGN1cnZlUmFkaWFsKF8pKSA6IGMoKS5fY3VydmU7XG4gIH07XG5cbiAgcmV0dXJuIGE7XG59XG4iLCJleHBvcnQgdmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4gZnVuY3Rpb24gY29uc3RhbnQoKSB7XG4gICAgcmV0dXJuIHg7XG4gIH07XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gcG9pbnQodGhhdCwgeCwgeSkge1xuICB0aGF0Ll9jb250ZXh0LmJlemllckN1cnZlVG8oXG4gICAgKDIgKiB0aGF0Ll94MCArIHRoYXQuX3gxKSAvIDMsXG4gICAgKDIgKiB0aGF0Ll95MCArIHRoYXQuX3kxKSAvIDMsXG4gICAgKHRoYXQuX3gwICsgMiAqIHRoYXQuX3gxKSAvIDMsXG4gICAgKHRoYXQuX3kwICsgMiAqIHRoYXQuX3kxKSAvIDMsXG4gICAgKHRoYXQuX3gwICsgNCAqIHRoYXQuX3gxICsgeCkgLyA2LFxuICAgICh0aGF0Ll95MCArIDQgKiB0aGF0Ll95MSArIHkpIC8gNlxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gQmFzaXMoY29udGV4dCkge1xuICB0aGlzLl9jb250ZXh0ID0gY29udGV4dDtcbn1cblxuQmFzaXMucHJvdG90eXBlID0ge1xuICBhcmVhU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xpbmUgPSAwO1xuICB9LFxuICBhcmVhRW5kOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9saW5lID0gTmFOO1xuICB9LFxuICBsaW5lU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX3gwID0gdGhpcy5feDEgPVxuICAgIHRoaXMuX3kwID0gdGhpcy5feTEgPSBOYU47XG4gICAgdGhpcy5fcG9pbnQgPSAwO1xuICB9LFxuICBsaW5lRW5kOiBmdW5jdGlvbigpIHtcbiAgICBzd2l0Y2ggKHRoaXMuX3BvaW50KSB7XG4gICAgICBjYXNlIDM6IHBvaW50KHRoaXMsIHRoaXMuX3gxLCB0aGlzLl95MSk7IC8vIHByb2NlZWRcbiAgICAgIGNhc2UgMjogdGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDEsIHRoaXMuX3kxKTsgYnJlYWs7XG4gICAgfVxuICAgIGlmICh0aGlzLl9saW5lIHx8ICh0aGlzLl9saW5lICE9PSAwICYmIHRoaXMuX3BvaW50ID09PSAxKSkgdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICB0aGlzLl9saW5lID0gMSAtIHRoaXMuX2xpbmU7XG4gIH0sXG4gIHBvaW50OiBmdW5jdGlvbih4LCB5KSB7XG4gICAgeCA9ICt4LCB5ID0gK3k7XG4gICAgc3dpdGNoICh0aGlzLl9wb2ludCkge1xuICAgICAgY2FzZSAwOiB0aGlzLl9wb2ludCA9IDE7IHRoaXMuX2xpbmUgPyB0aGlzLl9jb250ZXh0LmxpbmVUbyh4LCB5KSA6IHRoaXMuX2NvbnRleHQubW92ZVRvKHgsIHkpOyBicmVhaztcbiAgICAgIGNhc2UgMTogdGhpcy5fcG9pbnQgPSAyOyBicmVhaztcbiAgICAgIGNhc2UgMjogdGhpcy5fcG9pbnQgPSAzOyB0aGlzLl9jb250ZXh0LmxpbmVUbygoNSAqIHRoaXMuX3gwICsgdGhpcy5feDEpIC8gNiwgKDUgKiB0aGlzLl95MCArIHRoaXMuX3kxKSAvIDYpOyAvLyBwcm9jZWVkXG4gICAgICBkZWZhdWx0OiBwb2ludCh0aGlzLCB4LCB5KTsgYnJlYWs7XG4gICAgfVxuICAgIHRoaXMuX3gwID0gdGhpcy5feDEsIHRoaXMuX3gxID0geDtcbiAgICB0aGlzLl95MCA9IHRoaXMuX3kxLCB0aGlzLl95MSA9IHk7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgcmV0dXJuIG5ldyBCYXNpcyhjb250ZXh0KTtcbn1cbiIsImltcG9ydCBub29wIGZyb20gXCIuLi9ub29wLmpzXCI7XG5pbXBvcnQge3BvaW50fSBmcm9tIFwiLi9iYXNpcy5qc1wiO1xuXG5mdW5jdGlvbiBCYXNpc0Nsb3NlZChjb250ZXh0KSB7XG4gIHRoaXMuX2NvbnRleHQgPSBjb250ZXh0O1xufVxuXG5CYXNpc0Nsb3NlZC5wcm90b3R5cGUgPSB7XG4gIGFyZWFTdGFydDogbm9vcCxcbiAgYXJlYUVuZDogbm9vcCxcbiAgbGluZVN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl94MCA9IHRoaXMuX3gxID0gdGhpcy5feDIgPSB0aGlzLl94MyA9IHRoaXMuX3g0ID1cbiAgICB0aGlzLl95MCA9IHRoaXMuX3kxID0gdGhpcy5feTIgPSB0aGlzLl95MyA9IHRoaXMuX3k0ID0gTmFOO1xuICAgIHRoaXMuX3BvaW50ID0gMDtcbiAgfSxcbiAgbGluZUVuZDogZnVuY3Rpb24oKSB7XG4gICAgc3dpdGNoICh0aGlzLl9wb2ludCkge1xuICAgICAgY2FzZSAxOiB7XG4gICAgICAgIHRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLCB0aGlzLl95Mik7XG4gICAgICAgIHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAyOiB7XG4gICAgICAgIHRoaXMuX2NvbnRleHQubW92ZVRvKCh0aGlzLl94MiArIDIgKiB0aGlzLl94MykgLyAzLCAodGhpcy5feTIgKyAyICogdGhpcy5feTMpIC8gMyk7XG4gICAgICAgIHRoaXMuX2NvbnRleHQubGluZVRvKCh0aGlzLl94MyArIDIgKiB0aGlzLl94MikgLyAzLCAodGhpcy5feTMgKyAyICogdGhpcy5feTIpIC8gMyk7XG4gICAgICAgIHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAzOiB7XG4gICAgICAgIHRoaXMucG9pbnQodGhpcy5feDIsIHRoaXMuX3kyKTtcbiAgICAgICAgdGhpcy5wb2ludCh0aGlzLl94MywgdGhpcy5feTMpO1xuICAgICAgICB0aGlzLnBvaW50KHRoaXMuX3g0LCB0aGlzLl95NCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgcG9pbnQ6IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICB4ID0gK3gsIHkgPSAreTtcbiAgICBzd2l0Y2ggKHRoaXMuX3BvaW50KSB7XG4gICAgICBjYXNlIDA6IHRoaXMuX3BvaW50ID0gMTsgdGhpcy5feDIgPSB4LCB0aGlzLl95MiA9IHk7IGJyZWFrO1xuICAgICAgY2FzZSAxOiB0aGlzLl9wb2ludCA9IDI7IHRoaXMuX3gzID0geCwgdGhpcy5feTMgPSB5OyBicmVhaztcbiAgICAgIGNhc2UgMjogdGhpcy5fcG9pbnQgPSAzOyB0aGlzLl94NCA9IHgsIHRoaXMuX3k0ID0geTsgdGhpcy5fY29udGV4dC5tb3ZlVG8oKHRoaXMuX3gwICsgNCAqIHRoaXMuX3gxICsgeCkgLyA2LCAodGhpcy5feTAgKyA0ICogdGhpcy5feTEgKyB5KSAvIDYpOyBicmVhaztcbiAgICAgIGRlZmF1bHQ6IHBvaW50KHRoaXMsIHgsIHkpOyBicmVhaztcbiAgICB9XG4gICAgdGhpcy5feDAgPSB0aGlzLl94MSwgdGhpcy5feDEgPSB4O1xuICAgIHRoaXMuX3kwID0gdGhpcy5feTEsIHRoaXMuX3kxID0geTtcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY29udGV4dCkge1xuICByZXR1cm4gbmV3IEJhc2lzQ2xvc2VkKGNvbnRleHQpO1xufVxuIiwiaW1wb3J0IHtwb2ludH0gZnJvbSBcIi4vYmFzaXMuanNcIjtcblxuZnVuY3Rpb24gQmFzaXNPcGVuKGNvbnRleHQpIHtcbiAgdGhpcy5fY29udGV4dCA9IGNvbnRleHQ7XG59XG5cbkJhc2lzT3Blbi5wcm90b3R5cGUgPSB7XG4gIGFyZWFTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fbGluZSA9IDA7XG4gIH0sXG4gIGFyZWFFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xpbmUgPSBOYU47XG4gIH0sXG4gIGxpbmVTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5feDAgPSB0aGlzLl94MSA9XG4gICAgdGhpcy5feTAgPSB0aGlzLl95MSA9IE5hTjtcbiAgICB0aGlzLl9wb2ludCA9IDA7XG4gIH0sXG4gIGxpbmVFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLl9saW5lIHx8ICh0aGlzLl9saW5lICE9PSAwICYmIHRoaXMuX3BvaW50ID09PSAzKSkgdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICB0aGlzLl9saW5lID0gMSAtIHRoaXMuX2xpbmU7XG4gIH0sXG4gIHBvaW50OiBmdW5jdGlvbih4LCB5KSB7XG4gICAgeCA9ICt4LCB5ID0gK3k7XG4gICAgc3dpdGNoICh0aGlzLl9wb2ludCkge1xuICAgICAgY2FzZSAwOiB0aGlzLl9wb2ludCA9IDE7IGJyZWFrO1xuICAgICAgY2FzZSAxOiB0aGlzLl9wb2ludCA9IDI7IGJyZWFrO1xuICAgICAgY2FzZSAyOiB0aGlzLl9wb2ludCA9IDM7IHZhciB4MCA9ICh0aGlzLl94MCArIDQgKiB0aGlzLl94MSArIHgpIC8gNiwgeTAgPSAodGhpcy5feTAgKyA0ICogdGhpcy5feTEgKyB5KSAvIDY7IHRoaXMuX2xpbmUgPyB0aGlzLl9jb250ZXh0LmxpbmVUbyh4MCwgeTApIDogdGhpcy5fY29udGV4dC5tb3ZlVG8oeDAsIHkwKTsgYnJlYWs7XG4gICAgICBjYXNlIDM6IHRoaXMuX3BvaW50ID0gNDsgLy8gcHJvY2VlZFxuICAgICAgZGVmYXVsdDogcG9pbnQodGhpcywgeCwgeSk7IGJyZWFrO1xuICAgIH1cbiAgICB0aGlzLl94MCA9IHRoaXMuX3gxLCB0aGlzLl94MSA9IHg7XG4gICAgdGhpcy5feTAgPSB0aGlzLl95MSwgdGhpcy5feTEgPSB5O1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjb250ZXh0KSB7XG4gIHJldHVybiBuZXcgQmFzaXNPcGVuKGNvbnRleHQpO1xufVxuIiwiaW1wb3J0IHtCYXNpc30gZnJvbSBcIi4vYmFzaXMuanNcIjtcblxuZnVuY3Rpb24gQnVuZGxlKGNvbnRleHQsIGJldGEpIHtcbiAgdGhpcy5fYmFzaXMgPSBuZXcgQmFzaXMoY29udGV4dCk7XG4gIHRoaXMuX2JldGEgPSBiZXRhO1xufVxuXG5CdW5kbGUucHJvdG90eXBlID0ge1xuICBsaW5lU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX3ggPSBbXTtcbiAgICB0aGlzLl95ID0gW107XG4gICAgdGhpcy5fYmFzaXMubGluZVN0YXJ0KCk7XG4gIH0sXG4gIGxpbmVFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIHZhciB4ID0gdGhpcy5feCxcbiAgICAgICAgeSA9IHRoaXMuX3ksXG4gICAgICAgIGogPSB4Lmxlbmd0aCAtIDE7XG5cbiAgICBpZiAoaiA+IDApIHtcbiAgICAgIHZhciB4MCA9IHhbMF0sXG4gICAgICAgICAgeTAgPSB5WzBdLFxuICAgICAgICAgIGR4ID0geFtqXSAtIHgwLFxuICAgICAgICAgIGR5ID0geVtqXSAtIHkwLFxuICAgICAgICAgIGkgPSAtMSxcbiAgICAgICAgICB0O1xuXG4gICAgICB3aGlsZSAoKytpIDw9IGopIHtcbiAgICAgICAgdCA9IGkgLyBqO1xuICAgICAgICB0aGlzLl9iYXNpcy5wb2ludChcbiAgICAgICAgICB0aGlzLl9iZXRhICogeFtpXSArICgxIC0gdGhpcy5fYmV0YSkgKiAoeDAgKyB0ICogZHgpLFxuICAgICAgICAgIHRoaXMuX2JldGEgKiB5W2ldICsgKDEgLSB0aGlzLl9iZXRhKSAqICh5MCArIHQgKiBkeSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl94ID0gdGhpcy5feSA9IG51bGw7XG4gICAgdGhpcy5fYmFzaXMubGluZUVuZCgpO1xuICB9LFxuICBwb2ludDogZnVuY3Rpb24oeCwgeSkge1xuICAgIHRoaXMuX3gucHVzaCgreCk7XG4gICAgdGhpcy5feS5wdXNoKCt5KTtcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgKGZ1bmN0aW9uIGN1c3RvbShiZXRhKSB7XG5cbiAgZnVuY3Rpb24gYnVuZGxlKGNvbnRleHQpIHtcbiAgICByZXR1cm4gYmV0YSA9PT0gMSA/IG5ldyBCYXNpcyhjb250ZXh0KSA6IG5ldyBCdW5kbGUoY29udGV4dCwgYmV0YSk7XG4gIH1cblxuICBidW5kbGUuYmV0YSA9IGZ1bmN0aW9uKGJldGEpIHtcbiAgICByZXR1cm4gY3VzdG9tKCtiZXRhKTtcbiAgfTtcblxuICByZXR1cm4gYnVuZGxlO1xufSkoMC44NSk7XG4iLCJleHBvcnQgZnVuY3Rpb24gcG9pbnQodGhhdCwgeCwgeSkge1xuICB0aGF0Ll9jb250ZXh0LmJlemllckN1cnZlVG8oXG4gICAgdGhhdC5feDEgKyB0aGF0Ll9rICogKHRoYXQuX3gyIC0gdGhhdC5feDApLFxuICAgIHRoYXQuX3kxICsgdGhhdC5fayAqICh0aGF0Ll95MiAtIHRoYXQuX3kwKSxcbiAgICB0aGF0Ll94MiArIHRoYXQuX2sgKiAodGhhdC5feDEgLSB4KSxcbiAgICB0aGF0Ll95MiArIHRoYXQuX2sgKiAodGhhdC5feTEgLSB5KSxcbiAgICB0aGF0Ll94MixcbiAgICB0aGF0Ll95MlxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gQ2FyZGluYWwoY29udGV4dCwgdGVuc2lvbikge1xuICB0aGlzLl9jb250ZXh0ID0gY29udGV4dDtcbiAgdGhpcy5fayA9ICgxIC0gdGVuc2lvbikgLyA2O1xufVxuXG5DYXJkaW5hbC5wcm90b3R5cGUgPSB7XG4gIGFyZWFTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fbGluZSA9IDA7XG4gIH0sXG4gIGFyZWFFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xpbmUgPSBOYU47XG4gIH0sXG4gIGxpbmVTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5feDAgPSB0aGlzLl94MSA9IHRoaXMuX3gyID1cbiAgICB0aGlzLl95MCA9IHRoaXMuX3kxID0gdGhpcy5feTIgPSBOYU47XG4gICAgdGhpcy5fcG9pbnQgPSAwO1xuICB9LFxuICBsaW5lRW5kOiBmdW5jdGlvbigpIHtcbiAgICBzd2l0Y2ggKHRoaXMuX3BvaW50KSB7XG4gICAgICBjYXNlIDI6IHRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLCB0aGlzLl95Mik7IGJyZWFrO1xuICAgICAgY2FzZSAzOiBwb2ludCh0aGlzLCB0aGlzLl94MSwgdGhpcy5feTEpOyBicmVhaztcbiAgICB9XG4gICAgaWYgKHRoaXMuX2xpbmUgfHwgKHRoaXMuX2xpbmUgIT09IDAgJiYgdGhpcy5fcG9pbnQgPT09IDEpKSB0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgIHRoaXMuX2xpbmUgPSAxIC0gdGhpcy5fbGluZTtcbiAgfSxcbiAgcG9pbnQ6IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICB4ID0gK3gsIHkgPSAreTtcbiAgICBzd2l0Y2ggKHRoaXMuX3BvaW50KSB7XG4gICAgICBjYXNlIDA6IHRoaXMuX3BvaW50ID0gMTsgdGhpcy5fbGluZSA/IHRoaXMuX2NvbnRleHQubGluZVRvKHgsIHkpIDogdGhpcy5fY29udGV4dC5tb3ZlVG8oeCwgeSk7IGJyZWFrO1xuICAgICAgY2FzZSAxOiB0aGlzLl9wb2ludCA9IDI7IHRoaXMuX3gxID0geCwgdGhpcy5feTEgPSB5OyBicmVhaztcbiAgICAgIGNhc2UgMjogdGhpcy5fcG9pbnQgPSAzOyAvLyBwcm9jZWVkXG4gICAgICBkZWZhdWx0OiBwb2ludCh0aGlzLCB4LCB5KTsgYnJlYWs7XG4gICAgfVxuICAgIHRoaXMuX3gwID0gdGhpcy5feDEsIHRoaXMuX3gxID0gdGhpcy5feDIsIHRoaXMuX3gyID0geDtcbiAgICB0aGlzLl95MCA9IHRoaXMuX3kxLCB0aGlzLl95MSA9IHRoaXMuX3kyLCB0aGlzLl95MiA9IHk7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IChmdW5jdGlvbiBjdXN0b20odGVuc2lvbikge1xuXG4gIGZ1bmN0aW9uIGNhcmRpbmFsKGNvbnRleHQpIHtcbiAgICByZXR1cm4gbmV3IENhcmRpbmFsKGNvbnRleHQsIHRlbnNpb24pO1xuICB9XG5cbiAgY2FyZGluYWwudGVuc2lvbiA9IGZ1bmN0aW9uKHRlbnNpb24pIHtcbiAgICByZXR1cm4gY3VzdG9tKCt0ZW5zaW9uKTtcbiAgfTtcblxuICByZXR1cm4gY2FyZGluYWw7XG59KSgwKTtcbiIsImltcG9ydCBub29wIGZyb20gXCIuLi9ub29wLmpzXCI7XG5pbXBvcnQge3BvaW50fSBmcm9tIFwiLi9jYXJkaW5hbC5qc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gQ2FyZGluYWxDbG9zZWQoY29udGV4dCwgdGVuc2lvbikge1xuICB0aGlzLl9jb250ZXh0ID0gY29udGV4dDtcbiAgdGhpcy5fayA9ICgxIC0gdGVuc2lvbikgLyA2O1xufVxuXG5DYXJkaW5hbENsb3NlZC5wcm90b3R5cGUgPSB7XG4gIGFyZWFTdGFydDogbm9vcCxcbiAgYXJlYUVuZDogbm9vcCxcbiAgbGluZVN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl94MCA9IHRoaXMuX3gxID0gdGhpcy5feDIgPSB0aGlzLl94MyA9IHRoaXMuX3g0ID0gdGhpcy5feDUgPVxuICAgIHRoaXMuX3kwID0gdGhpcy5feTEgPSB0aGlzLl95MiA9IHRoaXMuX3kzID0gdGhpcy5feTQgPSB0aGlzLl95NSA9IE5hTjtcbiAgICB0aGlzLl9wb2ludCA9IDA7XG4gIH0sXG4gIGxpbmVFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIHN3aXRjaCAodGhpcy5fcG9pbnQpIHtcbiAgICAgIGNhc2UgMToge1xuICAgICAgICB0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94MywgdGhpcy5feTMpO1xuICAgICAgICB0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgMjoge1xuICAgICAgICB0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MywgdGhpcy5feTMpO1xuICAgICAgICB0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgMzoge1xuICAgICAgICB0aGlzLnBvaW50KHRoaXMuX3gzLCB0aGlzLl95Myk7XG4gICAgICAgIHRoaXMucG9pbnQodGhpcy5feDQsIHRoaXMuX3k0KTtcbiAgICAgICAgdGhpcy5wb2ludCh0aGlzLl94NSwgdGhpcy5feTUpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIHBvaW50OiBmdW5jdGlvbih4LCB5KSB7XG4gICAgeCA9ICt4LCB5ID0gK3k7XG4gICAgc3dpdGNoICh0aGlzLl9wb2ludCkge1xuICAgICAgY2FzZSAwOiB0aGlzLl9wb2ludCA9IDE7IHRoaXMuX3gzID0geCwgdGhpcy5feTMgPSB5OyBicmVhaztcbiAgICAgIGNhc2UgMTogdGhpcy5fcG9pbnQgPSAyOyB0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94NCA9IHgsIHRoaXMuX3k0ID0geSk7IGJyZWFrO1xuICAgICAgY2FzZSAyOiB0aGlzLl9wb2ludCA9IDM7IHRoaXMuX3g1ID0geCwgdGhpcy5feTUgPSB5OyBicmVhaztcbiAgICAgIGRlZmF1bHQ6IHBvaW50KHRoaXMsIHgsIHkpOyBicmVhaztcbiAgICB9XG4gICAgdGhpcy5feDAgPSB0aGlzLl94MSwgdGhpcy5feDEgPSB0aGlzLl94MiwgdGhpcy5feDIgPSB4O1xuICAgIHRoaXMuX3kwID0gdGhpcy5feTEsIHRoaXMuX3kxID0gdGhpcy5feTIsIHRoaXMuX3kyID0geTtcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgKGZ1bmN0aW9uIGN1c3RvbSh0ZW5zaW9uKSB7XG5cbiAgZnVuY3Rpb24gY2FyZGluYWwoY29udGV4dCkge1xuICAgIHJldHVybiBuZXcgQ2FyZGluYWxDbG9zZWQoY29udGV4dCwgdGVuc2lvbik7XG4gIH1cblxuICBjYXJkaW5hbC50ZW5zaW9uID0gZnVuY3Rpb24odGVuc2lvbikge1xuICAgIHJldHVybiBjdXN0b20oK3RlbnNpb24pO1xuICB9O1xuXG4gIHJldHVybiBjYXJkaW5hbDtcbn0pKDApO1xuIiwiaW1wb3J0IHtwb2ludH0gZnJvbSBcIi4vY2FyZGluYWwuanNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIENhcmRpbmFsT3Blbihjb250ZXh0LCB0ZW5zaW9uKSB7XG4gIHRoaXMuX2NvbnRleHQgPSBjb250ZXh0O1xuICB0aGlzLl9rID0gKDEgLSB0ZW5zaW9uKSAvIDY7XG59XG5cbkNhcmRpbmFsT3Blbi5wcm90b3R5cGUgPSB7XG4gIGFyZWFTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fbGluZSA9IDA7XG4gIH0sXG4gIGFyZWFFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xpbmUgPSBOYU47XG4gIH0sXG4gIGxpbmVTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5feDAgPSB0aGlzLl94MSA9IHRoaXMuX3gyID1cbiAgICB0aGlzLl95MCA9IHRoaXMuX3kxID0gdGhpcy5feTIgPSBOYU47XG4gICAgdGhpcy5fcG9pbnQgPSAwO1xuICB9LFxuICBsaW5lRW5kOiBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5fbGluZSB8fCAodGhpcy5fbGluZSAhPT0gMCAmJiB0aGlzLl9wb2ludCA9PT0gMykpIHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgdGhpcy5fbGluZSA9IDEgLSB0aGlzLl9saW5lO1xuICB9LFxuICBwb2ludDogZnVuY3Rpb24oeCwgeSkge1xuICAgIHggPSAreCwgeSA9ICt5O1xuICAgIHN3aXRjaCAodGhpcy5fcG9pbnQpIHtcbiAgICAgIGNhc2UgMDogdGhpcy5fcG9pbnQgPSAxOyBicmVhaztcbiAgICAgIGNhc2UgMTogdGhpcy5fcG9pbnQgPSAyOyBicmVhaztcbiAgICAgIGNhc2UgMjogdGhpcy5fcG9pbnQgPSAzOyB0aGlzLl9saW5lID8gdGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsIHRoaXMuX3kyKSA6IHRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLCB0aGlzLl95Mik7IGJyZWFrO1xuICAgICAgY2FzZSAzOiB0aGlzLl9wb2ludCA9IDQ7IC8vIHByb2NlZWRcbiAgICAgIGRlZmF1bHQ6IHBvaW50KHRoaXMsIHgsIHkpOyBicmVhaztcbiAgICB9XG4gICAgdGhpcy5feDAgPSB0aGlzLl94MSwgdGhpcy5feDEgPSB0aGlzLl94MiwgdGhpcy5feDIgPSB4O1xuICAgIHRoaXMuX3kwID0gdGhpcy5feTEsIHRoaXMuX3kxID0gdGhpcy5feTIsIHRoaXMuX3kyID0geTtcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgKGZ1bmN0aW9uIGN1c3RvbSh0ZW5zaW9uKSB7XG5cbiAgZnVuY3Rpb24gY2FyZGluYWwoY29udGV4dCkge1xuICAgIHJldHVybiBuZXcgQ2FyZGluYWxPcGVuKGNvbnRleHQsIHRlbnNpb24pO1xuICB9XG5cbiAgY2FyZGluYWwudGVuc2lvbiA9IGZ1bmN0aW9uKHRlbnNpb24pIHtcbiAgICByZXR1cm4gY3VzdG9tKCt0ZW5zaW9uKTtcbiAgfTtcblxuICByZXR1cm4gY2FyZGluYWw7XG59KSgwKTtcbiIsImltcG9ydCB7ZXBzaWxvbn0gZnJvbSBcIi4uL21hdGguanNcIjtcbmltcG9ydCB7Q2FyZGluYWx9IGZyb20gXCIuL2NhcmRpbmFsLmpzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBwb2ludCh0aGF0LCB4LCB5KSB7XG4gIHZhciB4MSA9IHRoYXQuX3gxLFxuICAgICAgeTEgPSB0aGF0Ll95MSxcbiAgICAgIHgyID0gdGhhdC5feDIsXG4gICAgICB5MiA9IHRoYXQuX3kyO1xuXG4gIGlmICh0aGF0Ll9sMDFfYSA+IGVwc2lsb24pIHtcbiAgICB2YXIgYSA9IDIgKiB0aGF0Ll9sMDFfMmEgKyAzICogdGhhdC5fbDAxX2EgKiB0aGF0Ll9sMTJfYSArIHRoYXQuX2wxMl8yYSxcbiAgICAgICAgbiA9IDMgKiB0aGF0Ll9sMDFfYSAqICh0aGF0Ll9sMDFfYSArIHRoYXQuX2wxMl9hKTtcbiAgICB4MSA9ICh4MSAqIGEgLSB0aGF0Ll94MCAqIHRoYXQuX2wxMl8yYSArIHRoYXQuX3gyICogdGhhdC5fbDAxXzJhKSAvIG47XG4gICAgeTEgPSAoeTEgKiBhIC0gdGhhdC5feTAgKiB0aGF0Ll9sMTJfMmEgKyB0aGF0Ll95MiAqIHRoYXQuX2wwMV8yYSkgLyBuO1xuICB9XG5cbiAgaWYgKHRoYXQuX2wyM19hID4gZXBzaWxvbikge1xuICAgIHZhciBiID0gMiAqIHRoYXQuX2wyM18yYSArIDMgKiB0aGF0Ll9sMjNfYSAqIHRoYXQuX2wxMl9hICsgdGhhdC5fbDEyXzJhLFxuICAgICAgICBtID0gMyAqIHRoYXQuX2wyM19hICogKHRoYXQuX2wyM19hICsgdGhhdC5fbDEyX2EpO1xuICAgIHgyID0gKHgyICogYiArIHRoYXQuX3gxICogdGhhdC5fbDIzXzJhIC0geCAqIHRoYXQuX2wxMl8yYSkgLyBtO1xuICAgIHkyID0gKHkyICogYiArIHRoYXQuX3kxICogdGhhdC5fbDIzXzJhIC0geSAqIHRoYXQuX2wxMl8yYSkgLyBtO1xuICB9XG5cbiAgdGhhdC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHgxLCB5MSwgeDIsIHkyLCB0aGF0Ll94MiwgdGhhdC5feTIpO1xufVxuXG5mdW5jdGlvbiBDYXRtdWxsUm9tKGNvbnRleHQsIGFscGhhKSB7XG4gIHRoaXMuX2NvbnRleHQgPSBjb250ZXh0O1xuICB0aGlzLl9hbHBoYSA9IGFscGhhO1xufVxuXG5DYXRtdWxsUm9tLnByb3RvdHlwZSA9IHtcbiAgYXJlYVN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9saW5lID0gMDtcbiAgfSxcbiAgYXJlYUVuZDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fbGluZSA9IE5hTjtcbiAgfSxcbiAgbGluZVN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl94MCA9IHRoaXMuX3gxID0gdGhpcy5feDIgPVxuICAgIHRoaXMuX3kwID0gdGhpcy5feTEgPSB0aGlzLl95MiA9IE5hTjtcbiAgICB0aGlzLl9sMDFfYSA9IHRoaXMuX2wxMl9hID0gdGhpcy5fbDIzX2EgPVxuICAgIHRoaXMuX2wwMV8yYSA9IHRoaXMuX2wxMl8yYSA9IHRoaXMuX2wyM18yYSA9XG4gICAgdGhpcy5fcG9pbnQgPSAwO1xuICB9LFxuICBsaW5lRW5kOiBmdW5jdGlvbigpIHtcbiAgICBzd2l0Y2ggKHRoaXMuX3BvaW50KSB7XG4gICAgICBjYXNlIDI6IHRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLCB0aGlzLl95Mik7IGJyZWFrO1xuICAgICAgY2FzZSAzOiB0aGlzLnBvaW50KHRoaXMuX3gyLCB0aGlzLl95Mik7IGJyZWFrO1xuICAgIH1cbiAgICBpZiAodGhpcy5fbGluZSB8fCAodGhpcy5fbGluZSAhPT0gMCAmJiB0aGlzLl9wb2ludCA9PT0gMSkpIHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgdGhpcy5fbGluZSA9IDEgLSB0aGlzLl9saW5lO1xuICB9LFxuICBwb2ludDogZnVuY3Rpb24oeCwgeSkge1xuICAgIHggPSAreCwgeSA9ICt5O1xuXG4gICAgaWYgKHRoaXMuX3BvaW50KSB7XG4gICAgICB2YXIgeDIzID0gdGhpcy5feDIgLSB4LFxuICAgICAgICAgIHkyMyA9IHRoaXMuX3kyIC0geTtcbiAgICAgIHRoaXMuX2wyM19hID0gTWF0aC5zcXJ0KHRoaXMuX2wyM18yYSA9IE1hdGgucG93KHgyMyAqIHgyMyArIHkyMyAqIHkyMywgdGhpcy5fYWxwaGEpKTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHRoaXMuX3BvaW50KSB7XG4gICAgICBjYXNlIDA6IHRoaXMuX3BvaW50ID0gMTsgdGhpcy5fbGluZSA/IHRoaXMuX2NvbnRleHQubGluZVRvKHgsIHkpIDogdGhpcy5fY29udGV4dC5tb3ZlVG8oeCwgeSk7IGJyZWFrO1xuICAgICAgY2FzZSAxOiB0aGlzLl9wb2ludCA9IDI7IGJyZWFrO1xuICAgICAgY2FzZSAyOiB0aGlzLl9wb2ludCA9IDM7IC8vIHByb2NlZWRcbiAgICAgIGRlZmF1bHQ6IHBvaW50KHRoaXMsIHgsIHkpOyBicmVhaztcbiAgICB9XG5cbiAgICB0aGlzLl9sMDFfYSA9IHRoaXMuX2wxMl9hLCB0aGlzLl9sMTJfYSA9IHRoaXMuX2wyM19hO1xuICAgIHRoaXMuX2wwMV8yYSA9IHRoaXMuX2wxMl8yYSwgdGhpcy5fbDEyXzJhID0gdGhpcy5fbDIzXzJhO1xuICAgIHRoaXMuX3gwID0gdGhpcy5feDEsIHRoaXMuX3gxID0gdGhpcy5feDIsIHRoaXMuX3gyID0geDtcbiAgICB0aGlzLl95MCA9IHRoaXMuX3kxLCB0aGlzLl95MSA9IHRoaXMuX3kyLCB0aGlzLl95MiA9IHk7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IChmdW5jdGlvbiBjdXN0b20oYWxwaGEpIHtcblxuICBmdW5jdGlvbiBjYXRtdWxsUm9tKGNvbnRleHQpIHtcbiAgICByZXR1cm4gYWxwaGEgPyBuZXcgQ2F0bXVsbFJvbShjb250ZXh0LCBhbHBoYSkgOiBuZXcgQ2FyZGluYWwoY29udGV4dCwgMCk7XG4gIH1cblxuICBjYXRtdWxsUm9tLmFscGhhID0gZnVuY3Rpb24oYWxwaGEpIHtcbiAgICByZXR1cm4gY3VzdG9tKCthbHBoYSk7XG4gIH07XG5cbiAgcmV0dXJuIGNhdG11bGxSb207XG59KSgwLjUpO1xuIiwiaW1wb3J0IHtDYXJkaW5hbENsb3NlZH0gZnJvbSBcIi4vY2FyZGluYWxDbG9zZWQuanNcIjtcbmltcG9ydCBub29wIGZyb20gXCIuLi9ub29wLmpzXCI7XG5pbXBvcnQge3BvaW50fSBmcm9tIFwiLi9jYXRtdWxsUm9tLmpzXCI7XG5cbmZ1bmN0aW9uIENhdG11bGxSb21DbG9zZWQoY29udGV4dCwgYWxwaGEpIHtcbiAgdGhpcy5fY29udGV4dCA9IGNvbnRleHQ7XG4gIHRoaXMuX2FscGhhID0gYWxwaGE7XG59XG5cbkNhdG11bGxSb21DbG9zZWQucHJvdG90eXBlID0ge1xuICBhcmVhU3RhcnQ6IG5vb3AsXG4gIGFyZWFFbmQ6IG5vb3AsXG4gIGxpbmVTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5feDAgPSB0aGlzLl94MSA9IHRoaXMuX3gyID0gdGhpcy5feDMgPSB0aGlzLl94NCA9IHRoaXMuX3g1ID1cbiAgICB0aGlzLl95MCA9IHRoaXMuX3kxID0gdGhpcy5feTIgPSB0aGlzLl95MyA9IHRoaXMuX3k0ID0gdGhpcy5feTUgPSBOYU47XG4gICAgdGhpcy5fbDAxX2EgPSB0aGlzLl9sMTJfYSA9IHRoaXMuX2wyM19hID1cbiAgICB0aGlzLl9sMDFfMmEgPSB0aGlzLl9sMTJfMmEgPSB0aGlzLl9sMjNfMmEgPVxuICAgIHRoaXMuX3BvaW50ID0gMDtcbiAgfSxcbiAgbGluZUVuZDogZnVuY3Rpb24oKSB7XG4gICAgc3dpdGNoICh0aGlzLl9wb2ludCkge1xuICAgICAgY2FzZSAxOiB7XG4gICAgICAgIHRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLCB0aGlzLl95Myk7XG4gICAgICAgIHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAyOiB7XG4gICAgICAgIHRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gzLCB0aGlzLl95Myk7XG4gICAgICAgIHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAzOiB7XG4gICAgICAgIHRoaXMucG9pbnQodGhpcy5feDMsIHRoaXMuX3kzKTtcbiAgICAgICAgdGhpcy5wb2ludCh0aGlzLl94NCwgdGhpcy5feTQpO1xuICAgICAgICB0aGlzLnBvaW50KHRoaXMuX3g1LCB0aGlzLl95NSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgcG9pbnQ6IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICB4ID0gK3gsIHkgPSAreTtcblxuICAgIGlmICh0aGlzLl9wb2ludCkge1xuICAgICAgdmFyIHgyMyA9IHRoaXMuX3gyIC0geCxcbiAgICAgICAgICB5MjMgPSB0aGlzLl95MiAtIHk7XG4gICAgICB0aGlzLl9sMjNfYSA9IE1hdGguc3FydCh0aGlzLl9sMjNfMmEgPSBNYXRoLnBvdyh4MjMgKiB4MjMgKyB5MjMgKiB5MjMsIHRoaXMuX2FscGhhKSk7XG4gICAgfVxuXG4gICAgc3dpdGNoICh0aGlzLl9wb2ludCkge1xuICAgICAgY2FzZSAwOiB0aGlzLl9wb2ludCA9IDE7IHRoaXMuX3gzID0geCwgdGhpcy5feTMgPSB5OyBicmVhaztcbiAgICAgIGNhc2UgMTogdGhpcy5fcG9pbnQgPSAyOyB0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94NCA9IHgsIHRoaXMuX3k0ID0geSk7IGJyZWFrO1xuICAgICAgY2FzZSAyOiB0aGlzLl9wb2ludCA9IDM7IHRoaXMuX3g1ID0geCwgdGhpcy5feTUgPSB5OyBicmVhaztcbiAgICAgIGRlZmF1bHQ6IHBvaW50KHRoaXMsIHgsIHkpOyBicmVhaztcbiAgICB9XG5cbiAgICB0aGlzLl9sMDFfYSA9IHRoaXMuX2wxMl9hLCB0aGlzLl9sMTJfYSA9IHRoaXMuX2wyM19hO1xuICAgIHRoaXMuX2wwMV8yYSA9IHRoaXMuX2wxMl8yYSwgdGhpcy5fbDEyXzJhID0gdGhpcy5fbDIzXzJhO1xuICAgIHRoaXMuX3gwID0gdGhpcy5feDEsIHRoaXMuX3gxID0gdGhpcy5feDIsIHRoaXMuX3gyID0geDtcbiAgICB0aGlzLl95MCA9IHRoaXMuX3kxLCB0aGlzLl95MSA9IHRoaXMuX3kyLCB0aGlzLl95MiA9IHk7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IChmdW5jdGlvbiBjdXN0b20oYWxwaGEpIHtcblxuICBmdW5jdGlvbiBjYXRtdWxsUm9tKGNvbnRleHQpIHtcbiAgICByZXR1cm4gYWxwaGEgPyBuZXcgQ2F0bXVsbFJvbUNsb3NlZChjb250ZXh0LCBhbHBoYSkgOiBuZXcgQ2FyZGluYWxDbG9zZWQoY29udGV4dCwgMCk7XG4gIH1cblxuICBjYXRtdWxsUm9tLmFscGhhID0gZnVuY3Rpb24oYWxwaGEpIHtcbiAgICByZXR1cm4gY3VzdG9tKCthbHBoYSk7XG4gIH07XG5cbiAgcmV0dXJuIGNhdG11bGxSb207XG59KSgwLjUpO1xuIiwiaW1wb3J0IHtDYXJkaW5hbE9wZW59IGZyb20gXCIuL2NhcmRpbmFsT3Blbi5qc1wiO1xuaW1wb3J0IHtwb2ludH0gZnJvbSBcIi4vY2F0bXVsbFJvbS5qc1wiO1xuXG5mdW5jdGlvbiBDYXRtdWxsUm9tT3Blbihjb250ZXh0LCBhbHBoYSkge1xuICB0aGlzLl9jb250ZXh0ID0gY29udGV4dDtcbiAgdGhpcy5fYWxwaGEgPSBhbHBoYTtcbn1cblxuQ2F0bXVsbFJvbU9wZW4ucHJvdG90eXBlID0ge1xuICBhcmVhU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xpbmUgPSAwO1xuICB9LFxuICBhcmVhRW5kOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9saW5lID0gTmFOO1xuICB9LFxuICBsaW5lU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX3gwID0gdGhpcy5feDEgPSB0aGlzLl94MiA9XG4gICAgdGhpcy5feTAgPSB0aGlzLl95MSA9IHRoaXMuX3kyID0gTmFOO1xuICAgIHRoaXMuX2wwMV9hID0gdGhpcy5fbDEyX2EgPSB0aGlzLl9sMjNfYSA9XG4gICAgdGhpcy5fbDAxXzJhID0gdGhpcy5fbDEyXzJhID0gdGhpcy5fbDIzXzJhID1cbiAgICB0aGlzLl9wb2ludCA9IDA7XG4gIH0sXG4gIGxpbmVFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLl9saW5lIHx8ICh0aGlzLl9saW5lICE9PSAwICYmIHRoaXMuX3BvaW50ID09PSAzKSkgdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICB0aGlzLl9saW5lID0gMSAtIHRoaXMuX2xpbmU7XG4gIH0sXG4gIHBvaW50OiBmdW5jdGlvbih4LCB5KSB7XG4gICAgeCA9ICt4LCB5ID0gK3k7XG5cbiAgICBpZiAodGhpcy5fcG9pbnQpIHtcbiAgICAgIHZhciB4MjMgPSB0aGlzLl94MiAtIHgsXG4gICAgICAgICAgeTIzID0gdGhpcy5feTIgLSB5O1xuICAgICAgdGhpcy5fbDIzX2EgPSBNYXRoLnNxcnQodGhpcy5fbDIzXzJhID0gTWF0aC5wb3coeDIzICogeDIzICsgeTIzICogeTIzLCB0aGlzLl9hbHBoYSkpO1xuICAgIH1cblxuICAgIHN3aXRjaCAodGhpcy5fcG9pbnQpIHtcbiAgICAgIGNhc2UgMDogdGhpcy5fcG9pbnQgPSAxOyBicmVhaztcbiAgICAgIGNhc2UgMTogdGhpcy5fcG9pbnQgPSAyOyBicmVhaztcbiAgICAgIGNhc2UgMjogdGhpcy5fcG9pbnQgPSAzOyB0aGlzLl9saW5lID8gdGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsIHRoaXMuX3kyKSA6IHRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLCB0aGlzLl95Mik7IGJyZWFrO1xuICAgICAgY2FzZSAzOiB0aGlzLl9wb2ludCA9IDQ7IC8vIHByb2NlZWRcbiAgICAgIGRlZmF1bHQ6IHBvaW50KHRoaXMsIHgsIHkpOyBicmVhaztcbiAgICB9XG5cbiAgICB0aGlzLl9sMDFfYSA9IHRoaXMuX2wxMl9hLCB0aGlzLl9sMTJfYSA9IHRoaXMuX2wyM19hO1xuICAgIHRoaXMuX2wwMV8yYSA9IHRoaXMuX2wxMl8yYSwgdGhpcy5fbDEyXzJhID0gdGhpcy5fbDIzXzJhO1xuICAgIHRoaXMuX3gwID0gdGhpcy5feDEsIHRoaXMuX3gxID0gdGhpcy5feDIsIHRoaXMuX3gyID0geDtcbiAgICB0aGlzLl95MCA9IHRoaXMuX3kxLCB0aGlzLl95MSA9IHRoaXMuX3kyLCB0aGlzLl95MiA9IHk7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IChmdW5jdGlvbiBjdXN0b20oYWxwaGEpIHtcblxuICBmdW5jdGlvbiBjYXRtdWxsUm9tKGNvbnRleHQpIHtcbiAgICByZXR1cm4gYWxwaGEgPyBuZXcgQ2F0bXVsbFJvbU9wZW4oY29udGV4dCwgYWxwaGEpIDogbmV3IENhcmRpbmFsT3Blbihjb250ZXh0LCAwKTtcbiAgfVxuXG4gIGNhdG11bGxSb20uYWxwaGEgPSBmdW5jdGlvbihhbHBoYSkge1xuICAgIHJldHVybiBjdXN0b20oK2FscGhhKTtcbiAgfTtcblxuICByZXR1cm4gY2F0bXVsbFJvbTtcbn0pKDAuNSk7XG4iLCJmdW5jdGlvbiBMaW5lYXIoY29udGV4dCkge1xuICB0aGlzLl9jb250ZXh0ID0gY29udGV4dDtcbn1cblxuTGluZWFyLnByb3RvdHlwZSA9IHtcbiAgYXJlYVN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9saW5lID0gMDtcbiAgfSxcbiAgYXJlYUVuZDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fbGluZSA9IE5hTjtcbiAgfSxcbiAgbGluZVN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9wb2ludCA9IDA7XG4gIH0sXG4gIGxpbmVFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLl9saW5lIHx8ICh0aGlzLl9saW5lICE9PSAwICYmIHRoaXMuX3BvaW50ID09PSAxKSkgdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICB0aGlzLl9saW5lID0gMSAtIHRoaXMuX2xpbmU7XG4gIH0sXG4gIHBvaW50OiBmdW5jdGlvbih4LCB5KSB7XG4gICAgeCA9ICt4LCB5ID0gK3k7XG4gICAgc3dpdGNoICh0aGlzLl9wb2ludCkge1xuICAgICAgY2FzZSAwOiB0aGlzLl9wb2ludCA9IDE7IHRoaXMuX2xpbmUgPyB0aGlzLl9jb250ZXh0LmxpbmVUbyh4LCB5KSA6IHRoaXMuX2NvbnRleHQubW92ZVRvKHgsIHkpOyBicmVhaztcbiAgICAgIGNhc2UgMTogdGhpcy5fcG9pbnQgPSAyOyAvLyBwcm9jZWVkXG4gICAgICBkZWZhdWx0OiB0aGlzLl9jb250ZXh0LmxpbmVUbyh4LCB5KTsgYnJlYWs7XG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjb250ZXh0KSB7XG4gIHJldHVybiBuZXcgTGluZWFyKGNvbnRleHQpO1xufVxuIiwiaW1wb3J0IG5vb3AgZnJvbSBcIi4uL25vb3AuanNcIjtcblxuZnVuY3Rpb24gTGluZWFyQ2xvc2VkKGNvbnRleHQpIHtcbiAgdGhpcy5fY29udGV4dCA9IGNvbnRleHQ7XG59XG5cbkxpbmVhckNsb3NlZC5wcm90b3R5cGUgPSB7XG4gIGFyZWFTdGFydDogbm9vcCxcbiAgYXJlYUVuZDogbm9vcCxcbiAgbGluZVN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9wb2ludCA9IDA7XG4gIH0sXG4gIGxpbmVFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLl9wb2ludCkgdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgfSxcbiAgcG9pbnQ6IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICB4ID0gK3gsIHkgPSAreTtcbiAgICBpZiAodGhpcy5fcG9pbnQpIHRoaXMuX2NvbnRleHQubGluZVRvKHgsIHkpO1xuICAgIGVsc2UgdGhpcy5fcG9pbnQgPSAxLCB0aGlzLl9jb250ZXh0Lm1vdmVUbyh4LCB5KTtcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY29udGV4dCkge1xuICByZXR1cm4gbmV3IExpbmVhckNsb3NlZChjb250ZXh0KTtcbn1cbiIsImZ1bmN0aW9uIHNpZ24oeCkge1xuICByZXR1cm4geCA8IDAgPyAtMSA6IDE7XG59XG5cbi8vIENhbGN1bGF0ZSB0aGUgc2xvcGVzIG9mIHRoZSB0YW5nZW50cyAoSGVybWl0ZS10eXBlIGludGVycG9sYXRpb24pIGJhc2VkIG9uXG4vLyB0aGUgZm9sbG93aW5nIHBhcGVyOiBTdGVmZmVuLCBNLiAxOTkwLiBBIFNpbXBsZSBNZXRob2QgZm9yIE1vbm90b25pY1xuLy8gSW50ZXJwb2xhdGlvbiBpbiBPbmUgRGltZW5zaW9uLiBBc3Ryb25vbXkgYW5kIEFzdHJvcGh5c2ljcywgVm9sLiAyMzksIE5PLlxuLy8gTk9WKElJKSwgUC4gNDQzLCAxOTkwLlxuZnVuY3Rpb24gc2xvcGUzKHRoYXQsIHgyLCB5Mikge1xuICB2YXIgaDAgPSB0aGF0Ll94MSAtIHRoYXQuX3gwLFxuICAgICAgaDEgPSB4MiAtIHRoYXQuX3gxLFxuICAgICAgczAgPSAodGhhdC5feTEgLSB0aGF0Ll95MCkgLyAoaDAgfHwgaDEgPCAwICYmIC0wKSxcbiAgICAgIHMxID0gKHkyIC0gdGhhdC5feTEpIC8gKGgxIHx8IGgwIDwgMCAmJiAtMCksXG4gICAgICBwID0gKHMwICogaDEgKyBzMSAqIGgwKSAvIChoMCArIGgxKTtcbiAgcmV0dXJuIChzaWduKHMwKSArIHNpZ24oczEpKSAqIE1hdGgubWluKE1hdGguYWJzKHMwKSwgTWF0aC5hYnMoczEpLCAwLjUgKiBNYXRoLmFicyhwKSkgfHwgMDtcbn1cblxuLy8gQ2FsY3VsYXRlIGEgb25lLXNpZGVkIHNsb3BlLlxuZnVuY3Rpb24gc2xvcGUyKHRoYXQsIHQpIHtcbiAgdmFyIGggPSB0aGF0Ll94MSAtIHRoYXQuX3gwO1xuICByZXR1cm4gaCA/ICgzICogKHRoYXQuX3kxIC0gdGhhdC5feTApIC8gaCAtIHQpIC8gMiA6IHQ7XG59XG5cbi8vIEFjY29yZGluZyB0byBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9DdWJpY19IZXJtaXRlX3NwbGluZSNSZXByZXNlbnRhdGlvbnNcbi8vIFwieW91IGNhbiBleHByZXNzIGN1YmljIEhlcm1pdGUgaW50ZXJwb2xhdGlvbiBpbiB0ZXJtcyBvZiBjdWJpYyBCw6l6aWVyIGN1cnZlc1xuLy8gd2l0aCByZXNwZWN0IHRvIHRoZSBmb3VyIHZhbHVlcyBwMCwgcDAgKyBtMCAvIDMsIHAxIC0gbTEgLyAzLCBwMVwiLlxuZnVuY3Rpb24gcG9pbnQodGhhdCwgdDAsIHQxKSB7XG4gIHZhciB4MCA9IHRoYXQuX3gwLFxuICAgICAgeTAgPSB0aGF0Ll95MCxcbiAgICAgIHgxID0gdGhhdC5feDEsXG4gICAgICB5MSA9IHRoYXQuX3kxLFxuICAgICAgZHggPSAoeDEgLSB4MCkgLyAzO1xuICB0aGF0Ll9jb250ZXh0LmJlemllckN1cnZlVG8oeDAgKyBkeCwgeTAgKyBkeCAqIHQwLCB4MSAtIGR4LCB5MSAtIGR4ICogdDEsIHgxLCB5MSk7XG59XG5cbmZ1bmN0aW9uIE1vbm90b25lWChjb250ZXh0KSB7XG4gIHRoaXMuX2NvbnRleHQgPSBjb250ZXh0O1xufVxuXG5Nb25vdG9uZVgucHJvdG90eXBlID0ge1xuICBhcmVhU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xpbmUgPSAwO1xuICB9LFxuICBhcmVhRW5kOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9saW5lID0gTmFOO1xuICB9LFxuICBsaW5lU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX3gwID0gdGhpcy5feDEgPVxuICAgIHRoaXMuX3kwID0gdGhpcy5feTEgPVxuICAgIHRoaXMuX3QwID0gTmFOO1xuICAgIHRoaXMuX3BvaW50ID0gMDtcbiAgfSxcbiAgbGluZUVuZDogZnVuY3Rpb24oKSB7XG4gICAgc3dpdGNoICh0aGlzLl9wb2ludCkge1xuICAgICAgY2FzZSAyOiB0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MSwgdGhpcy5feTEpOyBicmVhaztcbiAgICAgIGNhc2UgMzogcG9pbnQodGhpcywgdGhpcy5fdDAsIHNsb3BlMih0aGlzLCB0aGlzLl90MCkpOyBicmVhaztcbiAgICB9XG4gICAgaWYgKHRoaXMuX2xpbmUgfHwgKHRoaXMuX2xpbmUgIT09IDAgJiYgdGhpcy5fcG9pbnQgPT09IDEpKSB0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgIHRoaXMuX2xpbmUgPSAxIC0gdGhpcy5fbGluZTtcbiAgfSxcbiAgcG9pbnQ6IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICB2YXIgdDEgPSBOYU47XG5cbiAgICB4ID0gK3gsIHkgPSAreTtcbiAgICBpZiAoeCA9PT0gdGhpcy5feDEgJiYgeSA9PT0gdGhpcy5feTEpIHJldHVybjsgLy8gSWdub3JlIGNvaW5jaWRlbnQgcG9pbnRzLlxuICAgIHN3aXRjaCAodGhpcy5fcG9pbnQpIHtcbiAgICAgIGNhc2UgMDogdGhpcy5fcG9pbnQgPSAxOyB0aGlzLl9saW5lID8gdGhpcy5fY29udGV4dC5saW5lVG8oeCwgeSkgOiB0aGlzLl9jb250ZXh0Lm1vdmVUbyh4LCB5KTsgYnJlYWs7XG4gICAgICBjYXNlIDE6IHRoaXMuX3BvaW50ID0gMjsgYnJlYWs7XG4gICAgICBjYXNlIDI6IHRoaXMuX3BvaW50ID0gMzsgcG9pbnQodGhpcywgc2xvcGUyKHRoaXMsIHQxID0gc2xvcGUzKHRoaXMsIHgsIHkpKSwgdDEpOyBicmVhaztcbiAgICAgIGRlZmF1bHQ6IHBvaW50KHRoaXMsIHRoaXMuX3QwLCB0MSA9IHNsb3BlMyh0aGlzLCB4LCB5KSk7IGJyZWFrO1xuICAgIH1cblxuICAgIHRoaXMuX3gwID0gdGhpcy5feDEsIHRoaXMuX3gxID0geDtcbiAgICB0aGlzLl95MCA9IHRoaXMuX3kxLCB0aGlzLl95MSA9IHk7XG4gICAgdGhpcy5fdDAgPSB0MTtcbiAgfVxufVxuXG5mdW5jdGlvbiBNb25vdG9uZVkoY29udGV4dCkge1xuICB0aGlzLl9jb250ZXh0ID0gbmV3IFJlZmxlY3RDb250ZXh0KGNvbnRleHQpO1xufVxuXG4oTW9ub3RvbmVZLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoTW9ub3RvbmVYLnByb3RvdHlwZSkpLnBvaW50ID0gZnVuY3Rpb24oeCwgeSkge1xuICBNb25vdG9uZVgucHJvdG90eXBlLnBvaW50LmNhbGwodGhpcywgeSwgeCk7XG59O1xuXG5mdW5jdGlvbiBSZWZsZWN0Q29udGV4dChjb250ZXh0KSB7XG4gIHRoaXMuX2NvbnRleHQgPSBjb250ZXh0O1xufVxuXG5SZWZsZWN0Q29udGV4dC5wcm90b3R5cGUgPSB7XG4gIG1vdmVUbzogZnVuY3Rpb24oeCwgeSkgeyB0aGlzLl9jb250ZXh0Lm1vdmVUbyh5LCB4KTsgfSxcbiAgY2xvc2VQYXRoOiBmdW5jdGlvbigpIHsgdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTsgfSxcbiAgbGluZVRvOiBmdW5jdGlvbih4LCB5KSB7IHRoaXMuX2NvbnRleHQubGluZVRvKHksIHgpOyB9LFxuICBiZXppZXJDdXJ2ZVRvOiBmdW5jdGlvbih4MSwgeTEsIHgyLCB5MiwgeCwgeSkgeyB0aGlzLl9jb250ZXh0LmJlemllckN1cnZlVG8oeTEsIHgxLCB5MiwgeDIsIHksIHgpOyB9XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gbW9ub3RvbmVYKGNvbnRleHQpIHtcbiAgcmV0dXJuIG5ldyBNb25vdG9uZVgoY29udGV4dCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtb25vdG9uZVkoY29udGV4dCkge1xuICByZXR1cm4gbmV3IE1vbm90b25lWShjb250ZXh0KTtcbn1cbiIsImZ1bmN0aW9uIE5hdHVyYWwoY29udGV4dCkge1xuICB0aGlzLl9jb250ZXh0ID0gY29udGV4dDtcbn1cblxuTmF0dXJhbC5wcm90b3R5cGUgPSB7XG4gIGFyZWFTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fbGluZSA9IDA7XG4gIH0sXG4gIGFyZWFFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xpbmUgPSBOYU47XG4gIH0sXG4gIGxpbmVTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5feCA9IFtdO1xuICAgIHRoaXMuX3kgPSBbXTtcbiAgfSxcbiAgbGluZUVuZDogZnVuY3Rpb24oKSB7XG4gICAgdmFyIHggPSB0aGlzLl94LFxuICAgICAgICB5ID0gdGhpcy5feSxcbiAgICAgICAgbiA9IHgubGVuZ3RoO1xuXG4gICAgaWYgKG4pIHtcbiAgICAgIHRoaXMuX2xpbmUgPyB0aGlzLl9jb250ZXh0LmxpbmVUbyh4WzBdLCB5WzBdKSA6IHRoaXMuX2NvbnRleHQubW92ZVRvKHhbMF0sIHlbMF0pO1xuICAgICAgaWYgKG4gPT09IDIpIHtcbiAgICAgICAgdGhpcy5fY29udGV4dC5saW5lVG8oeFsxXSwgeVsxXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgcHggPSBjb250cm9sUG9pbnRzKHgpLFxuICAgICAgICAgICAgcHkgPSBjb250cm9sUG9pbnRzKHkpO1xuICAgICAgICBmb3IgKHZhciBpMCA9IDAsIGkxID0gMTsgaTEgPCBuOyArK2kwLCArK2kxKSB7XG4gICAgICAgICAgdGhpcy5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHB4WzBdW2kwXSwgcHlbMF1baTBdLCBweFsxXVtpMF0sIHB5WzFdW2kwXSwgeFtpMV0sIHlbaTFdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9saW5lIHx8ICh0aGlzLl9saW5lICE9PSAwICYmIG4gPT09IDEpKSB0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgIHRoaXMuX2xpbmUgPSAxIC0gdGhpcy5fbGluZTtcbiAgICB0aGlzLl94ID0gdGhpcy5feSA9IG51bGw7XG4gIH0sXG4gIHBvaW50OiBmdW5jdGlvbih4LCB5KSB7XG4gICAgdGhpcy5feC5wdXNoKCt4KTtcbiAgICB0aGlzLl95LnB1c2goK3kpO1xuICB9XG59O1xuXG4vLyBTZWUgaHR0cHM6Ly93d3cucGFydGljbGVpbmNlbGwuY29tLzIwMTIvYmV6aWVyLXNwbGluZXMvIGZvciBkZXJpdmF0aW9uLlxuZnVuY3Rpb24gY29udHJvbFBvaW50cyh4KSB7XG4gIHZhciBpLFxuICAgICAgbiA9IHgubGVuZ3RoIC0gMSxcbiAgICAgIG0sXG4gICAgICBhID0gbmV3IEFycmF5KG4pLFxuICAgICAgYiA9IG5ldyBBcnJheShuKSxcbiAgICAgIHIgPSBuZXcgQXJyYXkobik7XG4gIGFbMF0gPSAwLCBiWzBdID0gMiwgclswXSA9IHhbMF0gKyAyICogeFsxXTtcbiAgZm9yIChpID0gMTsgaSA8IG4gLSAxOyArK2kpIGFbaV0gPSAxLCBiW2ldID0gNCwgcltpXSA9IDQgKiB4W2ldICsgMiAqIHhbaSArIDFdO1xuICBhW24gLSAxXSA9IDIsIGJbbiAtIDFdID0gNywgcltuIC0gMV0gPSA4ICogeFtuIC0gMV0gKyB4W25dO1xuICBmb3IgKGkgPSAxOyBpIDwgbjsgKytpKSBtID0gYVtpXSAvIGJbaSAtIDFdLCBiW2ldIC09IG0sIHJbaV0gLT0gbSAqIHJbaSAtIDFdO1xuICBhW24gLSAxXSA9IHJbbiAtIDFdIC8gYltuIC0gMV07XG4gIGZvciAoaSA9IG4gLSAyOyBpID49IDA7IC0taSkgYVtpXSA9IChyW2ldIC0gYVtpICsgMV0pIC8gYltpXTtcbiAgYltuIC0gMV0gPSAoeFtuXSArIGFbbiAtIDFdKSAvIDI7XG4gIGZvciAoaSA9IDA7IGkgPCBuIC0gMTsgKytpKSBiW2ldID0gMiAqIHhbaSArIDFdIC0gYVtpICsgMV07XG4gIHJldHVybiBbYSwgYl07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgcmV0dXJuIG5ldyBOYXR1cmFsKGNvbnRleHQpO1xufVxuIiwiaW1wb3J0IGN1cnZlTGluZWFyIGZyb20gXCIuL2xpbmVhci5qc1wiO1xuXG5leHBvcnQgdmFyIGN1cnZlUmFkaWFsTGluZWFyID0gY3VydmVSYWRpYWwoY3VydmVMaW5lYXIpO1xuXG5mdW5jdGlvbiBSYWRpYWwoY3VydmUpIHtcbiAgdGhpcy5fY3VydmUgPSBjdXJ2ZTtcbn1cblxuUmFkaWFsLnByb3RvdHlwZSA9IHtcbiAgYXJlYVN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9jdXJ2ZS5hcmVhU3RhcnQoKTtcbiAgfSxcbiAgYXJlYUVuZDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fY3VydmUuYXJlYUVuZCgpO1xuICB9LFxuICBsaW5lU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2N1cnZlLmxpbmVTdGFydCgpO1xuICB9LFxuICBsaW5lRW5kOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9jdXJ2ZS5saW5lRW5kKCk7XG4gIH0sXG4gIHBvaW50OiBmdW5jdGlvbihhLCByKSB7XG4gICAgdGhpcy5fY3VydmUucG9pbnQociAqIE1hdGguc2luKGEpLCByICogLU1hdGguY29zKGEpKTtcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3VydmVSYWRpYWwoY3VydmUpIHtcblxuICBmdW5jdGlvbiByYWRpYWwoY29udGV4dCkge1xuICAgIHJldHVybiBuZXcgUmFkaWFsKGN1cnZlKGNvbnRleHQpKTtcbiAgfVxuXG4gIHJhZGlhbC5fY3VydmUgPSBjdXJ2ZTtcblxuICByZXR1cm4gcmFkaWFsO1xufVxuIiwiZnVuY3Rpb24gU3RlcChjb250ZXh0LCB0KSB7XG4gIHRoaXMuX2NvbnRleHQgPSBjb250ZXh0O1xuICB0aGlzLl90ID0gdDtcbn1cblxuU3RlcC5wcm90b3R5cGUgPSB7XG4gIGFyZWFTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fbGluZSA9IDA7XG4gIH0sXG4gIGFyZWFFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xpbmUgPSBOYU47XG4gIH0sXG4gIGxpbmVTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5feCA9IHRoaXMuX3kgPSBOYU47XG4gICAgdGhpcy5fcG9pbnQgPSAwO1xuICB9LFxuICBsaW5lRW5kOiBmdW5jdGlvbigpIHtcbiAgICBpZiAoMCA8IHRoaXMuX3QgJiYgdGhpcy5fdCA8IDEgJiYgdGhpcy5fcG9pbnQgPT09IDIpIHRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gsIHRoaXMuX3kpO1xuICAgIGlmICh0aGlzLl9saW5lIHx8ICh0aGlzLl9saW5lICE9PSAwICYmIHRoaXMuX3BvaW50ID09PSAxKSkgdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICBpZiAodGhpcy5fbGluZSA+PSAwKSB0aGlzLl90ID0gMSAtIHRoaXMuX3QsIHRoaXMuX2xpbmUgPSAxIC0gdGhpcy5fbGluZTtcbiAgfSxcbiAgcG9pbnQ6IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICB4ID0gK3gsIHkgPSAreTtcbiAgICBzd2l0Y2ggKHRoaXMuX3BvaW50KSB7XG4gICAgICBjYXNlIDA6IHRoaXMuX3BvaW50ID0gMTsgdGhpcy5fbGluZSA/IHRoaXMuX2NvbnRleHQubGluZVRvKHgsIHkpIDogdGhpcy5fY29udGV4dC5tb3ZlVG8oeCwgeSk7IGJyZWFrO1xuICAgICAgY2FzZSAxOiB0aGlzLl9wb2ludCA9IDI7IC8vIHByb2NlZWRcbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgaWYgKHRoaXMuX3QgPD0gMCkge1xuICAgICAgICAgIHRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gsIHkpO1xuICAgICAgICAgIHRoaXMuX2NvbnRleHQubGluZVRvKHgsIHkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciB4MSA9IHRoaXMuX3ggKiAoMSAtIHRoaXMuX3QpICsgeCAqIHRoaXMuX3Q7XG4gICAgICAgICAgdGhpcy5fY29udGV4dC5saW5lVG8oeDEsIHRoaXMuX3kpO1xuICAgICAgICAgIHRoaXMuX2NvbnRleHQubGluZVRvKHgxLCB5KTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5feCA9IHgsIHRoaXMuX3kgPSB5O1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjb250ZXh0KSB7XG4gIHJldHVybiBuZXcgU3RlcChjb250ZXh0LCAwLjUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RlcEJlZm9yZShjb250ZXh0KSB7XG4gIHJldHVybiBuZXcgU3RlcChjb250ZXh0LCAwKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0ZXBBZnRlcihjb250ZXh0KSB7XG4gIHJldHVybiBuZXcgU3RlcChjb250ZXh0LCAxKTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgcmV0dXJuIGIgPCBhID8gLTEgOiBiID4gYSA/IDEgOiBiID49IGEgPyAwIDogTmFOO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oZCkge1xuICByZXR1cm4gZDtcbn1cbiIsImV4cG9ydCB7ZGVmYXVsdCBhcyBhcmN9IGZyb20gXCIuL2FyYy5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGFyZWF9IGZyb20gXCIuL2FyZWEuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBsaW5lfSBmcm9tIFwiLi9saW5lLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgcGllfSBmcm9tIFwiLi9waWUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBhcmVhUmFkaWFsLCBkZWZhdWx0IGFzIHJhZGlhbEFyZWF9IGZyb20gXCIuL2FyZWFSYWRpYWwuanNcIjsgLy8gTm90ZTogcmFkaWFsQXJlYSBpcyBkZXByZWNhdGVkIVxuZXhwb3J0IHtkZWZhdWx0IGFzIGxpbmVSYWRpYWwsIGRlZmF1bHQgYXMgcmFkaWFsTGluZX0gZnJvbSBcIi4vbGluZVJhZGlhbC5qc1wiOyAvLyBOb3RlOiByYWRpYWxMaW5lIGlzIGRlcHJlY2F0ZWQhXG5leHBvcnQge2RlZmF1bHQgYXMgcG9pbnRSYWRpYWx9IGZyb20gXCIuL3BvaW50UmFkaWFsLmpzXCI7XG5leHBvcnQge2xpbmtIb3Jpem9udGFsLCBsaW5rVmVydGljYWwsIGxpbmtSYWRpYWx9IGZyb20gXCIuL2xpbmsvaW5kZXguanNcIjtcblxuZXhwb3J0IHtkZWZhdWx0IGFzIHN5bWJvbCwgc3ltYm9sc30gZnJvbSBcIi4vc3ltYm9sLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc3ltYm9sQ2lyY2xlfSBmcm9tIFwiLi9zeW1ib2wvY2lyY2xlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc3ltYm9sQ3Jvc3N9IGZyb20gXCIuL3N5bWJvbC9jcm9zcy5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN5bWJvbERpYW1vbmR9IGZyb20gXCIuL3N5bWJvbC9kaWFtb25kLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc3ltYm9sU3F1YXJlfSBmcm9tIFwiLi9zeW1ib2wvc3F1YXJlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc3ltYm9sU3Rhcn0gZnJvbSBcIi4vc3ltYm9sL3N0YXIuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzeW1ib2xUcmlhbmdsZX0gZnJvbSBcIi4vc3ltYm9sL3RyaWFuZ2xlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc3ltYm9sV3llfSBmcm9tIFwiLi9zeW1ib2wvd3llLmpzXCI7XG5cbmV4cG9ydCB7ZGVmYXVsdCBhcyBjdXJ2ZUJhc2lzQ2xvc2VkfSBmcm9tIFwiLi9jdXJ2ZS9iYXNpc0Nsb3NlZC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGN1cnZlQmFzaXNPcGVufSBmcm9tIFwiLi9jdXJ2ZS9iYXNpc09wZW4uanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBjdXJ2ZUJhc2lzfSBmcm9tIFwiLi9jdXJ2ZS9iYXNpcy5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGN1cnZlQnVuZGxlfSBmcm9tIFwiLi9jdXJ2ZS9idW5kbGUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBjdXJ2ZUNhcmRpbmFsQ2xvc2VkfSBmcm9tIFwiLi9jdXJ2ZS9jYXJkaW5hbENsb3NlZC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGN1cnZlQ2FyZGluYWxPcGVufSBmcm9tIFwiLi9jdXJ2ZS9jYXJkaW5hbE9wZW4uanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBjdXJ2ZUNhcmRpbmFsfSBmcm9tIFwiLi9jdXJ2ZS9jYXJkaW5hbC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGN1cnZlQ2F0bXVsbFJvbUNsb3NlZH0gZnJvbSBcIi4vY3VydmUvY2F0bXVsbFJvbUNsb3NlZC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGN1cnZlQ2F0bXVsbFJvbU9wZW59IGZyb20gXCIuL2N1cnZlL2NhdG11bGxSb21PcGVuLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgY3VydmVDYXRtdWxsUm9tfSBmcm9tIFwiLi9jdXJ2ZS9jYXRtdWxsUm9tLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgY3VydmVMaW5lYXJDbG9zZWR9IGZyb20gXCIuL2N1cnZlL2xpbmVhckNsb3NlZC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGN1cnZlTGluZWFyfSBmcm9tIFwiLi9jdXJ2ZS9saW5lYXIuanNcIjtcbmV4cG9ydCB7bW9ub3RvbmVYIGFzIGN1cnZlTW9ub3RvbmVYLCBtb25vdG9uZVkgYXMgY3VydmVNb25vdG9uZVl9IGZyb20gXCIuL2N1cnZlL21vbm90b25lLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgY3VydmVOYXR1cmFsfSBmcm9tIFwiLi9jdXJ2ZS9uYXR1cmFsLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgY3VydmVTdGVwLCBzdGVwQWZ0ZXIgYXMgY3VydmVTdGVwQWZ0ZXIsIHN0ZXBCZWZvcmUgYXMgY3VydmVTdGVwQmVmb3JlfSBmcm9tIFwiLi9jdXJ2ZS9zdGVwLmpzXCI7XG5cbmV4cG9ydCB7ZGVmYXVsdCBhcyBzdGFja30gZnJvbSBcIi4vc3RhY2suanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzdGFja09mZnNldEV4cGFuZH0gZnJvbSBcIi4vb2Zmc2V0L2V4cGFuZC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN0YWNrT2Zmc2V0RGl2ZXJnaW5nfSBmcm9tIFwiLi9vZmZzZXQvZGl2ZXJnaW5nLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc3RhY2tPZmZzZXROb25lfSBmcm9tIFwiLi9vZmZzZXQvbm9uZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN0YWNrT2Zmc2V0U2lsaG91ZXR0ZX0gZnJvbSBcIi4vb2Zmc2V0L3NpbGhvdWV0dGUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzdGFja09mZnNldFdpZ2dsZX0gZnJvbSBcIi4vb2Zmc2V0L3dpZ2dsZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN0YWNrT3JkZXJBcHBlYXJhbmNlfSBmcm9tIFwiLi9vcmRlci9hcHBlYXJhbmNlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc3RhY2tPcmRlckFzY2VuZGluZ30gZnJvbSBcIi4vb3JkZXIvYXNjZW5kaW5nLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc3RhY2tPcmRlckRlc2NlbmRpbmd9IGZyb20gXCIuL29yZGVyL2Rlc2NlbmRpbmcuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzdGFja09yZGVySW5zaWRlT3V0fSBmcm9tIFwiLi9vcmRlci9pbnNpZGVPdXQuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzdGFja09yZGVyTm9uZX0gZnJvbSBcIi4vb3JkZXIvbm9uZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN0YWNrT3JkZXJSZXZlcnNlfSBmcm9tIFwiLi9vcmRlci9yZXZlcnNlLmpzXCI7XG4iLCJpbXBvcnQge3BhdGh9IGZyb20gXCJkMy1wYXRoXCI7XG5pbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnQuanNcIjtcbmltcG9ydCBjdXJ2ZUxpbmVhciBmcm9tIFwiLi9jdXJ2ZS9saW5lYXIuanNcIjtcbmltcG9ydCB7eCBhcyBwb2ludFgsIHkgYXMgcG9pbnRZfSBmcm9tIFwiLi9wb2ludC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIHggPSBwb2ludFgsXG4gICAgICB5ID0gcG9pbnRZLFxuICAgICAgZGVmaW5lZCA9IGNvbnN0YW50KHRydWUpLFxuICAgICAgY29udGV4dCA9IG51bGwsXG4gICAgICBjdXJ2ZSA9IGN1cnZlTGluZWFyLFxuICAgICAgb3V0cHV0ID0gbnVsbDtcblxuICBmdW5jdGlvbiBsaW5lKGRhdGEpIHtcbiAgICB2YXIgaSxcbiAgICAgICAgbiA9IGRhdGEubGVuZ3RoLFxuICAgICAgICBkLFxuICAgICAgICBkZWZpbmVkMCA9IGZhbHNlLFxuICAgICAgICBidWZmZXI7XG5cbiAgICBpZiAoY29udGV4dCA9PSBudWxsKSBvdXRwdXQgPSBjdXJ2ZShidWZmZXIgPSBwYXRoKCkpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8PSBuOyArK2kpIHtcbiAgICAgIGlmICghKGkgPCBuICYmIGRlZmluZWQoZCA9IGRhdGFbaV0sIGksIGRhdGEpKSA9PT0gZGVmaW5lZDApIHtcbiAgICAgICAgaWYgKGRlZmluZWQwID0gIWRlZmluZWQwKSBvdXRwdXQubGluZVN0YXJ0KCk7XG4gICAgICAgIGVsc2Ugb3V0cHV0LmxpbmVFbmQoKTtcbiAgICAgIH1cbiAgICAgIGlmIChkZWZpbmVkMCkgb3V0cHV0LnBvaW50KCt4KGQsIGksIGRhdGEpLCAreShkLCBpLCBkYXRhKSk7XG4gICAgfVxuXG4gICAgaWYgKGJ1ZmZlcikgcmV0dXJuIG91dHB1dCA9IG51bGwsIGJ1ZmZlciArIFwiXCIgfHwgbnVsbDtcbiAgfVxuXG4gIGxpbmUueCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh4ID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGxpbmUpIDogeDtcbiAgfTtcblxuICBsaW5lLnkgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoeSA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBsaW5lKSA6IHk7XG4gIH07XG5cbiAgbGluZS5kZWZpbmVkID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGRlZmluZWQgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCEhXyksIGxpbmUpIDogZGVmaW5lZDtcbiAgfTtcblxuICBsaW5lLmN1cnZlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGN1cnZlID0gXywgY29udGV4dCAhPSBudWxsICYmIChvdXRwdXQgPSBjdXJ2ZShjb250ZXh0KSksIGxpbmUpIDogY3VydmU7XG4gIH07XG5cbiAgbGluZS5jb250ZXh0ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKF8gPT0gbnVsbCA/IGNvbnRleHQgPSBvdXRwdXQgPSBudWxsIDogb3V0cHV0ID0gY3VydmUoY29udGV4dCA9IF8pLCBsaW5lKSA6IGNvbnRleHQ7XG4gIH07XG5cbiAgcmV0dXJuIGxpbmU7XG59XG4iLCJpbXBvcnQgY3VydmVSYWRpYWwsIHtjdXJ2ZVJhZGlhbExpbmVhcn0gZnJvbSBcIi4vY3VydmUvcmFkaWFsLmpzXCI7XG5pbXBvcnQgbGluZSBmcm9tIFwiLi9saW5lLmpzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBsaW5lUmFkaWFsKGwpIHtcbiAgdmFyIGMgPSBsLmN1cnZlO1xuXG4gIGwuYW5nbGUgPSBsLngsIGRlbGV0ZSBsLng7XG4gIGwucmFkaXVzID0gbC55LCBkZWxldGUgbC55O1xuXG4gIGwuY3VydmUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyBjKGN1cnZlUmFkaWFsKF8pKSA6IGMoKS5fY3VydmU7XG4gIH07XG5cbiAgcmV0dXJuIGw7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbGluZVJhZGlhbChsaW5lKCkuY3VydmUoY3VydmVSYWRpYWxMaW5lYXIpKTtcbn1cbiIsImltcG9ydCB7cGF0aH0gZnJvbSBcImQzLXBhdGhcIjtcbmltcG9ydCB7c2xpY2V9IGZyb20gXCIuLi9hcnJheS5qc1wiO1xuaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuLi9jb25zdGFudC5qc1wiO1xuaW1wb3J0IHt4IGFzIHBvaW50WCwgeSBhcyBwb2ludFl9IGZyb20gXCIuLi9wb2ludC5qc1wiO1xuaW1wb3J0IHBvaW50UmFkaWFsIGZyb20gXCIuLi9wb2ludFJhZGlhbC5qc1wiO1xuXG5mdW5jdGlvbiBsaW5rU291cmNlKGQpIHtcbiAgcmV0dXJuIGQuc291cmNlO1xufVxuXG5mdW5jdGlvbiBsaW5rVGFyZ2V0KGQpIHtcbiAgcmV0dXJuIGQudGFyZ2V0O1xufVxuXG5mdW5jdGlvbiBsaW5rKGN1cnZlKSB7XG4gIHZhciBzb3VyY2UgPSBsaW5rU291cmNlLFxuICAgICAgdGFyZ2V0ID0gbGlua1RhcmdldCxcbiAgICAgIHggPSBwb2ludFgsXG4gICAgICB5ID0gcG9pbnRZLFxuICAgICAgY29udGV4dCA9IG51bGw7XG5cbiAgZnVuY3Rpb24gbGluaygpIHtcbiAgICB2YXIgYnVmZmVyLCBhcmd2ID0gc2xpY2UuY2FsbChhcmd1bWVudHMpLCBzID0gc291cmNlLmFwcGx5KHRoaXMsIGFyZ3YpLCB0ID0gdGFyZ2V0LmFwcGx5KHRoaXMsIGFyZ3YpO1xuICAgIGlmICghY29udGV4dCkgY29udGV4dCA9IGJ1ZmZlciA9IHBhdGgoKTtcbiAgICBjdXJ2ZShjb250ZXh0LCAreC5hcHBseSh0aGlzLCAoYXJndlswXSA9IHMsIGFyZ3YpKSwgK3kuYXBwbHkodGhpcywgYXJndiksICt4LmFwcGx5KHRoaXMsIChhcmd2WzBdID0gdCwgYXJndikpLCAreS5hcHBseSh0aGlzLCBhcmd2KSk7XG4gICAgaWYgKGJ1ZmZlcikgcmV0dXJuIGNvbnRleHQgPSBudWxsLCBidWZmZXIgKyBcIlwiIHx8IG51bGw7XG4gIH1cblxuICBsaW5rLnNvdXJjZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChzb3VyY2UgPSBfLCBsaW5rKSA6IHNvdXJjZTtcbiAgfTtcblxuICBsaW5rLnRhcmdldCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0YXJnZXQgPSBfLCBsaW5rKSA6IHRhcmdldDtcbiAgfTtcblxuICBsaW5rLnggPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoeCA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBsaW5rKSA6IHg7XG4gIH07XG5cbiAgbGluay55ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHkgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgbGluaykgOiB5O1xuICB9O1xuXG4gIGxpbmsuY29udGV4dCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICgoY29udGV4dCA9IF8gPT0gbnVsbCA/IG51bGwgOiBfKSwgbGluaykgOiBjb250ZXh0O1xuICB9O1xuXG4gIHJldHVybiBsaW5rO1xufVxuXG5mdW5jdGlvbiBjdXJ2ZUhvcml6b250YWwoY29udGV4dCwgeDAsIHkwLCB4MSwgeTEpIHtcbiAgY29udGV4dC5tb3ZlVG8oeDAsIHkwKTtcbiAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHgwID0gKHgwICsgeDEpIC8gMiwgeTAsIHgwLCB5MSwgeDEsIHkxKTtcbn1cblxuZnVuY3Rpb24gY3VydmVWZXJ0aWNhbChjb250ZXh0LCB4MCwgeTAsIHgxLCB5MSkge1xuICBjb250ZXh0Lm1vdmVUbyh4MCwgeTApO1xuICBjb250ZXh0LmJlemllckN1cnZlVG8oeDAsIHkwID0gKHkwICsgeTEpIC8gMiwgeDEsIHkwLCB4MSwgeTEpO1xufVxuXG5mdW5jdGlvbiBjdXJ2ZVJhZGlhbChjb250ZXh0LCB4MCwgeTAsIHgxLCB5MSkge1xuICB2YXIgcDAgPSBwb2ludFJhZGlhbCh4MCwgeTApLFxuICAgICAgcDEgPSBwb2ludFJhZGlhbCh4MCwgeTAgPSAoeTAgKyB5MSkgLyAyKSxcbiAgICAgIHAyID0gcG9pbnRSYWRpYWwoeDEsIHkwKSxcbiAgICAgIHAzID0gcG9pbnRSYWRpYWwoeDEsIHkxKTtcbiAgY29udGV4dC5tb3ZlVG8ocDBbMF0sIHAwWzFdKTtcbiAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHAxWzBdLCBwMVsxXSwgcDJbMF0sIHAyWzFdLCBwM1swXSwgcDNbMV0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGlua0hvcml6b250YWwoKSB7XG4gIHJldHVybiBsaW5rKGN1cnZlSG9yaXpvbnRhbCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsaW5rVmVydGljYWwoKSB7XG4gIHJldHVybiBsaW5rKGN1cnZlVmVydGljYWwpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGlua1JhZGlhbCgpIHtcbiAgdmFyIGwgPSBsaW5rKGN1cnZlUmFkaWFsKTtcbiAgbC5hbmdsZSA9IGwueCwgZGVsZXRlIGwueDtcbiAgbC5yYWRpdXMgPSBsLnksIGRlbGV0ZSBsLnk7XG4gIHJldHVybiBsO1xufVxuIiwiZXhwb3J0IHZhciBhYnMgPSBNYXRoLmFicztcbmV4cG9ydCB2YXIgYXRhbjIgPSBNYXRoLmF0YW4yO1xuZXhwb3J0IHZhciBjb3MgPSBNYXRoLmNvcztcbmV4cG9ydCB2YXIgbWF4ID0gTWF0aC5tYXg7XG5leHBvcnQgdmFyIG1pbiA9IE1hdGgubWluO1xuZXhwb3J0IHZhciBzaW4gPSBNYXRoLnNpbjtcbmV4cG9ydCB2YXIgc3FydCA9IE1hdGguc3FydDtcblxuZXhwb3J0IHZhciBlcHNpbG9uID0gMWUtMTI7XG5leHBvcnQgdmFyIHBpID0gTWF0aC5QSTtcbmV4cG9ydCB2YXIgaGFsZlBpID0gcGkgLyAyO1xuZXhwb3J0IHZhciB0YXUgPSAyICogcGk7XG5cbmV4cG9ydCBmdW5jdGlvbiBhY29zKHgpIHtcbiAgcmV0dXJuIHggPiAxID8gMCA6IHggPCAtMSA/IHBpIDogTWF0aC5hY29zKHgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNpbih4KSB7XG4gIHJldHVybiB4ID49IDEgPyBoYWxmUGkgOiB4IDw9IC0xID8gLWhhbGZQaSA6IE1hdGguYXNpbih4KTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge31cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlcmllcywgb3JkZXIpIHtcbiAgaWYgKCEoKG4gPSBzZXJpZXMubGVuZ3RoKSA+IDApKSByZXR1cm47XG4gIGZvciAodmFyIGksIGogPSAwLCBkLCBkeSwgeXAsIHluLCBuLCBtID0gc2VyaWVzW29yZGVyWzBdXS5sZW5ndGg7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHlwID0geW4gPSAwLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKChkeSA9IChkID0gc2VyaWVzW29yZGVyW2ldXVtqXSlbMV0gLSBkWzBdKSA+IDApIHtcbiAgICAgICAgZFswXSA9IHlwLCBkWzFdID0geXAgKz0gZHk7XG4gICAgICB9IGVsc2UgaWYgKGR5IDwgMCkge1xuICAgICAgICBkWzFdID0geW4sIGRbMF0gPSB5biArPSBkeTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRbMF0gPSAwLCBkWzFdID0gZHk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgbm9uZSBmcm9tIFwiLi9ub25lLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlcmllcywgb3JkZXIpIHtcbiAgaWYgKCEoKG4gPSBzZXJpZXMubGVuZ3RoKSA+IDApKSByZXR1cm47XG4gIGZvciAodmFyIGksIG4sIGogPSAwLCBtID0gc2VyaWVzWzBdLmxlbmd0aCwgeTsgaiA8IG07ICsraikge1xuICAgIGZvciAoeSA9IGkgPSAwOyBpIDwgbjsgKytpKSB5ICs9IHNlcmllc1tpXVtqXVsxXSB8fCAwO1xuICAgIGlmICh5KSBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSBzZXJpZXNbaV1bal1bMV0gLz0geTtcbiAgfVxuICBub25lKHNlcmllcywgb3JkZXIpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2VyaWVzLCBvcmRlcikge1xuICBpZiAoISgobiA9IHNlcmllcy5sZW5ndGgpID4gMSkpIHJldHVybjtcbiAgZm9yICh2YXIgaSA9IDEsIGosIHMwLCBzMSA9IHNlcmllc1tvcmRlclswXV0sIG4sIG0gPSBzMS5sZW5ndGg7IGkgPCBuOyArK2kpIHtcbiAgICBzMCA9IHMxLCBzMSA9IHNlcmllc1tvcmRlcltpXV07XG4gICAgZm9yIChqID0gMDsgaiA8IG07ICsraikge1xuICAgICAgczFbal1bMV0gKz0gczFbal1bMF0gPSBpc05hTihzMFtqXVsxXSkgPyBzMFtqXVswXSA6IHMwW2pdWzFdO1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IG5vbmUgZnJvbSBcIi4vbm9uZS5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZXJpZXMsIG9yZGVyKSB7XG4gIGlmICghKChuID0gc2VyaWVzLmxlbmd0aCkgPiAwKSkgcmV0dXJuO1xuICBmb3IgKHZhciBqID0gMCwgczAgPSBzZXJpZXNbb3JkZXJbMF1dLCBuLCBtID0gczAubGVuZ3RoOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIHkgPSAwOyBpIDwgbjsgKytpKSB5ICs9IHNlcmllc1tpXVtqXVsxXSB8fCAwO1xuICAgIHMwW2pdWzFdICs9IHMwW2pdWzBdID0gLXkgLyAyO1xuICB9XG4gIG5vbmUoc2VyaWVzLCBvcmRlcik7XG59XG4iLCJpbXBvcnQgbm9uZSBmcm9tIFwiLi9ub25lLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlcmllcywgb3JkZXIpIHtcbiAgaWYgKCEoKG4gPSBzZXJpZXMubGVuZ3RoKSA+IDApIHx8ICEoKG0gPSAoczAgPSBzZXJpZXNbb3JkZXJbMF1dKS5sZW5ndGgpID4gMCkpIHJldHVybjtcbiAgZm9yICh2YXIgeSA9IDAsIGogPSAxLCBzMCwgbSwgbjsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGkgPSAwLCBzMSA9IDAsIHMyID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgdmFyIHNpID0gc2VyaWVzW29yZGVyW2ldXSxcbiAgICAgICAgICBzaWowID0gc2lbal1bMV0gfHwgMCxcbiAgICAgICAgICBzaWoxID0gc2lbaiAtIDFdWzFdIHx8IDAsXG4gICAgICAgICAgczMgPSAoc2lqMCAtIHNpajEpIC8gMjtcbiAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgaTsgKytrKSB7XG4gICAgICAgIHZhciBzayA9IHNlcmllc1tvcmRlcltrXV0sXG4gICAgICAgICAgICBza2owID0gc2tbal1bMV0gfHwgMCxcbiAgICAgICAgICAgIHNrajEgPSBza1tqIC0gMV1bMV0gfHwgMDtcbiAgICAgICAgczMgKz0gc2tqMCAtIHNrajE7XG4gICAgICB9XG4gICAgICBzMSArPSBzaWowLCBzMiArPSBzMyAqIHNpajA7XG4gICAgfVxuICAgIHMwW2ogLSAxXVsxXSArPSBzMFtqIC0gMV1bMF0gPSB5O1xuICAgIGlmIChzMSkgeSAtPSBzMiAvIHMxO1xuICB9XG4gIHMwW2ogLSAxXVsxXSArPSBzMFtqIC0gMV1bMF0gPSB5O1xuICBub25lKHNlcmllcywgb3JkZXIpO1xufVxuIiwiaW1wb3J0IG5vbmUgZnJvbSBcIi4vbm9uZS5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZXJpZXMpIHtcbiAgdmFyIHBlYWtzID0gc2VyaWVzLm1hcChwZWFrKTtcbiAgcmV0dXJuIG5vbmUoc2VyaWVzKS5zb3J0KGZ1bmN0aW9uKGEsIGIpIHsgcmV0dXJuIHBlYWtzW2FdIC0gcGVha3NbYl07IH0pO1xufVxuXG5mdW5jdGlvbiBwZWFrKHNlcmllcykge1xuICB2YXIgaSA9IC0xLCBqID0gMCwgbiA9IHNlcmllcy5sZW5ndGgsIHZpLCB2aiA9IC1JbmZpbml0eTtcbiAgd2hpbGUgKCsraSA8IG4pIGlmICgodmkgPSArc2VyaWVzW2ldWzFdKSA+IHZqKSB2aiA9IHZpLCBqID0gaTtcbiAgcmV0dXJuIGo7XG59XG4iLCJpbXBvcnQgbm9uZSBmcm9tIFwiLi9ub25lLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlcmllcykge1xuICB2YXIgc3VtcyA9IHNlcmllcy5tYXAoc3VtKTtcbiAgcmV0dXJuIG5vbmUoc2VyaWVzKS5zb3J0KGZ1bmN0aW9uKGEsIGIpIHsgcmV0dXJuIHN1bXNbYV0gLSBzdW1zW2JdOyB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1bShzZXJpZXMpIHtcbiAgdmFyIHMgPSAwLCBpID0gLTEsIG4gPSBzZXJpZXMubGVuZ3RoLCB2O1xuICB3aGlsZSAoKytpIDwgbikgaWYgKHYgPSArc2VyaWVzW2ldWzFdKSBzICs9IHY7XG4gIHJldHVybiBzO1xufVxuIiwiaW1wb3J0IGFzY2VuZGluZyBmcm9tIFwiLi9hc2NlbmRpbmcuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2VyaWVzKSB7XG4gIHJldHVybiBhc2NlbmRpbmcoc2VyaWVzKS5yZXZlcnNlKCk7XG59XG4iLCJpbXBvcnQgYXBwZWFyYW5jZSBmcm9tIFwiLi9hcHBlYXJhbmNlLmpzXCI7XG5pbXBvcnQge3N1bX0gZnJvbSBcIi4vYXNjZW5kaW5nLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlcmllcykge1xuICB2YXIgbiA9IHNlcmllcy5sZW5ndGgsXG4gICAgICBpLFxuICAgICAgaixcbiAgICAgIHN1bXMgPSBzZXJpZXMubWFwKHN1bSksXG4gICAgICBvcmRlciA9IGFwcGVhcmFuY2Uoc2VyaWVzKSxcbiAgICAgIHRvcCA9IDAsXG4gICAgICBib3R0b20gPSAwLFxuICAgICAgdG9wcyA9IFtdLFxuICAgICAgYm90dG9tcyA9IFtdO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICBqID0gb3JkZXJbaV07XG4gICAgaWYgKHRvcCA8IGJvdHRvbSkge1xuICAgICAgdG9wICs9IHN1bXNbal07XG4gICAgICB0b3BzLnB1c2goaik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJvdHRvbSArPSBzdW1zW2pdO1xuICAgICAgYm90dG9tcy5wdXNoKGopO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBib3R0b21zLnJldmVyc2UoKS5jb25jYXQodG9wcyk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZXJpZXMpIHtcbiAgdmFyIG4gPSBzZXJpZXMubGVuZ3RoLCBvID0gbmV3IEFycmF5KG4pO1xuICB3aGlsZSAoLS1uID49IDApIG9bbl0gPSBuO1xuICByZXR1cm4gbztcbn1cbiIsImltcG9ydCBub25lIGZyb20gXCIuL25vbmUuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2VyaWVzKSB7XG4gIHJldHVybiBub25lKHNlcmllcykucmV2ZXJzZSgpO1xufVxuIiwiaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuL2NvbnN0YW50LmpzXCI7XG5pbXBvcnQgZGVzY2VuZGluZyBmcm9tIFwiLi9kZXNjZW5kaW5nLmpzXCI7XG5pbXBvcnQgaWRlbnRpdHkgZnJvbSBcIi4vaWRlbnRpdHkuanNcIjtcbmltcG9ydCB7dGF1fSBmcm9tIFwiLi9tYXRoLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgdmFsdWUgPSBpZGVudGl0eSxcbiAgICAgIHNvcnRWYWx1ZXMgPSBkZXNjZW5kaW5nLFxuICAgICAgc29ydCA9IG51bGwsXG4gICAgICBzdGFydEFuZ2xlID0gY29uc3RhbnQoMCksXG4gICAgICBlbmRBbmdsZSA9IGNvbnN0YW50KHRhdSksXG4gICAgICBwYWRBbmdsZSA9IGNvbnN0YW50KDApO1xuXG4gIGZ1bmN0aW9uIHBpZShkYXRhKSB7XG4gICAgdmFyIGksXG4gICAgICAgIG4gPSBkYXRhLmxlbmd0aCxcbiAgICAgICAgaixcbiAgICAgICAgayxcbiAgICAgICAgc3VtID0gMCxcbiAgICAgICAgaW5kZXggPSBuZXcgQXJyYXkobiksXG4gICAgICAgIGFyY3MgPSBuZXcgQXJyYXkobiksXG4gICAgICAgIGEwID0gK3N0YXJ0QW5nbGUuYXBwbHkodGhpcywgYXJndW1lbnRzKSxcbiAgICAgICAgZGEgPSBNYXRoLm1pbih0YXUsIE1hdGgubWF4KC10YXUsIGVuZEFuZ2xlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgLSBhMCkpLFxuICAgICAgICBhMSxcbiAgICAgICAgcCA9IE1hdGgubWluKE1hdGguYWJzKGRhKSAvIG4sIHBhZEFuZ2xlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpLFxuICAgICAgICBwYSA9IHAgKiAoZGEgPCAwID8gLTEgOiAxKSxcbiAgICAgICAgdjtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmICgodiA9IGFyY3NbaW5kZXhbaV0gPSBpXSA9ICt2YWx1ZShkYXRhW2ldLCBpLCBkYXRhKSkgPiAwKSB7XG4gICAgICAgIHN1bSArPSB2O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIE9wdGlvbmFsbHkgc29ydCB0aGUgYXJjcyBieSBwcmV2aW91c2x5LWNvbXB1dGVkIHZhbHVlcyBvciBieSBkYXRhLlxuICAgIGlmIChzb3J0VmFsdWVzICE9IG51bGwpIGluZGV4LnNvcnQoZnVuY3Rpb24oaSwgaikgeyByZXR1cm4gc29ydFZhbHVlcyhhcmNzW2ldLCBhcmNzW2pdKTsgfSk7XG4gICAgZWxzZSBpZiAoc29ydCAhPSBudWxsKSBpbmRleC5zb3J0KGZ1bmN0aW9uKGksIGopIHsgcmV0dXJuIHNvcnQoZGF0YVtpXSwgZGF0YVtqXSk7IH0pO1xuXG4gICAgLy8gQ29tcHV0ZSB0aGUgYXJjcyEgVGhleSBhcmUgc3RvcmVkIGluIHRoZSBvcmlnaW5hbCBkYXRhJ3Mgb3JkZXIuXG4gICAgZm9yIChpID0gMCwgayA9IHN1bSA/IChkYSAtIG4gKiBwYSkgLyBzdW0gOiAwOyBpIDwgbjsgKytpLCBhMCA9IGExKSB7XG4gICAgICBqID0gaW5kZXhbaV0sIHYgPSBhcmNzW2pdLCBhMSA9IGEwICsgKHYgPiAwID8gdiAqIGsgOiAwKSArIHBhLCBhcmNzW2pdID0ge1xuICAgICAgICBkYXRhOiBkYXRhW2pdLFxuICAgICAgICBpbmRleDogaSxcbiAgICAgICAgdmFsdWU6IHYsXG4gICAgICAgIHN0YXJ0QW5nbGU6IGEwLFxuICAgICAgICBlbmRBbmdsZTogYTEsXG4gICAgICAgIHBhZEFuZ2xlOiBwXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBhcmNzO1xuICB9XG5cbiAgcGllLnZhbHVlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHZhbHVlID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIHBpZSkgOiB2YWx1ZTtcbiAgfTtcblxuICBwaWUuc29ydFZhbHVlcyA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChzb3J0VmFsdWVzID0gXywgc29ydCA9IG51bGwsIHBpZSkgOiBzb3J0VmFsdWVzO1xuICB9O1xuXG4gIHBpZS5zb3J0ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHNvcnQgPSBfLCBzb3J0VmFsdWVzID0gbnVsbCwgcGllKSA6IHNvcnQ7XG4gIH07XG5cbiAgcGllLnN0YXJ0QW5nbGUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoc3RhcnRBbmdsZSA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBwaWUpIDogc3RhcnRBbmdsZTtcbiAgfTtcblxuICBwaWUuZW5kQW5nbGUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZW5kQW5nbGUgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgcGllKSA6IGVuZEFuZ2xlO1xuICB9O1xuXG4gIHBpZS5wYWRBbmdsZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChwYWRBbmdsZSA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBwaWUpIDogcGFkQW5nbGU7XG4gIH07XG5cbiAgcmV0dXJuIHBpZTtcbn1cbiIsImV4cG9ydCBmdW5jdGlvbiB4KHApIHtcbiAgcmV0dXJuIHBbMF07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB5KHApIHtcbiAgcmV0dXJuIHBbMV07XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4LCB5KSB7XG4gIHJldHVybiBbKHkgPSAreSkgKiBNYXRoLmNvcyh4IC09IE1hdGguUEkgLyAyKSwgeSAqIE1hdGguc2luKHgpXTtcbn1cbiIsImltcG9ydCB7c2xpY2V9IGZyb20gXCIuL2FycmF5LmpzXCI7XG5pbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnQuanNcIjtcbmltcG9ydCBvZmZzZXROb25lIGZyb20gXCIuL29mZnNldC9ub25lLmpzXCI7XG5pbXBvcnQgb3JkZXJOb25lIGZyb20gXCIuL29yZGVyL25vbmUuanNcIjtcblxuZnVuY3Rpb24gc3RhY2tWYWx1ZShkLCBrZXkpIHtcbiAgcmV0dXJuIGRba2V5XTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBrZXlzID0gY29uc3RhbnQoW10pLFxuICAgICAgb3JkZXIgPSBvcmRlck5vbmUsXG4gICAgICBvZmZzZXQgPSBvZmZzZXROb25lLFxuICAgICAgdmFsdWUgPSBzdGFja1ZhbHVlO1xuXG4gIGZ1bmN0aW9uIHN0YWNrKGRhdGEpIHtcbiAgICB2YXIga3ogPSBrZXlzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksXG4gICAgICAgIGksXG4gICAgICAgIG0gPSBkYXRhLmxlbmd0aCxcbiAgICAgICAgbiA9IGt6Lmxlbmd0aCxcbiAgICAgICAgc3ogPSBuZXcgQXJyYXkobiksXG4gICAgICAgIG96O1xuXG4gICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgZm9yICh2YXIga2kgPSBreltpXSwgc2kgPSBzeltpXSA9IG5ldyBBcnJheShtKSwgaiA9IDAsIHNpajsgaiA8IG07ICsraikge1xuICAgICAgICBzaVtqXSA9IHNpaiA9IFswLCArdmFsdWUoZGF0YVtqXSwga2ksIGosIGRhdGEpXTtcbiAgICAgICAgc2lqLmRhdGEgPSBkYXRhW2pdO1xuICAgICAgfVxuICAgICAgc2kua2V5ID0ga2k7XG4gICAgfVxuXG4gICAgZm9yIChpID0gMCwgb3ogPSBvcmRlcihzeik7IGkgPCBuOyArK2kpIHtcbiAgICAgIHN6W296W2ldXS5pbmRleCA9IGk7XG4gICAgfVxuXG4gICAgb2Zmc2V0KHN6LCBveik7XG4gICAgcmV0dXJuIHN6O1xuICB9XG5cbiAgc3RhY2sua2V5cyA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChrZXlzID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudChzbGljZS5jYWxsKF8pKSwgc3RhY2spIDoga2V5cztcbiAgfTtcblxuICBzdGFjay52YWx1ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh2YWx1ZSA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBzdGFjaykgOiB2YWx1ZTtcbiAgfTtcblxuICBzdGFjay5vcmRlciA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChvcmRlciA9IF8gPT0gbnVsbCA/IG9yZGVyTm9uZSA6IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoc2xpY2UuY2FsbChfKSksIHN0YWNrKSA6IG9yZGVyO1xuICB9O1xuXG4gIHN0YWNrLm9mZnNldCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChvZmZzZXQgPSBfID09IG51bGwgPyBvZmZzZXROb25lIDogXywgc3RhY2spIDogb2Zmc2V0O1xuICB9O1xuXG4gIHJldHVybiBzdGFjaztcbn1cbiIsImltcG9ydCB7cGF0aH0gZnJvbSBcImQzLXBhdGhcIjtcbmltcG9ydCBjaXJjbGUgZnJvbSBcIi4vc3ltYm9sL2NpcmNsZS5qc1wiO1xuaW1wb3J0IGNyb3NzIGZyb20gXCIuL3N5bWJvbC9jcm9zcy5qc1wiO1xuaW1wb3J0IGRpYW1vbmQgZnJvbSBcIi4vc3ltYm9sL2RpYW1vbmQuanNcIjtcbmltcG9ydCBzdGFyIGZyb20gXCIuL3N5bWJvbC9zdGFyLmpzXCI7XG5pbXBvcnQgc3F1YXJlIGZyb20gXCIuL3N5bWJvbC9zcXVhcmUuanNcIjtcbmltcG9ydCB0cmlhbmdsZSBmcm9tIFwiLi9zeW1ib2wvdHJpYW5nbGUuanNcIjtcbmltcG9ydCB3eWUgZnJvbSBcIi4vc3ltYm9sL3d5ZS5qc1wiO1xuaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuL2NvbnN0YW50LmpzXCI7XG5cbmV4cG9ydCB2YXIgc3ltYm9scyA9IFtcbiAgY2lyY2xlLFxuICBjcm9zcyxcbiAgZGlhbW9uZCxcbiAgc3F1YXJlLFxuICBzdGFyLFxuICB0cmlhbmdsZSxcbiAgd3llXG5dO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIHR5cGUgPSBjb25zdGFudChjaXJjbGUpLFxuICAgICAgc2l6ZSA9IGNvbnN0YW50KDY0KSxcbiAgICAgIGNvbnRleHQgPSBudWxsO1xuXG4gIGZ1bmN0aW9uIHN5bWJvbCgpIHtcbiAgICB2YXIgYnVmZmVyO1xuICAgIGlmICghY29udGV4dCkgY29udGV4dCA9IGJ1ZmZlciA9IHBhdGgoKTtcbiAgICB0eXBlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykuZHJhdyhjb250ZXh0LCArc2l6ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpKTtcbiAgICBpZiAoYnVmZmVyKSByZXR1cm4gY29udGV4dCA9IG51bGwsIGJ1ZmZlciArIFwiXCIgfHwgbnVsbDtcbiAgfVxuXG4gIHN5bWJvbC50eXBlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHR5cGUgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KF8pLCBzeW1ib2wpIDogdHlwZTtcbiAgfTtcblxuICBzeW1ib2wuc2l6ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChzaXplID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIHN5bWJvbCkgOiBzaXplO1xuICB9O1xuXG4gIHN5bWJvbC5jb250ZXh0ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGNvbnRleHQgPSBfID09IG51bGwgPyBudWxsIDogXywgc3ltYm9sKSA6IGNvbnRleHQ7XG4gIH07XG5cbiAgcmV0dXJuIHN5bWJvbDtcbn1cbiIsImltcG9ydCB7cGksIHRhdX0gZnJvbSBcIi4uL21hdGguanNcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBkcmF3OiBmdW5jdGlvbihjb250ZXh0LCBzaXplKSB7XG4gICAgdmFyIHIgPSBNYXRoLnNxcnQoc2l6ZSAvIHBpKTtcbiAgICBjb250ZXh0Lm1vdmVUbyhyLCAwKTtcbiAgICBjb250ZXh0LmFyYygwLCAwLCByLCAwLCB0YXUpO1xuICB9XG59O1xuIiwiZXhwb3J0IGRlZmF1bHQge1xuICBkcmF3OiBmdW5jdGlvbihjb250ZXh0LCBzaXplKSB7XG4gICAgdmFyIHIgPSBNYXRoLnNxcnQoc2l6ZSAvIDUpIC8gMjtcbiAgICBjb250ZXh0Lm1vdmVUbygtMyAqIHIsIC1yKTtcbiAgICBjb250ZXh0LmxpbmVUbygtciwgLXIpO1xuICAgIGNvbnRleHQubGluZVRvKC1yLCAtMyAqIHIpO1xuICAgIGNvbnRleHQubGluZVRvKHIsIC0zICogcik7XG4gICAgY29udGV4dC5saW5lVG8ociwgLXIpO1xuICAgIGNvbnRleHQubGluZVRvKDMgKiByLCAtcik7XG4gICAgY29udGV4dC5saW5lVG8oMyAqIHIsIHIpO1xuICAgIGNvbnRleHQubGluZVRvKHIsIHIpO1xuICAgIGNvbnRleHQubGluZVRvKHIsIDMgKiByKTtcbiAgICBjb250ZXh0LmxpbmVUbygtciwgMyAqIHIpO1xuICAgIGNvbnRleHQubGluZVRvKC1yLCByKTtcbiAgICBjb250ZXh0LmxpbmVUbygtMyAqIHIsIHIpO1xuICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gIH1cbn07XG4iLCJ2YXIgdGFuMzAgPSBNYXRoLnNxcnQoMSAvIDMpLFxuICAgIHRhbjMwXzIgPSB0YW4zMCAqIDI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZHJhdzogZnVuY3Rpb24oY29udGV4dCwgc2l6ZSkge1xuICAgIHZhciB5ID0gTWF0aC5zcXJ0KHNpemUgLyB0YW4zMF8yKSxcbiAgICAgICAgeCA9IHkgKiB0YW4zMDtcbiAgICBjb250ZXh0Lm1vdmVUbygwLCAteSk7XG4gICAgY29udGV4dC5saW5lVG8oeCwgMCk7XG4gICAgY29udGV4dC5saW5lVG8oMCwgeSk7XG4gICAgY29udGV4dC5saW5lVG8oLXgsIDApO1xuICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gIH1cbn07XG4iLCJleHBvcnQgZGVmYXVsdCB7XG4gIGRyYXc6IGZ1bmN0aW9uKGNvbnRleHQsIHNpemUpIHtcbiAgICB2YXIgdyA9IE1hdGguc3FydChzaXplKSxcbiAgICAgICAgeCA9IC13IC8gMjtcbiAgICBjb250ZXh0LnJlY3QoeCwgeCwgdywgdyk7XG4gIH1cbn07XG4iLCJpbXBvcnQge3BpLCB0YXV9IGZyb20gXCIuLi9tYXRoLmpzXCI7XG5cbnZhciBrYSA9IDAuODkwODEzMDkxNTI5Mjg1MjI4MTAsXG4gICAga3IgPSBNYXRoLnNpbihwaSAvIDEwKSAvIE1hdGguc2luKDcgKiBwaSAvIDEwKSxcbiAgICBreCA9IE1hdGguc2luKHRhdSAvIDEwKSAqIGtyLFxuICAgIGt5ID0gLU1hdGguY29zKHRhdSAvIDEwKSAqIGtyO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGRyYXc6IGZ1bmN0aW9uKGNvbnRleHQsIHNpemUpIHtcbiAgICB2YXIgciA9IE1hdGguc3FydChzaXplICoga2EpLFxuICAgICAgICB4ID0ga3ggKiByLFxuICAgICAgICB5ID0ga3kgKiByO1xuICAgIGNvbnRleHQubW92ZVRvKDAsIC1yKTtcbiAgICBjb250ZXh0LmxpbmVUbyh4LCB5KTtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IDU7ICsraSkge1xuICAgICAgdmFyIGEgPSB0YXUgKiBpIC8gNSxcbiAgICAgICAgICBjID0gTWF0aC5jb3MoYSksXG4gICAgICAgICAgcyA9IE1hdGguc2luKGEpO1xuICAgICAgY29udGV4dC5saW5lVG8ocyAqIHIsIC1jICogcik7XG4gICAgICBjb250ZXh0LmxpbmVUbyhjICogeCAtIHMgKiB5LCBzICogeCArIGMgKiB5KTtcbiAgICB9XG4gICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgfVxufTtcbiIsInZhciBzcXJ0MyA9IE1hdGguc3FydCgzKTtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBkcmF3OiBmdW5jdGlvbihjb250ZXh0LCBzaXplKSB7XG4gICAgdmFyIHkgPSAtTWF0aC5zcXJ0KHNpemUgLyAoc3FydDMgKiAzKSk7XG4gICAgY29udGV4dC5tb3ZlVG8oMCwgeSAqIDIpO1xuICAgIGNvbnRleHQubGluZVRvKC1zcXJ0MyAqIHksIC15KTtcbiAgICBjb250ZXh0LmxpbmVUbyhzcXJ0MyAqIHksIC15KTtcbiAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICB9XG59O1xuIiwidmFyIGMgPSAtMC41LFxuICAgIHMgPSBNYXRoLnNxcnQoMykgLyAyLFxuICAgIGsgPSAxIC8gTWF0aC5zcXJ0KDEyKSxcbiAgICBhID0gKGsgLyAyICsgMSkgKiAzO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGRyYXc6IGZ1bmN0aW9uKGNvbnRleHQsIHNpemUpIHtcbiAgICB2YXIgciA9IE1hdGguc3FydChzaXplIC8gYSksXG4gICAgICAgIHgwID0gciAvIDIsXG4gICAgICAgIHkwID0gciAqIGssXG4gICAgICAgIHgxID0geDAsXG4gICAgICAgIHkxID0gciAqIGsgKyByLFxuICAgICAgICB4MiA9IC14MSxcbiAgICAgICAgeTIgPSB5MTtcbiAgICBjb250ZXh0Lm1vdmVUbyh4MCwgeTApO1xuICAgIGNvbnRleHQubGluZVRvKHgxLCB5MSk7XG4gICAgY29udGV4dC5saW5lVG8oeDIsIHkyKTtcbiAgICBjb250ZXh0LmxpbmVUbyhjICogeDAgLSBzICogeTAsIHMgKiB4MCArIGMgKiB5MCk7XG4gICAgY29udGV4dC5saW5lVG8oYyAqIHgxIC0gcyAqIHkxLCBzICogeDEgKyBjICogeTEpO1xuICAgIGNvbnRleHQubGluZVRvKGMgKiB4MiAtIHMgKiB5MiwgcyAqIHgyICsgYyAqIHkyKTtcbiAgICBjb250ZXh0LmxpbmVUbyhjICogeDAgKyBzICogeTAsIGMgKiB5MCAtIHMgKiB4MCk7XG4gICAgY29udGV4dC5saW5lVG8oYyAqIHgxICsgcyAqIHkxLCBjICogeTEgLSBzICogeDEpO1xuICAgIGNvbnRleHQubGluZVRvKGMgKiB4MiArIHMgKiB5MiwgYyAqIHkyIC0gcyAqIHgyKTtcbiAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICB9XG59O1xuIiwiaW1wb3J0IGZvcm1hdExvY2FsZSBmcm9tIFwiLi9sb2NhbGUuanNcIjtcblxudmFyIGxvY2FsZTtcbmV4cG9ydCB2YXIgdGltZUZvcm1hdDtcbmV4cG9ydCB2YXIgdGltZVBhcnNlO1xuZXhwb3J0IHZhciB1dGNGb3JtYXQ7XG5leHBvcnQgdmFyIHV0Y1BhcnNlO1xuXG5kZWZhdWx0TG9jYWxlKHtcbiAgZGF0ZVRpbWU6IFwiJXgsICVYXCIsXG4gIGRhdGU6IFwiJS1tLyUtZC8lWVwiLFxuICB0aW1lOiBcIiUtSTolTTolUyAlcFwiLFxuICBwZXJpb2RzOiBbXCJBTVwiLCBcIlBNXCJdLFxuICBkYXlzOiBbXCJTdW5kYXlcIiwgXCJNb25kYXlcIiwgXCJUdWVzZGF5XCIsIFwiV2VkbmVzZGF5XCIsIFwiVGh1cnNkYXlcIiwgXCJGcmlkYXlcIiwgXCJTYXR1cmRheVwiXSxcbiAgc2hvcnREYXlzOiBbXCJTdW5cIiwgXCJNb25cIiwgXCJUdWVcIiwgXCJXZWRcIiwgXCJUaHVcIiwgXCJGcmlcIiwgXCJTYXRcIl0sXG4gIG1vbnRoczogW1wiSmFudWFyeVwiLCBcIkZlYnJ1YXJ5XCIsIFwiTWFyY2hcIiwgXCJBcHJpbFwiLCBcIk1heVwiLCBcIkp1bmVcIiwgXCJKdWx5XCIsIFwiQXVndXN0XCIsIFwiU2VwdGVtYmVyXCIsIFwiT2N0b2JlclwiLCBcIk5vdmVtYmVyXCIsIFwiRGVjZW1iZXJcIl0sXG4gIHNob3J0TW9udGhzOiBbXCJKYW5cIiwgXCJGZWJcIiwgXCJNYXJcIiwgXCJBcHJcIiwgXCJNYXlcIiwgXCJKdW5cIiwgXCJKdWxcIiwgXCJBdWdcIiwgXCJTZXBcIiwgXCJPY3RcIiwgXCJOb3ZcIiwgXCJEZWNcIl1cbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkZWZhdWx0TG9jYWxlKGRlZmluaXRpb24pIHtcbiAgbG9jYWxlID0gZm9ybWF0TG9jYWxlKGRlZmluaXRpb24pO1xuICB0aW1lRm9ybWF0ID0gbG9jYWxlLmZvcm1hdDtcbiAgdGltZVBhcnNlID0gbG9jYWxlLnBhcnNlO1xuICB1dGNGb3JtYXQgPSBsb2NhbGUudXRjRm9ybWF0O1xuICB1dGNQYXJzZSA9IGxvY2FsZS51dGNQYXJzZTtcbiAgcmV0dXJuIGxvY2FsZTtcbn1cbiIsImV4cG9ydCB7ZGVmYXVsdCBhcyB0aW1lRm9ybWF0RGVmYXVsdExvY2FsZSwgdGltZUZvcm1hdCwgdGltZVBhcnNlLCB1dGNGb3JtYXQsIHV0Y1BhcnNlfSBmcm9tIFwiLi9kZWZhdWx0TG9jYWxlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgdGltZUZvcm1hdExvY2FsZX0gZnJvbSBcIi4vbG9jYWxlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaXNvRm9ybWF0fSBmcm9tIFwiLi9pc29Gb3JtYXQuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpc29QYXJzZX0gZnJvbSBcIi4vaXNvUGFyc2UuanNcIjtcbiIsImltcG9ydCB7dXRjRm9ybWF0fSBmcm9tIFwiLi9kZWZhdWx0TG9jYWxlLmpzXCI7XG5cbmV4cG9ydCB2YXIgaXNvU3BlY2lmaWVyID0gXCIlWS0lbS0lZFQlSDolTTolUy4lTFpcIjtcblxuZnVuY3Rpb24gZm9ybWF0SXNvTmF0aXZlKGRhdGUpIHtcbiAgcmV0dXJuIGRhdGUudG9JU09TdHJpbmcoKTtcbn1cblxudmFyIGZvcm1hdElzbyA9IERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nXG4gICAgPyBmb3JtYXRJc29OYXRpdmVcbiAgICA6IHV0Y0Zvcm1hdChpc29TcGVjaWZpZXIpO1xuXG5leHBvcnQgZGVmYXVsdCBmb3JtYXRJc287XG4iLCJpbXBvcnQge2lzb1NwZWNpZmllcn0gZnJvbSBcIi4vaXNvRm9ybWF0LmpzXCI7XG5pbXBvcnQge3V0Y1BhcnNlfSBmcm9tIFwiLi9kZWZhdWx0TG9jYWxlLmpzXCI7XG5cbmZ1bmN0aW9uIHBhcnNlSXNvTmF0aXZlKHN0cmluZykge1xuICB2YXIgZGF0ZSA9IG5ldyBEYXRlKHN0cmluZyk7XG4gIHJldHVybiBpc05hTihkYXRlKSA/IG51bGwgOiBkYXRlO1xufVxuXG52YXIgcGFyc2VJc28gPSArbmV3IERhdGUoXCIyMDAwLTAxLTAxVDAwOjAwOjAwLjAwMFpcIilcbiAgICA/IHBhcnNlSXNvTmF0aXZlXG4gICAgOiB1dGNQYXJzZShpc29TcGVjaWZpZXIpO1xuXG5leHBvcnQgZGVmYXVsdCBwYXJzZUlzbztcbiIsImltcG9ydCB7XG4gIHRpbWVEYXksXG4gIHRpbWVTdW5kYXksXG4gIHRpbWVNb25kYXksXG4gIHRpbWVUaHVyc2RheSxcbiAgdGltZVllYXIsXG4gIHV0Y0RheSxcbiAgdXRjU3VuZGF5LFxuICB1dGNNb25kYXksXG4gIHV0Y1RodXJzZGF5LFxuICB1dGNZZWFyXG59IGZyb20gXCJkMy10aW1lXCI7XG5cbmZ1bmN0aW9uIGxvY2FsRGF0ZShkKSB7XG4gIGlmICgwIDw9IGQueSAmJiBkLnkgPCAxMDApIHtcbiAgICB2YXIgZGF0ZSA9IG5ldyBEYXRlKC0xLCBkLm0sIGQuZCwgZC5ILCBkLk0sIGQuUywgZC5MKTtcbiAgICBkYXRlLnNldEZ1bGxZZWFyKGQueSk7XG4gICAgcmV0dXJuIGRhdGU7XG4gIH1cbiAgcmV0dXJuIG5ldyBEYXRlKGQueSwgZC5tLCBkLmQsIGQuSCwgZC5NLCBkLlMsIGQuTCk7XG59XG5cbmZ1bmN0aW9uIHV0Y0RhdGUoZCkge1xuICBpZiAoMCA8PSBkLnkgJiYgZC55IDwgMTAwKSB7XG4gICAgdmFyIGRhdGUgPSBuZXcgRGF0ZShEYXRlLlVUQygtMSwgZC5tLCBkLmQsIGQuSCwgZC5NLCBkLlMsIGQuTCkpO1xuICAgIGRhdGUuc2V0VVRDRnVsbFllYXIoZC55KTtcbiAgICByZXR1cm4gZGF0ZTtcbiAgfVxuICByZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEMoZC55LCBkLm0sIGQuZCwgZC5ILCBkLk0sIGQuUywgZC5MKSk7XG59XG5cbmZ1bmN0aW9uIG5ld0RhdGUoeSwgbSwgZCkge1xuICByZXR1cm4ge3k6IHksIG06IG0sIGQ6IGQsIEg6IDAsIE06IDAsIFM6IDAsIEw6IDB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBmb3JtYXRMb2NhbGUobG9jYWxlKSB7XG4gIHZhciBsb2NhbGVfZGF0ZVRpbWUgPSBsb2NhbGUuZGF0ZVRpbWUsXG4gICAgICBsb2NhbGVfZGF0ZSA9IGxvY2FsZS5kYXRlLFxuICAgICAgbG9jYWxlX3RpbWUgPSBsb2NhbGUudGltZSxcbiAgICAgIGxvY2FsZV9wZXJpb2RzID0gbG9jYWxlLnBlcmlvZHMsXG4gICAgICBsb2NhbGVfd2Vla2RheXMgPSBsb2NhbGUuZGF5cyxcbiAgICAgIGxvY2FsZV9zaG9ydFdlZWtkYXlzID0gbG9jYWxlLnNob3J0RGF5cyxcbiAgICAgIGxvY2FsZV9tb250aHMgPSBsb2NhbGUubW9udGhzLFxuICAgICAgbG9jYWxlX3Nob3J0TW9udGhzID0gbG9jYWxlLnNob3J0TW9udGhzO1xuXG4gIHZhciBwZXJpb2RSZSA9IGZvcm1hdFJlKGxvY2FsZV9wZXJpb2RzKSxcbiAgICAgIHBlcmlvZExvb2t1cCA9IGZvcm1hdExvb2t1cChsb2NhbGVfcGVyaW9kcyksXG4gICAgICB3ZWVrZGF5UmUgPSBmb3JtYXRSZShsb2NhbGVfd2Vla2RheXMpLFxuICAgICAgd2Vla2RheUxvb2t1cCA9IGZvcm1hdExvb2t1cChsb2NhbGVfd2Vla2RheXMpLFxuICAgICAgc2hvcnRXZWVrZGF5UmUgPSBmb3JtYXRSZShsb2NhbGVfc2hvcnRXZWVrZGF5cyksXG4gICAgICBzaG9ydFdlZWtkYXlMb29rdXAgPSBmb3JtYXRMb29rdXAobG9jYWxlX3Nob3J0V2Vla2RheXMpLFxuICAgICAgbW9udGhSZSA9IGZvcm1hdFJlKGxvY2FsZV9tb250aHMpLFxuICAgICAgbW9udGhMb29rdXAgPSBmb3JtYXRMb29rdXAobG9jYWxlX21vbnRocyksXG4gICAgICBzaG9ydE1vbnRoUmUgPSBmb3JtYXRSZShsb2NhbGVfc2hvcnRNb250aHMpLFxuICAgICAgc2hvcnRNb250aExvb2t1cCA9IGZvcm1hdExvb2t1cChsb2NhbGVfc2hvcnRNb250aHMpO1xuXG4gIHZhciBmb3JtYXRzID0ge1xuICAgIFwiYVwiOiBmb3JtYXRTaG9ydFdlZWtkYXksXG4gICAgXCJBXCI6IGZvcm1hdFdlZWtkYXksXG4gICAgXCJiXCI6IGZvcm1hdFNob3J0TW9udGgsXG4gICAgXCJCXCI6IGZvcm1hdE1vbnRoLFxuICAgIFwiY1wiOiBudWxsLFxuICAgIFwiZFwiOiBmb3JtYXREYXlPZk1vbnRoLFxuICAgIFwiZVwiOiBmb3JtYXREYXlPZk1vbnRoLFxuICAgIFwiZlwiOiBmb3JtYXRNaWNyb3NlY29uZHMsXG4gICAgXCJnXCI6IGZvcm1hdFllYXJJU08sXG4gICAgXCJHXCI6IGZvcm1hdEZ1bGxZZWFySVNPLFxuICAgIFwiSFwiOiBmb3JtYXRIb3VyMjQsXG4gICAgXCJJXCI6IGZvcm1hdEhvdXIxMixcbiAgICBcImpcIjogZm9ybWF0RGF5T2ZZZWFyLFxuICAgIFwiTFwiOiBmb3JtYXRNaWxsaXNlY29uZHMsXG4gICAgXCJtXCI6IGZvcm1hdE1vbnRoTnVtYmVyLFxuICAgIFwiTVwiOiBmb3JtYXRNaW51dGVzLFxuICAgIFwicFwiOiBmb3JtYXRQZXJpb2QsXG4gICAgXCJxXCI6IGZvcm1hdFF1YXJ0ZXIsXG4gICAgXCJRXCI6IGZvcm1hdFVuaXhUaW1lc3RhbXAsXG4gICAgXCJzXCI6IGZvcm1hdFVuaXhUaW1lc3RhbXBTZWNvbmRzLFxuICAgIFwiU1wiOiBmb3JtYXRTZWNvbmRzLFxuICAgIFwidVwiOiBmb3JtYXRXZWVrZGF5TnVtYmVyTW9uZGF5LFxuICAgIFwiVVwiOiBmb3JtYXRXZWVrTnVtYmVyU3VuZGF5LFxuICAgIFwiVlwiOiBmb3JtYXRXZWVrTnVtYmVySVNPLFxuICAgIFwid1wiOiBmb3JtYXRXZWVrZGF5TnVtYmVyU3VuZGF5LFxuICAgIFwiV1wiOiBmb3JtYXRXZWVrTnVtYmVyTW9uZGF5LFxuICAgIFwieFwiOiBudWxsLFxuICAgIFwiWFwiOiBudWxsLFxuICAgIFwieVwiOiBmb3JtYXRZZWFyLFxuICAgIFwiWVwiOiBmb3JtYXRGdWxsWWVhcixcbiAgICBcIlpcIjogZm9ybWF0Wm9uZSxcbiAgICBcIiVcIjogZm9ybWF0TGl0ZXJhbFBlcmNlbnRcbiAgfTtcblxuICB2YXIgdXRjRm9ybWF0cyA9IHtcbiAgICBcImFcIjogZm9ybWF0VVRDU2hvcnRXZWVrZGF5LFxuICAgIFwiQVwiOiBmb3JtYXRVVENXZWVrZGF5LFxuICAgIFwiYlwiOiBmb3JtYXRVVENTaG9ydE1vbnRoLFxuICAgIFwiQlwiOiBmb3JtYXRVVENNb250aCxcbiAgICBcImNcIjogbnVsbCxcbiAgICBcImRcIjogZm9ybWF0VVRDRGF5T2ZNb250aCxcbiAgICBcImVcIjogZm9ybWF0VVRDRGF5T2ZNb250aCxcbiAgICBcImZcIjogZm9ybWF0VVRDTWljcm9zZWNvbmRzLFxuICAgIFwiZ1wiOiBmb3JtYXRVVENZZWFySVNPLFxuICAgIFwiR1wiOiBmb3JtYXRVVENGdWxsWWVhcklTTyxcbiAgICBcIkhcIjogZm9ybWF0VVRDSG91cjI0LFxuICAgIFwiSVwiOiBmb3JtYXRVVENIb3VyMTIsXG4gICAgXCJqXCI6IGZvcm1hdFVUQ0RheU9mWWVhcixcbiAgICBcIkxcIjogZm9ybWF0VVRDTWlsbGlzZWNvbmRzLFxuICAgIFwibVwiOiBmb3JtYXRVVENNb250aE51bWJlcixcbiAgICBcIk1cIjogZm9ybWF0VVRDTWludXRlcyxcbiAgICBcInBcIjogZm9ybWF0VVRDUGVyaW9kLFxuICAgIFwicVwiOiBmb3JtYXRVVENRdWFydGVyLFxuICAgIFwiUVwiOiBmb3JtYXRVbml4VGltZXN0YW1wLFxuICAgIFwic1wiOiBmb3JtYXRVbml4VGltZXN0YW1wU2Vjb25kcyxcbiAgICBcIlNcIjogZm9ybWF0VVRDU2Vjb25kcyxcbiAgICBcInVcIjogZm9ybWF0VVRDV2Vla2RheU51bWJlck1vbmRheSxcbiAgICBcIlVcIjogZm9ybWF0VVRDV2Vla051bWJlclN1bmRheSxcbiAgICBcIlZcIjogZm9ybWF0VVRDV2Vla051bWJlcklTTyxcbiAgICBcIndcIjogZm9ybWF0VVRDV2Vla2RheU51bWJlclN1bmRheSxcbiAgICBcIldcIjogZm9ybWF0VVRDV2Vla051bWJlck1vbmRheSxcbiAgICBcInhcIjogbnVsbCxcbiAgICBcIlhcIjogbnVsbCxcbiAgICBcInlcIjogZm9ybWF0VVRDWWVhcixcbiAgICBcIllcIjogZm9ybWF0VVRDRnVsbFllYXIsXG4gICAgXCJaXCI6IGZvcm1hdFVUQ1pvbmUsXG4gICAgXCIlXCI6IGZvcm1hdExpdGVyYWxQZXJjZW50XG4gIH07XG5cbiAgdmFyIHBhcnNlcyA9IHtcbiAgICBcImFcIjogcGFyc2VTaG9ydFdlZWtkYXksXG4gICAgXCJBXCI6IHBhcnNlV2Vla2RheSxcbiAgICBcImJcIjogcGFyc2VTaG9ydE1vbnRoLFxuICAgIFwiQlwiOiBwYXJzZU1vbnRoLFxuICAgIFwiY1wiOiBwYXJzZUxvY2FsZURhdGVUaW1lLFxuICAgIFwiZFwiOiBwYXJzZURheU9mTW9udGgsXG4gICAgXCJlXCI6IHBhcnNlRGF5T2ZNb250aCxcbiAgICBcImZcIjogcGFyc2VNaWNyb3NlY29uZHMsXG4gICAgXCJnXCI6IHBhcnNlWWVhcixcbiAgICBcIkdcIjogcGFyc2VGdWxsWWVhcixcbiAgICBcIkhcIjogcGFyc2VIb3VyMjQsXG4gICAgXCJJXCI6IHBhcnNlSG91cjI0LFxuICAgIFwialwiOiBwYXJzZURheU9mWWVhcixcbiAgICBcIkxcIjogcGFyc2VNaWxsaXNlY29uZHMsXG4gICAgXCJtXCI6IHBhcnNlTW9udGhOdW1iZXIsXG4gICAgXCJNXCI6IHBhcnNlTWludXRlcyxcbiAgICBcInBcIjogcGFyc2VQZXJpb2QsXG4gICAgXCJxXCI6IHBhcnNlUXVhcnRlcixcbiAgICBcIlFcIjogcGFyc2VVbml4VGltZXN0YW1wLFxuICAgIFwic1wiOiBwYXJzZVVuaXhUaW1lc3RhbXBTZWNvbmRzLFxuICAgIFwiU1wiOiBwYXJzZVNlY29uZHMsXG4gICAgXCJ1XCI6IHBhcnNlV2Vla2RheU51bWJlck1vbmRheSxcbiAgICBcIlVcIjogcGFyc2VXZWVrTnVtYmVyU3VuZGF5LFxuICAgIFwiVlwiOiBwYXJzZVdlZWtOdW1iZXJJU08sXG4gICAgXCJ3XCI6IHBhcnNlV2Vla2RheU51bWJlclN1bmRheSxcbiAgICBcIldcIjogcGFyc2VXZWVrTnVtYmVyTW9uZGF5LFxuICAgIFwieFwiOiBwYXJzZUxvY2FsZURhdGUsXG4gICAgXCJYXCI6IHBhcnNlTG9jYWxlVGltZSxcbiAgICBcInlcIjogcGFyc2VZZWFyLFxuICAgIFwiWVwiOiBwYXJzZUZ1bGxZZWFyLFxuICAgIFwiWlwiOiBwYXJzZVpvbmUsXG4gICAgXCIlXCI6IHBhcnNlTGl0ZXJhbFBlcmNlbnRcbiAgfTtcblxuICAvLyBUaGVzZSByZWN1cnNpdmUgZGlyZWN0aXZlIGRlZmluaXRpb25zIG11c3QgYmUgZGVmZXJyZWQuXG4gIGZvcm1hdHMueCA9IG5ld0Zvcm1hdChsb2NhbGVfZGF0ZSwgZm9ybWF0cyk7XG4gIGZvcm1hdHMuWCA9IG5ld0Zvcm1hdChsb2NhbGVfdGltZSwgZm9ybWF0cyk7XG4gIGZvcm1hdHMuYyA9IG5ld0Zvcm1hdChsb2NhbGVfZGF0ZVRpbWUsIGZvcm1hdHMpO1xuICB1dGNGb3JtYXRzLnggPSBuZXdGb3JtYXQobG9jYWxlX2RhdGUsIHV0Y0Zvcm1hdHMpO1xuICB1dGNGb3JtYXRzLlggPSBuZXdGb3JtYXQobG9jYWxlX3RpbWUsIHV0Y0Zvcm1hdHMpO1xuICB1dGNGb3JtYXRzLmMgPSBuZXdGb3JtYXQobG9jYWxlX2RhdGVUaW1lLCB1dGNGb3JtYXRzKTtcblxuICBmdW5jdGlvbiBuZXdGb3JtYXQoc3BlY2lmaWVyLCBmb3JtYXRzKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGRhdGUpIHtcbiAgICAgIHZhciBzdHJpbmcgPSBbXSxcbiAgICAgICAgICBpID0gLTEsXG4gICAgICAgICAgaiA9IDAsXG4gICAgICAgICAgbiA9IHNwZWNpZmllci5sZW5ndGgsXG4gICAgICAgICAgYyxcbiAgICAgICAgICBwYWQsXG4gICAgICAgICAgZm9ybWF0O1xuXG4gICAgICBpZiAoIShkYXRlIGluc3RhbmNlb2YgRGF0ZSkpIGRhdGUgPSBuZXcgRGF0ZSgrZGF0ZSk7XG5cbiAgICAgIHdoaWxlICgrK2kgPCBuKSB7XG4gICAgICAgIGlmIChzcGVjaWZpZXIuY2hhckNvZGVBdChpKSA9PT0gMzcpIHtcbiAgICAgICAgICBzdHJpbmcucHVzaChzcGVjaWZpZXIuc2xpY2UoaiwgaSkpO1xuICAgICAgICAgIGlmICgocGFkID0gcGFkc1tjID0gc3BlY2lmaWVyLmNoYXJBdCgrK2kpXSkgIT0gbnVsbCkgYyA9IHNwZWNpZmllci5jaGFyQXQoKytpKTtcbiAgICAgICAgICBlbHNlIHBhZCA9IGMgPT09IFwiZVwiID8gXCIgXCIgOiBcIjBcIjtcbiAgICAgICAgICBpZiAoZm9ybWF0ID0gZm9ybWF0c1tjXSkgYyA9IGZvcm1hdChkYXRlLCBwYWQpO1xuICAgICAgICAgIHN0cmluZy5wdXNoKGMpO1xuICAgICAgICAgIGogPSBpICsgMTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzdHJpbmcucHVzaChzcGVjaWZpZXIuc2xpY2UoaiwgaSkpO1xuICAgICAgcmV0dXJuIHN0cmluZy5qb2luKFwiXCIpO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBuZXdQYXJzZShzcGVjaWZpZXIsIFopIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgICB2YXIgZCA9IG5ld0RhdGUoMTkwMCwgdW5kZWZpbmVkLCAxKSxcbiAgICAgICAgICBpID0gcGFyc2VTcGVjaWZpZXIoZCwgc3BlY2lmaWVyLCBzdHJpbmcgKz0gXCJcIiwgMCksXG4gICAgICAgICAgd2VlaywgZGF5O1xuICAgICAgaWYgKGkgIT0gc3RyaW5nLmxlbmd0aCkgcmV0dXJuIG51bGw7XG5cbiAgICAgIC8vIElmIGEgVU5JWCB0aW1lc3RhbXAgaXMgc3BlY2lmaWVkLCByZXR1cm4gaXQuXG4gICAgICBpZiAoXCJRXCIgaW4gZCkgcmV0dXJuIG5ldyBEYXRlKGQuUSk7XG4gICAgICBpZiAoXCJzXCIgaW4gZCkgcmV0dXJuIG5ldyBEYXRlKGQucyAqIDEwMDAgKyAoXCJMXCIgaW4gZCA/IGQuTCA6IDApKTtcblxuICAgICAgLy8gSWYgdGhpcyBpcyB1dGNQYXJzZSwgbmV2ZXIgdXNlIHRoZSBsb2NhbCB0aW1lem9uZS5cbiAgICAgIGlmIChaICYmICEoXCJaXCIgaW4gZCkpIGQuWiA9IDA7XG5cbiAgICAgIC8vIFRoZSBhbS1wbSBmbGFnIGlzIDAgZm9yIEFNLCBhbmQgMSBmb3IgUE0uXG4gICAgICBpZiAoXCJwXCIgaW4gZCkgZC5IID0gZC5IICUgMTIgKyBkLnAgKiAxMjtcblxuICAgICAgLy8gSWYgdGhlIG1vbnRoIHdhcyBub3Qgc3BlY2lmaWVkLCBpbmhlcml0IGZyb20gdGhlIHF1YXJ0ZXIuXG4gICAgICBpZiAoZC5tID09PSB1bmRlZmluZWQpIGQubSA9IFwicVwiIGluIGQgPyBkLnEgOiAwO1xuXG4gICAgICAvLyBDb252ZXJ0IGRheS1vZi13ZWVrIGFuZCB3ZWVrLW9mLXllYXIgdG8gZGF5LW9mLXllYXIuXG4gICAgICBpZiAoXCJWXCIgaW4gZCkge1xuICAgICAgICBpZiAoZC5WIDwgMSB8fCBkLlYgPiA1MykgcmV0dXJuIG51bGw7XG4gICAgICAgIGlmICghKFwid1wiIGluIGQpKSBkLncgPSAxO1xuICAgICAgICBpZiAoXCJaXCIgaW4gZCkge1xuICAgICAgICAgIHdlZWsgPSB1dGNEYXRlKG5ld0RhdGUoZC55LCAwLCAxKSksIGRheSA9IHdlZWsuZ2V0VVRDRGF5KCk7XG4gICAgICAgICAgd2VlayA9IGRheSA+IDQgfHwgZGF5ID09PSAwID8gdXRjTW9uZGF5LmNlaWwod2VlaykgOiB1dGNNb25kYXkod2Vlayk7XG4gICAgICAgICAgd2VlayA9IHV0Y0RheS5vZmZzZXQod2VlaywgKGQuViAtIDEpICogNyk7XG4gICAgICAgICAgZC55ID0gd2Vlay5nZXRVVENGdWxsWWVhcigpO1xuICAgICAgICAgIGQubSA9IHdlZWsuZ2V0VVRDTW9udGgoKTtcbiAgICAgICAgICBkLmQgPSB3ZWVrLmdldFVUQ0RhdGUoKSArIChkLncgKyA2KSAlIDc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgd2VlayA9IGxvY2FsRGF0ZShuZXdEYXRlKGQueSwgMCwgMSkpLCBkYXkgPSB3ZWVrLmdldERheSgpO1xuICAgICAgICAgIHdlZWsgPSBkYXkgPiA0IHx8IGRheSA9PT0gMCA/IHRpbWVNb25kYXkuY2VpbCh3ZWVrKSA6IHRpbWVNb25kYXkod2Vlayk7XG4gICAgICAgICAgd2VlayA9IHRpbWVEYXkub2Zmc2V0KHdlZWssIChkLlYgLSAxKSAqIDcpO1xuICAgICAgICAgIGQueSA9IHdlZWsuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgICBkLm0gPSB3ZWVrLmdldE1vbnRoKCk7XG4gICAgICAgICAgZC5kID0gd2Vlay5nZXREYXRlKCkgKyAoZC53ICsgNikgJSA3O1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKFwiV1wiIGluIGQgfHwgXCJVXCIgaW4gZCkge1xuICAgICAgICBpZiAoIShcIndcIiBpbiBkKSkgZC53ID0gXCJ1XCIgaW4gZCA/IGQudSAlIDcgOiBcIldcIiBpbiBkID8gMSA6IDA7XG4gICAgICAgIGRheSA9IFwiWlwiIGluIGQgPyB1dGNEYXRlKG5ld0RhdGUoZC55LCAwLCAxKSkuZ2V0VVRDRGF5KCkgOiBsb2NhbERhdGUobmV3RGF0ZShkLnksIDAsIDEpKS5nZXREYXkoKTtcbiAgICAgICAgZC5tID0gMDtcbiAgICAgICAgZC5kID0gXCJXXCIgaW4gZCA/IChkLncgKyA2KSAlIDcgKyBkLlcgKiA3IC0gKGRheSArIDUpICUgNyA6IGQudyArIGQuVSAqIDcgLSAoZGF5ICsgNikgJSA3O1xuICAgICAgfVxuXG4gICAgICAvLyBJZiBhIHRpbWUgem9uZSBpcyBzcGVjaWZpZWQsIGFsbCBmaWVsZHMgYXJlIGludGVycHJldGVkIGFzIFVUQyBhbmQgdGhlblxuICAgICAgLy8gb2Zmc2V0IGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWVkIHRpbWUgem9uZS5cbiAgICAgIGlmIChcIlpcIiBpbiBkKSB7XG4gICAgICAgIGQuSCArPSBkLlogLyAxMDAgfCAwO1xuICAgICAgICBkLk0gKz0gZC5aICUgMTAwO1xuICAgICAgICByZXR1cm4gdXRjRGF0ZShkKTtcbiAgICAgIH1cblxuICAgICAgLy8gT3RoZXJ3aXNlLCBhbGwgZmllbGRzIGFyZSBpbiBsb2NhbCB0aW1lLlxuICAgICAgcmV0dXJuIGxvY2FsRGF0ZShkKTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VTcGVjaWZpZXIoZCwgc3BlY2lmaWVyLCBzdHJpbmcsIGopIHtcbiAgICB2YXIgaSA9IDAsXG4gICAgICAgIG4gPSBzcGVjaWZpZXIubGVuZ3RoLFxuICAgICAgICBtID0gc3RyaW5nLmxlbmd0aCxcbiAgICAgICAgYyxcbiAgICAgICAgcGFyc2U7XG5cbiAgICB3aGlsZSAoaSA8IG4pIHtcbiAgICAgIGlmIChqID49IG0pIHJldHVybiAtMTtcbiAgICAgIGMgPSBzcGVjaWZpZXIuY2hhckNvZGVBdChpKyspO1xuICAgICAgaWYgKGMgPT09IDM3KSB7XG4gICAgICAgIGMgPSBzcGVjaWZpZXIuY2hhckF0KGkrKyk7XG4gICAgICAgIHBhcnNlID0gcGFyc2VzW2MgaW4gcGFkcyA/IHNwZWNpZmllci5jaGFyQXQoaSsrKSA6IGNdO1xuICAgICAgICBpZiAoIXBhcnNlIHx8ICgoaiA9IHBhcnNlKGQsIHN0cmluZywgaikpIDwgMCkpIHJldHVybiAtMTtcbiAgICAgIH0gZWxzZSBpZiAoYyAhPSBzdHJpbmcuY2hhckNvZGVBdChqKyspKSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gajtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlUGVyaW9kKGQsIHN0cmluZywgaSkge1xuICAgIHZhciBuID0gcGVyaW9kUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSkpO1xuICAgIHJldHVybiBuID8gKGQucCA9IHBlcmlvZExvb2t1cFtuWzBdLnRvTG93ZXJDYXNlKCldLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZVNob3J0V2Vla2RheShkLCBzdHJpbmcsIGkpIHtcbiAgICB2YXIgbiA9IHNob3J0V2Vla2RheVJlLmV4ZWMoc3RyaW5nLnNsaWNlKGkpKTtcbiAgICByZXR1cm4gbiA/IChkLncgPSBzaG9ydFdlZWtkYXlMb29rdXBbblswXS50b0xvd2VyQ2FzZSgpXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VXZWVrZGF5KGQsIHN0cmluZywgaSkge1xuICAgIHZhciBuID0gd2Vla2RheVJlLmV4ZWMoc3RyaW5nLnNsaWNlKGkpKTtcbiAgICByZXR1cm4gbiA/IChkLncgPSB3ZWVrZGF5TG9va3VwW25bMF0udG9Mb3dlckNhc2UoKV0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlU2hvcnRNb250aChkLCBzdHJpbmcsIGkpIHtcbiAgICB2YXIgbiA9IHNob3J0TW9udGhSZS5leGVjKHN0cmluZy5zbGljZShpKSk7XG4gICAgcmV0dXJuIG4gPyAoZC5tID0gc2hvcnRNb250aExvb2t1cFtuWzBdLnRvTG93ZXJDYXNlKCldLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZU1vbnRoKGQsIHN0cmluZywgaSkge1xuICAgIHZhciBuID0gbW9udGhSZS5leGVjKHN0cmluZy5zbGljZShpKSk7XG4gICAgcmV0dXJuIG4gPyAoZC5tID0gbW9udGhMb29rdXBbblswXS50b0xvd2VyQ2FzZSgpXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VMb2NhbGVEYXRlVGltZShkLCBzdHJpbmcsIGkpIHtcbiAgICByZXR1cm4gcGFyc2VTcGVjaWZpZXIoZCwgbG9jYWxlX2RhdGVUaW1lLCBzdHJpbmcsIGkpO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VMb2NhbGVEYXRlKGQsIHN0cmluZywgaSkge1xuICAgIHJldHVybiBwYXJzZVNwZWNpZmllcihkLCBsb2NhbGVfZGF0ZSwgc3RyaW5nLCBpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlTG9jYWxlVGltZShkLCBzdHJpbmcsIGkpIHtcbiAgICByZXR1cm4gcGFyc2VTcGVjaWZpZXIoZCwgbG9jYWxlX3RpbWUsIHN0cmluZywgaSk7XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRTaG9ydFdlZWtkYXkoZCkge1xuICAgIHJldHVybiBsb2NhbGVfc2hvcnRXZWVrZGF5c1tkLmdldERheSgpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFdlZWtkYXkoZCkge1xuICAgIHJldHVybiBsb2NhbGVfd2Vla2RheXNbZC5nZXREYXkoKV07XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRTaG9ydE1vbnRoKGQpIHtcbiAgICByZXR1cm4gbG9jYWxlX3Nob3J0TW9udGhzW2QuZ2V0TW9udGgoKV07XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRNb250aChkKSB7XG4gICAgcmV0dXJuIGxvY2FsZV9tb250aHNbZC5nZXRNb250aCgpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFBlcmlvZChkKSB7XG4gICAgcmV0dXJuIGxvY2FsZV9wZXJpb2RzWysoZC5nZXRIb3VycygpID49IDEyKV07XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRRdWFydGVyKGQpIHtcbiAgICByZXR1cm4gMSArIH5+KGQuZ2V0TW9udGgoKSAvIDMpO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0VVRDU2hvcnRXZWVrZGF5KGQpIHtcbiAgICByZXR1cm4gbG9jYWxlX3Nob3J0V2Vla2RheXNbZC5nZXRVVENEYXkoKV07XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRVVENXZWVrZGF5KGQpIHtcbiAgICByZXR1cm4gbG9jYWxlX3dlZWtkYXlzW2QuZ2V0VVRDRGF5KCldO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0VVRDU2hvcnRNb250aChkKSB7XG4gICAgcmV0dXJuIGxvY2FsZV9zaG9ydE1vbnRoc1tkLmdldFVUQ01vbnRoKCldO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0VVRDTW9udGgoZCkge1xuICAgIHJldHVybiBsb2NhbGVfbW9udGhzW2QuZ2V0VVRDTW9udGgoKV07XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRVVENQZXJpb2QoZCkge1xuICAgIHJldHVybiBsb2NhbGVfcGVyaW9kc1srKGQuZ2V0VVRDSG91cnMoKSA+PSAxMildO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0VVRDUXVhcnRlcihkKSB7XG4gICAgcmV0dXJuIDEgKyB+fihkLmdldFVUQ01vbnRoKCkgLyAzKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZm9ybWF0OiBmdW5jdGlvbihzcGVjaWZpZXIpIHtcbiAgICAgIHZhciBmID0gbmV3Rm9ybWF0KHNwZWNpZmllciArPSBcIlwiLCBmb3JtYXRzKTtcbiAgICAgIGYudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsgcmV0dXJuIHNwZWNpZmllcjsgfTtcbiAgICAgIHJldHVybiBmO1xuICAgIH0sXG4gICAgcGFyc2U6IGZ1bmN0aW9uKHNwZWNpZmllcikge1xuICAgICAgdmFyIHAgPSBuZXdQYXJzZShzcGVjaWZpZXIgKz0gXCJcIiwgZmFsc2UpO1xuICAgICAgcC50b1N0cmluZyA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gc3BlY2lmaWVyOyB9O1xuICAgICAgcmV0dXJuIHA7XG4gICAgfSxcbiAgICB1dGNGb3JtYXQ6IGZ1bmN0aW9uKHNwZWNpZmllcikge1xuICAgICAgdmFyIGYgPSBuZXdGb3JtYXQoc3BlY2lmaWVyICs9IFwiXCIsIHV0Y0Zvcm1hdHMpO1xuICAgICAgZi50b1N0cmluZyA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gc3BlY2lmaWVyOyB9O1xuICAgICAgcmV0dXJuIGY7XG4gICAgfSxcbiAgICB1dGNQYXJzZTogZnVuY3Rpb24oc3BlY2lmaWVyKSB7XG4gICAgICB2YXIgcCA9IG5ld1BhcnNlKHNwZWNpZmllciArPSBcIlwiLCB0cnVlKTtcbiAgICAgIHAudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsgcmV0dXJuIHNwZWNpZmllcjsgfTtcbiAgICAgIHJldHVybiBwO1xuICAgIH1cbiAgfTtcbn1cblxudmFyIHBhZHMgPSB7XCItXCI6IFwiXCIsIFwiX1wiOiBcIiBcIiwgXCIwXCI6IFwiMFwifSxcbiAgICBudW1iZXJSZSA9IC9eXFxzKlxcZCsvLCAvLyBub3RlOiBpZ25vcmVzIG5leHQgZGlyZWN0aXZlXG4gICAgcGVyY2VudFJlID0gL14lLyxcbiAgICByZXF1b3RlUmUgPSAvW1xcXFxeJCorP3xbXFxdKCkue31dL2c7XG5cbmZ1bmN0aW9uIHBhZCh2YWx1ZSwgZmlsbCwgd2lkdGgpIHtcbiAgdmFyIHNpZ24gPSB2YWx1ZSA8IDAgPyBcIi1cIiA6IFwiXCIsXG4gICAgICBzdHJpbmcgPSAoc2lnbiA/IC12YWx1ZSA6IHZhbHVlKSArIFwiXCIsXG4gICAgICBsZW5ndGggPSBzdHJpbmcubGVuZ3RoO1xuICByZXR1cm4gc2lnbiArIChsZW5ndGggPCB3aWR0aCA/IG5ldyBBcnJheSh3aWR0aCAtIGxlbmd0aCArIDEpLmpvaW4oZmlsbCkgKyBzdHJpbmcgOiBzdHJpbmcpO1xufVxuXG5mdW5jdGlvbiByZXF1b3RlKHMpIHtcbiAgcmV0dXJuIHMucmVwbGFjZShyZXF1b3RlUmUsIFwiXFxcXCQmXCIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRSZShuYW1lcykge1xuICByZXR1cm4gbmV3IFJlZ0V4cChcIl4oPzpcIiArIG5hbWVzLm1hcChyZXF1b3RlKS5qb2luKFwifFwiKSArIFwiKVwiLCBcImlcIik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdExvb2t1cChuYW1lcykge1xuICB2YXIgbWFwID0ge30sIGkgPSAtMSwgbiA9IG5hbWVzLmxlbmd0aDtcbiAgd2hpbGUgKCsraSA8IG4pIG1hcFtuYW1lc1tpXS50b0xvd2VyQ2FzZSgpXSA9IGk7XG4gIHJldHVybiBtYXA7XG59XG5cbmZ1bmN0aW9uIHBhcnNlV2Vla2RheU51bWJlclN1bmRheShkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMSkpO1xuICByZXR1cm4gbiA/IChkLncgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZVdlZWtkYXlOdW1iZXJNb25kYXkoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDEpKTtcbiAgcmV0dXJuIG4gPyAoZC51ID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VXZWVrTnVtYmVyU3VuZGF5KGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAyKSk7XG4gIHJldHVybiBuID8gKGQuVSA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlV2Vla051bWJlcklTTyhkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMikpO1xuICByZXR1cm4gbiA/IChkLlYgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZVdlZWtOdW1iZXJNb25kYXkoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDIpKTtcbiAgcmV0dXJuIG4gPyAoZC5XID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VGdWxsWWVhcihkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgNCkpO1xuICByZXR1cm4gbiA/IChkLnkgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZVllYXIoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDIpKTtcbiAgcmV0dXJuIG4gPyAoZC55ID0gK25bMF0gKyAoK25bMF0gPiA2OCA/IDE5MDAgOiAyMDAwKSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZVpvbmUoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gL14oWil8KFsrLV1cXGRcXGQpKD86Oj8oXFxkXFxkKSk/Ly5leGVjKHN0cmluZy5zbGljZShpLCBpICsgNikpO1xuICByZXR1cm4gbiA/IChkLlogPSBuWzFdID8gMCA6IC0oblsyXSArIChuWzNdIHx8IFwiMDBcIikpLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlUXVhcnRlcihkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMSkpO1xuICByZXR1cm4gbiA/IChkLnEgPSBuWzBdICogMyAtIDMsIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VNb250aE51bWJlcihkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMikpO1xuICByZXR1cm4gbiA/IChkLm0gPSBuWzBdIC0gMSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZURheU9mTW9udGgoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDIpKTtcbiAgcmV0dXJuIG4gPyAoZC5kID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VEYXlPZlllYXIoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDMpKTtcbiAgcmV0dXJuIG4gPyAoZC5tID0gMCwgZC5kID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VIb3VyMjQoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDIpKTtcbiAgcmV0dXJuIG4gPyAoZC5IID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VNaW51dGVzKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAyKSk7XG4gIHJldHVybiBuID8gKGQuTSA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlU2Vjb25kcyhkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMikpO1xuICByZXR1cm4gbiA/IChkLlMgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZU1pbGxpc2Vjb25kcyhkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMykpO1xuICByZXR1cm4gbiA/IChkLkwgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZU1pY3Jvc2Vjb25kcyhkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgNikpO1xuICByZXR1cm4gbiA/IChkLkwgPSBNYXRoLmZsb29yKG5bMF0gLyAxMDAwKSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZUxpdGVyYWxQZXJjZW50KGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IHBlcmNlbnRSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMSkpO1xuICByZXR1cm4gbiA/IGkgKyBuWzBdLmxlbmd0aCA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZVVuaXhUaW1lc3RhbXAoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSkpO1xuICByZXR1cm4gbiA/IChkLlEgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZVVuaXhUaW1lc3RhbXBTZWNvbmRzKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGkpKTtcbiAgcmV0dXJuIG4gPyAoZC5zID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0RGF5T2ZNb250aChkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXREYXRlKCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRIb3VyMjQoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0SG91cnMoKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdEhvdXIxMihkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRIb3VycygpICUgMTIgfHwgMTIsIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXREYXlPZlllYXIoZCwgcCkge1xuICByZXR1cm4gcGFkKDEgKyB0aW1lRGF5LmNvdW50KHRpbWVZZWFyKGQpLCBkKSwgcCwgMyk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdE1pbGxpc2Vjb25kcyhkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRNaWxsaXNlY29uZHMoKSwgcCwgMyk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdE1pY3Jvc2Vjb25kcyhkLCBwKSB7XG4gIHJldHVybiBmb3JtYXRNaWxsaXNlY29uZHMoZCwgcCkgKyBcIjAwMFwiO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRNb250aE51bWJlcihkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRNb250aCgpICsgMSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdE1pbnV0ZXMoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0TWludXRlcygpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0U2Vjb25kcyhkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRTZWNvbmRzKCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRXZWVrZGF5TnVtYmVyTW9uZGF5KGQpIHtcbiAgdmFyIGRheSA9IGQuZ2V0RGF5KCk7XG4gIHJldHVybiBkYXkgPT09IDAgPyA3IDogZGF5O1xufVxuXG5mdW5jdGlvbiBmb3JtYXRXZWVrTnVtYmVyU3VuZGF5KGQsIHApIHtcbiAgcmV0dXJuIHBhZCh0aW1lU3VuZGF5LmNvdW50KHRpbWVZZWFyKGQpIC0gMSwgZCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBkSVNPKGQpIHtcbiAgdmFyIGRheSA9IGQuZ2V0RGF5KCk7XG4gIHJldHVybiAoZGF5ID49IDQgfHwgZGF5ID09PSAwKSA/IHRpbWVUaHVyc2RheShkKSA6IHRpbWVUaHVyc2RheS5jZWlsKGQpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRXZWVrTnVtYmVySVNPKGQsIHApIHtcbiAgZCA9IGRJU08oZCk7XG4gIHJldHVybiBwYWQodGltZVRodXJzZGF5LmNvdW50KHRpbWVZZWFyKGQpLCBkKSArICh0aW1lWWVhcihkKS5nZXREYXkoKSA9PT0gNCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRXZWVrZGF5TnVtYmVyU3VuZGF5KGQpIHtcbiAgcmV0dXJuIGQuZ2V0RGF5KCk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFdlZWtOdW1iZXJNb25kYXkoZCwgcCkge1xuICByZXR1cm4gcGFkKHRpbWVNb25kYXkuY291bnQodGltZVllYXIoZCkgLSAxLCBkKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFllYXIoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0RnVsbFllYXIoKSAlIDEwMCwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFllYXJJU08oZCwgcCkge1xuICBkID0gZElTTyhkKTtcbiAgcmV0dXJuIHBhZChkLmdldEZ1bGxZZWFyKCkgJSAxMDAsIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRGdWxsWWVhcihkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRGdWxsWWVhcigpICUgMTAwMDAsIHAsIDQpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRGdWxsWWVhcklTTyhkLCBwKSB7XG4gIHZhciBkYXkgPSBkLmdldERheSgpO1xuICBkID0gKGRheSA+PSA0IHx8IGRheSA9PT0gMCkgPyB0aW1lVGh1cnNkYXkoZCkgOiB0aW1lVGh1cnNkYXkuY2VpbChkKTtcbiAgcmV0dXJuIHBhZChkLmdldEZ1bGxZZWFyKCkgJSAxMDAwMCwgcCwgNCk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFpvbmUoZCkge1xuICB2YXIgeiA9IGQuZ2V0VGltZXpvbmVPZmZzZXQoKTtcbiAgcmV0dXJuICh6ID4gMCA/IFwiLVwiIDogKHogKj0gLTEsIFwiK1wiKSlcbiAgICAgICsgcGFkKHogLyA2MCB8IDAsIFwiMFwiLCAyKVxuICAgICAgKyBwYWQoeiAlIDYwLCBcIjBcIiwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ0RheU9mTW9udGgoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDRGF0ZSgpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDSG91cjI0KGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldFVUQ0hvdXJzKCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENIb3VyMTIoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDSG91cnMoKSAlIDEyIHx8IDEyLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDRGF5T2ZZZWFyKGQsIHApIHtcbiAgcmV0dXJuIHBhZCgxICsgdXRjRGF5LmNvdW50KHV0Y1llYXIoZCksIGQpLCBwLCAzKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDTWlsbGlzZWNvbmRzKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldFVUQ01pbGxpc2Vjb25kcygpLCBwLCAzKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDTWljcm9zZWNvbmRzKGQsIHApIHtcbiAgcmV0dXJuIGZvcm1hdFVUQ01pbGxpc2Vjb25kcyhkLCBwKSArIFwiMDAwXCI7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ01vbnRoTnVtYmVyKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldFVUQ01vbnRoKCkgKyAxLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDTWludXRlcyhkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRVVENNaW51dGVzKCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENTZWNvbmRzKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldFVUQ1NlY29uZHMoKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ1dlZWtkYXlOdW1iZXJNb25kYXkoZCkge1xuICB2YXIgZG93ID0gZC5nZXRVVENEYXkoKTtcbiAgcmV0dXJuIGRvdyA9PT0gMCA/IDcgOiBkb3c7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ1dlZWtOdW1iZXJTdW5kYXkoZCwgcCkge1xuICByZXR1cm4gcGFkKHV0Y1N1bmRheS5jb3VudCh1dGNZZWFyKGQpIC0gMSwgZCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBVVENkSVNPKGQpIHtcbiAgdmFyIGRheSA9IGQuZ2V0VVRDRGF5KCk7XG4gIHJldHVybiAoZGF5ID49IDQgfHwgZGF5ID09PSAwKSA/IHV0Y1RodXJzZGF5KGQpIDogdXRjVGh1cnNkYXkuY2VpbChkKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDV2Vla051bWJlcklTTyhkLCBwKSB7XG4gIGQgPSBVVENkSVNPKGQpO1xuICByZXR1cm4gcGFkKHV0Y1RodXJzZGF5LmNvdW50KHV0Y1llYXIoZCksIGQpICsgKHV0Y1llYXIoZCkuZ2V0VVRDRGF5KCkgPT09IDQpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDV2Vla2RheU51bWJlclN1bmRheShkKSB7XG4gIHJldHVybiBkLmdldFVUQ0RheSgpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENXZWVrTnVtYmVyTW9uZGF5KGQsIHApIHtcbiAgcmV0dXJuIHBhZCh1dGNNb25kYXkuY291bnQodXRjWWVhcihkKSAtIDEsIGQpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDWWVhcihkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRVVENGdWxsWWVhcigpICUgMTAwLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDWWVhcklTTyhkLCBwKSB7XG4gIGQgPSBVVENkSVNPKGQpO1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDRnVsbFllYXIoKSAlIDEwMCwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ0Z1bGxZZWFyKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldFVUQ0Z1bGxZZWFyKCkgJSAxMDAwMCwgcCwgNCk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ0Z1bGxZZWFySVNPKGQsIHApIHtcbiAgdmFyIGRheSA9IGQuZ2V0VVRDRGF5KCk7XG4gIGQgPSAoZGF5ID49IDQgfHwgZGF5ID09PSAwKSA/IHV0Y1RodXJzZGF5KGQpIDogdXRjVGh1cnNkYXkuY2VpbChkKTtcbiAgcmV0dXJuIHBhZChkLmdldFVUQ0Z1bGxZZWFyKCkgJSAxMDAwMCwgcCwgNCk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ1pvbmUoKSB7XG4gIHJldHVybiBcIiswMDAwXCI7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdExpdGVyYWxQZXJjZW50KCkge1xuICByZXR1cm4gXCIlXCI7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVuaXhUaW1lc3RhbXAoZCkge1xuICByZXR1cm4gK2Q7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVuaXhUaW1lc3RhbXBTZWNvbmRzKGQpIHtcbiAgcmV0dXJuIE1hdGguZmxvb3IoK2QgLyAxMDAwKTtcbn1cbiIsImltcG9ydCBpbnRlcnZhbCBmcm9tIFwiLi9pbnRlcnZhbC5qc1wiO1xuaW1wb3J0IHtkdXJhdGlvbkRheSwgZHVyYXRpb25NaW51dGV9IGZyb20gXCIuL2R1cmF0aW9uLmpzXCI7XG5cbnZhciBkYXkgPSBpbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XG4gIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG59LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIHN0ZXApO1xufSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICByZXR1cm4gKGVuZCAtIHN0YXJ0IC0gKGVuZC5nZXRUaW1lem9uZU9mZnNldCgpIC0gc3RhcnQuZ2V0VGltZXpvbmVPZmZzZXQoKSkgKiBkdXJhdGlvbk1pbnV0ZSkgLyBkdXJhdGlvbkRheTtcbn0sIGZ1bmN0aW9uKGRhdGUpIHtcbiAgcmV0dXJuIGRhdGUuZ2V0RGF0ZSgpIC0gMTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBkYXk7XG5leHBvcnQgdmFyIGRheXMgPSBkYXkucmFuZ2U7XG4iLCJleHBvcnQgdmFyIGR1cmF0aW9uU2Vjb25kID0gMWUzO1xuZXhwb3J0IHZhciBkdXJhdGlvbk1pbnV0ZSA9IDZlNDtcbmV4cG9ydCB2YXIgZHVyYXRpb25Ib3VyID0gMzZlNTtcbmV4cG9ydCB2YXIgZHVyYXRpb25EYXkgPSA4NjRlNTtcbmV4cG9ydCB2YXIgZHVyYXRpb25XZWVrID0gNjA0OGU1O1xuIiwiaW1wb3J0IGludGVydmFsIGZyb20gXCIuL2ludGVydmFsLmpzXCI7XG5pbXBvcnQge2R1cmF0aW9uSG91ciwgZHVyYXRpb25NaW51dGUsIGR1cmF0aW9uU2Vjb25kfSBmcm9tIFwiLi9kdXJhdGlvbi5qc1wiO1xuXG52YXIgaG91ciA9IGludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgZGF0ZS5zZXRUaW1lKGRhdGUgLSBkYXRlLmdldE1pbGxpc2Vjb25kcygpIC0gZGF0ZS5nZXRTZWNvbmRzKCkgKiBkdXJhdGlvblNlY29uZCAtIGRhdGUuZ2V0TWludXRlcygpICogZHVyYXRpb25NaW51dGUpO1xufSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICBkYXRlLnNldFRpbWUoK2RhdGUgKyBzdGVwICogZHVyYXRpb25Ib3VyKTtcbn0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgcmV0dXJuIChlbmQgLSBzdGFydCkgLyBkdXJhdGlvbkhvdXI7XG59LCBmdW5jdGlvbihkYXRlKSB7XG4gIHJldHVybiBkYXRlLmdldEhvdXJzKCk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgaG91cjtcbmV4cG9ydCB2YXIgaG91cnMgPSBob3VyLnJhbmdlO1xuIiwiZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyB0aW1lSW50ZXJ2YWxcbn0gZnJvbSBcIi4vaW50ZXJ2YWwuanNcIjtcblxuZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyB0aW1lTWlsbGlzZWNvbmQsXG4gIG1pbGxpc2Vjb25kcyBhcyB0aW1lTWlsbGlzZWNvbmRzLFxuICBkZWZhdWx0IGFzIHV0Y01pbGxpc2Vjb25kLFxuICBtaWxsaXNlY29uZHMgYXMgdXRjTWlsbGlzZWNvbmRzXG59IGZyb20gXCIuL21pbGxpc2Vjb25kLmpzXCI7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgdGltZVNlY29uZCxcbiAgc2Vjb25kcyBhcyB0aW1lU2Vjb25kcyxcbiAgZGVmYXVsdCBhcyB1dGNTZWNvbmQsXG4gIHNlY29uZHMgYXMgdXRjU2Vjb25kc1xufSBmcm9tIFwiLi9zZWNvbmQuanNcIjtcblxuZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyB0aW1lTWludXRlLFxuICBtaW51dGVzIGFzIHRpbWVNaW51dGVzXG59IGZyb20gXCIuL21pbnV0ZS5qc1wiO1xuXG5leHBvcnQge1xuICBkZWZhdWx0IGFzIHRpbWVIb3VyLFxuICBob3VycyBhcyB0aW1lSG91cnNcbn0gZnJvbSBcIi4vaG91ci5qc1wiO1xuXG5leHBvcnQge1xuICBkZWZhdWx0IGFzIHRpbWVEYXksXG4gIGRheXMgYXMgdGltZURheXNcbn0gZnJvbSBcIi4vZGF5LmpzXCI7XG5cbmV4cG9ydCB7XG4gIHN1bmRheSBhcyB0aW1lV2VlayxcbiAgc3VuZGF5cyBhcyB0aW1lV2Vla3MsXG4gIHN1bmRheSBhcyB0aW1lU3VuZGF5LFxuICBzdW5kYXlzIGFzIHRpbWVTdW5kYXlzLFxuICBtb25kYXkgYXMgdGltZU1vbmRheSxcbiAgbW9uZGF5cyBhcyB0aW1lTW9uZGF5cyxcbiAgdHVlc2RheSBhcyB0aW1lVHVlc2RheSxcbiAgdHVlc2RheXMgYXMgdGltZVR1ZXNkYXlzLFxuICB3ZWRuZXNkYXkgYXMgdGltZVdlZG5lc2RheSxcbiAgd2VkbmVzZGF5cyBhcyB0aW1lV2VkbmVzZGF5cyxcbiAgdGh1cnNkYXkgYXMgdGltZVRodXJzZGF5LFxuICB0aHVyc2RheXMgYXMgdGltZVRodXJzZGF5cyxcbiAgZnJpZGF5IGFzIHRpbWVGcmlkYXksXG4gIGZyaWRheXMgYXMgdGltZUZyaWRheXMsXG4gIHNhdHVyZGF5IGFzIHRpbWVTYXR1cmRheSxcbiAgc2F0dXJkYXlzIGFzIHRpbWVTYXR1cmRheXNcbn0gZnJvbSBcIi4vd2Vlay5qc1wiO1xuXG5leHBvcnQge1xuICBkZWZhdWx0IGFzIHRpbWVNb250aCxcbiAgbW9udGhzIGFzIHRpbWVNb250aHNcbn0gZnJvbSBcIi4vbW9udGguanNcIjtcblxuZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyB0aW1lWWVhcixcbiAgeWVhcnMgYXMgdGltZVllYXJzXG59IGZyb20gXCIuL3llYXIuanNcIjtcblxuZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyB1dGNNaW51dGUsXG4gIHV0Y01pbnV0ZXMgYXMgdXRjTWludXRlc1xufSBmcm9tIFwiLi91dGNNaW51dGUuanNcIjtcblxuZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyB1dGNIb3VyLFxuICB1dGNIb3VycyBhcyB1dGNIb3Vyc1xufSBmcm9tIFwiLi91dGNIb3VyLmpzXCI7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgdXRjRGF5LFxuICB1dGNEYXlzIGFzIHV0Y0RheXNcbn0gZnJvbSBcIi4vdXRjRGF5LmpzXCI7XG5cbmV4cG9ydCB7XG4gIHV0Y1N1bmRheSBhcyB1dGNXZWVrLFxuICB1dGNTdW5kYXlzIGFzIHV0Y1dlZWtzLFxuICB1dGNTdW5kYXkgYXMgdXRjU3VuZGF5LFxuICB1dGNTdW5kYXlzIGFzIHV0Y1N1bmRheXMsXG4gIHV0Y01vbmRheSBhcyB1dGNNb25kYXksXG4gIHV0Y01vbmRheXMgYXMgdXRjTW9uZGF5cyxcbiAgdXRjVHVlc2RheSBhcyB1dGNUdWVzZGF5LFxuICB1dGNUdWVzZGF5cyBhcyB1dGNUdWVzZGF5cyxcbiAgdXRjV2VkbmVzZGF5IGFzIHV0Y1dlZG5lc2RheSxcbiAgdXRjV2VkbmVzZGF5cyBhcyB1dGNXZWRuZXNkYXlzLFxuICB1dGNUaHVyc2RheSBhcyB1dGNUaHVyc2RheSxcbiAgdXRjVGh1cnNkYXlzIGFzIHV0Y1RodXJzZGF5cyxcbiAgdXRjRnJpZGF5IGFzIHV0Y0ZyaWRheSxcbiAgdXRjRnJpZGF5cyBhcyB1dGNGcmlkYXlzLFxuICB1dGNTYXR1cmRheSBhcyB1dGNTYXR1cmRheSxcbiAgdXRjU2F0dXJkYXlzIGFzIHV0Y1NhdHVyZGF5c1xufSBmcm9tIFwiLi91dGNXZWVrLmpzXCI7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgdXRjTW9udGgsXG4gIHV0Y01vbnRocyBhcyB1dGNNb250aHNcbn0gZnJvbSBcIi4vdXRjTW9udGguanNcIjtcblxuZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyB1dGNZZWFyLFxuICB1dGNZZWFycyBhcyB1dGNZZWFyc1xufSBmcm9tIFwiLi91dGNZZWFyLmpzXCI7XG4iLCJ2YXIgdDAgPSBuZXcgRGF0ZSxcbiAgICB0MSA9IG5ldyBEYXRlO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBuZXdJbnRlcnZhbChmbG9vcmksIG9mZnNldGksIGNvdW50LCBmaWVsZCkge1xuXG4gIGZ1bmN0aW9uIGludGVydmFsKGRhdGUpIHtcbiAgICByZXR1cm4gZmxvb3JpKGRhdGUgPSBhcmd1bWVudHMubGVuZ3RoID09PSAwID8gbmV3IERhdGUgOiBuZXcgRGF0ZSgrZGF0ZSkpLCBkYXRlO1xuICB9XG5cbiAgaW50ZXJ2YWwuZmxvb3IgPSBmdW5jdGlvbihkYXRlKSB7XG4gICAgcmV0dXJuIGZsb29yaShkYXRlID0gbmV3IERhdGUoK2RhdGUpKSwgZGF0ZTtcbiAgfTtcblxuICBpbnRlcnZhbC5jZWlsID0gZnVuY3Rpb24oZGF0ZSkge1xuICAgIHJldHVybiBmbG9vcmkoZGF0ZSA9IG5ldyBEYXRlKGRhdGUgLSAxKSksIG9mZnNldGkoZGF0ZSwgMSksIGZsb29yaShkYXRlKSwgZGF0ZTtcbiAgfTtcblxuICBpbnRlcnZhbC5yb3VuZCA9IGZ1bmN0aW9uKGRhdGUpIHtcbiAgICB2YXIgZDAgPSBpbnRlcnZhbChkYXRlKSxcbiAgICAgICAgZDEgPSBpbnRlcnZhbC5jZWlsKGRhdGUpO1xuICAgIHJldHVybiBkYXRlIC0gZDAgPCBkMSAtIGRhdGUgPyBkMCA6IGQxO1xuICB9O1xuXG4gIGludGVydmFsLm9mZnNldCA9IGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgICByZXR1cm4gb2Zmc2V0aShkYXRlID0gbmV3IERhdGUoK2RhdGUpLCBzdGVwID09IG51bGwgPyAxIDogTWF0aC5mbG9vcihzdGVwKSksIGRhdGU7XG4gIH07XG5cbiAgaW50ZXJ2YWwucmFuZ2UgPSBmdW5jdGlvbihzdGFydCwgc3RvcCwgc3RlcCkge1xuICAgIHZhciByYW5nZSA9IFtdLCBwcmV2aW91cztcbiAgICBzdGFydCA9IGludGVydmFsLmNlaWwoc3RhcnQpO1xuICAgIHN0ZXAgPSBzdGVwID09IG51bGwgPyAxIDogTWF0aC5mbG9vcihzdGVwKTtcbiAgICBpZiAoIShzdGFydCA8IHN0b3ApIHx8ICEoc3RlcCA+IDApKSByZXR1cm4gcmFuZ2U7IC8vIGFsc28gaGFuZGxlcyBJbnZhbGlkIERhdGVcbiAgICBkbyByYW5nZS5wdXNoKHByZXZpb3VzID0gbmV3IERhdGUoK3N0YXJ0KSksIG9mZnNldGkoc3RhcnQsIHN0ZXApLCBmbG9vcmkoc3RhcnQpO1xuICAgIHdoaWxlIChwcmV2aW91cyA8IHN0YXJ0ICYmIHN0YXJ0IDwgc3RvcCk7XG4gICAgcmV0dXJuIHJhbmdlO1xuICB9O1xuXG4gIGludGVydmFsLmZpbHRlciA9IGZ1bmN0aW9uKHRlc3QpIHtcbiAgICByZXR1cm4gbmV3SW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICAgICAgaWYgKGRhdGUgPj0gZGF0ZSkgd2hpbGUgKGZsb29yaShkYXRlKSwgIXRlc3QoZGF0ZSkpIGRhdGUuc2V0VGltZShkYXRlIC0gMSk7XG4gICAgfSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICAgICAgaWYgKGRhdGUgPj0gZGF0ZSkge1xuICAgICAgICBpZiAoc3RlcCA8IDApIHdoaWxlICgrK3N0ZXAgPD0gMCkge1xuICAgICAgICAgIHdoaWxlIChvZmZzZXRpKGRhdGUsIC0xKSwgIXRlc3QoZGF0ZSkpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHlcbiAgICAgICAgfSBlbHNlIHdoaWxlICgtLXN0ZXAgPj0gMCkge1xuICAgICAgICAgIHdoaWxlIChvZmZzZXRpKGRhdGUsICsxKSwgIXRlc3QoZGF0ZSkpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIGlmIChjb3VudCkge1xuICAgIGludGVydmFsLmNvdW50ID0gZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICAgICAgdDAuc2V0VGltZSgrc3RhcnQpLCB0MS5zZXRUaW1lKCtlbmQpO1xuICAgICAgZmxvb3JpKHQwKSwgZmxvb3JpKHQxKTtcbiAgICAgIHJldHVybiBNYXRoLmZsb29yKGNvdW50KHQwLCB0MSkpO1xuICAgIH07XG5cbiAgICBpbnRlcnZhbC5ldmVyeSA9IGZ1bmN0aW9uKHN0ZXApIHtcbiAgICAgIHN0ZXAgPSBNYXRoLmZsb29yKHN0ZXApO1xuICAgICAgcmV0dXJuICFpc0Zpbml0ZShzdGVwKSB8fCAhKHN0ZXAgPiAwKSA/IG51bGxcbiAgICAgICAgICA6ICEoc3RlcCA+IDEpID8gaW50ZXJ2YWxcbiAgICAgICAgICA6IGludGVydmFsLmZpbHRlcihmaWVsZFxuICAgICAgICAgICAgICA/IGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGZpZWxkKGQpICUgc3RlcCA9PT0gMDsgfVxuICAgICAgICAgICAgICA6IGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGludGVydmFsLmNvdW50KDAsIGQpICUgc3RlcCA9PT0gMDsgfSk7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBpbnRlcnZhbDtcbn1cbiIsImltcG9ydCBpbnRlcnZhbCBmcm9tIFwiLi9pbnRlcnZhbC5qc1wiO1xuXG52YXIgbWlsbGlzZWNvbmQgPSBpbnRlcnZhbChmdW5jdGlvbigpIHtcbiAgLy8gbm9vcFxufSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICBkYXRlLnNldFRpbWUoK2RhdGUgKyBzdGVwKTtcbn0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgcmV0dXJuIGVuZCAtIHN0YXJ0O1xufSk7XG5cbi8vIEFuIG9wdGltaXplZCBpbXBsZW1lbnRhdGlvbiBmb3IgdGhpcyBzaW1wbGUgY2FzZS5cbm1pbGxpc2Vjb25kLmV2ZXJ5ID0gZnVuY3Rpb24oaykge1xuICBrID0gTWF0aC5mbG9vcihrKTtcbiAgaWYgKCFpc0Zpbml0ZShrKSB8fCAhKGsgPiAwKSkgcmV0dXJuIG51bGw7XG4gIGlmICghKGsgPiAxKSkgcmV0dXJuIG1pbGxpc2Vjb25kO1xuICByZXR1cm4gaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICAgIGRhdGUuc2V0VGltZShNYXRoLmZsb29yKGRhdGUgLyBrKSAqIGspO1xuICB9LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gICAgZGF0ZS5zZXRUaW1lKCtkYXRlICsgc3RlcCAqIGspO1xuICB9LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gICAgcmV0dXJuIChlbmQgLSBzdGFydCkgLyBrO1xuICB9KTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IG1pbGxpc2Vjb25kO1xuZXhwb3J0IHZhciBtaWxsaXNlY29uZHMgPSBtaWxsaXNlY29uZC5yYW5nZTtcbiIsImltcG9ydCBpbnRlcnZhbCBmcm9tIFwiLi9pbnRlcnZhbC5qc1wiO1xuaW1wb3J0IHtkdXJhdGlvbk1pbnV0ZSwgZHVyYXRpb25TZWNvbmR9IGZyb20gXCIuL2R1cmF0aW9uLmpzXCI7XG5cbnZhciBtaW51dGUgPSBpbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XG4gIGRhdGUuc2V0VGltZShkYXRlIC0gZGF0ZS5nZXRNaWxsaXNlY29uZHMoKSAtIGRhdGUuZ2V0U2Vjb25kcygpICogZHVyYXRpb25TZWNvbmQpO1xufSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICBkYXRlLnNldFRpbWUoK2RhdGUgKyBzdGVwICogZHVyYXRpb25NaW51dGUpO1xufSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICByZXR1cm4gKGVuZCAtIHN0YXJ0KSAvIGR1cmF0aW9uTWludXRlO1xufSwgZnVuY3Rpb24oZGF0ZSkge1xuICByZXR1cm4gZGF0ZS5nZXRNaW51dGVzKCk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgbWludXRlO1xuZXhwb3J0IHZhciBtaW51dGVzID0gbWludXRlLnJhbmdlO1xuIiwiaW1wb3J0IGludGVydmFsIGZyb20gXCIuL2ludGVydmFsLmpzXCI7XG5cbnZhciBtb250aCA9IGludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgZGF0ZS5zZXREYXRlKDEpO1xuICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xufSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICBkYXRlLnNldE1vbnRoKGRhdGUuZ2V0TW9udGgoKSArIHN0ZXApO1xufSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICByZXR1cm4gZW5kLmdldE1vbnRoKCkgLSBzdGFydC5nZXRNb250aCgpICsgKGVuZC5nZXRGdWxsWWVhcigpIC0gc3RhcnQuZ2V0RnVsbFllYXIoKSkgKiAxMjtcbn0sIGZ1bmN0aW9uKGRhdGUpIHtcbiAgcmV0dXJuIGRhdGUuZ2V0TW9udGgoKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBtb250aDtcbmV4cG9ydCB2YXIgbW9udGhzID0gbW9udGgucmFuZ2U7XG4iLCJpbXBvcnQgaW50ZXJ2YWwgZnJvbSBcIi4vaW50ZXJ2YWwuanNcIjtcbmltcG9ydCB7ZHVyYXRpb25TZWNvbmR9IGZyb20gXCIuL2R1cmF0aW9uLmpzXCI7XG5cbnZhciBzZWNvbmQgPSBpbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XG4gIGRhdGUuc2V0VGltZShkYXRlIC0gZGF0ZS5nZXRNaWxsaXNlY29uZHMoKSk7XG59LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gIGRhdGUuc2V0VGltZSgrZGF0ZSArIHN0ZXAgKiBkdXJhdGlvblNlY29uZCk7XG59LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gIHJldHVybiAoZW5kIC0gc3RhcnQpIC8gZHVyYXRpb25TZWNvbmQ7XG59LCBmdW5jdGlvbihkYXRlKSB7XG4gIHJldHVybiBkYXRlLmdldFVUQ1NlY29uZHMoKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBzZWNvbmQ7XG5leHBvcnQgdmFyIHNlY29uZHMgPSBzZWNvbmQucmFuZ2U7XG4iLCJpbXBvcnQgaW50ZXJ2YWwgZnJvbSBcIi4vaW50ZXJ2YWwuanNcIjtcbmltcG9ydCB7ZHVyYXRpb25EYXl9IGZyb20gXCIuL2R1cmF0aW9uLmpzXCI7XG5cbnZhciB1dGNEYXkgPSBpbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XG4gIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG59LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gIGRhdGUuc2V0VVRDRGF0ZShkYXRlLmdldFVUQ0RhdGUoKSArIHN0ZXApO1xufSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICByZXR1cm4gKGVuZCAtIHN0YXJ0KSAvIGR1cmF0aW9uRGF5O1xufSwgZnVuY3Rpb24oZGF0ZSkge1xuICByZXR1cm4gZGF0ZS5nZXRVVENEYXRlKCkgLSAxO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IHV0Y0RheTtcbmV4cG9ydCB2YXIgdXRjRGF5cyA9IHV0Y0RheS5yYW5nZTtcbiIsImltcG9ydCBpbnRlcnZhbCBmcm9tIFwiLi9pbnRlcnZhbC5qc1wiO1xuaW1wb3J0IHtkdXJhdGlvbkhvdXJ9IGZyb20gXCIuL2R1cmF0aW9uLmpzXCI7XG5cbnZhciB1dGNIb3VyID0gaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICBkYXRlLnNldFVUQ01pbnV0ZXMoMCwgMCwgMCk7XG59LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gIGRhdGUuc2V0VGltZSgrZGF0ZSArIHN0ZXAgKiBkdXJhdGlvbkhvdXIpO1xufSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICByZXR1cm4gKGVuZCAtIHN0YXJ0KSAvIGR1cmF0aW9uSG91cjtcbn0sIGZ1bmN0aW9uKGRhdGUpIHtcbiAgcmV0dXJuIGRhdGUuZ2V0VVRDSG91cnMoKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCB1dGNIb3VyO1xuZXhwb3J0IHZhciB1dGNIb3VycyA9IHV0Y0hvdXIucmFuZ2U7XG4iLCJpbXBvcnQgaW50ZXJ2YWwgZnJvbSBcIi4vaW50ZXJ2YWwuanNcIjtcbmltcG9ydCB7ZHVyYXRpb25NaW51dGV9IGZyb20gXCIuL2R1cmF0aW9uLmpzXCI7XG5cbnZhciB1dGNNaW51dGUgPSBpbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XG4gIGRhdGUuc2V0VVRDU2Vjb25kcygwLCAwKTtcbn0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgZGF0ZS5zZXRUaW1lKCtkYXRlICsgc3RlcCAqIGR1cmF0aW9uTWludXRlKTtcbn0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgcmV0dXJuIChlbmQgLSBzdGFydCkgLyBkdXJhdGlvbk1pbnV0ZTtcbn0sIGZ1bmN0aW9uKGRhdGUpIHtcbiAgcmV0dXJuIGRhdGUuZ2V0VVRDTWludXRlcygpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IHV0Y01pbnV0ZTtcbmV4cG9ydCB2YXIgdXRjTWludXRlcyA9IHV0Y01pbnV0ZS5yYW5nZTtcbiIsImltcG9ydCBpbnRlcnZhbCBmcm9tIFwiLi9pbnRlcnZhbC5qc1wiO1xuXG52YXIgdXRjTW9udGggPSBpbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XG4gIGRhdGUuc2V0VVRDRGF0ZSgxKTtcbiAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbn0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgZGF0ZS5zZXRVVENNb250aChkYXRlLmdldFVUQ01vbnRoKCkgKyBzdGVwKTtcbn0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgcmV0dXJuIGVuZC5nZXRVVENNb250aCgpIC0gc3RhcnQuZ2V0VVRDTW9udGgoKSArIChlbmQuZ2V0VVRDRnVsbFllYXIoKSAtIHN0YXJ0LmdldFVUQ0Z1bGxZZWFyKCkpICogMTI7XG59LCBmdW5jdGlvbihkYXRlKSB7XG4gIHJldHVybiBkYXRlLmdldFVUQ01vbnRoKCk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgdXRjTW9udGg7XG5leHBvcnQgdmFyIHV0Y01vbnRocyA9IHV0Y01vbnRoLnJhbmdlO1xuIiwiaW1wb3J0IGludGVydmFsIGZyb20gXCIuL2ludGVydmFsLmpzXCI7XG5pbXBvcnQge2R1cmF0aW9uV2Vla30gZnJvbSBcIi4vZHVyYXRpb24uanNcIjtcblxuZnVuY3Rpb24gdXRjV2Vla2RheShpKSB7XG4gIHJldHVybiBpbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XG4gICAgZGF0ZS5zZXRVVENEYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpIC0gKGRhdGUuZ2V0VVRDRGF5KCkgKyA3IC0gaSkgJSA3KTtcbiAgICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB9LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gICAgZGF0ZS5zZXRVVENEYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpICsgc3RlcCAqIDcpO1xuICB9LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gICAgcmV0dXJuIChlbmQgLSBzdGFydCkgLyBkdXJhdGlvbldlZWs7XG4gIH0pO1xufVxuXG5leHBvcnQgdmFyIHV0Y1N1bmRheSA9IHV0Y1dlZWtkYXkoMCk7XG5leHBvcnQgdmFyIHV0Y01vbmRheSA9IHV0Y1dlZWtkYXkoMSk7XG5leHBvcnQgdmFyIHV0Y1R1ZXNkYXkgPSB1dGNXZWVrZGF5KDIpO1xuZXhwb3J0IHZhciB1dGNXZWRuZXNkYXkgPSB1dGNXZWVrZGF5KDMpO1xuZXhwb3J0IHZhciB1dGNUaHVyc2RheSA9IHV0Y1dlZWtkYXkoNCk7XG5leHBvcnQgdmFyIHV0Y0ZyaWRheSA9IHV0Y1dlZWtkYXkoNSk7XG5leHBvcnQgdmFyIHV0Y1NhdHVyZGF5ID0gdXRjV2Vla2RheSg2KTtcblxuZXhwb3J0IHZhciB1dGNTdW5kYXlzID0gdXRjU3VuZGF5LnJhbmdlO1xuZXhwb3J0IHZhciB1dGNNb25kYXlzID0gdXRjTW9uZGF5LnJhbmdlO1xuZXhwb3J0IHZhciB1dGNUdWVzZGF5cyA9IHV0Y1R1ZXNkYXkucmFuZ2U7XG5leHBvcnQgdmFyIHV0Y1dlZG5lc2RheXMgPSB1dGNXZWRuZXNkYXkucmFuZ2U7XG5leHBvcnQgdmFyIHV0Y1RodXJzZGF5cyA9IHV0Y1RodXJzZGF5LnJhbmdlO1xuZXhwb3J0IHZhciB1dGNGcmlkYXlzID0gdXRjRnJpZGF5LnJhbmdlO1xuZXhwb3J0IHZhciB1dGNTYXR1cmRheXMgPSB1dGNTYXR1cmRheS5yYW5nZTtcbiIsImltcG9ydCBpbnRlcnZhbCBmcm9tIFwiLi9pbnRlcnZhbC5qc1wiO1xuXG52YXIgdXRjWWVhciA9IGludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgZGF0ZS5zZXRVVENNb250aCgwLCAxKTtcbiAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbn0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgZGF0ZS5zZXRVVENGdWxsWWVhcihkYXRlLmdldFVUQ0Z1bGxZZWFyKCkgKyBzdGVwKTtcbn0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgcmV0dXJuIGVuZC5nZXRVVENGdWxsWWVhcigpIC0gc3RhcnQuZ2V0VVRDRnVsbFllYXIoKTtcbn0sIGZ1bmN0aW9uKGRhdGUpIHtcbiAgcmV0dXJuIGRhdGUuZ2V0VVRDRnVsbFllYXIoKTtcbn0pO1xuXG4vLyBBbiBvcHRpbWl6ZWQgaW1wbGVtZW50YXRpb24gZm9yIHRoaXMgc2ltcGxlIGNhc2UuXG51dGNZZWFyLmV2ZXJ5ID0gZnVuY3Rpb24oaykge1xuICByZXR1cm4gIWlzRmluaXRlKGsgPSBNYXRoLmZsb29yKGspKSB8fCAhKGsgPiAwKSA/IG51bGwgOiBpbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XG4gICAgZGF0ZS5zZXRVVENGdWxsWWVhcihNYXRoLmZsb29yKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSAvIGspICogayk7XG4gICAgZGF0ZS5zZXRVVENNb250aCgwLCAxKTtcbiAgICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB9LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gICAgZGF0ZS5zZXRVVENGdWxsWWVhcihkYXRlLmdldFVUQ0Z1bGxZZWFyKCkgKyBzdGVwICogayk7XG4gIH0pO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgdXRjWWVhcjtcbmV4cG9ydCB2YXIgdXRjWWVhcnMgPSB1dGNZZWFyLnJhbmdlO1xuIiwiaW1wb3J0IGludGVydmFsIGZyb20gXCIuL2ludGVydmFsLmpzXCI7XG5pbXBvcnQge2R1cmF0aW9uTWludXRlLCBkdXJhdGlvbldlZWt9IGZyb20gXCIuL2R1cmF0aW9uLmpzXCI7XG5cbmZ1bmN0aW9uIHdlZWtkYXkoaSkge1xuICByZXR1cm4gaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSAtIChkYXRlLmdldERheSgpICsgNyAtIGkpICUgNyk7XG4gICAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgfSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIHN0ZXAgKiA3KTtcbiAgfSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICAgIHJldHVybiAoZW5kIC0gc3RhcnQgLSAoZW5kLmdldFRpbWV6b25lT2Zmc2V0KCkgLSBzdGFydC5nZXRUaW1lem9uZU9mZnNldCgpKSAqIGR1cmF0aW9uTWludXRlKSAvIGR1cmF0aW9uV2VlaztcbiAgfSk7XG59XG5cbmV4cG9ydCB2YXIgc3VuZGF5ID0gd2Vla2RheSgwKTtcbmV4cG9ydCB2YXIgbW9uZGF5ID0gd2Vla2RheSgxKTtcbmV4cG9ydCB2YXIgdHVlc2RheSA9IHdlZWtkYXkoMik7XG5leHBvcnQgdmFyIHdlZG5lc2RheSA9IHdlZWtkYXkoMyk7XG5leHBvcnQgdmFyIHRodXJzZGF5ID0gd2Vla2RheSg0KTtcbmV4cG9ydCB2YXIgZnJpZGF5ID0gd2Vla2RheSg1KTtcbmV4cG9ydCB2YXIgc2F0dXJkYXkgPSB3ZWVrZGF5KDYpO1xuXG5leHBvcnQgdmFyIHN1bmRheXMgPSBzdW5kYXkucmFuZ2U7XG5leHBvcnQgdmFyIG1vbmRheXMgPSBtb25kYXkucmFuZ2U7XG5leHBvcnQgdmFyIHR1ZXNkYXlzID0gdHVlc2RheS5yYW5nZTtcbmV4cG9ydCB2YXIgd2VkbmVzZGF5cyA9IHdlZG5lc2RheS5yYW5nZTtcbmV4cG9ydCB2YXIgdGh1cnNkYXlzID0gdGh1cnNkYXkucmFuZ2U7XG5leHBvcnQgdmFyIGZyaWRheXMgPSBmcmlkYXkucmFuZ2U7XG5leHBvcnQgdmFyIHNhdHVyZGF5cyA9IHNhdHVyZGF5LnJhbmdlO1xuIiwiaW1wb3J0IGludGVydmFsIGZyb20gXCIuL2ludGVydmFsLmpzXCI7XG5cbnZhciB5ZWFyID0gaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICBkYXRlLnNldE1vbnRoKDAsIDEpO1xuICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xufSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICBkYXRlLnNldEZ1bGxZZWFyKGRhdGUuZ2V0RnVsbFllYXIoKSArIHN0ZXApO1xufSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICByZXR1cm4gZW5kLmdldEZ1bGxZZWFyKCkgLSBzdGFydC5nZXRGdWxsWWVhcigpO1xufSwgZnVuY3Rpb24oZGF0ZSkge1xuICByZXR1cm4gZGF0ZS5nZXRGdWxsWWVhcigpO1xufSk7XG5cbi8vIEFuIG9wdGltaXplZCBpbXBsZW1lbnRhdGlvbiBmb3IgdGhpcyBzaW1wbGUgY2FzZS5cbnllYXIuZXZlcnkgPSBmdW5jdGlvbihrKSB7XG4gIHJldHVybiAhaXNGaW5pdGUoayA9IE1hdGguZmxvb3IoaykpIHx8ICEoayA+IDApID8gbnVsbCA6IGludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgICBkYXRlLnNldEZ1bGxZZWFyKE1hdGguZmxvb3IoZGF0ZS5nZXRGdWxsWWVhcigpIC8gaykgKiBrKTtcbiAgICBkYXRlLnNldE1vbnRoKDAsIDEpO1xuICAgIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gIH0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgICBkYXRlLnNldEZ1bGxZZWFyKGRhdGUuZ2V0RnVsbFllYXIoKSArIHN0ZXAgKiBrKTtcbiAgfSk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCB5ZWFyO1xuZXhwb3J0IHZhciB5ZWFycyA9IHllYXIucmFuZ2U7XG4iLCJleHBvcnQge1xuICBub3csXG4gIHRpbWVyLFxuICB0aW1lckZsdXNoXG59IGZyb20gXCIuL3RpbWVyLmpzXCI7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgdGltZW91dFxufSBmcm9tIFwiLi90aW1lb3V0LmpzXCI7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgaW50ZXJ2YWxcbn0gZnJvbSBcIi4vaW50ZXJ2YWwuanNcIjtcbiIsImltcG9ydCB7VGltZXIsIG5vd30gZnJvbSBcIi4vdGltZXIuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY2FsbGJhY2ssIGRlbGF5LCB0aW1lKSB7XG4gIHZhciB0ID0gbmV3IFRpbWVyLCB0b3RhbCA9IGRlbGF5O1xuICBpZiAoZGVsYXkgPT0gbnVsbCkgcmV0dXJuIHQucmVzdGFydChjYWxsYmFjaywgZGVsYXksIHRpbWUpLCB0O1xuICBkZWxheSA9ICtkZWxheSwgdGltZSA9IHRpbWUgPT0gbnVsbCA/IG5vdygpIDogK3RpbWU7XG4gIHQucmVzdGFydChmdW5jdGlvbiB0aWNrKGVsYXBzZWQpIHtcbiAgICBlbGFwc2VkICs9IHRvdGFsO1xuICAgIHQucmVzdGFydCh0aWNrLCB0b3RhbCArPSBkZWxheSwgdGltZSk7XG4gICAgY2FsbGJhY2soZWxhcHNlZCk7XG4gIH0sIGRlbGF5LCB0aW1lKTtcbiAgcmV0dXJuIHQ7XG59XG4iLCJpbXBvcnQge1RpbWVyfSBmcm9tIFwiLi90aW1lci5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjYWxsYmFjaywgZGVsYXksIHRpbWUpIHtcbiAgdmFyIHQgPSBuZXcgVGltZXI7XG4gIGRlbGF5ID0gZGVsYXkgPT0gbnVsbCA/IDAgOiArZGVsYXk7XG4gIHQucmVzdGFydChmdW5jdGlvbihlbGFwc2VkKSB7XG4gICAgdC5zdG9wKCk7XG4gICAgY2FsbGJhY2soZWxhcHNlZCArIGRlbGF5KTtcbiAgfSwgZGVsYXksIHRpbWUpO1xuICByZXR1cm4gdDtcbn1cbiIsInZhciBmcmFtZSA9IDAsIC8vIGlzIGFuIGFuaW1hdGlvbiBmcmFtZSBwZW5kaW5nP1xuICAgIHRpbWVvdXQgPSAwLCAvLyBpcyBhIHRpbWVvdXQgcGVuZGluZz9cbiAgICBpbnRlcnZhbCA9IDAsIC8vIGFyZSBhbnkgdGltZXJzIGFjdGl2ZT9cbiAgICBwb2tlRGVsYXkgPSAxMDAwLCAvLyBob3cgZnJlcXVlbnRseSB3ZSBjaGVjayBmb3IgY2xvY2sgc2tld1xuICAgIHRhc2tIZWFkLFxuICAgIHRhc2tUYWlsLFxuICAgIGNsb2NrTGFzdCA9IDAsXG4gICAgY2xvY2tOb3cgPSAwLFxuICAgIGNsb2NrU2tldyA9IDAsXG4gICAgY2xvY2sgPSB0eXBlb2YgcGVyZm9ybWFuY2UgPT09IFwib2JqZWN0XCIgJiYgcGVyZm9ybWFuY2Uubm93ID8gcGVyZm9ybWFuY2UgOiBEYXRlLFxuICAgIHNldEZyYW1lID0gdHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIiAmJiB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lID8gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdykgOiBmdW5jdGlvbihmKSB7IHNldFRpbWVvdXQoZiwgMTcpOyB9O1xuXG5leHBvcnQgZnVuY3Rpb24gbm93KCkge1xuICByZXR1cm4gY2xvY2tOb3cgfHwgKHNldEZyYW1lKGNsZWFyTm93KSwgY2xvY2tOb3cgPSBjbG9jay5ub3coKSArIGNsb2NrU2tldyk7XG59XG5cbmZ1bmN0aW9uIGNsZWFyTm93KCkge1xuICBjbG9ja05vdyA9IDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBUaW1lcigpIHtcbiAgdGhpcy5fY2FsbCA9XG4gIHRoaXMuX3RpbWUgPVxuICB0aGlzLl9uZXh0ID0gbnVsbDtcbn1cblxuVGltZXIucHJvdG90eXBlID0gdGltZXIucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogVGltZXIsXG4gIHJlc3RhcnQ6IGZ1bmN0aW9uKGNhbGxiYWNrLCBkZWxheSwgdGltZSkge1xuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcImNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uXCIpO1xuICAgIHRpbWUgPSAodGltZSA9PSBudWxsID8gbm93KCkgOiArdGltZSkgKyAoZGVsYXkgPT0gbnVsbCA/IDAgOiArZGVsYXkpO1xuICAgIGlmICghdGhpcy5fbmV4dCAmJiB0YXNrVGFpbCAhPT0gdGhpcykge1xuICAgICAgaWYgKHRhc2tUYWlsKSB0YXNrVGFpbC5fbmV4dCA9IHRoaXM7XG4gICAgICBlbHNlIHRhc2tIZWFkID0gdGhpcztcbiAgICAgIHRhc2tUYWlsID0gdGhpcztcbiAgICB9XG4gICAgdGhpcy5fY2FsbCA9IGNhbGxiYWNrO1xuICAgIHRoaXMuX3RpbWUgPSB0aW1lO1xuICAgIHNsZWVwKCk7XG4gIH0sXG4gIHN0b3A6IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLl9jYWxsKSB7XG4gICAgICB0aGlzLl9jYWxsID0gbnVsbDtcbiAgICAgIHRoaXMuX3RpbWUgPSBJbmZpbml0eTtcbiAgICAgIHNsZWVwKCk7XG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gdGltZXIoY2FsbGJhY2ssIGRlbGF5LCB0aW1lKSB7XG4gIHZhciB0ID0gbmV3IFRpbWVyO1xuICB0LnJlc3RhcnQoY2FsbGJhY2ssIGRlbGF5LCB0aW1lKTtcbiAgcmV0dXJuIHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0aW1lckZsdXNoKCkge1xuICBub3coKTsgLy8gR2V0IHRoZSBjdXJyZW50IHRpbWUsIGlmIG5vdCBhbHJlYWR5IHNldC5cbiAgKytmcmFtZTsgLy8gUHJldGVuZCB3ZeKAmXZlIHNldCBhbiBhbGFybSwgaWYgd2UgaGF2ZW7igJl0IGFscmVhZHkuXG4gIHZhciB0ID0gdGFza0hlYWQsIGU7XG4gIHdoaWxlICh0KSB7XG4gICAgaWYgKChlID0gY2xvY2tOb3cgLSB0Ll90aW1lKSA+PSAwKSB0Ll9jYWxsLmNhbGwobnVsbCwgZSk7XG4gICAgdCA9IHQuX25leHQ7XG4gIH1cbiAgLS1mcmFtZTtcbn1cblxuZnVuY3Rpb24gd2FrZSgpIHtcbiAgY2xvY2tOb3cgPSAoY2xvY2tMYXN0ID0gY2xvY2subm93KCkpICsgY2xvY2tTa2V3O1xuICBmcmFtZSA9IHRpbWVvdXQgPSAwO1xuICB0cnkge1xuICAgIHRpbWVyRmx1c2goKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBmcmFtZSA9IDA7XG4gICAgbmFwKCk7XG4gICAgY2xvY2tOb3cgPSAwO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBva2UoKSB7XG4gIHZhciBub3cgPSBjbG9jay5ub3coKSwgZGVsYXkgPSBub3cgLSBjbG9ja0xhc3Q7XG4gIGlmIChkZWxheSA+IHBva2VEZWxheSkgY2xvY2tTa2V3IC09IGRlbGF5LCBjbG9ja0xhc3QgPSBub3c7XG59XG5cbmZ1bmN0aW9uIG5hcCgpIHtcbiAgdmFyIHQwLCB0MSA9IHRhc2tIZWFkLCB0MiwgdGltZSA9IEluZmluaXR5O1xuICB3aGlsZSAodDEpIHtcbiAgICBpZiAodDEuX2NhbGwpIHtcbiAgICAgIGlmICh0aW1lID4gdDEuX3RpbWUpIHRpbWUgPSB0MS5fdGltZTtcbiAgICAgIHQwID0gdDEsIHQxID0gdDEuX25leHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHQyID0gdDEuX25leHQsIHQxLl9uZXh0ID0gbnVsbDtcbiAgICAgIHQxID0gdDAgPyB0MC5fbmV4dCA9IHQyIDogdGFza0hlYWQgPSB0MjtcbiAgICB9XG4gIH1cbiAgdGFza1RhaWwgPSB0MDtcbiAgc2xlZXAodGltZSk7XG59XG5cbmZ1bmN0aW9uIHNsZWVwKHRpbWUpIHtcbiAgaWYgKGZyYW1lKSByZXR1cm47IC8vIFNvb25lc3QgYWxhcm0gYWxyZWFkeSBzZXQsIG9yIHdpbGwgYmUuXG4gIGlmICh0aW1lb3V0KSB0aW1lb3V0ID0gY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICB2YXIgZGVsYXkgPSB0aW1lIC0gY2xvY2tOb3c7IC8vIFN0cmljdGx5IGxlc3MgdGhhbiBpZiB3ZSByZWNvbXB1dGVkIGNsb2NrTm93LlxuICBpZiAoZGVsYXkgPiAyNCkge1xuICAgIGlmICh0aW1lIDwgSW5maW5pdHkpIHRpbWVvdXQgPSBzZXRUaW1lb3V0KHdha2UsIHRpbWUgLSBjbG9jay5ub3coKSAtIGNsb2NrU2tldyk7XG4gICAgaWYgKGludGVydmFsKSBpbnRlcnZhbCA9IGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpO1xuICB9IGVsc2Uge1xuICAgIGlmICghaW50ZXJ2YWwpIGNsb2NrTGFzdCA9IGNsb2NrLm5vdygpLCBpbnRlcnZhbCA9IHNldEludGVydmFsKHBva2UsIHBva2VEZWxheSk7XG4gICAgZnJhbWUgPSAxLCBzZXRGcmFtZSh3YWtlKTtcbiAgfVxufVxuIiwiaW1wb3J0IHtUcmFuc2l0aW9ufSBmcm9tIFwiLi90cmFuc2l0aW9uL2luZGV4LmpzXCI7XG5pbXBvcnQge1NDSEVEVUxFRH0gZnJvbSBcIi4vdHJhbnNpdGlvbi9zY2hlZHVsZS5qc1wiO1xuXG52YXIgcm9vdCA9IFtudWxsXTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obm9kZSwgbmFtZSkge1xuICB2YXIgc2NoZWR1bGVzID0gbm9kZS5fX3RyYW5zaXRpb24sXG4gICAgICBzY2hlZHVsZSxcbiAgICAgIGk7XG5cbiAgaWYgKHNjaGVkdWxlcykge1xuICAgIG5hbWUgPSBuYW1lID09IG51bGwgPyBudWxsIDogbmFtZSArIFwiXCI7XG4gICAgZm9yIChpIGluIHNjaGVkdWxlcykge1xuICAgICAgaWYgKChzY2hlZHVsZSA9IHNjaGVkdWxlc1tpXSkuc3RhdGUgPiBTQ0hFRFVMRUQgJiYgc2NoZWR1bGUubmFtZSA9PT0gbmFtZSkge1xuICAgICAgICByZXR1cm4gbmV3IFRyYW5zaXRpb24oW1tub2RlXV0sIHJvb3QsIG5hbWUsICtpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbiIsImltcG9ydCBcIi4vc2VsZWN0aW9uL2luZGV4LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgdHJhbnNpdGlvbn0gZnJvbSBcIi4vdHJhbnNpdGlvbi9pbmRleC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGFjdGl2ZX0gZnJvbSBcIi4vYWN0aXZlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJydXB0fSBmcm9tIFwiLi9pbnRlcnJ1cHQuanNcIjtcbiIsImltcG9ydCB7U1RBUlRJTkcsIEVORElORywgRU5ERUR9IGZyb20gXCIuL3RyYW5zaXRpb24vc2NoZWR1bGUuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obm9kZSwgbmFtZSkge1xuICB2YXIgc2NoZWR1bGVzID0gbm9kZS5fX3RyYW5zaXRpb24sXG4gICAgICBzY2hlZHVsZSxcbiAgICAgIGFjdGl2ZSxcbiAgICAgIGVtcHR5ID0gdHJ1ZSxcbiAgICAgIGk7XG5cbiAgaWYgKCFzY2hlZHVsZXMpIHJldHVybjtcblxuICBuYW1lID0gbmFtZSA9PSBudWxsID8gbnVsbCA6IG5hbWUgKyBcIlwiO1xuXG4gIGZvciAoaSBpbiBzY2hlZHVsZXMpIHtcbiAgICBpZiAoKHNjaGVkdWxlID0gc2NoZWR1bGVzW2ldKS5uYW1lICE9PSBuYW1lKSB7IGVtcHR5ID0gZmFsc2U7IGNvbnRpbnVlOyB9XG4gICAgYWN0aXZlID0gc2NoZWR1bGUuc3RhdGUgPiBTVEFSVElORyAmJiBzY2hlZHVsZS5zdGF0ZSA8IEVORElORztcbiAgICBzY2hlZHVsZS5zdGF0ZSA9IEVOREVEO1xuICAgIHNjaGVkdWxlLnRpbWVyLnN0b3AoKTtcbiAgICBzY2hlZHVsZS5vbi5jYWxsKGFjdGl2ZSA/IFwiaW50ZXJydXB0XCIgOiBcImNhbmNlbFwiLCBub2RlLCBub2RlLl9fZGF0YV9fLCBzY2hlZHVsZS5pbmRleCwgc2NoZWR1bGUuZ3JvdXApO1xuICAgIGRlbGV0ZSBzY2hlZHVsZXNbaV07XG4gIH1cblxuICBpZiAoZW1wdHkpIGRlbGV0ZSBub2RlLl9fdHJhbnNpdGlvbjtcbn1cbiIsImltcG9ydCB7c2VsZWN0aW9ufSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2ludGVycnVwdCBmcm9tIFwiLi9pbnRlcnJ1cHQuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fdHJhbnNpdGlvbiBmcm9tIFwiLi90cmFuc2l0aW9uLmpzXCI7XG5cbnNlbGVjdGlvbi5wcm90b3R5cGUuaW50ZXJydXB0ID0gc2VsZWN0aW9uX2ludGVycnVwdDtcbnNlbGVjdGlvbi5wcm90b3R5cGUudHJhbnNpdGlvbiA9IHNlbGVjdGlvbl90cmFuc2l0aW9uO1xuIiwiaW1wb3J0IGludGVycnVwdCBmcm9tIFwiLi4vaW50ZXJydXB0LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUpIHtcbiAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHtcbiAgICBpbnRlcnJ1cHQodGhpcywgbmFtZSk7XG4gIH0pO1xufVxuIiwiaW1wb3J0IHtUcmFuc2l0aW9uLCBuZXdJZH0gZnJvbSBcIi4uL3RyYW5zaXRpb24vaW5kZXguanNcIjtcbmltcG9ydCBzY2hlZHVsZSBmcm9tIFwiLi4vdHJhbnNpdGlvbi9zY2hlZHVsZS5qc1wiO1xuaW1wb3J0IHtlYXNlQ3ViaWNJbk91dH0gZnJvbSBcImQzLWVhc2VcIjtcbmltcG9ydCB7bm93fSBmcm9tIFwiZDMtdGltZXJcIjtcblxudmFyIGRlZmF1bHRUaW1pbmcgPSB7XG4gIHRpbWU6IG51bGwsIC8vIFNldCBvbiB1c2UuXG4gIGRlbGF5OiAwLFxuICBkdXJhdGlvbjogMjUwLFxuICBlYXNlOiBlYXNlQ3ViaWNJbk91dFxufTtcblxuZnVuY3Rpb24gaW5oZXJpdChub2RlLCBpZCkge1xuICB2YXIgdGltaW5nO1xuICB3aGlsZSAoISh0aW1pbmcgPSBub2RlLl9fdHJhbnNpdGlvbikgfHwgISh0aW1pbmcgPSB0aW1pbmdbaWRdKSkge1xuICAgIGlmICghKG5vZGUgPSBub2RlLnBhcmVudE5vZGUpKSB7XG4gICAgICByZXR1cm4gZGVmYXVsdFRpbWluZy50aW1lID0gbm93KCksIGRlZmF1bHRUaW1pbmc7XG4gICAgfVxuICB9XG4gIHJldHVybiB0aW1pbmc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUpIHtcbiAgdmFyIGlkLFxuICAgICAgdGltaW5nO1xuXG4gIGlmIChuYW1lIGluc3RhbmNlb2YgVHJhbnNpdGlvbikge1xuICAgIGlkID0gbmFtZS5faWQsIG5hbWUgPSBuYW1lLl9uYW1lO1xuICB9IGVsc2Uge1xuICAgIGlkID0gbmV3SWQoKSwgKHRpbWluZyA9IGRlZmF1bHRUaW1pbmcpLnRpbWUgPSBub3coKSwgbmFtZSA9IG5hbWUgPT0gbnVsbCA/IG51bGwgOiBuYW1lICsgXCJcIjtcbiAgfVxuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgbSA9IGdyb3Vwcy5sZW5ndGgsIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIG4gPSBncm91cC5sZW5ndGgsIG5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7XG4gICAgICAgIHNjaGVkdWxlKG5vZGUsIG5hbWUsIGlkLCBpLCBncm91cCwgdGltaW5nIHx8IGluaGVyaXQobm9kZSwgaWQpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IFRyYW5zaXRpb24oZ3JvdXBzLCB0aGlzLl9wYXJlbnRzLCBuYW1lLCBpZCk7XG59XG4iLCJpbXBvcnQge2ludGVycG9sYXRlVHJhbnNmb3JtU3ZnIGFzIGludGVycG9sYXRlVHJhbnNmb3JtfSBmcm9tIFwiZDMtaW50ZXJwb2xhdGVcIjtcbmltcG9ydCB7bmFtZXNwYWNlfSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5pbXBvcnQge3R3ZWVuVmFsdWV9IGZyb20gXCIuL3R3ZWVuLmpzXCI7XG5pbXBvcnQgaW50ZXJwb2xhdGUgZnJvbSBcIi4vaW50ZXJwb2xhdGUuanNcIjtcblxuZnVuY3Rpb24gYXR0clJlbW92ZShuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0clJlbW92ZU5TKGZ1bGxuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJDb25zdGFudChuYW1lLCBpbnRlcnBvbGF0ZSwgdmFsdWUxKSB7XG4gIHZhciBzdHJpbmcwMCxcbiAgICAgIHN0cmluZzEgPSB2YWx1ZTEgKyBcIlwiLFxuICAgICAgaW50ZXJwb2xhdGUwO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHN0cmluZzAgPSB0aGlzLmdldEF0dHJpYnV0ZShuYW1lKTtcbiAgICByZXR1cm4gc3RyaW5nMCA9PT0gc3RyaW5nMSA/IG51bGxcbiAgICAgICAgOiBzdHJpbmcwID09PSBzdHJpbmcwMCA/IGludGVycG9sYXRlMFxuICAgICAgICA6IGludGVycG9sYXRlMCA9IGludGVycG9sYXRlKHN0cmluZzAwID0gc3RyaW5nMCwgdmFsdWUxKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0ckNvbnN0YW50TlMoZnVsbG5hbWUsIGludGVycG9sYXRlLCB2YWx1ZTEpIHtcbiAgdmFyIHN0cmluZzAwLFxuICAgICAgc3RyaW5nMSA9IHZhbHVlMSArIFwiXCIsXG4gICAgICBpbnRlcnBvbGF0ZTA7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc3RyaW5nMCA9IHRoaXMuZ2V0QXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsKTtcbiAgICByZXR1cm4gc3RyaW5nMCA9PT0gc3RyaW5nMSA/IG51bGxcbiAgICAgICAgOiBzdHJpbmcwID09PSBzdHJpbmcwMCA/IGludGVycG9sYXRlMFxuICAgICAgICA6IGludGVycG9sYXRlMCA9IGludGVycG9sYXRlKHN0cmluZzAwID0gc3RyaW5nMCwgdmFsdWUxKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0ckZ1bmN0aW9uKG5hbWUsIGludGVycG9sYXRlLCB2YWx1ZSkge1xuICB2YXIgc3RyaW5nMDAsXG4gICAgICBzdHJpbmcxMCxcbiAgICAgIGludGVycG9sYXRlMDtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzdHJpbmcwLCB2YWx1ZTEgPSB2YWx1ZSh0aGlzKSwgc3RyaW5nMTtcbiAgICBpZiAodmFsdWUxID09IG51bGwpIHJldHVybiB2b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICAgIHN0cmluZzAgPSB0aGlzLmdldEF0dHJpYnV0ZShuYW1lKTtcbiAgICBzdHJpbmcxID0gdmFsdWUxICsgXCJcIjtcbiAgICByZXR1cm4gc3RyaW5nMCA9PT0gc3RyaW5nMSA/IG51bGxcbiAgICAgICAgOiBzdHJpbmcwID09PSBzdHJpbmcwMCAmJiBzdHJpbmcxID09PSBzdHJpbmcxMCA/IGludGVycG9sYXRlMFxuICAgICAgICA6IChzdHJpbmcxMCA9IHN0cmluZzEsIGludGVycG9sYXRlMCA9IGludGVycG9sYXRlKHN0cmluZzAwID0gc3RyaW5nMCwgdmFsdWUxKSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJGdW5jdGlvbk5TKGZ1bGxuYW1lLCBpbnRlcnBvbGF0ZSwgdmFsdWUpIHtcbiAgdmFyIHN0cmluZzAwLFxuICAgICAgc3RyaW5nMTAsXG4gICAgICBpbnRlcnBvbGF0ZTA7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc3RyaW5nMCwgdmFsdWUxID0gdmFsdWUodGhpcyksIHN0cmluZzE7XG4gICAgaWYgKHZhbHVlMSA9PSBudWxsKSByZXR1cm4gdm9pZCB0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCk7XG4gICAgc3RyaW5nMCA9IHRoaXMuZ2V0QXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsKTtcbiAgICBzdHJpbmcxID0gdmFsdWUxICsgXCJcIjtcbiAgICByZXR1cm4gc3RyaW5nMCA9PT0gc3RyaW5nMSA/IG51bGxcbiAgICAgICAgOiBzdHJpbmcwID09PSBzdHJpbmcwMCAmJiBzdHJpbmcxID09PSBzdHJpbmcxMCA/IGludGVycG9sYXRlMFxuICAgICAgICA6IChzdHJpbmcxMCA9IHN0cmluZzEsIGludGVycG9sYXRlMCA9IGludGVycG9sYXRlKHN0cmluZzAwID0gc3RyaW5nMCwgdmFsdWUxKSk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIHZhciBmdWxsbmFtZSA9IG5hbWVzcGFjZShuYW1lKSwgaSA9IGZ1bGxuYW1lID09PSBcInRyYW5zZm9ybVwiID8gaW50ZXJwb2xhdGVUcmFuc2Zvcm0gOiBpbnRlcnBvbGF0ZTtcbiAgcmV0dXJuIHRoaXMuYXR0clR3ZWVuKG5hbWUsIHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICA/IChmdWxsbmFtZS5sb2NhbCA/IGF0dHJGdW5jdGlvbk5TIDogYXR0ckZ1bmN0aW9uKShmdWxsbmFtZSwgaSwgdHdlZW5WYWx1ZSh0aGlzLCBcImF0dHIuXCIgKyBuYW1lLCB2YWx1ZSkpXG4gICAgICA6IHZhbHVlID09IG51bGwgPyAoZnVsbG5hbWUubG9jYWwgPyBhdHRyUmVtb3ZlTlMgOiBhdHRyUmVtb3ZlKShmdWxsbmFtZSlcbiAgICAgIDogKGZ1bGxuYW1lLmxvY2FsID8gYXR0ckNvbnN0YW50TlMgOiBhdHRyQ29uc3RhbnQpKGZ1bGxuYW1lLCBpLCB2YWx1ZSkpO1xufVxuIiwiaW1wb3J0IHtuYW1lc3BhY2V9IGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcblxuZnVuY3Rpb24gYXR0ckludGVycG9sYXRlKG5hbWUsIGkpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShuYW1lLCBpLmNhbGwodGhpcywgdCkpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRySW50ZXJwb2xhdGVOUyhmdWxsbmFtZSwgaSkge1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsLCBpLmNhbGwodGhpcywgdCkpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyVHdlZW5OUyhmdWxsbmFtZSwgdmFsdWUpIHtcbiAgdmFyIHQwLCBpMDtcbiAgZnVuY3Rpb24gdHdlZW4oKSB7XG4gICAgdmFyIGkgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmIChpICE9PSBpMCkgdDAgPSAoaTAgPSBpKSAmJiBhdHRySW50ZXJwb2xhdGVOUyhmdWxsbmFtZSwgaSk7XG4gICAgcmV0dXJuIHQwO1xuICB9XG4gIHR3ZWVuLl92YWx1ZSA9IHZhbHVlO1xuICByZXR1cm4gdHdlZW47XG59XG5cbmZ1bmN0aW9uIGF0dHJUd2VlbihuYW1lLCB2YWx1ZSkge1xuICB2YXIgdDAsIGkwO1xuICBmdW5jdGlvbiB0d2VlbigpIHtcbiAgICB2YXIgaSA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKGkgIT09IGkwKSB0MCA9IChpMCA9IGkpICYmIGF0dHJJbnRlcnBvbGF0ZShuYW1lLCBpKTtcbiAgICByZXR1cm4gdDA7XG4gIH1cbiAgdHdlZW4uX3ZhbHVlID0gdmFsdWU7XG4gIHJldHVybiB0d2Vlbjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgdmFyIGtleSA9IFwiYXR0ci5cIiArIG5hbWU7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikgcmV0dXJuIChrZXkgPSB0aGlzLnR3ZWVuKGtleSkpICYmIGtleS5fdmFsdWU7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdGhpcy50d2VlbihrZXksIG51bGwpO1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBFcnJvcjtcbiAgdmFyIGZ1bGxuYW1lID0gbmFtZXNwYWNlKG5hbWUpO1xuICByZXR1cm4gdGhpcy50d2VlbihrZXksIChmdWxsbmFtZS5sb2NhbCA/IGF0dHJUd2Vlbk5TIDogYXR0clR3ZWVuKShmdWxsbmFtZSwgdmFsdWUpKTtcbn1cbiIsImltcG9ydCB7Z2V0LCBpbml0fSBmcm9tIFwiLi9zY2hlZHVsZS5qc1wiO1xuXG5mdW5jdGlvbiBkZWxheUZ1bmN0aW9uKGlkLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgaW5pdCh0aGlzLCBpZCkuZGVsYXkgPSArdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZGVsYXlDb25zdGFudChpZCwgdmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID0gK3ZhbHVlLCBmdW5jdGlvbigpIHtcbiAgICBpbml0KHRoaXMsIGlkKS5kZWxheSA9IHZhbHVlO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZSkge1xuICB2YXIgaWQgPSB0aGlzLl9pZDtcblxuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aFxuICAgICAgPyB0aGlzLmVhY2goKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgPyBkZWxheUZ1bmN0aW9uXG4gICAgICAgICAgOiBkZWxheUNvbnN0YW50KShpZCwgdmFsdWUpKVxuICAgICAgOiBnZXQodGhpcy5ub2RlKCksIGlkKS5kZWxheTtcbn1cbiIsImltcG9ydCB7Z2V0LCBzZXR9IGZyb20gXCIuL3NjaGVkdWxlLmpzXCI7XG5cbmZ1bmN0aW9uIGR1cmF0aW9uRnVuY3Rpb24oaWQsIHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBzZXQodGhpcywgaWQpLmR1cmF0aW9uID0gK3ZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGR1cmF0aW9uQ29uc3RhbnQoaWQsIHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9ICt2YWx1ZSwgZnVuY3Rpb24oKSB7XG4gICAgc2V0KHRoaXMsIGlkKS5kdXJhdGlvbiA9IHZhbHVlO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZSkge1xuICB2YXIgaWQgPSB0aGlzLl9pZDtcblxuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aFxuICAgICAgPyB0aGlzLmVhY2goKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgPyBkdXJhdGlvbkZ1bmN0aW9uXG4gICAgICAgICAgOiBkdXJhdGlvbkNvbnN0YW50KShpZCwgdmFsdWUpKVxuICAgICAgOiBnZXQodGhpcy5ub2RlKCksIGlkKS5kdXJhdGlvbjtcbn1cbiIsImltcG9ydCB7Z2V0LCBzZXR9IGZyb20gXCIuL3NjaGVkdWxlLmpzXCI7XG5cbmZ1bmN0aW9uIGVhc2VDb25zdGFudChpZCwgdmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgRXJyb3I7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBzZXQodGhpcywgaWQpLmVhc2UgPSB2YWx1ZTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWUpIHtcbiAgdmFyIGlkID0gdGhpcy5faWQ7XG5cbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGhcbiAgICAgID8gdGhpcy5lYWNoKGVhc2VDb25zdGFudChpZCwgdmFsdWUpKVxuICAgICAgOiBnZXQodGhpcy5ub2RlKCksIGlkKS5lYXNlO1xufVxuIiwiaW1wb3J0IHtzZXR9IGZyb20gXCIuL3NjaGVkdWxlLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgb24wLCBvbjEsIHRoYXQgPSB0aGlzLCBpZCA9IHRoYXQuX2lkLCBzaXplID0gdGhhdC5zaXplKCk7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICB2YXIgY2FuY2VsID0ge3ZhbHVlOiByZWplY3R9LFxuICAgICAgICBlbmQgPSB7dmFsdWU6IGZ1bmN0aW9uKCkgeyBpZiAoLS1zaXplID09PSAwKSByZXNvbHZlKCk7IH19O1xuXG4gICAgdGhhdC5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHNjaGVkdWxlID0gc2V0KHRoaXMsIGlkKSxcbiAgICAgICAgICBvbiA9IHNjaGVkdWxlLm9uO1xuXG4gICAgICAvLyBJZiB0aGlzIG5vZGUgc2hhcmVkIGEgZGlzcGF0Y2ggd2l0aCB0aGUgcHJldmlvdXMgbm9kZSxcbiAgICAgIC8vIGp1c3QgYXNzaWduIHRoZSB1cGRhdGVkIHNoYXJlZCBkaXNwYXRjaCBhbmQgd2XigJlyZSBkb25lIVxuICAgICAgLy8gT3RoZXJ3aXNlLCBjb3B5LW9uLXdyaXRlLlxuICAgICAgaWYgKG9uICE9PSBvbjApIHtcbiAgICAgICAgb24xID0gKG9uMCA9IG9uKS5jb3B5KCk7XG4gICAgICAgIG9uMS5fLmNhbmNlbC5wdXNoKGNhbmNlbCk7XG4gICAgICAgIG9uMS5fLmludGVycnVwdC5wdXNoKGNhbmNlbCk7XG4gICAgICAgIG9uMS5fLmVuZC5wdXNoKGVuZCk7XG4gICAgICB9XG5cbiAgICAgIHNjaGVkdWxlLm9uID0gb24xO1xuICAgIH0pO1xuICB9KTtcbn1cbiIsImltcG9ydCB7bWF0Y2hlcn0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHtUcmFuc2l0aW9ufSBmcm9tIFwiLi9pbmRleC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihtYXRjaCkge1xuICBpZiAodHlwZW9mIG1hdGNoICE9PSBcImZ1bmN0aW9uXCIpIG1hdGNoID0gbWF0Y2hlcihtYXRjaCk7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgc3ViZ3JvdXBzID0gbmV3IEFycmF5KG0pLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBzdWJncm91cCA9IHN1Ymdyb3Vwc1tqXSA9IFtdLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKChub2RlID0gZ3JvdXBbaV0pICYmIG1hdGNoLmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApKSB7XG4gICAgICAgIHN1Ymdyb3VwLnB1c2gobm9kZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ldyBUcmFuc2l0aW9uKHN1Ymdyb3VwcywgdGhpcy5fcGFyZW50cywgdGhpcy5fbmFtZSwgdGhpcy5faWQpO1xufVxuIiwiaW1wb3J0IHtzZWxlY3Rpb259IGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcbmltcG9ydCB0cmFuc2l0aW9uX2F0dHIgZnJvbSBcIi4vYXR0ci5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fYXR0clR3ZWVuIGZyb20gXCIuL2F0dHJUd2Vlbi5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fZGVsYXkgZnJvbSBcIi4vZGVsYXkuanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX2R1cmF0aW9uIGZyb20gXCIuL2R1cmF0aW9uLmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9lYXNlIGZyb20gXCIuL2Vhc2UuanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX2ZpbHRlciBmcm9tIFwiLi9maWx0ZXIuanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX21lcmdlIGZyb20gXCIuL21lcmdlLmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9vbiBmcm9tIFwiLi9vbi5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fcmVtb3ZlIGZyb20gXCIuL3JlbW92ZS5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fc2VsZWN0IGZyb20gXCIuL3NlbGVjdC5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fc2VsZWN0QWxsIGZyb20gXCIuL3NlbGVjdEFsbC5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fc2VsZWN0aW9uIGZyb20gXCIuL3NlbGVjdGlvbi5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fc3R5bGUgZnJvbSBcIi4vc3R5bGUuanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX3N0eWxlVHdlZW4gZnJvbSBcIi4vc3R5bGVUd2Vlbi5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fdGV4dCBmcm9tIFwiLi90ZXh0LmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl90ZXh0VHdlZW4gZnJvbSBcIi4vdGV4dFR3ZWVuLmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl90cmFuc2l0aW9uIGZyb20gXCIuL3RyYW5zaXRpb24uanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX3R3ZWVuIGZyb20gXCIuL3R3ZWVuLmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9lbmQgZnJvbSBcIi4vZW5kLmpzXCI7XG5cbnZhciBpZCA9IDA7XG5cbmV4cG9ydCBmdW5jdGlvbiBUcmFuc2l0aW9uKGdyb3VwcywgcGFyZW50cywgbmFtZSwgaWQpIHtcbiAgdGhpcy5fZ3JvdXBzID0gZ3JvdXBzO1xuICB0aGlzLl9wYXJlbnRzID0gcGFyZW50cztcbiAgdGhpcy5fbmFtZSA9IG5hbWU7XG4gIHRoaXMuX2lkID0gaWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRyYW5zaXRpb24obmFtZSkge1xuICByZXR1cm4gc2VsZWN0aW9uKCkudHJhbnNpdGlvbihuYW1lKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5ld0lkKCkge1xuICByZXR1cm4gKytpZDtcbn1cblxudmFyIHNlbGVjdGlvbl9wcm90b3R5cGUgPSBzZWxlY3Rpb24ucHJvdG90eXBlO1xuXG5UcmFuc2l0aW9uLnByb3RvdHlwZSA9IHRyYW5zaXRpb24ucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogVHJhbnNpdGlvbixcbiAgc2VsZWN0OiB0cmFuc2l0aW9uX3NlbGVjdCxcbiAgc2VsZWN0QWxsOiB0cmFuc2l0aW9uX3NlbGVjdEFsbCxcbiAgZmlsdGVyOiB0cmFuc2l0aW9uX2ZpbHRlcixcbiAgbWVyZ2U6IHRyYW5zaXRpb25fbWVyZ2UsXG4gIHNlbGVjdGlvbjogdHJhbnNpdGlvbl9zZWxlY3Rpb24sXG4gIHRyYW5zaXRpb246IHRyYW5zaXRpb25fdHJhbnNpdGlvbixcbiAgY2FsbDogc2VsZWN0aW9uX3Byb3RvdHlwZS5jYWxsLFxuICBub2Rlczogc2VsZWN0aW9uX3Byb3RvdHlwZS5ub2RlcyxcbiAgbm9kZTogc2VsZWN0aW9uX3Byb3RvdHlwZS5ub2RlLFxuICBzaXplOiBzZWxlY3Rpb25fcHJvdG90eXBlLnNpemUsXG4gIGVtcHR5OiBzZWxlY3Rpb25fcHJvdG90eXBlLmVtcHR5LFxuICBlYWNoOiBzZWxlY3Rpb25fcHJvdG90eXBlLmVhY2gsXG4gIG9uOiB0cmFuc2l0aW9uX29uLFxuICBhdHRyOiB0cmFuc2l0aW9uX2F0dHIsXG4gIGF0dHJUd2VlbjogdHJhbnNpdGlvbl9hdHRyVHdlZW4sXG4gIHN0eWxlOiB0cmFuc2l0aW9uX3N0eWxlLFxuICBzdHlsZVR3ZWVuOiB0cmFuc2l0aW9uX3N0eWxlVHdlZW4sXG4gIHRleHQ6IHRyYW5zaXRpb25fdGV4dCxcbiAgdGV4dFR3ZWVuOiB0cmFuc2l0aW9uX3RleHRUd2VlbixcbiAgcmVtb3ZlOiB0cmFuc2l0aW9uX3JlbW92ZSxcbiAgdHdlZW46IHRyYW5zaXRpb25fdHdlZW4sXG4gIGRlbGF5OiB0cmFuc2l0aW9uX2RlbGF5LFxuICBkdXJhdGlvbjogdHJhbnNpdGlvbl9kdXJhdGlvbixcbiAgZWFzZTogdHJhbnNpdGlvbl9lYXNlLFxuICBlbmQ6IHRyYW5zaXRpb25fZW5kXG59O1xuIiwiaW1wb3J0IHtjb2xvcn0gZnJvbSBcImQzLWNvbG9yXCI7XG5pbXBvcnQge2ludGVycG9sYXRlTnVtYmVyLCBpbnRlcnBvbGF0ZVJnYiwgaW50ZXJwb2xhdGVTdHJpbmd9IGZyb20gXCJkMy1pbnRlcnBvbGF0ZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHZhciBjO1xuICByZXR1cm4gKHR5cGVvZiBiID09PSBcIm51bWJlclwiID8gaW50ZXJwb2xhdGVOdW1iZXJcbiAgICAgIDogYiBpbnN0YW5jZW9mIGNvbG9yID8gaW50ZXJwb2xhdGVSZ2JcbiAgICAgIDogKGMgPSBjb2xvcihiKSkgPyAoYiA9IGMsIGludGVycG9sYXRlUmdiKVxuICAgICAgOiBpbnRlcnBvbGF0ZVN0cmluZykoYSwgYik7XG59XG4iLCJpbXBvcnQge1RyYW5zaXRpb259IGZyb20gXCIuL2luZGV4LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHRyYW5zaXRpb24pIHtcbiAgaWYgKHRyYW5zaXRpb24uX2lkICE9PSB0aGlzLl9pZCkgdGhyb3cgbmV3IEVycm9yO1xuXG4gIGZvciAodmFyIGdyb3VwczAgPSB0aGlzLl9ncm91cHMsIGdyb3VwczEgPSB0cmFuc2l0aW9uLl9ncm91cHMsIG0wID0gZ3JvdXBzMC5sZW5ndGgsIG0xID0gZ3JvdXBzMS5sZW5ndGgsIG0gPSBNYXRoLm1pbihtMCwgbTEpLCBtZXJnZXMgPSBuZXcgQXJyYXkobTApLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwMCA9IGdyb3VwczBbal0sIGdyb3VwMSA9IGdyb3VwczFbal0sIG4gPSBncm91cDAubGVuZ3RoLCBtZXJnZSA9IG1lcmdlc1tqXSA9IG5ldyBBcnJheShuKSwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXAwW2ldIHx8IGdyb3VwMVtpXSkge1xuICAgICAgICBtZXJnZVtpXSA9IG5vZGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZm9yICg7IGogPCBtMDsgKytqKSB7XG4gICAgbWVyZ2VzW2pdID0gZ3JvdXBzMFtqXTtcbiAgfVxuXG4gIHJldHVybiBuZXcgVHJhbnNpdGlvbihtZXJnZXMsIHRoaXMuX3BhcmVudHMsIHRoaXMuX25hbWUsIHRoaXMuX2lkKTtcbn1cbiIsImltcG9ydCB7Z2V0LCBzZXQsIGluaXR9IGZyb20gXCIuL3NjaGVkdWxlLmpzXCI7XG5cbmZ1bmN0aW9uIHN0YXJ0KG5hbWUpIHtcbiAgcmV0dXJuIChuYW1lICsgXCJcIikudHJpbSgpLnNwbGl0KC9efFxccysvKS5ldmVyeShmdW5jdGlvbih0KSB7XG4gICAgdmFyIGkgPSB0LmluZGV4T2YoXCIuXCIpO1xuICAgIGlmIChpID49IDApIHQgPSB0LnNsaWNlKDAsIGkpO1xuICAgIHJldHVybiAhdCB8fCB0ID09PSBcInN0YXJ0XCI7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBvbkZ1bmN0aW9uKGlkLCBuYW1lLCBsaXN0ZW5lcikge1xuICB2YXIgb24wLCBvbjEsIHNpdCA9IHN0YXJ0KG5hbWUpID8gaW5pdCA6IHNldDtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzY2hlZHVsZSA9IHNpdCh0aGlzLCBpZCksXG4gICAgICAgIG9uID0gc2NoZWR1bGUub247XG5cbiAgICAvLyBJZiB0aGlzIG5vZGUgc2hhcmVkIGEgZGlzcGF0Y2ggd2l0aCB0aGUgcHJldmlvdXMgbm9kZSxcbiAgICAvLyBqdXN0IGFzc2lnbiB0aGUgdXBkYXRlZCBzaGFyZWQgZGlzcGF0Y2ggYW5kIHdl4oCZcmUgZG9uZSFcbiAgICAvLyBPdGhlcndpc2UsIGNvcHktb24td3JpdGUuXG4gICAgaWYgKG9uICE9PSBvbjApIChvbjEgPSAob24wID0gb24pLmNvcHkoKSkub24obmFtZSwgbGlzdGVuZXIpO1xuXG4gICAgc2NoZWR1bGUub24gPSBvbjE7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUsIGxpc3RlbmVyKSB7XG4gIHZhciBpZCA9IHRoaXMuX2lkO1xuXG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoIDwgMlxuICAgICAgPyBnZXQodGhpcy5ub2RlKCksIGlkKS5vbi5vbihuYW1lKVxuICAgICAgOiB0aGlzLmVhY2gob25GdW5jdGlvbihpZCwgbmFtZSwgbGlzdGVuZXIpKTtcbn1cbiIsImZ1bmN0aW9uIHJlbW92ZUZ1bmN0aW9uKGlkKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgcGFyZW50ID0gdGhpcy5wYXJlbnROb2RlO1xuICAgIGZvciAodmFyIGkgaW4gdGhpcy5fX3RyYW5zaXRpb24pIGlmICgraSAhPT0gaWQpIHJldHVybjtcbiAgICBpZiAocGFyZW50KSBwYXJlbnQucmVtb3ZlQ2hpbGQodGhpcyk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5vbihcImVuZC5yZW1vdmVcIiwgcmVtb3ZlRnVuY3Rpb24odGhpcy5faWQpKTtcbn1cbiIsImltcG9ydCB7ZGlzcGF0Y2h9IGZyb20gXCJkMy1kaXNwYXRjaFwiO1xuaW1wb3J0IHt0aW1lciwgdGltZW91dH0gZnJvbSBcImQzLXRpbWVyXCI7XG5cbnZhciBlbXB0eU9uID0gZGlzcGF0Y2goXCJzdGFydFwiLCBcImVuZFwiLCBcImNhbmNlbFwiLCBcImludGVycnVwdFwiKTtcbnZhciBlbXB0eVR3ZWVuID0gW107XG5cbmV4cG9ydCB2YXIgQ1JFQVRFRCA9IDA7XG5leHBvcnQgdmFyIFNDSEVEVUxFRCA9IDE7XG5leHBvcnQgdmFyIFNUQVJUSU5HID0gMjtcbmV4cG9ydCB2YXIgU1RBUlRFRCA9IDM7XG5leHBvcnQgdmFyIFJVTk5JTkcgPSA0O1xuZXhwb3J0IHZhciBFTkRJTkcgPSA1O1xuZXhwb3J0IHZhciBFTkRFRCA9IDY7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5vZGUsIG5hbWUsIGlkLCBpbmRleCwgZ3JvdXAsIHRpbWluZykge1xuICB2YXIgc2NoZWR1bGVzID0gbm9kZS5fX3RyYW5zaXRpb247XG4gIGlmICghc2NoZWR1bGVzKSBub2RlLl9fdHJhbnNpdGlvbiA9IHt9O1xuICBlbHNlIGlmIChpZCBpbiBzY2hlZHVsZXMpIHJldHVybjtcbiAgY3JlYXRlKG5vZGUsIGlkLCB7XG4gICAgbmFtZTogbmFtZSxcbiAgICBpbmRleDogaW5kZXgsIC8vIEZvciBjb250ZXh0IGR1cmluZyBjYWxsYmFjay5cbiAgICBncm91cDogZ3JvdXAsIC8vIEZvciBjb250ZXh0IGR1cmluZyBjYWxsYmFjay5cbiAgICBvbjogZW1wdHlPbixcbiAgICB0d2VlbjogZW1wdHlUd2VlbixcbiAgICB0aW1lOiB0aW1pbmcudGltZSxcbiAgICBkZWxheTogdGltaW5nLmRlbGF5LFxuICAgIGR1cmF0aW9uOiB0aW1pbmcuZHVyYXRpb24sXG4gICAgZWFzZTogdGltaW5nLmVhc2UsXG4gICAgdGltZXI6IG51bGwsXG4gICAgc3RhdGU6IENSRUFURURcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0KG5vZGUsIGlkKSB7XG4gIHZhciBzY2hlZHVsZSA9IGdldChub2RlLCBpZCk7XG4gIGlmIChzY2hlZHVsZS5zdGF0ZSA+IENSRUFURUQpIHRocm93IG5ldyBFcnJvcihcInRvbyBsYXRlOyBhbHJlYWR5IHNjaGVkdWxlZFwiKTtcbiAgcmV0dXJuIHNjaGVkdWxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0KG5vZGUsIGlkKSB7XG4gIHZhciBzY2hlZHVsZSA9IGdldChub2RlLCBpZCk7XG4gIGlmIChzY2hlZHVsZS5zdGF0ZSA+IFNUQVJURUQpIHRocm93IG5ldyBFcnJvcihcInRvbyBsYXRlOyBhbHJlYWR5IHJ1bm5pbmdcIik7XG4gIHJldHVybiBzY2hlZHVsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldChub2RlLCBpZCkge1xuICB2YXIgc2NoZWR1bGUgPSBub2RlLl9fdHJhbnNpdGlvbjtcbiAgaWYgKCFzY2hlZHVsZSB8fCAhKHNjaGVkdWxlID0gc2NoZWR1bGVbaWRdKSkgdGhyb3cgbmV3IEVycm9yKFwidHJhbnNpdGlvbiBub3QgZm91bmRcIik7XG4gIHJldHVybiBzY2hlZHVsZTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlKG5vZGUsIGlkLCBzZWxmKSB7XG4gIHZhciBzY2hlZHVsZXMgPSBub2RlLl9fdHJhbnNpdGlvbixcbiAgICAgIHR3ZWVuO1xuXG4gIC8vIEluaXRpYWxpemUgdGhlIHNlbGYgdGltZXIgd2hlbiB0aGUgdHJhbnNpdGlvbiBpcyBjcmVhdGVkLlxuICAvLyBOb3RlIHRoZSBhY3R1YWwgZGVsYXkgaXMgbm90IGtub3duIHVudGlsIHRoZSBmaXJzdCBjYWxsYmFjayFcbiAgc2NoZWR1bGVzW2lkXSA9IHNlbGY7XG4gIHNlbGYudGltZXIgPSB0aW1lcihzY2hlZHVsZSwgMCwgc2VsZi50aW1lKTtcblxuICBmdW5jdGlvbiBzY2hlZHVsZShlbGFwc2VkKSB7XG4gICAgc2VsZi5zdGF0ZSA9IFNDSEVEVUxFRDtcbiAgICBzZWxmLnRpbWVyLnJlc3RhcnQoc3RhcnQsIHNlbGYuZGVsYXksIHNlbGYudGltZSk7XG5cbiAgICAvLyBJZiB0aGUgZWxhcHNlZCBkZWxheSBpcyBsZXNzIHRoYW4gb3VyIGZpcnN0IHNsZWVwLCBzdGFydCBpbW1lZGlhdGVseS5cbiAgICBpZiAoc2VsZi5kZWxheSA8PSBlbGFwc2VkKSBzdGFydChlbGFwc2VkIC0gc2VsZi5kZWxheSk7XG4gIH1cblxuICBmdW5jdGlvbiBzdGFydChlbGFwc2VkKSB7XG4gICAgdmFyIGksIGosIG4sIG87XG5cbiAgICAvLyBJZiB0aGUgc3RhdGUgaXMgbm90IFNDSEVEVUxFRCwgdGhlbiB3ZSBwcmV2aW91c2x5IGVycm9yZWQgb24gc3RhcnQuXG4gICAgaWYgKHNlbGYuc3RhdGUgIT09IFNDSEVEVUxFRCkgcmV0dXJuIHN0b3AoKTtcblxuICAgIGZvciAoaSBpbiBzY2hlZHVsZXMpIHtcbiAgICAgIG8gPSBzY2hlZHVsZXNbaV07XG4gICAgICBpZiAoby5uYW1lICE9PSBzZWxmLm5hbWUpIGNvbnRpbnVlO1xuXG4gICAgICAvLyBXaGlsZSB0aGlzIGVsZW1lbnQgYWxyZWFkeSBoYXMgYSBzdGFydGluZyB0cmFuc2l0aW9uIGR1cmluZyB0aGlzIGZyYW1lLFxuICAgICAgLy8gZGVmZXIgc3RhcnRpbmcgYW4gaW50ZXJydXB0aW5nIHRyYW5zaXRpb24gdW50aWwgdGhhdCB0cmFuc2l0aW9uIGhhcyBhXG4gICAgICAvLyBjaGFuY2UgdG8gdGljayAoYW5kIHBvc3NpYmx5IGVuZCk7IHNlZSBkMy9kMy10cmFuc2l0aW9uIzU0IVxuICAgICAgaWYgKG8uc3RhdGUgPT09IFNUQVJURUQpIHJldHVybiB0aW1lb3V0KHN0YXJ0KTtcblxuICAgICAgLy8gSW50ZXJydXB0IHRoZSBhY3RpdmUgdHJhbnNpdGlvbiwgaWYgYW55LlxuICAgICAgaWYgKG8uc3RhdGUgPT09IFJVTk5JTkcpIHtcbiAgICAgICAgby5zdGF0ZSA9IEVOREVEO1xuICAgICAgICBvLnRpbWVyLnN0b3AoKTtcbiAgICAgICAgby5vbi5jYWxsKFwiaW50ZXJydXB0XCIsIG5vZGUsIG5vZGUuX19kYXRhX18sIG8uaW5kZXgsIG8uZ3JvdXApO1xuICAgICAgICBkZWxldGUgc2NoZWR1bGVzW2ldO1xuICAgICAgfVxuXG4gICAgICAvLyBDYW5jZWwgYW55IHByZS1lbXB0ZWQgdHJhbnNpdGlvbnMuXG4gICAgICBlbHNlIGlmICgraSA8IGlkKSB7XG4gICAgICAgIG8uc3RhdGUgPSBFTkRFRDtcbiAgICAgICAgby50aW1lci5zdG9wKCk7XG4gICAgICAgIG8ub24uY2FsbChcImNhbmNlbFwiLCBub2RlLCBub2RlLl9fZGF0YV9fLCBvLmluZGV4LCBvLmdyb3VwKTtcbiAgICAgICAgZGVsZXRlIHNjaGVkdWxlc1tpXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBEZWZlciB0aGUgZmlyc3QgdGljayB0byBlbmQgb2YgdGhlIGN1cnJlbnQgZnJhbWU7IHNlZSBkMy9kMyMxNTc2LlxuICAgIC8vIE5vdGUgdGhlIHRyYW5zaXRpb24gbWF5IGJlIGNhbmNlbGVkIGFmdGVyIHN0YXJ0IGFuZCBiZWZvcmUgdGhlIGZpcnN0IHRpY2shXG4gICAgLy8gTm90ZSB0aGlzIG11c3QgYmUgc2NoZWR1bGVkIGJlZm9yZSB0aGUgc3RhcnQgZXZlbnQ7IHNlZSBkMy9kMy10cmFuc2l0aW9uIzE2IVxuICAgIC8vIEFzc3VtaW5nIHRoaXMgaXMgc3VjY2Vzc2Z1bCwgc3Vic2VxdWVudCBjYWxsYmFja3MgZ28gc3RyYWlnaHQgdG8gdGljay5cbiAgICB0aW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKHNlbGYuc3RhdGUgPT09IFNUQVJURUQpIHtcbiAgICAgICAgc2VsZi5zdGF0ZSA9IFJVTk5JTkc7XG4gICAgICAgIHNlbGYudGltZXIucmVzdGFydCh0aWNrLCBzZWxmLmRlbGF5LCBzZWxmLnRpbWUpO1xuICAgICAgICB0aWNrKGVsYXBzZWQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gRGlzcGF0Y2ggdGhlIHN0YXJ0IGV2ZW50LlxuICAgIC8vIE5vdGUgdGhpcyBtdXN0IGJlIGRvbmUgYmVmb3JlIHRoZSB0d2VlbiBhcmUgaW5pdGlhbGl6ZWQuXG4gICAgc2VsZi5zdGF0ZSA9IFNUQVJUSU5HO1xuICAgIHNlbGYub24uY2FsbChcInN0YXJ0XCIsIG5vZGUsIG5vZGUuX19kYXRhX18sIHNlbGYuaW5kZXgsIHNlbGYuZ3JvdXApO1xuICAgIGlmIChzZWxmLnN0YXRlICE9PSBTVEFSVElORykgcmV0dXJuOyAvLyBpbnRlcnJ1cHRlZFxuICAgIHNlbGYuc3RhdGUgPSBTVEFSVEVEO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSB0aGUgdHdlZW4sIGRlbGV0aW5nIG51bGwgdHdlZW4uXG4gICAgdHdlZW4gPSBuZXcgQXJyYXkobiA9IHNlbGYudHdlZW4ubGVuZ3RoKTtcbiAgICBmb3IgKGkgPSAwLCBqID0gLTE7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChvID0gc2VsZi50d2VlbltpXS52YWx1ZS5jYWxsKG5vZGUsIG5vZGUuX19kYXRhX18sIHNlbGYuaW5kZXgsIHNlbGYuZ3JvdXApKSB7XG4gICAgICAgIHR3ZWVuWysral0gPSBvO1xuICAgICAgfVxuICAgIH1cbiAgICB0d2Vlbi5sZW5ndGggPSBqICsgMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRpY2soZWxhcHNlZCkge1xuICAgIHZhciB0ID0gZWxhcHNlZCA8IHNlbGYuZHVyYXRpb24gPyBzZWxmLmVhc2UuY2FsbChudWxsLCBlbGFwc2VkIC8gc2VsZi5kdXJhdGlvbikgOiAoc2VsZi50aW1lci5yZXN0YXJ0KHN0b3ApLCBzZWxmLnN0YXRlID0gRU5ESU5HLCAxKSxcbiAgICAgICAgaSA9IC0xLFxuICAgICAgICBuID0gdHdlZW4ubGVuZ3RoO1xuXG4gICAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICAgIHR3ZWVuW2ldLmNhbGwobm9kZSwgdCk7XG4gICAgfVxuXG4gICAgLy8gRGlzcGF0Y2ggdGhlIGVuZCBldmVudC5cbiAgICBpZiAoc2VsZi5zdGF0ZSA9PT0gRU5ESU5HKSB7XG4gICAgICBzZWxmLm9uLmNhbGwoXCJlbmRcIiwgbm9kZSwgbm9kZS5fX2RhdGFfXywgc2VsZi5pbmRleCwgc2VsZi5ncm91cCk7XG4gICAgICBzdG9wKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc3RvcCgpIHtcbiAgICBzZWxmLnN0YXRlID0gRU5ERUQ7XG4gICAgc2VsZi50aW1lci5zdG9wKCk7XG4gICAgZGVsZXRlIHNjaGVkdWxlc1tpZF07XG4gICAgZm9yICh2YXIgaSBpbiBzY2hlZHVsZXMpIHJldHVybjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIGRlbGV0ZSBub2RlLl9fdHJhbnNpdGlvbjtcbiAgfVxufVxuIiwiaW1wb3J0IHtzZWxlY3Rvcn0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHtUcmFuc2l0aW9ufSBmcm9tIFwiLi9pbmRleC5qc1wiO1xuaW1wb3J0IHNjaGVkdWxlLCB7Z2V0fSBmcm9tIFwiLi9zY2hlZHVsZS5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZWxlY3QpIHtcbiAgdmFyIG5hbWUgPSB0aGlzLl9uYW1lLFxuICAgICAgaWQgPSB0aGlzLl9pZDtcblxuICBpZiAodHlwZW9mIHNlbGVjdCAhPT0gXCJmdW5jdGlvblwiKSBzZWxlY3QgPSBzZWxlY3RvcihzZWxlY3QpO1xuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgbSA9IGdyb3Vwcy5sZW5ndGgsIHN1Ymdyb3VwcyA9IG5ldyBBcnJheShtKSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgc3ViZ3JvdXAgPSBzdWJncm91cHNbal0gPSBuZXcgQXJyYXkobiksIG5vZGUsIHN1Ym5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAoKG5vZGUgPSBncm91cFtpXSkgJiYgKHN1Ym5vZGUgPSBzZWxlY3QuY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBpLCBncm91cCkpKSB7XG4gICAgICAgIGlmIChcIl9fZGF0YV9fXCIgaW4gbm9kZSkgc3Vibm9kZS5fX2RhdGFfXyA9IG5vZGUuX19kYXRhX187XG4gICAgICAgIHN1Ymdyb3VwW2ldID0gc3Vibm9kZTtcbiAgICAgICAgc2NoZWR1bGUoc3ViZ3JvdXBbaV0sIG5hbWUsIGlkLCBpLCBzdWJncm91cCwgZ2V0KG5vZGUsIGlkKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ldyBUcmFuc2l0aW9uKHN1Ymdyb3VwcywgdGhpcy5fcGFyZW50cywgbmFtZSwgaWQpO1xufVxuIiwiaW1wb3J0IHtzZWxlY3RvckFsbH0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHtUcmFuc2l0aW9ufSBmcm9tIFwiLi9pbmRleC5qc1wiO1xuaW1wb3J0IHNjaGVkdWxlLCB7Z2V0fSBmcm9tIFwiLi9zY2hlZHVsZS5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZWxlY3QpIHtcbiAgdmFyIG5hbWUgPSB0aGlzLl9uYW1lLFxuICAgICAgaWQgPSB0aGlzLl9pZDtcblxuICBpZiAodHlwZW9mIHNlbGVjdCAhPT0gXCJmdW5jdGlvblwiKSBzZWxlY3QgPSBzZWxlY3RvckFsbChzZWxlY3QpO1xuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgbSA9IGdyb3Vwcy5sZW5ndGgsIHN1Ymdyb3VwcyA9IFtdLCBwYXJlbnRzID0gW10sIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIG4gPSBncm91cC5sZW5ndGgsIG5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7XG4gICAgICAgIGZvciAodmFyIGNoaWxkcmVuID0gc2VsZWN0LmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApLCBjaGlsZCwgaW5oZXJpdCA9IGdldChub2RlLCBpZCksIGsgPSAwLCBsID0gY2hpbGRyZW4ubGVuZ3RoOyBrIDwgbDsgKytrKSB7XG4gICAgICAgICAgaWYgKGNoaWxkID0gY2hpbGRyZW5ba10pIHtcbiAgICAgICAgICAgIHNjaGVkdWxlKGNoaWxkLCBuYW1lLCBpZCwgaywgY2hpbGRyZW4sIGluaGVyaXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzdWJncm91cHMucHVzaChjaGlsZHJlbik7XG4gICAgICAgIHBhcmVudHMucHVzaChub2RlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IFRyYW5zaXRpb24oc3ViZ3JvdXBzLCBwYXJlbnRzLCBuYW1lLCBpZCk7XG59XG4iLCJpbXBvcnQge3NlbGVjdGlvbn0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuXG52YXIgU2VsZWN0aW9uID0gc2VsZWN0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvcjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgU2VsZWN0aW9uKHRoaXMuX2dyb3VwcywgdGhpcy5fcGFyZW50cyk7XG59XG4iLCJpbXBvcnQge2ludGVycG9sYXRlVHJhbnNmb3JtQ3NzIGFzIGludGVycG9sYXRlVHJhbnNmb3JtfSBmcm9tIFwiZDMtaW50ZXJwb2xhdGVcIjtcbmltcG9ydCB7c3R5bGV9IGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcbmltcG9ydCB7c2V0fSBmcm9tIFwiLi9zY2hlZHVsZS5qc1wiO1xuaW1wb3J0IHt0d2VlblZhbHVlfSBmcm9tIFwiLi90d2Vlbi5qc1wiO1xuaW1wb3J0IGludGVycG9sYXRlIGZyb20gXCIuL2ludGVycG9sYXRlLmpzXCI7XG5cbmZ1bmN0aW9uIHN0eWxlTnVsbChuYW1lLCBpbnRlcnBvbGF0ZSkge1xuICB2YXIgc3RyaW5nMDAsXG4gICAgICBzdHJpbmcxMCxcbiAgICAgIGludGVycG9sYXRlMDtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzdHJpbmcwID0gc3R5bGUodGhpcywgbmFtZSksXG4gICAgICAgIHN0cmluZzEgPSAodGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuYW1lKSwgc3R5bGUodGhpcywgbmFtZSkpO1xuICAgIHJldHVybiBzdHJpbmcwID09PSBzdHJpbmcxID8gbnVsbFxuICAgICAgICA6IHN0cmluZzAgPT09IHN0cmluZzAwICYmIHN0cmluZzEgPT09IHN0cmluZzEwID8gaW50ZXJwb2xhdGUwXG4gICAgICAgIDogaW50ZXJwb2xhdGUwID0gaW50ZXJwb2xhdGUoc3RyaW5nMDAgPSBzdHJpbmcwLCBzdHJpbmcxMCA9IHN0cmluZzEpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBzdHlsZVJlbW92ZShuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG5hbWUpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBzdHlsZUNvbnN0YW50KG5hbWUsIGludGVycG9sYXRlLCB2YWx1ZTEpIHtcbiAgdmFyIHN0cmluZzAwLFxuICAgICAgc3RyaW5nMSA9IHZhbHVlMSArIFwiXCIsXG4gICAgICBpbnRlcnBvbGF0ZTA7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc3RyaW5nMCA9IHN0eWxlKHRoaXMsIG5hbWUpO1xuICAgIHJldHVybiBzdHJpbmcwID09PSBzdHJpbmcxID8gbnVsbFxuICAgICAgICA6IHN0cmluZzAgPT09IHN0cmluZzAwID8gaW50ZXJwb2xhdGUwXG4gICAgICAgIDogaW50ZXJwb2xhdGUwID0gaW50ZXJwb2xhdGUoc3RyaW5nMDAgPSBzdHJpbmcwLCB2YWx1ZTEpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBzdHlsZUZ1bmN0aW9uKG5hbWUsIGludGVycG9sYXRlLCB2YWx1ZSkge1xuICB2YXIgc3RyaW5nMDAsXG4gICAgICBzdHJpbmcxMCxcbiAgICAgIGludGVycG9sYXRlMDtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzdHJpbmcwID0gc3R5bGUodGhpcywgbmFtZSksXG4gICAgICAgIHZhbHVlMSA9IHZhbHVlKHRoaXMpLFxuICAgICAgICBzdHJpbmcxID0gdmFsdWUxICsgXCJcIjtcbiAgICBpZiAodmFsdWUxID09IG51bGwpIHN0cmluZzEgPSB2YWx1ZTEgPSAodGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuYW1lKSwgc3R5bGUodGhpcywgbmFtZSkpO1xuICAgIHJldHVybiBzdHJpbmcwID09PSBzdHJpbmcxID8gbnVsbFxuICAgICAgICA6IHN0cmluZzAgPT09IHN0cmluZzAwICYmIHN0cmluZzEgPT09IHN0cmluZzEwID8gaW50ZXJwb2xhdGUwXG4gICAgICAgIDogKHN0cmluZzEwID0gc3RyaW5nMSwgaW50ZXJwb2xhdGUwID0gaW50ZXJwb2xhdGUoc3RyaW5nMDAgPSBzdHJpbmcwLCB2YWx1ZTEpKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gc3R5bGVNYXliZVJlbW92ZShpZCwgbmFtZSkge1xuICB2YXIgb24wLCBvbjEsIGxpc3RlbmVyMCwga2V5ID0gXCJzdHlsZS5cIiArIG5hbWUsIGV2ZW50ID0gXCJlbmQuXCIgKyBrZXksIHJlbW92ZTtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzY2hlZHVsZSA9IHNldCh0aGlzLCBpZCksXG4gICAgICAgIG9uID0gc2NoZWR1bGUub24sXG4gICAgICAgIGxpc3RlbmVyID0gc2NoZWR1bGUudmFsdWVba2V5XSA9PSBudWxsID8gcmVtb3ZlIHx8IChyZW1vdmUgPSBzdHlsZVJlbW92ZShuYW1lKSkgOiB1bmRlZmluZWQ7XG5cbiAgICAvLyBJZiB0aGlzIG5vZGUgc2hhcmVkIGEgZGlzcGF0Y2ggd2l0aCB0aGUgcHJldmlvdXMgbm9kZSxcbiAgICAvLyBqdXN0IGFzc2lnbiB0aGUgdXBkYXRlZCBzaGFyZWQgZGlzcGF0Y2ggYW5kIHdl4oCZcmUgZG9uZSFcbiAgICAvLyBPdGhlcndpc2UsIGNvcHktb24td3JpdGUuXG4gICAgaWYgKG9uICE9PSBvbjAgfHwgbGlzdGVuZXIwICE9PSBsaXN0ZW5lcikgKG9uMSA9IChvbjAgPSBvbikuY29weSgpKS5vbihldmVudCwgbGlzdGVuZXIwID0gbGlzdGVuZXIpO1xuXG4gICAgc2NoZWR1bGUub24gPSBvbjE7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUsIHZhbHVlLCBwcmlvcml0eSkge1xuICB2YXIgaSA9IChuYW1lICs9IFwiXCIpID09PSBcInRyYW5zZm9ybVwiID8gaW50ZXJwb2xhdGVUcmFuc2Zvcm0gOiBpbnRlcnBvbGF0ZTtcbiAgcmV0dXJuIHZhbHVlID09IG51bGwgPyB0aGlzXG4gICAgICAuc3R5bGVUd2VlbihuYW1lLCBzdHlsZU51bGwobmFtZSwgaSkpXG4gICAgICAub24oXCJlbmQuc3R5bGUuXCIgKyBuYW1lLCBzdHlsZVJlbW92ZShuYW1lKSlcbiAgICA6IHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiID8gdGhpc1xuICAgICAgLnN0eWxlVHdlZW4obmFtZSwgc3R5bGVGdW5jdGlvbihuYW1lLCBpLCB0d2VlblZhbHVlKHRoaXMsIFwic3R5bGUuXCIgKyBuYW1lLCB2YWx1ZSkpKVxuICAgICAgLmVhY2goc3R5bGVNYXliZVJlbW92ZSh0aGlzLl9pZCwgbmFtZSkpXG4gICAgOiB0aGlzXG4gICAgICAuc3R5bGVUd2VlbihuYW1lLCBzdHlsZUNvbnN0YW50KG5hbWUsIGksIHZhbHVlKSwgcHJpb3JpdHkpXG4gICAgICAub24oXCJlbmQuc3R5bGUuXCIgKyBuYW1lLCBudWxsKTtcbn1cbiIsImZ1bmN0aW9uIHN0eWxlSW50ZXJwb2xhdGUobmFtZSwgaSwgcHJpb3JpdHkpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICB0aGlzLnN0eWxlLnNldFByb3BlcnR5KG5hbWUsIGkuY2FsbCh0aGlzLCB0KSwgcHJpb3JpdHkpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBzdHlsZVR3ZWVuKG5hbWUsIHZhbHVlLCBwcmlvcml0eSkge1xuICB2YXIgdCwgaTA7XG4gIGZ1bmN0aW9uIHR3ZWVuKCkge1xuICAgIHZhciBpID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAoaSAhPT0gaTApIHQgPSAoaTAgPSBpKSAmJiBzdHlsZUludGVycG9sYXRlKG5hbWUsIGksIHByaW9yaXR5KTtcbiAgICByZXR1cm4gdDtcbiAgfVxuICB0d2Vlbi5fdmFsdWUgPSB2YWx1ZTtcbiAgcmV0dXJuIHR3ZWVuO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSwgcHJpb3JpdHkpIHtcbiAgdmFyIGtleSA9IFwic3R5bGUuXCIgKyAobmFtZSArPSBcIlwiKTtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSByZXR1cm4gKGtleSA9IHRoaXMudHdlZW4oa2V5KSkgJiYga2V5Ll92YWx1ZTtcbiAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiB0aGlzLnR3ZWVuKGtleSwgbnVsbCk7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IEVycm9yO1xuICByZXR1cm4gdGhpcy50d2VlbihrZXksIHN0eWxlVHdlZW4obmFtZSwgdmFsdWUsIHByaW9yaXR5ID09IG51bGwgPyBcIlwiIDogcHJpb3JpdHkpKTtcbn1cbiIsImltcG9ydCB7dHdlZW5WYWx1ZX0gZnJvbSBcIi4vdHdlZW4uanNcIjtcblxuZnVuY3Rpb24gdGV4dENvbnN0YW50KHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnRleHRDb250ZW50ID0gdmFsdWU7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHRleHRGdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHZhbHVlMSA9IHZhbHVlKHRoaXMpO1xuICAgIHRoaXMudGV4dENvbnRlbnQgPSB2YWx1ZTEgPT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTE7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiB0aGlzLnR3ZWVuKFwidGV4dFwiLCB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgPyB0ZXh0RnVuY3Rpb24odHdlZW5WYWx1ZSh0aGlzLCBcInRleHRcIiwgdmFsdWUpKVxuICAgICAgOiB0ZXh0Q29uc3RhbnQodmFsdWUgPT0gbnVsbCA/IFwiXCIgOiB2YWx1ZSArIFwiXCIpKTtcbn1cbiIsImZ1bmN0aW9uIHRleHRJbnRlcnBvbGF0ZShpKSB7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgdGhpcy50ZXh0Q29udGVudCA9IGkuY2FsbCh0aGlzLCB0KTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gdGV4dFR3ZWVuKHZhbHVlKSB7XG4gIHZhciB0MCwgaTA7XG4gIGZ1bmN0aW9uIHR3ZWVuKCkge1xuICAgIHZhciBpID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAoaSAhPT0gaTApIHQwID0gKGkwID0gaSkgJiYgdGV4dEludGVycG9sYXRlKGkpO1xuICAgIHJldHVybiB0MDtcbiAgfVxuICB0d2Vlbi5fdmFsdWUgPSB2YWx1ZTtcbiAgcmV0dXJuIHR3ZWVuO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZSkge1xuICB2YXIga2V5ID0gXCJ0ZXh0XCI7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMSkgcmV0dXJuIChrZXkgPSB0aGlzLnR3ZWVuKGtleSkpICYmIGtleS5fdmFsdWU7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdGhpcy50d2VlbihrZXksIG51bGwpO1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBFcnJvcjtcbiAgcmV0dXJuIHRoaXMudHdlZW4oa2V5LCB0ZXh0VHdlZW4odmFsdWUpKTtcbn1cbiIsImltcG9ydCB7VHJhbnNpdGlvbiwgbmV3SWR9IGZyb20gXCIuL2luZGV4LmpzXCI7XG5pbXBvcnQgc2NoZWR1bGUsIHtnZXR9IGZyb20gXCIuL3NjaGVkdWxlLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgbmFtZSA9IHRoaXMuX25hbWUsXG4gICAgICBpZDAgPSB0aGlzLl9pZCxcbiAgICAgIGlkMSA9IG5ld0lkKCk7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgICAgdmFyIGluaGVyaXQgPSBnZXQobm9kZSwgaWQwKTtcbiAgICAgICAgc2NoZWR1bGUobm9kZSwgbmFtZSwgaWQxLCBpLCBncm91cCwge1xuICAgICAgICAgIHRpbWU6IGluaGVyaXQudGltZSArIGluaGVyaXQuZGVsYXkgKyBpbmhlcml0LmR1cmF0aW9uLFxuICAgICAgICAgIGRlbGF5OiAwLFxuICAgICAgICAgIGR1cmF0aW9uOiBpbmhlcml0LmR1cmF0aW9uLFxuICAgICAgICAgIGVhc2U6IGluaGVyaXQuZWFzZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IFRyYW5zaXRpb24oZ3JvdXBzLCB0aGlzLl9wYXJlbnRzLCBuYW1lLCBpZDEpO1xufVxuIiwiaW1wb3J0IHtnZXQsIHNldH0gZnJvbSBcIi4vc2NoZWR1bGUuanNcIjtcblxuZnVuY3Rpb24gdHdlZW5SZW1vdmUoaWQsIG5hbWUpIHtcbiAgdmFyIHR3ZWVuMCwgdHdlZW4xO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHNjaGVkdWxlID0gc2V0KHRoaXMsIGlkKSxcbiAgICAgICAgdHdlZW4gPSBzY2hlZHVsZS50d2VlbjtcblxuICAgIC8vIElmIHRoaXMgbm9kZSBzaGFyZWQgdHdlZW4gd2l0aCB0aGUgcHJldmlvdXMgbm9kZSxcbiAgICAvLyBqdXN0IGFzc2lnbiB0aGUgdXBkYXRlZCBzaGFyZWQgdHdlZW4gYW5kIHdl4oCZcmUgZG9uZSFcbiAgICAvLyBPdGhlcndpc2UsIGNvcHktb24td3JpdGUuXG4gICAgaWYgKHR3ZWVuICE9PSB0d2VlbjApIHtcbiAgICAgIHR3ZWVuMSA9IHR3ZWVuMCA9IHR3ZWVuO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIG4gPSB0d2VlbjEubGVuZ3RoOyBpIDwgbjsgKytpKSB7XG4gICAgICAgIGlmICh0d2VlbjFbaV0ubmFtZSA9PT0gbmFtZSkge1xuICAgICAgICAgIHR3ZWVuMSA9IHR3ZWVuMS5zbGljZSgpO1xuICAgICAgICAgIHR3ZWVuMS5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBzY2hlZHVsZS50d2VlbiA9IHR3ZWVuMTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gdHdlZW5GdW5jdGlvbihpZCwgbmFtZSwgdmFsdWUpIHtcbiAgdmFyIHR3ZWVuMCwgdHdlZW4xO1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBFcnJvcjtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzY2hlZHVsZSA9IHNldCh0aGlzLCBpZCksXG4gICAgICAgIHR3ZWVuID0gc2NoZWR1bGUudHdlZW47XG5cbiAgICAvLyBJZiB0aGlzIG5vZGUgc2hhcmVkIHR3ZWVuIHdpdGggdGhlIHByZXZpb3VzIG5vZGUsXG4gICAgLy8ganVzdCBhc3NpZ24gdGhlIHVwZGF0ZWQgc2hhcmVkIHR3ZWVuIGFuZCB3ZeKAmXJlIGRvbmUhXG4gICAgLy8gT3RoZXJ3aXNlLCBjb3B5LW9uLXdyaXRlLlxuICAgIGlmICh0d2VlbiAhPT0gdHdlZW4wKSB7XG4gICAgICB0d2VlbjEgPSAodHdlZW4wID0gdHdlZW4pLnNsaWNlKCk7XG4gICAgICBmb3IgKHZhciB0ID0ge25hbWU6IG5hbWUsIHZhbHVlOiB2YWx1ZX0sIGkgPSAwLCBuID0gdHdlZW4xLmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgICAgICBpZiAodHdlZW4xW2ldLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgICAgICB0d2VlbjFbaV0gPSB0O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaSA9PT0gbikgdHdlZW4xLnB1c2godCk7XG4gICAgfVxuXG4gICAgc2NoZWR1bGUudHdlZW4gPSB0d2VlbjE7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIHZhciBpZCA9IHRoaXMuX2lkO1xuXG4gIG5hbWUgKz0gXCJcIjtcblxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICB2YXIgdHdlZW4gPSBnZXQodGhpcy5ub2RlKCksIGlkKS50d2VlbjtcbiAgICBmb3IgKHZhciBpID0gMCwgbiA9IHR3ZWVuLmxlbmd0aCwgdDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKCh0ID0gdHdlZW5baV0pLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHQudmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuZWFjaCgodmFsdWUgPT0gbnVsbCA/IHR3ZWVuUmVtb3ZlIDogdHdlZW5GdW5jdGlvbikoaWQsIG5hbWUsIHZhbHVlKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0d2VlblZhbHVlKHRyYW5zaXRpb24sIG5hbWUsIHZhbHVlKSB7XG4gIHZhciBpZCA9IHRyYW5zaXRpb24uX2lkO1xuXG4gIHRyYW5zaXRpb24uZWFjaChmdW5jdGlvbigpIHtcbiAgICB2YXIgc2NoZWR1bGUgPSBzZXQodGhpcywgaWQpO1xuICAgIChzY2hlZHVsZS52YWx1ZSB8fCAoc2NoZWR1bGUudmFsdWUgPSB7fSkpW25hbWVdID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfSk7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKG5vZGUpIHtcbiAgICByZXR1cm4gZ2V0KG5vZGUsIGlkKS52YWx1ZVtuYW1lXTtcbiAgfTtcbn1cbiIsImltcG9ydCB7UmVkQmxhY2tOb2RlfSBmcm9tIFwiLi9SZWRCbGFja1RyZWVcIjtcbmltcG9ydCB7Y3JlYXRlQ2VsbH0gZnJvbSBcIi4vQ2VsbFwiO1xuaW1wb3J0IHthdHRhY2hDaXJjbGUsIGRldGFjaENpcmNsZX0gZnJvbSBcIi4vQ2lyY2xlXCI7XG5pbXBvcnQge2NyZWF0ZUVkZ2UsIHNldEVkZ2VFbmR9IGZyb20gXCIuL0VkZ2VcIjtcbmltcG9ydCB7YmVhY2hlcywgZXBzaWxvbn0gZnJvbSBcIi4vRGlhZ3JhbVwiO1xuXG52YXIgYmVhY2hQb29sID0gW107XG5cbmZ1bmN0aW9uIEJlYWNoKCkge1xuICBSZWRCbGFja05vZGUodGhpcyk7XG4gIHRoaXMuZWRnZSA9XG4gIHRoaXMuc2l0ZSA9XG4gIHRoaXMuY2lyY2xlID0gbnVsbDtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQmVhY2goc2l0ZSkge1xuICB2YXIgYmVhY2ggPSBiZWFjaFBvb2wucG9wKCkgfHwgbmV3IEJlYWNoO1xuICBiZWFjaC5zaXRlID0gc2l0ZTtcbiAgcmV0dXJuIGJlYWNoO1xufVxuXG5mdW5jdGlvbiBkZXRhY2hCZWFjaChiZWFjaCkge1xuICBkZXRhY2hDaXJjbGUoYmVhY2gpO1xuICBiZWFjaGVzLnJlbW92ZShiZWFjaCk7XG4gIGJlYWNoUG9vbC5wdXNoKGJlYWNoKTtcbiAgUmVkQmxhY2tOb2RlKGJlYWNoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUJlYWNoKGJlYWNoKSB7XG4gIHZhciBjaXJjbGUgPSBiZWFjaC5jaXJjbGUsXG4gICAgICB4ID0gY2lyY2xlLngsXG4gICAgICB5ID0gY2lyY2xlLmN5LFxuICAgICAgdmVydGV4ID0gW3gsIHldLFxuICAgICAgcHJldmlvdXMgPSBiZWFjaC5QLFxuICAgICAgbmV4dCA9IGJlYWNoLk4sXG4gICAgICBkaXNhcHBlYXJpbmcgPSBbYmVhY2hdO1xuXG4gIGRldGFjaEJlYWNoKGJlYWNoKTtcblxuICB2YXIgbEFyYyA9IHByZXZpb3VzO1xuICB3aGlsZSAobEFyYy5jaXJjbGVcbiAgICAgICYmIE1hdGguYWJzKHggLSBsQXJjLmNpcmNsZS54KSA8IGVwc2lsb25cbiAgICAgICYmIE1hdGguYWJzKHkgLSBsQXJjLmNpcmNsZS5jeSkgPCBlcHNpbG9uKSB7XG4gICAgcHJldmlvdXMgPSBsQXJjLlA7XG4gICAgZGlzYXBwZWFyaW5nLnVuc2hpZnQobEFyYyk7XG4gICAgZGV0YWNoQmVhY2gobEFyYyk7XG4gICAgbEFyYyA9IHByZXZpb3VzO1xuICB9XG5cbiAgZGlzYXBwZWFyaW5nLnVuc2hpZnQobEFyYyk7XG4gIGRldGFjaENpcmNsZShsQXJjKTtcblxuICB2YXIgckFyYyA9IG5leHQ7XG4gIHdoaWxlIChyQXJjLmNpcmNsZVxuICAgICAgJiYgTWF0aC5hYnMoeCAtIHJBcmMuY2lyY2xlLngpIDwgZXBzaWxvblxuICAgICAgJiYgTWF0aC5hYnMoeSAtIHJBcmMuY2lyY2xlLmN5KSA8IGVwc2lsb24pIHtcbiAgICBuZXh0ID0gckFyYy5OO1xuICAgIGRpc2FwcGVhcmluZy5wdXNoKHJBcmMpO1xuICAgIGRldGFjaEJlYWNoKHJBcmMpO1xuICAgIHJBcmMgPSBuZXh0O1xuICB9XG5cbiAgZGlzYXBwZWFyaW5nLnB1c2gockFyYyk7XG4gIGRldGFjaENpcmNsZShyQXJjKTtcblxuICB2YXIgbkFyY3MgPSBkaXNhcHBlYXJpbmcubGVuZ3RoLFxuICAgICAgaUFyYztcbiAgZm9yIChpQXJjID0gMTsgaUFyYyA8IG5BcmNzOyArK2lBcmMpIHtcbiAgICByQXJjID0gZGlzYXBwZWFyaW5nW2lBcmNdO1xuICAgIGxBcmMgPSBkaXNhcHBlYXJpbmdbaUFyYyAtIDFdO1xuICAgIHNldEVkZ2VFbmQockFyYy5lZGdlLCBsQXJjLnNpdGUsIHJBcmMuc2l0ZSwgdmVydGV4KTtcbiAgfVxuXG4gIGxBcmMgPSBkaXNhcHBlYXJpbmdbMF07XG4gIHJBcmMgPSBkaXNhcHBlYXJpbmdbbkFyY3MgLSAxXTtcbiAgckFyYy5lZGdlID0gY3JlYXRlRWRnZShsQXJjLnNpdGUsIHJBcmMuc2l0ZSwgbnVsbCwgdmVydGV4KTtcblxuICBhdHRhY2hDaXJjbGUobEFyYyk7XG4gIGF0dGFjaENpcmNsZShyQXJjKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZEJlYWNoKHNpdGUpIHtcbiAgdmFyIHggPSBzaXRlWzBdLFxuICAgICAgZGlyZWN0cml4ID0gc2l0ZVsxXSxcbiAgICAgIGxBcmMsXG4gICAgICByQXJjLFxuICAgICAgZHhsLFxuICAgICAgZHhyLFxuICAgICAgbm9kZSA9IGJlYWNoZXMuXztcblxuICB3aGlsZSAobm9kZSkge1xuICAgIGR4bCA9IGxlZnRCcmVha1BvaW50KG5vZGUsIGRpcmVjdHJpeCkgLSB4O1xuICAgIGlmIChkeGwgPiBlcHNpbG9uKSBub2RlID0gbm9kZS5MOyBlbHNlIHtcbiAgICAgIGR4ciA9IHggLSByaWdodEJyZWFrUG9pbnQobm9kZSwgZGlyZWN0cml4KTtcbiAgICAgIGlmIChkeHIgPiBlcHNpbG9uKSB7XG4gICAgICAgIGlmICghbm9kZS5SKSB7XG4gICAgICAgICAgbEFyYyA9IG5vZGU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgbm9kZSA9IG5vZGUuUjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChkeGwgPiAtZXBzaWxvbikge1xuICAgICAgICAgIGxBcmMgPSBub2RlLlA7XG4gICAgICAgICAgckFyYyA9IG5vZGU7XG4gICAgICAgIH0gZWxzZSBpZiAoZHhyID4gLWVwc2lsb24pIHtcbiAgICAgICAgICBsQXJjID0gbm9kZTtcbiAgICAgICAgICByQXJjID0gbm9kZS5OO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxBcmMgPSByQXJjID0gbm9kZTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjcmVhdGVDZWxsKHNpdGUpO1xuICB2YXIgbmV3QXJjID0gY3JlYXRlQmVhY2goc2l0ZSk7XG4gIGJlYWNoZXMuaW5zZXJ0KGxBcmMsIG5ld0FyYyk7XG5cbiAgaWYgKCFsQXJjICYmICFyQXJjKSByZXR1cm47XG5cbiAgaWYgKGxBcmMgPT09IHJBcmMpIHtcbiAgICBkZXRhY2hDaXJjbGUobEFyYyk7XG4gICAgckFyYyA9IGNyZWF0ZUJlYWNoKGxBcmMuc2l0ZSk7XG4gICAgYmVhY2hlcy5pbnNlcnQobmV3QXJjLCByQXJjKTtcbiAgICBuZXdBcmMuZWRnZSA9IHJBcmMuZWRnZSA9IGNyZWF0ZUVkZ2UobEFyYy5zaXRlLCBuZXdBcmMuc2l0ZSk7XG4gICAgYXR0YWNoQ2lyY2xlKGxBcmMpO1xuICAgIGF0dGFjaENpcmNsZShyQXJjKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoIXJBcmMpIHsgLy8gJiYgbEFyY1xuICAgIG5ld0FyYy5lZGdlID0gY3JlYXRlRWRnZShsQXJjLnNpdGUsIG5ld0FyYy5zaXRlKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBlbHNlIGxBcmMgIT09IHJBcmNcbiAgZGV0YWNoQ2lyY2xlKGxBcmMpO1xuICBkZXRhY2hDaXJjbGUockFyYyk7XG5cbiAgdmFyIGxTaXRlID0gbEFyYy5zaXRlLFxuICAgICAgYXggPSBsU2l0ZVswXSxcbiAgICAgIGF5ID0gbFNpdGVbMV0sXG4gICAgICBieCA9IHNpdGVbMF0gLSBheCxcbiAgICAgIGJ5ID0gc2l0ZVsxXSAtIGF5LFxuICAgICAgclNpdGUgPSByQXJjLnNpdGUsXG4gICAgICBjeCA9IHJTaXRlWzBdIC0gYXgsXG4gICAgICBjeSA9IHJTaXRlWzFdIC0gYXksXG4gICAgICBkID0gMiAqIChieCAqIGN5IC0gYnkgKiBjeCksXG4gICAgICBoYiA9IGJ4ICogYnggKyBieSAqIGJ5LFxuICAgICAgaGMgPSBjeCAqIGN4ICsgY3kgKiBjeSxcbiAgICAgIHZlcnRleCA9IFsoY3kgKiBoYiAtIGJ5ICogaGMpIC8gZCArIGF4LCAoYnggKiBoYyAtIGN4ICogaGIpIC8gZCArIGF5XTtcblxuICBzZXRFZGdlRW5kKHJBcmMuZWRnZSwgbFNpdGUsIHJTaXRlLCB2ZXJ0ZXgpO1xuICBuZXdBcmMuZWRnZSA9IGNyZWF0ZUVkZ2UobFNpdGUsIHNpdGUsIG51bGwsIHZlcnRleCk7XG4gIHJBcmMuZWRnZSA9IGNyZWF0ZUVkZ2Uoc2l0ZSwgclNpdGUsIG51bGwsIHZlcnRleCk7XG4gIGF0dGFjaENpcmNsZShsQXJjKTtcbiAgYXR0YWNoQ2lyY2xlKHJBcmMpO1xufVxuXG5mdW5jdGlvbiBsZWZ0QnJlYWtQb2ludChhcmMsIGRpcmVjdHJpeCkge1xuICB2YXIgc2l0ZSA9IGFyYy5zaXRlLFxuICAgICAgcmZvY3ggPSBzaXRlWzBdLFxuICAgICAgcmZvY3kgPSBzaXRlWzFdLFxuICAgICAgcGJ5MiA9IHJmb2N5IC0gZGlyZWN0cml4O1xuXG4gIGlmICghcGJ5MikgcmV0dXJuIHJmb2N4O1xuXG4gIHZhciBsQXJjID0gYXJjLlA7XG4gIGlmICghbEFyYykgcmV0dXJuIC1JbmZpbml0eTtcblxuICBzaXRlID0gbEFyYy5zaXRlO1xuICB2YXIgbGZvY3ggPSBzaXRlWzBdLFxuICAgICAgbGZvY3kgPSBzaXRlWzFdLFxuICAgICAgcGxieTIgPSBsZm9jeSAtIGRpcmVjdHJpeDtcblxuICBpZiAoIXBsYnkyKSByZXR1cm4gbGZvY3g7XG5cbiAgdmFyIGhsID0gbGZvY3ggLSByZm9jeCxcbiAgICAgIGFieTIgPSAxIC8gcGJ5MiAtIDEgLyBwbGJ5MixcbiAgICAgIGIgPSBobCAvIHBsYnkyO1xuXG4gIGlmIChhYnkyKSByZXR1cm4gKC1iICsgTWF0aC5zcXJ0KGIgKiBiIC0gMiAqIGFieTIgKiAoaGwgKiBobCAvICgtMiAqIHBsYnkyKSAtIGxmb2N5ICsgcGxieTIgLyAyICsgcmZvY3kgLSBwYnkyIC8gMikpKSAvIGFieTIgKyByZm9jeDtcblxuICByZXR1cm4gKHJmb2N4ICsgbGZvY3gpIC8gMjtcbn1cblxuZnVuY3Rpb24gcmlnaHRCcmVha1BvaW50KGFyYywgZGlyZWN0cml4KSB7XG4gIHZhciByQXJjID0gYXJjLk47XG4gIGlmIChyQXJjKSByZXR1cm4gbGVmdEJyZWFrUG9pbnQockFyYywgZGlyZWN0cml4KTtcbiAgdmFyIHNpdGUgPSBhcmMuc2l0ZTtcbiAgcmV0dXJuIHNpdGVbMV0gPT09IGRpcmVjdHJpeCA/IHNpdGVbMF0gOiBJbmZpbml0eTtcbn1cbiIsImltcG9ydCB7Y3JlYXRlQm9yZGVyRWRnZX0gZnJvbSBcIi4vRWRnZVwiO1xuaW1wb3J0IHtjZWxscywgZWRnZXMsIGVwc2lsb259IGZyb20gXCIuL0RpYWdyYW1cIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNlbGwoc2l0ZSkge1xuICByZXR1cm4gY2VsbHNbc2l0ZS5pbmRleF0gPSB7XG4gICAgc2l0ZTogc2l0ZSxcbiAgICBoYWxmZWRnZXM6IFtdXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNlbGxIYWxmZWRnZUFuZ2xlKGNlbGwsIGVkZ2UpIHtcbiAgdmFyIHNpdGUgPSBjZWxsLnNpdGUsXG4gICAgICB2YSA9IGVkZ2UubGVmdCxcbiAgICAgIHZiID0gZWRnZS5yaWdodDtcbiAgaWYgKHNpdGUgPT09IHZiKSB2YiA9IHZhLCB2YSA9IHNpdGU7XG4gIGlmICh2YikgcmV0dXJuIE1hdGguYXRhbjIodmJbMV0gLSB2YVsxXSwgdmJbMF0gLSB2YVswXSk7XG4gIGlmIChzaXRlID09PSB2YSkgdmEgPSBlZGdlWzFdLCB2YiA9IGVkZ2VbMF07XG4gIGVsc2UgdmEgPSBlZGdlWzBdLCB2YiA9IGVkZ2VbMV07XG4gIHJldHVybiBNYXRoLmF0YW4yKHZhWzBdIC0gdmJbMF0sIHZiWzFdIC0gdmFbMV0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2VsbEhhbGZlZGdlU3RhcnQoY2VsbCwgZWRnZSkge1xuICByZXR1cm4gZWRnZVsrKGVkZ2UubGVmdCAhPT0gY2VsbC5zaXRlKV07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjZWxsSGFsZmVkZ2VFbmQoY2VsbCwgZWRnZSkge1xuICByZXR1cm4gZWRnZVsrKGVkZ2UubGVmdCA9PT0gY2VsbC5zaXRlKV07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzb3J0Q2VsbEhhbGZlZGdlcygpIHtcbiAgZm9yICh2YXIgaSA9IDAsIG4gPSBjZWxscy5sZW5ndGgsIGNlbGwsIGhhbGZlZGdlcywgaiwgbTsgaSA8IG47ICsraSkge1xuICAgIGlmICgoY2VsbCA9IGNlbGxzW2ldKSAmJiAobSA9IChoYWxmZWRnZXMgPSBjZWxsLmhhbGZlZGdlcykubGVuZ3RoKSkge1xuICAgICAgdmFyIGluZGV4ID0gbmV3IEFycmF5KG0pLFxuICAgICAgICAgIGFycmF5ID0gbmV3IEFycmF5KG0pO1xuICAgICAgZm9yIChqID0gMDsgaiA8IG07ICsraikgaW5kZXhbal0gPSBqLCBhcnJheVtqXSA9IGNlbGxIYWxmZWRnZUFuZ2xlKGNlbGwsIGVkZ2VzW2hhbGZlZGdlc1tqXV0pO1xuICAgICAgaW5kZXguc29ydChmdW5jdGlvbihpLCBqKSB7IHJldHVybiBhcnJheVtqXSAtIGFycmF5W2ldOyB9KTtcbiAgICAgIGZvciAoaiA9IDA7IGogPCBtOyArK2opIGFycmF5W2pdID0gaGFsZmVkZ2VzW2luZGV4W2pdXTtcbiAgICAgIGZvciAoaiA9IDA7IGogPCBtOyArK2opIGhhbGZlZGdlc1tqXSA9IGFycmF5W2pdO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xpcENlbGxzKHgwLCB5MCwgeDEsIHkxKSB7XG4gIHZhciBuQ2VsbHMgPSBjZWxscy5sZW5ndGgsXG4gICAgICBpQ2VsbCxcbiAgICAgIGNlbGwsXG4gICAgICBzaXRlLFxuICAgICAgaUhhbGZlZGdlLFxuICAgICAgaGFsZmVkZ2VzLFxuICAgICAgbkhhbGZlZGdlcyxcbiAgICAgIHN0YXJ0LFxuICAgICAgc3RhcnRYLFxuICAgICAgc3RhcnRZLFxuICAgICAgZW5kLFxuICAgICAgZW5kWCxcbiAgICAgIGVuZFksXG4gICAgICBjb3ZlciA9IHRydWU7XG5cbiAgZm9yIChpQ2VsbCA9IDA7IGlDZWxsIDwgbkNlbGxzOyArK2lDZWxsKSB7XG4gICAgaWYgKGNlbGwgPSBjZWxsc1tpQ2VsbF0pIHtcbiAgICAgIHNpdGUgPSBjZWxsLnNpdGU7XG4gICAgICBoYWxmZWRnZXMgPSBjZWxsLmhhbGZlZGdlcztcbiAgICAgIGlIYWxmZWRnZSA9IGhhbGZlZGdlcy5sZW5ndGg7XG5cbiAgICAgIC8vIFJlbW92ZSBhbnkgZGFuZ2xpbmcgY2xpcHBlZCBlZGdlcy5cbiAgICAgIHdoaWxlIChpSGFsZmVkZ2UtLSkge1xuICAgICAgICBpZiAoIWVkZ2VzW2hhbGZlZGdlc1tpSGFsZmVkZ2VdXSkge1xuICAgICAgICAgIGhhbGZlZGdlcy5zcGxpY2UoaUhhbGZlZGdlLCAxKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBJbnNlcnQgYW55IGJvcmRlciBlZGdlcyBhcyBuZWNlc3NhcnkuXG4gICAgICBpSGFsZmVkZ2UgPSAwLCBuSGFsZmVkZ2VzID0gaGFsZmVkZ2VzLmxlbmd0aDtcbiAgICAgIHdoaWxlIChpSGFsZmVkZ2UgPCBuSGFsZmVkZ2VzKSB7XG4gICAgICAgIGVuZCA9IGNlbGxIYWxmZWRnZUVuZChjZWxsLCBlZGdlc1toYWxmZWRnZXNbaUhhbGZlZGdlXV0pLCBlbmRYID0gZW5kWzBdLCBlbmRZID0gZW5kWzFdO1xuICAgICAgICBzdGFydCA9IGNlbGxIYWxmZWRnZVN0YXJ0KGNlbGwsIGVkZ2VzW2hhbGZlZGdlc1srK2lIYWxmZWRnZSAlIG5IYWxmZWRnZXNdXSksIHN0YXJ0WCA9IHN0YXJ0WzBdLCBzdGFydFkgPSBzdGFydFsxXTtcbiAgICAgICAgaWYgKE1hdGguYWJzKGVuZFggLSBzdGFydFgpID4gZXBzaWxvbiB8fCBNYXRoLmFicyhlbmRZIC0gc3RhcnRZKSA+IGVwc2lsb24pIHtcbiAgICAgICAgICBoYWxmZWRnZXMuc3BsaWNlKGlIYWxmZWRnZSwgMCwgZWRnZXMucHVzaChjcmVhdGVCb3JkZXJFZGdlKHNpdGUsIGVuZCxcbiAgICAgICAgICAgICAgTWF0aC5hYnMoZW5kWCAtIHgwKSA8IGVwc2lsb24gJiYgeTEgLSBlbmRZID4gZXBzaWxvbiA/IFt4MCwgTWF0aC5hYnMoc3RhcnRYIC0geDApIDwgZXBzaWxvbiA/IHN0YXJ0WSA6IHkxXVxuICAgICAgICAgICAgICA6IE1hdGguYWJzKGVuZFkgLSB5MSkgPCBlcHNpbG9uICYmIHgxIC0gZW5kWCA+IGVwc2lsb24gPyBbTWF0aC5hYnMoc3RhcnRZIC0geTEpIDwgZXBzaWxvbiA/IHN0YXJ0WCA6IHgxLCB5MV1cbiAgICAgICAgICAgICAgOiBNYXRoLmFicyhlbmRYIC0geDEpIDwgZXBzaWxvbiAmJiBlbmRZIC0geTAgPiBlcHNpbG9uID8gW3gxLCBNYXRoLmFicyhzdGFydFggLSB4MSkgPCBlcHNpbG9uID8gc3RhcnRZIDogeTBdXG4gICAgICAgICAgICAgIDogTWF0aC5hYnMoZW5kWSAtIHkwKSA8IGVwc2lsb24gJiYgZW5kWCAtIHgwID4gZXBzaWxvbiA/IFtNYXRoLmFicyhzdGFydFkgLSB5MCkgPCBlcHNpbG9uID8gc3RhcnRYIDogeDAsIHkwXVxuICAgICAgICAgICAgICA6IG51bGwpKSAtIDEpO1xuICAgICAgICAgICsrbkhhbGZlZGdlcztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAobkhhbGZlZGdlcykgY292ZXIgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvLyBJZiB0aGVyZSB3ZXJlbuKAmXQgYW55IGVkZ2VzLCBoYXZlIHRoZSBjbG9zZXN0IHNpdGUgY292ZXIgdGhlIGV4dGVudC5cbiAgLy8gSXQgZG9lc27igJl0IG1hdHRlciB3aGljaCBjb3JuZXIgb2YgdGhlIGV4dGVudCB3ZSBtZWFzdXJlIVxuICBpZiAoY292ZXIpIHtcbiAgICB2YXIgZHgsIGR5LCBkMiwgZGMgPSBJbmZpbml0eTtcblxuICAgIGZvciAoaUNlbGwgPSAwLCBjb3ZlciA9IG51bGw7IGlDZWxsIDwgbkNlbGxzOyArK2lDZWxsKSB7XG4gICAgICBpZiAoY2VsbCA9IGNlbGxzW2lDZWxsXSkge1xuICAgICAgICBzaXRlID0gY2VsbC5zaXRlO1xuICAgICAgICBkeCA9IHNpdGVbMF0gLSB4MDtcbiAgICAgICAgZHkgPSBzaXRlWzFdIC0geTA7XG4gICAgICAgIGQyID0gZHggKiBkeCArIGR5ICogZHk7XG4gICAgICAgIGlmIChkMiA8IGRjKSBkYyA9IGQyLCBjb3ZlciA9IGNlbGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNvdmVyKSB7XG4gICAgICB2YXIgdjAwID0gW3gwLCB5MF0sIHYwMSA9IFt4MCwgeTFdLCB2MTEgPSBbeDEsIHkxXSwgdjEwID0gW3gxLCB5MF07XG4gICAgICBjb3Zlci5oYWxmZWRnZXMucHVzaChcbiAgICAgICAgZWRnZXMucHVzaChjcmVhdGVCb3JkZXJFZGdlKHNpdGUgPSBjb3Zlci5zaXRlLCB2MDAsIHYwMSkpIC0gMSxcbiAgICAgICAgZWRnZXMucHVzaChjcmVhdGVCb3JkZXJFZGdlKHNpdGUsIHYwMSwgdjExKSkgLSAxLFxuICAgICAgICBlZGdlcy5wdXNoKGNyZWF0ZUJvcmRlckVkZ2Uoc2l0ZSwgdjExLCB2MTApKSAtIDEsXG4gICAgICAgIGVkZ2VzLnB1c2goY3JlYXRlQm9yZGVyRWRnZShzaXRlLCB2MTAsIHYwMCkpIC0gMVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvLyBMYXN0bHkgZGVsZXRlIGFueSBjZWxscyB3aXRoIG5vIGVkZ2VzOyB0aGVzZSB3ZXJlIGVudGlyZWx5IGNsaXBwZWQuXG4gIGZvciAoaUNlbGwgPSAwOyBpQ2VsbCA8IG5DZWxsczsgKytpQ2VsbCkge1xuICAgIGlmIChjZWxsID0gY2VsbHNbaUNlbGxdKSB7XG4gICAgICBpZiAoIWNlbGwuaGFsZmVkZ2VzLmxlbmd0aCkge1xuICAgICAgICBkZWxldGUgY2VsbHNbaUNlbGxdO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHtSZWRCbGFja05vZGV9IGZyb20gXCIuL1JlZEJsYWNrVHJlZVwiO1xuaW1wb3J0IHtjaXJjbGVzLCBlcHNpbG9uMn0gZnJvbSBcIi4vRGlhZ3JhbVwiO1xuXG52YXIgY2lyY2xlUG9vbCA9IFtdO1xuXG5leHBvcnQgdmFyIGZpcnN0Q2lyY2xlO1xuXG5mdW5jdGlvbiBDaXJjbGUoKSB7XG4gIFJlZEJsYWNrTm9kZSh0aGlzKTtcbiAgdGhpcy54ID1cbiAgdGhpcy55ID1cbiAgdGhpcy5hcmMgPVxuICB0aGlzLnNpdGUgPVxuICB0aGlzLmN5ID0gbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGF0dGFjaENpcmNsZShhcmMpIHtcbiAgdmFyIGxBcmMgPSBhcmMuUCxcbiAgICAgIHJBcmMgPSBhcmMuTjtcblxuICBpZiAoIWxBcmMgfHwgIXJBcmMpIHJldHVybjtcblxuICB2YXIgbFNpdGUgPSBsQXJjLnNpdGUsXG4gICAgICBjU2l0ZSA9IGFyYy5zaXRlLFxuICAgICAgclNpdGUgPSByQXJjLnNpdGU7XG5cbiAgaWYgKGxTaXRlID09PSByU2l0ZSkgcmV0dXJuO1xuXG4gIHZhciBieCA9IGNTaXRlWzBdLFxuICAgICAgYnkgPSBjU2l0ZVsxXSxcbiAgICAgIGF4ID0gbFNpdGVbMF0gLSBieCxcbiAgICAgIGF5ID0gbFNpdGVbMV0gLSBieSxcbiAgICAgIGN4ID0gclNpdGVbMF0gLSBieCxcbiAgICAgIGN5ID0gclNpdGVbMV0gLSBieTtcblxuICB2YXIgZCA9IDIgKiAoYXggKiBjeSAtIGF5ICogY3gpO1xuICBpZiAoZCA+PSAtZXBzaWxvbjIpIHJldHVybjtcblxuICB2YXIgaGEgPSBheCAqIGF4ICsgYXkgKiBheSxcbiAgICAgIGhjID0gY3ggKiBjeCArIGN5ICogY3ksXG4gICAgICB4ID0gKGN5ICogaGEgLSBheSAqIGhjKSAvIGQsXG4gICAgICB5ID0gKGF4ICogaGMgLSBjeCAqIGhhKSAvIGQ7XG5cbiAgdmFyIGNpcmNsZSA9IGNpcmNsZVBvb2wucG9wKCkgfHwgbmV3IENpcmNsZTtcbiAgY2lyY2xlLmFyYyA9IGFyYztcbiAgY2lyY2xlLnNpdGUgPSBjU2l0ZTtcbiAgY2lyY2xlLnggPSB4ICsgYng7XG4gIGNpcmNsZS55ID0gKGNpcmNsZS5jeSA9IHkgKyBieSkgKyBNYXRoLnNxcnQoeCAqIHggKyB5ICogeSk7IC8vIHkgYm90dG9tXG5cbiAgYXJjLmNpcmNsZSA9IGNpcmNsZTtcblxuICB2YXIgYmVmb3JlID0gbnVsbCxcbiAgICAgIG5vZGUgPSBjaXJjbGVzLl87XG5cbiAgd2hpbGUgKG5vZGUpIHtcbiAgICBpZiAoY2lyY2xlLnkgPCBub2RlLnkgfHwgKGNpcmNsZS55ID09PSBub2RlLnkgJiYgY2lyY2xlLnggPD0gbm9kZS54KSkge1xuICAgICAgaWYgKG5vZGUuTCkgbm9kZSA9IG5vZGUuTDtcbiAgICAgIGVsc2UgeyBiZWZvcmUgPSBub2RlLlA7IGJyZWFrOyB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChub2RlLlIpIG5vZGUgPSBub2RlLlI7XG4gICAgICBlbHNlIHsgYmVmb3JlID0gbm9kZTsgYnJlYWs7IH1cbiAgICB9XG4gIH1cblxuICBjaXJjbGVzLmluc2VydChiZWZvcmUsIGNpcmNsZSk7XG4gIGlmICghYmVmb3JlKSBmaXJzdENpcmNsZSA9IGNpcmNsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRldGFjaENpcmNsZShhcmMpIHtcbiAgdmFyIGNpcmNsZSA9IGFyYy5jaXJjbGU7XG4gIGlmIChjaXJjbGUpIHtcbiAgICBpZiAoIWNpcmNsZS5QKSBmaXJzdENpcmNsZSA9IGNpcmNsZS5OO1xuICAgIGNpcmNsZXMucmVtb3ZlKGNpcmNsZSk7XG4gICAgY2lyY2xlUG9vbC5wdXNoKGNpcmNsZSk7XG4gICAgUmVkQmxhY2tOb2RlKGNpcmNsZSk7XG4gICAgYXJjLmNpcmNsZSA9IG51bGw7XG4gIH1cbn1cbiIsImltcG9ydCB7YWRkQmVhY2gsIHJlbW92ZUJlYWNofSBmcm9tIFwiLi9CZWFjaFwiO1xuaW1wb3J0IHtzb3J0Q2VsbEhhbGZlZGdlcywgY2VsbEhhbGZlZGdlU3RhcnQsIGNsaXBDZWxsc30gZnJvbSBcIi4vQ2VsbFwiO1xuaW1wb3J0IHtmaXJzdENpcmNsZX0gZnJvbSBcIi4vQ2lyY2xlXCI7XG5pbXBvcnQge2NsaXBFZGdlc30gZnJvbSBcIi4vRWRnZVwiO1xuaW1wb3J0IFJlZEJsYWNrVHJlZSBmcm9tIFwiLi9SZWRCbGFja1RyZWVcIjtcblxuZXhwb3J0IHZhciBlcHNpbG9uID0gMWUtNjtcbmV4cG9ydCB2YXIgZXBzaWxvbjIgPSAxZS0xMjtcbmV4cG9ydCB2YXIgYmVhY2hlcztcbmV4cG9ydCB2YXIgY2VsbHM7XG5leHBvcnQgdmFyIGNpcmNsZXM7XG5leHBvcnQgdmFyIGVkZ2VzO1xuXG5mdW5jdGlvbiB0cmlhbmdsZUFyZWEoYSwgYiwgYykge1xuICByZXR1cm4gKGFbMF0gLSBjWzBdKSAqIChiWzFdIC0gYVsxXSkgLSAoYVswXSAtIGJbMF0pICogKGNbMV0gLSBhWzFdKTtcbn1cblxuZnVuY3Rpb24gbGV4aWNvZ3JhcGhpYyhhLCBiKSB7XG4gIHJldHVybiBiWzFdIC0gYVsxXVxuICAgICAgfHwgYlswXSAtIGFbMF07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIERpYWdyYW0oc2l0ZXMsIGV4dGVudCkge1xuICB2YXIgc2l0ZSA9IHNpdGVzLnNvcnQobGV4aWNvZ3JhcGhpYykucG9wKCksXG4gICAgICB4LFxuICAgICAgeSxcbiAgICAgIGNpcmNsZTtcblxuICBlZGdlcyA9IFtdO1xuICBjZWxscyA9IG5ldyBBcnJheShzaXRlcy5sZW5ndGgpO1xuICBiZWFjaGVzID0gbmV3IFJlZEJsYWNrVHJlZTtcbiAgY2lyY2xlcyA9IG5ldyBSZWRCbGFja1RyZWU7XG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBjaXJjbGUgPSBmaXJzdENpcmNsZTtcbiAgICBpZiAoc2l0ZSAmJiAoIWNpcmNsZSB8fCBzaXRlWzFdIDwgY2lyY2xlLnkgfHwgKHNpdGVbMV0gPT09IGNpcmNsZS55ICYmIHNpdGVbMF0gPCBjaXJjbGUueCkpKSB7XG4gICAgICBpZiAoc2l0ZVswXSAhPT0geCB8fCBzaXRlWzFdICE9PSB5KSB7XG4gICAgICAgIGFkZEJlYWNoKHNpdGUpO1xuICAgICAgICB4ID0gc2l0ZVswXSwgeSA9IHNpdGVbMV07XG4gICAgICB9XG4gICAgICBzaXRlID0gc2l0ZXMucG9wKCk7XG4gICAgfSBlbHNlIGlmIChjaXJjbGUpIHtcbiAgICAgIHJlbW92ZUJlYWNoKGNpcmNsZS5hcmMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBzb3J0Q2VsbEhhbGZlZGdlcygpO1xuXG4gIGlmIChleHRlbnQpIHtcbiAgICB2YXIgeDAgPSArZXh0ZW50WzBdWzBdLFxuICAgICAgICB5MCA9ICtleHRlbnRbMF1bMV0sXG4gICAgICAgIHgxID0gK2V4dGVudFsxXVswXSxcbiAgICAgICAgeTEgPSArZXh0ZW50WzFdWzFdO1xuICAgIGNsaXBFZGdlcyh4MCwgeTAsIHgxLCB5MSk7XG4gICAgY2xpcENlbGxzKHgwLCB5MCwgeDEsIHkxKTtcbiAgfVxuXG4gIHRoaXMuZWRnZXMgPSBlZGdlcztcbiAgdGhpcy5jZWxscyA9IGNlbGxzO1xuXG4gIGJlYWNoZXMgPVxuICBjaXJjbGVzID1cbiAgZWRnZXMgPVxuICBjZWxscyA9IG51bGw7XG59XG5cbkRpYWdyYW0ucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogRGlhZ3JhbSxcblxuICBwb2x5Z29uczogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGVkZ2VzID0gdGhpcy5lZGdlcztcblxuICAgIHJldHVybiB0aGlzLmNlbGxzLm1hcChmdW5jdGlvbihjZWxsKSB7XG4gICAgICB2YXIgcG9seWdvbiA9IGNlbGwuaGFsZmVkZ2VzLm1hcChmdW5jdGlvbihpKSB7IHJldHVybiBjZWxsSGFsZmVkZ2VTdGFydChjZWxsLCBlZGdlc1tpXSk7IH0pO1xuICAgICAgcG9seWdvbi5kYXRhID0gY2VsbC5zaXRlLmRhdGE7XG4gICAgICByZXR1cm4gcG9seWdvbjtcbiAgICB9KTtcbiAgfSxcblxuICB0cmlhbmdsZXM6IGZ1bmN0aW9uKCkge1xuICAgIHZhciB0cmlhbmdsZXMgPSBbXSxcbiAgICAgICAgZWRnZXMgPSB0aGlzLmVkZ2VzO1xuXG4gICAgdGhpcy5jZWxscy5mb3JFYWNoKGZ1bmN0aW9uKGNlbGwsIGkpIHtcbiAgICAgIGlmICghKG0gPSAoaGFsZmVkZ2VzID0gY2VsbC5oYWxmZWRnZXMpLmxlbmd0aCkpIHJldHVybjtcbiAgICAgIHZhciBzaXRlID0gY2VsbC5zaXRlLFxuICAgICAgICAgIGhhbGZlZGdlcyxcbiAgICAgICAgICBqID0gLTEsXG4gICAgICAgICAgbSxcbiAgICAgICAgICBzMCxcbiAgICAgICAgICBlMSA9IGVkZ2VzW2hhbGZlZGdlc1ttIC0gMV1dLFxuICAgICAgICAgIHMxID0gZTEubGVmdCA9PT0gc2l0ZSA/IGUxLnJpZ2h0IDogZTEubGVmdDtcblxuICAgICAgd2hpbGUgKCsraiA8IG0pIHtcbiAgICAgICAgczAgPSBzMTtcbiAgICAgICAgZTEgPSBlZGdlc1toYWxmZWRnZXNbal1dO1xuICAgICAgICBzMSA9IGUxLmxlZnQgPT09IHNpdGUgPyBlMS5yaWdodCA6IGUxLmxlZnQ7XG4gICAgICAgIGlmIChzMCAmJiBzMSAmJiBpIDwgczAuaW5kZXggJiYgaSA8IHMxLmluZGV4ICYmIHRyaWFuZ2xlQXJlYShzaXRlLCBzMCwgczEpIDwgMCkge1xuICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKFtzaXRlLmRhdGEsIHMwLmRhdGEsIHMxLmRhdGFdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRyaWFuZ2xlcztcbiAgfSxcblxuICBsaW5rczogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZWRnZXMuZmlsdGVyKGZ1bmN0aW9uKGVkZ2UpIHtcbiAgICAgIHJldHVybiBlZGdlLnJpZ2h0O1xuICAgIH0pLm1hcChmdW5jdGlvbihlZGdlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzb3VyY2U6IGVkZ2UubGVmdC5kYXRhLFxuICAgICAgICB0YXJnZXQ6IGVkZ2UucmlnaHQuZGF0YVxuICAgICAgfTtcbiAgICB9KTtcbiAgfSxcblxuICBmaW5kOiBmdW5jdGlvbih4LCB5LCByYWRpdXMpIHtcbiAgICB2YXIgdGhhdCA9IHRoaXMsIGkwLCBpMSA9IHRoYXQuX2ZvdW5kIHx8IDAsIG4gPSB0aGF0LmNlbGxzLmxlbmd0aCwgY2VsbDtcblxuICAgIC8vIFVzZSB0aGUgcHJldmlvdXNseS1mb3VuZCBjZWxsLCBvciBzdGFydCB3aXRoIGFuIGFyYml0cmFyeSBvbmUuXG4gICAgd2hpbGUgKCEoY2VsbCA9IHRoYXQuY2VsbHNbaTFdKSkgaWYgKCsraTEgPj0gbikgcmV0dXJuIG51bGw7XG4gICAgdmFyIGR4ID0geCAtIGNlbGwuc2l0ZVswXSwgZHkgPSB5IC0gY2VsbC5zaXRlWzFdLCBkMiA9IGR4ICogZHggKyBkeSAqIGR5O1xuXG4gICAgLy8gVHJhdmVyc2UgdGhlIGhhbGYtZWRnZXMgdG8gZmluZCBhIGNsb3NlciBjZWxsLCBpZiBhbnkuXG4gICAgZG8ge1xuICAgICAgY2VsbCA9IHRoYXQuY2VsbHNbaTAgPSBpMV0sIGkxID0gbnVsbDtcbiAgICAgIGNlbGwuaGFsZmVkZ2VzLmZvckVhY2goZnVuY3Rpb24oZSkge1xuICAgICAgICB2YXIgZWRnZSA9IHRoYXQuZWRnZXNbZV0sIHYgPSBlZGdlLmxlZnQ7XG4gICAgICAgIGlmICgodiA9PT0gY2VsbC5zaXRlIHx8ICF2KSAmJiAhKHYgPSBlZGdlLnJpZ2h0KSkgcmV0dXJuO1xuICAgICAgICB2YXIgdnggPSB4IC0gdlswXSwgdnkgPSB5IC0gdlsxXSwgdjIgPSB2eCAqIHZ4ICsgdnkgKiB2eTtcbiAgICAgICAgaWYgKHYyIDwgZDIpIGQyID0gdjIsIGkxID0gdi5pbmRleDtcbiAgICAgIH0pO1xuICAgIH0gd2hpbGUgKGkxICE9PSBudWxsKTtcblxuICAgIHRoYXQuX2ZvdW5kID0gaTA7XG5cbiAgICByZXR1cm4gcmFkaXVzID09IG51bGwgfHwgZDIgPD0gcmFkaXVzICogcmFkaXVzID8gY2VsbC5zaXRlIDogbnVsbDtcbiAgfVxufVxuIiwiaW1wb3J0IHtjZWxscywgZWRnZXMsIGVwc2lsb259IGZyb20gXCIuL0RpYWdyYW1cIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUVkZ2UobGVmdCwgcmlnaHQsIHYwLCB2MSkge1xuICB2YXIgZWRnZSA9IFtudWxsLCBudWxsXSxcbiAgICAgIGluZGV4ID0gZWRnZXMucHVzaChlZGdlKSAtIDE7XG4gIGVkZ2UubGVmdCA9IGxlZnQ7XG4gIGVkZ2UucmlnaHQgPSByaWdodDtcbiAgaWYgKHYwKSBzZXRFZGdlRW5kKGVkZ2UsIGxlZnQsIHJpZ2h0LCB2MCk7XG4gIGlmICh2MSkgc2V0RWRnZUVuZChlZGdlLCByaWdodCwgbGVmdCwgdjEpO1xuICBjZWxsc1tsZWZ0LmluZGV4XS5oYWxmZWRnZXMucHVzaChpbmRleCk7XG4gIGNlbGxzW3JpZ2h0LmluZGV4XS5oYWxmZWRnZXMucHVzaChpbmRleCk7XG4gIHJldHVybiBlZGdlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQm9yZGVyRWRnZShsZWZ0LCB2MCwgdjEpIHtcbiAgdmFyIGVkZ2UgPSBbdjAsIHYxXTtcbiAgZWRnZS5sZWZ0ID0gbGVmdDtcbiAgcmV0dXJuIGVkZ2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRFZGdlRW5kKGVkZ2UsIGxlZnQsIHJpZ2h0LCB2ZXJ0ZXgpIHtcbiAgaWYgKCFlZGdlWzBdICYmICFlZGdlWzFdKSB7XG4gICAgZWRnZVswXSA9IHZlcnRleDtcbiAgICBlZGdlLmxlZnQgPSBsZWZ0O1xuICAgIGVkZ2UucmlnaHQgPSByaWdodDtcbiAgfSBlbHNlIGlmIChlZGdlLmxlZnQgPT09IHJpZ2h0KSB7XG4gICAgZWRnZVsxXSA9IHZlcnRleDtcbiAgfSBlbHNlIHtcbiAgICBlZGdlWzBdID0gdmVydGV4O1xuICB9XG59XG5cbi8vIExpYW5n4oCTQmFyc2t5IGxpbmUgY2xpcHBpbmcuXG5mdW5jdGlvbiBjbGlwRWRnZShlZGdlLCB4MCwgeTAsIHgxLCB5MSkge1xuICB2YXIgYSA9IGVkZ2VbMF0sXG4gICAgICBiID0gZWRnZVsxXSxcbiAgICAgIGF4ID0gYVswXSxcbiAgICAgIGF5ID0gYVsxXSxcbiAgICAgIGJ4ID0gYlswXSxcbiAgICAgIGJ5ID0gYlsxXSxcbiAgICAgIHQwID0gMCxcbiAgICAgIHQxID0gMSxcbiAgICAgIGR4ID0gYnggLSBheCxcbiAgICAgIGR5ID0gYnkgLSBheSxcbiAgICAgIHI7XG5cbiAgciA9IHgwIC0gYXg7XG4gIGlmICghZHggJiYgciA+IDApIHJldHVybjtcbiAgciAvPSBkeDtcbiAgaWYgKGR4IDwgMCkge1xuICAgIGlmIChyIDwgdDApIHJldHVybjtcbiAgICBpZiAociA8IHQxKSB0MSA9IHI7XG4gIH0gZWxzZSBpZiAoZHggPiAwKSB7XG4gICAgaWYgKHIgPiB0MSkgcmV0dXJuO1xuICAgIGlmIChyID4gdDApIHQwID0gcjtcbiAgfVxuXG4gIHIgPSB4MSAtIGF4O1xuICBpZiAoIWR4ICYmIHIgPCAwKSByZXR1cm47XG4gIHIgLz0gZHg7XG4gIGlmIChkeCA8IDApIHtcbiAgICBpZiAociA+IHQxKSByZXR1cm47XG4gICAgaWYgKHIgPiB0MCkgdDAgPSByO1xuICB9IGVsc2UgaWYgKGR4ID4gMCkge1xuICAgIGlmIChyIDwgdDApIHJldHVybjtcbiAgICBpZiAociA8IHQxKSB0MSA9IHI7XG4gIH1cblxuICByID0geTAgLSBheTtcbiAgaWYgKCFkeSAmJiByID4gMCkgcmV0dXJuO1xuICByIC89IGR5O1xuICBpZiAoZHkgPCAwKSB7XG4gICAgaWYgKHIgPCB0MCkgcmV0dXJuO1xuICAgIGlmIChyIDwgdDEpIHQxID0gcjtcbiAgfSBlbHNlIGlmIChkeSA+IDApIHtcbiAgICBpZiAociA+IHQxKSByZXR1cm47XG4gICAgaWYgKHIgPiB0MCkgdDAgPSByO1xuICB9XG5cbiAgciA9IHkxIC0gYXk7XG4gIGlmICghZHkgJiYgciA8IDApIHJldHVybjtcbiAgciAvPSBkeTtcbiAgaWYgKGR5IDwgMCkge1xuICAgIGlmIChyID4gdDEpIHJldHVybjtcbiAgICBpZiAociA+IHQwKSB0MCA9IHI7XG4gIH0gZWxzZSBpZiAoZHkgPiAwKSB7XG4gICAgaWYgKHIgPCB0MCkgcmV0dXJuO1xuICAgIGlmIChyIDwgdDEpIHQxID0gcjtcbiAgfVxuXG4gIGlmICghKHQwID4gMCkgJiYgISh0MSA8IDEpKSByZXR1cm4gdHJ1ZTsgLy8gVE9ETyBCZXR0ZXIgY2hlY2s/XG5cbiAgaWYgKHQwID4gMCkgZWRnZVswXSA9IFtheCArIHQwICogZHgsIGF5ICsgdDAgKiBkeV07XG4gIGlmICh0MSA8IDEpIGVkZ2VbMV0gPSBbYXggKyB0MSAqIGR4LCBheSArIHQxICogZHldO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gY29ubmVjdEVkZ2UoZWRnZSwgeDAsIHkwLCB4MSwgeTEpIHtcbiAgdmFyIHYxID0gZWRnZVsxXTtcbiAgaWYgKHYxKSByZXR1cm4gdHJ1ZTtcblxuICB2YXIgdjAgPSBlZGdlWzBdLFxuICAgICAgbGVmdCA9IGVkZ2UubGVmdCxcbiAgICAgIHJpZ2h0ID0gZWRnZS5yaWdodCxcbiAgICAgIGx4ID0gbGVmdFswXSxcbiAgICAgIGx5ID0gbGVmdFsxXSxcbiAgICAgIHJ4ID0gcmlnaHRbMF0sXG4gICAgICByeSA9IHJpZ2h0WzFdLFxuICAgICAgZnggPSAobHggKyByeCkgLyAyLFxuICAgICAgZnkgPSAobHkgKyByeSkgLyAyLFxuICAgICAgZm0sXG4gICAgICBmYjtcblxuICBpZiAocnkgPT09IGx5KSB7XG4gICAgaWYgKGZ4IDwgeDAgfHwgZnggPj0geDEpIHJldHVybjtcbiAgICBpZiAobHggPiByeCkge1xuICAgICAgaWYgKCF2MCkgdjAgPSBbZngsIHkwXTtcbiAgICAgIGVsc2UgaWYgKHYwWzFdID49IHkxKSByZXR1cm47XG4gICAgICB2MSA9IFtmeCwgeTFdO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIXYwKSB2MCA9IFtmeCwgeTFdO1xuICAgICAgZWxzZSBpZiAodjBbMV0gPCB5MCkgcmV0dXJuO1xuICAgICAgdjEgPSBbZngsIHkwXTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm0gPSAobHggLSByeCkgLyAocnkgLSBseSk7XG4gICAgZmIgPSBmeSAtIGZtICogZng7XG4gICAgaWYgKGZtIDwgLTEgfHwgZm0gPiAxKSB7XG4gICAgICBpZiAobHggPiByeCkge1xuICAgICAgICBpZiAoIXYwKSB2MCA9IFsoeTAgLSBmYikgLyBmbSwgeTBdO1xuICAgICAgICBlbHNlIGlmICh2MFsxXSA+PSB5MSkgcmV0dXJuO1xuICAgICAgICB2MSA9IFsoeTEgLSBmYikgLyBmbSwgeTFdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCF2MCkgdjAgPSBbKHkxIC0gZmIpIC8gZm0sIHkxXTtcbiAgICAgICAgZWxzZSBpZiAodjBbMV0gPCB5MCkgcmV0dXJuO1xuICAgICAgICB2MSA9IFsoeTAgLSBmYikgLyBmbSwgeTBdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAobHkgPCByeSkge1xuICAgICAgICBpZiAoIXYwKSB2MCA9IFt4MCwgZm0gKiB4MCArIGZiXTtcbiAgICAgICAgZWxzZSBpZiAodjBbMF0gPj0geDEpIHJldHVybjtcbiAgICAgICAgdjEgPSBbeDEsIGZtICogeDEgKyBmYl07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoIXYwKSB2MCA9IFt4MSwgZm0gKiB4MSArIGZiXTtcbiAgICAgICAgZWxzZSBpZiAodjBbMF0gPCB4MCkgcmV0dXJuO1xuICAgICAgICB2MSA9IFt4MCwgZm0gKiB4MCArIGZiXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBlZGdlWzBdID0gdjA7XG4gIGVkZ2VbMV0gPSB2MTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGlwRWRnZXMoeDAsIHkwLCB4MSwgeTEpIHtcbiAgdmFyIGkgPSBlZGdlcy5sZW5ndGgsXG4gICAgICBlZGdlO1xuXG4gIHdoaWxlIChpLS0pIHtcbiAgICBpZiAoIWNvbm5lY3RFZGdlKGVkZ2UgPSBlZGdlc1tpXSwgeDAsIHkwLCB4MSwgeTEpXG4gICAgICAgIHx8ICFjbGlwRWRnZShlZGdlLCB4MCwgeTAsIHgxLCB5MSlcbiAgICAgICAgfHwgIShNYXRoLmFicyhlZGdlWzBdWzBdIC0gZWRnZVsxXVswXSkgPiBlcHNpbG9uXG4gICAgICAgICAgICB8fCBNYXRoLmFicyhlZGdlWzBdWzFdIC0gZWRnZVsxXVsxXSkgPiBlcHNpbG9uKSkge1xuICAgICAgZGVsZXRlIGVkZ2VzW2ldO1xuICAgIH1cbiAgfVxufVxuIiwiZnVuY3Rpb24gUmVkQmxhY2tUcmVlKCkge1xuICB0aGlzLl8gPSBudWxsOyAvLyByb290IG5vZGVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFJlZEJsYWNrTm9kZShub2RlKSB7XG4gIG5vZGUuVSA9IC8vIHBhcmVudCBub2RlXG4gIG5vZGUuQyA9IC8vIGNvbG9yIC0gdHJ1ZSBmb3IgcmVkLCBmYWxzZSBmb3IgYmxhY2tcbiAgbm9kZS5MID0gLy8gbGVmdCBub2RlXG4gIG5vZGUuUiA9IC8vIHJpZ2h0IG5vZGVcbiAgbm9kZS5QID0gLy8gcHJldmlvdXMgbm9kZVxuICBub2RlLk4gPSBudWxsOyAvLyBuZXh0IG5vZGVcbn1cblxuUmVkQmxhY2tUcmVlLnByb3RvdHlwZSA9IHtcbiAgY29uc3RydWN0b3I6IFJlZEJsYWNrVHJlZSxcblxuICBpbnNlcnQ6IGZ1bmN0aW9uKGFmdGVyLCBub2RlKSB7XG4gICAgdmFyIHBhcmVudCwgZ3JhbmRwYSwgdW5jbGU7XG5cbiAgICBpZiAoYWZ0ZXIpIHtcbiAgICAgIG5vZGUuUCA9IGFmdGVyO1xuICAgICAgbm9kZS5OID0gYWZ0ZXIuTjtcbiAgICAgIGlmIChhZnRlci5OKSBhZnRlci5OLlAgPSBub2RlO1xuICAgICAgYWZ0ZXIuTiA9IG5vZGU7XG4gICAgICBpZiAoYWZ0ZXIuUikge1xuICAgICAgICBhZnRlciA9IGFmdGVyLlI7XG4gICAgICAgIHdoaWxlIChhZnRlci5MKSBhZnRlciA9IGFmdGVyLkw7XG4gICAgICAgIGFmdGVyLkwgPSBub2RlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWZ0ZXIuUiA9IG5vZGU7XG4gICAgICB9XG4gICAgICBwYXJlbnQgPSBhZnRlcjtcbiAgICB9IGVsc2UgaWYgKHRoaXMuXykge1xuICAgICAgYWZ0ZXIgPSBSZWRCbGFja0ZpcnN0KHRoaXMuXyk7XG4gICAgICBub2RlLlAgPSBudWxsO1xuICAgICAgbm9kZS5OID0gYWZ0ZXI7XG4gICAgICBhZnRlci5QID0gYWZ0ZXIuTCA9IG5vZGU7XG4gICAgICBwYXJlbnQgPSBhZnRlcjtcbiAgICB9IGVsc2Uge1xuICAgICAgbm9kZS5QID0gbm9kZS5OID0gbnVsbDtcbiAgICAgIHRoaXMuXyA9IG5vZGU7XG4gICAgICBwYXJlbnQgPSBudWxsO1xuICAgIH1cbiAgICBub2RlLkwgPSBub2RlLlIgPSBudWxsO1xuICAgIG5vZGUuVSA9IHBhcmVudDtcbiAgICBub2RlLkMgPSB0cnVlO1xuXG4gICAgYWZ0ZXIgPSBub2RlO1xuICAgIHdoaWxlIChwYXJlbnQgJiYgcGFyZW50LkMpIHtcbiAgICAgIGdyYW5kcGEgPSBwYXJlbnQuVTtcbiAgICAgIGlmIChwYXJlbnQgPT09IGdyYW5kcGEuTCkge1xuICAgICAgICB1bmNsZSA9IGdyYW5kcGEuUjtcbiAgICAgICAgaWYgKHVuY2xlICYmIHVuY2xlLkMpIHtcbiAgICAgICAgICBwYXJlbnQuQyA9IHVuY2xlLkMgPSBmYWxzZTtcbiAgICAgICAgICBncmFuZHBhLkMgPSB0cnVlO1xuICAgICAgICAgIGFmdGVyID0gZ3JhbmRwYTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoYWZ0ZXIgPT09IHBhcmVudC5SKSB7XG4gICAgICAgICAgICBSZWRCbGFja1JvdGF0ZUxlZnQodGhpcywgcGFyZW50KTtcbiAgICAgICAgICAgIGFmdGVyID0gcGFyZW50O1xuICAgICAgICAgICAgcGFyZW50ID0gYWZ0ZXIuVTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcGFyZW50LkMgPSBmYWxzZTtcbiAgICAgICAgICBncmFuZHBhLkMgPSB0cnVlO1xuICAgICAgICAgIFJlZEJsYWNrUm90YXRlUmlnaHQodGhpcywgZ3JhbmRwYSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVuY2xlID0gZ3JhbmRwYS5MO1xuICAgICAgICBpZiAodW5jbGUgJiYgdW5jbGUuQykge1xuICAgICAgICAgIHBhcmVudC5DID0gdW5jbGUuQyA9IGZhbHNlO1xuICAgICAgICAgIGdyYW5kcGEuQyA9IHRydWU7XG4gICAgICAgICAgYWZ0ZXIgPSBncmFuZHBhO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChhZnRlciA9PT0gcGFyZW50LkwpIHtcbiAgICAgICAgICAgIFJlZEJsYWNrUm90YXRlUmlnaHQodGhpcywgcGFyZW50KTtcbiAgICAgICAgICAgIGFmdGVyID0gcGFyZW50O1xuICAgICAgICAgICAgcGFyZW50ID0gYWZ0ZXIuVTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcGFyZW50LkMgPSBmYWxzZTtcbiAgICAgICAgICBncmFuZHBhLkMgPSB0cnVlO1xuICAgICAgICAgIFJlZEJsYWNrUm90YXRlTGVmdCh0aGlzLCBncmFuZHBhKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcGFyZW50ID0gYWZ0ZXIuVTtcbiAgICB9XG4gICAgdGhpcy5fLkMgPSBmYWxzZTtcbiAgfSxcblxuICByZW1vdmU6IGZ1bmN0aW9uKG5vZGUpIHtcbiAgICBpZiAobm9kZS5OKSBub2RlLk4uUCA9IG5vZGUuUDtcbiAgICBpZiAobm9kZS5QKSBub2RlLlAuTiA9IG5vZGUuTjtcbiAgICBub2RlLk4gPSBub2RlLlAgPSBudWxsO1xuXG4gICAgdmFyIHBhcmVudCA9IG5vZGUuVSxcbiAgICAgICAgc2libGluZyxcbiAgICAgICAgbGVmdCA9IG5vZGUuTCxcbiAgICAgICAgcmlnaHQgPSBub2RlLlIsXG4gICAgICAgIG5leHQsXG4gICAgICAgIHJlZDtcblxuICAgIGlmICghbGVmdCkgbmV4dCA9IHJpZ2h0O1xuICAgIGVsc2UgaWYgKCFyaWdodCkgbmV4dCA9IGxlZnQ7XG4gICAgZWxzZSBuZXh0ID0gUmVkQmxhY2tGaXJzdChyaWdodCk7XG5cbiAgICBpZiAocGFyZW50KSB7XG4gICAgICBpZiAocGFyZW50LkwgPT09IG5vZGUpIHBhcmVudC5MID0gbmV4dDtcbiAgICAgIGVsc2UgcGFyZW50LlIgPSBuZXh0O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl8gPSBuZXh0O1xuICAgIH1cblxuICAgIGlmIChsZWZ0ICYmIHJpZ2h0KSB7XG4gICAgICByZWQgPSBuZXh0LkM7XG4gICAgICBuZXh0LkMgPSBub2RlLkM7XG4gICAgICBuZXh0LkwgPSBsZWZ0O1xuICAgICAgbGVmdC5VID0gbmV4dDtcbiAgICAgIGlmIChuZXh0ICE9PSByaWdodCkge1xuICAgICAgICBwYXJlbnQgPSBuZXh0LlU7XG4gICAgICAgIG5leHQuVSA9IG5vZGUuVTtcbiAgICAgICAgbm9kZSA9IG5leHQuUjtcbiAgICAgICAgcGFyZW50LkwgPSBub2RlO1xuICAgICAgICBuZXh0LlIgPSByaWdodDtcbiAgICAgICAgcmlnaHQuVSA9IG5leHQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXh0LlUgPSBwYXJlbnQ7XG4gICAgICAgIHBhcmVudCA9IG5leHQ7XG4gICAgICAgIG5vZGUgPSBuZXh0LlI7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlZCA9IG5vZGUuQztcbiAgICAgIG5vZGUgPSBuZXh0O1xuICAgIH1cblxuICAgIGlmIChub2RlKSBub2RlLlUgPSBwYXJlbnQ7XG4gICAgaWYgKHJlZCkgcmV0dXJuO1xuICAgIGlmIChub2RlICYmIG5vZGUuQykgeyBub2RlLkMgPSBmYWxzZTsgcmV0dXJuOyB9XG5cbiAgICBkbyB7XG4gICAgICBpZiAobm9kZSA9PT0gdGhpcy5fKSBicmVhaztcbiAgICAgIGlmIChub2RlID09PSBwYXJlbnQuTCkge1xuICAgICAgICBzaWJsaW5nID0gcGFyZW50LlI7XG4gICAgICAgIGlmIChzaWJsaW5nLkMpIHtcbiAgICAgICAgICBzaWJsaW5nLkMgPSBmYWxzZTtcbiAgICAgICAgICBwYXJlbnQuQyA9IHRydWU7XG4gICAgICAgICAgUmVkQmxhY2tSb3RhdGVMZWZ0KHRoaXMsIHBhcmVudCk7XG4gICAgICAgICAgc2libGluZyA9IHBhcmVudC5SO1xuICAgICAgICB9XG4gICAgICAgIGlmICgoc2libGluZy5MICYmIHNpYmxpbmcuTC5DKVxuICAgICAgICAgICAgfHwgKHNpYmxpbmcuUiAmJiBzaWJsaW5nLlIuQykpIHtcbiAgICAgICAgICBpZiAoIXNpYmxpbmcuUiB8fCAhc2libGluZy5SLkMpIHtcbiAgICAgICAgICAgIHNpYmxpbmcuTC5DID0gZmFsc2U7XG4gICAgICAgICAgICBzaWJsaW5nLkMgPSB0cnVlO1xuICAgICAgICAgICAgUmVkQmxhY2tSb3RhdGVSaWdodCh0aGlzLCBzaWJsaW5nKTtcbiAgICAgICAgICAgIHNpYmxpbmcgPSBwYXJlbnQuUjtcbiAgICAgICAgICB9XG4gICAgICAgICAgc2libGluZy5DID0gcGFyZW50LkM7XG4gICAgICAgICAgcGFyZW50LkMgPSBzaWJsaW5nLlIuQyA9IGZhbHNlO1xuICAgICAgICAgIFJlZEJsYWNrUm90YXRlTGVmdCh0aGlzLCBwYXJlbnQpO1xuICAgICAgICAgIG5vZGUgPSB0aGlzLl87XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNpYmxpbmcgPSBwYXJlbnQuTDtcbiAgICAgICAgaWYgKHNpYmxpbmcuQykge1xuICAgICAgICAgIHNpYmxpbmcuQyA9IGZhbHNlO1xuICAgICAgICAgIHBhcmVudC5DID0gdHJ1ZTtcbiAgICAgICAgICBSZWRCbGFja1JvdGF0ZVJpZ2h0KHRoaXMsIHBhcmVudCk7XG4gICAgICAgICAgc2libGluZyA9IHBhcmVudC5MO1xuICAgICAgICB9XG4gICAgICAgIGlmICgoc2libGluZy5MICYmIHNpYmxpbmcuTC5DKVxuICAgICAgICAgIHx8IChzaWJsaW5nLlIgJiYgc2libGluZy5SLkMpKSB7XG4gICAgICAgICAgaWYgKCFzaWJsaW5nLkwgfHwgIXNpYmxpbmcuTC5DKSB7XG4gICAgICAgICAgICBzaWJsaW5nLlIuQyA9IGZhbHNlO1xuICAgICAgICAgICAgc2libGluZy5DID0gdHJ1ZTtcbiAgICAgICAgICAgIFJlZEJsYWNrUm90YXRlTGVmdCh0aGlzLCBzaWJsaW5nKTtcbiAgICAgICAgICAgIHNpYmxpbmcgPSBwYXJlbnQuTDtcbiAgICAgICAgICB9XG4gICAgICAgICAgc2libGluZy5DID0gcGFyZW50LkM7XG4gICAgICAgICAgcGFyZW50LkMgPSBzaWJsaW5nLkwuQyA9IGZhbHNlO1xuICAgICAgICAgIFJlZEJsYWNrUm90YXRlUmlnaHQodGhpcywgcGFyZW50KTtcbiAgICAgICAgICBub2RlID0gdGhpcy5fO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzaWJsaW5nLkMgPSB0cnVlO1xuICAgICAgbm9kZSA9IHBhcmVudDtcbiAgICAgIHBhcmVudCA9IHBhcmVudC5VO1xuICAgIH0gd2hpbGUgKCFub2RlLkMpO1xuXG4gICAgaWYgKG5vZGUpIG5vZGUuQyA9IGZhbHNlO1xuICB9XG59O1xuXG5mdW5jdGlvbiBSZWRCbGFja1JvdGF0ZUxlZnQodHJlZSwgbm9kZSkge1xuICB2YXIgcCA9IG5vZGUsXG4gICAgICBxID0gbm9kZS5SLFxuICAgICAgcGFyZW50ID0gcC5VO1xuXG4gIGlmIChwYXJlbnQpIHtcbiAgICBpZiAocGFyZW50LkwgPT09IHApIHBhcmVudC5MID0gcTtcbiAgICBlbHNlIHBhcmVudC5SID0gcTtcbiAgfSBlbHNlIHtcbiAgICB0cmVlLl8gPSBxO1xuICB9XG5cbiAgcS5VID0gcGFyZW50O1xuICBwLlUgPSBxO1xuICBwLlIgPSBxLkw7XG4gIGlmIChwLlIpIHAuUi5VID0gcDtcbiAgcS5MID0gcDtcbn1cblxuZnVuY3Rpb24gUmVkQmxhY2tSb3RhdGVSaWdodCh0cmVlLCBub2RlKSB7XG4gIHZhciBwID0gbm9kZSxcbiAgICAgIHEgPSBub2RlLkwsXG4gICAgICBwYXJlbnQgPSBwLlU7XG5cbiAgaWYgKHBhcmVudCkge1xuICAgIGlmIChwYXJlbnQuTCA9PT0gcCkgcGFyZW50LkwgPSBxO1xuICAgIGVsc2UgcGFyZW50LlIgPSBxO1xuICB9IGVsc2Uge1xuICAgIHRyZWUuXyA9IHE7XG4gIH1cblxuICBxLlUgPSBwYXJlbnQ7XG4gIHAuVSA9IHE7XG4gIHAuTCA9IHEuUjtcbiAgaWYgKHAuTCkgcC5MLlUgPSBwO1xuICBxLlIgPSBwO1xufVxuXG5mdW5jdGlvbiBSZWRCbGFja0ZpcnN0KG5vZGUpIHtcbiAgd2hpbGUgKG5vZGUuTCkgbm9kZSA9IG5vZGUuTDtcbiAgcmV0dXJuIG5vZGU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFJlZEJsYWNrVHJlZTtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB4O1xuICB9O1xufVxuIiwiZXhwb3J0IHtkZWZhdWx0IGFzIHZvcm9ub2l9IGZyb20gXCIuL3Zvcm9ub2lcIjtcbiIsImV4cG9ydCBmdW5jdGlvbiB4KGQpIHtcbiAgcmV0dXJuIGRbMF07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB5KGQpIHtcbiAgcmV0dXJuIGRbMV07XG59XG4iLCJpbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnRcIjtcbmltcG9ydCB7eCBhcyBwb2ludFgsIHkgYXMgcG9pbnRZfSBmcm9tIFwiLi9wb2ludFwiO1xuaW1wb3J0IERpYWdyYW0sIHtlcHNpbG9ufSBmcm9tIFwiLi9EaWFncmFtXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgeCA9IHBvaW50WCxcbiAgICAgIHkgPSBwb2ludFksXG4gICAgICBleHRlbnQgPSBudWxsO1xuXG4gIGZ1bmN0aW9uIHZvcm9ub2koZGF0YSkge1xuICAgIHJldHVybiBuZXcgRGlhZ3JhbShkYXRhLm1hcChmdW5jdGlvbihkLCBpKSB7XG4gICAgICB2YXIgcyA9IFtNYXRoLnJvdW5kKHgoZCwgaSwgZGF0YSkgLyBlcHNpbG9uKSAqIGVwc2lsb24sIE1hdGgucm91bmQoeShkLCBpLCBkYXRhKSAvIGVwc2lsb24pICogZXBzaWxvbl07XG4gICAgICBzLmluZGV4ID0gaTtcbiAgICAgIHMuZGF0YSA9IGQ7XG4gICAgICByZXR1cm4gcztcbiAgICB9KSwgZXh0ZW50KTtcbiAgfVxuXG4gIHZvcm9ub2kucG9seWdvbnMgPSBmdW5jdGlvbihkYXRhKSB7XG4gICAgcmV0dXJuIHZvcm9ub2koZGF0YSkucG9seWdvbnMoKTtcbiAgfTtcblxuICB2b3Jvbm9pLmxpbmtzID0gZnVuY3Rpb24oZGF0YSkge1xuICAgIHJldHVybiB2b3Jvbm9pKGRhdGEpLmxpbmtzKCk7XG4gIH07XG5cbiAgdm9yb25vaS50cmlhbmdsZXMgPSBmdW5jdGlvbihkYXRhKSB7XG4gICAgcmV0dXJuIHZvcm9ub2koZGF0YSkudHJpYW5nbGVzKCk7XG4gIH07XG5cbiAgdm9yb25vaS54ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHggPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgdm9yb25vaSkgOiB4O1xuICB9O1xuXG4gIHZvcm9ub2kueSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh5ID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIHZvcm9ub2kpIDogeTtcbiAgfTtcblxuICB2b3Jvbm9pLmV4dGVudCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChleHRlbnQgPSBfID09IG51bGwgPyBudWxsIDogW1srX1swXVswXSwgK19bMF1bMV1dLCBbK19bMV1bMF0sICtfWzFdWzFdXV0sIHZvcm9ub2kpIDogZXh0ZW50ICYmIFtbZXh0ZW50WzBdWzBdLCBleHRlbnRbMF1bMV1dLCBbZXh0ZW50WzFdWzBdLCBleHRlbnRbMV1bMV1dXTtcbiAgfTtcblxuICB2b3Jvbm9pLnNpemUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZXh0ZW50ID0gXyA9PSBudWxsID8gbnVsbCA6IFtbMCwgMF0sIFsrX1swXSwgK19bMV1dXSwgdm9yb25vaSkgOiBleHRlbnQgJiYgW2V4dGVudFsxXVswXSAtIGV4dGVudFswXVswXSwgZXh0ZW50WzFdWzFdIC0gZXh0ZW50WzBdWzFdXTtcbiAgfTtcblxuICByZXR1cm4gdm9yb25vaTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB4O1xuICB9O1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gWm9vbUV2ZW50KHRhcmdldCwgdHlwZSwgdHJhbnNmb3JtKSB7XG4gIHRoaXMudGFyZ2V0ID0gdGFyZ2V0O1xuICB0aGlzLnR5cGUgPSB0eXBlO1xuICB0aGlzLnRyYW5zZm9ybSA9IHRyYW5zZm9ybTtcbn1cbiIsImV4cG9ydCB7ZGVmYXVsdCBhcyB6b29tfSBmcm9tIFwiLi96b29tLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgem9vbVRyYW5zZm9ybSwgaWRlbnRpdHkgYXMgem9vbUlkZW50aXR5fSBmcm9tIFwiLi90cmFuc2Zvcm0uanNcIjtcbiIsImltcG9ydCB7ZXZlbnR9IGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcblxuZXhwb3J0IGZ1bmN0aW9uIG5vcHJvcGFnYXRpb24oKSB7XG4gIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gVHJhbnNmb3JtKGssIHgsIHkpIHtcbiAgdGhpcy5rID0gaztcbiAgdGhpcy54ID0geDtcbiAgdGhpcy55ID0geTtcbn1cblxuVHJhbnNmb3JtLnByb3RvdHlwZSA9IHtcbiAgY29uc3RydWN0b3I6IFRyYW5zZm9ybSxcbiAgc2NhbGU6IGZ1bmN0aW9uKGspIHtcbiAgICByZXR1cm4gayA9PT0gMSA/IHRoaXMgOiBuZXcgVHJhbnNmb3JtKHRoaXMuayAqIGssIHRoaXMueCwgdGhpcy55KTtcbiAgfSxcbiAgdHJhbnNsYXRlOiBmdW5jdGlvbih4LCB5KSB7XG4gICAgcmV0dXJuIHggPT09IDAgJiB5ID09PSAwID8gdGhpcyA6IG5ldyBUcmFuc2Zvcm0odGhpcy5rLCB0aGlzLnggKyB0aGlzLmsgKiB4LCB0aGlzLnkgKyB0aGlzLmsgKiB5KTtcbiAgfSxcbiAgYXBwbHk6IGZ1bmN0aW9uKHBvaW50KSB7XG4gICAgcmV0dXJuIFtwb2ludFswXSAqIHRoaXMuayArIHRoaXMueCwgcG9pbnRbMV0gKiB0aGlzLmsgKyB0aGlzLnldO1xuICB9LFxuICBhcHBseVg6IGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4geCAqIHRoaXMuayArIHRoaXMueDtcbiAgfSxcbiAgYXBwbHlZOiBmdW5jdGlvbih5KSB7XG4gICAgcmV0dXJuIHkgKiB0aGlzLmsgKyB0aGlzLnk7XG4gIH0sXG4gIGludmVydDogZnVuY3Rpb24obG9jYXRpb24pIHtcbiAgICByZXR1cm4gWyhsb2NhdGlvblswXSAtIHRoaXMueCkgLyB0aGlzLmssIChsb2NhdGlvblsxXSAtIHRoaXMueSkgLyB0aGlzLmtdO1xuICB9LFxuICBpbnZlcnRYOiBmdW5jdGlvbih4KSB7XG4gICAgcmV0dXJuICh4IC0gdGhpcy54KSAvIHRoaXMuaztcbiAgfSxcbiAgaW52ZXJ0WTogZnVuY3Rpb24oeSkge1xuICAgIHJldHVybiAoeSAtIHRoaXMueSkgLyB0aGlzLms7XG4gIH0sXG4gIHJlc2NhbGVYOiBmdW5jdGlvbih4KSB7XG4gICAgcmV0dXJuIHguY29weSgpLmRvbWFpbih4LnJhbmdlKCkubWFwKHRoaXMuaW52ZXJ0WCwgdGhpcykubWFwKHguaW52ZXJ0LCB4KSk7XG4gIH0sXG4gIHJlc2NhbGVZOiBmdW5jdGlvbih5KSB7XG4gICAgcmV0dXJuIHkuY29weSgpLmRvbWFpbih5LnJhbmdlKCkubWFwKHRoaXMuaW52ZXJ0WSwgdGhpcykubWFwKHkuaW52ZXJ0LCB5KSk7XG4gIH0sXG4gIHRvU3RyaW5nOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gXCJ0cmFuc2xhdGUoXCIgKyB0aGlzLnggKyBcIixcIiArIHRoaXMueSArIFwiKSBzY2FsZShcIiArIHRoaXMuayArIFwiKVwiO1xuICB9XG59O1xuXG5leHBvcnQgdmFyIGlkZW50aXR5ID0gbmV3IFRyYW5zZm9ybSgxLCAwLCAwKTtcblxudHJhbnNmb3JtLnByb3RvdHlwZSA9IFRyYW5zZm9ybS5wcm90b3R5cGU7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRyYW5zZm9ybShub2RlKSB7XG4gIHdoaWxlICghbm9kZS5fX3pvb20pIGlmICghKG5vZGUgPSBub2RlLnBhcmVudE5vZGUpKSByZXR1cm4gaWRlbnRpdHk7XG4gIHJldHVybiBub2RlLl9fem9vbTtcbn1cbiIsImltcG9ydCB7ZGlzcGF0Y2h9IGZyb20gXCJkMy1kaXNwYXRjaFwiO1xuaW1wb3J0IHtkcmFnRGlzYWJsZSwgZHJhZ0VuYWJsZX0gZnJvbSBcImQzLWRyYWdcIjtcbmltcG9ydCB7aW50ZXJwb2xhdGVab29tfSBmcm9tIFwiZDMtaW50ZXJwb2xhdGVcIjtcbmltcG9ydCB7ZXZlbnQsIGN1c3RvbUV2ZW50LCBzZWxlY3QsIG1vdXNlLCB0b3VjaH0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHtpbnRlcnJ1cHR9IGZyb20gXCJkMy10cmFuc2l0aW9uXCI7XG5pbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnQuanNcIjtcbmltcG9ydCBab29tRXZlbnQgZnJvbSBcIi4vZXZlbnQuanNcIjtcbmltcG9ydCB7VHJhbnNmb3JtLCBpZGVudGl0eX0gZnJvbSBcIi4vdHJhbnNmb3JtLmpzXCI7XG5pbXBvcnQgbm9ldmVudCwge25vcHJvcGFnYXRpb259IGZyb20gXCIuL25vZXZlbnQuanNcIjtcblxuLy8gSWdub3JlIHJpZ2h0LWNsaWNrLCBzaW5jZSB0aGF0IHNob3VsZCBvcGVuIHRoZSBjb250ZXh0IG1lbnUuXG5mdW5jdGlvbiBkZWZhdWx0RmlsdGVyKCkge1xuICByZXR1cm4gIWV2ZW50LmN0cmxLZXkgJiYgIWV2ZW50LmJ1dHRvbjtcbn1cblxuZnVuY3Rpb24gZGVmYXVsdEV4dGVudCgpIHtcbiAgdmFyIGUgPSB0aGlzO1xuICBpZiAoZSBpbnN0YW5jZW9mIFNWR0VsZW1lbnQpIHtcbiAgICBlID0gZS5vd25lclNWR0VsZW1lbnQgfHwgZTtcbiAgICBpZiAoZS5oYXNBdHRyaWJ1dGUoXCJ2aWV3Qm94XCIpKSB7XG4gICAgICBlID0gZS52aWV3Qm94LmJhc2VWYWw7XG4gICAgICByZXR1cm4gW1tlLngsIGUueV0sIFtlLnggKyBlLndpZHRoLCBlLnkgKyBlLmhlaWdodF1dO1xuICAgIH1cbiAgICByZXR1cm4gW1swLCAwXSwgW2Uud2lkdGguYmFzZVZhbC52YWx1ZSwgZS5oZWlnaHQuYmFzZVZhbC52YWx1ZV1dO1xuICB9XG4gIHJldHVybiBbWzAsIDBdLCBbZS5jbGllbnRXaWR0aCwgZS5jbGllbnRIZWlnaHRdXTtcbn1cblxuZnVuY3Rpb24gZGVmYXVsdFRyYW5zZm9ybSgpIHtcbiAgcmV0dXJuIHRoaXMuX196b29tIHx8IGlkZW50aXR5O1xufVxuXG5mdW5jdGlvbiBkZWZhdWx0V2hlZWxEZWx0YSgpIHtcbiAgcmV0dXJuIC1ldmVudC5kZWx0YVkgKiAoZXZlbnQuZGVsdGFNb2RlID09PSAxID8gMC4wNSA6IGV2ZW50LmRlbHRhTW9kZSA/IDEgOiAwLjAwMik7XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRUb3VjaGFibGUoKSB7XG4gIHJldHVybiBuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHMgfHwgKFwib250b3VjaHN0YXJ0XCIgaW4gdGhpcyk7XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRDb25zdHJhaW4odHJhbnNmb3JtLCBleHRlbnQsIHRyYW5zbGF0ZUV4dGVudCkge1xuICB2YXIgZHgwID0gdHJhbnNmb3JtLmludmVydFgoZXh0ZW50WzBdWzBdKSAtIHRyYW5zbGF0ZUV4dGVudFswXVswXSxcbiAgICAgIGR4MSA9IHRyYW5zZm9ybS5pbnZlcnRYKGV4dGVudFsxXVswXSkgLSB0cmFuc2xhdGVFeHRlbnRbMV1bMF0sXG4gICAgICBkeTAgPSB0cmFuc2Zvcm0uaW52ZXJ0WShleHRlbnRbMF1bMV0pIC0gdHJhbnNsYXRlRXh0ZW50WzBdWzFdLFxuICAgICAgZHkxID0gdHJhbnNmb3JtLmludmVydFkoZXh0ZW50WzFdWzFdKSAtIHRyYW5zbGF0ZUV4dGVudFsxXVsxXTtcbiAgcmV0dXJuIHRyYW5zZm9ybS50cmFuc2xhdGUoXG4gICAgZHgxID4gZHgwID8gKGR4MCArIGR4MSkgLyAyIDogTWF0aC5taW4oMCwgZHgwKSB8fCBNYXRoLm1heCgwLCBkeDEpLFxuICAgIGR5MSA+IGR5MCA/IChkeTAgKyBkeTEpIC8gMiA6IE1hdGgubWluKDAsIGR5MCkgfHwgTWF0aC5tYXgoMCwgZHkxKVxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIGZpbHRlciA9IGRlZmF1bHRGaWx0ZXIsXG4gICAgICBleHRlbnQgPSBkZWZhdWx0RXh0ZW50LFxuICAgICAgY29uc3RyYWluID0gZGVmYXVsdENvbnN0cmFpbixcbiAgICAgIHdoZWVsRGVsdGEgPSBkZWZhdWx0V2hlZWxEZWx0YSxcbiAgICAgIHRvdWNoYWJsZSA9IGRlZmF1bHRUb3VjaGFibGUsXG4gICAgICBzY2FsZUV4dGVudCA9IFswLCBJbmZpbml0eV0sXG4gICAgICB0cmFuc2xhdGVFeHRlbnQgPSBbWy1JbmZpbml0eSwgLUluZmluaXR5XSwgW0luZmluaXR5LCBJbmZpbml0eV1dLFxuICAgICAgZHVyYXRpb24gPSAyNTAsXG4gICAgICBpbnRlcnBvbGF0ZSA9IGludGVycG9sYXRlWm9vbSxcbiAgICAgIGxpc3RlbmVycyA9IGRpc3BhdGNoKFwic3RhcnRcIiwgXCJ6b29tXCIsIFwiZW5kXCIpLFxuICAgICAgdG91Y2hzdGFydGluZyxcbiAgICAgIHRvdWNoZW5kaW5nLFxuICAgICAgdG91Y2hEZWxheSA9IDUwMCxcbiAgICAgIHdoZWVsRGVsYXkgPSAxNTAsXG4gICAgICBjbGlja0Rpc3RhbmNlMiA9IDA7XG5cbiAgZnVuY3Rpb24gem9vbShzZWxlY3Rpb24pIHtcbiAgICBzZWxlY3Rpb25cbiAgICAgICAgLnByb3BlcnR5KFwiX196b29tXCIsIGRlZmF1bHRUcmFuc2Zvcm0pXG4gICAgICAgIC5vbihcIndoZWVsLnpvb21cIiwgd2hlZWxlZClcbiAgICAgICAgLm9uKFwibW91c2Vkb3duLnpvb21cIiwgbW91c2Vkb3duZWQpXG4gICAgICAgIC5vbihcImRibGNsaWNrLnpvb21cIiwgZGJsY2xpY2tlZClcbiAgICAgIC5maWx0ZXIodG91Y2hhYmxlKVxuICAgICAgICAub24oXCJ0b3VjaHN0YXJ0Lnpvb21cIiwgdG91Y2hzdGFydGVkKVxuICAgICAgICAub24oXCJ0b3VjaG1vdmUuem9vbVwiLCB0b3VjaG1vdmVkKVxuICAgICAgICAub24oXCJ0b3VjaGVuZC56b29tIHRvdWNoY2FuY2VsLnpvb21cIiwgdG91Y2hlbmRlZClcbiAgICAgICAgLnN0eWxlKFwidG91Y2gtYWN0aW9uXCIsIFwibm9uZVwiKVxuICAgICAgICAuc3R5bGUoXCItd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3JcIiwgXCJyZ2JhKDAsMCwwLDApXCIpO1xuICB9XG5cbiAgem9vbS50cmFuc2Zvcm0gPSBmdW5jdGlvbihjb2xsZWN0aW9uLCB0cmFuc2Zvcm0sIHBvaW50KSB7XG4gICAgdmFyIHNlbGVjdGlvbiA9IGNvbGxlY3Rpb24uc2VsZWN0aW9uID8gY29sbGVjdGlvbi5zZWxlY3Rpb24oKSA6IGNvbGxlY3Rpb247XG4gICAgc2VsZWN0aW9uLnByb3BlcnR5KFwiX196b29tXCIsIGRlZmF1bHRUcmFuc2Zvcm0pO1xuICAgIGlmIChjb2xsZWN0aW9uICE9PSBzZWxlY3Rpb24pIHtcbiAgICAgIHNjaGVkdWxlKGNvbGxlY3Rpb24sIHRyYW5zZm9ybSwgcG9pbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZWxlY3Rpb24uaW50ZXJydXB0KCkuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgICAgZ2VzdHVyZSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICAgICAgICAuc3RhcnQoKVxuICAgICAgICAgICAgLnpvb20obnVsbCwgdHlwZW9mIHRyYW5zZm9ybSA9PT0gXCJmdW5jdGlvblwiID8gdHJhbnNmb3JtLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgOiB0cmFuc2Zvcm0pXG4gICAgICAgICAgICAuZW5kKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgem9vbS5zY2FsZUJ5ID0gZnVuY3Rpb24oc2VsZWN0aW9uLCBrLCBwKSB7XG4gICAgem9vbS5zY2FsZVRvKHNlbGVjdGlvbiwgZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgazAgPSB0aGlzLl9fem9vbS5rLFxuICAgICAgICAgIGsxID0gdHlwZW9mIGsgPT09IFwiZnVuY3Rpb25cIiA/IGsuYXBwbHkodGhpcywgYXJndW1lbnRzKSA6IGs7XG4gICAgICByZXR1cm4gazAgKiBrMTtcbiAgICB9LCBwKTtcbiAgfTtcblxuICB6b29tLnNjYWxlVG8gPSBmdW5jdGlvbihzZWxlY3Rpb24sIGssIHApIHtcbiAgICB6b29tLnRyYW5zZm9ybShzZWxlY3Rpb24sIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGUgPSBleHRlbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKSxcbiAgICAgICAgICB0MCA9IHRoaXMuX196b29tLFxuICAgICAgICAgIHAwID0gcCA9PSBudWxsID8gY2VudHJvaWQoZSkgOiB0eXBlb2YgcCA9PT0gXCJmdW5jdGlvblwiID8gcC5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDogcCxcbiAgICAgICAgICBwMSA9IHQwLmludmVydChwMCksXG4gICAgICAgICAgazEgPSB0eXBlb2YgayA9PT0gXCJmdW5jdGlvblwiID8gay5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDogaztcbiAgICAgIHJldHVybiBjb25zdHJhaW4odHJhbnNsYXRlKHNjYWxlKHQwLCBrMSksIHAwLCBwMSksIGUsIHRyYW5zbGF0ZUV4dGVudCk7XG4gICAgfSwgcCk7XG4gIH07XG5cbiAgem9vbS50cmFuc2xhdGVCeSA9IGZ1bmN0aW9uKHNlbGVjdGlvbiwgeCwgeSkge1xuICAgIHpvb20udHJhbnNmb3JtKHNlbGVjdGlvbiwgZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gY29uc3RyYWluKHRoaXMuX196b29tLnRyYW5zbGF0ZShcbiAgICAgICAgdHlwZW9mIHggPT09IFwiZnVuY3Rpb25cIiA/IHguYXBwbHkodGhpcywgYXJndW1lbnRzKSA6IHgsXG4gICAgICAgIHR5cGVvZiB5ID09PSBcImZ1bmN0aW9uXCIgPyB5LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgOiB5XG4gICAgICApLCBleHRlbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKSwgdHJhbnNsYXRlRXh0ZW50KTtcbiAgICB9KTtcbiAgfTtcblxuICB6b29tLnRyYW5zbGF0ZVRvID0gZnVuY3Rpb24oc2VsZWN0aW9uLCB4LCB5LCBwKSB7XG4gICAgem9vbS50cmFuc2Zvcm0oc2VsZWN0aW9uLCBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBlID0gZXh0ZW50LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksXG4gICAgICAgICAgdCA9IHRoaXMuX196b29tLFxuICAgICAgICAgIHAwID0gcCA9PSBudWxsID8gY2VudHJvaWQoZSkgOiB0eXBlb2YgcCA9PT0gXCJmdW5jdGlvblwiID8gcC5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDogcDtcbiAgICAgIHJldHVybiBjb25zdHJhaW4oaWRlbnRpdHkudHJhbnNsYXRlKHAwWzBdLCBwMFsxXSkuc2NhbGUodC5rKS50cmFuc2xhdGUoXG4gICAgICAgIHR5cGVvZiB4ID09PSBcImZ1bmN0aW9uXCIgPyAteC5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDogLXgsXG4gICAgICAgIHR5cGVvZiB5ID09PSBcImZ1bmN0aW9uXCIgPyAteS5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDogLXlcbiAgICAgICksIGUsIHRyYW5zbGF0ZUV4dGVudCk7XG4gICAgfSwgcCk7XG4gIH07XG5cbiAgZnVuY3Rpb24gc2NhbGUodHJhbnNmb3JtLCBrKSB7XG4gICAgayA9IE1hdGgubWF4KHNjYWxlRXh0ZW50WzBdLCBNYXRoLm1pbihzY2FsZUV4dGVudFsxXSwgaykpO1xuICAgIHJldHVybiBrID09PSB0cmFuc2Zvcm0uayA/IHRyYW5zZm9ybSA6IG5ldyBUcmFuc2Zvcm0oaywgdHJhbnNmb3JtLngsIHRyYW5zZm9ybS55KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRyYW5zbGF0ZSh0cmFuc2Zvcm0sIHAwLCBwMSkge1xuICAgIHZhciB4ID0gcDBbMF0gLSBwMVswXSAqIHRyYW5zZm9ybS5rLCB5ID0gcDBbMV0gLSBwMVsxXSAqIHRyYW5zZm9ybS5rO1xuICAgIHJldHVybiB4ID09PSB0cmFuc2Zvcm0ueCAmJiB5ID09PSB0cmFuc2Zvcm0ueSA/IHRyYW5zZm9ybSA6IG5ldyBUcmFuc2Zvcm0odHJhbnNmb3JtLmssIHgsIHkpO1xuICB9XG5cbiAgZnVuY3Rpb24gY2VudHJvaWQoZXh0ZW50KSB7XG4gICAgcmV0dXJuIFsoK2V4dGVudFswXVswXSArICtleHRlbnRbMV1bMF0pIC8gMiwgKCtleHRlbnRbMF1bMV0gKyArZXh0ZW50WzFdWzFdKSAvIDJdO1xuICB9XG5cbiAgZnVuY3Rpb24gc2NoZWR1bGUodHJhbnNpdGlvbiwgdHJhbnNmb3JtLCBwb2ludCkge1xuICAgIHRyYW5zaXRpb25cbiAgICAgICAgLm9uKFwic3RhcnQuem9vbVwiLCBmdW5jdGlvbigpIHsgZ2VzdHVyZSh0aGlzLCBhcmd1bWVudHMpLnN0YXJ0KCk7IH0pXG4gICAgICAgIC5vbihcImludGVycnVwdC56b29tIGVuZC56b29tXCIsIGZ1bmN0aW9uKCkgeyBnZXN0dXJlKHRoaXMsIGFyZ3VtZW50cykuZW5kKCk7IH0pXG4gICAgICAgIC50d2VlbihcInpvb21cIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIHRoYXQgPSB0aGlzLFxuICAgICAgICAgICAgICBhcmdzID0gYXJndW1lbnRzLFxuICAgICAgICAgICAgICBnID0gZ2VzdHVyZSh0aGF0LCBhcmdzKSxcbiAgICAgICAgICAgICAgZSA9IGV4dGVudC5hcHBseSh0aGF0LCBhcmdzKSxcbiAgICAgICAgICAgICAgcCA9IHBvaW50ID09IG51bGwgPyBjZW50cm9pZChlKSA6IHR5cGVvZiBwb2ludCA9PT0gXCJmdW5jdGlvblwiID8gcG9pbnQuYXBwbHkodGhhdCwgYXJncykgOiBwb2ludCxcbiAgICAgICAgICAgICAgdyA9IE1hdGgubWF4KGVbMV1bMF0gLSBlWzBdWzBdLCBlWzFdWzFdIC0gZVswXVsxXSksXG4gICAgICAgICAgICAgIGEgPSB0aGF0Ll9fem9vbSxcbiAgICAgICAgICAgICAgYiA9IHR5cGVvZiB0cmFuc2Zvcm0gPT09IFwiZnVuY3Rpb25cIiA/IHRyYW5zZm9ybS5hcHBseSh0aGF0LCBhcmdzKSA6IHRyYW5zZm9ybSxcbiAgICAgICAgICAgICAgaSA9IGludGVycG9sYXRlKGEuaW52ZXJ0KHApLmNvbmNhdCh3IC8gYS5rKSwgYi5pbnZlcnQocCkuY29uY2F0KHcgLyBiLmspKTtcbiAgICAgICAgICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgaWYgKHQgPT09IDEpIHQgPSBiOyAvLyBBdm9pZCByb3VuZGluZyBlcnJvciBvbiBlbmQuXG4gICAgICAgICAgICBlbHNlIHsgdmFyIGwgPSBpKHQpLCBrID0gdyAvIGxbMl07IHQgPSBuZXcgVHJhbnNmb3JtKGssIHBbMF0gLSBsWzBdICogaywgcFsxXSAtIGxbMV0gKiBrKTsgfVxuICAgICAgICAgICAgZy56b29tKG51bGwsIHQpO1xuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2VzdHVyZSh0aGF0LCBhcmdzLCBjbGVhbikge1xuICAgIHJldHVybiAoIWNsZWFuICYmIHRoYXQuX196b29taW5nKSB8fCBuZXcgR2VzdHVyZSh0aGF0LCBhcmdzKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIEdlc3R1cmUodGhhdCwgYXJncykge1xuICAgIHRoaXMudGhhdCA9IHRoYXQ7XG4gICAgdGhpcy5hcmdzID0gYXJncztcbiAgICB0aGlzLmFjdGl2ZSA9IDA7XG4gICAgdGhpcy5leHRlbnQgPSBleHRlbnQuYXBwbHkodGhhdCwgYXJncyk7XG4gICAgdGhpcy50YXBzID0gMDtcbiAgfVxuXG4gIEdlc3R1cmUucHJvdG90eXBlID0ge1xuICAgIHN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICAgIGlmICgrK3RoaXMuYWN0aXZlID09PSAxKSB7XG4gICAgICAgIHRoaXMudGhhdC5fX3pvb21pbmcgPSB0aGlzO1xuICAgICAgICB0aGlzLmVtaXQoXCJzdGFydFwiKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG4gICAgem9vbTogZnVuY3Rpb24oa2V5LCB0cmFuc2Zvcm0pIHtcbiAgICAgIGlmICh0aGlzLm1vdXNlICYmIGtleSAhPT0gXCJtb3VzZVwiKSB0aGlzLm1vdXNlWzFdID0gdHJhbnNmb3JtLmludmVydCh0aGlzLm1vdXNlWzBdKTtcbiAgICAgIGlmICh0aGlzLnRvdWNoMCAmJiBrZXkgIT09IFwidG91Y2hcIikgdGhpcy50b3VjaDBbMV0gPSB0cmFuc2Zvcm0uaW52ZXJ0KHRoaXMudG91Y2gwWzBdKTtcbiAgICAgIGlmICh0aGlzLnRvdWNoMSAmJiBrZXkgIT09IFwidG91Y2hcIikgdGhpcy50b3VjaDFbMV0gPSB0cmFuc2Zvcm0uaW52ZXJ0KHRoaXMudG91Y2gxWzBdKTtcbiAgICAgIHRoaXMudGhhdC5fX3pvb20gPSB0cmFuc2Zvcm07XG4gICAgICB0aGlzLmVtaXQoXCJ6b29tXCIpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICBlbmQ6IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKC0tdGhpcy5hY3RpdmUgPT09IDApIHtcbiAgICAgICAgZGVsZXRlIHRoaXMudGhhdC5fX3pvb21pbmc7XG4gICAgICAgIHRoaXMuZW1pdChcImVuZFwiKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG4gICAgZW1pdDogZnVuY3Rpb24odHlwZSkge1xuICAgICAgY3VzdG9tRXZlbnQobmV3IFpvb21FdmVudCh6b29tLCB0eXBlLCB0aGlzLnRoYXQuX196b29tKSwgbGlzdGVuZXJzLmFwcGx5LCBsaXN0ZW5lcnMsIFt0eXBlLCB0aGlzLnRoYXQsIHRoaXMuYXJnc10pO1xuICAgIH1cbiAgfTtcblxuICBmdW5jdGlvbiB3aGVlbGVkKCkge1xuICAgIGlmICghZmlsdGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpIHJldHVybjtcbiAgICB2YXIgZyA9IGdlc3R1cmUodGhpcywgYXJndW1lbnRzKSxcbiAgICAgICAgdCA9IHRoaXMuX196b29tLFxuICAgICAgICBrID0gTWF0aC5tYXgoc2NhbGVFeHRlbnRbMF0sIE1hdGgubWluKHNjYWxlRXh0ZW50WzFdLCB0LmsgKiBNYXRoLnBvdygyLCB3aGVlbERlbHRhLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpKSksXG4gICAgICAgIHAgPSBtb3VzZSh0aGlzKTtcblxuICAgIC8vIElmIHRoZSBtb3VzZSBpcyBpbiB0aGUgc2FtZSBsb2NhdGlvbiBhcyBiZWZvcmUsIHJldXNlIGl0LlxuICAgIC8vIElmIHRoZXJlIHdlcmUgcmVjZW50IHdoZWVsIGV2ZW50cywgcmVzZXQgdGhlIHdoZWVsIGlkbGUgdGltZW91dC5cbiAgICBpZiAoZy53aGVlbCkge1xuICAgICAgaWYgKGcubW91c2VbMF1bMF0gIT09IHBbMF0gfHwgZy5tb3VzZVswXVsxXSAhPT0gcFsxXSkge1xuICAgICAgICBnLm1vdXNlWzFdID0gdC5pbnZlcnQoZy5tb3VzZVswXSA9IHApO1xuICAgICAgfVxuICAgICAgY2xlYXJUaW1lb3V0KGcud2hlZWwpO1xuICAgIH1cblxuICAgIC8vIElmIHRoaXMgd2hlZWwgZXZlbnQgd29u4oCZdCB0cmlnZ2VyIGEgdHJhbnNmb3JtIGNoYW5nZSwgaWdub3JlIGl0LlxuICAgIGVsc2UgaWYgKHQuayA9PT0gaykgcmV0dXJuO1xuXG4gICAgLy8gT3RoZXJ3aXNlLCBjYXB0dXJlIHRoZSBtb3VzZSBwb2ludCBhbmQgbG9jYXRpb24gYXQgdGhlIHN0YXJ0LlxuICAgIGVsc2Uge1xuICAgICAgZy5tb3VzZSA9IFtwLCB0LmludmVydChwKV07XG4gICAgICBpbnRlcnJ1cHQodGhpcyk7XG4gICAgICBnLnN0YXJ0KCk7XG4gICAgfVxuXG4gICAgbm9ldmVudCgpO1xuICAgIGcud2hlZWwgPSBzZXRUaW1lb3V0KHdoZWVsaWRsZWQsIHdoZWVsRGVsYXkpO1xuICAgIGcuem9vbShcIm1vdXNlXCIsIGNvbnN0cmFpbih0cmFuc2xhdGUoc2NhbGUodCwgayksIGcubW91c2VbMF0sIGcubW91c2VbMV0pLCBnLmV4dGVudCwgdHJhbnNsYXRlRXh0ZW50KSk7XG5cbiAgICBmdW5jdGlvbiB3aGVlbGlkbGVkKCkge1xuICAgICAgZy53aGVlbCA9IG51bGw7XG4gICAgICBnLmVuZCgpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG1vdXNlZG93bmVkKCkge1xuICAgIGlmICh0b3VjaGVuZGluZyB8fCAhZmlsdGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpIHJldHVybjtcbiAgICB2YXIgZyA9IGdlc3R1cmUodGhpcywgYXJndW1lbnRzLCB0cnVlKSxcbiAgICAgICAgdiA9IHNlbGVjdChldmVudC52aWV3KS5vbihcIm1vdXNlbW92ZS56b29tXCIsIG1vdXNlbW92ZWQsIHRydWUpLm9uKFwibW91c2V1cC56b29tXCIsIG1vdXNldXBwZWQsIHRydWUpLFxuICAgICAgICBwID0gbW91c2UodGhpcyksXG4gICAgICAgIHgwID0gZXZlbnQuY2xpZW50WCxcbiAgICAgICAgeTAgPSBldmVudC5jbGllbnRZO1xuXG4gICAgZHJhZ0Rpc2FibGUoZXZlbnQudmlldyk7XG4gICAgbm9wcm9wYWdhdGlvbigpO1xuICAgIGcubW91c2UgPSBbcCwgdGhpcy5fX3pvb20uaW52ZXJ0KHApXTtcbiAgICBpbnRlcnJ1cHQodGhpcyk7XG4gICAgZy5zdGFydCgpO1xuXG4gICAgZnVuY3Rpb24gbW91c2Vtb3ZlZCgpIHtcbiAgICAgIG5vZXZlbnQoKTtcbiAgICAgIGlmICghZy5tb3ZlZCkge1xuICAgICAgICB2YXIgZHggPSBldmVudC5jbGllbnRYIC0geDAsIGR5ID0gZXZlbnQuY2xpZW50WSAtIHkwO1xuICAgICAgICBnLm1vdmVkID0gZHggKiBkeCArIGR5ICogZHkgPiBjbGlja0Rpc3RhbmNlMjtcbiAgICAgIH1cbiAgICAgIGcuem9vbShcIm1vdXNlXCIsIGNvbnN0cmFpbih0cmFuc2xhdGUoZy50aGF0Ll9fem9vbSwgZy5tb3VzZVswXSA9IG1vdXNlKGcudGhhdCksIGcubW91c2VbMV0pLCBnLmV4dGVudCwgdHJhbnNsYXRlRXh0ZW50KSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW91c2V1cHBlZCgpIHtcbiAgICAgIHYub24oXCJtb3VzZW1vdmUuem9vbSBtb3VzZXVwLnpvb21cIiwgbnVsbCk7XG4gICAgICBkcmFnRW5hYmxlKGV2ZW50LnZpZXcsIGcubW92ZWQpO1xuICAgICAgbm9ldmVudCgpO1xuICAgICAgZy5lbmQoKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBkYmxjbGlja2VkKCkge1xuICAgIGlmICghZmlsdGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpIHJldHVybjtcbiAgICB2YXIgdDAgPSB0aGlzLl9fem9vbSxcbiAgICAgICAgcDAgPSBtb3VzZSh0aGlzKSxcbiAgICAgICAgcDEgPSB0MC5pbnZlcnQocDApLFxuICAgICAgICBrMSA9IHQwLmsgKiAoZXZlbnQuc2hpZnRLZXkgPyAwLjUgOiAyKSxcbiAgICAgICAgdDEgPSBjb25zdHJhaW4odHJhbnNsYXRlKHNjYWxlKHQwLCBrMSksIHAwLCBwMSksIGV4dGVudC5hcHBseSh0aGlzLCBhcmd1bWVudHMpLCB0cmFuc2xhdGVFeHRlbnQpO1xuXG4gICAgbm9ldmVudCgpO1xuICAgIGlmIChkdXJhdGlvbiA+IDApIHNlbGVjdCh0aGlzKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oZHVyYXRpb24pLmNhbGwoc2NoZWR1bGUsIHQxLCBwMCk7XG4gICAgZWxzZSBzZWxlY3QodGhpcykuY2FsbCh6b29tLnRyYW5zZm9ybSwgdDEpO1xuICB9XG5cbiAgZnVuY3Rpb24gdG91Y2hzdGFydGVkKCkge1xuICAgIGlmICghZmlsdGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpIHJldHVybjtcbiAgICB2YXIgdG91Y2hlcyA9IGV2ZW50LnRvdWNoZXMsXG4gICAgICAgIG4gPSB0b3VjaGVzLmxlbmd0aCxcbiAgICAgICAgZyA9IGdlc3R1cmUodGhpcywgYXJndW1lbnRzLCBldmVudC5jaGFuZ2VkVG91Y2hlcy5sZW5ndGggPT09IG4pLFxuICAgICAgICBzdGFydGVkLCBpLCB0LCBwO1xuXG4gICAgbm9wcm9wYWdhdGlvbigpO1xuICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIHQgPSB0b3VjaGVzW2ldLCBwID0gdG91Y2godGhpcywgdG91Y2hlcywgdC5pZGVudGlmaWVyKTtcbiAgICAgIHAgPSBbcCwgdGhpcy5fX3pvb20uaW52ZXJ0KHApLCB0LmlkZW50aWZpZXJdO1xuICAgICAgaWYgKCFnLnRvdWNoMCkgZy50b3VjaDAgPSBwLCBzdGFydGVkID0gdHJ1ZSwgZy50YXBzID0gMSArICEhdG91Y2hzdGFydGluZztcbiAgICAgIGVsc2UgaWYgKCFnLnRvdWNoMSAmJiBnLnRvdWNoMFsyXSAhPT0gcFsyXSkgZy50b3VjaDEgPSBwLCBnLnRhcHMgPSAwO1xuICAgIH1cblxuICAgIGlmICh0b3VjaHN0YXJ0aW5nKSB0b3VjaHN0YXJ0aW5nID0gY2xlYXJUaW1lb3V0KHRvdWNoc3RhcnRpbmcpO1xuXG4gICAgaWYgKHN0YXJ0ZWQpIHtcbiAgICAgIGlmIChnLnRhcHMgPCAyKSB0b3VjaHN0YXJ0aW5nID0gc2V0VGltZW91dChmdW5jdGlvbigpIHsgdG91Y2hzdGFydGluZyA9IG51bGw7IH0sIHRvdWNoRGVsYXkpO1xuICAgICAgaW50ZXJydXB0KHRoaXMpO1xuICAgICAgZy5zdGFydCgpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHRvdWNobW92ZWQoKSB7XG4gICAgaWYgKCF0aGlzLl9fem9vbWluZykgcmV0dXJuO1xuICAgIHZhciBnID0gZ2VzdHVyZSh0aGlzLCBhcmd1bWVudHMpLFxuICAgICAgICB0b3VjaGVzID0gZXZlbnQuY2hhbmdlZFRvdWNoZXMsXG4gICAgICAgIG4gPSB0b3VjaGVzLmxlbmd0aCwgaSwgdCwgcCwgbDtcblxuICAgIG5vZXZlbnQoKTtcbiAgICBpZiAodG91Y2hzdGFydGluZykgdG91Y2hzdGFydGluZyA9IGNsZWFyVGltZW91dCh0b3VjaHN0YXJ0aW5nKTtcbiAgICBnLnRhcHMgPSAwO1xuICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIHQgPSB0b3VjaGVzW2ldLCBwID0gdG91Y2godGhpcywgdG91Y2hlcywgdC5pZGVudGlmaWVyKTtcbiAgICAgIGlmIChnLnRvdWNoMCAmJiBnLnRvdWNoMFsyXSA9PT0gdC5pZGVudGlmaWVyKSBnLnRvdWNoMFswXSA9IHA7XG4gICAgICBlbHNlIGlmIChnLnRvdWNoMSAmJiBnLnRvdWNoMVsyXSA9PT0gdC5pZGVudGlmaWVyKSBnLnRvdWNoMVswXSA9IHA7XG4gICAgfVxuICAgIHQgPSBnLnRoYXQuX196b29tO1xuICAgIGlmIChnLnRvdWNoMSkge1xuICAgICAgdmFyIHAwID0gZy50b3VjaDBbMF0sIGwwID0gZy50b3VjaDBbMV0sXG4gICAgICAgICAgcDEgPSBnLnRvdWNoMVswXSwgbDEgPSBnLnRvdWNoMVsxXSxcbiAgICAgICAgICBkcCA9IChkcCA9IHAxWzBdIC0gcDBbMF0pICogZHAgKyAoZHAgPSBwMVsxXSAtIHAwWzFdKSAqIGRwLFxuICAgICAgICAgIGRsID0gKGRsID0gbDFbMF0gLSBsMFswXSkgKiBkbCArIChkbCA9IGwxWzFdIC0gbDBbMV0pICogZGw7XG4gICAgICB0ID0gc2NhbGUodCwgTWF0aC5zcXJ0KGRwIC8gZGwpKTtcbiAgICAgIHAgPSBbKHAwWzBdICsgcDFbMF0pIC8gMiwgKHAwWzFdICsgcDFbMV0pIC8gMl07XG4gICAgICBsID0gWyhsMFswXSArIGwxWzBdKSAvIDIsIChsMFsxXSArIGwxWzFdKSAvIDJdO1xuICAgIH1cbiAgICBlbHNlIGlmIChnLnRvdWNoMCkgcCA9IGcudG91Y2gwWzBdLCBsID0gZy50b3VjaDBbMV07XG4gICAgZWxzZSByZXR1cm47XG4gICAgZy56b29tKFwidG91Y2hcIiwgY29uc3RyYWluKHRyYW5zbGF0ZSh0LCBwLCBsKSwgZy5leHRlbnQsIHRyYW5zbGF0ZUV4dGVudCkpO1xuICB9XG5cbiAgZnVuY3Rpb24gdG91Y2hlbmRlZCgpIHtcbiAgICBpZiAoIXRoaXMuX196b29taW5nKSByZXR1cm47XG4gICAgdmFyIGcgPSBnZXN0dXJlKHRoaXMsIGFyZ3VtZW50cyksXG4gICAgICAgIHRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcyxcbiAgICAgICAgbiA9IHRvdWNoZXMubGVuZ3RoLCBpLCB0O1xuXG4gICAgbm9wcm9wYWdhdGlvbigpO1xuICAgIGlmICh0b3VjaGVuZGluZykgY2xlYXJUaW1lb3V0KHRvdWNoZW5kaW5nKTtcbiAgICB0b3VjaGVuZGluZyA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IHRvdWNoZW5kaW5nID0gbnVsbDsgfSwgdG91Y2hEZWxheSk7XG4gICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgdCA9IHRvdWNoZXNbaV07XG4gICAgICBpZiAoZy50b3VjaDAgJiYgZy50b3VjaDBbMl0gPT09IHQuaWRlbnRpZmllcikgZGVsZXRlIGcudG91Y2gwO1xuICAgICAgZWxzZSBpZiAoZy50b3VjaDEgJiYgZy50b3VjaDFbMl0gPT09IHQuaWRlbnRpZmllcikgZGVsZXRlIGcudG91Y2gxO1xuICAgIH1cbiAgICBpZiAoZy50b3VjaDEgJiYgIWcudG91Y2gwKSBnLnRvdWNoMCA9IGcudG91Y2gxLCBkZWxldGUgZy50b3VjaDE7XG4gICAgaWYgKGcudG91Y2gwKSBnLnRvdWNoMFsxXSA9IHRoaXMuX196b29tLmludmVydChnLnRvdWNoMFswXSk7XG4gICAgZWxzZSB7XG4gICAgICBnLmVuZCgpO1xuICAgICAgLy8gSWYgdGhpcyB3YXMgYSBkYmx0YXAsIHJlcm91dGUgdG8gdGhlIChvcHRpb25hbCkgZGJsY2xpY2suem9vbSBoYW5kbGVyLlxuICAgICAgaWYgKGcudGFwcyA9PT0gMikge1xuICAgICAgICB2YXIgcCA9IHNlbGVjdCh0aGlzKS5vbihcImRibGNsaWNrLnpvb21cIik7XG4gICAgICAgIGlmIChwKSBwLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgem9vbS53aGVlbERlbHRhID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHdoZWVsRGVsdGEgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgem9vbSkgOiB3aGVlbERlbHRhO1xuICB9O1xuXG4gIHpvb20uZmlsdGVyID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGZpbHRlciA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoISFfKSwgem9vbSkgOiBmaWx0ZXI7XG4gIH07XG5cbiAgem9vbS50b3VjaGFibGUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodG91Y2hhYmxlID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCghIV8pLCB6b29tKSA6IHRvdWNoYWJsZTtcbiAgfTtcblxuICB6b29tLmV4dGVudCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChleHRlbnQgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KFtbK19bMF1bMF0sICtfWzBdWzFdXSwgWytfWzFdWzBdLCArX1sxXVsxXV1dKSwgem9vbSkgOiBleHRlbnQ7XG4gIH07XG5cbiAgem9vbS5zY2FsZUV4dGVudCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChzY2FsZUV4dGVudFswXSA9ICtfWzBdLCBzY2FsZUV4dGVudFsxXSA9ICtfWzFdLCB6b29tKSA6IFtzY2FsZUV4dGVudFswXSwgc2NhbGVFeHRlbnRbMV1dO1xuICB9O1xuXG4gIHpvb20udHJhbnNsYXRlRXh0ZW50ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRyYW5zbGF0ZUV4dGVudFswXVswXSA9ICtfWzBdWzBdLCB0cmFuc2xhdGVFeHRlbnRbMV1bMF0gPSArX1sxXVswXSwgdHJhbnNsYXRlRXh0ZW50WzBdWzFdID0gK19bMF1bMV0sIHRyYW5zbGF0ZUV4dGVudFsxXVsxXSA9ICtfWzFdWzFdLCB6b29tKSA6IFtbdHJhbnNsYXRlRXh0ZW50WzBdWzBdLCB0cmFuc2xhdGVFeHRlbnRbMF1bMV1dLCBbdHJhbnNsYXRlRXh0ZW50WzFdWzBdLCB0cmFuc2xhdGVFeHRlbnRbMV1bMV1dXTtcbiAgfTtcblxuICB6b29tLmNvbnN0cmFpbiA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChjb25zdHJhaW4gPSBfLCB6b29tKSA6IGNvbnN0cmFpbjtcbiAgfTtcblxuICB6b29tLmR1cmF0aW9uID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGR1cmF0aW9uID0gK18sIHpvb20pIDogZHVyYXRpb247XG4gIH07XG5cbiAgem9vbS5pbnRlcnBvbGF0ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChpbnRlcnBvbGF0ZSA9IF8sIHpvb20pIDogaW50ZXJwb2xhdGU7XG4gIH07XG5cbiAgem9vbS5vbiA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciB2YWx1ZSA9IGxpc3RlbmVycy5vbi5hcHBseShsaXN0ZW5lcnMsIGFyZ3VtZW50cyk7XG4gICAgcmV0dXJuIHZhbHVlID09PSBsaXN0ZW5lcnMgPyB6b29tIDogdmFsdWU7XG4gIH07XG5cbiAgem9vbS5jbGlja0Rpc3RhbmNlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGNsaWNrRGlzdGFuY2UyID0gKF8gPSArXykgKiBfLCB6b29tKSA6IE1hdGguc3FydChjbGlja0Rpc3RhbmNlMik7XG4gIH07XG5cbiAgcmV0dXJuIHpvb207XG59XG4iLCJleHBvcnQgdmFyIG5hbWUgPSBcImQzXCI7XG5leHBvcnQgdmFyIHZlcnNpb24gPSBcIjUuMTYuMFwiO1xuZXhwb3J0IHZhciBkZXNjcmlwdGlvbiA9IFwiRGF0YS1Ecml2ZW4gRG9jdW1lbnRzXCI7XG5leHBvcnQgdmFyIGtleXdvcmRzID0gW1wiZG9tXCIsXCJ2aXN1YWxpemF0aW9uXCIsXCJzdmdcIixcImFuaW1hdGlvblwiLFwiY2FudmFzXCJdO1xuZXhwb3J0IHZhciBob21lcGFnZSA9IFwiaHR0cHM6Ly9kM2pzLm9yZ1wiO1xuZXhwb3J0IHZhciBsaWNlbnNlID0gXCJCU0QtMy1DbGF1c2VcIjtcbmV4cG9ydCB2YXIgYXV0aG9yID0ge1wibmFtZVwiOlwiTWlrZSBCb3N0b2NrXCIsXCJ1cmxcIjpcImh0dHBzOi8vYm9zdC5vY2tzLm9yZy9taWtlXCJ9O1xuZXhwb3J0IHZhciBtYWluID0gXCJkaXN0L2QzLm5vZGUuanNcIjtcbmV4cG9ydCB2YXIgdW5wa2cgPSBcImRpc3QvZDMubWluLmpzXCI7XG5leHBvcnQgdmFyIGpzZGVsaXZyID0gXCJkaXN0L2QzLm1pbi5qc1wiO1xuZXhwb3J0IHZhciBtb2R1bGUgPSBcImluZGV4LmpzXCI7XG5leHBvcnQgdmFyIHJlcG9zaXRvcnkgPSB7XCJ0eXBlXCI6XCJnaXRcIixcInVybFwiOlwiaHR0cHM6Ly9naXRodWIuY29tL2QzL2QzLmdpdFwifTtcbmV4cG9ydCB2YXIgZmlsZXMgPSBbXCJkaXN0LyoqLyouanNcIixcImluZGV4LmpzXCJdO1xuZXhwb3J0IHZhciBzY3JpcHRzID0ge1wicHJldGVzdFwiOlwicmltcmFmIGRpc3QgJiYgbWtkaXIgZGlzdCAmJiBqc29uMm1vZHVsZSBwYWNrYWdlLmpzb24gPiBkaXN0L3BhY2thZ2UuanMgJiYgcm9sbHVwIC1jXCIsXCJ0ZXN0XCI6XCJ0YXBlICd0ZXN0LyoqLyotdGVzdC5qcydcIixcInByZXB1Ymxpc2hPbmx5XCI6XCJ5YXJuIHRlc3RcIixcInBvc3RwdWJsaXNoXCI6XCJnaXQgcHVzaCAmJiBnaXQgcHVzaCAtLXRhZ3MgJiYgY2QgLi4vZDMuZ2l0aHViLmNvbSAmJiBnaXQgcHVsbCAmJiBjcCAuLi9kMy9kaXN0L2QzLmpzIGQzLnY1LmpzICYmIGNwIC4uL2QzL2Rpc3QvZDMubWluLmpzIGQzLnY1Lm1pbi5qcyAmJiBnaXQgYWRkIGQzLnY1LmpzIGQzLnY1Lm1pbi5qcyAmJiBnaXQgY29tbWl0IC1tIFxcXCJkMyAke25wbV9wYWNrYWdlX3ZlcnNpb259XFxcIiAmJiBnaXQgcHVzaCAmJiBjZCAtICYmIGNkIC4uL2QzLWJvd2VyICYmIGdpdCBwdWxsICYmIGNwIC4uL2QzL0xJQ0VOU0UgLi4vZDMvUkVBRE1FLm1kIC4uL2QzL2Rpc3QvZDMuanMgLi4vZDMvZGlzdC9kMy5taW4uanMgLiAmJiBnaXQgYWRkIC0tIExJQ0VOU0UgUkVBRE1FLm1kIGQzLmpzIGQzLm1pbi5qcyAmJiBnaXQgY29tbWl0IC1tIFxcXCIke25wbV9wYWNrYWdlX3ZlcnNpb259XFxcIiAmJiBnaXQgdGFnIC1hbSBcXFwiJHtucG1fcGFja2FnZV92ZXJzaW9ufVxcXCIgdiR7bnBtX3BhY2thZ2VfdmVyc2lvbn0gJiYgZ2l0IHB1c2ggJiYgZ2l0IHB1c2ggLS10YWdzICYmIGNkIC0gJiYgemlwIC1qIGRpc3QvZDMuemlwIC0tIExJQ0VOU0UgUkVBRE1FLm1kIEFQSS5tZCBDSEFOR0VTLm1kIGRpc3QvZDMuanMgZGlzdC9kMy5taW4uanNcIn07XG5leHBvcnQgdmFyIGRldkRlcGVuZGVuY2llcyA9IHtcImpzb24ybW9kdWxlXCI6XCIwLjBcIixcInJpbXJhZlwiOlwiMlwiLFwicm9sbHVwXCI6XCIxXCIsXCJyb2xsdXAtcGx1Z2luLWFzY2lpXCI6XCIwLjBcIixcInJvbGx1cC1wbHVnaW4tbm9kZS1yZXNvbHZlXCI6XCIzXCIsXCJyb2xsdXAtcGx1Z2luLXRlcnNlclwiOlwiNVwiLFwidGFwZVwiOlwiNFwifTtcbmV4cG9ydCB2YXIgZGVwZW5kZW5jaWVzID0ge1wiZDMtYXJyYXlcIjpcIjFcIixcImQzLWF4aXNcIjpcIjFcIixcImQzLWJydXNoXCI6XCIxXCIsXCJkMy1jaG9yZFwiOlwiMVwiLFwiZDMtY29sbGVjdGlvblwiOlwiMVwiLFwiZDMtY29sb3JcIjpcIjFcIixcImQzLWNvbnRvdXJcIjpcIjFcIixcImQzLWRpc3BhdGNoXCI6XCIxXCIsXCJkMy1kcmFnXCI6XCIxXCIsXCJkMy1kc3ZcIjpcIjFcIixcImQzLWVhc2VcIjpcIjFcIixcImQzLWZldGNoXCI6XCIxXCIsXCJkMy1mb3JjZVwiOlwiMVwiLFwiZDMtZm9ybWF0XCI6XCIxXCIsXCJkMy1nZW9cIjpcIjFcIixcImQzLWhpZXJhcmNoeVwiOlwiMVwiLFwiZDMtaW50ZXJwb2xhdGVcIjpcIjFcIixcImQzLXBhdGhcIjpcIjFcIixcImQzLXBvbHlnb25cIjpcIjFcIixcImQzLXF1YWR0cmVlXCI6XCIxXCIsXCJkMy1yYW5kb21cIjpcIjFcIixcImQzLXNjYWxlXCI6XCIyXCIsXCJkMy1zY2FsZS1jaHJvbWF0aWNcIjpcIjFcIixcImQzLXNlbGVjdGlvblwiOlwiMVwiLFwiZDMtc2hhcGVcIjpcIjFcIixcImQzLXRpbWVcIjpcIjFcIixcImQzLXRpbWUtZm9ybWF0XCI6XCIyXCIsXCJkMy10aW1lclwiOlwiMVwiLFwiZDMtdHJhbnNpdGlvblwiOlwiMVwiLFwiZDMtdm9yb25vaVwiOlwiMVwiLFwiZDMtem9vbVwiOlwiMVwifTtcbiIsImV4cG9ydCB7dmVyc2lvbn0gZnJvbSBcIi4vZGlzdC9wYWNrYWdlLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiZDMtYXJyYXlcIjtcbmV4cG9ydCAqIGZyb20gXCJkMy1heGlzXCI7XG5leHBvcnQgKiBmcm9tIFwiZDMtYnJ1c2hcIjtcbmV4cG9ydCAqIGZyb20gXCJkMy1jaG9yZFwiO1xuZXhwb3J0ICogZnJvbSBcImQzLWNvbGxlY3Rpb25cIjtcbmV4cG9ydCAqIGZyb20gXCJkMy1jb2xvclwiO1xuZXhwb3J0ICogZnJvbSBcImQzLWNvbnRvdXJcIjtcbmV4cG9ydCAqIGZyb20gXCJkMy1kaXNwYXRjaFwiO1xuZXhwb3J0ICogZnJvbSBcImQzLWRyYWdcIjtcbmV4cG9ydCAqIGZyb20gXCJkMy1kc3ZcIjtcbmV4cG9ydCAqIGZyb20gXCJkMy1lYXNlXCI7XG5leHBvcnQgKiBmcm9tIFwiZDMtZmV0Y2hcIjtcbmV4cG9ydCAqIGZyb20gXCJkMy1mb3JjZVwiO1xuZXhwb3J0ICogZnJvbSBcImQzLWZvcm1hdFwiO1xuZXhwb3J0ICogZnJvbSBcImQzLWdlb1wiO1xuZXhwb3J0ICogZnJvbSBcImQzLWhpZXJhcmNoeVwiO1xuZXhwb3J0ICogZnJvbSBcImQzLWludGVycG9sYXRlXCI7XG5leHBvcnQgKiBmcm9tIFwiZDMtcGF0aFwiO1xuZXhwb3J0ICogZnJvbSBcImQzLXBvbHlnb25cIjtcbmV4cG9ydCAqIGZyb20gXCJkMy1xdWFkdHJlZVwiO1xuZXhwb3J0ICogZnJvbSBcImQzLXJhbmRvbVwiO1xuZXhwb3J0ICogZnJvbSBcImQzLXNjYWxlXCI7XG5leHBvcnQgKiBmcm9tIFwiZDMtc2NhbGUtY2hyb21hdGljXCI7XG5leHBvcnQgKiBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5leHBvcnQgKiBmcm9tIFwiZDMtc2hhcGVcIjtcbmV4cG9ydCAqIGZyb20gXCJkMy10aW1lXCI7XG5leHBvcnQgKiBmcm9tIFwiZDMtdGltZS1mb3JtYXRcIjtcbmV4cG9ydCAqIGZyb20gXCJkMy10aW1lclwiO1xuZXhwb3J0ICogZnJvbSBcImQzLXRyYW5zaXRpb25cIjtcbmV4cG9ydCAqIGZyb20gXCJkMy12b3Jvbm9pXCI7XG5leHBvcnQgKiBmcm9tIFwiZDMtem9vbVwiO1xuIiwiZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0gX2NsYXNzQ2FsbENoZWNrLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICB9XG59XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb25zdHJ1Y3RvciwgXCJwcm90b3R5cGVcIiwge1xuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KTtcbiAgcmV0dXJuIENvbnN0cnVjdG9yO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfY3JlYXRlQ2xhc3MsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikge1xuICByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDoge1xuICAgIFwiZGVmYXVsdFwiOiBvYmpcbiAgfTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdCwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICByZXR1cm4gKG1vZHVsZS5leHBvcnRzID0gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gdHlwZW9mIG9iajtcbiAgfSA6IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gb2JqICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xuICB9LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHMpLCBfdHlwZW9mKG9iaik7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBjb240Z2lzLCB0aGUgZ2lzLWtpdCBmb3IgQ29udGFvIENNUy5cbiAqIEBwYWNrYWdlIGNvbjRnaXNcbiAqIEB2ZXJzaW9uIDhcbiAqIEBhdXRob3IgY29uNGdpcyBjb250cmlidXRvcnMgKHNlZSBcImF1dGhvcnMudHh0XCIpXG4gKiBAbGljZW5zZSBMR1BMLTMuMC1vci1sYXRlclxuICogQGNvcHlyaWdodCAoYykgMjAxMC0yMDIyLCBieSBLw7xzdGVuc2NobWllZGUgR21iSCBTb2Z0d2FyZSAmIERlc2lnblxuICogQGxpbmsgaHR0cHM6Ly93d3cuY29uNGdpcy5vcmdcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmltcG9ydCBjMyBmcm9tICdjMyc7XG5pbXBvcnQgKiBhcyBkMyBmcm9tICdkMyc7XG5cbmNsYXNzIFZpcyB7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5lbGVtZW50cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2M0Z19jaGFydCcpO1xuICAgIHRoaXMuY2hhcnRzID0gW107XG4gIH1cblxuXG4gIGdlbmVyYXRlQ2hhcnRzKCkge1xuICAgIGNvbnN0IHNjb3BlID0gdGhpcztcbiAgICBsZXQgZWxJbmRleCA9IDA7XG5cbiAgICAvLyB2YXIgZGVMb2NhbGVEZWYgPSB7XG4gICAgLy8gICAgIFwiZGF0ZVRpbWVcIjogXCIlQSwgZGVyICVlLiAlQiAlWSwgJVhcIixcbiAgICAvLyAgICAgXCJkYXRlXCI6IFwiJWQuJW0uJVlcIixcbiAgICAvLyAgICAgXCJ0aW1lXCI6IFwiJUg6JU06JVNcIixcbiAgICAvLyAgICAgXCJwZXJpb2RzXCI6IFtcInZvcm1pdHRhZ3NcIiwgXCJuYWNobWl0dGFnc1wiXSxcbiAgICAvLyAgICAgXCJkYXlzXCI6IFtcIlNvbm50YWdcIiwgXCJNb250YWdcIiwgXCJEaWVuc3RhZ1wiLCBcIk1pdHR3b2NoXCIsIFwiRG9ubmVyc3RhZ1wiLCBcIkZyZWl0YWdcIiwgXCJTYW1zdGFnXCJdLFxuICAgIC8vICAgICBcInNob3J0RGF5c1wiOiBbXCJTb1wiLCBcIk1vXCIsIFwiRGlcIiwgXCJNaVwiLCBcIkRvXCIsIFwiRnJcIiwgXCJTYVwiXSxcbiAgICAvLyAgICAgXCJtb250aHNcIjogW1wiSmFudWFyXCIsIFwiRmVicnVhclwiLCBcIk3DpHJ6XCIsIFwiQXByaWxcIiwgXCJNYWlcIiwgXCJKdW5pXCIsIFwiSnVsaVwiLCBcIkF1Z3VzdFwiLCBcIlNlcHRlbWJlclwiLCBcIk9rdG9iZXJcIiwgXCJOb3ZlbWJlclwiLCBcIkRlemVtYmVyXCJdLFxuICAgIC8vICAgICBcInNob3J0TW9udGhzXCI6IFtcIkphblwiLCBcIkZlYlwiLCBcIk1yelwiLCBcIkFwclwiLCBcIk1haVwiLCBcIkp1blwiLCBcIkp1bFwiLCBcIkF1Z1wiLCBcIlNlcFwiLCBcIk9rdFwiLCBcIk5vdlwiLCBcIkRlelwiXSxcbiAgICAvLyAgICAgXCJkZWNpbWFsXCI6IFwiLFwiLFxuICAgIC8vICAgICBcInRob3VzYW5kc1wiOiBcIidcIixcbiAgICAvLyAgICAgXCJncm91cGluZ1wiOiBbM10sXG4gICAgLy8gICAgIFwiY3VycmVuY3lcIjogW1wiXCIsIFwiXFx1MDBhMEVVUlwiXVxuICAgIC8vIH07XG4gICAgLy9cbiAgICAvLyB2YXIgZGVMb2NhbGUgPSBkMy5sb2NhbGUoZGVMb2NhbGVEZWYpO1xuXG4gICAgd2hpbGUgKGVsSW5kZXggPCB0aGlzLmVsZW1lbnRzLmxlbmd0aCkge1xuICAgICAgbGV0IGVsZW1lbnQgPSB0aGlzLmVsZW1lbnRzLml0ZW0oZWxJbmRleCk7XG4gICAgICBpZiAoZWxlbWVudCAmJiBlbGVtZW50LmRhdGFzZXQgJiYgZWxlbWVudC5kYXRhc2V0LmNoYXJ0KSB7XG4gICAgICAgIGxldCB1cmwgPSAnL3Zpc3VhbGl6YXRpb24tYXBpL2ZldGNoQ2hhcnQvJyArIGVsZW1lbnQuZGF0YXNldC5jaGFydDtcbiAgICAgICAgZmV0Y2godXJsKVxuICAgICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHJlc3BvbnNlLmpzb24oKSlcbiAgICAgICAgICAudGhlbigocmVzcG9uc2VKc29uKSA9PiB7XG4gICAgICAgICAgICByZXNwb25zZUpzb24gPSB0aGlzLnNldFRpY2tDb25maWdGb3JZQXhpcyhyZXNwb25zZUpzb24pO1xuXG5cbiAgICAgICAgICAgIGxldCBjaGFydCA9IHtcbiAgICAgICAgICAgICAgYmluZHRvOiAnIycgKyBlbGVtZW50LmlkLFxuICAgICAgICAgICAgICBiYXNlOiByZXNwb25zZUpzb24sXG4gICAgICAgICAgICAgIGpzb246IHt9LFxuICAgICAgICAgICAgICByYW5nZTogZnVuY3Rpb24ocmFuZ2UpIHtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuYzRnX2NoYXJ0X3JhbmdlX2J1dHRvbicpLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1yYW5nZScpID09PSByYW5nZSkge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJyYW5nZS1hY3RpdmVcIik7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoXCJyYW5nZS1hY3RpdmVcIik7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5qc29uID0gc2NvcGUucGFyc2VKc29uKHRoaXMuYmluZHRvLCB0aGlzLmJhc2UsIHRoaXMsIHJhbmdlKTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgdXBkYXRlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLmpzb24pO1xuICAgICAgICAgICAgICAgIHRoaXMuY2hhcnQgPSBjMy5nZW5lcmF0ZSh0aGlzLmpzb24pO1xuICAgICAgICAgICAgICAgIC8vIHRoaXMuY2hhcnQucGllLlxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY2hhcnQuanNvbiA9IHNjb3BlLnBhcnNlSnNvbignIycgKyBlbGVtZW50LmlkLCByZXNwb25zZUpzb24sIGNoYXJ0KTtcblxuICAgICAgICAgICAgLy8gc2V0IGZvcm1hdCBmb3IgeCBheGlzXG4gICAgICAgICAgICBpZiAodHlwZW9mIHJlc3BvbnNlSnNvbi5heGlzLngudGljayAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHJlc3BvbnNlSnNvbi5heGlzLngudGljay5mb3JtYXQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgIGNoYXJ0LmZvcm1hdCA9IHJlc3BvbnNlSnNvbi5heGlzLngudGljay5mb3JtYXQ7XG4gICAgICAgICAgICAgIGNoYXJ0Lmpzb24uYXhpcy54LnRpY2suZm9ybWF0ID0gZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICBsZXQgY2hydCA9IHNjb3BlLmdldENoYXJ0QnlCaW5kSWQoZWxlbWVudC5pZCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNocnQuZm9ybWF0W3hdO1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHJlc3BvbnNlSnNvbi5heGlzLngudGljayAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHJlc3BvbnNlSnNvbi5heGlzLngudGljay5yb3RhdGUgPT09ICcxJykge1xuICAgICAgICAgICAgICBjaGFydC5yb3RhdGUgPSByZXNwb25zZUpzb24uYXhpcy54LnRpY2sucm90YXRlO1xuICAgICAgICAgICAgICBjaGFydC5qc29uLmF4aXMueC50aWNrLnJvdGF0ZSA9IGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgbGV0IGNocnQgPSBzY29wZS5nZXRDaGFydEJ5QmluZElkKGVsZW1lbnQuaWQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBjaHJ0LnJvdGF0ZVt4XTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2NvcGUuY2hhcnRzLnB1c2goY2hhcnQpO1xuXG4gICAgICAgICAgICBjaGFydC51cGRhdGUoKTtcblxuICAgICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBlbEluZGV4ICs9IDE7XG4gICAgfVxuICB9XG5cbiAgc2V0VGlja0NvbmZpZ0ZvcllBeGlzKGpzb24pIHtcbiAgICBpZiAoanNvbi5heGlzLnkudGlja0Zvcm1hdCkge1xuICAgICAgaWYgKCFqc29uLmF4aXMueS50aWNrKSB7XG4gICAgICAgIGpzb24uYXhpcy55LnRpY2sgPSB7fTtcbiAgICAgIH1cbiAgICAgIGpzb24uYXhpcy55LnRpY2suZm9ybWF0ID0gKGQpID0+IHtcbiAgICAgICAgbGV0IHJvdW5kZWRWYWwgPSBwYXJzZUZsb2F0KGQpLnRvRml4ZWQoMyk7IC8vIFRvRG8gc2V0IHBhcmFtZXRlciBmcm9tIGNvbmZpZ1xuICAgICAgICByZXR1cm4gcm91bmRlZFZhbCArIGpzb24uYXhpcy55LnRpY2tGb3JtYXQ7XG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAoanNvbi5heGlzLnkubGFiZWxDb3VudCkge1xuICAgICAgaWYgKCFqc29uLmF4aXMueS50aWNrKSB7XG4gICAgICAgIGpzb24uYXhpcy55LnRpY2sgPSB7fTtcbiAgICAgIH1cbiAgICAgIGxldCBsYWJlbENvdW50ID0gcGFyc2VJbnQoanNvbi5heGlzLnkubGFiZWxDb3VudCwgMTApO1xuICAgICAgaWYgKGxhYmVsQ291bnQgPiAwKSB7XG4gICAgICAgIGpzb24uYXhpcy55LnRpY2suY291bnQgPSBsYWJlbENvdW50O1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChqc29uLmF4aXMueTIudGlja0Zvcm1hdCkge1xuICAgICAgaWYgKCFqc29uLmF4aXMueTIudGljaykge1xuICAgICAgICBqc29uLmF4aXMueTIudGljayA9IHt9O1xuICAgICAgfVxuICAgICAganNvbi5heGlzLnkyLnRpY2suZm9ybWF0ID0gKGQpID0+IHtcbiAgICAgICAgbGV0IHJvdW5kZWRWYWwgPSBwYXJzZUZsb2F0KGQpLnRvRml4ZWQoMyk7IC8vIFRvRG8gc2V0IHBhcmFtZXRlciBmcm9tIGNvbmZpZ1xuICAgICAgICByZXR1cm4gcm91bmRlZFZhbCArIGpzb24uYXhpcy55Mi50aWNrRm9ybWF0O1xuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKGpzb24uYXhpcy55Mi5sYWJlbENvdW50KSB7XG4gICAgICBpZiAoIWpzb24uYXhpcy55Mi50aWNrKSB7XG4gICAgICAgIGpzb24uYXhpcy55Mi50aWNrID0ge307XG4gICAgICB9XG4gICAgICBsZXQgbGFiZWxDb3VudCA9IHBhcnNlSW50KGpzb24uYXhpcy55Mi5sYWJlbENvdW50LCAxMCk7XG4gICAgICBpZiAobGFiZWxDb3VudCA+IDApIHtcbiAgICAgICAganNvbi5heGlzLnkyLnRpY2suY291bnQgPSBsYWJlbENvdW50O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBqc29uO1xuICB9XG5cbiAgcGFyc2VKc29uKGJpbmR0bywganNvbiwgY2hhcnQsIHJhbmdlID0gJ3JhbmdlX2RlZmF1bHQnKSB7XG4gICAgLy9jb25zb2xlLmxvZyhyYW5nZSk7XG4gICAgbGV0IGMzanNvbiA9IHtcbiAgICAgIGJpbmR0bzogYmluZHRvLFxuICAgICAgZGF0YToge1xuICAgICAgICB4czoge30sXG4gICAgICAgIGNvbHVtbnM6IFtdLFxuICAgICAgICB0eXBlczoge30sXG4gICAgICAgIGNvbG9yczoge30sXG4gICAgICAgIG5hbWVzOiB7fSxcbiAgICAgICAgZ3JvdXBzOiBbXSxcbiAgICAgICAgcmVkaXJlY3RzOiB7fSxcbiAgICAgIH0sXG4gICAgICBheGlzOiB7fSxcbiAgICAgIHRvb2x0aXA6IHtcbiAgICAgICAgZm9ybWF0OiB7XG5cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHpvb206IHtcbiAgICAgICAgZW5hYmxlZDogZmFsc2VcbiAgICAgIH0sXG4gICAgICBwb2ludHM6IHtcbiAgICAgICAgZW5hYmxlZDogdHJ1ZVxuICAgICAgfSxcbiAgICAgIGxlZ2VuZDoge1xuICAgICAgICBlbmFibGVkOiB0cnVlXG4gICAgICB9LFxuICAgICAgdG9vbHRpcHM6IHtcbiAgICAgICAgZW5hYmxlZDogdHJ1ZVxuICAgICAgfSxcbiAgICAgIGxhYmVsczoge1xuICAgICAgICBlbmFibGVkOiBmYWxzZVxuICAgICAgfSxcbiAgICAgIG9uZUxhYmVsUGVyRWxlbWVudDoge1xuICAgICAgICBlbmFibGVkOiBmYWxzZVxuICAgICAgfSxcbiAgICAgIGdyaWQ6IHtcbiAgICAgICAgeDoge1xuICAgICAgICAgIHNob3c6IGZhbHNlXG4gICAgICAgIH0sXG4gICAgICAgIHk6IHtcbiAgICAgICAgICBzaG93OiBmYWxzZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIGxldCBpbmRleCA9IDA7XG4gICAgd2hpbGUgKGluZGV4IDwganNvbi5jb2xvcnMubGVuZ3RoKSB7XG4gICAgICBjM2pzb24uZGF0YS5jb2xvcnNbJ3knICsgaW5kZXhdID0ganNvbi5jb2xvcnNbaW5kZXhdO1xuICAgICAgYzNqc29uLmRhdGEuY29sb3JzW2pzb24uZGF0YVtpbmRleF0ubmFtZV0gPSBqc29uLmNvbG9yc1tpbmRleF07XG4gICAgICBpbmRleCArPSAxO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGpzb24uYXhpcyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGMzanNvbi5heGlzID0ganNvbi5heGlzO1xuICAgIH1cblxuICAgIGxldCByYW5nZUxvd2VyQm91bmQ7XG4gICAgbGV0IHJhbmdlVXBwZXJCb3VuZDtcbiAgICBpZiAocmFuZ2UgIT09ICdyYW5nZV9hbGwnKSB7XG4gICAgICBjM2pzb24uYXhpcy54LnRpY2sudmFsdWVzID0gYzNqc29uLmF4aXMueC50aWNrLnNpbmdsZVZhbHVlcztcbiAgICAgIGMzanNvbi5heGlzLngudGljay5mb3JtYXQgPSAodmFsdWUpID0+IHtcbiAgICAgICAgcmV0dXJuIGMzanNvbi5heGlzLngudGljay5zaW5nbGVGb3JtYXRbdmFsdWVdO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBqc29uLnJhbmdlc1tyYW5nZV0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJhbmdlID0gJ3JhbmdlX2FsbCc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByYW5nZUxvd2VyQm91bmQgPSBqc29uLnJhbmdlc1tyYW5nZV0ubG93ZXJCb3VuZDtcbiAgICAgICAgcmFuZ2VVcHBlckJvdW5kID0ganNvbi5yYW5nZXNbcmFuZ2VdLnVwcGVyQm91bmQ7XG4gICAgICAgIGlmIChqc29uLnJhbmdlc1tyYW5nZV0ueU1pbikge1xuICAgICAgICAgIGMzanNvbi5heGlzLnkubWluID0ganNvbi5yYW5nZXNbcmFuZ2VdLnlNaW47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGpzb24ucmFuZ2VzW3JhbmdlXS55Mk1pbikge1xuICAgICAgICAgIGMzanNvbi5heGlzLnkyLm1pbiA9IGpzb24ucmFuZ2VzW3JhbmdlXS55Mk1pbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoanNvbi5yYW5nZXNbcmFuZ2VdLnlNYXgpIHtcbiAgICAgICAgICBjM2pzb24uYXhpcy55Lm1heCA9IGpzb24ucmFuZ2VzW3JhbmdlXS55TWF4O1xuICAgICAgICB9XG4gICAgICAgIGlmIChqc29uLnJhbmdlc1tyYW5nZV0ueTJNYXgpIHtcbiAgICAgICAgICBjM2pzb24uYXhpcy55Mi5tYXggPSBqc29uLnJhbmdlc1tyYW5nZV0ueTJNYXg7XG4gICAgICAgIH1cbiAgICAgICAgLy9jb25zb2xlLmxvZyhyYW5nZUxvd2VyQm91bmQgKyBcIi9cIiArIHJhbmdlVXBwZXJCb3VuZCk7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgYzNqc29uLmF4aXMueC50aWNrLnZhbHVlcyA9IGMzanNvbi5heGlzLngudGljay52YWx1ZXNBbGw7XG4gICAgICBjM2pzb24uYXhpcy54LnRpY2suZm9ybWF0ID0gKHZhbHVlKSA9PiB7XG4gICAgICAgIHJldHVybiBjM2pzb24uYXhpcy54LnRpY2suZm9ybWF0QWxsW3ZhbHVlXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpbmRleCA9IDA7XG4gICAgbGV0IGhhc0N1c3RvbVRvb2x0aXAgPSBmYWxzZTtcbiAgICB3aGlsZSAoaW5kZXggPCBqc29uLmRhdGEubGVuZ3RoKSB7XG4gICAgICBsZXQgeCA9IFtdO1xuICAgICAgbGV0IHkgPSBbXTtcbiAgICAgIGxldCBpID0gMDtcblxuICAgICAgaWYgKGpzb24uZGF0YVtpbmRleF0udHlwZSA9PT0gXCJsaW5lXCIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBqc29uLmRhdGFbaW5kZXhdLm5hbWUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgeC5wdXNoKCd4JyArIGluZGV4KTtcbiAgICAgICAgICB5LnB1c2goanNvbi5kYXRhW2luZGV4XS5uYW1lKTtcbiAgICAgICAgICBjM2pzb24uZGF0YS54c1tqc29uLmRhdGFbaW5kZXhdLm5hbWVdID0gJ3gnICsgaW5kZXg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgeC5wdXNoKCd4JyArIGluZGV4KTtcbiAgICAgICAgICB5LnB1c2goJ3knICsgaW5kZXgpO1xuICAgICAgICAgIGMzanNvbi5kYXRhLnhzWyd5JyArIGluZGV4XSA9ICd4JyArIGluZGV4O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjM2pzb24uZGF0YS54c1sneScgKyBpbmRleF0gPSAneCcgKyBpbmRleDtcbiAgICAgICAgeC5wdXNoKCd4JyArIGluZGV4KTtcbiAgICAgICAgeS5wdXNoKCd5JyArIGluZGV4KTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFjM2pzb24uZGF0YS5heGVzKSB7XG4gICAgICAgIGMzanNvbi5kYXRhLmF4ZXMgPSB7fTtcbiAgICAgIH1cbiAgICAgIGlmICghYzNqc29uLmRhdGEuYXhlc1tqc29uLmRhdGFbaW5kZXhdLm5hbWVdKSB7XG4gICAgICAgIGMzanNvbi5kYXRhLmF4ZXNbanNvbi5kYXRhW2luZGV4XS5uYW1lXSA9IGpzb24uZGF0YVtpbmRleF0udGFyZ2V0O1xuICAgICAgfVxuXG4gICAgICB3aGlsZSAoaSA8IGpzb24uZGF0YVtpbmRleF0uZGF0YVBvaW50cy5sZW5ndGgpIHtcbiAgICAgICAgbGV0IGNoYXJ0VHlwZUNvbmRpdGlvbiA9IChqc29uLmRhdGFbaW5kZXhdLnR5cGUgPT09ICdwaWUnKSB8fCAoanNvbi5kYXRhW2luZGV4XS50eXBlID09PSAnZG9udXQnKSB8fCAoanNvbi5kYXRhW2luZGV4XS50eXBlID09PSAnZ2F1Z2UnKTtcbiAgICAgICAgbGV0IHJhbmdlQ29uZGl0aW9uID0gKHJhbmdlID09PSAncmFuZ2VfYWxsJykgfHwgKGpzb24uZGF0YVtpbmRleF0uZGF0YVBvaW50c1tpXS54ID49IHJhbmdlTG93ZXJCb3VuZCAgJiYganNvbi5kYXRhW2luZGV4XS5kYXRhUG9pbnRzW2ldLnggPD0gcmFuZ2VVcHBlckJvdW5kKTtcblxuICAgICAgICBpZiAoY2hhcnRUeXBlQ29uZGl0aW9uIHx8IHJhbmdlQ29uZGl0aW9uKSB7XG4gICAgICAgICAgeC5wdXNoKGpzb24uZGF0YVtpbmRleF0uZGF0YVBvaW50c1tpXS54KTtcbiAgICAgICAgICB5LnB1c2goanNvbi5kYXRhW2luZGV4XS5kYXRhUG9pbnRzW2ldLnkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaSArPSAxO1xuICAgICAgfVxuICAgICAgYzNqc29uLmRhdGEuY29sdW1ucy5wdXNoKHgsIHkpO1xuXG4gICAgICBpZiAoanNvbi5kYXRhW2luZGV4XS50eXBlID09ICdhcmVhc3BsaW5lJykge1xuICAgICAgICBqc29uLmRhdGFbaW5kZXhdLnR5cGUgPSAnYXJlYS1zcGxpbmUnO1xuICAgICAgfVxuXG4gICAgICB2YXIgdHlwZSA9IGpzb24uZGF0YVtpbmRleF0udHlwZSAhPT0gJ2dhbnR0JyA/IGpzb24uZGF0YVtpbmRleF0udHlwZSA6ICdsaW5lJztcblxuICAgICAgYzNqc29uLmRhdGEudHlwZXNbJ3knICsgaW5kZXhdID0gdHlwZTtcbiAgICAgIGlmICh0eXBlb2YganNvbi5kYXRhW2luZGV4XS5uYW1lICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBjM2pzb24uZGF0YS5uYW1lc1sneScgKyBpbmRleF0gPSBqc29uLmRhdGFbaW5kZXhdLm5hbWU7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIGpzb24uZGF0YVtpbmRleF0uZ3JvdXAgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHdoaWxlICh0eXBlb2YgYzNqc29uLmRhdGEuZ3JvdXBzW2pzb24uZGF0YVtpbmRleF0uZ3JvdXBdID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIGMzanNvbi5kYXRhLmdyb3Vwcy5wdXNoKFtdKTtcbiAgICAgICAgfVxuICAgICAgICBjM2pzb24uZGF0YS5ncm91cHNbanNvbi5kYXRhW2luZGV4XS5ncm91cF0ucHVzaCgneScgKyBpbmRleCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YganNvbi5kYXRhW2luZGV4XS5ncm91cCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgd2hpbGUgKHR5cGVvZiBjM2pzb24uZGF0YS5ncm91cHNbanNvbi5kYXRhW2luZGV4XS5ncm91cF0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgYzNqc29uLmRhdGEuZ3JvdXBzLnB1c2goW10pO1xuICAgICAgICB9XG4gICAgICAgIGMzanNvbi5kYXRhLmdyb3Vwc1tqc29uLmRhdGFbaW5kZXhdLmdyb3VwXS5wdXNoKCd5JyArIGluZGV4KTtcbiAgICAgIH1cblxuICAgICAgLy9Ub0RvXG4gICAgICBpZiAodHlwZW9mIGpzb24uZGF0YVtpbmRleF0uZGF0YVBvaW50c1swXS5yZWRpcmVjdCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgYzNqc29uLmRhdGEucmVkaXJlY3RzWyd5JyArIGluZGV4XSA9IGpzb24uZGF0YVtpbmRleF0uZGF0YVBvaW50c1swXS5yZWRpcmVjdDtcbiAgICAgIH1cblxuICAgICAgaWYgKGpzb24uZGF0YVtpbmRleF0udG9vbHRpcEV4dGVuc2lvbikge1xuICAgICAgICBoYXNDdXN0b21Ub29sdGlwID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaW5kZXggKz0gMTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGpzb24uZ3JpZCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGlmIChqc29uLmdyaWQueC5zaG93KSB7XG4gICAgICAgIGMzanNvbi5ncmlkLnguc2hvdyA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAoanNvbi5ncmlkLnkuc2hvdykge1xuICAgICAgICBjM2pzb24uZ3JpZC55LnNob3cgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YganNvbi5zdWJjaGFydCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGMzanNvbi5zdWJjaGFydCA9IGpzb24uc3ViY2hhcnQ7XG4gICAgfVxuXG4gICAgaWYgKCh0eXBlb2YganNvbi56b29tICE9PSAndW5kZWZpbmVkJykgJiYgKHR5cGVvZiBqc29uLnpvb20uZW5hYmxlZCAhPT0gJ3VuZGVmaW5lZCcpKSB7XG4gICAgICBjM2pzb24uem9vbS5lbmFibGVkID0ganNvbi56b29tLmVuYWJsZWQ7XG4gICAgICBjM2pzb24uem9vbS50eXBlID0gJ3Njcm9sbCc7XG4gICAgfVxuXG4gICAgaWYgKCh0eXBlb2YganNvbi5wb2ludHMgIT09ICd1bmRlZmluZWQnKSAmJiAodHlwZW9mIGpzb24ucG9pbnRzLmVuYWJsZWQgIT09ICd1bmRlZmluZWQnKSkge1xuICAgICAgYzNqc29uLnBvaW50ID0ge1xuICAgICAgICBzaG93OiBqc29uLnBvaW50cy5lbmFibGVkXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCh0eXBlb2YganNvbi5sZWdlbmQgIT09ICd1bmRlZmluZWQnKSAmJiAodHlwZW9mIGpzb24ubGVnZW5kLmVuYWJsZWQgIT09ICd1bmRlZmluZWQnKSkge1xuICAgICAgYzNqc29uLmxlZ2VuZCA9IHtcbiAgICAgICAgaGlkZTogIWpzb24ubGVnZW5kLmVuYWJsZWRcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoKHR5cGVvZiBqc29uLmxhYmVscyAhPT0gJ3VuZGVmaW5lZCcpICYmICh0eXBlb2YganNvbi5sYWJlbHMuZW5hYmxlZCAhPT0gJ3VuZGVmaW5lZCcpKSB7XG4gICAgICBjM2pzb24uZGF0YS5sYWJlbHMgPSBqc29uLmxhYmVscy5lbmFibGVkO1xuICAgICAgaWYgKGpzb24uZGF0YVswXS50eXBlID09PSBcInBpZVwiKSB7XG4gICAgICAgIGlmICghYzNqc29uLnBpZSkge1xuICAgICAgICAgIGMzanNvbi5waWUgPSAge307XG4gICAgICAgIH1cbiAgICAgICAgYzNqc29uLnBpZS5sYWJlbCA9IHtzaG93OiBqc29uLmxhYmVscy5lbmFibGVkfTtcbiAgICAgIH1cblxuICAgICAgaWYgKCgodHlwZW9mIGpzb24ub25lTGFiZWxQZXJFbGVtZW50ICE9PSAndW5kZWZpbmVkJykgJiYgKHR5cGVvZiBqc29uLm9uZUxhYmVsUGVyRWxlbWVudC5lbmFibGVkICE9PSAndW5kZWZpbmVkJykgJiYganNvbi5vbmVMYWJlbFBlckVsZW1lbnQuZW5hYmxlZCkpIHtcbiAgICAgICAgbGV0IHNjb3BlID0gdGhpcztcbiAgICAgICAgYzNqc29uLmRhdGEubGFiZWxzID0ge1xuICAgICAgICAgIGZvcm1hdDogZnVuY3Rpb24gKHYsIGlkLCBpLCBqKSB7XG4gICAgICAgICAgICBsZXQgY2hydCA9IHNjb3BlLmdldENoYXJ0QnlCaW5kSWQoYmluZHRvLnN1YnN0cigxLCBiaW5kdG8ubGVuZ3RoKSk7XG4gICAgICAgICAgICBpZiAoIChpZCkgJiYgKGkgPT0gMCkgKSB7XG4gICAgICAgICAgICAgIHJldHVybiBjaHJ0Lmpzb24uZGF0YS5uYW1lc1tpZF07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCh0eXBlb2YganNvbi50b29sdGlwcyAhPT0gJ3VuZGVmaW5lZCcpICYmICh0eXBlb2YganNvbi50b29sdGlwcy5lbmFibGVkICE9PSAndW5kZWZpbmVkJykgJiYganNvbi50b29sdGlwcy5lbmFibGVkICYmXG4gICAgICAodHlwZW9mIGpzb24udG9vbHRpcCAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGpzb24udG9vbHRpcC5mb3JtYXQgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBqc29uLnRvb2x0aXAuZm9ybWF0LnRpdGxlICE9PSAndW5kZWZpbmVkJykpIHtcbiAgICAgIGNoYXJ0LnRvb2x0aXBmb3JtYXR0aXRsZSA9IGpzb24udG9vbHRpcC5mb3JtYXQudGl0bGU7XG4gICAgICBsZXQgc2NvcGUgPSB0aGlzO1xuICAgICAgYzNqc29uLnRvb2x0aXAuZm9ybWF0LnRpdGxlID0gZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgbGV0IGNocnQgPSBzY29wZS5nZXRDaGFydEJ5QmluZElkKGJpbmR0by5zdWJzdHIoMSwgYmluZHRvLmxlbmd0aCkpO1xuICAgICAgICByZXR1cm4gY2hydC50b29sdGlwZm9ybWF0dGl0bGVbeF07XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBjM2pzb24udG9vbHRpcC5zaG93ID0gKGpzb24udG9vbHRpcHMuZW5hYmxlZCAmJiBqc29uLnRvb2x0aXBzLmVuYWJsZWQgIT09ICd1bmRlZmluZWQnKTtcbiAgICB9XG5cbiAgICBjM2pzb24udG9vbHRpcC5mb3JtYXQudmFsdWUgPSAodmFsdWUsIHJhdGlvLCBpZCwgaW5kZXgpID0+IHtcbiAgICAgIGlmIChpZCA9PT0gXCJ5MFwiKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSArIFwiIFwiICsgYzNqc29uLmF4aXMueS50aWNrRm9ybWF0O1xuICAgICAgfSBlbHNlIGlmIChpZCA9PT0gXCJ5MVwiICYmIGMzanNvbi5heGlzLnkyLnNob3cpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlICsgXCIgXCIgKyBjM2pzb24uYXhpcy55Mi50aWNrRm9ybWF0O1xuICAgICAgfSBlbHNlIGlmIChjM2pzb24uZGF0YS5heGVzW2lkXSkge1xuICAgICAgICByZXR1cm4gdmFsdWUgKyBcIiBcIiArIGMzanNvbi5heGlzW2MzanNvbi5kYXRhLmF4ZXNbaWRdXS50aWNrRm9ybWF0O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfTtcblxuICAgIC8vIGNoZWNrIGZvciBjdXN0b20gdG9vbHRpcFxuICAgIGlmIChoYXNDdXN0b21Ub29sdGlwKSB7XG4gICAgICBpZiAoanNvbi5kYXRhWzBdLnR5cGUgPT09ICdsaW5lJykge1xuICAgICAgICBjM2pzb24udG9vbHRpcC5jb250ZW50cyA9IGZ1bmN0aW9uIChkYXRhLCBkZWZhdWx0VGl0bGVGb3JtYXQsIGRlZmF1bHRWYWx1ZUZvcm1hdCwgY29sb3IpIHtcbiAgICAgICAgICBsZXQgdmFsdWVEaXYgPSBcIjxkaXYgY2xhc3M9J2MzLXRvb2x0aXAnPlwiO1xuXG4gICAgICAgICAgaWYgKGpzb24uZGF0YVswXS54VHlwZSA9PT0gXCJkYXRldGltZVwiKSB7XG4gICAgICAgICAgICAvLyBqcyB3b3JrcyB3aXRoIG1pY3Jvc2Vjb25kc1xuICAgICAgICAgICAgbGV0IHZhbHVlID0gbmV3IERhdGUoZGF0YVswXS54ICogMTAwMCk7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnRvTG9jYWxlRGF0ZVN0cmluZyhcImRlXCIpO1xuICAgICAgICAgICAgdmFsdWVEaXYgKz0gXCI8ZGl2IGNsYXNzPSdjNGctdG9vbHRpcC1uYW1lJz5cIiArIHZhbHVlICsgXCI8L2Rpdj5cIjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFsdWVEaXYgKz0gXCI8ZGl2IGNsYXNzPSdjNGctdG9vbHRpcC1uYW1lJz5cIiArIGRhdGFbMF0ueCArIFwiPC9kaXY+XCI7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFsdWVEaXYgKz0gXCI8ZGl2IGNsYXNzPSdjMy10b29sdGlwLWNvbnRhaW5lcic+XCI7XG5cbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKysgKSB7XG5cbiAgICAgICAgICAgIGxldCBheGlzTmFtZSA9IGMzanNvbi5kYXRhLmF4ZXNbZGF0YVtpXS5uYW1lXTtcblxuICAgICAgICAgICAgdmFsdWVEaXYgKz0gXCI8ZGl2IGNsYXNzPSdjNGctdG9vbHRpcC1lbGVtZW50Jz5cIjtcbiAgICAgICAgICAgIHZhbHVlRGl2ICs9IFwiPGRpdiBjbGFzcz0nYzRnLXRvb2x0aXAtZWxlbWVudC1jb2xvcicgc3R5bGU9J2JhY2tncm91bmQtY29sb3I6IFwiICsgY29sb3IoZGF0YVtpXS5uYW1lKSArIFwiOyc+PC9kaXY+XCI7XG4gICAgICAgICAgICB2YWx1ZURpdiArPSBcIjxkaXYgY2xhc3M9J2M0Zy10b29sdGlwLWVsZW1lbnQtdmFsdWUnPlwiICsgZGF0YVtpXS5uYW1lICsgXCI6IFwiICsgZGVmYXVsdFZhbHVlRm9ybWF0KGRhdGFbaV0udmFsdWUsIDEuMCwgYXhpc05hbWUpICsgXCI8L2Rpdj5cIjtcbiAgICAgICAgICAgIHZhbHVlRGl2ICs9IFwiPGRpdiBjbGFzcz0nYzRnLXRvb2x0aXAtZWxlbWVudC1leHRlbnNpb24tbGluZSc+XCIgKyBqc29uLmRhdGFbaV0udG9vbHRpcEV4dGVuc2lvbiArIFwiPC9kaXY+XCI7XG4gICAgICAgICAgICB2YWx1ZURpdiArPSBcIjwvZGl2PlwiO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhbHVlRGl2ICs9IFwiPC9kaXY+XCI7IC8vIGNsb3NlIGMzLXRvb2x0aXAtY29udGFpbmVyXG4gICAgICAgICAgdmFsdWVEaXYgKz0gXCI8L2Rpdj5cIjsgLy8gY2xvc2UgYzMtdG9vbHRpcFxuXG4gICAgICAgICAgcmV0dXJuIHZhbHVlRGl2O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjM2pzb24udG9vbHRpcC5jb250ZW50cyA9IGZ1bmN0aW9uIChkYXRhLCBkZWZhdWx0VGl0bGVGb3JtYXQsIGRlZmF1bHRWYWx1ZUZvcm1hdCwgY29sb3IpIHtcbiAgICAgICAgICBsZXQgdmFsdWVEaXYgPSBcIjxkaXYgY2xhc3M9J2MzLXRvb2x0aXAnPlwiO1xuXG4gICAgICAgICAgdmFsdWVEaXYgKz0gXCI8ZGl2IGNsYXNzPSdjMy10b29sdGlwLWNvbnRhaW5lcic+XCI7XG5cbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKysgKSB7XG4gICAgICAgICAgICBsZXQgaW5kZXggPSBkYXRhW2ldLmluZGV4O1xuICAgICAgICAgICAgdmFsdWVEaXYgKz0gXCI8ZGl2IGNsYXNzPSdjNGctdG9vbHRpcC1lbGVtZW50LWV4dGVuc2lvbic+XCIgKyBqc29uLmRhdGFbaW5kZXhdLnRvb2x0aXBFeHRlbnNpb24gKyBcIjwvZGl2PlwiO1xuICAgICAgICAgICAgdmFsdWVEaXYgKz0gXCI8L2Rpdj5cIjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YWx1ZURpdiArPSBcIjwvZGl2PlwiOyAvLyBjbG9zZSBjMy10b29sdGlwLWNvbnRhaW5lclxuICAgICAgICAgIHZhbHVlRGl2ICs9IFwiPC9kaXY+XCI7IC8vIGNsb3NlIGMzLXRvb2x0aXBcblxuICAgICAgICAgIHJldHVybiB2YWx1ZURpdjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgfVxuXG4gICAgbGV0IHNjb3BlID0gdGhpcztcbiAgICBjM2pzb24uZGF0YS5vbmNsaWNrID0gZnVuY3Rpb24gKGQsIGVsZW1lbnQpIHtcbiAgICAgIGxldCBjaHJ0ID0gc2NvcGUuZ2V0Q2hhcnRCeUJpbmRJZChiaW5kdG8uc3Vic3RyKDEsIGJpbmR0by5sZW5ndGgpKTtcbiAgICAgIGxldCByZWRpcmVjdCA9IGNocnQuanNvbi5kYXRhLnJlZGlyZWN0c1tkLmlkXTtcbiAgICAgIGlmIChyZWRpcmVjdCAmJiByZWRpcmVjdCAhPSAwKSB7XG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbiA9IGNocnQuanNvbi5kYXRhLnJlZGlyZWN0c1tkLmlkXVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNvbnNvbGUubG9nKGMzanNvbik7XG4gICAgcmV0dXJuIGMzanNvbjtcbiAgfVxuXG4gIGdldENoYXJ0QnlCaW5kSWQoaWQpIHtcbiAgICBsZXQgaW5kZXggPSAwO1xuICAgIHdoaWxlIChpbmRleCA8IHRoaXMuY2hhcnRzLmxlbmd0aCkge1xuICAgICAgaWYgKHRoaXMuY2hhcnRzW2luZGV4XS5iaW5kdG8gPT09ICcjJyArIGlkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoYXJ0c1tpbmRleF07XG4gICAgICB9XG4gICAgICBpbmRleCArPSAxO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGFkZENsaWNrTGlzdGVuZXJzKCkge1xuICAgIGNvbnN0IHNjb3BlID0gdGhpcztcbiAgICBsZXQgYnV0dG9ucyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2M0Z19jaGFydF9yYW5nZV9idXR0b24nKTtcbiAgICBsZXQgaW5kZXggPSAwO1xuICAgIHdoaWxlIChpbmRleCA8IGJ1dHRvbnMubGVuZ3RoKSB7XG4gICAgICBidXR0b25zLml0ZW0oaW5kZXgpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKSB7XG4gICAgICAgIGxldCBjaGFydCA9IHNjb3BlLmdldENoYXJ0QnlCaW5kSWQodGhpcy5kYXRhc2V0LnRhcmdldCk7XG4gICAgICAgIGNoYXJ0LnJhbmdlKHRoaXMuZGF0YXNldC5yYW5nZSk7XG4gICAgICAgIGNoYXJ0LnVwZGF0ZSgpO1xuICAgICAgfSk7XG4gICAgICBpbmRleCArPSAxO1xuICAgIH1cbiAgfVxufVxuXG5sZXQgdmlzID0gbmV3IFZpcygpO1xudmlzLmdlbmVyYXRlQ2hhcnRzKCk7XG52aXMuYWRkQ2xpY2tMaXN0ZW5lcnMoKTtcbiJdLCJuYW1lcyI6WyJWaXMiLCJlbGVtZW50cyIsImRvY3VtZW50IiwiZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSIsImNoYXJ0cyIsInNjb3BlIiwiZWxJbmRleCIsImVsZW1lbnQiLCJpdGVtIiwiZGF0YXNldCIsImNoYXJ0IiwidXJsIiwiZmV0Y2giLCJ0aGVuIiwicmVzcG9uc2UiLCJqc29uIiwicmVzcG9uc2VKc29uIiwic2V0VGlja0NvbmZpZ0ZvcllBeGlzIiwiYmluZHRvIiwiaWQiLCJiYXNlIiwicmFuZ2UiLCJxdWVyeVNlbGVjdG9yQWxsIiwiZm9yRWFjaCIsImdldEF0dHJpYnV0ZSIsImNsYXNzTGlzdCIsImFkZCIsInJlbW92ZSIsInBhcnNlSnNvbiIsInVwZGF0ZSIsImMzIiwiZ2VuZXJhdGUiLCJheGlzIiwieCIsInRpY2siLCJmb3JtYXQiLCJjaHJ0IiwiZ2V0Q2hhcnRCeUJpbmRJZCIsInJvdGF0ZSIsInB1c2giLCJsZW5ndGgiLCJ5IiwidGlja0Zvcm1hdCIsImQiLCJyb3VuZGVkVmFsIiwicGFyc2VGbG9hdCIsInRvRml4ZWQiLCJsYWJlbENvdW50IiwicGFyc2VJbnQiLCJjb3VudCIsInkyIiwiYzNqc29uIiwiZGF0YSIsInhzIiwiY29sdW1ucyIsInR5cGVzIiwiY29sb3JzIiwibmFtZXMiLCJncm91cHMiLCJyZWRpcmVjdHMiLCJ0b29sdGlwIiwiem9vbSIsImVuYWJsZWQiLCJwb2ludHMiLCJsZWdlbmQiLCJ0b29sdGlwcyIsImxhYmVscyIsIm9uZUxhYmVsUGVyRWxlbWVudCIsImdyaWQiLCJzaG93IiwiaW5kZXgiLCJuYW1lIiwicmFuZ2VMb3dlckJvdW5kIiwicmFuZ2VVcHBlckJvdW5kIiwidmFsdWVzIiwic2luZ2xlVmFsdWVzIiwidmFsdWUiLCJzaW5nbGVGb3JtYXQiLCJyYW5nZXMiLCJsb3dlckJvdW5kIiwidXBwZXJCb3VuZCIsInlNaW4iLCJtaW4iLCJ5Mk1pbiIsInlNYXgiLCJtYXgiLCJ5Mk1heCIsInZhbHVlc0FsbCIsImZvcm1hdEFsbCIsImhhc0N1c3RvbVRvb2x0aXAiLCJpIiwidHlwZSIsImF4ZXMiLCJ0YXJnZXQiLCJkYXRhUG9pbnRzIiwiY2hhcnRUeXBlQ29uZGl0aW9uIiwicmFuZ2VDb25kaXRpb24iLCJncm91cCIsInJlZGlyZWN0IiwidG9vbHRpcEV4dGVuc2lvbiIsInN1YmNoYXJ0IiwicG9pbnQiLCJoaWRlIiwicGllIiwibGFiZWwiLCJ2IiwiaiIsInN1YnN0ciIsInRpdGxlIiwidG9vbHRpcGZvcm1hdHRpdGxlIiwicmF0aW8iLCJjb250ZW50cyIsImRlZmF1bHRUaXRsZUZvcm1hdCIsImRlZmF1bHRWYWx1ZUZvcm1hdCIsImNvbG9yIiwidmFsdWVEaXYiLCJ4VHlwZSIsIkRhdGUiLCJ0b0xvY2FsZURhdGVTdHJpbmciLCJheGlzTmFtZSIsIm9uY2xpY2siLCJ3aW5kb3ciLCJsb2NhdGlvbiIsImJ1dHRvbnMiLCJhZGRFdmVudExpc3RlbmVyIiwidmlzIiwiZ2VuZXJhdGVDaGFydHMiLCJhZGRDbGlja0xpc3RlbmVycyJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file +/*! For license information please see c4g_visualization.js.LICENSE.txt */ +(()=>{var t={208:function(t,e,n){t.exports=function(){"use strict";function t(t){var e=this;e.d3=window.d3?window.d3:n(693),e.api=t,e.config=e.getDefaultConfig(),e.data={},e.cache={},e.axes={}}function e(n){this.internal=new t(this),this.internal.loadConfig(n),this.internal.beforeInit(n),this.internal.init(),this.internal.afterInit(n),function t(e,n,i){Object.keys(e).forEach((function(r){n[r]=e[r].bind(i),Object.keys(e[r]).length>0&&t(e[r],n[r],i)}))}(e.prototype,this,this)}var i=function(t){return Math.ceil(t)+.5},r=function(t){return 10*Math.ceil(t/10)},a=function(t){return t[1]-t[0]},o=function(t,e,n){return l(t[e])?t[e]:n},s=function(t){var e=c(t),n=[t.pathSegList.getItem(0),t.pathSegList.getItem(1)];return{x:n[0].x,y:Math.min(n[0].y,n[1].y),width:e.width,height:e.height}},c=function(t){try{return t.getBBox()}catch(t){return{x:0,y:0,width:0,height:0}}},u=function(t){return Array.isArray(t)},l=function(t){return void 0!==t},f=function(t){return null==t||p(t)&&0===t.length||"object"==typeof t&&0===Object.keys(t).length},h=function(t){return"function"==typeof t},d=function(t){return"number"==typeof t},p=function(t){return"string"==typeof t},g=function(t){return void 0===t},y=function(t){return t||0===t},_=function(t){return!f(t)},x=function(t){return"string"==typeof t?t.replace(//g,">"):t},v=function(t){var e=function(t){void 0===t&&(t=window.navigator.userAgent);var e=t.indexOf("MSIE ");return e>0?parseInt(t.substring(e+5,t.indexOf(".",e)),10):(e=t.indexOf("Trident/"))>0&&(e=t.indexOf("rv:"),parseInt(t.substring(e+3,t.indexOf(".",e)),10))}();return void 0===t?!!e:t===e};function m(t,e){var n=this;n.component=t,n.params=e||{},n.d3=t.d3,n.scale=n.d3.scaleLinear(),n.range,n.orient="bottom",n.innerTickSize=6,n.outerTickSize=this.params.withOuterTick?6:0,n.tickPadding=3,n.tickValues=null,n.tickFormat,n.tickArguments,n.tickOffset=0,n.tickCulling=!0,n.tickCentered,n.tickTextCharSize,n.tickTextRotate=n.params.tickTextRotate,n.tickLength,n.axis=n.generateAxis()}m.prototype.axisX=function(t,e,n){t.attr("transform",(function(t){return"translate("+Math.ceil(e(t)+n)+", 0)"}))},m.prototype.axisY=function(t,e){t.attr("transform",(function(t){return"translate(0,"+Math.ceil(e(t))+")"}))},m.prototype.scaleExtent=function(t){var e=t[0],n=t[t.length-1];return e0&&i[0]>0&&i.unshift(i[0]-(i[1]-i[0])),i},m.prototype.copyScale=function(){var t,e=this,n=e.scale.copy();return e.params.isCategory&&(t=e.scale.domain(),n.domain([t[0],t[1]-1])),n},m.prototype.textFormatted=function(t){var e=this.tickFormat?this.tickFormat(t):t;return void 0!==e?e:""},m.prototype.updateRange=function(){var t=this;return t.range=t.scale.rangeExtent?t.scale.rangeExtent():t.scaleExtent(t.scale.range()),t.range},m.prototype.updateTickTextCharSize=function(t){var e=this;if(e.tickTextCharSize)return e.tickTextCharSize;var n={h:11.5,w:5.5};return t.select("text").text((function(t){return e.textFormatted(t)})).each((function(t){var i=c(this),r=e.textFormatted(t),a=i.height,o=r?i.width/r.length:void 0;a&&o&&(n.h=a,n.w=o)})).text(""),e.tickTextCharSize=n,n},m.prototype.isVertical=function(){return"left"===this.orient||"right"===this.orient},m.prototype.tspanData=function(t,e,n){var i=this,r=i.params.tickMultiline?i.splitTickText(t,n):[].concat(i.textFormatted(t));return i.params.tickMultiline&&i.params.tickMultilineMax>0&&(r=i.ellipsify(r,i.params.tickMultilineMax)),r.map((function(t){return{index:e,splitted:t,length:r.length}}))},m.prototype.splitTickText=function(t,e){var n,i,r,a=this,o=a.textFormatted(t),s=a.params.tickWidth;if("[object Array]"===Object.prototype.toString.call(o))return o;return(!s||s<=0)&&(s=a.isVertical()?95:a.params.isCategory?Math.ceil(e(1)-e(0))-12:110),function t(e,o){i=void 0;for(var c=1;c=0;r--){var a=n[r].length;if(n[r]=n[r].substr(0,a-i).padEnd(a,"."),(i-=a)<=0)break}return n},m.prototype.updateTickLength=function(){var t=this;t.tickLength=Math.max(t.innerTickSize,0)+t.tickPadding},m.prototype.lineY2=function(t){var e=this,n=e.scale(t)+(e.tickCentered?0:e.tickOffset);return e.range[0]0?1:-1):this.tickLength},m.prototype.textTransform=function(){var t=this.tickTextRotate;return t?"rotate("+t+")":""},m.prototype.textTextAnchor=function(){var t=this.tickTextRotate;return t?t>0?"start":"end":"middle"},m.prototype.tspanDx=function(){var t=this.tickTextRotate;return t?8*Math.sin(Math.PI*(t/180)):0},m.prototype.tspanDy=function(t,e){var n=this,i=n.tickTextCharSize.h;return 0===e&&(i=n.isVertical()?-((t.length-1)*(n.tickTextCharSize.h/2)-3):".71em"),i},m.prototype.generateAxis=function(){var t=this,e=t.d3,n=t.params;function i(r,a){var o;return r.each((function(){var r,s,c,u=i.g=e.select(this),l=this.__chart__||t.scale,f=this.__chart__=t.copyScale(),h=t.tickValues?t.tickValues:t.generateTicks(f),d=u.selectAll(".tick").data(h,f),p=d.enter().insert("g",".domain").attr("class","tick").style("opacity",1e-6),g=d.exit().remove(),y=d.merge(p);n.isCategory?(t.tickOffset=Math.ceil((f(1)-f(0))/2),s=t.tickCentered?0:t.tickOffset,c=t.tickCentered?t.tickOffset:0):t.tickOffset=s=0,t.updateRange(),t.updateTickLength(),t.updateTickTextCharSize(u.select(".tick"));var _=y.select("line").merge(p.append("line")),x=y.select("text").merge(p.append("text")),v=y.selectAll("text").selectAll("tspan").data((function(e,n){return t.tspanData(e,n,f)})),m=v.enter().append("tspan").merge(v).text((function(t){return t.splitted}));v.exit().remove();var b=u.selectAll(".domain").data([0]),w=b.enter().append("path").merge(b).attr("class","domain");switch(t.orient){case"bottom":r=t.axisX,_.attr("x1",s).attr("x2",s).attr("y2",(function(e,n){return t.lineY2(e,n)})),x.attr("x",0).attr("y",(function(e,n){return t.textY(e,n)})).attr("transform",(function(e,n){return t.textTransform(e,n)})).style("text-anchor",(function(e,n){return t.textTextAnchor(e,n)})),m.attr("x",0).attr("dy",(function(e,n){return t.tspanDy(e,n)})).attr("dx",(function(e,n){return t.tspanDx(e,n)})),w.attr("d","M"+t.range[0]+","+t.outerTickSize+"V0H"+t.range[1]+"V"+t.outerTickSize);break;case"top":r=t.axisX,_.attr("x1",s).attr("x2",s).attr("y2",(function(e,n){return-1*t.lineY2(e,n)})),x.attr("x",0).attr("y",(function(e,i){return-1*t.textY(e,i)-(n.isCategory?2:t.tickLength-2)})).attr("transform",(function(e,n){return t.textTransform(e,n)})).style("text-anchor",(function(e,n){return t.textTextAnchor(e,n)})),m.attr("x",0).attr("dy",(function(e,n){return t.tspanDy(e,n)})).attr("dx",(function(e,n){return t.tspanDx(e,n)})),w.attr("d","M"+t.range[0]+","+-t.outerTickSize+"V0H"+t.range[1]+"V"+-t.outerTickSize);break;case"left":r=t.axisY,_.attr("x2",-t.innerTickSize).attr("y1",c).attr("y2",c),x.attr("x",-t.tickLength).attr("y",t.tickOffset).style("text-anchor","end"),m.attr("x",-t.tickLength).attr("dy",(function(e,n){return t.tspanDy(e,n)})),w.attr("d","M"+-t.outerTickSize+","+t.range[0]+"H0V"+t.range[1]+"H"+-t.outerTickSize);break;case"right":r=t.axisY,_.attr("x2",t.innerTickSize).attr("y1",c).attr("y2",c),x.attr("x",t.tickLength).attr("y",t.tickOffset).style("text-anchor","start"),m.attr("x",t.tickLength).attr("dy",(function(e,n){return t.tspanDy(e,n)})),w.attr("d","M"+t.outerTickSize+","+t.range[0]+"H0V"+t.range[1]+"H"+t.outerTickSize)}if(f.rangeBand){var S=f,T=S.rangeBand()/2;l=f=function(t){return S(t)+T}}else l.rangeBand?l=f:g.call(r,f,t.tickOffset);p.call(r,l,t.tickOffset),o=(a?y.transition(a):y).style("opacity",1).call(r,f,t.tickOffset)})),o}return i.scale=function(e){return arguments.length?(t.scale=e,i):t.scale},i.orient=function(e){return arguments.length?(t.orient=e in{top:1,right:1,bottom:1,left:1}?e+"":"bottom",i):t.orient},i.tickFormat=function(e){return arguments.length?(t.tickFormat=e,i):t.tickFormat},i.tickCentered=function(e){return arguments.length?(t.tickCentered=e,i):t.tickCentered},i.tickOffset=function(){return t.tickOffset},i.tickInterval=function(){var e;return(e=n.isCategory?2*t.tickOffset:(i.g.select("path.domain").node().getTotalLength()-2*t.outerTickSize)/i.g.selectAll("line").size())==1/0?0:e},i.ticks=function(){return arguments.length?(t.tickArguments=arguments,i):t.tickArguments},i.tickCulling=function(e){return arguments.length?(t.tickCulling=e,i):t.tickCulling},i.tickValues=function(e){if("function"==typeof e)t.tickValues=function(){return e(t.scale.domain())};else{if(!arguments.length)return t.tickValues;t.tickValues=e}return i},i};var b={target:"c3-target",chart:"c3-chart",chartLine:"c3-chart-line",chartLines:"c3-chart-lines",chartBar:"c3-chart-bar",chartBars:"c3-chart-bars",chartText:"c3-chart-text",chartTexts:"c3-chart-texts",chartArc:"c3-chart-arc",chartArcs:"c3-chart-arcs",chartArcsTitle:"c3-chart-arcs-title",chartArcsBackground:"c3-chart-arcs-background",chartArcsGaugeUnit:"c3-chart-arcs-gauge-unit",chartArcsGaugeMax:"c3-chart-arcs-gauge-max",chartArcsGaugeMin:"c3-chart-arcs-gauge-min",selectedCircle:"c3-selected-circle",selectedCircles:"c3-selected-circles",eventRect:"c3-event-rect",eventRects:"c3-event-rects",eventRectsSingle:"c3-event-rects-single",eventRectsMultiple:"c3-event-rects-multiple",zoomRect:"c3-zoom-rect",brush:"c3-brush",dragZoom:"c3-drag-zoom",focused:"c3-focused",defocused:"c3-defocused",region:"c3-region",regions:"c3-regions",title:"c3-title",tooltipContainer:"c3-tooltip-container",tooltip:"c3-tooltip",tooltipName:"c3-tooltip-name",shape:"c3-shape",shapes:"c3-shapes",line:"c3-line",lines:"c3-lines",bar:"c3-bar",bars:"c3-bars",circle:"c3-circle",circles:"c3-circles",arc:"c3-arc",arcLabelLine:"c3-arc-label-line",arcs:"c3-arcs",area:"c3-area",areas:"c3-areas",empty:"c3-empty",text:"c3-text",texts:"c3-texts",gaugeValue:"c3-gauge-value",grid:"c3-grid",gridLines:"c3-grid-lines",xgrid:"c3-xgrid",xgrids:"c3-xgrids",xgridLine:"c3-xgrid-line",xgridLines:"c3-xgrid-lines",xgridFocus:"c3-xgrid-focus",ygrid:"c3-ygrid",ygrids:"c3-ygrids",ygridLine:"c3-ygrid-line",ygridLines:"c3-ygrid-lines",colorScale:"c3-colorscale",stanfordElements:"c3-stanford-elements",stanfordLine:"c3-stanford-line",stanfordLines:"c3-stanford-lines",stanfordRegion:"c3-stanford-region",stanfordRegions:"c3-stanford-regions",stanfordText:"c3-stanford-text",stanfordTexts:"c3-stanford-texts",axis:"c3-axis",axisX:"c3-axis-x",axisXLabel:"c3-axis-x-label",axisY:"c3-axis-y",axisYLabel:"c3-axis-y-label",axisY2:"c3-axis-y2",axisY2Label:"c3-axis-y2-label",legendBackground:"c3-legend-background",legendItem:"c3-legend-item",legendItemEvent:"c3-legend-item-event",legendItemTile:"c3-legend-item-tile",legendItemHidden:"c3-legend-item-hidden",legendItemFocused:"c3-legend-item-focused",dragarea:"c3-dragarea",EXPANDED:"_expanded_",SELECTED:"_selected_",INCLUDED:"_included_"},w=function(t){this.owner=t,this.d3=t.d3,this.internal=m},S=w;S.prototype.init=function(){var t=this.owner,e=t.config,n=t.main;t.axes.x=n.append("g").attr("class",b.axis+" "+b.axisX).attr("clip-path",e.axis_x_inner?"":t.clipPathForXAxis).attr("transform",t.getTranslate("x")).style("visibility",e.axis_x_show?"visible":"hidden"),t.axes.x.append("text").attr("class",b.axisXLabel).attr("transform",e.axis_rotated?"rotate(-90)":"").style("text-anchor",this.textAnchorForXAxisLabel.bind(this)),t.axes.y=n.append("g").attr("class",b.axis+" "+b.axisY).attr("clip-path",e.axis_y_inner?"":t.clipPathForYAxis).attr("transform",t.getTranslate("y")).style("visibility",e.axis_y_show?"visible":"hidden"),t.axes.y.append("text").attr("class",b.axisYLabel).attr("transform",e.axis_rotated?"":"rotate(-90)").style("text-anchor",this.textAnchorForYAxisLabel.bind(this)),t.axes.y2=n.append("g").attr("class",b.axis+" "+b.axisY2).attr("transform",t.getTranslate("y2")).style("visibility",e.axis_y2_show?"visible":"hidden"),t.axes.y2.append("text").attr("class",b.axisY2Label).attr("transform",e.axis_rotated?"":"rotate(-90)").style("text-anchor",this.textAnchorForY2AxisLabel.bind(this))},S.prototype.getXAxis=function(t,e,n,i,r,a,o){var s=this.owner,c=s.config,u={isCategory:s.isCategorized(),withOuterTick:r,tickMultiline:c.axis_x_tick_multiline,tickMultilineMax:c.axis_x_tick_multiline?Number(c.axis_x_tick_multilineMax):0,tickWidth:c.axis_x_tick_width,tickTextRotate:o?0:c.axis_x_tick_rotate,withoutTransition:a},l=new this.internal(this,u).axis.scale(t).orient(e);return s.isTimeSeries()&&i&&"function"!=typeof i&&(i=i.map((function(t){return s.parseDate(t)}))),l.tickFormat(n).tickValues(i),s.isCategorized()&&(l.tickCentered(c.axis_x_tick_centered),f(c.axis_x_tick_culling)&&(c.axis_x_tick_culling=!1)),l},S.prototype.updateXAxisTickValues=function(t,e){var n,i=this.owner,r=i.config;return(r.axis_x_tick_fit||r.axis_x_tick_count)&&(n=this.generateTickValues(i.mapTargetsToUniqueXs(t),r.axis_x_tick_count,i.isTimeSeries())),e?e.tickValues(n):(i.xAxis.tickValues(n),i.subXAxis.tickValues(n)),n},S.prototype.getYAxis=function(t,e,n,i,r,a,o){var s=this.owner,c=s.config,u=c["axis_"+t+"_tick_format"];!u&&s.isAxisNormalized(t)&&(u=function(t){return t+"%"});var l=new this.internal(this,{withOuterTick:r,withoutTransition:a,tickTextRotate:o?0:c.axis_y_tick_rotate}).axis.scale(e).orient(n);return u&&l.tickFormat(u),s.isTimeSeriesY()?l.ticks(c.axis_y_tick_time_type,c.axis_y_tick_time_interval):l.tickValues(i),l},S.prototype.getId=function(t){var e=this.owner.config;return t in e.data_axes?e.data_axes[t]:"y"},S.prototype.getXAxisTickFormat=function(){var t=this.owner,e=t.config,n=t.isTimeSeries()?t.defaultAxisTimeFormat:t.isCategorized()?t.categoryName:function(t){return t};return e.axis_x_tick_format&&(h(e.axis_x_tick_format)?n=e.axis_x_tick_format:t.isTimeSeries()&&(n=function(n){return n?t.axisTimeFormat(e.axis_x_tick_format)(n):""})),h(n)?function(e){return n.call(t,e)}:n},S.prototype.getTickValues=function(t,e){return t||(e?e.tickValues():void 0)},S.prototype.getXAxisTickValues=function(){return this.getTickValues(this.owner.config.axis_x_tick_values,this.owner.xAxis)},S.prototype.getYAxisTickValues=function(){return this.getTickValues(this.owner.config.axis_y_tick_values,this.owner.yAxis)},S.prototype.getY2AxisTickValues=function(){return this.getTickValues(this.owner.config.axis_y2_tick_values,this.owner.y2Axis)},S.prototype.getLabelOptionByAxisId=function(t){var e,n=this.owner.config;return"y"===t?e=n.axis_y_label:"y2"===t?e=n.axis_y2_label:"x"===t&&(e=n.axis_x_label),e},S.prototype.getLabelText=function(t){var e=this.getLabelOptionByAxisId(t);return p(e)?e:e?e.text:null},S.prototype.setLabelText=function(t,e){var n=this.owner.config,i=this.getLabelOptionByAxisId(t);p(i)?"y"===t?n.axis_y_label=e:"y2"===t?n.axis_y2_label=e:"x"===t&&(n.axis_x_label=e):i&&(i.text=e)},S.prototype.getLabelPosition=function(t,e){var n=this.getLabelOptionByAxisId(t),i=n&&"object"==typeof n&&n.position?n.position:e;return{isInner:i.indexOf("inner")>=0,isOuter:i.indexOf("outer")>=0,isLeft:i.indexOf("left")>=0,isCenter:i.indexOf("center")>=0,isRight:i.indexOf("right")>=0,isTop:i.indexOf("top")>=0,isMiddle:i.indexOf("middle")>=0,isBottom:i.indexOf("bottom")>=0}},S.prototype.getXAxisLabelPosition=function(){return this.getLabelPosition("x",this.owner.config.axis_rotated?"inner-top":"inner-right")},S.prototype.getYAxisLabelPosition=function(){return this.getLabelPosition("y",this.owner.config.axis_rotated?"inner-right":"inner-top")},S.prototype.getY2AxisLabelPosition=function(){return this.getLabelPosition("y2",this.owner.config.axis_rotated?"inner-right":"inner-top")},S.prototype.getLabelPositionById=function(t){return"y2"===t?this.getY2AxisLabelPosition():"y"===t?this.getYAxisLabelPosition():this.getXAxisLabelPosition()},S.prototype.textForXAxisLabel=function(){return this.getLabelText("x")},S.prototype.textForYAxisLabel=function(){return this.getLabelText("y")},S.prototype.textForY2AxisLabel=function(){return this.getLabelText("y2")},S.prototype.xForAxisLabel=function(t,e){var n=this.owner;return t?e.isLeft?0:e.isCenter?n.width/2:n.width:e.isBottom?-n.height:e.isMiddle?-n.height/2:0},S.prototype.dxForAxisLabel=function(t,e){return t?e.isLeft?"0.5em":e.isRight?"-0.5em":"0":e.isTop?"-0.5em":e.isBottom?"0.5em":"0"},S.prototype.textAnchorForAxisLabel=function(t,e){return t?e.isLeft?"start":e.isCenter?"middle":"end":e.isBottom?"start":e.isMiddle?"middle":"end"},S.prototype.xForXAxisLabel=function(){return this.xForAxisLabel(!this.owner.config.axis_rotated,this.getXAxisLabelPosition())},S.prototype.xForYAxisLabel=function(){return this.xForAxisLabel(this.owner.config.axis_rotated,this.getYAxisLabelPosition())},S.prototype.xForY2AxisLabel=function(){return this.xForAxisLabel(this.owner.config.axis_rotated,this.getY2AxisLabelPosition())},S.prototype.dxForXAxisLabel=function(){return this.dxForAxisLabel(!this.owner.config.axis_rotated,this.getXAxisLabelPosition())},S.prototype.dxForYAxisLabel=function(){return this.dxForAxisLabel(this.owner.config.axis_rotated,this.getYAxisLabelPosition())},S.prototype.dxForY2AxisLabel=function(){return this.dxForAxisLabel(this.owner.config.axis_rotated,this.getY2AxisLabelPosition())},S.prototype.dyForXAxisLabel=function(){var t=this.owner,e=t.config,n=this.getXAxisLabelPosition();return e.axis_rotated?n.isInner?"1.2em":-25-(t.config.axis_x_inner?0:this.getMaxTickWidth("x")):n.isInner?"-0.5em":t.getHorizontalAxisHeight("x")-10},S.prototype.dyForYAxisLabel=function(){var t=this.owner,e=this.getYAxisLabelPosition();return t.config.axis_rotated?e.isInner?"-0.5em":"3em":e.isInner?"1.2em":-10-(t.config.axis_y_inner?0:this.getMaxTickWidth("y")+10)},S.prototype.dyForY2AxisLabel=function(){var t=this.owner,e=this.getY2AxisLabelPosition();return t.config.axis_rotated?e.isInner?"1.2em":"-2.2em":e.isInner?"-0.5em":15+(t.config.axis_y2_inner?0:this.getMaxTickWidth("y2")+15)},S.prototype.textAnchorForXAxisLabel=function(){var t=this.owner;return this.textAnchorForAxisLabel(!t.config.axis_rotated,this.getXAxisLabelPosition())},S.prototype.textAnchorForYAxisLabel=function(){var t=this.owner;return this.textAnchorForAxisLabel(t.config.axis_rotated,this.getYAxisLabelPosition())},S.prototype.textAnchorForY2AxisLabel=function(){var t=this.owner;return this.textAnchorForAxisLabel(t.config.axis_rotated,this.getY2AxisLabelPosition())},S.prototype.getMaxTickWidth=function(t,e){var n,i,r,a,o=this.owner,s=0;return e&&o.currentMaxTickWidths[t]||(o.svg&&(n=o.filterTargetsToShow(o.data.targets),"y"===t?(i=o.y.copy().domain(o.getYDomain(n,"y")),r=this.getYAxis(t,i,o.yOrient,o.yAxisTickValues,!1,!0,!0)):"y2"===t?(i=o.y2.copy().domain(o.getYDomain(n,"y2")),r=this.getYAxis(t,i,o.y2Orient,o.y2AxisTickValues,!1,!0,!0)):(i=o.x.copy().domain(o.getXDomain(n)),r=this.getXAxis(i,o.xOrient,o.xAxisTickFormat,o.xAxisTickValues,!1,!0,!0),this.updateXAxisTickValues(n,r)),(a=o.d3.select("body").append("div").classed("c3",!0)).append("svg").style("visibility","hidden").style("position","fixed").style("top",0).style("left",0).append("g").call(r).each((function(){o.d3.select(this).selectAll("text").each((function(){var t=c(this);s2){for(o=i-2,r=t[0],s=((a=t[t.length-1])-r)/(o+1),l=[r],c=0;c=0&&N.select(this).style("display",e%k?"none":"block")}))}else R.svg.selectAll("."+b.axisX+" .tick text").style("display","block");y=R.generateDrawArea?R.generateDrawArea(F,!1):void 0,_=R.generateDrawBar?R.generateDrawBar(z):void 0,x=R.generateDrawLine?R.generateDrawLine(X,!1):void 0,v=R.generateXYForText(F,z,X,!0),m=R.generateXYForText(F,z,X,!1),R.updateCircleY(),G=(R.config.axis_rotated?R.circleY:R.circleX).bind(R),O=(R.config.axis_rotated?R.circleX:R.circleY).bind(R),n&&(R.subY.domain(R.getYDomain(Y,"y")),R.subY2.domain(R.getYDomain(Y,"y2"))),R.updateXgridFocus(),I.select("text."+b.text+"."+b.empty).attr("x",R.width/2).attr("y",R.height/2).text(D.data_empty_label_text).transition().style("opacity",Y.length?0:1),d&&R.redrawEventRect(),R.updateGrid(w),R.updateStanfordElements(w),R.updateRegion(w),R.updateBar(S),R.updateLine(S),R.updateArea(S),R.updateCircle(G,O),R.hasDataLabel()&&R.updateText(v,m,S),R.redrawTitle&&R.redrawTitle(),R.redrawArc&&R.redrawArc(w,S,c),D.subchart_show&&R.redrawSubchart&&R.redrawSubchart(i,e,w,S,F,z,X),R.isStanfordGraphType()&&R.drawColorScale(),I.selectAll("."+b.selectedCircles).filter(R.isBarType.bind(R)).selectAll("circle").remove(),t.flow&&(C=R.generateFlow({targets:Y,flow:t.flow,duration:t.flow.duration,drawBar:_,drawLine:x,drawArea:y,cx:G,cy:O,xv:H,xForText:v,yForText:m})),w&&R.isTabVisible()?(M=N.transition().duration(w),A=[],[R.redrawBar(_,!0,M),R.redrawLine(x,!0,M),R.redrawArea(y,!0,M),R.redrawCircle(G,O,!0,M),R.redrawText(v,m,t.flow,!0,M),R.redrawRegion(!0,M),R.redrawGrid(!0,M)].forEach((function(t){t.forEach((function(t){A.push(t)}))})),P=R.generateWait(),A.forEach((function(t){P.add(t)})),P((function(){C&&C(),D.onrendered&&D.onrendered.call(R)}))):(R.redrawBar(_),R.redrawLine(x),R.redrawArea(y),R.redrawCircle(G,O),R.redrawText(v,m,t.flow),R.redrawRegion(),R.redrawGrid(),C&&C(),D.onrendered&&D.onrendered.call(R)),R.mapToIds(R.data.targets).forEach((function(t){R.withoutFadeIn[t]=!0}))},t.prototype.updateAndRedraw=function(t){var e,n=this,i=n.config;(t=t||{}).withTransition=o(t,"withTransition",!0),t.withTransform=o(t,"withTransform",!1),t.withLegend=o(t,"withLegend",!1),t.withUpdateXDomain=o(t,"withUpdateXDomain",!0),t.withUpdateOrgXDomain=o(t,"withUpdateOrgXDomain",!0),t.withTransitionForExit=!1,t.withTransitionForTransform=o(t,"withTransitionForTransform",t.withTransition),n.updateSizes(),t.withLegend&&i.legend_show||(e=n.axis.generateTransitions(t.withTransitionForAxis?i.transition_duration:0),n.updateScales(),n.updateSvgSize(),n.transformAll(t.withTransitionForTransform,e)),n.redraw(t,e)},t.prototype.redrawWithoutRescale=function(){this.redraw({withY:!1,withSubchart:!1,withEventRect:!1,withTransitionForAxis:!1})},t.prototype.isTimeSeries=function(){return"timeseries"===this.config.axis_x_type},t.prototype.isCategorized=function(){return this.config.axis_x_type.indexOf("categor")>=0},t.prototype.isCustomX=function(){var t=this.config;return!this.isTimeSeries()&&(t.data_x||_(t.data_xs))},t.prototype.isTimeSeriesY=function(){return"timeseries"===this.config.axis_y_type},t.prototype.getTranslate=function(t){var e,n,r=this,a=r.config;return"main"===t?(e=i(r.margin.left),n=i(r.margin.top)):"context"===t?(e=i(r.margin2.left),n=i(r.margin2.top)):"legend"===t?(e=r.margin3.left,n=r.margin3.top):"x"===t?(e=0,n=a.axis_rotated?0:r.height):"y"===t?(e=0,n=a.axis_rotated?r.height:0):"y2"===t?(e=a.axis_rotated?0:r.width,n=a.axis_rotated?1:0):"subx"===t?(e=0,n=a.axis_rotated?0:r.height2):"arc"===t&&(e=r.arcWidth/2,n=r.arcHeight/2-(r.hasType("gauge")?6:0)),"translate("+e+","+n+")"},t.prototype.initialOpacity=function(t){return null!==t.value&&this.withoutFadeIn[t.id]?1:0},t.prototype.initialOpacityForCircle=function(t){return null!==t.value&&this.withoutFadeIn[t.id]?this.opacityForCircle(t):0},t.prototype.opacityForCircle=function(t){var e=(h(this.config.point_show)?this.config.point_show(t):this.config.point_show)||this.isStanfordType(t)?1:0;return y(t.value)?this.isScatterType(t)?.5:e:0},t.prototype.opacityForText=function(){return this.hasDataLabel()?1:0},t.prototype.xx=function(t){return t?this.x(t.x):null},t.prototype.xvCustom=function(t,e){var n=this,i=e?t[e]:t.value;return n.isTimeSeries()?i=n.parseDate(t.value):n.isCategorized()&&"string"==typeof t.value&&(i=n.config.axis_x_categories.indexOf(t.value)),Math.ceil(n.x(i))},t.prototype.yvCustom=function(t,e){var n=t.axis&&"y2"===t.axis?this.y2:this.y,i=e?t[e]:t.value;return Math.ceil(n(i))},t.prototype.xv=function(t){var e=this,n=t.value;return e.isTimeSeries()?n=e.parseDate(t.value):e.isCategorized()&&"string"==typeof t.value&&(n=e.config.axis_x_categories.indexOf(t.value)),Math.ceil(e.x(n))},t.prototype.yv=function(t){var e=t.axis&&"y2"===t.axis?this.y2:this.y;return Math.ceil(e(t.value))},t.prototype.subxx=function(t){return t?this.subX(t.x):null},t.prototype.transformMain=function(t,e){var n,i,r,a=this;e&&e.axisX?n=e.axisX:(n=a.main.select("."+b.axisX),t&&(n=n.transition())),e&&e.axisY?i=e.axisY:(i=a.main.select("."+b.axisY),t&&(i=i.transition())),e&&e.axisY2?r=e.axisY2:(r=a.main.select("."+b.axisY2),t&&(r=r.transition())),(t?a.main.transition():a.main).attr("transform",a.getTranslate("main")),n.attr("transform",a.getTranslate("x")),i.attr("transform",a.getTranslate("y")),r.attr("transform",a.getTranslate("y2")),a.main.select("."+b.chartArcs).attr("transform",a.getTranslate("arc"))},t.prototype.transformAll=function(t,e){var n=this;n.transformMain(t,e),n.config.subchart_show&&n.transformContext(t,e),n.legend&&n.transformLegend(t)},t.prototype.updateSvgSize=function(){var t=this,e=t.svg.select("."+b.brush+" .overlay");t.svg.attr("width",t.currentWidth).attr("height",t.currentHeight),t.svg.selectAll(["#"+t.clipId,"#"+t.clipIdForGrid]).select("rect").attr("width",t.width).attr("height",t.height),t.svg.select("#"+t.clipIdForXAxis).select("rect").attr("x",t.getXAxisClipX.bind(t)).attr("y",t.getXAxisClipY.bind(t)).attr("width",t.getXAxisClipWidth.bind(t)).attr("height",t.getXAxisClipHeight.bind(t)),t.svg.select("#"+t.clipIdForYAxis).select("rect").attr("x",t.getYAxisClipX.bind(t)).attr("y",t.getYAxisClipY.bind(t)).attr("width",t.getYAxisClipWidth.bind(t)).attr("height",t.getYAxisClipHeight.bind(t)),t.svg.select("#"+t.clipIdForSubchart).select("rect").attr("width",t.width).attr("height",e.size()&&e.attr("height")||0),t.selectChart.style("max-height",t.currentHeight+"px")},t.prototype.updateDimension=function(t){var e=this;t||(e.config.axis_rotated?(e.axes.x.call(e.xAxis),e.axes.subx.call(e.subXAxis)):(e.axes.y.call(e.yAxis),e.axes.y2.call(e.y2Axis))),e.updateSizes(),e.updateScales(),e.updateSvgSize(),e.transformAll(!1)},t.prototype.observeInserted=function(t){var e,n=this;"undefined"!=typeof MutationObserver?(e=new MutationObserver((function(i){i.forEach((function(i){"childList"===i.type&&i.previousSibling&&(e.disconnect(),n.intervalForObserveInserted=window.setInterval((function(){t.node().parentNode&&(window.clearInterval(n.intervalForObserveInserted),n.updateDimension(),n.brush&&n.brush.update(),n.config.oninit.call(n),n.redraw({withTransform:!0,withUpdateXDomain:!0,withUpdateOrgXDomain:!0,withTransition:!1,withTransitionForTransform:!1,withLegend:!0}),t.transition().style("opacity",1))}),10))}))}))).observe(t.node(),{attributes:!0,childList:!0,characterData:!0}):window.console.error("MutationObserver not defined.")},t.prototype.bindResize=function(){var t=this,e=t.config;t.resizeFunction=t.generateResize(),t.resizeFunction.add((function(){e.onresize.call(t)})),e.resize_auto&&t.resizeFunction.add((function(){void 0!==t.resizeTimeout&&window.clearTimeout(t.resizeTimeout),t.resizeTimeout=window.setTimeout((function(){delete t.resizeTimeout,t.updateAndRedraw({withUpdateXDomain:!1,withUpdateOrgXDomain:!1,withTransition:!1,withTransitionForTransform:!1,withLegend:!0}),t.brush&&t.brush.update()}),100)})),t.resizeFunction.add((function(){e.onresized.call(t)})),t.resizeIfElementDisplayed=function(){null!=t.api&&t.api.element.offsetParent&&t.resizeFunction()},window.addEventListener("resize",t.resizeIfElementDisplayed,!1)},t.prototype.bindWindowFocus=function(){var t=this;this.windowFocusHandler||(this.windowFocusHandler=function(){t.redraw()},window.addEventListener("focus",this.windowFocusHandler))},t.prototype.unbindWindowFocus=function(){window.removeEventListener("focus",this.windowFocusHandler),delete this.windowFocusHandler},t.prototype.generateResize=function(){var t=[];function e(){t.forEach((function(t){t()}))}return e.add=function(e){t.push(e)},e.remove=function(e){for(var n=0;ne.getTotalLength())break;n--}while(n>0);return n})),"SVGPathSegList"in window||(window.SVGPathSegList=function(t){this._pathElement=t,this._list=this._parsePath(this._pathElement.getAttribute("d")),this._mutationObserverConfig={attributes:!0,attributeFilter:["d"]},this._pathElementMutationObserver=new MutationObserver(this._updateListFromPathMutations.bind(this)),this._pathElementMutationObserver.observe(this._pathElement,this._mutationObserverConfig)},window.SVGPathSegList.prototype.classname="SVGPathSegList",Object.defineProperty(window.SVGPathSegList.prototype,"numberOfItems",{get:function(){return this._checkPathSynchronizedToList(),this._list.length},enumerable:!0}),Object.defineProperty(window.SVGPathElement.prototype,"pathSegList",{get:function(){return this._pathSegList||(this._pathSegList=new window.SVGPathSegList(this)),this._pathSegList},enumerable:!0}),Object.defineProperty(window.SVGPathElement.prototype,"normalizedPathSegList",{get:function(){return this.pathSegList},enumerable:!0}),Object.defineProperty(window.SVGPathElement.prototype,"animatedPathSegList",{get:function(){return this.pathSegList},enumerable:!0}),Object.defineProperty(window.SVGPathElement.prototype,"animatedNormalizedPathSegList",{get:function(){return this.pathSegList},enumerable:!0}),window.SVGPathSegList.prototype._checkPathSynchronizedToList=function(){this._updateListFromPathMutations(this._pathElementMutationObserver.takeRecords())},window.SVGPathSegList.prototype._updateListFromPathMutations=function(t){if(this._pathElement){var e=!1;t.forEach((function(t){"d"==t.attributeName&&(e=!0)})),e&&(this._list=this._parsePath(this._pathElement.getAttribute("d")))}},window.SVGPathSegList.prototype._writeListToPath=function(){this._pathElementMutationObserver.disconnect(),this._pathElement.setAttribute("d",window.SVGPathSegList._pathSegArrayAsString(this._list)),this._pathElementMutationObserver.observe(this._pathElement,this._mutationObserverConfig)},window.SVGPathSegList.prototype.segmentChanged=function(t){this._writeListToPath()},window.SVGPathSegList.prototype.clear=function(){this._checkPathSynchronizedToList(),this._list.forEach((function(t){t._owningPathSegList=null})),this._list=[],this._writeListToPath()},window.SVGPathSegList.prototype.initialize=function(t){return this._checkPathSynchronizedToList(),this._list=[t],t._owningPathSegList=this,this._writeListToPath(),t},window.SVGPathSegList.prototype._checkValidIndex=function(t){if(isNaN(t)||t<0||t>=this.numberOfItems)throw"INDEX_SIZE_ERR"},window.SVGPathSegList.prototype.getItem=function(t){return this._checkPathSynchronizedToList(),this._checkValidIndex(t),this._list[t]},window.SVGPathSegList.prototype.insertItemBefore=function(t,e){return this._checkPathSynchronizedToList(),e>this.numberOfItems&&(e=this.numberOfItems),t._owningPathSegList&&(t=t.clone()),this._list.splice(e,0,t),t._owningPathSegList=this,this._writeListToPath(),t},window.SVGPathSegList.prototype.replaceItem=function(t,e){return this._checkPathSynchronizedToList(),t._owningPathSegList&&(t=t.clone()),this._checkValidIndex(e),this._list[e]=t,t._owningPathSegList=this,this._writeListToPath(),t},window.SVGPathSegList.prototype.removeItem=function(t){this._checkPathSynchronizedToList(),this._checkValidIndex(t);var e=this._list[t];return this._list.splice(t,1),this._writeListToPath(),e},window.SVGPathSegList.prototype.appendItem=function(t){return this._checkPathSynchronizedToList(),t._owningPathSegList&&(t=t.clone()),this._list.push(t),t._owningPathSegList=this,this._writeListToPath(),t},window.SVGPathSegList._pathSegArrayAsString=function(t){var e="",n=!0;return t.forEach((function(t){n?(n=!1,e+=t._asPathString()):e+=" "+t._asPathString()})),e},window.SVGPathSegList.prototype._parsePath=function(t){if(!t||0==t.length)return[];var e=this,n=function(){this.pathSegList=[]};n.prototype.appendSegment=function(t){this.pathSegList.push(t)};var i=function(t){this._string=t,this._currentIndex=0,this._endIndex=this._string.length,this._previousCommand=window.SVGPathSeg.PATHSEG_UNKNOWN,this._skipOptionalSpaces()};i.prototype._isCurrentSpace=function(){var t=this._string[this._currentIndex];return t<=" "&&(" "==t||"\n"==t||"\t"==t||"\r"==t||"\f"==t)},i.prototype._skipOptionalSpaces=function(){for(;this._currentIndex="0"&&t<="9")&&e!=window.SVGPathSeg.PATHSEG_CLOSEPATH?e==window.SVGPathSeg.PATHSEG_MOVETO_ABS?window.SVGPathSeg.PATHSEG_LINETO_ABS:e==window.SVGPathSeg.PATHSEG_MOVETO_REL?window.SVGPathSeg.PATHSEG_LINETO_REL:e:window.SVGPathSeg.PATHSEG_UNKNOWN},i.prototype.initialCommandIsMoveTo=function(){if(!this.hasMoreData())return!0;var t=this.peekSegmentType();return t==window.SVGPathSeg.PATHSEG_MOVETO_ABS||t==window.SVGPathSeg.PATHSEG_MOVETO_REL},i.prototype._parseNumber=function(){var t=0,e=0,n=1,i=0,r=1,a=1,o=this._currentIndex;if(this._skipOptionalSpaces(),this._currentIndex"9")&&"."!=this._string.charAt(this._currentIndex))){for(var s=this._currentIndex;this._currentIndex="0"&&this._string.charAt(this._currentIndex)<="9";)this._currentIndex++;if(this._currentIndex!=s)for(var c=this._currentIndex-1,u=1;c>=s;)e+=u*(this._string.charAt(c--)-"0"),u*=10;if(this._currentIndex=this._endIndex||this._string.charAt(this._currentIndex)<"0"||this._string.charAt(this._currentIndex)>"9")return;for(;this._currentIndex="0"&&this._string.charAt(this._currentIndex)<="9";)n*=10,i+=(this._string.charAt(this._currentIndex)-"0")/n,this._currentIndex+=1}if(this._currentIndex!=o&&this._currentIndex+1=this._endIndex||this._string.charAt(this._currentIndex)<"0"||this._string.charAt(this._currentIndex)>"9")return;for(;this._currentIndex="0"&&this._string.charAt(this._currentIndex)<="9";)t*=10,t+=this._string.charAt(this._currentIndex)-"0",this._currentIndex++}var l=e+i;if(l*=r,t&&(l*=Math.pow(10,a*t)),o!=this._currentIndex)return this._skipOptionalSpacesOrDelimiter(),l}},i.prototype._parseArcFlag=function(){if(!(this._currentIndex>=this._endIndex)){var t=!1,e=this._string.charAt(this._currentIndex++);if("0"==e)t=!1;else{if("1"!=e)return;t=!0}return this._skipOptionalSpacesOrDelimiter(),t}},i.prototype.parseSegment=function(){var t=this._string[this._currentIndex],n=this._pathSegTypeFromChar(t);if(n==window.SVGPathSeg.PATHSEG_UNKNOWN){if(this._previousCommand==window.SVGPathSeg.PATHSEG_UNKNOWN)return null;if((n=this._nextCommandHelper(t,this._previousCommand))==window.SVGPathSeg.PATHSEG_UNKNOWN)return null}else this._currentIndex++;switch(this._previousCommand=n,n){case window.SVGPathSeg.PATHSEG_MOVETO_REL:return new window.SVGPathSegMovetoRel(e,this._parseNumber(),this._parseNumber());case window.SVGPathSeg.PATHSEG_MOVETO_ABS:return new window.SVGPathSegMovetoAbs(e,this._parseNumber(),this._parseNumber());case window.SVGPathSeg.PATHSEG_LINETO_REL:return new window.SVGPathSegLinetoRel(e,this._parseNumber(),this._parseNumber());case window.SVGPathSeg.PATHSEG_LINETO_ABS:return new window.SVGPathSegLinetoAbs(e,this._parseNumber(),this._parseNumber());case window.SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_REL:return new window.SVGPathSegLinetoHorizontalRel(e,this._parseNumber());case window.SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_ABS:return new window.SVGPathSegLinetoHorizontalAbs(e,this._parseNumber());case window.SVGPathSeg.PATHSEG_LINETO_VERTICAL_REL:return new window.SVGPathSegLinetoVerticalRel(e,this._parseNumber());case window.SVGPathSeg.PATHSEG_LINETO_VERTICAL_ABS:return new window.SVGPathSegLinetoVerticalAbs(e,this._parseNumber());case window.SVGPathSeg.PATHSEG_CLOSEPATH:return this._skipOptionalSpaces(),new window.SVGPathSegClosePath(e);case window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_REL:var i={x1:this._parseNumber(),y1:this._parseNumber(),x2:this._parseNumber(),y2:this._parseNumber(),x:this._parseNumber(),y:this._parseNumber()};return new window.SVGPathSegCurvetoCubicRel(e,i.x,i.y,i.x1,i.y1,i.x2,i.y2);case window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_ABS:return i={x1:this._parseNumber(),y1:this._parseNumber(),x2:this._parseNumber(),y2:this._parseNumber(),x:this._parseNumber(),y:this._parseNumber()},new window.SVGPathSegCurvetoCubicAbs(e,i.x,i.y,i.x1,i.y1,i.x2,i.y2);case window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_REL:return i={x2:this._parseNumber(),y2:this._parseNumber(),x:this._parseNumber(),y:this._parseNumber()},new window.SVGPathSegCurvetoCubicSmoothRel(e,i.x,i.y,i.x2,i.y2);case window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_ABS:return i={x2:this._parseNumber(),y2:this._parseNumber(),x:this._parseNumber(),y:this._parseNumber()},new window.SVGPathSegCurvetoCubicSmoothAbs(e,i.x,i.y,i.x2,i.y2);case window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_REL:return i={x1:this._parseNumber(),y1:this._parseNumber(),x:this._parseNumber(),y:this._parseNumber()},new window.SVGPathSegCurvetoQuadraticRel(e,i.x,i.y,i.x1,i.y1);case window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_ABS:return i={x1:this._parseNumber(),y1:this._parseNumber(),x:this._parseNumber(),y:this._parseNumber()},new window.SVGPathSegCurvetoQuadraticAbs(e,i.x,i.y,i.x1,i.y1);case window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL:return new window.SVGPathSegCurvetoQuadraticSmoothRel(e,this._parseNumber(),this._parseNumber());case window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS:return new window.SVGPathSegCurvetoQuadraticSmoothAbs(e,this._parseNumber(),this._parseNumber());case window.SVGPathSeg.PATHSEG_ARC_REL:return i={x1:this._parseNumber(),y1:this._parseNumber(),arcAngle:this._parseNumber(),arcLarge:this._parseArcFlag(),arcSweep:this._parseArcFlag(),x:this._parseNumber(),y:this._parseNumber()},new window.SVGPathSegArcRel(e,i.x,i.y,i.x1,i.y1,i.arcAngle,i.arcLarge,i.arcSweep);case window.SVGPathSeg.PATHSEG_ARC_ABS:return i={x1:this._parseNumber(),y1:this._parseNumber(),arcAngle:this._parseNumber(),arcLarge:this._parseArcFlag(),arcSweep:this._parseArcFlag(),x:this._parseNumber(),y:this._parseNumber()},new window.SVGPathSegArcAbs(e,i.x,i.y,i.x1,i.y1,i.arcAngle,i.arcLarge,i.arcSweep);default:throw"Unknown path seg type."}};var r=new n,a=new i(t);if(!a.initialCommandIsMoveTo())return[];for(;a.hasMoreData();){var o=a.parseSegment();if(!o)return[];r.appendSegment(o)}return r.pathSegList}),String.prototype.padEnd||(String.prototype.padEnd=function(t,e){return t>>=0,e=String(void 0!==e?e:" "),this.length>t?String(this):((t-=this.length)>e.length&&(e+=e.repeat(t/e.length)),String(this)+e.slice(0,t))}),"function"!=typeof Object.assign&&Object.defineProperty(Object,"assign",{value:function(t,e){if(null==t)throw new TypeError("Cannot convert undefined or null to object");for(var n=Object(t),i=1;i1&&(i.axis_x_categories[t]=e,n.redraw()),i.axis_x_categories[t]},e.prototype.categories=function(t){var e=this.internal,n=e.config;return arguments.length?(n.axis_x_categories=t,e.redraw(),n.axis_x_categories):n.axis_x_categories},e.prototype.resize=function(t){var e=this.internal.config;e.size_width=t?t.width:null,e.size_height=t?t.height:null,this.flush()},e.prototype.flush=function(){this.internal.updateAndRedraw({withLegend:!0,withTransition:!1,withTransitionForTransform:!1})},e.prototype.destroy=function(){var t=this.internal;return window.clearInterval(t.intervalForObserveInserted),void 0!==t.resizeTimeout&&window.clearTimeout(t.resizeTimeout),window.removeEventListener("resize",t.resizeIfElementDisplayed),t.resizeFunction.remove(),t.unbindWindowFocus(),t.selectChart.classed("c3",!1).html(""),Object.keys(t).forEach((function(e){t[e]=null})),null},e.prototype.color=function(t){return this.internal.color(t)},e.prototype.data=function(t){var e=this.internal.data.targets;return void 0===t?e:e.filter((function(e){return[].concat(t).indexOf(e.id)>=0}))},e.prototype.data.shown=function(t){return this.internal.filterTargetsToShow(this.data(t))},e.prototype.data.values=function(t,e){void 0===e&&(e=!0);var n=null;if(t){var i=this.data(t);i&&u(i)&&(n=i.reduce((function(t,n){var i=n.values.map((function(t){return t.value}));return e?t=t.concat(i):t.push(i),t}),[]))}return n},e.prototype.data.names=function(t){return this.internal.clearLegendItemTextBoxCache(),this.internal.updateDataAttributes("names",t)},e.prototype.data.colors=function(t){return this.internal.updateDataAttributes("colors",t)},e.prototype.data.axes=function(t){return this.internal.updateDataAttributes("axes",t)},e.prototype.data.stackNormalized=function(t){if(void 0===t)return this.internal.isStackNormalized();this.internal.config.data_stack_normalize=!!t,this.internal.redraw()},e.prototype.donut=function(){},e.prototype.donut.padAngle=function(t){if(void 0===t)return this.internal.config.donut_padAngle;this.internal.config.donut_padAngle=t,this.flush()},e.prototype.flow=function(t){var e,n,i,r,a,o,s,c=this.internal,u=[],f=c.getMaxDataCount(),h=0,d=0;if(t.json)n=c.convertJsonToData(t.json,t.keys);else if(t.rows)n=c.convertRowsToData(t.rows);else{if(!t.columns)return;n=c.convertColumnsToData(t.columns)}e=c.convertDataToTargets(n,!0),c.data.targets.forEach((function(t){var n,i,r=!1;for(n=0;n1?r.values[r.values.length-1].x-a.x:a.x-c.getXDomain(c.data.targets)[0]:1,i=[a.x-o,a.x],c.updateXDomain(null,!0,!0,!1,i)),c.updateTargets(c.data.targets),c.redraw({flow:{index:a.index,length:h,duration:y(t.duration)?t.duration:c.config.transition_duration,done:t.done,orgDataCount:f},withLegend:!0,withTransition:f>1,withTrimXDomain:!1,withUpdateXAxis:!0})},t.prototype.generateFlow=function(t){var e=this,n=e.config,i=e.d3;return function(){var r,o,s,c,u,l,f,h,d,p,g,y=t.targets,_=t.flow,x=t.drawBar,v=t.drawLine,m=t.drawArea,w=t.cx,S=t.cy,T=t.xv,A=t.xForText,P=t.yForText,C=t.duration,M=_.index,L=_.length,E=e.getValueOnIndex(e.data.targets[0].values,M),k=e.getValueOnIndex(e.data.targets[0].values,M+L),V=e.x.domain(),G=_.duration||C,O=_.done||function(){},R=e.generateWait();e.flowing=!0,e.data.targets.forEach((function(t){t.values.splice(0,L)})),s=e.updateXDomain(y,!0,!0),e.updateXGrid&&e.updateXGrid(!0),c=e.xgrid||i.selectAll([]),u=e.xgridLines||i.selectAll([]),l=e.mainRegion||i.selectAll([]),f=e.mainText||i.selectAll([]),h=e.mainBar||i.selectAll([]),d=e.mainLine||i.selectAll([]),p=e.mainArea||i.selectAll([]),g=e.mainCircle||i.selectAll([]),_.orgDataCount?r=1===_.orgDataCount||(E&&E.x)===(k&&k.x)||e.isTimeSeries()?e.x(V[0])-e.x(s[0]):e.x(E.x)-e.x(k.x):1!==e.data.targets[0].values.length?r=e.x(V[0])-e.x(s[0]):e.isTimeSeries()?(E=e.getValueOnIndex(e.data.targets[0].values,0),k=e.getValueOnIndex(e.data.targets[0].values,e.data.targets[0].values.length-1),r=e.x(E.x)-e.x(k.x)):r=a(s)/2,o="translate("+r+",0) scale("+a(V)/a(s)+",1)",e.hideXGridFocus();var I=i.transition().ease(i.easeLinear).duration(G);R.add(e.xAxis(e.axes.x,I)),R.add(h.transition(I).attr("transform",o)),R.add(d.transition(I).attr("transform",o)),R.add(p.transition(I).attr("transform",o)),R.add(g.transition(I).attr("transform",o)),R.add(f.transition(I).attr("transform",o)),R.add(l.filter(e.isRegionOnX).transition(I).attr("transform",o)),R.add(c.transition(I).attr("transform",o)),R.add(u.transition(I).attr("transform",o)),R((function(){var t,i=[],r=[];if(L){for(t=0;t=0&&(e=!0)})),!e)})),a.regions},e.prototype.selected=function(t){var e=this.internal,n=e.d3;return e.main.selectAll("."+b.shapes+e.getTargetSelectorSuffix(t)).selectAll("."+b.shape).filter((function(){return n.select(this).classed(b.SELECTED)})).nodes().map((function(t){var e=t.__data__;return e.data?e.data:e}))},e.prototype.select=function(t,e,n){var i=this.internal,r=i.d3,a=i.config;a.data_selection_enabled&&i.main.selectAll("."+b.shapes).selectAll("."+b.shape).each((function(o,s){var c=r.select(this),u=o.data?o.data.id:o.id,f=i.getToggle(this,o).bind(i),h=a.data_selection_grouped||!t||t.indexOf(u)>=0,d=!e||e.indexOf(s)>=0,p=c.classed(b.SELECTED);c.classed(b.line)||c.classed(b.area)||(h&&d?a.data_selection_isselectable(o)&&!p&&f(!0,c.classed(b.SELECTED,!0),o,s):l(n)&&n&&p&&f(!1,c.classed(b.SELECTED,!1),o,s))}))},e.prototype.unselect=function(t,e){var n=this.internal,i=n.d3,r=n.config;r.data_selection_enabled&&n.main.selectAll("."+b.shapes).selectAll("."+b.shape).each((function(a,o){var s=i.select(this),c=a.data?a.data.id:a.id,u=n.getToggle(this,a).bind(n),l=r.data_selection_grouped||!t||t.indexOf(c)>=0,f=!e||e.indexOf(o)>=0,h=s.classed(b.SELECTED);s.classed(b.line)||s.classed(b.area)||l&&f&&r.data_selection_isselectable(a)&&h&&u(!1,s.classed(b.SELECTED,!1),a,o)}))},e.prototype.show=function(t,e){var n,i=this.internal;t=i.mapToTargetIds(t),e=e||{},i.removeHiddenTargetIds(t),(n=i.svg.selectAll(i.selectorTargets(t))).transition().style("display",v()?"block":"initial","important").style("opacity",1,"important").call(i.endall,(function(){n.style("opacity",null).style("opacity",1)})),e.withLegend&&i.showLegend(t),i.redraw({withUpdateOrgXDomain:!0,withUpdateXDomain:!0,withLegend:!0})},e.prototype.hide=function(t,e){var n,i=this.internal;t=i.mapToTargetIds(t),e=e||{},i.addHiddenTargetIds(t),(n=i.svg.selectAll(i.selectorTargets(t))).transition().style("opacity",0,"important").call(i.endall,(function(){n.style("opacity",null).style("opacity",0),n.style("display","none")})),e.withLegend&&i.hideLegend(t),i.redraw({withUpdateOrgXDomain:!0,withUpdateXDomain:!0,withLegend:!0})},e.prototype.toggle=function(t,e){var n=this,i=this.internal;i.mapToTargetIds(t).forEach((function(t){i.isTargetToShow(t)?n.hide(t,e):n.show(t,e)}))},e.prototype.subchart=function(){},e.prototype.subchart.isShown=function(){return this.internal.config.subchart_show},e.prototype.subchart.show=function(){var t=this.internal;t.config.subchart_show||(t.config.subchart_show=!0,t.initSubchart(),t.updateDimension(),t.initSubchartBrush(),t.updateTargetsForSubchart(t.getTargets()),t.mapToIds(t.data.targets).forEach((function(e){t.withoutFadeIn[e]=!1})),t.updateAndRedraw(),t.showTargets())},e.prototype.subchart.hide=function(){var t=this.internal;t.config.subchart_show&&(t.config.subchart_show=!1,t.removeSubchart(),t.redraw())},e.prototype.tooltip=function(){},e.prototype.tooltip.show=function(t){var e,n,i=this.internal,r={};t.mouse?r=t.mouse:(t.data?n=t.data:void 0!==t.x&&(e=t.id?i.data.targets.filter((function(e){return e.id===t.id})):i.data.targets,n=i.filterByX(e,t.x).slice(0,1)[0]),r=n?i.getMousePosition(n):null),i.dispatchEvent("mousemove",r),i.config.tooltip_onshow.call(i,n)},e.prototype.tooltip.hide=function(){this.internal.dispatchEvent("mouseout",0),this.internal.config.tooltip_onhide.call(this)},e.prototype.transform=function(t,e){var n=this.internal,i=["pie","donut"].indexOf(t)>=0?{withTransform:!0}:null;n.transformTo(e,t,i)},t.prototype.transformTo=function(t,e,n){var i=this,r=!i.hasArcType(),a=n||{withTransitionForAxis:r};a.withTransitionForTransform=!1,i.transiting=!1,i.setTargetType(t,e),i.updateTargets(i.data.targets),i.updateAndRedraw(a)},e.prototype.x=function(t){var e=this.internal;return arguments.length&&(e.updateTargetX(e.data.targets,t),e.redraw({withUpdateOrgXDomain:!0,withUpdateXDomain:!0})),e.data.xs},e.prototype.xs=function(t){var e=this.internal;return arguments.length&&(e.updateTargetXs(e.data.targets,t),e.redraw({withUpdateOrgXDomain:!0,withUpdateXDomain:!0})),e.data.xs},e.prototype.zoom=function(t){var e=this.internal;return t?(e.isTimeSeries()&&(t=t.map((function(t){return e.parseDate(t)}))),e.config.subchart_show?e.brush.selectionAsValue(t,!0):(e.updateXDomain(null,!0,!1,!1,t),e.redraw({withY:e.config.zoom_rescale,withSubchart:!1})),e.config.zoom_onzoom.call(this,e.x.orgDomain()),t):e.x.domain()},e.prototype.zoom.enable=function(t){var e=this.internal;e.config.zoom_enabled=t,e.updateAndRedraw()},e.prototype.unzoom=function(){var t=this.internal;t.config.subchart_show?t.brush.clear():(t.updateXDomain(null,!0,!1,!1,t.subX.domain()),t.redraw({withY:t.config.zoom_rescale,withSubchart:!1}))},e.prototype.zoom.max=function(t){var e=this.internal,n=e.config,i=e.d3;if(0!==t&&!t)return n.zoom_x_max;n.zoom_x_max=i.max([e.orgXDomain[1],t])},e.prototype.zoom.min=function(t){var e=this.internal,n=e.config,i=e.d3;if(0!==t&&!t)return n.zoom_x_min;n.zoom_x_min=i.min([e.orgXDomain[0],t])},e.prototype.zoom.range=function(t){if(!arguments.length)return{max:this.domain.max(),min:this.domain.min()};l(t.max)&&this.domain.max(t.max),l(t.min)&&this.domain.min(t.min)},t.prototype.initPie=function(){var t=this,e=t.d3;t.pie=e.pie().padAngle(this.getPadAngle.bind(this)).value((function(t){return t.values.reduce((function(t,e){return t+e.value}),0)}));var n=t.getOrderFunction();if(n&&(t.isOrderAsc()||t.isOrderDesc())){var i=n;n=function(t,e){return-1*i(t,e)}}t.pie.sort(n||null)},t.prototype.updateRadius=function(){var t=this,e=t.config,n=e.gauge_width||e.donut_width,i=t.filterTargetsToShow(t.data.targets).length*t.config.gauge_arcs_minWidth;t.radiusExpanded=Math.min(t.arcWidth,t.arcHeight)/2*(t.hasType("gauge")?.85:1),t.radius=.95*t.radiusExpanded,t.innerRadiusRatio=n?(t.radius-n)/t.radius:.6,t.innerRadius=t.hasType("donut")||t.hasType("gauge")?t.radius*t.innerRadiusRatio:0,t.gaugeArcWidth=n||(i<=t.radius-t.innerRadius?t.radius-t.innerRadius:i<=t.radius?i:t.radius)},t.prototype.getPadAngle=function(){return this.hasType("pie")?this.config.pie_padAngle||0:this.hasType("donut")&&this.config.donut_padAngle||0},t.prototype.updateArc=function(){var t=this;t.svgArc=t.getSvgArc(),t.svgArcExpanded=t.getSvgArcExpanded(),t.svgArcExpandedSub=t.getSvgArcExpanded(.98)},t.prototype.updateAngle=function(t){var e,n,i,r,a=this,o=a.config,s=!1,c=0;return o?(a.pie(a.filterTargetsToShow(a.data.targets)).forEach((function(e){s||e.data.id!==t.data.id||(s=!0,(t=e).index=c),c++})),isNaN(t.startAngle)&&(t.startAngle=0),isNaN(t.endAngle)&&(t.endAngle=t.startAngle),a.isGaugeType(t.data)&&(e=o.gauge_min,n=o.gauge_max,i=Math.PI*(o.gauge_fullCircle?2:1)/(n-e),r=t.value.375?1.175-36/o.radius:.8)*o.radius/r:0)+","+i*a+")";else if(c&&l&&o.filterTargetsToShow(o.data.targets).length>1){var f=Math.sin(c.endAngle-Math.PI/2);u="translate("+(n=Math.cos(c.endAngle-Math.PI/2)*(o.radiusExpanded+25))+","+(i=f*(o.radiusExpanded+15-Math.abs(10*f))+3)+")"}return u},t.prototype.getArcRatio=function(t){return this.getRatio("arc",t)},t.prototype.convertToArcData=function(t){return this.addName({id:t.data.id,value:t.value,ratio:this.getRatio("arc",t),index:t.index})},t.prototype.textForArcLabel=function(t){var e,n,i,r,a,o=this;return o.shouldShowArcLabel()?(n=(e=o.updateAngle(t))?e.value:null,i=o.getRatio("arc",e),r=t.data.id,o.hasType("gauge")||o.meetsArcLabelThreshold(i)?(a=o.getArcLabelFormat())?a(n,i,r):o.defaultArcValueFormat(n,i):""):""},t.prototype.textForGaugeMinMax=function(t,e){var n=this.getGaugeLabelExtents();return n?n(t,e):t},t.prototype.expandArc=function(t){var e,n=this;n.transiting?e=window.setInterval((function(){n.transiting||(window.clearInterval(e),n.legend.selectAll(".c3-legend-item-focused").size()>0&&n.expandArc(t))}),10):(t=n.mapToTargetIds(t),n.svg.selectAll(n.selectorTargets(t,"."+b.chartArc)).each((function(t){n.shouldExpand(t.data.id)&&n.d3.select(this).selectAll("path").transition().duration(n.expandDuration(t.data.id)).attr("d",n.svgArcExpanded).transition().duration(2*n.expandDuration(t.data.id)).attr("d",n.svgArcExpandedSub).each((function(t){n.isDonutType(t.data)}))})))},t.prototype.unexpandArc=function(t){var e=this;e.transiting||(t=e.mapToTargetIds(t),e.svg.selectAll(e.selectorTargets(t,"."+b.chartArc)).selectAll("path").transition().duration((function(t){return e.expandDuration(t.data.id)})).attr("d",e.svgArc),e.svg.selectAll("."+b.arc))},t.prototype.expandDuration=function(t){var e=this,n=e.config;return e.isDonutType(t)?n.donut_expand_duration:e.isGaugeType(t)?n.gauge_expand_duration:e.isPieType(t)?n.pie_expand_duration:50},t.prototype.shouldExpand=function(t){var e=this,n=e.config;return e.isDonutType(t)&&n.donut_expand||e.isGaugeType(t)&&n.gauge_expand||e.isPieType(t)&&n.pie_expand},t.prototype.shouldShowArcLabel=function(){var t=this,e=t.config,n=!0;return t.hasType("donut")?n=e.donut_label_show:t.hasType("pie")&&(n=e.pie_label_show),n},t.prototype.meetsArcLabelThreshold=function(t){var e=this.config;return t>=(this.hasType("donut")?e.donut_label_threshold:e.pie_label_threshold)},t.prototype.getArcLabelFormat=function(){var t=this,e=t.config,n=e.pie_label_format;return t.hasType("gauge")?n=e.gauge_label_format:t.hasType("donut")&&(n=e.donut_label_format),n},t.prototype.getGaugeLabelExtents=function(){return this.config.gauge_label_extents},t.prototype.getArcTitle=function(){return this.hasType("donut")?this.config.donut_title:""},t.prototype.updateTargetsForArc=function(t){var e,n=this,i=n.main,r=n.classChartArc.bind(n),a=n.classArcs.bind(n),o=n.classFocus.bind(n);(e=i.select("."+b.chartArcs).selectAll("."+b.chartArc).data(n.pie(t)).attr("class",(function(t){return r(t)+o(t.data)})).enter().append("g").attr("class",r)).append("g").attr("class",a),e.append("text").attr("dy",n.hasType("gauge")?"-.1em":".35em").style("opacity",0).style("text-anchor","middle").style("pointer-events","none")},t.prototype.initArc=function(){var t=this;t.arcs=t.main.select("."+b.chart).append("g").attr("class",b.chartArcs).attr("transform",t.getTranslate("arc")),t.arcs.append("text").attr("class",b.chartArcsTitle).style("text-anchor","middle").text(t.getArcTitle())},t.prototype.redrawArc=function(t,e,n){var i,r,a,o,s=this,c=s.d3,u=s.config,l=s.main,f=s.hasType("gauge");if(r=(i=l.selectAll("."+b.arcs).selectAll("."+b.arc).data(s.arcData.bind(s))).enter().append("path").attr("class",s.classArc.bind(s)).style("fill",(function(t){return s.color(t.data)})).style("cursor",(function(t){return u.interaction_enabled&&u.data_selection_isselectable(t)?"pointer":null})).each((function(t){s.isGaugeType(t.data)&&(t.startAngle=t.endAngle=u.gauge_startingAngle),this._current=t})).merge(i),f&&(o=(a=l.selectAll("."+b.arcs).selectAll("."+b.arcLabelLine).data(s.arcData.bind(s))).enter().append("rect").attr("class",(function(t){return b.arcLabelLine+" "+b.target+" "+b.target+"-"+t.data.id})).merge(a),1===s.filterTargetsToShow(s.data.targets).length?o.style("display","none"):o.style("fill",(function(t){return s.levelColor?s.levelColor(t.data.values.reduce((function(t,e){return t+e.value}),0)):s.color(t.data)})).style("display",u.gauge_labelLine_show?"":"none").each((function(t){var e=0,n=0,i=0,r="";if(s.hiddenTargetIds.indexOf(t.data.id)<0){var a=s.updateAngle(t),o=s.gaugeArcWidth/s.filterTargetsToShow(s.data.targets).length*(a.index+1),u=a.endAngle-Math.PI/2,l=s.radius-o,f=u-(0===l?0:1/l);e=s.radiusExpanded-s.radius+o,n=Math.cos(f)*l,i=Math.sin(f)*l,r="rotate("+180*u/Math.PI+", "+n+", "+i+")"}c.select(this).attr("x",n).attr("y",i).attr("width",e).attr("height",2).attr("transform",r).style("stroke-dasharray","0, "+(e+2)+", 0")}))),r.attr("transform",(function(t){return!s.isGaugeType(t.data)&&n?"scale(0)":""})).on("mouseover",u.interaction_enabled?function(t){var e,n;s.transiting||(e=s.updateAngle(t))&&(n=s.convertToArcData(e),s.expandArc(e.data.id),s.api.focus(e.data.id),s.toggleFocusLegend(e.data.id,!0),s.config.data_onmouseover(n,this))}:null).on("mousemove",u.interaction_enabled?function(t){var e,n=s.updateAngle(t);n&&(e=[s.convertToArcData(n)],s.showTooltip(e,this))}:null).on("mouseout",u.interaction_enabled?function(t){var e,n;s.transiting||(e=s.updateAngle(t))&&(n=s.convertToArcData(e),s.unexpandArc(e.data.id),s.api.revert(),s.revertLegend(),s.hideTooltip(),s.config.data_onmouseout(n,this))}:null).on("click",u.interaction_enabled?function(t,e){var n,i=s.updateAngle(t);i&&(n=s.convertToArcData(i),s.toggleShape&&s.toggleShape(this,n,e),s.config.data_onclick.call(s.api,n,this))}:null).each((function(){s.transiting=!0})).transition().duration(t).attrTween("d",(function(t){var e,n=s.updateAngle(t);return n?(isNaN(this._current.startAngle)&&(this._current.startAngle=0),isNaN(this._current.endAngle)&&(this._current.endAngle=this._current.startAngle),e=c.interpolate(this._current,n),this._current=e(0),function(n){if(null===s.config)return"M 0 0";var i=e(n);return i.data=t.data,s.getArc(i,!0)}):function(){return"M 0 0"}})).attr("transform",n?"scale(1)":"").style("fill",(function(t){return s.levelColor?s.levelColor(t.data.values.reduce((function(t,e){return t+e.value}),0)):s.color(t.data.id)})).call(s.endall,(function(){s.transiting=!1})),i.exit().transition().duration(e).style("opacity",0).remove(),l.selectAll("."+b.chartArc).select("text").style("opacity",0).attr("class",(function(t){return s.isGaugeType(t.data)?b.gaugeValue:""})).text(s.textForArcLabel.bind(s)).attr("transform",s.transformForArcLabel.bind(s)).style("font-size",(function(t){return s.isGaugeType(t.data)&&1===s.filterTargetsToShow(s.data.targets).length?Math.round(s.radius/5)+"px":""})).transition().duration(t).style("opacity",(function(t){return s.isTargetToShow(t.data.id)&&s.isArcType(t.data)?1:0})),l.select("."+b.chartArcsTitle).style("opacity",s.hasType("donut")||f?1:0),f){var h=0,d=s.arcs.select("g."+b.chartArcsBackground).selectAll("path."+b.chartArcsBackground).data(s.data.targets);d.enter().append("path").attr("class",(function(t,e){return b.chartArcsBackground+" "+b.chartArcsBackground+"-"+e})).merge(d).attr("d",(function(t){if(s.hiddenTargetIds.indexOf(t.id)>=0)return"M 0 0";var e={data:[{value:u.gauge_max}],startAngle:u.gauge_startingAngle,endAngle:-1*u.gauge_startingAngle*(u.gauge_fullCircle?Math.PI:1),index:h++};return s.getArc(e,!0,!0)})),d.exit().remove(),s.arcs.select("."+b.chartArcsGaugeUnit).attr("dy",".75em").text(u.gauge_label_show?u.gauge_units:""),s.arcs.select("."+b.chartArcsGaugeMin).attr("dx",-1*(s.innerRadius+(s.radius-s.innerRadius)/(u.gauge_fullCircle?1:2))+"px").attr("dy","1.2em").text(u.gauge_label_show?s.textForGaugeMinMax(u.gauge_min,!1):""),s.arcs.select("."+b.chartArcsGaugeMax).attr("dx",s.innerRadius+(s.radius-s.innerRadius)/(u.gauge_fullCircle?1:2)+"px").attr("dy","1.2em").text(u.gauge_label_show?s.textForGaugeMinMax(u.gauge_max,!0):"")}},t.prototype.initGauge=function(){var t=this.arcs;this.hasType("gauge")&&(t.append("g").attr("class",b.chartArcsBackground),t.append("text").attr("class",b.chartArcsGaugeUnit).style("text-anchor","middle").style("pointer-events","none"),t.append("text").attr("class",b.chartArcsGaugeMin).style("text-anchor","middle").style("pointer-events","none"),t.append("text").attr("class",b.chartArcsGaugeMax).style("text-anchor","middle").style("pointer-events","none"))},t.prototype.getGaugeLabelHeight=function(){return this.config.gauge_label_show?20:0},t.prototype.addToCache=function(t,e){this.cache["$"+t]=e},t.prototype.getFromCache=function(t){return this.cache["$"+t]},t.prototype.resetCache=function(){var t=this;Object.keys(this.cache).filter((function(t){return/^\$/.test(t)})).forEach((function(e){delete t.cache[e]}))},t.prototype.hasCaches=function(t){for(var e=0;e=0?b.focused:"")},t.prototype.classDefocused=function(t){return" "+(this.defocusedTargetIds.indexOf(t.id)>=0?b.defocused:"")},t.prototype.classChartText=function(t){return b.chartText+this.classTarget(t.id)},t.prototype.classChartLine=function(t){return b.chartLine+this.classTarget(t.id)},t.prototype.classChartBar=function(t){return b.chartBar+this.classTarget(t.id)},t.prototype.classChartArc=function(t){return b.chartArc+this.classTarget(t.data.id)},t.prototype.getTargetSelectorSuffix=function(t){var e=this.generateTargetClass(t);return window.CSS&&window.CSS.escape?window.CSS.escape(e):e.replace(/([?!@#$%^&*()=+,.<>'":;\[\]\/|~`{}\\])/g,"\\$1")},t.prototype.selectorTarget=function(t,e){return(e||"")+"."+b.target+this.getTargetSelectorSuffix(t)},t.prototype.selectorTargets=function(t,e){var n=this;return(t=t||[]).length?t.map((function(t){return n.selectorTarget(t,e)})):null},t.prototype.selectorLegend=function(t){return"."+b.legendItem+this.getTargetSelectorSuffix(t)},t.prototype.selectorLegends=function(t){var e=this;return t&&t.length?t.map((function(t){return e.selectorLegend(t)})):null},t.prototype.getClipPath=function(t){return"url("+(v(9)?"":document.URL.split("#")[0])+"#"+t+")"},t.prototype.appendClip=function(t,e){return t.append("clipPath").attr("id",e).append("rect")},t.prototype.getAxisClipX=function(t){var e=Math.max(30,this.margin.left);return t?-(1+e):-(e-1)},t.prototype.getAxisClipY=function(t){return t?-20:-this.margin.top},t.prototype.getXAxisClipX=function(){return this.getAxisClipX(!this.config.axis_rotated)},t.prototype.getXAxisClipY=function(){return this.getAxisClipY(!this.config.axis_rotated)},t.prototype.getYAxisClipX=function(){var t=this;return t.config.axis_y_inner?-1:t.getAxisClipX(t.config.axis_rotated)},t.prototype.getYAxisClipY=function(){return this.getAxisClipY(this.config.axis_rotated)},t.prototype.getAxisClipWidth=function(t){var e=this,n=Math.max(30,e.margin.left),i=Math.max(30,e.margin.right);return t?e.width+2+n+i:e.margin.left+20},t.prototype.getAxisClipHeight=function(t){return(t?this.margin.bottom:this.margin.top+this.height)+20},t.prototype.getXAxisClipWidth=function(){return this.getAxisClipWidth(!this.config.axis_rotated)},t.prototype.getXAxisClipHeight=function(){return this.getAxisClipHeight(!this.config.axis_rotated)},t.prototype.getYAxisClipWidth=function(){var t=this;return t.getAxisClipWidth(t.config.axis_rotated)+(t.config.axis_y_inner?20:0)},t.prototype.getYAxisClipHeight=function(){return this.getAxisClipHeight(this.config.axis_rotated)},t.prototype.generateColor=function(){var t=this.config,e=this.d3,n=t.data_colors,i=_(t.color_pattern)?t.color_pattern:e.schemeCategory10,r=t.data_color,a=[];return function(t){var e,o=t.id||t.data&&t.data.id||t;return n[o]instanceof Function?e=n[o](t):n[o]?e=n[o]:(a.indexOf(o)<0&&a.push(o),e=i[a.indexOf(o)%i.length],n[o]=e),r instanceof Function?r(e,t):e}},t.prototype.generateLevelColor=function(){var t=this.config,e=t.color_pattern,n=t.color_threshold,i="value"===n.unit,r=n.values&&n.values.length?n.values:[],a=n.max||100;return _(n)&&_(e)?function(t){var n,o=e[e.length-1];for(n=0;n=0?s.data.xs[n]=(e&&s.data.xs[n]?s.data.xs[n]:[]).concat(t.map((function(t){return t[i]})).filter(y).map((function(t,e){return s.generateTargetX(t,n,e)}))):c.data_x?s.data.xs[n]=s.getOtherTargetXs():_(c.data_xs)&&(s.data.xs[n]=s.getXValuesOfXKey(i,s.data.targets)):s.data.xs[n]=t.map((function(t,e){return e}))})),i.forEach((function(t){if(!s.data.xs[t])throw new Error('x is not defined for id = "'+t+'".')})),(n=i.map((function(e,n){var i=c.data_idConverter(e);return{id:i,id_org:e,values:t.map((function(t,r){var a,u,l=t[s.getXKey(e)],f=null===t[e]||isNaN(t[e])?null:+t[e];return s.isCustomX()&&s.isCategorized()&&!g(l)?(0===n&&0===r&&(c.axis_x_categories=[]),-1===(a=c.axis_x_categories.indexOf(l))&&(a=c.axis_x_categories.length,c.axis_x_categories.push(l))):a=s.generateTargetX(l,e,r),(g(t[e])||s.data.xs[e].length<=r)&&(a=void 0),u={x:a,value:f,id:i},s.isStanfordGraphType()&&(u.epochs=t[o]),u})).filter((function(t){return l(t.x)}))}}))).forEach((function(t){var e;c.data_xSort&&(t.values=t.values.sort((function(t,e){return(t.x||0===t.x?t.x:1/0)-(e.x||0===e.x?e.x:1/0)}))),e=0,t.values.forEach((function(t){t.index=e++})),s.data.xs[t.id].sort((function(t,e){return t-e}))})),s.hasNegativeValue=s.hasNegativeValueInTargets(n),s.hasPositiveValue=s.hasPositiveValueInTargets(n),c.data_type&&s.setTargetType(s.mapToIds(n).filter((function(t){return!(t in c.data_types)})),c.data_type),n.forEach((function(t){s.addCache(t.id_org,t)})),n},t.prototype.isEpochs=function(t){var e=this.config;return e.data_epochs&&t===e.data_epochs},t.prototype.isX=function(t){var e,n,i,r=this.config;return r.data_x&&t===r.data_x||_(r.data_xs)&&(e=r.data_xs,n=t,i=!1,Object.keys(e).forEach((function(t){e[t]===n&&(i=!0)})),i)},t.prototype.isNotX=function(t){return!this.isX(t)},t.prototype.isNotXAndNotEpochs=function(t){return!this.isX(t)&&!this.isEpochs(t)},t.prototype.isStackNormalized=function(){return this.config.data_stack_normalize&&this.config.data_groups.length>0},t.prototype.isAxisNormalized=function(t){var e=this;return!!e.isStackNormalized()&&e.data.targets.filter((function(n){return e.axis.getId(n.id)===t})).some((function(t){return e.isTargetNormalized(t.id)}))},t.prototype.isTargetNormalized=function(t){return this.isStackNormalized()&&this.config.data_groups.some((function(e){return e.includes(t)}))},t.prototype.getXKey=function(t){var e=this.config;return e.data_x?e.data_x:_(e.data_xs)?e.data_xs[t]:null},t.prototype.getTotalPerIndex=function(t){var e=this;if(!e.isStackNormalized())return null;var n=e.getFromCache("getTotalPerIndex");if(void 0!==n)return n[t];var i={y:[],y2:[]};return e.data.targets.filter((function(t){return e.isTargetNormalized(t.id)})).filter((function(t){return e.isTargetToShow(t.id)})).forEach((function(t){var n=i[e.axis.getId(t.id)];t.values.forEach((function(t,e){n[e]||(n[e]=0),n[e]+=d(t.value)?t.value:0}))})),e.addToCache("getTotalPerIndex",i),i[t]},t.prototype.getTotalDataSum=function(){var t=this,e=t.getFromCache("getTotalDataSum");if(void 0!==e)return e;var n,i=(n=t.data.targets.filter((function(e){return t.isTargetToShow(e.id)})).map((function(t){return t.values})),Array.isArray(n)?[].concat.apply([],n):[]).map((function(t){return t.value})).reduce((function(t,e){return t+e}),0);return t.addToCache("getTotalDataSum",i),i},t.prototype.getXValuesOfXKey=function(t,e){var n,i=this;return(e&&_(e)?i.mapToIds(e):[]).forEach((function(e){i.getXKey(e)===t&&(n=i.data.xs[e])})),n},t.prototype.getXValue=function(t,e){var n=this;return t in n.data.xs&&n.data.xs[t]&&y(n.data.xs[t][e])?n.data.xs[t][e]:e},t.prototype.getOtherTargetXs=function(){var t=Object.keys(this.data.xs);return t.length?this.data.xs[t[0]]:null},t.prototype.getOtherTargetX=function(t){var e=this.getOtherTargetXs();return e&&te?1:t>=e?0:NaN}))},t.prototype.addHiddenTargetIds=function(t){t=t instanceof Array?t:new Array(t);for(var e=0;e0}))},t.prototype.isOrderDesc=function(){var t=this.config;return"string"==typeof t.data_order&&"desc"===t.data_order.toLowerCase()},t.prototype.isOrderAsc=function(){var t=this.config;return"string"==typeof t.data_order&&"asc"===t.data_order.toLowerCase()},t.prototype.getOrderFunction=function(){var t=this,e=t.config,n=t.isOrderAsc(),i=t.isOrderDesc();if(n||i){var r=function(t,e){return t+Math.abs(e.value)};return function(t,e){var i=t.values.reduce(r,0),a=e.values.reduce(r,0);return n?a-i:i-a}}if(h(e.data_order))return e.data_order;if(u(e.data_order)){var a=e.data_order;return function(t,e){return a.indexOf(t.id)-a.indexOf(e.id)}}},t.prototype.orderTargets=function(t){var e=this.getOrderFunction();return e&&t.sort(e),t},t.prototype.filterByIndex=function(t,e){return this.d3.merge(t.map((function(t){return t.values.filter((function(t){return t.index===e}))})))},t.prototype.filterByX=function(t,e){return this.d3.merge(t.map((function(t){return t.values}))).filter((function(t){return t.x-e==0}))},t.prototype.filterRemoveNull=function(t){return t.filter((function(t){return y(t.value)}))},t.prototype.filterByXDomain=function(t,e){return t.map((function(t){return{id:t.id,id_org:t.id_org,values:t.values.filter((function(t){return e[0]<=t.x&&t.x<=e[1]}))}}))},t.prototype.hasDataLabel=function(){var t=this.config;return!("boolean"!=typeof t.data_labels||!t.data_labels)||!("object"!=typeof t.data_labels||!_(t.data_labels))},t.prototype.getDataLabelLength=function(t,e,n){var i=this,r=[0,0];return i.selectChart.select("svg").selectAll(".dummy").data([t,e]).enter().append("text").text((function(t){return i.dataLabelFormat(t.id)(t)})).each((function(t,e){r[e]=1.3*c(this)[n]})).remove(),r},t.prototype.isNoneArc=function(t){return this.hasTarget(this.data.targets,t.id)},t.prototype.isArc=function(t){return"data"in t&&this.hasTarget(this.data.targets,t.data.id)},t.prototype.findClosestFromTargets=function(t,e){var n=this,i=t.map((function(t){return n.findClosest(t.values,e,n.config.tooltip_horizontal?n.horizontalDistance.bind(n):n.dist.bind(n),n.config.point_sensitivity)})).filter((function(t){return t}));return 0===i.length?void 0:1===i.length?i[0]:n.findClosest(i,e,n.dist.bind(n))},t.prototype.findClosestFromTargetsByX=function(t,e){var n,i;return t.forEach((function(t){t.values.forEach((function(t){var r=Math.abs(e-t.x);(void 0===i||r0?e.value/o[e.index]:0,a=e.ratio);return n&&a?100*a:a},t.prototype.updateDataAttributes=function(t,e){var n=this.config["data_"+t];return void 0===e||(Object.keys(e).forEach((function(t){n[t]=e[t]})),this.redraw({withLegend:!0})),n},t.prototype.load=function(t,e){var n=this;t&&(e.filter&&(t=t.filter(e.filter)),(e.type||e.types)&&t.forEach((function(t){var i=e.types&&e.types[t.id]?e.types[t.id]:e.type;n.setTargetType(t.id,i)})),n.data.targets.forEach((function(e){for(var n=0;n0)for(o=s.hasNegativeValueInTargets(t),e=0;e=0})),0!==r.length)for(i=r[0],o&&l[i]&&l[i].forEach((function(t,e){l[i][e]=t<0?t:0})),n=1;n0||(l[i][e]+=+t)}));return s.d3.min(Object.keys(l).map((function(t){return s.d3.min(l[t])})))},t.prototype.getYDomainMax=function(t){var e,n,i,r,a,o,s=this,c=s.config,u=s.mapToIds(t),l=s.getValuesAsIdKeyed(t);if(c.data_groups.length>0)for(o=s.hasPositiveValueInTargets(t),e=0;e=0})),0!==r.length)for(i=r[0],o&&l[i]&&l[i].forEach((function(t,e){l[i][e]=t>0?t:0})),n=1;n=0&&S>=0,g=w<=0&&S<=0,(y(m)&&p||y(b)&&g)&&(A=!1),A&&(p&&(w=0),g&&(S=0)),c=u=.1*(s=Math.abs(S-w)),void 0!==T&&(S=T+(l=Math.max(Math.abs(w),Math.abs(S))),w=T-l),C)f=i.getDataLabelLength(w,S,"width"),h=a(i.y.range()),c+=s*((d=[f[0]/h,f[1]/h])[1]/(1-d[0]-d[1])),u+=s*(d[0]/(1-d[0]-d[1]));else if(M){f=i.getDataLabelLength(w,S,"height");var L=i.getY(r["axis_"+e+"_type"],[0,r.axis_rotated?i.width:i.height],[0,s]);c+=L(f[1]),u+=L(f[0])}return"y"===e&&_(r.axis_y_padding)&&(c=i.axis.getPadding(r.axis_y_padding,"top",c,s),u=i.axis.getPadding(r.axis_y_padding,"bottom",u,s)),"y2"===e&&_(r.axis_y2_padding)&&(c=i.axis.getPadding(r.axis_y2_padding,"top",c,s),u=i.axis.getPadding(r.axis_y2_padding,"bottom",u,s)),A&&(p&&(u=w),g&&(c=-S)),o=[w-u,S+c],P?o.reverse():o},t.prototype.getXDomainMin=function(t){var e=this,n=e.config;return l(n.axis_x_min)?e.isTimeSeries()?this.parseDate(n.axis_x_min):n.axis_x_min:e.d3.min(t,(function(t){return e.d3.min(t.values,(function(t){return t.x}))}))},t.prototype.getXDomainMax=function(t){var e=this,n=e.config;return l(n.axis_x_max)?e.isTimeSeries()?this.parseDate(n.axis_x_max):n.axis_x_max:e.d3.max(t,(function(t){return e.d3.max(t.values,(function(t){return t.x}))}))},t.prototype.getXDomainPadding=function(t){var e,n,i,r,a=this,o=a.config,s=t[1]-t[0];return n=a.isCategorized()?0:a.hasType("bar")?(e=a.getMaxDataCount())>1?s/(e-1)/2:.5:.01*s,"object"==typeof o.axis_x_padding&&_(o.axis_x_padding)?(i=y(o.axis_x_padding.left)?o.axis_x_padding.left:n,r=y(o.axis_x_padding.right)?o.axis_x_padding.right:n):i=r="number"==typeof o.axis_x_padding?o.axis_x_padding:n,{left:i,right:r}},t.prototype.getXDomain=function(t){var e=this,n=[e.getXDomainMin(t),e.getXDomainMax(t)],i=n[0],r=n[1],a=e.getXDomainPadding(n),o=0,s=0;return i-r!=0||e.isCategorized()||(e.isTimeSeries()?(i=new Date(.5*i.getTime()),r=new Date(1.5*r.getTime())):(i=0===i?1:.5*i,r=0===r?-1:1.5*r)),(i||0===i)&&(o=e.isTimeSeries()?new Date(i.getTime()-a.left):i-a.left),(r||0===r)&&(s=e.isTimeSeries()?new Date(r.getTime()+a.right):r+a.right),[o,s]},t.prototype.updateXDomain=function(t,e,n,i,r){var a=this,o=a.config;return n&&(a.x.domain(r||a.d3.extent(a.getXDomain(t))),a.orgXDomain=a.x.domain(),o.zoom_enabled&&a.zoom.update(),a.subX.domain(a.x.domain()),a.brush&&a.brush.updateScale(a.subX)),e&&a.x.domain(r||(!a.brush||a.brush.empty()?a.orgXDomain:a.brush.selectionAsValue())),i&&a.x.domain(a.trimXDomain(a.x.orgDomain())),a.x.domain()},t.prototype.trimXDomain=function(t){var e=this.getZoomDomain(),n=e[0],i=e[1];return t[0]<=n&&(t[1]=+t[1]+(n-t[0]),t[0]=n),i<=t[1]&&(t[0]=+t[0]-(t[1]-i),t[1]=i),t},t.prototype.drag=function(t){var e,n,i,r,a,o,c,u,l=this,f=l.config,h=l.main,d=l.d3;l.hasArcType()||f.data_selection_enabled&&f.data_selection_multiple&&(e=l.dragStart[0],n=l.dragStart[1],i=t[0],r=t[1],a=Math.min(e,i),o=Math.max(e,i),c=f.data_selection_grouped?l.margin.top:Math.min(n,r),u=f.data_selection_grouped?l.height:Math.max(n,r),h.select("."+b.dragarea).attr("x",a).attr("y",c).attr("width",o-a).attr("height",u-c),h.selectAll("."+b.shapes).selectAll("."+b.shape).each((function(t,e){if(f.data_selection_isselectable(t)){var n,i,r,h,p,g,y=d.select(this),_=y.classed(b.SELECTED),x=y.classed(b.INCLUDED),v=!1;if(y.classed(b.circle))n=1*y.attr("cx"),i=1*y.attr("cy"),p=l.togglePoint,v=as&&(o=o.filter((function(t){return(""+t).indexOf(".")<0})));return o},t.prototype.getGridFilterToRemove=function(t){return t?function(e){var n=!1;return[].concat(t).forEach((function(t){("value"in t&&e.value===t.value||"class"in t&&e.class===t.class)&&(n=!0)})),n}:function(){return!0}},t.prototype.removeGridLines=function(t,e){var n=this,i=n.config,r=n.getGridFilterToRemove(t),a=function(t){return!r(t)},o=e?b.xgridLines:b.ygridLines,s=e?b.xgridLine:b.ygridLine;n.main.select("."+o).selectAll("."+s).filter(r).transition().duration(i.transition_duration).style("opacity",0).remove(),e?i.grid_x_lines=i.grid_x_lines.filter(a):i.grid_y_lines=i.grid_y_lines.filter(a)},t.prototype.initEventRect=function(){var t=this,e=t.config;t.main.select("."+b.chart).append("g").attr("class",b.eventRects).style("fill-opacity",0),t.eventRect=t.main.select("."+b.eventRects).append("rect").attr("class",b.eventRect),e.zoom_enabled&&t.zoom&&(t.eventRect.call(t.zoom).on("dblclick.zoom",null),e.zoom_initialRange&&t.eventRect.transition().duration(0).call(t.zoom.transform,t.zoomTransform(e.zoom_initialRange)))},t.prototype.redrawEventRect=function(){var t=this,e=t.d3,n=t.config;function i(){t.svg.select("."+b.eventRect).style("cursor",null),t.hideXGridFocus(),t.hideTooltip(),t.unexpandCircles(),t.unexpandBars()}var r=function(e,i){return i&&(t.isBarType(i.id)||t.dist(i,e)=0})).classed(b.legendItemFocused,e).transition().duration(100).style("opacity",(function(){return(e?n.opacityForLegend:n.opacityForUnfocusedLegend).call(n,n.d3.select(this))}))},t.prototype.revertLegend=function(){var t=this,e=t.d3;t.legend.selectAll("."+b.legendItem).classed(b.legendItemFocused,!1).transition().duration(100).style("opacity",(function(){return t.opacityForLegend(e.select(this))}))},t.prototype.showLegend=function(t){var e=this,n=e.config;n.legend_show||(n.legend_show=!0,e.legend.style("visibility","visible"),e.legendHasRendered||e.updateLegendWithDefaults()),e.removeHiddenLegendIds(t),e.legend.selectAll(e.selectorLegends(t)).style("visibility","visible").transition().style("opacity",(function(){return e.opacityForLegend(e.d3.select(this))}))},t.prototype.hideLegend=function(t){var e=this,n=e.config;n.legend_show&&f(t)&&(n.legend_show=!1,e.legend.style("visibility","hidden")),e.addHiddenLegendIds(t),e.legend.selectAll(e.selectorLegends(t)).style("opacity",0).style("visibility","hidden")},t.prototype.clearLegendItemTextBoxCache=function(){this.legendItemTextBox={}},t.prototype.updateLegend=function(t,e,n){var i,r,a,s,c,u,f,h,d,p,g,y,_,x,v,m,w=this,S=w.config,T=0,A=0,P=S.legend_item_tile_width+5,C=0,M={},L={},E={},k=[0],V={},G=0;function O(e,n,i){var r,a,o=0===i,s=i===t.length-1,c=function(t,e){return w.legendItemTextBox[e]||(w.legendItemTextBox[e]=w.getTextRect(t.textContent,b.legendItem,t)),w.legendItemTextBox[e]}(e,n),u=c.width+P+(!s||w.isLegendRight||w.isLegendInset?10:0)+S.legend_padding,l=c.height+4,f=w.isLegendRight||w.isLegendInset?l:u,h=w.isLegendRight||w.isLegendInset?w.getLegendHeight():w.getLegendWidth();function d(t,e){e||(r=(h-C-f)/2)<10&&(r=(h-f)/2,C=0,G++),V[t]=G,k[G]=w.isLegendInset?10:r,M[t]=C,C+=f}o&&(C=0,G=0,T=0,A=0),!S.legend_show||w.isLegendToShow(n)?(L[n]=u,E[n]=l,(!T||u>=T)&&(T=u),(!A||l>=A)&&(A=l),a=w.isLegendRight||w.isLegendInset?A:T,S.legend_equally?(Object.keys(L).forEach((function(t){L[t]=T})),Object.keys(E).forEach((function(t){E[t]=A})),(r=(h-a*t.length)/2)<10?(C=0,G=0,t.forEach((function(t){d(t)}))):d(n,!0)):d(n)):L[n]=E[n]=V[n]=M[n]=0}t=t.filter((function(t){return!l(S.data_names[t])||null!==S.data_names[t]})),g=o(e=e||{},"withTransition",!0),y=o(e,"withTransitionForTransform",!0),w.isLegendInset&&(G=S.legend_inset_step?S.legend_inset_step:t.length,w.updateLegendStep(G)),w.isLegendRight?(i=function(t){return T*V[t]},s=function(t){return k[V[t]]+M[t]}):w.isLegendInset?(i=function(t){return T*V[t]+10},s=function(t){return k[V[t]]+M[t]}):(i=function(t){return k[V[t]]+M[t]},s=function(t){return A*V[t]}),r=function(t,e){return i(t,e)+4+S.legend_item_tile_width},c=function(t,e){return s(t,e)+9},a=function(t,e){return i(t,e)},u=function(t,e){return s(t,e)-5},f=function(t,e){return i(t,e)-2},h=function(t,e){return i(t,e)-2+S.legend_item_tile_width},d=function(t,e){return s(t,e)+4},(p=w.legend.selectAll("."+b.legendItem).data(t).enter().append("g").attr("class",(function(t){return w.generateClass(b.legendItem,t)})).style("visibility",(function(t){return w.isLegendToShow(t)?"visible":"hidden"})).style("cursor",(function(){return S.interaction_enabled?"pointer":"auto"})).on("click",S.interaction_enabled?function(t){S.legend_item_onclick?S.legend_item_onclick.call(w,t):w.d3.event.altKey?(w.api.hide(),w.api.show(t)):(w.api.toggle(t),w.isTargetToShow(t)?w.api.focus(t):w.api.revert())}:null).on("mouseover",S.interaction_enabled?function(t){S.legend_item_onmouseover?S.legend_item_onmouseover.call(w,t):(w.d3.select(this).classed(b.legendItemFocused,!0),!w.transiting&&w.isTargetToShow(t)&&w.api.focus(t))}:null).on("mouseout",S.interaction_enabled?function(t){S.legend_item_onmouseout?S.legend_item_onmouseout.call(w,t):(w.d3.select(this).classed(b.legendItemFocused,!1),w.api.revert())}:null)).append("text").text((function(t){return l(S.data_names[t])?S.data_names[t]:t})).each((function(t,e){O(this,t,e)})).style("pointer-events","none").attr("x",w.isLegendRight||w.isLegendInset?r:-200).attr("y",w.isLegendRight||w.isLegendInset?-200:c),p.append("rect").attr("class",b.legendItemEvent).style("fill-opacity",0).attr("x",w.isLegendRight||w.isLegendInset?a:-200).attr("y",w.isLegendRight||w.isLegendInset?-200:u),p.append("line").attr("class",b.legendItemTile).style("stroke",w.color).style("pointer-events","none").attr("x1",w.isLegendRight||w.isLegendInset?f:-200).attr("y1",w.isLegendRight||w.isLegendInset?-200:d).attr("x2",w.isLegendRight||w.isLegendInset?h:-200).attr("y2",w.isLegendRight||w.isLegendInset?-200:d).attr("stroke-width",S.legend_item_tile_height),m=w.legend.select("."+b.legendBackground+" rect"),w.isLegendInset&&T>0&&0===m.size()&&(m=w.legend.insert("g","."+b.legendItem).attr("class",b.legendBackground).append("rect")),_=w.legend.selectAll("text").data(t).text((function(t){return l(S.data_names[t])?S.data_names[t]:t})).each((function(t,e){O(this,t,e)})),(g?_.transition():_).attr("x",r).attr("y",c),x=w.legend.selectAll("rect."+b.legendItemEvent).data(t),(g?x.transition():x).attr("width",(function(t){return L[t]})).attr("height",(function(t){return E[t]})).attr("x",a).attr("y",u),v=w.legend.selectAll("line."+b.legendItemTile).data(t),(g?v.transition():v).style("stroke",w.levelColor?function(t){return w.levelColor(w.cache[t].values.reduce((function(t,e){return t+e.value}),0))}:w.color).attr("x1",f).attr("y1",d).attr("x2",h).attr("y2",d),m&&(g?m.transition():m).attr("height",w.getLegendHeight()-12).attr("width",T*(G+1)+10),w.legend.selectAll("."+b.legendItem).classed(b.legendItemHidden,(function(t){return!w.isTargetToShow(t)})),w.updateLegendItemWidth(T),w.updateLegendItemHeight(A),w.updateLegendStep(G),w.updateSizes(),w.updateScales(),w.updateSvgSize(),w.transformAll(y,n),w.legendHasRendered=!0},t.prototype.initRegion=function(){var t=this;t.region=t.main.append("g").attr("clip-path",t.clipPath).attr("class",b.regions)},t.prototype.updateRegion=function(t){var e=this,n=e.config;e.region.style("visibility",e.hasArcType()?"hidden":"visible");var i=e.main.select("."+b.regions).selectAll("."+b.region).data(n.regions),r=i.enter().append("g");r.append("rect").attr("x",e.regionX.bind(e)).attr("y",e.regionY.bind(e)).attr("width",e.regionWidth.bind(e)).attr("height",e.regionHeight.bind(e)).style("fill-opacity",(function(t){return y(t.opacity)?t.opacity:.1})),r.append("text").text(e.labelRegion.bind(e)),e.mainRegion=r.merge(i).attr("class",e.classRegion.bind(e)),i.exit().transition().duration(t).style("opacity",0).remove()},t.prototype.redrawRegion=function(t,e){var n=this,i=n.mainRegion,r=n.mainRegion.selectAll("text");return[(t?i.transition(e):i).attr("x",n.regionX.bind(n)).attr("y",n.regionY.bind(n)).attr("width",n.regionWidth.bind(n)).attr("height",n.regionHeight.bind(n)).style("fill-opacity",(function(t){return y(t.opacity)?t.opacity:.1})),(t?r.transition(e):r).attr("x",n.labelOffsetX.bind(n)).attr("y",n.labelOffsetY.bind(n)).attr("transform",n.labelTransform.bind(n)).attr("style","text-anchor: left;")]},t.prototype.regionX=function(t){var e=this,n=e.config,i="y"===t.axis?e.y:e.y2;return"y"===t.axis||"y2"===t.axis?n.axis_rotated&&"start"in t?i(t.start):0:n.axis_rotated?0:"start"in t?e.x(e.isTimeSeries()?e.parseDate(t.start):t.start):0},t.prototype.regionY=function(t){var e=this,n=e.config,i="y"===t.axis?e.y:e.y2;return"y"===t.axis||"y2"===t.axis?n.axis_rotated?0:"end"in t?i(t.end):0:n.axis_rotated&&"start"in t?e.x(e.isTimeSeries()?e.parseDate(t.start):t.start):0},t.prototype.regionWidth=function(t){var e,n=this,i=n.config,r=n.regionX(t),a="y"===t.axis?n.y:n.y2;return(e="y"===t.axis||"y2"===t.axis?i.axis_rotated&&"end"in t?a(t.end):n.width:i.axis_rotated?n.width:"end"in t?n.x(n.isTimeSeries()?n.parseDate(t.end):t.end):n.width)n.bar_width_max?n.bar_width_max:i},t.prototype.getBars=function(t,e){var n=this;return(e?n.main.selectAll("."+b.bars+n.getTargetSelectorSuffix(e)):n.main).selectAll("."+b.bar+(y(t)?"-"+t:""))},t.prototype.expandBars=function(t,e,n){n&&this.unexpandBars(),this.getBars(t,e).classed(b.EXPANDED,!0)},t.prototype.unexpandBars=function(t){this.getBars(t).classed(b.EXPANDED,!1)},t.prototype.generateDrawBar=function(t,e){var n=this.config,i=this.generateGetBarPoints(t,e);return function(t,e){var r=i(t,e),a=n.axis_rotated?1:0,o=n.axis_rotated?0:1;return"M "+r[0][a]+","+r[0][o]+" L"+r[1][a]+","+r[1][o]+" L"+r[2][a]+","+r[2][o]+" L"+r[3][a]+","+r[3][o]+" z"}},t.prototype.generateGetBarPoints=function(t,e){var n=this,i=e?n.subXAxis:n.xAxis,r=t.__max__+1,a=n.getBarW(i,r),o=n.getShapeX(a,r,t,!!e),s=n.getShapeY(!!e),c=n.getShapeOffset(n.isBarType,t,!!e),u=a*(n.config.bar_space/2),l=e?n.getSubYScale:n.getYScale;return function(t,e){var i=l.call(n,t.id)(0),r=c(t,e)||i,f=o(t),h=s(t);return n.config.axis_rotated&&(0=0&&(u+=s(f[o])-c))})),u}},t.prototype.isWithinShape=function(t,e){var n,i=this,r=i.d3.select(t);return i.isTargetToShow(e.id)?"circle"===t.nodeName?n=i.isStepType(e)?i.isWithinStep(t,i.getYScale(e.id)(e.value)):i.isWithinCircle(t,1.5*i.pointSelectR(e)):"path"===t.nodeName&&(n=!r.classed(b.bar)||i.isWithinBar(i.d3.mouse(t),t)):n=!1,n},t.prototype.getInterpolate=function(t){var e=this,n=e.d3,i={linear:n.curveLinear,"linear-closed":n.curveLinearClosed,basis:n.curveBasis,"basis-open":n.curveBasisOpen,"basis-closed":n.curveBasisClosed,bundle:n.curveBundle,cardinal:n.curveCardinal,"cardinal-open":n.curveCardinalOpen,"cardinal-closed":n.curveCardinalClosed,monotone:n.curveMonotoneX,step:n.curveStep,"step-before":n.curveStepBefore,"step-after":n.curveStepAfter};return e.isSplineType(t)?i[e.config.spline_interpolation_type]||i.cardinal:e.isStepType(t)?i[e.config.line_step_type]:i.linear},t.prototype.initLine=function(){this.main.select("."+b.chart).append("g").attr("class",b.chartLines)},t.prototype.updateTargetsForLine=function(t){var e,n=this,i=n.config,r=n.classChartLine.bind(n),a=n.classLines.bind(n),o=n.classAreas.bind(n),s=n.classCircles.bind(n),c=n.classFocus.bind(n);(e=n.main.select("."+b.chartLines).selectAll("."+b.chartLine).data(t).attr("class",(function(t){return r(t)+c(t)})).enter().append("g").attr("class",r).style("opacity",0).style("pointer-events","none")).append("g").attr("class",a),e.append("g").attr("class",o),e.append("g").attr("class",(function(t){return n.generateClass(b.selectedCircles,t.id)})),e.append("g").attr("class",s).style("cursor",(function(t){return i.data_selection_isselectable(t)?"pointer":null})),t.forEach((function(t){n.main.selectAll("."+b.selectedCircles+n.getTargetSelectorSuffix(t.id)).selectAll("."+b.selectedCircle).each((function(e){e.value=t.values[e.index].value}))}))},t.prototype.updateLine=function(t){var e=this,n=e.main.selectAll("."+b.lines).selectAll("."+b.line).data(e.lineData.bind(e)),i=n.enter().append("path").attr("class",e.classLine.bind(e)).style("stroke",e.color);e.mainLine=i.merge(n).style("opacity",e.initialOpacity.bind(e)).style("shape-rendering",(function(t){return e.isStepType(t)?"crispEdges":""})).attr("transform",null),n.exit().transition().duration(t).style("opacity",0)},t.prototype.redrawLine=function(t,e,n){return[(e?this.mainLine.transition(n):this.mainLine).attr("d",t).style("stroke",this.color).style("opacity",1)]},t.prototype.generateDrawLine=function(t,e){var n=this,i=n.config,r=n.d3.line(),a=n.generateGetLinePoints(t,e),o=e?n.getSubYScale:n.getYScale,s=function(t){return(e?n.subxx:n.xx).call(n,t)},c=function(t,e){return i.data_groups.length>0?a(t,e)[0][1]:o.call(n,t.id)(t.value)};return r=i.axis_rotated?r.x(c).y(s):r.x(s).y(c),i.line_connectNull||(r=r.defined((function(t){return null!=t.value}))),function(t){var a,s=i.line_connectNull?n.filterRemoveNull(t.values):t.values,c=e?n.subX:n.x,u=o.call(n,t.id),l=0,f=0;return n.isLineType(t)?i.data_regions[t.id]?a=n.lineWithRegions(s,c,u,i.data_regions[t.id]):(n.isStepType(t)&&(s=n.convertValuesToStep(s)),a=r.curve(n.getInterpolate(t))(s)):(s[0]&&(l=c(s[0].x),f=u(s[0].value)),a=i.axis_rotated?"M "+f+" "+l:"M "+l+" "+f),a||"M 0 0"}},t.prototype.generateGetLinePoints=function(t,e){var n=this,i=n.config,r=t.__max__+1,a=n.getShapeX(0,r,t,!!e),o=n.getShapeY(!!e),s=n.getShapeOffset(n.isLineType,t,!!e),c=e?n.getSubYScale:n.getYScale;return function(t,e){var r=c.call(n,t.id)(0),u=s(t,e)||r,l=a(t),f=o(t);return i.axis_rotated&&(00?a(t,e)[0][1]:o.call(n,t.id)(n.getAreaBaseValue(t.id))},u=function(t,e){return i.data_groups.length>0?a(t,e)[1][1]:o.call(n,t.id)(t.value)};return r=i.axis_rotated?r.x0(c).x1(u).y(s):r.x(s).y0(i.area_above?0:c).y1(u),i.line_connectNull||(r=r.defined((function(t){return null!==t.value}))),function(t){var e,a=i.line_connectNull?n.filterRemoveNull(t.values):t.values,o=0,s=0;return n.isAreaType(t)?(n.isStepType(t)&&(a=n.convertValuesToStep(a)),e=r.curve(n.getInterpolate(t))(a)):(a[0]&&(o=n.x(a[0].x),s=n.getYScale(t.id)(a[0].value)),e=i.axis_rotated?"M "+s+" "+o:"M "+o+" "+s),e||"M 0 0"}},t.prototype.getAreaBaseValue=function(){return 0},t.prototype.generateGetAreaPoints=function(t,e){var n=this,i=n.config,r=t.__max__+1,a=n.getShapeX(0,r,t,!!e),o=n.getShapeY(!!e),s=n.getShapeOffset(n.isAreaType,t,!!e),c=e?n.getSubYScale:n.getYScale;return function(t,e){var r=c.call(n,t.id)(0),u=s(t,e)||r,l=a(t),f=o(t);return i.axis_rotated&&(00?(t=n.getShapeIndices(n.isLineType),e=n.generateGetLinePoints(t),n.circleY=function(t,n){return e(t,n)[0][1]}):n.circleY=function(t){return n.getYScale(t.id)(t.value)}},t.prototype.getCircles=function(t,e){var n=this;return(e?n.main.selectAll("."+b.circles+n.getTargetSelectorSuffix(e)):n.main).selectAll("."+b.circle+(y(t)?"-"+t:""))},t.prototype.expandCircles=function(t,e,n){var i=this,r=i.pointExpandedR.bind(i);n&&i.unexpandCircles(),i.getCircles(t,e).classed(b.EXPANDED,!0).attr("r",r)},t.prototype.unexpandCircles=function(t){var e=this,n=e.pointR.bind(e);e.getCircles(t).filter((function(){return e.d3.select(this).classed(b.EXPANDED)})).classed(b.EXPANDED,!1).attr("r",n)},t.prototype.pointR=function(t){var e=this.config;return this.isStepType(t)?0:h(e.point_r)?e.point_r(t):e.point_r},t.prototype.pointExpandedR=function(t){var e=this,n=e.config;return n.point_focus_expand_enabled?h(n.point_focus_expand_r)?n.point_focus_expand_r(t):n.point_focus_expand_r?n.point_focus_expand_r:1.75*e.pointR(t):e.pointR(t)},t.prototype.pointSelectR=function(t){var e=this.config;return h(e.point_select_r)?e.point_select_r(t):e.point_select_r?e.point_select_r:4*this.pointR(t)},t.prototype.isWithinCircle=function(t,e){var n=this.d3,i=n.mouse(t),r=n.select(t),a=+r.attr("cx"),o=+r.attr("cy");return Math.sqrt(Math.pow(a-i[0],2)+Math.pow(o-i[1],2))0?n:320/(t.hasType("gauge")&&!e.gauge_fullCircle?2:1)},t.prototype.getCurrentPaddingTop=function(){var t=this,e=t.config,n=y(e.padding_top)?e.padding_top:0;return t.title&&t.title.node()&&(n+=t.getTitlePadding()),n},t.prototype.getCurrentPaddingBottom=function(){var t=this.config;return y(t.padding_bottom)?t.padding_bottom:0},t.prototype.getCurrentPaddingLeft=function(t){var e=this,n=e.config;return y(n.padding_left)?n.padding_left:n.axis_rotated?!n.axis_x_show||n.axis_x_inner?1:Math.max(r(e.getAxisWidthByAxisId("x",t)),40):!n.axis_y_show||n.axis_y_inner?e.axis.getYAxisLabelPosition().isOuter?30:1:r(e.getAxisWidthByAxisId("y",t))},t.prototype.getCurrentPaddingRight=function(){var t=this,e=t.config,n=0,i=t.isLegendRight?t.getLegendWidth()+20:0;return n=y(e.padding_right)?e.padding_right+1:e.axis_rotated?10+i:!e.axis_y2_show||e.axis_y2_inner?2+i+(t.axis.getY2AxisLabelPosition().isOuter?20:0):r(t.getAxisWidthByAxisId("y2"))+i,t.colorScale&&t.colorScale.node()&&(n+=t.getColorScalePadding()),n},t.prototype.getParentRectValue=function(t){for(var e,n=this.selectChart.node();n&&"BODY"!==n.tagName;){try{e=n.getBoundingClientRect()[t]}catch(i){"width"===t&&(e=n.offsetWidth)}if(e)break;n=n.parentNode}return e},t.prototype.getParentWidth=function(){return this.getParentRectValue("width")},t.prototype.getParentHeight=function(){var t=this.selectChart.style("height");return t.indexOf("px")>0?+t.replace("px",""):0},t.prototype.getSvgLeft=function(t){var e=this,n=e.config,i=n.axis_rotated||!n.axis_rotated&&!n.axis_y_inner,r=n.axis_rotated?b.axisX:b.axisY,a=e.main.select("."+r).node(),o=a&&i?a.getBoundingClientRect():{right:0},s=e.selectChart.node().getBoundingClientRect(),c=e.hasArcType(),u=o.right-s.left-(c?0:e.getCurrentPaddingLeft(t));return u>0?u:0},t.prototype.getAxisWidthByAxisId=function(t,e){var n=this.axis.getLabelPositionById(t);return this.axis.getMaxTickWidth(t,e)+(n.isInner?20:40)},t.prototype.getHorizontalAxisHeight=function(t,e){var n=this,i=n.config,r=30;return"x"!==t||(l(e)&&e?i.subchart_axis_x_show:i.axis_x_show)?"x"===t&&i.axis_x_height?i.axis_x_height:"y"!==t||i.axis_y_show?"y2"!==t||i.axis_y2_show?("x"===t&&!i.axis_rotated&&i.axis_x_tick_rotate&&(r=30+n.axis.getMaxTickWidth(t)*Math.cos(Math.PI*(90-Math.abs(i.axis_x_tick_rotate))/180)),"y"===t&&i.axis_rotated&&i.axis_y_tick_rotate&&(r=30+n.axis.getMaxTickWidth(t)*Math.cos(Math.PI*(90-Math.abs(i.axis_y_tick_rotate))/180)),r+(n.axis.getLabelPositionById(t).isInner?0:10)+("y2"===t?-10:0)):n.rotated_padding_top:!i.legend_show||n.isLegendRight||n.isLegendInset?1:10:8},t.prototype.initBrush=function(t){var e=this,n=e.d3;return e.brush=(e.config.axis_rotated?n.brushY():n.brushX()).on("brush",(function(){var t=n.event.sourceEvent;t&&"zoom"===t.type||e.redrawForBrush()})).on("end",(function(){var t=n.event.sourceEvent;t&&"zoom"===t.type||e.brush.empty()&&t&&"end"!==t.type&&e.brush.clear()})),e.brush.updateExtent=function(){var t,n=this.scale.range();return t=e.config.axis_rotated?[[0,n[0]],[e.width2,n[1]]]:[[n[0],0],[n[1],e.height2]],this.extent(t),this},e.brush.updateScale=function(t){return this.scale=t,this},e.brush.update=function(t){this.updateScale(t||e.subX).updateExtent(),e.context.select("."+b.brush).call(this)},e.brush.clear=function(){e.context.select("."+b.brush).call(e.brush.move,null)},e.brush.selection=function(){return n.brushSelection(e.context.select("."+b.brush).node())},e.brush.selectionAsValue=function(t,n){var i,r;return t?(e.context&&(i=[this.scale(t[0]),this.scale(t[1])],r=e.context.select("."+b.brush),n&&(r=r.transition()),e.brush.move(r,i)),[]):(i=e.brush.selection()||[0,0],[this.scale.invert(i[0]),this.scale.invert(i[1])])},e.brush.empty=function(){var t=e.brush.selection();return!t||t[0]===t[1]},e.brush.updateScale(t)},t.prototype.initSubchart=function(){var t=this,e=t.config,n=t.context=t.svg.append("g").attr("transform",t.getTranslate("context"));n.style("visibility","visible"),n.append("g").attr("clip-path",t.clipPathForSubchart).attr("class",b.chart),n.select("."+b.chart).append("g").attr("class",b.chartBars),n.select("."+b.chart).append("g").attr("class",b.chartLines),n.append("g").attr("clip-path",t.clipPath).attr("class",b.brush),t.axes.subx=n.append("g").attr("class",b.axisX).attr("transform",t.getTranslate("subx")).attr("clip-path",e.axis_rotated?"":t.clipPathForXAxis).style("visibility",e.subchart_axis_x_show?"visible":"hidden")},t.prototype.initSubchartBrush=function(){var t=this;t.initBrush(t.subX).updateExtent(),t.context.select("."+b.brush).call(t.brush)},t.prototype.updateTargetsForSubchart=function(t){var e,n,i,r,a=this,o=a.context,s=a.config,c=a.classChartBar.bind(a),u=a.classBars.bind(a),l=a.classChartLine.bind(a),f=a.classLines.bind(a),h=a.classAreas.bind(a);(i=(r=o.select("."+b.chartBars).selectAll("."+b.chartBar).data(t)).enter().append("g").style("opacity",0)).merge(r).attr("class",c),i.append("g").attr("class",u),(e=(n=o.select("."+b.chartLines).selectAll("."+b.chartLine).data(t)).enter().append("g").style("opacity",0)).merge(n).attr("class",l),e.append("g").attr("class",f),e.append("g").attr("class",h),o.selectAll("."+b.brush+" rect").attr(s.axis_rotated?"width":"height",s.axis_rotated?a.width2:a.height2)},t.prototype.updateBarForSubchart=function(t){var e=this,n=e.context.selectAll("."+b.bars).selectAll("."+b.bar).data(e.barData.bind(e)),i=n.enter().append("path").attr("class",e.classBar.bind(e)).style("stroke","none").style("fill",e.color);n.exit().transition().duration(t).style("opacity",0).remove(),e.contextBar=i.merge(n).style("opacity",e.initialOpacity.bind(e))},t.prototype.redrawBarForSubchart=function(t,e,n){(e?this.contextBar.transition(Math.random().toString()).duration(n):this.contextBar).attr("d",t).style("opacity",1)},t.prototype.updateLineForSubchart=function(t){var e=this,n=e.context.selectAll("."+b.lines).selectAll("."+b.line).data(e.lineData.bind(e)),i=n.enter().append("path").attr("class",e.classLine.bind(e)).style("stroke",e.color);n.exit().transition().duration(t).style("opacity",0).remove(),e.contextLine=i.merge(n).style("opacity",e.initialOpacity.bind(e))},t.prototype.redrawLineForSubchart=function(t,e,n){(e?this.contextLine.transition(Math.random().toString()).duration(n):this.contextLine).attr("d",t).style("opacity",1)},t.prototype.updateAreaForSubchart=function(t){var e=this,n=e.d3,i=e.context.selectAll("."+b.areas).selectAll("."+b.area).data(e.lineData.bind(e)),r=i.enter().append("path").attr("class",e.classArea.bind(e)).style("fill",e.color).style("opacity",(function(){return e.orgAreaOpacity=+n.select(this).style("opacity"),0}));i.exit().transition().duration(t).style("opacity",0).remove(),e.contextArea=r.merge(i).style("opacity",0)},t.prototype.redrawAreaForSubchart=function(t,e,n){(e?this.contextArea.transition(Math.random().toString()).duration(n):this.contextArea).attr("d",t).style("fill",this.color).style("opacity",this.orgAreaOpacity)},t.prototype.redrawSubchart=function(t,e,n,i,r,a,o){var s,c,u,l=this,f=l.d3;f.event&&"zoom"===f.event.type&&l.brush.selectionAsValue(l.x.orgDomain()),t&&(l.brush.empty()||l.brush.selectionAsValue(l.x.orgDomain()),s=l.generateDrawArea(r,!0),c=l.generateDrawBar(a,!0),u=l.generateDrawLine(o,!0),l.updateBarForSubchart(n),l.updateLineForSubchart(n),l.updateAreaForSubchart(n),l.redrawBarForSubchart(c,n,n),l.redrawLineForSubchart(u,n,n),l.redrawAreaForSubchart(s,n,n))},t.prototype.redrawForBrush=function(){var t,e=this,n=e.x,i=e.d3;e.redraw({withTransition:!1,withY:e.config.zoom_rescale,withSubchart:!1,withUpdateXDomain:!0,withEventRect:!1,withDimension:!1}),t=i.event.selection||e.brush.scale.range(),e.main.select("."+b.eventRect).call(e.zoom.transform,i.zoomIdentity.scale(e.width/(t[1]-t[0])).translate(-t[0],0)),e.config.subchart_onbrush.call(e.api,n.orgDomain())},t.prototype.transformContext=function(t,e){var n,i=this;e&&e.axisSubX?n=e.axisSubX:(n=i.context.select("."+b.axisX),t&&(n=n.transition())),i.context.attr("transform",i.getTranslate("context")),n.attr("transform",i.getTranslate("subx"))},t.prototype.getDefaultSelection=function(){var t=this,e=t.config,n=h(e.axis_x_selection)?e.axis_x_selection(t.getXDomain(t.data.targets)):e.axis_x_selection;return t.isTimeSeries()&&(n=[t.parseDate(n[0]),t.parseDate(n[1])]),n},t.prototype.removeSubchart=function(){var t=this;t.brush=null,t.context.remove(),t.context=null},t.prototype.initText=function(){var t=this;t.main.select("."+b.chart).append("g").attr("class",b.chartTexts),t.mainText=t.d3.selectAll([])},t.prototype.updateTargetsForText=function(t){var e=this,n=e.classChartText.bind(e),i=e.classTexts.bind(e),r=e.classFocus.bind(e),a=e.main.select("."+b.chartTexts).selectAll("."+b.chartText).data(t),o=a.enter().append("g").attr("class",n).style("opacity",0).style("pointer-events","none");o.append("g").attr("class",i),o.merge(a).attr("class",(function(t){return n(t)+r(t)}))},t.prototype.updateText=function(t,e,n){var i=this,r=i.config,a=i.barOrLineData.bind(i),o=i.classText.bind(i),s=i.main.selectAll("."+b.texts).selectAll("."+b.text).data(a),c=s.enter().append("text").attr("class",o).attr("text-anchor",(function(t){return r.axis_rotated?t.value<0?"end":"start":"middle"})).style("stroke","none").attr("x",t).attr("y",e).style("fill",(function(t){return i.color(t)})).style("fill-opacity",0);i.mainText=c.merge(s).text((function(t,e,n){return i.dataLabelFormat(t.id)(t.value,t.id,e,n)})),s.exit().transition().duration(n).style("fill-opacity",0).remove()},t.prototype.redrawText=function(t,e,n,i,r){return[(i?this.mainText.transition(r):this.mainText).attr("x",t).attr("y",e).style("fill",this.color).style("fill-opacity",n?0:this.opacityForText.bind(this))]},t.prototype.getTextRect=function(t,e,n){var i,r=this.d3.select("body").append("div").classed("c3",!0),a=r.append("svg").style("visibility","hidden").style("position","fixed").style("top",0).style("left",0),o=this.d3.select(n).style("font");return a.selectAll(".dummy").data([t]).enter().append("text").classed(e||"",!0).style("font",o).text(t).each((function(){i=c(this)})),r.remove(),i},t.prototype.generateXYForText=function(t,e,n,i){var r=this,a=r.generateGetAreaPoints(t,!1),o=r.generateGetBarPoints(e,!1),s=r.generateGetLinePoints(n,!1),c=i?r.getXForText:r.getYForText;return function(t,e){var n=r.isAreaType(t)?a:r.isBarType(t)?o:s;return c.call(r,n(t,e),t,this)}},t.prototype.getXForText=function(t,e,n){var i,r,a=this,o=c(n);return a.config.axis_rotated?(r=a.isBarType(e)?4:6,i=t[2][1]+r*(e.value<0?-1:1)):i=a.hasType("bar")?(t[2][0]+t[0][0])/2:t[0][0],null===e.value&&(i>a.width?i=a.width-o.width:i<0&&(i=4)),i},t.prototype.getYForText=function(t,e,n){var i,r=this,a=c(n);return r.config.axis_rotated?i=(t[0][0]+t[2][0]+.6*a.height)/2:(i=t[2][1],e.value<0||0===e.value&&!r.hasPositiveValue?(i+=a.height,r.isBarType(e)&&r.isSafari()?i-=3:!r.isBarType(e)&&r.isChrome()&&(i+=3)):i+=r.isBarType(e)?-3:-6),null!==e.value||r.config.axis_rotated||(ithis.height&&(i=this.height-4)),i},t.prototype.initTitle=function(){var t=this;t.title=t.svg.append("text").text(t.config.title_text).attr("class",t.CLASS.title)},t.prototype.redrawTitle=function(){var t=this;t.title.attr("x",t.xForTitle.bind(t)).attr("y",t.yForTitle.bind(t))},t.prototype.xForTitle=function(){var t=this,e=t.config,n=e.title_position||"left";return n.indexOf("right")>=0?t.currentWidth-t.getTextRect(t.title.node().textContent,t.CLASS.title,t.title.node()).width-e.title_padding.right:n.indexOf("center")>=0?Math.max((t.currentWidth-t.getTextRect(t.title.node().textContent,t.CLASS.title,t.title.node()).width)/2,0):e.title_padding.left},t.prototype.yForTitle=function(){var t=this;return t.config.title_padding.top+t.getTextRect(t.title.node().textContent,t.CLASS.title,t.title.node()).height},t.prototype.getTitlePadding=function(){return this.yForTitle()+this.config.title_padding.bottom},t.prototype.drawColorScale=function(){var t,e,n,i,r,a,o,s=this,c=s.d3,u=s.config,l=s.data.targets[0];if(t=isNaN(u.stanford_scaleWidth)?20:u.stanford_scaleWidth,5<0||t<0)throw Error("Colorscale's barheight and barwidth must be greater than 0.");o=s.height-u.stanford_padding.bottom-u.stanford_padding.top,n=c.range(u.stanford_padding.bottom,o,5),a=c.scaleSequential(l.colors).domain([n[n.length-1],n[0]]),s.colorScale&&s.colorScale.remove(),s.colorScale=s.svg.append("g").attr("width",50).attr("height",o).attr("class",b.colorScale),s.colorScale.append("g").attr("transform","translate(0, "+u.stanford_padding.top+")").selectAll("bars").data(n).enter().append("rect").attr("y",(function(t,e){return 5*e})).attr("x",0).attr("width",t).attr("height",5).attr("fill",(function(t){return a(t)})),r=c.scaleLog().domain([l.minEpochs,l.maxEpochs]).range([n[0]+u.stanford_padding.top+n[n.length-1]+5-1,n[0]+u.stanford_padding.top]),i=c.axisRight(r),"pow10"===u.stanford_scaleFormat?i.tickValues([1,10,100,1e3,1e4,1e5,1e6,1e7]):h(u.stanford_scaleFormat)?i.tickFormat(u.stanford_scaleFormat):i.tickFormat(c.format("d")),h(u.stanford_scaleValues)&&i.tickValues(u.stanford_scaleValues(l.minEpochs,l.maxEpochs)),e=s.colorScale.append("g").attr("class","legend axis").attr("transform","translate("+t+",0)").call(i),"pow10"===u.stanford_scaleFormat&&e.selectAll(".tick text").text(null).filter(P).text(10).append("tspan").attr("dy","-.7em").text((function(t){return Math.round(Math.log(t)/Math.LN10)})),s.colorScale.attr("transform","translate("+(s.currentWidth-s.xForColorScale())+", 0)")},t.prototype.xForColorScale=function(){return this.config.stanford_padding.right+c(this.colorScale.node()).width},t.prototype.getColorScalePadding=function(){return this.xForColorScale()+this.config.stanford_padding.left+20},t.prototype.isStanfordGraphType=function(){return"stanford"===this.config.data_type},t.prototype.initStanfordData=function(){var t,e,n,i=this,r=i.d3,a=i.config,o=i.data.targets[0];if(o.values.sort(L),t=o.values.map((function(t){return t.epochs})),(n=isNaN(a.stanford_scaleMin)?r.min(t):a.stanford_scaleMin)>(e=isNaN(a.stanford_scaleMax)?r.max(t):a.stanford_scaleMax))throw Error("Number of minEpochs has to be smaller than maxEpochs");o.colors=h(a.stanford_colors)?a.stanford_colors:r.interpolateHslLong(r.hsl(250,1,.5),r.hsl(0,1,.5)),o.colorscale=r.scaleSequentialLog(o.colors).domain([n,e]),o.minEpochs=n,o.maxEpochs=e},t.prototype.getStanfordPointColor=function(t){return this.data.targets[0].colorscale(t.epochs)},t.prototype.getCentroid=function(t){var e,n,i,r,a,o=C(t),s=0,c=0;for(e=0,n=t.length-1;e"+(e?x(e):"x")+""+t.x+"\n "+(n?x(n):"y")+""+t.value+"\n "},t.prototype.countEpochsInRegion=function(t){var e,n,i=this.data.targets[0];return e=i.values.reduce((function(t,e){return t+Number(e.epochs)}),0),{value:n=i.values.reduce((function(e,n){return M(n,t)?e+Number(n.epochs):e}),0),percentage:0!==n?(n/e*100).toFixed(1):0}};var C=function(t){var e,n,i,r,a=0;for(e=0,n=t.length-1;es!=(r=e[l].y)>s&&o<(a-n)*(s-i)/(r-i)+n&&(c=!c);return c},L=function(t,e){return t.epochse.epochs?1:0};return t.prototype.initStanfordElements=function(){var t=this;t.stanfordElements=t.main.select("."+b.chart).append("g").attr("class",b.stanfordElements),t.stanfordElements.append("g").attr("class",b.stanfordLines),t.stanfordElements.append("g").attr("class",b.stanfordTexts),t.stanfordElements.append("g").attr("class",b.stanfordRegions)},t.prototype.updateStanfordElements=function(t){var e,n,i,r,a,o,s=this,c=s.main,u=s.config,l=s.xvCustom.bind(s),f=s.yvCustom.bind(s),h=s.countEpochsInRegion.bind(s);(n=(e=c.select("."+b.stanfordLines).style("shape-rendering","geometricprecision").selectAll("."+b.stanfordLine).data(u.stanford_lines)).enter().append("g").attr("class",(function(t){return b.stanfordLine+(t.class?" "+t.class:"")}))).append("line").attr("x1",(function(t){return u.axis_rotated?f(t,"value_y1"):l(t,"value_x1")})).attr("x2",(function(t){return u.axis_rotated?f(t,"value_y2"):l(t,"value_x2")})).attr("y1",(function(t){return u.axis_rotated?l(t,"value_x1"):f(t,"value_y1")})).attr("y2",(function(t){return u.axis_rotated?l(t,"value_x2"):f(t,"value_y2")})).style("opacity",0),s.stanfordLines=n.merge(e),s.stanfordLines.select("line").transition().duration(t).attr("x1",(function(t){return u.axis_rotated?f(t,"value_y1"):l(t,"value_x1")})).attr("x2",(function(t){return u.axis_rotated?f(t,"value_y2"):l(t,"value_x2")})).attr("y1",(function(t){return u.axis_rotated?l(t,"value_x1"):f(t,"value_y1")})).attr("y2",(function(t){return u.axis_rotated?l(t,"value_x2"):f(t,"value_y2")})).style("opacity",1),e.exit().transition().duration(t).style("opacity",0).remove(),(o=(a=c.select("."+b.stanfordTexts).selectAll("."+b.stanfordText).data(u.stanford_texts)).enter().append("g").attr("class",(function(t){return b.stanfordText+(t.class?" "+t.class:"")}))).append("text").attr("x",(function(t){return u.axis_rotated?f(t,"y"):l(t,"x")})).attr("y",(function(t){return u.axis_rotated?l(t,"x"):f(t,"y")})).style("opacity",0),s.stanfordTexts=o.merge(a),s.stanfordTexts.select("text").transition().duration(t).attr("x",(function(t){return u.axis_rotated?f(t,"y"):l(t,"x")})).attr("y",(function(t){return u.axis_rotated?l(t,"x"):f(t,"y")})).text((function(t){return t.content})).style("opacity",1),a.exit().transition().duration(t).style("opacity",0).remove(),(r=(i=c.select("."+b.stanfordRegions).selectAll("."+b.stanfordRegion).data(u.stanford_regions)).enter().append("g").attr("class",(function(t){return b.stanfordRegion+(t.class?" "+t.class:"")}))).append("polygon").attr("points",(function(t){return t.points.map((function(t){return[u.axis_rotated?f(t,"y"):l(t,"x"),u.axis_rotated?l(t,"x"):f(t,"y")].join(",")})).join(" ")})).style("opacity",0),r.append("text").attr("x",(function(t){return s.getCentroid(t.points).x})).attr("y",(function(t){return s.getCentroid(t.points).y})).style("opacity",0),s.stanfordRegions=r.merge(i),s.stanfordRegions.select("polygon").transition().duration(t).attr("points",(function(t){return t.points.map((function(t){return[u.axis_rotated?f(t,"y"):l(t,"x"),u.axis_rotated?l(t,"x"):f(t,"y")].join(",")})).join(" ")})).style("opacity",(function(t){return t.opacity?t.opacity:.2})),s.stanfordRegions.select("text").transition().duration(t).attr("x",(function(t){return u.axis_rotated?f(s.getCentroid(t.points),"y"):l(s.getCentroid(t.points),"x")})).attr("y",(function(t){return u.axis_rotated?l(s.getCentroid(t.points),"x"):f(s.getCentroid(t.points),"y")})).text((function(t){var e,n,i;return t.text?(s.isStanfordGraphType()&&(e=(i=h(t.points)).value,n=i.percentage),t.text(e,n)):""})).attr("text-anchor","middle").attr("dominant-baseline","middle").style("opacity",1),i.exit().transition().duration(t).style("opacity",0).remove()},t.prototype.initTooltip=function(){var t,e=this,n=e.config;if(e.tooltip=e.selectChart.style("position","relative").append("div").attr("class",b.tooltipContainer).style("position","absolute").style("pointer-events","none").style("display","none"),n.tooltip_init_show){if(e.isTimeSeries()&&p(n.tooltip_init_x)){for(n.tooltip_init_x=e.parseDate(n.tooltip_init_x),t=0;t"+o),u=l.getStanfordPointColor(t[a]),c=x(f.data_epochs),s=t[a].epochs;else if(r||(o=x(h?h(t[a].x,t[a].index):t[a].x),r=""+(o||0===o?"":"")),void 0!==(s=x(p(t[a].value,t[a].ratio,t[a].id,t[a].index,t)))){if(null===t[a].name)continue;c=x(d(t[a].name,t[a].ratio,t[a].id,t[a].index)),u=l.levelColor?l.levelColor(t[a].value):i(t[a].id)}void 0!==s&&(r+="",r+="",r+="",r+="")}return r+"
"+o+"
"+c+""+s+"
"},t.prototype.tooltipPosition=function(t,e,n,i){var r,a,o,s,c,u=this,l=u.config,f=u.d3,h=u.hasArcType(),d=f.mouse(i);return h?(a=(u.width-(u.isLegendRight?u.getLegendWidth():0))/2+d[0],s=(u.hasType("gauge")?u.height:u.height/2)+d[1]+20):(r=u.getSvgLeft(!0),l.axis_rotated?(o=(a=r+d[0]+100)+e,c=u.currentWidth-u.getCurrentPaddingRight(),s=u.x(t[0].x)+20):(o=(a=r+u.getCurrentPaddingLeft(!0)+u.x(t[0].x)+20)+e,c=r+u.currentWidth-u.getCurrentPaddingRight(),s=d[1]+15),o>c&&(a-=o-c+20),s+n>u.currentHeight&&(s-=n+30)),s<0&&(s=0),{top:s,left:a}},t.prototype.showTooltip=function(e,n){var i,r,a,o=this,s=o.config,c=o.hasArcType(),u=e.filter((function(t){return t&&y(t.value)})),l=s.tooltip_position||t.prototype.tooltipPosition;0!==u.length&&s.tooltip_show?(o.tooltip.html(s.tooltip_contents.call(o,e,o.axis.getXAxisTickFormat(),o.getYFormat(c),o.color)).style("display","block"),i=o.tooltip.property("offsetWidth"),r=o.tooltip.property("offsetHeight"),a=l.call(this,u,i,r,n),o.tooltip.style("top",a.top+"px").style("left",a.left+"px")):o.hideTooltip()},t.prototype.hideTooltip=function(){this.tooltip.style("display","none")},t.prototype.setTargetType=function(t,e){var n=this,i=n.config;n.mapToTargetIds(t).forEach((function(t){n.withoutFadeIn[t]=e===i.data_types[t],i.data_types[t]=e})),t||(i.data_type=e)},t.prototype.hasType=function(t,e){var n=this,i=n.config.data_types,r=!1;return(e=e||n.data.targets)&&e.length?e.forEach((function(e){var n=i[e.id];(n&&n.indexOf(t)>=0||!n&&"line"===t)&&(r=!0)})):Object.keys(i).length?Object.keys(i).forEach((function(e){i[e]===t&&(r=!0)})):r=n.config.data_type===t,r},t.prototype.hasArcType=function(t){return this.hasType("pie",t)||this.hasType("donut",t)||this.hasType("gauge",t)},t.prototype.isLineType=function(t){var e=this.config,n=p(t)?t:t.id;return!e.data_types[n]||["line","spline","area","area-spline","step","area-step"].indexOf(e.data_types[n])>=0},t.prototype.isStepType=function(t){var e=p(t)?t:t.id;return["step","area-step"].indexOf(this.config.data_types[e])>=0},t.prototype.isSplineType=function(t){var e=p(t)?t:t.id;return["spline","area-spline"].indexOf(this.config.data_types[e])>=0},t.prototype.isAreaType=function(t){var e=p(t)?t:t.id;return["area","area-spline","area-step"].indexOf(this.config.data_types[e])>=0},t.prototype.isBarType=function(t){var e=p(t)?t:t.id;return"bar"===this.config.data_types[e]},t.prototype.isScatterType=function(t){var e=p(t)?t:t.id;return"scatter"===this.config.data_types[e]},t.prototype.isStanfordType=function(t){var e=p(t)?t:t.id;return"stanford"===this.config.data_types[e]},t.prototype.isPieType=function(t){var e=p(t)?t:t.id;return"pie"===this.config.data_types[e]},t.prototype.isGaugeType=function(t){var e=p(t)?t:t.id;return"gauge"===this.config.data_types[e]},t.prototype.isDonutType=function(t){var e=p(t)?t:t.id;return"donut"===this.config.data_types[e]},t.prototype.isArcType=function(t){return this.isPieType(t)||this.isDonutType(t)||this.isGaugeType(t)},t.prototype.lineData=function(t){return this.isLineType(t)?[t]:[]},t.prototype.arcData=function(t){return this.isArcType(t.data)?[t]:[]},t.prototype.barData=function(t){return this.isBarType(t)?t.values:[]},t.prototype.lineOrScatterOrStanfordData=function(t){return this.isLineType(t)||this.isScatterType(t)||this.isStanfordType(t)?t.values:[]},t.prototype.barOrLineData=function(t){return this.isBarType(t)||this.isLineType(t)?t.values:[]},t.prototype.isSafari=function(){var t=window.navigator.userAgent;return t.indexOf("Safari")>=0&&t.indexOf("Chrome")<0},t.prototype.isChrome=function(){return window.navigator.userAgent.indexOf("Chrome")>=0},t.prototype.initZoom=function(){var t,e=this,n=e.d3,i=e.config;return e.zoom=n.zoom().on("start",(function(){if("scroll"===i.zoom_type){var r=n.event.sourceEvent;r&&"brush"===r.type||(t=r,i.zoom_onzoomstart.call(e.api,r))}})).on("zoom",(function(){if("scroll"===i.zoom_type){var t=n.event.sourceEvent;t&&"brush"===t.type||(e.redrawForZoom(),i.zoom_onzoom.call(e.api,e.x.orgDomain()))}})).on("end",(function(){if("scroll"===i.zoom_type){var r=n.event.sourceEvent;r&&"brush"===r.type||r&&t.clientX===r.clientX&&t.clientY===r.clientY||i.zoom_onzoomend.call(e.api,e.x.orgDomain())}})),e.zoom.updateDomain=function(){return n.event&&n.event.transform&&(i.axis_rotated&&"scroll"===i.zoom_type&&"mousemove"===n.event.sourceEvent.type?e.x.domain(n.event.transform.rescaleY(e.subX).domain()):e.x.domain(n.event.transform.rescaleX(e.subX).domain())),this},e.zoom.updateExtent=function(){return this.scaleExtent([1,1/0]).translateExtent([[0,0],[e.width,e.height]]).extent([[0,0],[e.width,e.height]]),this},e.zoom.update=function(){return this.updateExtent().updateDomain()},e.zoom.updateExtent()},t.prototype.zoomTransform=function(t){var e=this,n=[e.x(t[0]),e.x(t[1])];return e.d3.zoomIdentity.scale(e.width/(n[1]-n[0])).translate(-n[0],0)},t.prototype.initDragZoom=function(){var t=this,e=t.d3,n=t.config,i=t.context=t.svg,r=t.margin.left+20.5,a=t.margin.top+.5;if("drag"===n.zoom_type&&n.zoom_enabled){var o=function(e){return e&&e.map((function(e){return t.x.invert(e)}))},s=t.dragZoomBrush=e.brushX().on("start",(function(){t.api.unzoom(),t.svg.select("."+b.dragZoom).classed("disabled",!1),n.zoom_onzoomstart.call(t.api,e.event.sourceEvent)})).on("brush",(function(){n.zoom_onzoom.call(t.api,o(e.event.selection))})).on("end",(function(){if(null!=e.event.selection){var i=o(e.event.selection);n.zoom_disableDefaultBehavior||t.api.zoom(i),t.svg.select("."+b.dragZoom).classed("disabled",!0),n.zoom_onzoomend.call(t.api,i)}}));i.append("g").classed(b.dragZoom,!0).attr("clip-path",t.clipPath).attr("transform","translate("+r+","+a+")").call(s)}},t.prototype.getZoomDomain=function(){var t=this,e=t.config,n=t.d3;return[n.min([t.orgXDomain[0],e.zoom_x_min]),n.max([t.orgXDomain[1],e.zoom_x_max])]},t.prototype.redrawForZoom=function(){var t=this,e=t.d3,n=t.config,i=t.zoom,r=t.x;n.zoom_enabled&&0!==t.filterTargetsToShow(t.data.targets).length&&(i.update(),n.zoom_disableDefaultBehavior||(t.isCategorized()&&r.orgDomain()[0]===t.orgXDomain[0]&&r.domain([t.orgXDomain[0]-1e-10,r.orgDomain()[1]]),t.redraw({withTransition:!1,withY:n.zoom_rescale,withSubchart:!1,withEventRect:!1,withDimension:!1}),e.event.sourceEvent&&"mousemove"===e.event.sourceEvent.type&&(t.cancelClick=!0)))},T}()},693:(t,e,n)=>{"use strict";n.r(e),n.d(e,{FormatSpecifier:()=>uc,active:()=>Ji,arc:()=>hb,area:()=>xb,areaRadial:()=>Cb,ascending:()=>r,autoType:()=>No,axisBottom:()=>rt,axisLeft:()=>at,axisRight:()=>it,axisTop:()=>nt,bisect:()=>u,bisectLeft:()=>c,bisectRight:()=>s,bisector:()=>a,blob:()=>_s,brush:()=>Mr,brushSelection:()=>Ar,brushX:()=>Pr,brushY:()=>Cr,buffer:()=>vs,chord:()=>Nr,clientPoint:()=>kn,cluster:()=>Cd,color:()=>We,contourDensity:()=>oo,contours:()=>to,create:()=>Fm,creator:()=>re,cross:()=>h,csv:()=>Ts,csvFormat:()=>To,csvFormatBody:()=>Ao,csvFormatRow:()=>Co,csvFormatRows:()=>Po,csvFormatValue:()=>Mo,csvParse:()=>wo,csvParseRows:()=>So,cubehelix:()=>Ha,curveBasis:()=>sw,curveBasisClosed:()=>uw,curveBasisOpen:()=>fw,curveBundle:()=>dw,curveCardinal:()=>yw,curveCardinalClosed:()=>xw,curveCardinalOpen:()=>mw,curveCatmullRom:()=>Sw,curveCatmullRomClosed:()=>Aw,curveCatmullRomOpen:()=>Cw,curveLinear:()=>pb,curveLinearClosed:()=>Lw,curveMonotoneX:()=>Nw,curveMonotoneY:()=>Dw,curveNatural:()=>Xw,curveStep:()=>Yw,curveStepAfter:()=>jw,curveStepBefore:()=>Hw,customEvent:()=>ye,descending:()=>d,deviation:()=>y,dispatch:()=>ht,drag:()=>po,dragDisable:()=>Ce,dragEnable:()=>Me,dsv:()=>Ss,dsvFormat:()=>mo,easeBack:()=>fs,easeBackIn:()=>us,easeBackInOut:()=>fs,easeBackOut:()=>ls,easeBounce:()=>os,easeBounceIn:()=>as,easeBounceInOut:()=>ss,easeBounceOut:()=>os,easeCircle:()=>is,easeCircleIn:()=>es,easeCircleInOut:()=>is,easeCircleOut:()=>ns,easeCubic:()=>Qi,easeCubicIn:()=>Wi,easeCubicInOut:()=>Qi,easeCubicOut:()=>qi,easeElastic:()=>ps,easeElasticIn:()=>ds,easeElasticInOut:()=>gs,easeElasticOut:()=>ps,easeExp:()=>ts,easeExpIn:()=>$o,easeExpInOut:()=>ts,easeExpOut:()=>Jo,easeLinear:()=>Fo,easePoly:()=>jo,easePolyIn:()=>Yo,easePolyInOut:()=>jo,easePolyOut:()=>Ho,easeQuad:()=>Bo,easeQuadIn:()=>zo,easeQuadInOut:()=>Bo,easeQuadOut:()=>Xo,easeSin:()=>Zo,easeSinIn:()=>qo,easeSinInOut:()=>Zo,easeSinOut:()=>Qo,entries:()=>pa,event:()=>le,extent:()=>_,forceCenter:()=>Gs,forceCollide:()=>Us,forceLink:()=>Qs,forceManyBody:()=>tc,forceRadial:()=>ec,forceSimulation:()=>Js,forceX:()=>nc,forceY:()=>ic,format:()=>pc,formatDefaultLocale:()=>vc,formatLocale:()=>xc,formatPrefix:()=>gc,formatSpecifier:()=>cc,geoAlbers:()=>Bh,geoAlbersUsa:()=>Yh,geoArea:()=>gu,geoAzimuthalEqualArea:()=>Wh,geoAzimuthalEqualAreaRaw:()=>Uh,geoAzimuthalEquidistant:()=>Qh,geoAzimuthalEquidistantRaw:()=>qh,geoBounds:()=>sl,geoCentroid:()=>vl,geoCircle:()=>El,geoClipAntimeridian:()=>Bl,geoClipCircle:()=>Yl,geoClipExtent:()=>Wl,geoClipRectangle:()=>Ul,geoConicConformal:()=>ed,geoConicConformalRaw:()=>td,geoConicEqualArea:()=>Xh,geoConicEqualAreaRaw:()=>zh,geoConicEquidistant:()=>ad,geoConicEquidistantRaw:()=>rd,geoContains:()=>gf,geoDistance:()=>of,geoEqualEarth:()=>hd,geoEqualEarthRaw:()=>fd,geoEquirectangular:()=>id,geoEquirectangularRaw:()=>nd,geoGnomonic:()=>pd,geoGnomonicRaw:()=>dd,geoGraticule:()=>xf,geoGraticule10:()=>vf,geoIdentity:()=>gd,geoInterpolate:()=>mf,geoLength:()=>nf,geoMercator:()=>Kh,geoMercatorRaw:()=>Zh,geoNaturalEarth1:()=>_d,geoNaturalEarth1Raw:()=>yd,geoOrthographic:()=>vd,geoOrthographicRaw:()=>xd,geoPath:()=>Sh,geoProjection:()=>Nh,geoProjectionMutator:()=>Dh,geoRotation:()=>Cl,geoStereographic:()=>bd,geoStereographicRaw:()=>md,geoStream:()=>nu,geoTransform:()=>Th,geoTransverseMercator:()=>Sd,geoTransverseMercatorRaw:()=>wd,gray:()=>Sa,hcl:()=>Va,hierarchy:()=>Ld,histogram:()=>k,hsl:()=>an,html:()=>ks,image:()=>Ps,interpolate:()=>Ln,interpolateArray:()=>bn,interpolateBasis:()=>un,interpolateBasisClosed:()=>ln,interpolateBlues:()=>hm,interpolateBrBG:()=>Tv,interpolateBuGn:()=>Bv,interpolateBuPu:()=>Hv,interpolateCividis:()=>Sm,interpolateCool:()=>Pm,interpolateCubehelix:()=>Xp,interpolateCubehelixDefault:()=>Tm,interpolateCubehelixLong:()=>Bp,interpolateDate:()=>Sn,interpolateDiscrete:()=>Cp,interpolateGnBu:()=>Uv,interpolateGreens:()=>pm,interpolateGreys:()=>ym,interpolateHcl:()=>Dp,interpolateHclLong:()=>Fp,interpolateHsl:()=>Op,interpolateHslLong:()=>Rp,interpolateHue:()=>Mp,interpolateInferno:()=>Nm,interpolateLab:()=>Ip,interpolateMagma:()=>Im,interpolateNumber:()=>Tn,interpolateNumberArray:()=>vn,interpolateObject:()=>An,interpolateOrRd:()=>qv,interpolateOranges:()=>wm,interpolatePRGn:()=>Pv,interpolatePiYG:()=>Mv,interpolatePlasma:()=>Dm,interpolatePuBu:()=>$v,interpolatePuBuGn:()=>Zv,interpolatePuOr:()=>Ev,interpolatePuRd:()=>tm,interpolatePurples:()=>xm,interpolateRainbow:()=>Mm,interpolateRdBu:()=>Vv,interpolateRdGy:()=>Ov,interpolateRdPu:()=>nm,interpolateRdYlBu:()=>Iv,interpolateRdYlGn:()=>Dv,interpolateReds:()=>mm,interpolateRgb:()=>gn,interpolateRgbBasis:()=>_n,interpolateRgbBasisClosed:()=>xn,interpolateRound:()=>Lp,interpolateSinebow:()=>Vm,interpolateSpectral:()=>zv,interpolateString:()=>Mn,interpolateTransformCss:()=>pi,interpolateTransformSvg:()=>gi,interpolateTurbo:()=>Gm,interpolateViridis:()=>Rm,interpolateWarm:()=>Am,interpolateYlGn:()=>om,interpolateYlGnBu:()=>rm,interpolateYlOrBr:()=>cm,interpolateYlOrRd:()=>lm,interpolateZoom:()=>Vp,interrupt:()=>ai,interval:()=>hS,isoFormat:()=>uS,isoParse:()=>fS,json:()=>Ms,keys:()=>ha,lab:()=>Ta,lch:()=>ka,line:()=>_b,lineRadial:()=>Pb,linkHorizontal:()=>Ib,linkRadial:()=>Db,linkVertical:()=>Nb,local:()=>Xm,map:()=>na,matcher:()=>_t,max:()=>R,mean:()=>I,median:()=>N,merge:()=>D,min:()=>F,mouse:()=>Gn,namespace:()=>At,namespaces:()=>Tt,nest:()=>ia,now:()=>Hn,pack:()=>tp,packEnclose:()=>Rd,packSiblings:()=>qd,pairs:()=>l,partition:()=>op,path:()=>Ur,permute:()=>z,pie:()=>bb,piecewise:()=>Yp,pointRadial:()=>Mb,polygonArea:()=>jp,polygonCentroid:()=>Up,polygonContains:()=>Kp,polygonHull:()=>Zp,polygonLength:()=>$p,precisionFixed:()=>mc,precisionPrefix:()=>bc,precisionRound:()=>wc,quadtree:()=>zs,quantile:()=>V,quantize:()=>Hp,radialArea:()=>Cb,radialLine:()=>Pb,randomBates:()=>rg,randomExponential:()=>ag,randomIrwinHall:()=>ig,randomLogNormal:()=>ng,randomNormal:()=>eg,randomUniform:()=>tg,range:()=>S,rgb:()=>Ke,ribbon:()=>$r,scaleBand:()=>dg,scaleDiverging:()=>ov,scaleDivergingLog:()=>sv,scaleDivergingPow:()=>uv,scaleDivergingSqrt:()=>lv,scaleDivergingSymlog:()=>cv,scaleIdentity:()=>Lg,scaleImplicit:()=>fg,scaleLinear:()=>Mg,scaleLog:()=>Dg,scaleOrdinal:()=>hg,scalePoint:()=>gg,scalePow:()=>Wg,scaleQuantile:()=>Qg,scaleQuantize:()=>Zg,scaleSequential:()=>Jx,scaleSequentialLog:()=>tv,scaleSequentialPow:()=>nv,scaleSequentialQuantile:()=>rv,scaleSequentialSqrt:()=>iv,scaleSequentialSymlog:()=>ev,scaleSqrt:()=>qg,scaleSymlog:()=>Bg,scaleThreshold:()=>Kg,scaleTime:()=>zx,scaleUtc:()=>Zx,scan:()=>X,schemeAccent:()=>dv,schemeBlues:()=>fm,schemeBrBG:()=>Sv,schemeBuGn:()=>Xv,schemeBuPu:()=>Yv,schemeCategory10:()=>hv,schemeDark2:()=>pv,schemeGnBu:()=>jv,schemeGreens:()=>dm,schemeGreys:()=>gm,schemeOrRd:()=>Wv,schemeOranges:()=>bm,schemePRGn:()=>Av,schemePaired:()=>gv,schemePastel1:()=>yv,schemePastel2:()=>_v,schemePiYG:()=>Cv,schemePuBu:()=>Kv,schemePuBuGn:()=>Qv,schemePuOr:()=>Lv,schemePuRd:()=>Jv,schemePurples:()=>_m,schemeRdBu:()=>kv,schemeRdGy:()=>Gv,schemeRdPu:()=>em,schemeRdYlBu:()=>Rv,schemeRdYlGn:()=>Nv,schemeReds:()=>vm,schemeSet1:()=>xv,schemeSet2:()=>vv,schemeSet3:()=>mv,schemeSpectral:()=>Fv,schemeTableau10:()=>bv,schemeYlGn:()=>am,schemeYlGnBu:()=>im,schemeYlOrBr:()=>sm,schemeYlOrRd:()=>um,select:()=>Te,selectAll:()=>Ym,selection:()=>Se,selector:()=>pt,selectorAll:()=>yt,set:()=>fa,shuffle:()=>B,stack:()=>Qw,stackOffsetDiverging:()=>Kw,stackOffsetExpand:()=>Zw,stackOffsetNone:()=>Uw,stackOffsetSilhouette:()=>$w,stackOffsetWiggle:()=>Jw,stackOrderAppearance:()=>tS,stackOrderAscending:()=>nS,stackOrderDescending:()=>rS,stackOrderInsideOut:()=>aS,stackOrderNone:()=>Ww,stackOrderReverse:()=>oS,stratify:()=>fp,style:()=>It,sum:()=>Y,svg:()=>Vs,symbol:()=>iw,symbolCircle:()=>Fb,symbolCross:()=>zb,symbolDiamond:()=>Yb,symbolSquare:()=>qb,symbolStar:()=>Wb,symbolTriangle:()=>Zb,symbolWye:()=>ew,symbols:()=>nw,text:()=>bs,thresholdFreedmanDiaconis:()=>G,thresholdScott:()=>O,thresholdSturges:()=>E,tickFormat:()=>Pg,tickIncrement:()=>M,tickStep:()=>L,ticks:()=>C,timeDay:()=>My,timeDays:()=>Ly,timeFormat:()=>p_,timeFormatDefaultLocale:()=>Rx,timeFormatLocale:()=>h_,timeFriday:()=>xy,timeFridays:()=>Ay,timeHour:()=>ky,timeHours:()=>Vy,timeInterval:()=>ty,timeMillisecond:()=>zy,timeMilliseconds:()=>Xy,timeMinute:()=>Oy,timeMinutes:()=>Ry,timeMonday:()=>py,timeMondays:()=>by,timeMonth:()=>ay,timeMonths:()=>oy,timeParse:()=>g_,timeSaturday:()=>vy,timeSaturdays:()=>Py,timeSecond:()=>Ny,timeSeconds:()=>Dy,timeSunday:()=>dy,timeSundays:()=>my,timeThursday:()=>_y,timeThursdays:()=>Ty,timeTuesday:()=>gy,timeTuesdays:()=>wy,timeWednesday:()=>yy,timeWednesdays:()=>Sy,timeWeek:()=>dy,timeWeeks:()=>my,timeYear:()=>ny,timeYears:()=>iy,timeout:()=>$n,timer:()=>Wn,timerFlush:()=>qn,touch:()=>Vn,touches:()=>Hm,transition:()=>Hi,transpose:()=>H,tree:()=>xp,treemap:()=>Sp,treemapBinary:()=>Tp,treemapDice:()=>ap,treemapResquarify:()=>Pp,treemapSlice:()=>vp,treemapSliceDice:()=>Ap,treemapSquarify:()=>wp,tsv:()=>As,tsvFormat:()=>Vo,tsvFormatBody:()=>Go,tsvFormatRow:()=>Ro,tsvFormatRows:()=>Oo,tsvFormatValue:()=>Io,tsvParse:()=>Eo,tsvParseRows:()=>ko,utcDay:()=>r_,utcDays:()=>a_,utcFormat:()=>y_,utcFriday:()=>qy,utcFridays:()=>e_,utcHour:()=>jx,utcHours:()=>Ux,utcMillisecond:()=>zy,utcMilliseconds:()=>Xy,utcMinute:()=>qx,utcMinutes:()=>Qx,utcMonday:()=>Hy,utcMondays:()=>Ky,utcMonth:()=>Bx,utcMonths:()=>Yx,utcParse:()=>__,utcSaturday:()=>Qy,utcSaturdays:()=>n_,utcSecond:()=>Ny,utcSeconds:()=>Dy,utcSunday:()=>Yy,utcSundays:()=>Zy,utcThursday:()=>Wy,utcThursdays:()=>t_,utcTuesday:()=>jy,utcTuesdays:()=>$y,utcWednesday:()=>Uy,utcWednesdays:()=>Jy,utcWeek:()=>Yy,utcWeeks:()=>Zy,utcYear:()=>s_,utcYears:()=>c_,values:()=>da,variance:()=>g,version:()=>i,voronoi:()=>$S,window:()=>Vt,xml:()=>Es,zip:()=>U,zoom:()=>hT,zoomIdentity:()=>nT,zoomTransform:()=>iT});var i="5.16.0";function r(t,e){return te?1:t>=e?0:NaN}function a(t){var e;return 1===t.length&&(e=t,t=function(t,n){return r(e(t),n)}),{left:function(e,n,i,r){for(null==i&&(i=0),null==r&&(r=e.length);i>>1;t(e[a],n)<0?i=a+1:r=a}return i},right:function(e,n,i,r){for(null==i&&(i=0),null==r&&(r=e.length);i>>1;t(e[a],n)>0?r=a:i=a+1}return i}}}var o=a(r),s=o.right,c=o.left;const u=s;function l(t,e){null==e&&(e=f);for(var n=0,i=t.length-1,r=t[0],a=new Array(i<0?0:i);nt?1:e>=t?0:NaN}function p(t){return null===t?NaN:+t}function g(t,e){var n,i,r=t.length,a=0,o=-1,s=0,c=0;if(null==e)for(;++o1)return c/(a-1)}function y(t,e){var n=g(t,e);return n?Math.sqrt(n):n}function _(t,e){var n,i,r,a=t.length,o=-1;if(null==e){for(;++o=n)for(i=r=n;++on&&(i=n),r=n)for(i=r=n;++on&&(i=n),r0)return[t];if((i=e0)for(t=Math.ceil(t/o),e=Math.floor(e/o),a=new Array(r=Math.ceil(e-t+1));++s=0?(a>=T?10:a>=A?5:a>=P?2:1)*Math.pow(10,r):-Math.pow(10,-r)/(a>=T?10:a>=A?5:a>=P?2:1)}function L(t,e,n){var i=Math.abs(e-t)/Math.max(0,n),r=Math.pow(10,Math.floor(Math.log(i)/Math.LN10)),a=i/r;return a>=T?r*=10:a>=A?r*=5:a>=P&&(r*=2),ef;)h.pop(),--d;var p,g=new Array(d+1);for(r=0;r<=d;++r)(p=g[r]=[]).x0=r>0?h[r-1]:l,p.x1=r=1)return+n(t[i-1],i-1,t);var i,r=(i-1)*e,a=Math.floor(r),o=+n(t[a],a,t);return o+(+n(t[a+1],a+1,t)-o)*(r-a)}}function G(t,e,n){return t=m.call(t,p).sort(r),Math.ceil((n-e)/(2*(V(t,.75)-V(t,.25))*Math.pow(t.length,-1/3)))}function O(t,e,n){return Math.ceil((n-e)/(3.5*y(t)*Math.pow(t.length,-1/3)))}function R(t,e){var n,i,r=t.length,a=-1;if(null==e){for(;++a=n)for(i=n;++ai&&(i=n)}else for(;++a=n)for(i=n;++ai&&(i=n);return i}function I(t,e){var n,i=t.length,r=i,a=-1,o=0;if(null==e)for(;++a=0;)for(e=(i=t[r]).length;--e>=0;)n[--o]=i[e];return n}function F(t,e){var n,i,r=t.length,a=-1;if(null==e){for(;++a=n)for(i=n;++an&&(i=n)}else for(;++a=n)for(i=n;++an&&(i=n);return i}function z(t,e){for(var n=e.length,i=new Array(n);n--;)i[n]=t[e[n]];return i}function X(t,e){if(n=t.length){var n,i,a=0,o=0,s=t[o];for(null==e&&(e=r);++a=0&&(n=t.slice(i+1),t=t.slice(0,i)),t&&!e.hasOwnProperty(t))throw new Error("unknown type: "+t);return{type:t,name:n}}))}function lt(t,e){for(var n,i=0,r=t.length;i0)for(var n,i,r=new Array(n),a=0;ae?1:t>=e?0:NaN}vt.prototype={constructor:vt,appendChild:function(t){return this._parent.insertBefore(t,this._next)},insertBefore:function(t,e){return this._parent.insertBefore(t,e)},querySelector:function(t){return this._parent.querySelector(t)},querySelectorAll:function(t){return this._parent.querySelectorAll(t)}};var St="http://www.w3.org/1999/xhtml";const Tt={svg:"http://www.w3.org/2000/svg",xhtml:St,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};function At(t){var e=t+="",n=e.indexOf(":");return n>=0&&"xmlns"!==(e=t.slice(0,n))&&(t=t.slice(n+1)),Tt.hasOwnProperty(e)?{space:Tt[e],local:t}:t}function Pt(t){return function(){this.removeAttribute(t)}}function Ct(t){return function(){this.removeAttributeNS(t.space,t.local)}}function Mt(t,e){return function(){this.setAttribute(t,e)}}function Lt(t,e){return function(){this.setAttributeNS(t.space,t.local,e)}}function Et(t,e){return function(){var n=e.apply(this,arguments);null==n?this.removeAttribute(t):this.setAttribute(t,n)}}function kt(t,e){return function(){var n=e.apply(this,arguments);null==n?this.removeAttributeNS(t.space,t.local):this.setAttributeNS(t.space,t.local,n)}}function Vt(t){return t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView}function Gt(t){return function(){this.style.removeProperty(t)}}function Ot(t,e,n){return function(){this.style.setProperty(t,e,n)}}function Rt(t,e,n){return function(){var i=e.apply(this,arguments);null==i?this.style.removeProperty(t):this.style.setProperty(t,i,n)}}function It(t,e){return t.style.getPropertyValue(e)||Vt(t).getComputedStyle(t,null).getPropertyValue(e)}function Nt(t){return function(){delete this[t]}}function Dt(t,e){return function(){this[t]=e}}function Ft(t,e){return function(){var n=e.apply(this,arguments);null==n?delete this[t]:this[t]=n}}function zt(t){return t.trim().split(/^|\s+/)}function Xt(t){return t.classList||new Bt(t)}function Bt(t){this._node=t,this._names=zt(t.getAttribute("class")||"")}function Yt(t,e){for(var n=Xt(t),i=-1,r=e.length;++i=0&&(this._names.splice(e,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(t){return this._names.indexOf(t)>=0}};var ue={},le=null;function fe(t,e,n){return t=he(t,e,n),function(e){var n=e.relatedTarget;n&&(n===this||8&n.compareDocumentPosition(this))||t.call(this,e)}}function he(t,e,n){return function(i){var r=le;le=i;try{t.call(this,this.__data__,e,n)}finally{le=r}}}function de(t){return t.trim().split(/^|\s+/).map((function(t){var e="",n=t.indexOf(".");return n>=0&&(e=t.slice(n+1),t=t.slice(0,n)),{type:t,name:e}}))}function pe(t){return function(){var e=this.__on;if(e){for(var n,i=0,r=-1,a=e.length;i=b&&(b=m+1);!(v=_[b])&&++b=0;)(i=r[a])&&(o&&4^i.compareDocumentPosition(o)&&o.parentNode.insertBefore(i,o),o=i);return this},sort:function(t){function e(e,n){return e&&n?t(e.__data__,n.__data__):!e-!n}t||(t=wt);for(var n=this._groups,i=n.length,r=new Array(i),a=0;a1?this.each((null==e?Gt:"function"==typeof e?Rt:Ot)(t,e,null==n?"":n)):It(this.node(),t)},property:function(t,e){return arguments.length>1?this.each((null==e?Nt:"function"==typeof e?Ft:Dt)(t,e)):this.node()[t]},classed:function(t,e){var n=zt(t+"");if(arguments.length<2){for(var i=Xt(this.node()),r=-1,a=n.length;++r>8&15|e>>4&240,e>>4&15|240&e,(15&e)<<4|15&e,1):8===n?Qe(e>>24&255,e>>16&255,e>>8&255,(255&e)/255):4===n?Qe(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|240&e,((15&e)<<4|15&e)/255):null):(e=De.exec(t))?new $e(e[1],e[2],e[3],1):(e=Fe.exec(t))?new $e(255*e[1]/100,255*e[2]/100,255*e[3]/100,1):(e=ze.exec(t))?Qe(e[1],e[2],e[3],e[4]):(e=Xe.exec(t))?Qe(255*e[1]/100,255*e[2]/100,255*e[3]/100,e[4]):(e=Be.exec(t))?nn(e[1],e[2]/100,e[3]/100,1):(e=Ye.exec(t))?nn(e[1],e[2]/100,e[3]/100,e[4]):He.hasOwnProperty(t)?qe(He[t]):"transparent"===t?new $e(NaN,NaN,NaN,0):null}function qe(t){return new $e(t>>16&255,t>>8&255,255&t,1)}function Qe(t,e,n,i){return i<=0&&(t=e=n=NaN),new $e(t,e,n,i)}function Ze(t){return t instanceof ke||(t=We(t)),t?new $e((t=t.rgb()).r,t.g,t.b,t.opacity):new $e}function Ke(t,e,n,i){return 1===arguments.length?Ze(t):new $e(t,e,n,null==i?1:i)}function $e(t,e,n,i){this.r=+t,this.g=+e,this.b=+n,this.opacity=+i}function Je(){return"#"+en(this.r)+en(this.g)+en(this.b)}function tn(){var t=this.opacity;return(1===(t=isNaN(t)?1:Math.max(0,Math.min(1,t)))?"rgb(":"rgba(")+Math.max(0,Math.min(255,Math.round(this.r)||0))+", "+Math.max(0,Math.min(255,Math.round(this.g)||0))+", "+Math.max(0,Math.min(255,Math.round(this.b)||0))+(1===t?")":", "+t+")")}function en(t){return((t=Math.max(0,Math.min(255,Math.round(t)||0)))<16?"0":"")+t.toString(16)}function nn(t,e,n,i){return i<=0?t=e=n=NaN:n<=0||n>=1?t=e=NaN:e<=0&&(t=NaN),new on(t,e,n,i)}function rn(t){if(t instanceof on)return new on(t.h,t.s,t.l,t.opacity);if(t instanceof ke||(t=We(t)),!t)return new on;if(t instanceof on)return t;var e=(t=t.rgb()).r/255,n=t.g/255,i=t.b/255,r=Math.min(e,n,i),a=Math.max(e,n,i),o=NaN,s=a-r,c=(a+r)/2;return s?(o=e===a?(n-i)/s+6*(n0&&c<1?0:o,new on(o,s,c,t.opacity)}function an(t,e,n,i){return 1===arguments.length?rn(t):new on(t,e,n,null==i?1:i)}function on(t,e,n,i){this.h=+t,this.s=+e,this.l=+n,this.opacity=+i}function sn(t,e,n){return 255*(t<60?e+(n-e)*t/60:t<180?n:t<240?e+(n-e)*(240-t)/60:e)}function cn(t,e,n,i,r){var a=t*t,o=a*t;return((1-3*t+3*a-o)*e+(4-6*a+3*o)*n+(1+3*t+3*a-3*o)*i+o*r)/6}function un(t){var e=t.length-1;return function(n){var i=n<=0?n=0:n>=1?(n=1,e-1):Math.floor(n*e),r=t[i],a=t[i+1],o=i>0?t[i-1]:2*r-a,s=i180||n<-180?n-360*Math.round(n/360):n):fn(isNaN(t)?e:t)}function pn(t,e){var n=e-t;return n?hn(t,n):fn(isNaN(t)?e:t)}Le(ke,We,{copy:function(t){return Object.assign(new this.constructor,this,t)},displayable:function(){return this.rgb().displayable()},hex:je,formatHex:je,formatHsl:function(){return rn(this).formatHsl()},formatRgb:Ue,toString:Ue}),Le($e,Ke,Ee(ke,{brighter:function(t){return t=null==t?Ge:Math.pow(Ge,t),new $e(this.r*t,this.g*t,this.b*t,this.opacity)},darker:function(t){return t=null==t?Ve:Math.pow(Ve,t),new $e(this.r*t,this.g*t,this.b*t,this.opacity)},rgb:function(){return this},displayable:function(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:Je,formatHex:Je,formatRgb:tn,toString:tn})),Le(on,an,Ee(ke,{brighter:function(t){return t=null==t?Ge:Math.pow(Ge,t),new on(this.h,this.s,this.l*t,this.opacity)},darker:function(t){return t=null==t?Ve:Math.pow(Ve,t),new on(this.h,this.s,this.l*t,this.opacity)},rgb:function(){var t=this.h%360+360*(this.h<0),e=isNaN(t)||isNaN(this.s)?0:this.s,n=this.l,i=n+(n<.5?n:1-n)*e,r=2*n-i;return new $e(sn(t>=240?t-240:t+120,r,i),sn(t,r,i),sn(t<120?t+240:t-120,r,i),this.opacity)},displayable:function(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl:function(){var t=this.opacity;return(1===(t=isNaN(t)?1:Math.max(0,Math.min(1,t)))?"hsl(":"hsla(")+(this.h||0)+", "+100*(this.s||0)+"%, "+100*(this.l||0)+"%"+(1===t?")":", "+t+")")}}));const gn=function t(e){var n=function(t){return 1==(t=+t)?pn:function(e,n){return n-e?function(t,e,n){return t=Math.pow(t,n),e=Math.pow(e,n)-t,n=1/n,function(i){return Math.pow(t+i*e,n)}}(e,n,t):fn(isNaN(e)?n:e)}}(e);function i(t,e){var i=n((t=Ke(t)).r,(e=Ke(e)).r),r=n(t.g,e.g),a=n(t.b,e.b),o=pn(t.opacity,e.opacity);return function(e){return t.r=i(e),t.g=r(e),t.b=a(e),t.opacity=o(e),t+""}}return i.gamma=t,i}(1);function yn(t){return function(e){var n,i,r=e.length,a=new Array(r),o=new Array(r),s=new Array(r);for(n=0;na&&(r=e.slice(a,r),s[o]?s[o]+=r:s[++o]=r),(n=n[0])===(i=i[0])?s[o]?s[o]+=i:s[++o]=i:(s[++o]=null,c.push({i:o,x:Tn(n,i)})),a=Cn.lastIndex;return a=0&&e._call.call(null,t),e=e._next;--In}function Qn(){zn=(Fn=Bn.now())+Xn,In=Nn=0;try{qn()}finally{In=0,function(){for(var t,e,n=On,i=1/0;n;)n._call?(i>n._time&&(i=n._time),t=n,n=n._next):(e=n._next,n._next=null,n=t?t._next=e:On=e);Rn=t,Kn(i)}(),zn=0}}function Zn(){var t=Bn.now(),e=t-Fn;e>1e3&&(Xn-=e,Fn=t)}function Kn(t){In||(Nn&&(Nn=clearTimeout(Nn)),t-zn>24?(t<1/0&&(Nn=setTimeout(Qn,t-Bn.now()-Xn)),Dn&&(Dn=clearInterval(Dn))):(Dn||(Fn=Bn.now(),Dn=setInterval(Zn,1e3)),In=1,Yn(Qn)))}function $n(t,e,n){var i=new Un;return e=null==e?0:+e,i.restart((function(n){i.stop(),t(n+e)}),e,n),i}Un.prototype=Wn.prototype={constructor:Un,restart:function(t,e,n){if("function"!=typeof t)throw new TypeError("callback is not a function");n=(null==n?Hn():+n)+(null==e?0:+e),this._next||Rn===this||(Rn?Rn._next=this:On=this,Rn=this),this._call=t,this._time=n,Kn()},stop:function(){this._call&&(this._call=null,this._time=1/0,Kn())}};var Jn=ht("start","end","cancel","interrupt"),ti=[];function ei(t,e,n,i,r,a){var o=t.__transition;if(o){if(n in o)return}else t.__transition={};!function(t,e,n){var i,r=t.__transition;function a(c){var u,l,f,h;if(1!==n.state)return s();for(u in r)if((h=r[u]).name===n.name){if(3===h.state)return $n(a);4===h.state?(h.state=6,h.timer.stop(),h.on.call("interrupt",t,t.__data__,h.index,h.group),delete r[u]):+u0)throw new Error("too late; already scheduled");return n}function ii(t,e){var n=ri(t,e);if(n.state>3)throw new Error("too late; already running");return n}function ri(t,e){var n=t.__transition;if(!n||!(n=n[e]))throw new Error("transition not found");return n}function ai(t,e){var n,i,r,a=t.__transition,o=!0;if(a){for(r in e=null==e?null:e+"",a)(n=a[r]).name===e?(i=n.state>2&&n.state<5,n.state=6,n.timer.stop(),n.on.call(i?"interrupt":"cancel",t,t.__data__,n.index,n.group),delete a[r]):o=!1;o&&delete t.__transition}}var oi,si,ci,ui,li=180/Math.PI,fi={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1};function hi(t,e,n,i,r,a){var o,s,c;return(o=Math.sqrt(t*t+e*e))&&(t/=o,e/=o),(c=t*n+e*i)&&(n-=t*c,i-=e*c),(s=Math.sqrt(n*n+i*i))&&(n/=s,i/=s,c/=s),t*i180?e+=360:e-t>180&&(t+=360),a.push({i:n.push(r(n)+"rotate(",null,i)-2,x:Tn(t,e)})):e&&n.push(r(n)+"rotate("+e+i)}(a.rotate,o.rotate,s,c),function(t,e,n,a){t!==e?a.push({i:n.push(r(n)+"skewX(",null,i)-2,x:Tn(t,e)}):e&&n.push(r(n)+"skewX("+e+i)}(a.skewX,o.skewX,s,c),function(t,e,n,i,a,o){if(t!==n||e!==i){var s=a.push(r(a)+"scale(",null,",",null,")");o.push({i:s-4,x:Tn(t,n)},{i:s-2,x:Tn(e,i)})}else 1===n&&1===i||a.push(r(a)+"scale("+n+","+i+")")}(a.scaleX,a.scaleY,o.scaleX,o.scaleY,s,c),a=o=null,function(t){for(var e,n=-1,i=c.length;++n=0&&(t=t.slice(0,e)),!t||"start"===t}))}(e)?ni:ii;return function(){var o=a(this,t),s=o.on;s!==i&&(r=(i=s).copy()).on(e,n),o.on=r}}var Ii=Se.prototype.constructor;function Ni(t){return function(){this.style.removeProperty(t)}}function Di(t,e,n){return function(i){this.style.setProperty(t,e.call(this,i),n)}}function Fi(t,e,n){var i,r;function a(){var a=e.apply(this,arguments);return a!==r&&(i=(r=a)&&Di(t,a,n)),i}return a._value=e,a}function zi(t){return function(e){this.textContent=t.call(this,e)}}function Xi(t){var e,n;function i(){var i=t.apply(this,arguments);return i!==n&&(e=(n=i)&&zi(i)),e}return i._value=t,i}var Bi=0;function Yi(t,e,n,i){this._groups=t,this._parents=e,this._name=n,this._id=i}function Hi(t){return Se().transition(t)}function ji(){return++Bi}var Ui=Se.prototype;function Wi(t){return t*t*t}function qi(t){return--t*t*t+1}function Qi(t){return((t*=2)<=1?t*t*t:(t-=2)*t*t+2)/2}Yi.prototype=Hi.prototype={constructor:Yi,select:function(t){var e=this._name,n=this._id;"function"!=typeof t&&(t=pt(t));for(var i=this._groups,r=i.length,a=new Array(r),o=0;o1&&n.name===e)return new Yi([[t]],$i,e,+i);return null}function tr(t){return function(){return t}}function er(t,e,n){this.target=t,this.type=e,this.selection=n}function nr(){le.stopImmediatePropagation()}function ir(){le.preventDefault(),le.stopImmediatePropagation()}var rr={name:"drag"},ar={name:"space"},or={name:"handle"},sr={name:"center"};function cr(t){return[+t[0],+t[1]]}function ur(t){return[cr(t[0]),cr(t[1])]}function lr(t){return function(e){return Vn(e,le.touches,t)}}var fr={name:"x",handles:["w","e"].map(vr),input:function(t,e){return null==t?null:[[+t[0],e[0][1]],[+t[1],e[1][1]]]},output:function(t){return t&&[t[0][0],t[1][0]]}},hr={name:"y",handles:["n","s"].map(vr),input:function(t,e){return null==t?null:[[e[0][0],+t[0]],[e[1][0],+t[1]]]},output:function(t){return t&&[t[0][1],t[1][1]]}},dr={name:"xy",handles:["n","w","e","s","nw","ne","sw","se"].map(vr),input:function(t){return null==t?null:ur(t)},output:function(t){return t}},pr={overlay:"crosshair",selection:"move",n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},gr={e:"w",w:"e",nw:"ne",ne:"nw",se:"sw",sw:"se"},yr={n:"s",s:"n",nw:"sw",ne:"se",se:"ne",sw:"nw"},_r={overlay:1,selection:1,n:null,e:1,s:null,w:-1,nw:-1,ne:1,se:1,sw:-1},xr={overlay:1,selection:1,n:-1,e:null,s:1,w:null,nw:-1,ne:-1,se:1,sw:1};function vr(t){return{type:t}}function mr(){return!le.ctrlKey&&!le.button}function br(){var t=this.ownerSVGElement||this;return t.hasAttribute("viewBox")?[[(t=t.viewBox.baseVal).x,t.y],[t.x+t.width,t.y+t.height]]:[[0,0],[t.width.baseVal.value,t.height.baseVal.value]]}function wr(){return navigator.maxTouchPoints||"ontouchstart"in this}function Sr(t){for(;!t.__brush;)if(!(t=t.parentNode))return;return t.__brush}function Tr(t){return t[0][0]===t[1][0]||t[0][1]===t[1][1]}function Ar(t){var e=t.__brush;return e?e.dim.output(e.selection):null}function Pr(){return Lr(fr)}function Cr(){return Lr(hr)}function Mr(){return Lr(dr)}function Lr(t){var e,n=br,i=mr,r=wr,a=!0,o=ht("start","brush","end"),s=6;function c(e){var n=e.property("__brush",g).selectAll(".overlay").data([vr("overlay")]);n.enter().append("rect").attr("class","overlay").attr("pointer-events","all").attr("cursor",pr.overlay).merge(n).each((function(){var t=Sr(this).extent;Te(this).attr("x",t[0][0]).attr("y",t[0][1]).attr("width",t[1][0]-t[0][0]).attr("height",t[1][1]-t[0][1])})),e.selectAll(".selection").data([vr("selection")]).enter().append("rect").attr("class","selection").attr("cursor",pr.selection).attr("fill","#777").attr("fill-opacity",.3).attr("stroke","#fff").attr("shape-rendering","crispEdges");var i=e.selectAll(".handle").data(t.handles,(function(t){return t.type}));i.exit().remove(),i.enter().append("rect").attr("class",(function(t){return"handle handle--"+t.type})).attr("cursor",(function(t){return pr[t.type]})),e.each(u).attr("fill","none").attr("pointer-events","all").on("mousedown.brush",h).filter(r).on("touchstart.brush",h).on("touchmove.brush",d).on("touchend.brush touchcancel.brush",p).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function u(){var t=Te(this),e=Sr(this).selection;e?(t.selectAll(".selection").style("display",null).attr("x",e[0][0]).attr("y",e[0][1]).attr("width",e[1][0]-e[0][0]).attr("height",e[1][1]-e[0][1]),t.selectAll(".handle").style("display",null).attr("x",(function(t){return"e"===t.type[t.type.length-1]?e[1][0]-s/2:e[0][0]-s/2})).attr("y",(function(t){return"s"===t.type[0]?e[1][1]-s/2:e[0][1]-s/2})).attr("width",(function(t){return"n"===t.type||"s"===t.type?e[1][0]-e[0][0]+s:s})).attr("height",(function(t){return"e"===t.type||"w"===t.type?e[1][1]-e[0][1]+s:s}))):t.selectAll(".selection,.handle").style("display","none").attr("x",null).attr("y",null).attr("width",null).attr("height",null)}function l(t,e,n){var i=t.__brush.emitter;return!i||n&&i.clean?new f(t,e,n):i}function f(t,e,n){this.that=t,this.args=e,this.state=t.__brush,this.active=0,this.clean=n}function h(){if((!e||le.touches)&&i.apply(this,arguments)){var n,r,o,s,c,f,h,d,p,g,y,_=this,x=le.target.__data__.type,v="selection"===(a&&le.metaKey?x="overlay":x)?rr:a&&le.altKey?sr:or,m=t===hr?null:_r[x],b=t===fr?null:xr[x],w=Sr(_),S=w.extent,T=w.selection,A=S[0][0],P=S[0][1],C=S[1][0],M=S[1][1],L=0,E=0,k=m&&b&&a&&le.shiftKey,V=le.touches?lr(le.changedTouches[0].identifier):Gn,G=V(_),O=G,R=l(_,arguments,!0).beforestart();"overlay"===x?(T&&(p=!0),w.selection=T=[[n=t===hr?A:G[0],o=t===fr?P:G[1]],[c=t===hr?C:n,h=t===fr?M:o]]):(n=T[0][0],o=T[0][1],c=T[1][0],h=T[1][1]),r=n,s=o,f=c,d=h;var I=Te(_).attr("pointer-events","none"),N=I.selectAll(".overlay").attr("cursor",pr[x]);if(le.touches)R.moved=F,R.ended=X;else{var D=Te(le.view).on("mousemove.brush",F,!0).on("mouseup.brush",X,!0);a&&D.on("keydown.brush",B,!0).on("keyup.brush",Y,!0),Ce(le.view)}nr(),ai(_),u.call(_),R.start()}function F(){var t=V(_);!k||g||y||(Math.abs(t[0]-O[0])>Math.abs(t[1]-O[1])?y=!0:g=!0),O=t,p=!0,ir(),z()}function z(){var t;switch(L=O[0]-G[0],E=O[1]-G[1],v){case ar:case rr:m&&(L=Math.max(A-n,Math.min(C-c,L)),r=n+L,f=c+L),b&&(E=Math.max(P-o,Math.min(M-h,E)),s=o+E,d=h+E);break;case or:m<0?(L=Math.max(A-n,Math.min(C-n,L)),r=n+L,f=c):m>0&&(L=Math.max(A-c,Math.min(C-c,L)),r=n,f=c+L),b<0?(E=Math.max(P-o,Math.min(M-o,E)),s=o+E,d=h):b>0&&(E=Math.max(P-h,Math.min(M-h,E)),s=o,d=h+E);break;case sr:m&&(r=Math.max(A,Math.min(C,n-L*m)),f=Math.max(A,Math.min(C,c+L*m))),b&&(s=Math.max(P,Math.min(M,o-E*b)),d=Math.max(P,Math.min(M,h+E*b)))}f0&&(n=r-L),b<0?h=d-E:b>0&&(o=s-E),v=ar,N.attr("cursor",pr.selection),z());break;default:return}ir()}function Y(){switch(le.keyCode){case 16:k&&(g=y=k=!1,z());break;case 18:v===sr&&(m<0?c=f:m>0&&(n=r),b<0?h=d:b>0&&(o=s),v=or,z());break;case 32:v===ar&&(le.altKey?(m&&(c=f-L*m,n=r+L*m),b&&(h=d-E*b,o=s+E*b),v=sr):(m<0?c=f:m>0&&(n=r),b<0?h=d:b>0&&(o=s),v=or),N.attr("cursor",pr[x]),z());break;default:return}ir()}}function d(){l(this,arguments).moved()}function p(){l(this,arguments).ended()}function g(){var e=this.__brush||{selection:null};return e.extent=ur(n.apply(this,arguments)),e.dim=t,e}return c.move=function(e,n){e.selection?e.on("start.brush",(function(){l(this,arguments).beforestart().start()})).on("interrupt.brush end.brush",(function(){l(this,arguments).end()})).tween("brush",(function(){var e=this,i=e.__brush,r=l(e,arguments),a=i.selection,o=t.input("function"==typeof n?n.apply(this,arguments):n,i.extent),s=Ln(a,o);function c(t){i.selection=1===t&&null===o?null:s(t),u.call(e),r.brush()}return null!==a&&null!==o?c:c(1)})):e.each((function(){var e=this,i=arguments,r=e.__brush,a=t.input("function"==typeof n?n.apply(e,i):n,r.extent),o=l(e,i).beforestart();ai(e),r.selection=null===a?null:a,u.call(e),o.start().brush().end()}))},c.clear=function(t){c.move(t,null)},f.prototype={beforestart:function(){return 1==++this.active&&(this.state.emitter=this,this.starting=!0),this},start:function(){return this.starting?(this.starting=!1,this.emit("start")):this.emit("brush"),this},brush:function(){return this.emit("brush"),this},end:function(){return 0==--this.active&&(delete this.state.emitter,this.emit("end")),this},emit:function(e){ye(new er(c,e,t.output(this.state.selection)),o.apply,o,[e,this.that,this.args])}},c.extent=function(t){return arguments.length?(n="function"==typeof t?t:tr(ur(t)),c):n},c.filter=function(t){return arguments.length?(i="function"==typeof t?t:tr(!!t),c):i},c.touchable=function(t){return arguments.length?(r="function"==typeof t?t:tr(!!t),c):r},c.handleSize=function(t){return arguments.length?(s=+t,c):s},c.keyModifiers=function(t){return arguments.length?(a=!!t,c):a},c.on=function(){var t=o.on.apply(o,arguments);return t===o?c:t},c}var Er=Math.cos,kr=Math.sin,Vr=Math.PI,Gr=Vr/2,Or=2*Vr,Rr=Math.max;function Ir(t){return function(e,n){return t(e.source.value+e.target.value,n.source.value+n.target.value)}}function Nr(){var t=0,e=null,n=null,i=null;function r(r){var a,o,s,c,u,l,f=r.length,h=[],d=S(f),p=[],g=[],y=g.groups=new Array(f),_=new Array(f*f);for(a=0,u=-1;++uBr)if(Math.abs(l*s-c*u)>Br&&r){var h=n-a,d=i-o,p=s*s+c*c,g=h*h+d*d,y=Math.sqrt(p),_=Math.sqrt(f),x=r*Math.tan((zr-Math.acos((p+f-g)/(2*y*_)))/2),v=x/_,m=x/y;Math.abs(v-1)>Br&&(this._+="L"+(t+v*u)+","+(e+v*l)),this._+="A"+r+","+r+",0,0,"+ +(l*h>u*d)+","+(this._x1=t+m*s)+","+(this._y1=e+m*c)}else this._+="L"+(this._x1=t)+","+(this._y1=e)},arc:function(t,e,n,i,r,a){t=+t,e=+e,a=!!a;var o=(n=+n)*Math.cos(i),s=n*Math.sin(i),c=t+o,u=e+s,l=1^a,f=a?i-r:r-i;if(n<0)throw new Error("negative radius: "+n);null===this._x1?this._+="M"+c+","+u:(Math.abs(this._x1-c)>Br||Math.abs(this._y1-u)>Br)&&(this._+="L"+c+","+u),n&&(f<0&&(f=f%Xr+Xr),f>Yr?this._+="A"+n+","+n+",0,1,"+l+","+(t-o)+","+(e-s)+"A"+n+","+n+",0,1,"+l+","+(this._x1=c)+","+(this._y1=u):f>Br&&(this._+="A"+n+","+n+",0,"+ +(f>=zr)+","+l+","+(this._x1=t+n*Math.cos(r))+","+(this._y1=e+n*Math.sin(r))))},rect:function(t,e,n,i){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+e)+"h"+ +n+"v"+ +i+"h"+-n+"Z"},toString:function(){return this._}};const Ur=jr;function Wr(t){return t.source}function qr(t){return t.target}function Qr(t){return t.radius}function Zr(t){return t.startAngle}function Kr(t){return t.endAngle}function $r(){var t=Wr,e=qr,n=Qr,i=Zr,r=Kr,a=null;function o(){var o,s=Dr.call(arguments),c=t.apply(this,s),u=e.apply(this,s),l=+n.apply(this,(s[0]=c,s)),f=i.apply(this,s)-Gr,h=r.apply(this,s)-Gr,d=l*Er(f),p=l*kr(f),g=+n.apply(this,(s[0]=u,s)),y=i.apply(this,s)-Gr,_=r.apply(this,s)-Gr;if(a||(a=o=Ur()),a.moveTo(d,p),a.arc(0,0,l,f,h),f===y&&h===_||(a.quadraticCurveTo(0,0,g*Er(y),g*kr(y)),a.arc(0,0,g,y,_)),a.quadraticCurveTo(0,0,d,p),a.closePath(),o)return a=null,o+""||null}return o.radius=function(t){return arguments.length?(n="function"==typeof t?t:Fr(+t),o):n},o.startAngle=function(t){return arguments.length?(i="function"==typeof t?t:Fr(+t),o):i},o.endAngle=function(t){return arguments.length?(r="function"==typeof t?t:Fr(+t),o):r},o.source=function(e){return arguments.length?(t=e,o):t},o.target=function(t){return arguments.length?(e=t,o):e},o.context=function(t){return arguments.length?(a=null==t?null:t,o):a},o}var Jr="$";function ta(){}function ea(t,e){var n=new ta;if(t instanceof ta)t.each((function(t,e){n.set(e,t)}));else if(Array.isArray(t)){var i,r=-1,a=t.length;if(null==e)for(;++r=i.length)return null!=t&&n.sort(t),null!=e?e(n):n;for(var c,u,l,f=-1,h=n.length,d=i[r++],p=na(),g=o();++fi.length)return t;var a,s=r[n-1];return null!=e&&n>=i.length?a=t.entries():(a=[],t.each((function(t,e){a.push({key:e,values:o(t,n)})}))),null!=s?a.sort((function(t,e){return s(t.key,e.key)})):a}return n={object:function(t){return a(t,0,ra,aa)},map:function(t){return a(t,0,oa,sa)},entries:function(t){return o(a(t,0,oa,sa),0)},key:function(t){return i.push(t),n},sortKeys:function(t){return r[i.length-1]=t,n},sortValues:function(e){return t=e,n},rollup:function(t){return e=t,n}}}function ra(){return{}}function aa(t,e,n){t[e]=n}function oa(){return na()}function sa(t,e,n){t.set(e,n)}function ca(){}var ua=na.prototype;function la(t,e){var n=new ca;if(t instanceof ca)t.each((function(t){n.add(t)}));else if(t){var i=-1,r=t.length;if(null==e)for(;++i.008856451679035631?Math.pow(t,1/3):t/ba+va}function Ca(t){return t>ma?t*t*t:ba*(t-va)}function Ma(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function La(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function Ea(t){if(t instanceof Ga)return new Ga(t.h,t.c,t.l,t.opacity);if(t instanceof Aa||(t=wa(t)),0===t.a&&0===t.b)return new Ga(NaN,0i!=d>i&&n<(h-u)*(i-l)/(d-l)+u&&(r=-r)}return r}function Ka(t,e,n){var i,r,a,o;return function(t,e,n){return(e[0]-t[0])*(n[1]-t[1])==(n[0]-t[0])*(e[1]-t[1])}(t,e,n)&&(r=t[i=+(t[0]===e[0])],a=n[i],o=e[i],r<=a&&a<=o||o<=a&&a<=r)}function $a(){}var Ja=[[],[[[1,1.5],[.5,1]]],[[[1.5,1],[1,1.5]]],[[[1.5,1],[.5,1]]],[[[1,.5],[1.5,1]]],[[[1,1.5],[.5,1]],[[1,.5],[1.5,1]]],[[[1,.5],[1,1.5]]],[[[1,.5],[.5,1]]],[[[.5,1],[1,.5]]],[[[1,1.5],[1,.5]]],[[[.5,1],[1,.5]],[[1.5,1],[1,1.5]]],[[[1.5,1],[1,.5]]],[[[.5,1],[1.5,1]]],[[[1,1.5],[1.5,1]]],[[[.5,1],[1,1.5]]],[]];function to(){var t=1,e=1,n=E,i=s;function r(t){var e=n(t);if(Array.isArray(e))e=e.slice().sort(Wa);else{var i=_(t),r=i[0],o=i[1];e=L(r,o,e),e=S(Math.floor(r/e)*e,Math.floor(o/e)*e,e)}return e.map((function(e){return a(t,e)}))}function a(n,r){var a=[],s=[];return function(n,i,r){var a,s,c,u,l,f,h=new Array,d=new Array;for(a=s=-1,u=n[0]>=i,Ja[u<<1].forEach(p);++a=i,Ja[c|u<<1].forEach(p);for(Ja[u<<0].forEach(p);++s=i,l=n[s*t]>=i,Ja[u<<1|l<<2].forEach(p);++a=i,f=l,l=n[s*t+a+1]>=i,Ja[c|u<<1|l<<2|f<<3].forEach(p);Ja[u|l<<3].forEach(p)}for(a=-1,l=n[s*t]>=i,Ja[l<<2].forEach(p);++a=i,Ja[l<<2|f<<3].forEach(p);function p(t){var e,n,i=[t[0][0]+a,t[0][1]+s],c=[t[1][0]+a,t[1][1]+s],u=o(i),l=o(c);(e=d[u])?(n=h[l])?(delete d[e.end],delete h[n.start],e===n?(e.ring.push(c),r(e.ring)):h[e.start]=d[n.end]={start:e.start,end:n.end,ring:e.ring.concat(n.ring)}):(delete d[e.end],e.ring.push(c),d[e.end=l]=e):(e=h[l])?(n=d[u])?(delete h[e.start],delete d[n.end],e===n?(e.ring.push(c),r(e.ring)):h[n.start]=d[e.end]={start:n.start,end:e.end,ring:n.ring.concat(e.ring)}):(delete h[e.start],e.ring.unshift(i),h[e.start=u]=e):h[u]=d[l]={start:u,end:l,ring:[i,c]}}Ja[l<<3].forEach(p)}(n,r,(function(t){i(t,n,r),function(t){for(var e=0,n=t.length,i=t[n-1][1]*t[0][0]-t[n-1][0]*t[0][1];++e0?a.push([t]):s.push(t)})),s.forEach((function(t){for(var e,n=0,i=a.length;n0&&o0&&s0&&a>0))throw new Error("invalid size");return t=i,e=a,r},r.thresholds=function(t){return arguments.length?(n="function"==typeof t?t:Array.isArray(t)?qa(Ua.call(t)):qa(t),r):n},r.smooth=function(t){return arguments.length?(i=t?s:$a,r):i===s},r}function eo(t,e,n){for(var i=t.width,r=t.height,a=1+(n<<1),o=0;o=n&&(s>=a&&(c-=t.data[s-a+o*i]),e.data[s-n+o*i]=c/Math.min(s+1,i-1+a-s,a))}function no(t,e,n){for(var i=t.width,r=t.height,a=1+(n<<1),o=0;o=n&&(s>=a&&(c-=t.data[o+(s-a)*i]),e.data[o+(s-n)*i]=c/Math.min(s+1,r-1+a-s,a))}function io(t){return t[0]}function ro(t){return t[1]}function ao(){return 1}function oo(){var t=io,e=ro,n=ao,i=960,r=500,a=20,o=2,s=3*a,c=i+2*s>>o,u=r+2*s>>o,l=qa(20);function f(i){var r=new Float32Array(c*u),f=new Float32Array(c*u);i.forEach((function(i,a,l){var f=+t(i,a,l)+s>>o,h=+e(i,a,l)+s>>o,d=+n(i,a,l);f>=0&&f=0&&h>o),no({width:c,height:u,data:f},{width:c,height:u,data:r},a>>o),eo({width:c,height:u,data:r},{width:c,height:u,data:f},a>>o),no({width:c,height:u,data:f},{width:c,height:u,data:r},a>>o),eo({width:c,height:u,data:r},{width:c,height:u,data:f},a>>o),no({width:c,height:u,data:f},{width:c,height:u,data:r},a>>o);var d=l(r);if(!Array.isArray(d)){var p=R(r);d=L(0,p,d),(d=S(0,Math.floor(p/d)*d,d)).shift()}return to().thresholds(d).size([c,u])(r).map(h)}function h(t){return t.value*=Math.pow(2,-2*o),t.coordinates.forEach(d),t}function d(t){t.forEach(p)}function p(t){t.forEach(g)}function g(t){t[0]=t[0]*Math.pow(2,o)-s,t[1]=t[1]*Math.pow(2,o)-s}function y(){return c=i+2*(s=3*a)>>o,u=r+2*s>>o,f}return f.x=function(e){return arguments.length?(t="function"==typeof e?e:qa(+e),f):t},f.y=function(t){return arguments.length?(e="function"==typeof t?t:qa(+t),f):e},f.weight=function(t){return arguments.length?(n="function"==typeof t?t:qa(+t),f):n},f.size=function(t){if(!arguments.length)return[i,r];var e=Math.ceil(t[0]),n=Math.ceil(t[1]);if(!(e>=0||e>=0))throw new Error("invalid size");return i=e,r=n,y()},f.cellSize=function(t){if(!arguments.length)return 1<=1))throw new Error("invalid cell size");return o=Math.floor(Math.log(t)/Math.LN2),y()},f.thresholds=function(t){return arguments.length?(l="function"==typeof t?t:Array.isArray(t)?qa(Ua.call(t)):qa(t),f):l},f.bandwidth=function(t){if(!arguments.length)return Math.sqrt(a*(a+1));if(!((t=+t)>=0))throw new Error("invalid bandwidth");return a=Math.round((Math.sqrt(4*t*t+1)-1)/2),y()},f}function so(t){return function(){return t}}function co(t,e,n,i,r,a,o,s,c,u){this.target=t,this.type=e,this.subject=n,this.identifier=i,this.active=r,this.x=a,this.y=o,this.dx=s,this.dy=c,this._=u}function uo(){return!le.ctrlKey&&!le.button}function lo(){return this.parentNode}function fo(t){return null==t?{x:le.x,y:le.y}:t}function ho(){return navigator.maxTouchPoints||"ontouchstart"in this}function po(){var t,e,n,i,r=uo,a=lo,o=fo,s=ho,c={},u=ht("start","drag","end"),l=0,f=0;function h(t){t.on("mousedown.drag",d).filter(s).on("touchstart.drag",y).on("touchmove.drag",_).on("touchend.drag touchcancel.drag",x).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function d(){if(!i&&r.apply(this,arguments)){var o=v("mouse",a.apply(this,arguments),Gn,this,arguments);o&&(Te(le.view).on("mousemove.drag",p,!0).on("mouseup.drag",g,!0),Ce(le.view),Ae(),n=!1,t=le.clientX,e=le.clientY,o("start"))}}function p(){if(Pe(),!n){var i=le.clientX-t,r=le.clientY-e;n=i*i+r*r>f}c.mouse("drag")}function g(){Te(le.view).on("mousemove.drag mouseup.drag",null),Me(le.view,n),Pe(),c.mouse("end")}function y(){if(r.apply(this,arguments)){var t,e,n=le.changedTouches,i=a.apply(this,arguments),o=n.length;for(t=0;t=a?c=!0:10===(i=t.charCodeAt(o++))?u=!0:13===i&&(u=!0,10===t.charCodeAt(o)&&++o),t.slice(r+1,e-1).replace(/""/g,'"')}for(;o9999?"+"+vo(t,6):vo(t,4)}(t.getUTCFullYear())+"-"+vo(t.getUTCMonth()+1,2)+"-"+vo(t.getUTCDate(),2)+(r?"T"+vo(e,2)+":"+vo(n,2)+":"+vo(i,2)+"."+vo(r,3)+"Z":i?"T"+vo(e,2)+":"+vo(n,2)+":"+vo(i,2)+"Z":n||e?"T"+vo(e,2)+":"+vo(n,2)+"Z":"")}(t):e.test(t+="")?'"'+t.replace(/"/g,'""')+'"':t}return{parse:function(t,e){var n,r,a=i(t,(function(t,i){if(n)return n(t,i-1);r=t,n=e?function(t,e){var n=_o(t);return function(i,r){return e(n(i),r,t)}}(t,e):_o(t)}));return a.columns=r||[],a},parseRows:i,format:function(e,n){return null==n&&(n=xo(e)),[n.map(o).join(t)].concat(r(e,n)).join("\n")},formatBody:function(t,e){return null==e&&(e=xo(t)),r(t,e).join("\n")},formatRows:function(t){return t.map(a).join("\n")},formatRow:a,formatValue:o}}var bo=mo(","),wo=bo.parse,So=bo.parseRows,To=bo.format,Ao=bo.formatBody,Po=bo.formatRows,Co=bo.formatRow,Mo=bo.formatValue,Lo=mo("\t"),Eo=Lo.parse,ko=Lo.parseRows,Vo=Lo.format,Go=Lo.formatBody,Oo=Lo.formatRows,Ro=Lo.formatRow,Io=Lo.formatValue;function No(t){for(var e in t){var n,i,r=t[e].trim();if(r)if("true"===r)r=!0;else if("false"===r)r=!1;else if("NaN"===r)r=NaN;else if(isNaN(n=+r)){if(!(i=r.match(/^([-+]\d{2})?\d{4}(-\d{2}(-\d{2})?)?(T\d{2}:\d{2}(:\d{2}(\.\d{3})?)?(Z|[-+]\d{2}:\d{2})?)?$/)))continue;Do&&i[4]&&!i[7]&&(r=r.replace(/-/g,"/").replace(/T/," ")),r=new Date(r)}else r=n;else r=null;t[e]=r}return t}var Do=new Date("2019-01-01T00:00").getHours()||new Date("2019-07-01T00:00").getHours();function Fo(t){return+t}function zo(t){return t*t}function Xo(t){return t*(2-t)}function Bo(t){return((t*=2)<=1?t*t:--t*(2-t)+1)/2}var Yo=function t(e){function n(t){return Math.pow(t,e)}return e=+e,n.exponent=t,n}(3),Ho=function t(e){function n(t){return 1-Math.pow(1-t,e)}return e=+e,n.exponent=t,n}(3),jo=function t(e){function n(t){return((t*=2)<=1?Math.pow(t,e):2-Math.pow(2-t,e))/2}return e=+e,n.exponent=t,n}(3),Uo=Math.PI,Wo=Uo/2;function qo(t){return 1==+t?1:1-Math.cos(t*Wo)}function Qo(t){return Math.sin(t*Wo)}function Zo(t){return(1-Math.cos(Uo*t))/2}function Ko(t){return 1.0009775171065494*(Math.pow(2,-10*t)-.0009765625)}function $o(t){return Ko(1-+t)}function Jo(t){return 1-Ko(t)}function ts(t){return((t*=2)<=1?Ko(1-t):2-Ko(t-1))/2}function es(t){return 1-Math.sqrt(1-t*t)}function ns(t){return Math.sqrt(1- --t*t)}function is(t){return((t*=2)<=1?1-Math.sqrt(1-t*t):Math.sqrt(1-(t-=2)*t)+1)/2}var rs=7.5625;function as(t){return 1-os(1-t)}function os(t){return(t=+t)<.36363636363636365?rs*t*t:t<.7272727272727273?rs*(t-=.5454545454545454)*t+.75:t<.9090909090909091?rs*(t-=.8181818181818182)*t+.9375:rs*(t-=.9545454545454546)*t+.984375}function ss(t){return((t*=2)<=1?1-os(1-t):os(t-1)+1)/2}var cs=1.70158,us=function t(e){function n(t){return(t=+t)*t*(e*(t-1)+t)}return e=+e,n.overshoot=t,n}(cs),ls=function t(e){function n(t){return--t*t*((t+1)*e+t)+1}return e=+e,n.overshoot=t,n}(cs),fs=function t(e){function n(t){return((t*=2)<1?t*t*((e+1)*t-e):(t-=2)*t*((e+1)*t+e)+2)/2}return e=+e,n.overshoot=t,n}(cs),hs=2*Math.PI,ds=function t(e,n){var i=Math.asin(1/(e=Math.max(1,e)))*(n/=hs);function r(t){return e*Ko(- --t)*Math.sin((i-t)/n)}return r.amplitude=function(e){return t(e,n*hs)},r.period=function(n){return t(e,n)},r}(1,.3),ps=function t(e,n){var i=Math.asin(1/(e=Math.max(1,e)))*(n/=hs);function r(t){return 1-e*Ko(t=+t)*Math.sin((t+i)/n)}return r.amplitude=function(e){return t(e,n*hs)},r.period=function(n){return t(e,n)},r}(1,.3),gs=function t(e,n){var i=Math.asin(1/(e=Math.max(1,e)))*(n/=hs);function r(t){return((t=2*t-1)<0?e*Ko(-t)*Math.sin((i-t)/n):2-e*Ko(t)*Math.sin((i+t)/n))/2}return r.amplitude=function(e){return t(e,n*hs)},r.period=function(n){return t(e,n)},r}(1,.3);function ys(t){if(!t.ok)throw new Error(t.status+" "+t.statusText);return t.blob()}function _s(t,e){return fetch(t,e).then(ys)}function xs(t){if(!t.ok)throw new Error(t.status+" "+t.statusText);return t.arrayBuffer()}function vs(t,e){return fetch(t,e).then(xs)}function ms(t){if(!t.ok)throw new Error(t.status+" "+t.statusText);return t.text()}function bs(t,e){return fetch(t,e).then(ms)}function ws(t){return function(e,n,i){return 2===arguments.length&&"function"==typeof n&&(i=n,n=void 0),bs(e,n).then((function(e){return t(e,i)}))}}function Ss(t,e,n,i){3===arguments.length&&"function"==typeof n&&(i=n,n=void 0);var r=mo(t);return bs(e,n).then((function(t){return r.parse(t,i)}))}var Ts=ws(wo),As=ws(Eo);function Ps(t,e){return new Promise((function(n,i){var r=new Image;for(var a in e)r[a]=e[a];r.onerror=i,r.onload=function(){n(r)},r.src=t}))}function Cs(t){if(!t.ok)throw new Error(t.status+" "+t.statusText);if(204!==t.status&&205!==t.status)return t.json()}function Ms(t,e){return fetch(t,e).then(Cs)}function Ls(t){return function(e,n){return bs(e,n).then((function(e){return(new DOMParser).parseFromString(e,t)}))}}const Es=Ls("application/xml");var ks=Ls("text/html"),Vs=Ls("image/svg+xml");function Gs(t,e){var n;function i(){var i,r,a=n.length,o=0,s=0;for(i=0;i=(a=(g+_)/2))?g=a:_=a,(l=n>=(o=(y+x)/2))?y=o:x=o,r=d,!(d=d[f=l<<1|u]))return r[f]=p,t;if(s=+t._x.call(null,d.data),c=+t._y.call(null,d.data),e===s&&n===c)return p.next=d,r?r[f]=p:t._root=p,t;do{r=r?r[f]=new Array(4):t._root=new Array(4),(u=e>=(a=(g+_)/2))?g=a:_=a,(l=n>=(o=(y+x)/2))?y=o:x=o}while((f=l<<1|u)==(h=(c>=o)<<1|s>=a));return r[h]=d,r[f]=p,t}function Ns(t,e,n,i,r){this.node=t,this.x0=e,this.y0=n,this.x1=i,this.y1=r}function Ds(t){return t[0]}function Fs(t){return t[1]}function zs(t,e,n){var i=new Xs(null==e?Ds:e,null==n?Fs:n,NaN,NaN,NaN,NaN);return null==t?i:i.addAll(t)}function Xs(t,e,n,i,r,a){this._x=t,this._y=e,this._x0=n,this._y0=i,this._x1=r,this._y1=a,this._root=void 0}function Bs(t){for(var e={data:t.data},n=e;t=t.next;)n=n.next={data:t.data};return e}var Ys=zs.prototype=Xs.prototype;function Hs(t){return t.x+t.vx}function js(t){return t.y+t.vy}function Us(t){var e,n,i=1,r=1;function a(){for(var t,a,s,c,u,l,f,h=e.length,d=0;dc+d||ru+d||as.index){var p=c-o.x-o.vx,g=u-o.y-o.vy,y=p*p+g*g;yt.r&&(t.r=t[e].r)}function s(){if(e){var i,r,a=e.length;for(n=new Array(a),i=0;il&&(l=i),rf&&(f=r));if(c>l||u>f)return this;for(this.cover(c,u).cover(l,f),n=0;nt||t>=r||i>e||e>=a;)switch(s=(eh||(a=c.y0)>d||(o=c.x1)=_)<<1|t>=y)&&(c=p[p.length-1],p[p.length-1]=p[p.length-1-u],p[p.length-1-u]=c)}else{var x=t-+this._x.call(null,g.data),v=e-+this._y.call(null,g.data),m=x*x+v*v;if(m=(s=(p+y)/2))?p=s:y=s,(l=o>=(c=(g+_)/2))?g=c:_=c,e=d,!(d=d[f=l<<1|u]))return this;if(!d.length)break;(e[f+1&3]||e[f+2&3]||e[f+3&3])&&(n=e,h=f)}for(;d.data!==t;)if(i=d,!(d=d.next))return this;return(r=d.next)&&delete d.next,i?(r?i.next=r:delete i.next,this):e?(r?e[f]=r:delete e[f],(d=e[0]||e[1]||e[2]||e[3])&&d===(e[3]||e[2]||e[1]||e[0])&&!d.length&&(n?n[h]=d:this._root=d),this):(this._root=r,this)},Ys.removeAll=function(t){for(var e=0,n=t.length;e1?(null==n?s.remove(t):s.set(t,d(n)),e):s.get(t)},find:function(e,n,i){var r,a,o,s,c,u=0,l=t.length;for(null==i?i=1/0:i*=i,u=0;u1?(u.on(t,n),e):u.on(t)}}}function tc(){var t,e,n,i,r=Os(-30),a=1,o=1/0,s=.81;function c(i){var r,a=t.length,o=zs(t,Zs,Ks).visitAfter(l);for(n=i,r=0;r=o)){(t.data!==e||t.next)&&(0===l&&(d+=(l=Rs())*l),0===f&&(d+=(f=Rs())*f),d1?i[0]+i.slice(2):i,+t.slice(n+1)]}function ac(t){return(t=rc(Math.abs(t)))?t[1]:NaN}var oc,sc=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function cc(t){if(!(e=sc.exec(t)))throw new Error("invalid format: "+t);var e;return new uc({fill:e[1],align:e[2],sign:e[3],symbol:e[4],zero:e[5],width:e[6],comma:e[7],precision:e[8]&&e[8].slice(1),trim:e[9],type:e[10]})}function uc(t){this.fill=void 0===t.fill?" ":t.fill+"",this.align=void 0===t.align?">":t.align+"",this.sign=void 0===t.sign?"-":t.sign+"",this.symbol=void 0===t.symbol?"":t.symbol+"",this.zero=!!t.zero,this.width=void 0===t.width?void 0:+t.width,this.comma=!!t.comma,this.precision=void 0===t.precision?void 0:+t.precision,this.trim=!!t.trim,this.type=void 0===t.type?"":t.type+""}function lc(t,e){var n=rc(t,e);if(!n)return t+"";var i=n[0],r=n[1];return r<0?"0."+new Array(-r).join("0")+i:i.length>r+1?i.slice(0,r+1)+"."+i.slice(r+1):i+new Array(r-i.length+2).join("0")}cc.prototype=uc.prototype,uc.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(void 0===this.width?"":Math.max(1,0|this.width))+(this.comma?",":"")+(void 0===this.precision?"":"."+Math.max(0,0|this.precision))+(this.trim?"~":"")+this.type};const fc={"%":function(t,e){return(100*t).toFixed(e)},b:function(t){return Math.round(t).toString(2)},c:function(t){return t+""},d:function(t){return Math.abs(t=Math.round(t))>=1e21?t.toLocaleString("en").replace(/,/g,""):t.toString(10)},e:function(t,e){return t.toExponential(e)},f:function(t,e){return t.toFixed(e)},g:function(t,e){return t.toPrecision(e)},o:function(t){return Math.round(t).toString(8)},p:function(t,e){return lc(100*t,e)},r:lc,s:function(t,e){var n=rc(t,e);if(!n)return t+"";var i=n[0],r=n[1],a=r-(oc=3*Math.max(-8,Math.min(8,Math.floor(r/3))))+1,o=i.length;return a===o?i:a>o?i+new Array(a-o+1).join("0"):a>0?i.slice(0,a)+"."+i.slice(a):"0."+new Array(1-a).join("0")+rc(t,Math.max(0,e+a-1))[0]},X:function(t){return Math.round(t).toString(16).toUpperCase()},x:function(t){return Math.round(t).toString(16)}};function hc(t){return t}var dc,pc,gc,yc=Array.prototype.map,_c=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];function xc(t){var e,n,i=void 0===t.grouping||void 0===t.thousands?hc:(e=yc.call(t.grouping,Number),n=t.thousands+"",function(t,i){for(var r=t.length,a=[],o=0,s=e[0],c=0;r>0&&s>0&&(c+s+1>i&&(s=Math.max(1,i-c)),a.push(t.substring(r-=s,r+s)),!((c+=s+1)>i));)s=e[o=(o+1)%e.length];return a.reverse().join(n)}),r=void 0===t.currency?"":t.currency[0]+"",a=void 0===t.currency?"":t.currency[1]+"",o=void 0===t.decimal?".":t.decimal+"",s=void 0===t.numerals?hc:function(t){return function(e){return e.replace(/[0-9]/g,(function(e){return t[+e]}))}}(yc.call(t.numerals,String)),c=void 0===t.percent?"%":t.percent+"",u=void 0===t.minus?"-":t.minus+"",l=void 0===t.nan?"NaN":t.nan+"";function f(t){var e=(t=cc(t)).fill,n=t.align,f=t.sign,h=t.symbol,d=t.zero,p=t.width,g=t.comma,y=t.precision,_=t.trim,x=t.type;"n"===x?(g=!0,x="g"):fc[x]||(void 0===y&&(y=12),_=!0,x="g"),(d||"0"===e&&"="===n)&&(d=!0,e="0",n="=");var v="$"===h?r:"#"===h&&/[boxX]/.test(x)?"0"+x.toLowerCase():"",m="$"===h?a:/[%p]/.test(x)?c:"",b=fc[x],w=/[defgprs%]/.test(x);function S(t){var r,a,c,h=v,S=m;if("c"===x)S=b(t)+S,t="";else{var T=(t=+t)<0||1/t<0;if(t=isNaN(t)?l:b(Math.abs(t),y),_&&(t=function(t){t:for(var e,n=t.length,i=1,r=-1;i0&&(r=0)}return r>0?t.slice(0,r)+t.slice(e+1):t}(t)),T&&0==+t&&"+"!==f&&(T=!1),h=(T?"("===f?f:u:"-"===f||"("===f?"":f)+h,S=("s"===x?_c[8+oc/3]:"")+S+(T&&"("===f?")":""),w)for(r=-1,a=t.length;++r(c=t.charCodeAt(r))||c>57){S=(46===c?o+t.slice(r+1):t.slice(r))+S,t=t.slice(0,r);break}}g&&!d&&(t=i(t,1/0));var A=h.length+t.length+S.length,P=A>1)+h+t+S+P.slice(A);break;default:t=P+h+t+S}return s(t)}return y=void 0===y?6:/[gprs]/.test(x)?Math.max(1,Math.min(21,y)):Math.max(0,Math.min(20,y)),S.toString=function(){return t+""},S}return{format:f,formatPrefix:function(t,e){var n=f(((t=cc(t)).type="f",t)),i=3*Math.max(-8,Math.min(8,Math.floor(ac(e)/3))),r=Math.pow(10,-i),a=_c[8+i/3];return function(t){return n(r*t)+a}}}}function vc(t){return dc=xc(t),pc=dc.format,gc=dc.formatPrefix,dc}function mc(t){return Math.max(0,-ac(Math.abs(t)))}function bc(t,e){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(ac(e)/3)))-ac(Math.abs(t)))}function wc(t,e){return t=Math.abs(t),e=Math.abs(e)-t,Math.max(0,ac(e)-ac(t))+1}function Sc(){return new Tc}function Tc(){this.reset()}vc({decimal:".",thousands:",",grouping:[3],currency:["$",""],minus:"-"}),Tc.prototype={constructor:Tc,reset:function(){this.s=this.t=0},add:function(t){Pc(Ac,t,this.t),Pc(this,Ac.s,this.s),this.s?this.t+=Ac.t:this.s=Ac.t},valueOf:function(){return this.s}};var Ac=new Tc;function Pc(t,e,n){var i=t.s=e+n,r=i-e,a=i-r;t.t=e-a+(n-r)}var Cc=1e-6,Mc=1e-12,Lc=Math.PI,Ec=Lc/2,kc=Lc/4,Vc=2*Lc,Gc=180/Lc,Oc=Lc/180,Rc=Math.abs,Ic=Math.atan,Nc=Math.atan2,Dc=Math.cos,Fc=Math.ceil,zc=Math.exp,Xc=(Math.floor,Math.log),Bc=Math.pow,Yc=Math.sin,Hc=Math.sign||function(t){return t>0?1:t<0?-1:0},jc=Math.sqrt,Uc=Math.tan;function Wc(t){return t>1?0:t<-1?Lc:Math.acos(t)}function qc(t){return t>1?Ec:t<-1?-Ec:Math.asin(t)}function Qc(t){return(t=Yc(t/2))*t}function Zc(){}function Kc(t,e){t&&Jc.hasOwnProperty(t.type)&&Jc[t.type](t,e)}var $c={Feature:function(t,e){Kc(t.geometry,e)},FeatureCollection:function(t,e){for(var n=t.features,i=-1,r=n.length;++i=0?1:-1,r=i*n,a=Dc(e=(e*=Oc)/2+kc),o=Yc(e),s=su*o,c=ou*a+s*Dc(r),u=s*i*Yc(r);cu.add(Nc(u,c)),au=t,ou=a,su=o}function gu(t){return uu.reset(),nu(t,lu),2*uu}function yu(t){return[Nc(t[1],t[0]),qc(t[2])]}function _u(t){var e=t[0],n=t[1],i=Dc(n);return[i*Dc(e),i*Yc(e),Yc(n)]}function xu(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}function vu(t,e){return[t[1]*e[2]-t[2]*e[1],t[2]*e[0]-t[0]*e[2],t[0]*e[1]-t[1]*e[0]]}function mu(t,e){t[0]+=e[0],t[1]+=e[1],t[2]+=e[2]}function bu(t,e){return[t[0]*e,t[1]*e,t[2]*e]}function wu(t){var e=jc(t[0]*t[0]+t[1]*t[1]+t[2]*t[2]);t[0]/=e,t[1]/=e,t[2]/=e}var Su,Tu,Au,Pu,Cu,Mu,Lu,Eu,ku,Vu,Gu,Ou,Ru,Iu,Nu,Du,Fu,zu,Xu,Bu,Yu,Hu,ju,Uu,Wu,qu,Qu=Sc(),Zu={point:Ku,lineStart:Ju,lineEnd:tl,polygonStart:function(){Zu.point=el,Zu.lineStart=nl,Zu.lineEnd=il,Qu.reset(),lu.polygonStart()},polygonEnd:function(){lu.polygonEnd(),Zu.point=Ku,Zu.lineStart=Ju,Zu.lineEnd=tl,cu<0?(Su=-(Au=180),Tu=-(Pu=90)):Qu>Cc?Pu=90:Qu<-1e-6&&(Tu=-90),Vu[0]=Su,Vu[1]=Au},sphere:function(){Su=-(Au=180),Tu=-(Pu=90)}};function Ku(t,e){ku.push(Vu=[Su=t,Au=t]),ePu&&(Pu=e)}function $u(t,e){var n=_u([t*Oc,e*Oc]);if(Eu){var i=vu(Eu,n),r=vu([i[1],-i[0],0],i);wu(r),r=yu(r);var a,o=t-Cu,s=o>0?1:-1,c=r[0]*Gc*s,u=Rc(o)>180;u^(s*CuPu&&(Pu=a):u^(s*Cu<(c=(c+360)%360-180)&&cPu&&(Pu=e)),u?trl(Su,Au)&&(Au=t):rl(t,Au)>rl(Su,Au)&&(Su=t):Au>=Su?(tAu&&(Au=t)):t>Cu?rl(Su,t)>rl(Su,Au)&&(Au=t):rl(t,Au)>rl(Su,Au)&&(Su=t)}else ku.push(Vu=[Su=t,Au=t]);ePu&&(Pu=e),Eu=n,Cu=t}function Ju(){Zu.point=$u}function tl(){Vu[0]=Su,Vu[1]=Au,Zu.point=Ku,Eu=null}function el(t,e){if(Eu){var n=t-Cu;Qu.add(Rc(n)>180?n+(n>0?360:-360):n)}else Mu=t,Lu=e;lu.point(t,e),$u(t,e)}function nl(){lu.lineStart()}function il(){el(Mu,Lu),lu.lineEnd(),Rc(Qu)>Cc&&(Su=-(Au=180)),Vu[0]=Su,Vu[1]=Au,Eu=null}function rl(t,e){return(e-=t)<0?e+360:e}function al(t,e){return t[0]-e[0]}function ol(t,e){return t[0]<=t[1]?t[0]<=e&&e<=t[1]:erl(i[0],i[1])&&(i[1]=r[1]),rl(r[0],i[1])>rl(i[0],i[1])&&(i[0]=r[0])):a.push(i=r);for(o=-1/0,e=0,i=a[n=a.length-1];e<=n;i=r,++e)r=a[e],(s=rl(i[1],r[0]))>o&&(o=s,Su=r[0],Au=i[1])}return ku=Vu=null,Su===1/0||Tu===1/0?[[NaN,NaN],[NaN,NaN]]:[[Su,Tu],[Au,Pu]]}var cl={sphere:Zc,point:ul,lineStart:fl,lineEnd:pl,polygonStart:function(){cl.lineStart=gl,cl.lineEnd=yl},polygonEnd:function(){cl.lineStart=fl,cl.lineEnd=pl}};function ul(t,e){t*=Oc;var n=Dc(e*=Oc);ll(n*Dc(t),n*Yc(t),Yc(e))}function ll(t,e,n){++Gu,Ru+=(t-Ru)/Gu,Iu+=(e-Iu)/Gu,Nu+=(n-Nu)/Gu}function fl(){cl.point=hl}function hl(t,e){t*=Oc;var n=Dc(e*=Oc);Uu=n*Dc(t),Wu=n*Yc(t),qu=Yc(e),cl.point=dl,ll(Uu,Wu,qu)}function dl(t,e){t*=Oc;var n=Dc(e*=Oc),i=n*Dc(t),r=n*Yc(t),a=Yc(e),o=Nc(jc((o=Wu*a-qu*r)*o+(o=qu*i-Uu*a)*o+(o=Uu*r-Wu*i)*o),Uu*i+Wu*r+qu*a);Ou+=o,Du+=o*(Uu+(Uu=i)),Fu+=o*(Wu+(Wu=r)),zu+=o*(qu+(qu=a)),ll(Uu,Wu,qu)}function pl(){cl.point=ul}function gl(){cl.point=_l}function yl(){xl(Hu,ju),cl.point=ul}function _l(t,e){Hu=t,ju=e,t*=Oc,e*=Oc,cl.point=xl;var n=Dc(e);Uu=n*Dc(t),Wu=n*Yc(t),qu=Yc(e),ll(Uu,Wu,qu)}function xl(t,e){t*=Oc;var n=Dc(e*=Oc),i=n*Dc(t),r=n*Yc(t),a=Yc(e),o=Wu*a-qu*r,s=qu*i-Uu*a,c=Uu*r-Wu*i,u=jc(o*o+s*s+c*c),l=qc(u),f=u&&-l/u;Xu+=f*o,Bu+=f*s,Yu+=f*c,Ou+=l,Du+=l*(Uu+(Uu=i)),Fu+=l*(Wu+(Wu=r)),zu+=l*(qu+(qu=a)),ll(Uu,Wu,qu)}function vl(t){Gu=Ou=Ru=Iu=Nu=Du=Fu=zu=Xu=Bu=Yu=0,nu(t,cl);var e=Xu,n=Bu,i=Yu,r=e*e+n*n+i*i;return rLc?t+Math.round(-t/Vc)*Vc:t,e]}function Sl(t,e,n){return(t%=Vc)?e||n?bl(Al(t),Pl(e,n)):Al(t):e||n?Pl(e,n):wl}function Tl(t){return function(e,n){return[(e+=t)>Lc?e-Vc:e<-Lc?e+Vc:e,n]}}function Al(t){var e=Tl(t);return e.invert=Tl(-t),e}function Pl(t,e){var n=Dc(t),i=Yc(t),r=Dc(e),a=Yc(e);function o(t,e){var o=Dc(e),s=Dc(t)*o,c=Yc(t)*o,u=Yc(e),l=u*n+s*i;return[Nc(c*r-l*a,s*n-u*i),qc(l*r+c*a)]}return o.invert=function(t,e){var o=Dc(e),s=Dc(t)*o,c=Yc(t)*o,u=Yc(e),l=u*r-c*a;return[Nc(c*r+u*a,s*n+l*i),qc(l*n-s*i)]},o}function Cl(t){function e(e){return(e=t(e[0]*Oc,e[1]*Oc))[0]*=Gc,e[1]*=Gc,e}return t=Sl(t[0]*Oc,t[1]*Oc,t.length>2?t[2]*Oc:0),e.invert=function(e){return(e=t.invert(e[0]*Oc,e[1]*Oc))[0]*=Gc,e[1]*=Gc,e},e}function Ml(t,e,n,i,r,a){if(n){var o=Dc(e),s=Yc(e),c=i*n;null==r?(r=e+i*Vc,a=e-c/2):(r=Ll(o,r),a=Ll(o,a),(i>0?ra)&&(r+=i*Vc));for(var u,l=r;i>0?l>a:l1&&e.push(e.pop().concat(e.shift()))},result:function(){var n=e;return e=[],t=null,n}}}function Vl(t,e){return Rc(t[0]-e[0])=0;--a)r.point((l=u[a])[0],l[1]);else i(h.x,h.p.x,-1,r);h=h.p}u=(h=h.o).z,d=!d}while(!h.v);r.lineEnd()}}}function Rl(t){if(e=t.length){for(var e,n,i=0,r=t[0];++i=0?1:-1,A=T*S,P=A>Lc,C=g*b;if(Il.add(Nc(C*T*Yc(A),y*w+C*Dc(A))),o+=P?S+T*Vc:S,P^d>=n^v>=n){var M=vu(_u(h),_u(x));wu(M);var L=vu(a,M);wu(L);var E=(P^S>=0?-1:1)*qc(L[2]);(i>E||i===E&&(M[0]||M[1]))&&(s+=P^S>=0?1:-1)}}return(o<-1e-6||o0){for(f||(r.polygonStart(),f=!0),r.lineStart(),t=0;t1&&2&c&&h.push(h.pop().concat(h.shift())),o.push(h.filter(zl))}return h}}function zl(t){return t.length>1}function Xl(t,e){return((t=t.x)[0]<0?t[1]-Ec-Cc:Ec-t[1])-((e=e.x)[0]<0?e[1]-Ec-Cc:Ec-e[1])}const Bl=Fl((function(){return!0}),(function(t){var e,n=NaN,i=NaN,r=NaN;return{lineStart:function(){t.lineStart(),e=1},point:function(a,o){var s=a>0?Lc:-Lc,c=Rc(a-n);Rc(c-Lc)0?Ec:-Ec),t.point(r,i),t.lineEnd(),t.lineStart(),t.point(s,i),t.point(a,i),e=0):r!==s&&c>=Lc&&(Rc(n-r)Cc?Ic((Yc(e)*(a=Dc(i))*Yc(n)-Yc(i)*(r=Dc(e))*Yc(t))/(r*a*o)):(e+i)/2}(n,i,a,o),t.point(r,i),t.lineEnd(),t.lineStart(),t.point(s,i),e=0),t.point(n=a,i=o),r=s},lineEnd:function(){t.lineEnd(),n=i=NaN},clean:function(){return 2-e}}}),(function(t,e,n,i){var r;if(null==t)r=n*Ec,i.point(-Lc,r),i.point(0,r),i.point(Lc,r),i.point(Lc,0),i.point(Lc,-r),i.point(0,-r),i.point(-Lc,-r),i.point(-Lc,0),i.point(-Lc,r);else if(Rc(t[0]-e[0])>Cc){var a=t[0]0,r=Rc(e)>Cc;function a(t,n){return Dc(t)*Dc(n)>e}function o(t,n,i){var r=[1,0,0],a=vu(_u(t),_u(n)),o=xu(a,a),s=a[0],c=o-s*s;if(!c)return!i&&t;var u=e*o/c,l=-e*s/c,f=vu(r,a),h=bu(r,u);mu(h,bu(a,l));var d=f,p=xu(h,d),g=xu(d,d),y=p*p-g*(xu(h,h)-1);if(!(y<0)){var _=jc(y),x=bu(d,(-p-_)/g);if(mu(x,h),x=yu(x),!i)return x;var v,m=t[0],b=n[0],w=t[1],S=n[1];b0^x[1]<(Rc(x[0]-m)Lc^(m<=x[0]&&x[0]<=b)){var P=bu(d,(-p+_)/g);return mu(P,h),[x,yu(P)]}}}function s(e,n){var r=i?t:Lc-t,a=0;return e<-r?a|=1:e>r&&(a|=2),n<-r?a|=4:n>r&&(a|=8),a}return Fl(a,(function(t){var e,n,c,u,l;return{lineStart:function(){u=c=!1,l=1},point:function(f,h){var d,p=[f,h],g=a(f,h),y=i?g?0:s(f,h):g?s(f+(f<0?Lc:-Lc),h):0;if(!e&&(u=c=g)&&t.lineStart(),g!==c&&(!(d=o(e,p))||Vl(e,d)||Vl(p,d))&&(p[2]=1),g!==c)l=0,g?(t.lineStart(),d=o(p,e),t.point(d[0],d[1])):(d=o(e,p),t.point(d[0],d[1],2),t.lineEnd()),e=d;else if(r&&e&&i^g){var _;y&n||!(_=o(p,e,!0))||(l=0,i?(t.lineStart(),t.point(_[0][0],_[0][1]),t.point(_[1][0],_[1][1]),t.lineEnd()):(t.point(_[1][0],_[1][1]),t.lineEnd(),t.lineStart(),t.point(_[0][0],_[0][1],3)))}!g||e&&Vl(e,p)||t.point(p[0],p[1]),e=p,c=g,n=y},lineEnd:function(){c&&t.lineEnd(),e=null},clean:function(){return l|(u&&c)<<1}}}),(function(e,i,r,a){Ml(a,t,n,r,e,i)}),i?[0,-t]:[-Lc,t-Lc])}var Hl=1e9,jl=-Hl;function Ul(t,e,n,i){function r(r,a){return t<=r&&r<=n&&e<=a&&a<=i}function a(r,a,s,u){var l=0,f=0;if(null==r||(l=o(r,s))!==(f=o(a,s))||c(r,a)<0^s>0)do{u.point(0===l||3===l?t:n,l>1?i:e)}while((l=(l+s+4)%4)!==f);else u.point(a[0],a[1])}function o(i,r){return Rc(i[0]-t)0?0:3:Rc(i[0]-n)0?2:1:Rc(i[1]-e)0?1:0:r>0?3:2}function s(t,e){return c(t.x,e.x)}function c(t,e){var n=o(t,1),i=o(e,1);return n!==i?n-i:0===n?e[1]-t[1]:1===n?t[0]-e[0]:2===n?t[1]-e[1]:e[0]-t[0]}return function(o){var c,u,l,f,h,d,p,g,y,_,x,v=o,m=kl(),b={point:w,lineStart:function(){b.point=S,u&&u.push(l=[]),_=!0,y=!1,p=g=NaN},lineEnd:function(){c&&(S(f,h),d&&y&&m.rejoin(),c.push(m.result())),b.point=w,y&&v.lineEnd()},polygonStart:function(){v=m,c=[],u=[],x=!0},polygonEnd:function(){var e=function(){for(var e=0,n=0,r=u.length;ni&&(h-a)*(i-o)>(d-o)*(t-a)&&++e:d<=i&&(h-a)*(i-o)<(d-o)*(t-a)&&--e;return e}(),n=x&&e,r=(c=D(c)).length;(n||r)&&(o.polygonStart(),n&&(o.lineStart(),a(null,null,1,o),o.lineEnd()),r&&Ol(c,s,e,a,o),o.polygonEnd()),v=o,c=u=l=null}};function w(t,e){r(t,e)&&v.point(t,e)}function S(a,o){var s=r(a,o);if(u&&l.push([a,o]),_)f=a,h=o,d=s,_=!1,s&&(v.lineStart(),v.point(a,o));else if(s&&y)v.point(a,o);else{var c=[p=Math.max(jl,Math.min(Hl,p)),g=Math.max(jl,Math.min(Hl,g))],m=[a=Math.max(jl,Math.min(Hl,a)),o=Math.max(jl,Math.min(Hl,o))];!function(t,e,n,i,r,a){var o,s=t[0],c=t[1],u=0,l=1,f=e[0]-s,h=e[1]-c;if(o=n-s,f||!(o>0)){if(o/=f,f<0){if(o0){if(o>l)return;o>u&&(u=o)}if(o=r-s,f||!(o<0)){if(o/=f,f<0){if(o>l)return;o>u&&(u=o)}else if(f>0){if(o0)){if(o/=h,h<0){if(o0){if(o>l)return;o>u&&(u=o)}if(o=a-c,h||!(o<0)){if(o/=h,h<0){if(o>l)return;o>u&&(u=o)}else if(h>0){if(o0&&(t[0]=s+u*f,t[1]=c+u*h),l<1&&(e[0]=s+l*f,e[1]=c+l*h),!0}}}}}(c,m,t,e,n,i)?s&&(v.lineStart(),v.point(a,o),x=!1):(y||(v.lineStart(),v.point(c[0],c[1])),v.point(m[0],m[1]),s||v.lineEnd(),x=!1)}p=a,g=o,y=s}return b}}function Wl(){var t,e,n,i=0,r=0,a=960,o=500;return n={stream:function(n){return t&&e===n?t:t=Ul(i,r,a,o)(e=n)},extent:function(s){return arguments.length?(i=+s[0][0],r=+s[0][1],a=+s[1][0],o=+s[1][1],t=e=null,n):[[i,r],[a,o]]}}}var ql,Ql,Zl,Kl=Sc(),$l={sphere:Zc,point:Zc,lineStart:function(){$l.point=tf,$l.lineEnd=Jl},lineEnd:Zc,polygonStart:Zc,polygonEnd:Zc};function Jl(){$l.point=$l.lineEnd=Zc}function tf(t,e){ql=t*=Oc,Ql=Yc(e*=Oc),Zl=Dc(e),$l.point=ef}function ef(t,e){t*=Oc;var n=Yc(e*=Oc),i=Dc(e),r=Rc(t-ql),a=Dc(r),o=i*Yc(r),s=Zl*n-Ql*i*a,c=Ql*n+Zl*i*a;Kl.add(Nc(jc(o*o+s*s),c)),ql=t,Ql=n,Zl=i}function nf(t){return Kl.reset(),nu(t,$l),+Kl}var rf=[null,null],af={type:"LineString",coordinates:rf};function of(t,e){return rf[0]=t,rf[1]=e,nf(af)}var sf={Feature:function(t,e){return uf(t.geometry,e)},FeatureCollection:function(t,e){for(var n=t.features,i=-1,r=n.length;++i0&&(r=of(t[a],t[a-1]))>0&&n<=r&&i<=r&&(n+i-r)*(1-Math.pow((n-i)/r,2))Cc})).map(c)).concat(S(Fc(a/d)*d,r,d).filter((function(t){return Rc(t%g)>Cc})).map(u))}return _.lines=function(){return x().map((function(t){return{type:"LineString",coordinates:t}}))},_.outline=function(){return{type:"Polygon",coordinates:[l(i).concat(f(o).slice(1),l(n).reverse().slice(1),f(s).reverse().slice(1))]}},_.extent=function(t){return arguments.length?_.extentMajor(t).extentMinor(t):_.extentMinor()},_.extentMajor=function(t){return arguments.length?(i=+t[0][0],n=+t[1][0],s=+t[0][1],o=+t[1][1],i>n&&(t=i,i=n,n=t),s>o&&(t=s,s=o,o=t),_.precision(y)):[[i,s],[n,o]]},_.extentMinor=function(n){return arguments.length?(e=+n[0][0],t=+n[1][0],a=+n[0][1],r=+n[1][1],e>t&&(n=e,e=t,t=n),a>r&&(n=a,a=r,r=n),_.precision(y)):[[e,a],[t,r]]},_.step=function(t){return arguments.length?_.stepMajor(t).stepMinor(t):_.stepMinor()},_.stepMajor=function(t){return arguments.length?(p=+t[0],g=+t[1],_):[p,g]},_.stepMinor=function(t){return arguments.length?(h=+t[0],d=+t[1],_):[h,d]},_.precision=function(h){return arguments.length?(y=+h,c=yf(a,r,90),u=_f(e,t,y),l=yf(s,o,90),f=_f(i,n,y),_):y},_.extentMajor([[-180,-89.999999],[180,89.999999]]).extentMinor([[-180,-80.000001],[180,80.000001]])}function vf(){return xf()()}function mf(t,e){var n=t[0]*Oc,i=t[1]*Oc,r=e[0]*Oc,a=e[1]*Oc,o=Dc(i),s=Yc(i),c=Dc(a),u=Yc(a),l=o*Dc(n),f=o*Yc(n),h=c*Dc(r),d=c*Yc(r),p=2*qc(jc(Qc(a-i)+o*c*Qc(r-n))),g=Yc(p),y=p?function(t){var e=Yc(t*=p)/g,n=Yc(p-t)/g,i=n*l+e*h,r=n*f+e*d,a=n*s+e*u;return[Nc(r,i)*Gc,Nc(a,jc(i*i+r*r))*Gc]}:function(){return[n*Gc,i*Gc]};return y.distance=p,y}function bf(t){return t}var wf,Sf,Tf,Af,Pf=Sc(),Cf=Sc(),Mf={point:Zc,lineStart:Zc,lineEnd:Zc,polygonStart:function(){Mf.lineStart=Lf,Mf.lineEnd=Vf},polygonEnd:function(){Mf.lineStart=Mf.lineEnd=Mf.point=Zc,Pf.add(Rc(Cf)),Cf.reset()},result:function(){var t=Pf/2;return Pf.reset(),t}};function Lf(){Mf.point=Ef}function Ef(t,e){Mf.point=kf,wf=Tf=t,Sf=Af=e}function kf(t,e){Cf.add(Af*t-Tf*e),Tf=t,Af=e}function Vf(){kf(wf,Sf)}const Gf=Mf;var Of=1/0,Rf=Of,If=-Of,Nf=If,Df={point:function(t,e){tIf&&(If=t),eNf&&(Nf=e)},lineStart:Zc,lineEnd:Zc,polygonStart:Zc,polygonEnd:Zc,result:function(){var t=[[Of,Rf],[If,Nf]];return If=Nf=-(Rf=Of=1/0),t}};const Ff=Df;var zf,Xf,Bf,Yf,Hf=0,jf=0,Uf=0,Wf=0,qf=0,Qf=0,Zf=0,Kf=0,$f=0,Jf={point:th,lineStart:eh,lineEnd:rh,polygonStart:function(){Jf.lineStart=ah,Jf.lineEnd=oh},polygonEnd:function(){Jf.point=th,Jf.lineStart=eh,Jf.lineEnd=rh},result:function(){var t=$f?[Zf/$f,Kf/$f]:Qf?[Wf/Qf,qf/Qf]:Uf?[Hf/Uf,jf/Uf]:[NaN,NaN];return Hf=jf=Uf=Wf=qf=Qf=Zf=Kf=$f=0,t}};function th(t,e){Hf+=t,jf+=e,++Uf}function eh(){Jf.point=nh}function nh(t,e){Jf.point=ih,th(Bf=t,Yf=e)}function ih(t,e){var n=t-Bf,i=e-Yf,r=jc(n*n+i*i);Wf+=r*(Bf+t)/2,qf+=r*(Yf+e)/2,Qf+=r,th(Bf=t,Yf=e)}function rh(){Jf.point=th}function ah(){Jf.point=sh}function oh(){ch(zf,Xf)}function sh(t,e){Jf.point=ch,th(zf=Bf=t,Xf=Yf=e)}function ch(t,e){var n=t-Bf,i=e-Yf,r=jc(n*n+i*i);Wf+=r*(Bf+t)/2,qf+=r*(Yf+e)/2,Qf+=r,Zf+=(r=Yf*t-Bf*e)*(Bf+t),Kf+=r*(Yf+e),$f+=3*r,th(Bf=t,Yf=e)}const uh=Jf;function lh(t){this._context=t}lh.prototype={_radius:4.5,pointRadius:function(t){return this._radius=t,this},polygonStart:function(){this._line=0},polygonEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){0===this._line&&this._context.closePath(),this._point=NaN},point:function(t,e){switch(this._point){case 0:this._context.moveTo(t,e),this._point=1;break;case 1:this._context.lineTo(t,e);break;default:this._context.moveTo(t+this._radius,e),this._context.arc(t,e,this._radius,0,Vc)}},result:Zc};var fh,hh,dh,ph,gh,yh=Sc(),_h={point:Zc,lineStart:function(){_h.point=xh},lineEnd:function(){fh&&vh(hh,dh),_h.point=Zc},polygonStart:function(){fh=!0},polygonEnd:function(){fh=null},result:function(){var t=+yh;return yh.reset(),t}};function xh(t,e){_h.point=vh,hh=ph=t,dh=gh=e}function vh(t,e){ph-=t,gh-=e,yh.add(jc(ph*ph+gh*gh)),ph=t,gh=e}const mh=_h;function bh(){this._string=[]}function wh(t){return"m0,"+t+"a"+t+","+t+" 0 1,1 0,"+-2*t+"a"+t+","+t+" 0 1,1 0,"+2*t+"z"}function Sh(t,e){var n,i,r=4.5;function a(t){return t&&("function"==typeof r&&i.pointRadius(+r.apply(this,arguments)),nu(t,n(i))),i.result()}return a.area=function(t){return nu(t,n(Gf)),Gf.result()},a.measure=function(t){return nu(t,n(mh)),mh.result()},a.bounds=function(t){return nu(t,n(Ff)),Ff.result()},a.centroid=function(t){return nu(t,n(uh)),uh.result()},a.projection=function(e){return arguments.length?(n=null==e?(t=null,bf):(t=e).stream,a):t},a.context=function(t){return arguments.length?(i=null==t?(e=null,new bh):new lh(e=t),"function"!=typeof r&&i.pointRadius(r),a):e},a.pointRadius=function(t){return arguments.length?(r="function"==typeof t?t:(i.pointRadius(+t),+t),a):r},a.projection(t).context(e)}function Th(t){return{stream:Ah(t)}}function Ah(t){return function(e){var n=new Ph;for(var i in t)n[i]=t[i];return n.stream=e,n}}function Ph(){}function Ch(t,e,n){var i=t.clipExtent&&t.clipExtent();return t.scale(150).translate([0,0]),null!=i&&t.clipExtent(null),nu(n,t.stream(Ff)),e(Ff.result()),null!=i&&t.clipExtent(i),t}function Mh(t,e,n){return Ch(t,(function(n){var i=e[1][0]-e[0][0],r=e[1][1]-e[0][1],a=Math.min(i/(n[1][0]-n[0][0]),r/(n[1][1]-n[0][1])),o=+e[0][0]+(i-a*(n[1][0]+n[0][0]))/2,s=+e[0][1]+(r-a*(n[1][1]+n[0][1]))/2;t.scale(150*a).translate([o,s])}),n)}function Lh(t,e,n){return Mh(t,[[0,0],e],n)}function Eh(t,e,n){return Ch(t,(function(n){var i=+e,r=i/(n[1][0]-n[0][0]),a=(i-r*(n[1][0]+n[0][0]))/2,o=-r*n[0][1];t.scale(150*r).translate([a,o])}),n)}function kh(t,e,n){return Ch(t,(function(n){var i=+e,r=i/(n[1][1]-n[0][1]),a=-r*n[0][0],o=(i-r*(n[1][1]+n[0][1]))/2;t.scale(150*r).translate([a,o])}),n)}bh.prototype={_radius:4.5,_circle:wh(4.5),pointRadius:function(t){return(t=+t)!==this._radius&&(this._radius=t,this._circle=null),this},polygonStart:function(){this._line=0},polygonEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){0===this._line&&this._string.push("Z"),this._point=NaN},point:function(t,e){switch(this._point){case 0:this._string.push("M",t,",",e),this._point=1;break;case 1:this._string.push("L",t,",",e);break;default:null==this._circle&&(this._circle=wh(this._radius)),this._string.push("M",t,",",e,this._circle)}},result:function(){if(this._string.length){var t=this._string.join("");return this._string=[],t}return null}},Ph.prototype={constructor:Ph,point:function(t,e){this.stream.point(t,e)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}};var Vh=Dc(30*Oc);function Gh(t,e){return+e?function(t,e){function n(i,r,a,o,s,c,u,l,f,h,d,p,g,y){var _=u-i,x=l-r,v=_*_+x*x;if(v>4*e&&g--){var m=o+h,b=s+d,w=c+p,S=jc(m*m+b*b+w*w),T=qc(w/=S),A=Rc(Rc(w)-1)e||Rc((_*L+x*E)/v-.5)>.3||o*h+s*d+c*p2?t[2]%360*Oc:0,L()):[y*Gc,_*Gc,x*Gc]},C.angle=function(t){return arguments.length?(v=t%360*Oc,L()):v*Gc},C.reflectX=function(t){return arguments.length?(m=t?-1:1,L()):m<0},C.reflectY=function(t){return arguments.length?(b=t?-1:1,L()):b<0},C.precision=function(t){return arguments.length?(o=Gh(s,P=t*t),E()):jc(P)},C.fitExtent=function(t,e){return Mh(C,t,e)},C.fitSize=function(t,e){return Lh(C,t,e)},C.fitWidth=function(t,e){return Eh(C,t,e)},C.fitHeight=function(t,e){return kh(C,t,e)},function(){return e=t.apply(this,arguments),C.invert=e.invert&&M,L()}}function Fh(t){var e=0,n=Lc/3,i=Dh(t),r=i(e,n);return r.parallels=function(t){return arguments.length?i(e=t[0]*Oc,n=t[1]*Oc):[e*Gc,n*Gc]},r}function zh(t,e){var n=Yc(t),i=(n+Yc(e))/2;if(Rc(i)=.12&&r<.234&&i>=-.425&&i<-.214?s:r>=.166&&r<.234&&i>=-.214&&i<-.115?c:o).invert(t)},l.stream=function(n){return t&&e===n?t:(i=[o.stream(e=n),s.stream(n),c.stream(n)],r=i.length,t={point:function(t,e){for(var n=-1;++n0?e<-Ec+Cc&&(e=-Ec+Cc):e>Ec-Cc&&(e=Ec-Cc);var n=r/Bc(Jh(e),i);return[n*Yc(i*t),r-n*Dc(i*t)]}return a.invert=function(t,e){var n=r-e,a=Hc(i)*jc(t*t+n*n),o=Nc(t,Rc(n))*Hc(n);return n*i<0&&(o-=Lc*Hc(t)*Hc(n)),[o/i,2*Ic(Bc(r/a,1/i))-Ec]},a}function ed(){return Fh(td).scale(109.5).parallels([30,30])}function nd(t,e){return[t,e]}function id(){return Nh(nd).scale(152.63)}function rd(t,e){var n=Dc(t),i=t===e?Yc(t):(n-Dc(e))/(e-t),r=n/i+t;if(Rc(i)2?t[2]+90:90]):[(t=n())[0],t[1],t[2]-90]},n([0,0,90]).scale(159.155)}function Td(t,e){return t.parent===e.parent?1:2}function Ad(t,e){return t+e.x}function Pd(t,e){return Math.max(t,e.y)}function Cd(){var t=Td,e=1,n=1,i=!1;function r(r){var a,o=0;r.eachAfter((function(e){var n=e.children;n?(e.x=function(t){return t.reduce(Ad,0)/t.length}(n),e.y=function(t){return 1+t.reduce(Pd,0)}(n)):(e.x=a?o+=t(e,a):0,e.y=0,a=e)}));var s=function(t){for(var e;e=t.children;)t=e[0];return t}(r),c=function(t){for(var e;e=t.children;)t=e[e.length-1];return t}(r),u=s.x-t(s,c)/2,l=c.x+t(c,s)/2;return r.eachAfter(i?function(t){t.x=(t.x-r.x)*e,t.y=(r.y-t.y)*n}:function(t){t.x=(t.x-u)/(l-u)*e,t.y=(1-(r.y?t.y/r.y:1))*n})}return r.separation=function(e){return arguments.length?(t=e,r):t},r.size=function(t){return arguments.length?(i=!1,e=+t[0],n=+t[1],r):i?null:[e,n]},r.nodeSize=function(t){return arguments.length?(i=!0,e=+t[0],n=+t[1],r):i?[e,n]:null},r}function Md(t){var e=0,n=t.children,i=n&&n.length;if(i)for(;--i>=0;)e+=n[i].value;else e=1;t.value=e}function Ld(t,e){var n,i,r,a,o,s=new Gd(t),c=+t.value&&(s.value=t.value),u=[s];for(null==e&&(e=Ed);n=u.pop();)if(c&&(n.value=+n.data.value),(r=e(n.data))&&(o=r.length))for(n.children=new Array(o),a=o-1;a>=0;--a)u.push(i=n.children[a]=new Gd(r[a])),i.parent=n,i.depth=n.depth+1;return s.eachBefore(Vd)}function Ed(t){return t.children}function kd(t){t.data=t.data.data}function Vd(t){var e=0;do{t.height=e}while((t=t.parent)&&t.height<++e)}function Gd(t){this.data=t,this.depth=this.height=0,this.parent=null}fd.invert=function(t,e){for(var n,i=e,r=i*i,a=r*r*r,o=0;o<12&&(a=(r=(i-=n=(i*(od+sd*r+a*(cd+ud*r))-e)/(od+3*sd*r+a*(7*cd+9*ud*r)))*i)*r*r,!(Rc(n)Cc&&--r>0);return[t/(.8707+(a=i*i)*(a*(a*a*a*(.003971-.001529*a)-.013791)-.131979)),i]},xd.invert=jh(qc),md.invert=jh((function(t){return 2*Ic(t)})),wd.invert=function(t,e){return[-e,2*Ic(zc(t))-Ec]},Gd.prototype=Ld.prototype={constructor:Gd,count:function(){return this.eachAfter(Md)},each:function(t){var e,n,i,r,a=this,o=[a];do{for(e=o.reverse(),o=[];a=e.pop();)if(t(a),n=a.children)for(i=0,r=n.length;i=0;--n)r.push(e[n]);return this},sum:function(t){return this.eachAfter((function(e){for(var n=+t(e.data)||0,i=e.children,r=i&&i.length;--r>=0;)n+=i[r].value;e.value=n}))},sort:function(t){return this.eachBefore((function(e){e.children&&e.children.sort(t)}))},path:function(t){for(var e=this,n=function(t,e){if(t===e)return t;var n=t.ancestors(),i=e.ancestors(),r=null;for(t=n.pop(),e=i.pop();t===e;)r=t,t=n.pop(),e=i.pop();return r}(e,t),i=[e];e!==n;)e=e.parent,i.push(e);for(var r=i.length;t!==n;)i.splice(r,0,t),t=t.parent;return i},ancestors:function(){for(var t=this,e=[t];t=t.parent;)e.push(t);return e},descendants:function(){var t=[];return this.each((function(e){t.push(e)})),t},leaves:function(){var t=[];return this.eachBefore((function(e){e.children||t.push(e)})),t},links:function(){var t=this,e=[];return t.each((function(n){n!==t&&e.push({source:n.parent,target:n})})),e},copy:function(){return Ld(this).eachBefore(kd)}};var Od=Array.prototype.slice;function Rd(t){for(var e,n,i=0,r=(t=function(t){for(var e,n,i=t.length;i;)n=Math.random()*i--|0,e=t[i],t[i]=t[n],t[n]=e;return t}(Od.call(t))).length,a=[];i0&&n*n>i*i+r*r}function Fd(t,e){for(var n=0;n(o*=o)?(i=(u+o-r)/(2*u),a=Math.sqrt(Math.max(0,o/u-i*i)),n.x=t.x-i*s-a*c,n.y=t.y-i*c+a*s):(i=(u+r-o)/(2*u),a=Math.sqrt(Math.max(0,r/u-i*i)),n.x=e.x+i*s-a*c,n.y=e.y+i*c+a*s)):(n.x=e.x+n.r,n.y=e.y)}function Hd(t,e){var n=t.r+e.r-1e-6,i=e.x-t.x,r=e.y-t.y;return n>0&&n*n>i*i+r*r}function jd(t){var e=t._,n=t.next._,i=e.r+n.r,r=(e.x*n.r+n.x*e.r)/i,a=(e.y*n.r+n.y*e.r)/i;return r*r+a*a}function Ud(t){this._=t,this.next=null,this.previous=null}function Wd(t){if(!(r=t.length))return 0;var e,n,i,r,a,o,s,c,u,l,f;if((e=t[0]).x=0,e.y=0,!(r>1))return e.r;if(n=t[1],e.x=-n.r,n.x=e.r,n.y=0,!(r>2))return e.r+n.r;Yd(n,e,i=t[2]),e=new Ud(e),n=new Ud(n),i=new Ud(i),e.next=i.previous=n,n.next=e.previous=i,i.next=n.previous=e;t:for(s=3;s0)throw new Error("cycle");return a}return n.id=function(e){return arguments.length?(t=Zd(e),n):t},n.parentId=function(t){return arguments.length?(e=Zd(t),n):e},n}function hp(t,e){return t.parent===e.parent?1:2}function dp(t){var e=t.children;return e?e[0]:t.t}function pp(t){var e=t.children;return e?e[e.length-1]:t.t}function gp(t,e,n){var i=n/(e.i-t.i);e.c-=i,e.s+=n,t.c+=i,e.z+=n,e.m+=n}function yp(t,e,n){return t.a.parent===e.parent?t.a:n}function _p(t,e){this._=t,this.parent=null,this.children=null,this.A=null,this.a=this,this.z=0,this.m=0,this.c=0,this.s=0,this.t=null,this.i=e}function xp(){var t=hp,e=1,n=1,i=null;function r(r){var c=function(t){for(var e,n,i,r,a,o=new _p(t,0),s=[o];e=s.pop();)if(i=e._.children)for(e.children=new Array(a=i.length),r=a-1;r>=0;--r)s.push(n=e.children[r]=new _p(i[r],r)),n.parent=e;return(o.parent=new _p(null,0)).children=[o],o}(r);if(c.eachAfter(a),c.parent.m=-c.z,c.eachBefore(o),i)r.eachBefore(s);else{var u=r,l=r,f=r;r.eachBefore((function(t){t.xl.x&&(l=t),t.depth>f.depth&&(f=t)}));var h=u===l?1:t(u,l)/2,d=h-u.x,p=e/(l.x+h+d),g=n/(f.depth||1);r.eachBefore((function(t){t.x=(t.x+d)*p,t.y=t.depth*g}))}return r}function a(e){var n=e.children,i=e.parent.children,r=e.i?i[e.i-1]:null;if(n){!function(t){for(var e,n=0,i=0,r=t.children,a=r.length;--a>=0;)(e=r[a]).z+=n,e.m+=n,n+=e.s+(i+=e.c)}(e);var a=(n[0].z+n[n.length-1].z)/2;r?(e.z=r.z+t(e._,r._),e.m=e.z-a):e.z=a}else r&&(e.z=r.z+t(e._,r._));e.parent.A=function(e,n,i){if(n){for(var r,a=e,o=e,s=n,c=a.parent.children[0],u=a.m,l=o.m,f=s.m,h=c.m;s=pp(s),a=dp(a),s&&a;)c=dp(c),(o=pp(o)).a=e,(r=s.z+f-a.z-u+t(s._,a._))>0&&(gp(yp(s,e,i),e,r),u+=r,l+=r),f+=s.m,u+=a.m,h+=c.m,l+=o.m;s&&!pp(o)&&(o.t=s,o.m+=f-l),a&&!dp(c)&&(c.t=a,c.m+=u-h,i=e)}return i}(e,r,e.parent.A||i[0])}function o(t){t._.x=t.z+t.parent.m,t.m+=t.parent.m}function s(t){t.x*=e,t.y=t.depth*n}return r.separation=function(e){return arguments.length?(t=e,r):t},r.size=function(t){return arguments.length?(i=!1,e=+t[0],n=+t[1],r):i?null:[e,n]},r.nodeSize=function(t){return arguments.length?(i=!0,e=+t[0],n=+t[1],r):i?[e,n]:null},r}function vp(t,e,n,i,r){for(var a,o=t.children,s=-1,c=o.length,u=t.value&&(r-n)/t.value;++sh&&(h=s),y=l*l*g,(d=Math.max(h/y,y/f))>p){l-=s;break}p=d}_.push(o={value:l,dice:c1?e:1)},n}(mp);function Sp(){var t=wp,e=!1,n=1,i=1,r=[0],a=Kd,o=Kd,s=Kd,c=Kd,u=Kd;function l(t){return t.x0=t.y0=0,t.x1=n,t.y1=i,t.eachBefore(f),r=[0],e&&t.eachBefore(rp),t}function f(e){var n=r[e.depth],i=e.x0+n,l=e.y0+n,f=e.x1-n,h=e.y1-n;f=n-1){var l=s[e];return l.x0=r,l.y0=a,l.x1=o,void(l.y1=c)}for(var f=u[e],h=i/2+f,d=e+1,p=n-1;d>>1;u[g]c-a){var x=(r*_+o*y)/i;t(e,d,y,r,a,x,c),t(d,n,_,x,a,o,c)}else{var v=(a*_+c*y)/i;t(e,d,y,r,a,o,v),t(d,n,_,r,v,o,c)}}(0,c,t.value,e,n,i,r)}function Ap(t,e,n,i,r){(1&t.depth?vp:ap)(t,e,n,i,r)}const Pp=function t(e){function n(t,n,i,r,a){if((o=t._squarify)&&o.ratio===e)for(var o,s,c,u,l,f=-1,h=o.length,d=t.value;++f1?e:1)},n}(mp);function Cp(t){var e=t.length;return function(n){return t[Math.max(0,Math.min(e-1,Math.floor(n*e)))]}}function Mp(t,e){var n=dn(+t,+e);return function(t){var e=n(t);return e-360*Math.floor(e/360)}}function Lp(t,e){return t=+t,e=+e,function(n){return Math.round(t*(1-n)+e*n)}}var Ep=Math.SQRT2;function kp(t){return((t=Math.exp(t))+1/t)/2}function Vp(t,e){var n,i,r=t[0],a=t[1],o=t[2],s=e[0],c=e[1],u=e[2],l=s-r,f=c-a,h=l*l+f*f;if(h<1e-12)i=Math.log(u/o)/Ep,n=function(t){return[r+t*l,a+t*f,o*Math.exp(Ep*t*i)]};else{var d=Math.sqrt(h),p=(u*u-o*o+4*h)/(2*o*2*d),g=(u*u-o*o-4*h)/(2*u*2*d),y=Math.log(Math.sqrt(p*p+1)-p),_=Math.log(Math.sqrt(g*g+1)-g);i=(_-y)/Ep,n=function(t){var e,n=t*i,s=kp(y),c=o/(2*d)*(s*(e=Ep*n+y,((e=Math.exp(2*e))-1)/(e+1))-function(t){return((t=Math.exp(t))-1/t)/2}(y));return[r+c*l,a+c*f,o*s/kp(Ep*n+y)]}}return n.duration=1e3*i,n}function Gp(t){return function(e,n){var i=t((e=an(e)).h,(n=an(n)).h),r=pn(e.s,n.s),a=pn(e.l,n.l),o=pn(e.opacity,n.opacity);return function(t){return e.h=i(t),e.s=r(t),e.l=a(t),e.opacity=o(t),e+""}}}const Op=Gp(dn);var Rp=Gp(pn);function Ip(t,e){var n=pn((t=Ta(t)).l,(e=Ta(e)).l),i=pn(t.a,e.a),r=pn(t.b,e.b),a=pn(t.opacity,e.opacity);return function(e){return t.l=n(e),t.a=i(e),t.b=r(e),t.opacity=a(e),t+""}}function Np(t){return function(e,n){var i=t((e=Va(e)).h,(n=Va(n)).h),r=pn(e.c,n.c),a=pn(e.l,n.l),o=pn(e.opacity,n.opacity);return function(t){return e.h=i(t),e.c=r(t),e.l=a(t),e.opacity=o(t),e+""}}}const Dp=Np(dn);var Fp=Np(pn);function zp(t){return function e(n){function i(e,i){var r=t((e=Ha(e)).h,(i=Ha(i)).h),a=pn(e.s,i.s),o=pn(e.l,i.l),s=pn(e.opacity,i.opacity);return function(t){return e.h=r(t),e.s=a(t),e.l=o(Math.pow(t,n)),e.opacity=s(t),e+""}}return n=+n,i.gamma=e,i}(1)}const Xp=zp(dn);var Bp=zp(pn);function Yp(t,e){for(var n=0,i=e.length-1,r=e[0],a=new Array(i<0?0:i);n1&&Wp(t[n[i-2]],t[n[i-1]],t[r])<=0;)--i;n[i++]=r}return n.slice(0,i)}function Zp(t){if((n=t.length)<3)return null;var e,n,i=new Array(n),r=new Array(n);for(e=0;e=0;--e)u.push(t[i[a[e]][2]]);for(e=+s;es!=u>s&&o<(c-n)*(s-i)/(u-i)+n&&(l=!l),c=n,u=i;return l}function $p(t){for(var e,n,i=-1,r=t.length,a=t[r-1],o=a[0],s=a[1],c=0;++i1);return t+n*a*Math.sqrt(-2*Math.log(r)/r)}}return n.source=t,n}(Jp),ng=function t(e){function n(){var t=eg.source(e).apply(this,arguments);return function(){return Math.exp(t())}}return n.source=t,n}(Jp),ig=function t(e){function n(t){return function(){for(var n=0,i=0;ii&&(e=n,n=i,i=e),function(t){return Math.max(n,Math.min(i,t))}}function bg(t,e,n){var i=t[0],r=t[1],a=e[0],o=e[1];return r2?wg:bg,r=a=null,f}function f(e){return isNaN(e=+e)?n:(r||(r=i(o.map(t),s,c)))(t(u(e)))}return f.invert=function(n){return u(e((a||(a=i(s,o.map(t),Tn)))(n)))},f.domain=function(t){return arguments.length?(o=ug.call(t,yg),u===xg||(u=mg(o)),l()):o.slice()},f.range=function(t){return arguments.length?(s=lg.call(t),l()):s.slice()},f.rangeRound=function(t){return s=lg.call(t),c=Lp,l()},f.clamp=function(t){return arguments.length?(u=t?mg(o):xg,f):u!==xg},f.interpolate=function(t){return arguments.length?(c=t,l()):c},f.unknown=function(t){return arguments.length?(n=t,f):n},function(n,i){return t=n,e=i,l()}}function Ag(t,e){return Tg()(t,e)}function Pg(t,e,n,i){var r,a=L(t,e,n);switch((i=cc(null==i?",f":i)).type){case"s":var o=Math.max(Math.abs(t),Math.abs(e));return null!=i.precision||isNaN(r=bc(a,o))||(i.precision=r),gc(i,o);case"":case"e":case"g":case"p":case"r":null!=i.precision||isNaN(r=wc(a,Math.max(Math.abs(t),Math.abs(e))))||(i.precision=r-("e"===i.type));break;case"f":case"%":null!=i.precision||isNaN(r=mc(a))||(i.precision=r-2*("%"===i.type))}return pc(i)}function Cg(t){var e=t.domain;return t.ticks=function(t){var n=e();return C(n[0],n[n.length-1],null==t?10:t)},t.tickFormat=function(t,n){var i=e();return Pg(i[0],i[i.length-1],null==t?10:t,n)},t.nice=function(n){null==n&&(n=10);var i,r=e(),a=0,o=r.length-1,s=r[a],c=r[o];return c0?i=M(s=Math.floor(s/i)*i,c=Math.ceil(c/i)*i,n):i<0&&(i=M(s=Math.ceil(s*i)/i,c=Math.floor(c*i)/i,n)),i>0?(r[a]=Math.floor(s/i)*i,r[o]=Math.ceil(c/i)*i,e(r)):i<0&&(r[a]=Math.ceil(s*i)/i,r[o]=Math.floor(c*i)/i,e(r)),t},t}function Mg(){var t=Ag(xg,xg);return t.copy=function(){return Sg(t,Mg())},og.apply(t,arguments),Cg(t)}function Lg(t){var e;function n(t){return isNaN(t=+t)?e:t}return n.invert=n,n.domain=n.range=function(e){return arguments.length?(t=ug.call(e,yg),n):t.slice()},n.unknown=function(t){return arguments.length?(e=t,n):e},n.copy=function(){return Lg(t).unknown(e)},t=arguments.length?ug.call(t,yg):[0,1],Cg(n)}function Eg(t,e){var n,i=0,r=(t=t.slice()).length-1,a=t[i],o=t[r];return o0){for(;hc)break;g.push(f)}}else for(;h=1;--l)if(!((f=u*l)c)break;g.push(f)}}else g=C(h,d,Math.min(d-h,p)).map(n);return i?g.reverse():g},i.tickFormat=function(t,r){if(null==r&&(r=10===a?".0e":","),"function"!=typeof r&&(r=pc(r)),t===1/0)return r;null==t&&(t=10);var o=Math.max(1,a*t/i.ticks().length);return function(t){var i=t/n(Math.round(e(t)));return i*a0?i[r-1]:e[0],r=i?[r[i-1],n]:[r[o-1],r[o]]},o.unknown=function(e){return arguments.length?(t=e,o):o},o.thresholds=function(){return r.slice()},o.copy=function(){return Zg().domain([e,n]).range(a).unknown(t)},og.apply(Cg(o),arguments)}function Kg(){var t,e=[.5],n=[0,1],i=1;function r(r){return r<=r?n[u(e,r,0,i)]:t}return r.domain=function(t){return arguments.length?(e=lg.call(t),i=Math.min(e.length,n.length-1),r):e.slice()},r.range=function(t){return arguments.length?(n=lg.call(t),i=Math.min(e.length,n.length-1),r):n.slice()},r.invertExtent=function(t){var i=n.indexOf(t);return[e[i-1],e[i]]},r.unknown=function(e){return arguments.length?(t=e,r):t},r.copy=function(){return Kg().domain(e).range(n).unknown(t)},og.apply(r,arguments)}var $g=new Date,Jg=new Date;function ty(t,e,n,i){function r(e){return t(e=0===arguments.length?new Date:new Date(+e)),e}return r.floor=function(e){return t(e=new Date(+e)),e},r.ceil=function(n){return t(n=new Date(n-1)),e(n,1),t(n),n},r.round=function(t){var e=r(t),n=r.ceil(t);return t-e0))return s;do{s.push(o=new Date(+n)),e(n,a),t(n)}while(o=e)for(;t(e),!n(e);)e.setTime(e-1)}),(function(t,i){if(t>=t)if(i<0)for(;++i<=0;)for(;e(t,-1),!n(t););else for(;--i>=0;)for(;e(t,1),!n(t););}))},n&&(r.count=function(e,i){return $g.setTime(+e),Jg.setTime(+i),t($g),t(Jg),Math.floor(n($g,Jg))},r.every=function(t){return t=Math.floor(t),isFinite(t)&&t>0?t>1?r.filter(i?function(e){return i(e)%t==0}:function(e){return r.count(0,e)%t==0}):r:null}),r}var ey=ty((function(t){t.setMonth(0,1),t.setHours(0,0,0,0)}),(function(t,e){t.setFullYear(t.getFullYear()+e)}),(function(t,e){return e.getFullYear()-t.getFullYear()}),(function(t){return t.getFullYear()}));ey.every=function(t){return isFinite(t=Math.floor(t))&&t>0?ty((function(e){e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)}),(function(e,n){e.setFullYear(e.getFullYear()+n*t)})):null};const ny=ey;var iy=ey.range,ry=ty((function(t){t.setDate(1),t.setHours(0,0,0,0)}),(function(t,e){t.setMonth(t.getMonth()+e)}),(function(t,e){return e.getMonth()-t.getMonth()+12*(e.getFullYear()-t.getFullYear())}),(function(t){return t.getMonth()}));const ay=ry;var oy=ry.range,sy=1e3,cy=6e4,uy=36e5,ly=864e5,fy=6048e5;function hy(t){return ty((function(e){e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)}),(function(t,e){t.setDate(t.getDate()+7*e)}),(function(t,e){return(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*cy)/fy}))}var dy=hy(0),py=hy(1),gy=hy(2),yy=hy(3),_y=hy(4),xy=hy(5),vy=hy(6),my=dy.range,by=py.range,wy=gy.range,Sy=yy.range,Ty=_y.range,Ay=xy.range,Py=vy.range,Cy=ty((function(t){t.setHours(0,0,0,0)}),(function(t,e){t.setDate(t.getDate()+e)}),(function(t,e){return(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*cy)/ly}),(function(t){return t.getDate()-1}));const My=Cy;var Ly=Cy.range,Ey=ty((function(t){t.setTime(t-t.getMilliseconds()-t.getSeconds()*sy-t.getMinutes()*cy)}),(function(t,e){t.setTime(+t+e*uy)}),(function(t,e){return(e-t)/uy}),(function(t){return t.getHours()}));const ky=Ey;var Vy=Ey.range,Gy=ty((function(t){t.setTime(t-t.getMilliseconds()-t.getSeconds()*sy)}),(function(t,e){t.setTime(+t+e*cy)}),(function(t,e){return(e-t)/cy}),(function(t){return t.getMinutes()}));const Oy=Gy;var Ry=Gy.range,Iy=ty((function(t){t.setTime(t-t.getMilliseconds())}),(function(t,e){t.setTime(+t+e*sy)}),(function(t,e){return(e-t)/sy}),(function(t){return t.getUTCSeconds()}));const Ny=Iy;var Dy=Iy.range,Fy=ty((function(){}),(function(t,e){t.setTime(+t+e)}),(function(t,e){return e-t}));Fy.every=function(t){return t=Math.floor(t),isFinite(t)&&t>0?t>1?ty((function(e){e.setTime(Math.floor(e/t)*t)}),(function(e,n){e.setTime(+e+n*t)}),(function(e,n){return(n-e)/t})):Fy:null};const zy=Fy;var Xy=Fy.range;function By(t){return ty((function(e){e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCDate(t.getUTCDate()+7*e)}),(function(t,e){return(e-t)/fy}))}var Yy=By(0),Hy=By(1),jy=By(2),Uy=By(3),Wy=By(4),qy=By(5),Qy=By(6),Zy=Yy.range,Ky=Hy.range,$y=jy.range,Jy=Uy.range,t_=Wy.range,e_=qy.range,n_=Qy.range,i_=ty((function(t){t.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCDate(t.getUTCDate()+e)}),(function(t,e){return(e-t)/ly}),(function(t){return t.getUTCDate()-1}));const r_=i_;var a_=i_.range,o_=ty((function(t){t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCFullYear(t.getUTCFullYear()+e)}),(function(t,e){return e.getUTCFullYear()-t.getUTCFullYear()}),(function(t){return t.getUTCFullYear()}));o_.every=function(t){return isFinite(t=Math.floor(t))&&t>0?ty((function(e){e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)}),(function(e,n){e.setUTCFullYear(e.getUTCFullYear()+n*t)})):null};const s_=o_;var c_=o_.range;function u_(t){if(0<=t.y&&t.y<100){var e=new Date(-1,t.m,t.d,t.H,t.M,t.S,t.L);return e.setFullYear(t.y),e}return new Date(t.y,t.m,t.d,t.H,t.M,t.S,t.L)}function l_(t){if(0<=t.y&&t.y<100){var e=new Date(Date.UTC(-1,t.m,t.d,t.H,t.M,t.S,t.L));return e.setUTCFullYear(t.y),e}return new Date(Date.UTC(t.y,t.m,t.d,t.H,t.M,t.S,t.L))}function f_(t,e,n){return{y:t,m:e,d:n,H:0,M:0,S:0,L:0}}function h_(t){var e=t.dateTime,n=t.date,i=t.time,r=t.periods,a=t.days,o=t.shortDays,s=t.months,c=t.shortMonths,u=T_(r),l=A_(r),f=T_(a),h=A_(a),d=T_(o),p=A_(o),g=T_(s),y=A_(s),_=T_(c),x=A_(c),v={a:function(t){return o[t.getDay()]},A:function(t){return a[t.getDay()]},b:function(t){return c[t.getMonth()]},B:function(t){return s[t.getMonth()]},c:null,d:U_,e:U_,f:K_,g:cx,G:lx,H:W_,I:q_,j:Q_,L:Z_,m:$_,M:J_,p:function(t){return r[+(t.getHours()>=12)]},q:function(t){return 1+~~(t.getMonth()/3)},Q:Gx,s:Ox,S:tx,u:ex,U:nx,V:rx,w:ax,W:ox,x:null,X:null,y:sx,Y:ux,Z:fx,"%":Vx},m={a:function(t){return o[t.getUTCDay()]},A:function(t){return a[t.getUTCDay()]},b:function(t){return c[t.getUTCMonth()]},B:function(t){return s[t.getUTCMonth()]},c:null,d:hx,e:hx,f:_x,g:Mx,G:Ex,H:dx,I:px,j:gx,L:yx,m:xx,M:vx,p:function(t){return r[+(t.getUTCHours()>=12)]},q:function(t){return 1+~~(t.getUTCMonth()/3)},Q:Gx,s:Ox,S:mx,u:bx,U:wx,V:Tx,w:Ax,W:Px,x:null,X:null,y:Cx,Y:Lx,Z:kx,"%":Vx},b={a:function(t,e,n){var i=d.exec(e.slice(n));return i?(t.w=p[i[0].toLowerCase()],n+i[0].length):-1},A:function(t,e,n){var i=f.exec(e.slice(n));return i?(t.w=h[i[0].toLowerCase()],n+i[0].length):-1},b:function(t,e,n){var i=_.exec(e.slice(n));return i?(t.m=x[i[0].toLowerCase()],n+i[0].length):-1},B:function(t,e,n){var i=g.exec(e.slice(n));return i?(t.m=y[i[0].toLowerCase()],n+i[0].length):-1},c:function(t,n,i){return T(t,e,n,i)},d:I_,e:I_,f:B_,g:V_,G:k_,H:D_,I:D_,j:N_,L:X_,m:R_,M:F_,p:function(t,e,n){var i=u.exec(e.slice(n));return i?(t.p=l[i[0].toLowerCase()],n+i[0].length):-1},q:O_,Q:H_,s:j_,S:z_,u:C_,U:M_,V:L_,w:P_,W:E_,x:function(t,e,i){return T(t,n,e,i)},X:function(t,e,n){return T(t,i,e,n)},y:V_,Y:k_,Z:G_,"%":Y_};function w(t,e){return function(n){var i,r,a,o=[],s=-1,c=0,u=t.length;for(n instanceof Date||(n=new Date(+n));++s53)return null;"w"in a||(a.w=1),"Z"in a?(r=(i=l_(f_(a.y,0,1))).getUTCDay(),i=r>4||0===r?Hy.ceil(i):Hy(i),i=r_.offset(i,7*(a.V-1)),a.y=i.getUTCFullYear(),a.m=i.getUTCMonth(),a.d=i.getUTCDate()+(a.w+6)%7):(r=(i=u_(f_(a.y,0,1))).getDay(),i=r>4||0===r?py.ceil(i):py(i),i=My.offset(i,7*(a.V-1)),a.y=i.getFullYear(),a.m=i.getMonth(),a.d=i.getDate()+(a.w+6)%7)}else("W"in a||"U"in a)&&("w"in a||(a.w="u"in a?a.u%7:"W"in a?1:0),r="Z"in a?l_(f_(a.y,0,1)).getUTCDay():u_(f_(a.y,0,1)).getDay(),a.m=0,a.d="W"in a?(a.w+6)%7+7*a.W-(r+5)%7:a.w+7*a.U-(r+6)%7);return"Z"in a?(a.H+=a.Z/100|0,a.M+=a.Z%100,l_(a)):u_(a)}}function T(t,e,n,i){for(var r,a,o=0,s=e.length,c=n.length;o=c)return-1;if(37===(r=e.charCodeAt(o++))){if(r=e.charAt(o++),!(a=b[r in x_?e.charAt(o++):r])||(i=a(t,n,i))<0)return-1}else if(r!=n.charCodeAt(i++))return-1}return i}return v.x=w(n,v),v.X=w(i,v),v.c=w(e,v),m.x=w(n,m),m.X=w(i,m),m.c=w(e,m),{format:function(t){var e=w(t+="",v);return e.toString=function(){return t},e},parse:function(t){var e=S(t+="",!1);return e.toString=function(){return t},e},utcFormat:function(t){var e=w(t+="",m);return e.toString=function(){return t},e},utcParse:function(t){var e=S(t+="",!0);return e.toString=function(){return t},e}}}var d_,p_,g_,y_,__,x_={"-":"",_:" ",0:"0"},v_=/^\s*\d+/,m_=/^%/,b_=/[\\^$*+?|[\]().{}]/g;function w_(t,e,n){var i=t<0?"-":"",r=(i?-t:t)+"",a=r.length;return i+(a68?1900:2e3),n+i[0].length):-1}function G_(t,e,n){var i=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(e.slice(n,n+6));return i?(t.Z=i[1]?0:-(i[2]+(i[3]||"00")),n+i[0].length):-1}function O_(t,e,n){var i=v_.exec(e.slice(n,n+1));return i?(t.q=3*i[0]-3,n+i[0].length):-1}function R_(t,e,n){var i=v_.exec(e.slice(n,n+2));return i?(t.m=i[0]-1,n+i[0].length):-1}function I_(t,e,n){var i=v_.exec(e.slice(n,n+2));return i?(t.d=+i[0],n+i[0].length):-1}function N_(t,e,n){var i=v_.exec(e.slice(n,n+3));return i?(t.m=0,t.d=+i[0],n+i[0].length):-1}function D_(t,e,n){var i=v_.exec(e.slice(n,n+2));return i?(t.H=+i[0],n+i[0].length):-1}function F_(t,e,n){var i=v_.exec(e.slice(n,n+2));return i?(t.M=+i[0],n+i[0].length):-1}function z_(t,e,n){var i=v_.exec(e.slice(n,n+2));return i?(t.S=+i[0],n+i[0].length):-1}function X_(t,e,n){var i=v_.exec(e.slice(n,n+3));return i?(t.L=+i[0],n+i[0].length):-1}function B_(t,e,n){var i=v_.exec(e.slice(n,n+6));return i?(t.L=Math.floor(i[0]/1e3),n+i[0].length):-1}function Y_(t,e,n){var i=m_.exec(e.slice(n,n+1));return i?n+i[0].length:-1}function H_(t,e,n){var i=v_.exec(e.slice(n));return i?(t.Q=+i[0],n+i[0].length):-1}function j_(t,e,n){var i=v_.exec(e.slice(n));return i?(t.s=+i[0],n+i[0].length):-1}function U_(t,e){return w_(t.getDate(),e,2)}function W_(t,e){return w_(t.getHours(),e,2)}function q_(t,e){return w_(t.getHours()%12||12,e,2)}function Q_(t,e){return w_(1+My.count(ny(t),t),e,3)}function Z_(t,e){return w_(t.getMilliseconds(),e,3)}function K_(t,e){return Z_(t,e)+"000"}function $_(t,e){return w_(t.getMonth()+1,e,2)}function J_(t,e){return w_(t.getMinutes(),e,2)}function tx(t,e){return w_(t.getSeconds(),e,2)}function ex(t){var e=t.getDay();return 0===e?7:e}function nx(t,e){return w_(dy.count(ny(t)-1,t),e,2)}function ix(t){var e=t.getDay();return e>=4||0===e?_y(t):_y.ceil(t)}function rx(t,e){return t=ix(t),w_(_y.count(ny(t),t)+(4===ny(t).getDay()),e,2)}function ax(t){return t.getDay()}function ox(t,e){return w_(py.count(ny(t)-1,t),e,2)}function sx(t,e){return w_(t.getFullYear()%100,e,2)}function cx(t,e){return w_((t=ix(t)).getFullYear()%100,e,2)}function ux(t,e){return w_(t.getFullYear()%1e4,e,4)}function lx(t,e){var n=t.getDay();return w_((t=n>=4||0===n?_y(t):_y.ceil(t)).getFullYear()%1e4,e,4)}function fx(t){var e=t.getTimezoneOffset();return(e>0?"-":(e*=-1,"+"))+w_(e/60|0,"0",2)+w_(e%60,"0",2)}function hx(t,e){return w_(t.getUTCDate(),e,2)}function dx(t,e){return w_(t.getUTCHours(),e,2)}function px(t,e){return w_(t.getUTCHours()%12||12,e,2)}function gx(t,e){return w_(1+r_.count(s_(t),t),e,3)}function yx(t,e){return w_(t.getUTCMilliseconds(),e,3)}function _x(t,e){return yx(t,e)+"000"}function xx(t,e){return w_(t.getUTCMonth()+1,e,2)}function vx(t,e){return w_(t.getUTCMinutes(),e,2)}function mx(t,e){return w_(t.getUTCSeconds(),e,2)}function bx(t){var e=t.getUTCDay();return 0===e?7:e}function wx(t,e){return w_(Yy.count(s_(t)-1,t),e,2)}function Sx(t){var e=t.getUTCDay();return e>=4||0===e?Wy(t):Wy.ceil(t)}function Tx(t,e){return t=Sx(t),w_(Wy.count(s_(t),t)+(4===s_(t).getUTCDay()),e,2)}function Ax(t){return t.getUTCDay()}function Px(t,e){return w_(Hy.count(s_(t)-1,t),e,2)}function Cx(t,e){return w_(t.getUTCFullYear()%100,e,2)}function Mx(t,e){return w_((t=Sx(t)).getUTCFullYear()%100,e,2)}function Lx(t,e){return w_(t.getUTCFullYear()%1e4,e,4)}function Ex(t,e){var n=t.getUTCDay();return w_((t=n>=4||0===n?Wy(t):Wy.ceil(t)).getUTCFullYear()%1e4,e,4)}function kx(){return"+0000"}function Vx(){return"%"}function Gx(t){return+t}function Ox(t){return Math.floor(+t/1e3)}function Rx(t){return d_=h_(t),p_=d_.format,g_=d_.parse,y_=d_.utcFormat,__=d_.utcParse,d_}Rx({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});var Ix=31536e6;function Nx(t){return new Date(t)}function Dx(t){return t instanceof Date?+t:+new Date(+t)}function Fx(t,e,n,i,r,o,s,c,u){var l=Ag(xg,xg),f=l.invert,h=l.domain,d=u(".%L"),p=u(":%S"),g=u("%I:%M"),y=u("%I %p"),_=u("%a %d"),x=u("%b %d"),v=u("%B"),m=u("%Y"),b=[[s,1,1e3],[s,5,5e3],[s,15,15e3],[s,30,3e4],[o,1,6e4],[o,5,3e5],[o,15,9e5],[o,30,18e5],[r,1,36e5],[r,3,108e5],[r,6,216e5],[r,12,432e5],[i,1,864e5],[i,2,1728e5],[n,1,6048e5],[e,1,2592e6],[e,3,7776e6],[t,1,Ix]];function w(a){return(s(a)1)&&(t-=Math.floor(t));var e=Math.abs(t-.5);return Cm.h=360*t-100,Cm.s=1.5-1.5*e,Cm.l=.8-.9*e,Cm+""}var Lm=Ke(),Em=Math.PI/3,km=2*Math.PI/3;function Vm(t){var e;return t=(.5-t)*Math.PI,Lm.r=255*(e=Math.sin(t))*e,Lm.g=255*(e=Math.sin(t+Em))*e,Lm.b=255*(e=Math.sin(t+km))*e,Lm+""}function Gm(t){return t=Math.max(0,Math.min(1,t)),"rgb("+Math.max(0,Math.min(255,Math.round(34.61+t*(1172.33-t*(10793.56-t*(33300.12-t*(38394.49-14825.05*t)))))))+", "+Math.max(0,Math.min(255,Math.round(23.31+t*(557.33+t*(1225.33-t*(3574.96-t*(1073.77+707.56*t)))))))+", "+Math.max(0,Math.min(255,Math.round(27.2+t*(3211.1-t*(15327.97-t*(27814-t*(22569.18-6838.66*t)))))))+")"}function Om(t){var e=t.length;return function(n){return t[Math.max(0,Math.min(e-1,Math.floor(n*e)))]}}const Rm=Om(fv("44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725"));var Im=Om(fv("00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf")),Nm=Om(fv("00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4")),Dm=Om(fv("0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921"));function Fm(t){return Te(re(t).call(document.documentElement))}var zm=0;function Xm(){return new Bm}function Bm(){this._="@"+(++zm).toString(36)}function Ym(t){return"string"==typeof t?new be([document.querySelectorAll(t)],[document.documentElement]):new be([null==t?[]:t],me)}function Hm(t,e){null==e&&(e=En().touches);for(var n=0,i=e?e.length:0,r=new Array(i);n1?0:t<-1?tb:Math.acos(t)}function rb(t){return t>=1?eb:t<=-1?-eb:Math.asin(t)}function ab(t){return t.innerRadius}function ob(t){return t.outerRadius}function sb(t){return t.startAngle}function cb(t){return t.endAngle}function ub(t){return t&&t.padAngle}function lb(t,e,n,i,r,a,o,s){var c=n-t,u=i-e,l=o-r,f=s-a,h=f*c-l*u;if(!(h*hE*E+k*k&&(T=P,A=C),{cx:T,cy:A,x01:-l,y01:-f,x11:T*(r/b-1),y11:A*(r/b-1)}}function hb(){var t=ab,e=ob,n=jm(0),i=null,r=sb,a=cb,o=ub,s=null;function c(){var c,u,l=+t.apply(this,arguments),f=+e.apply(this,arguments),h=r.apply(this,arguments)-eb,d=a.apply(this,arguments)-eb,p=Um(d-h),g=d>h;if(s||(s=c=Ur()),fJm)if(p>nb-Jm)s.moveTo(f*qm(h),f*Km(h)),s.arc(0,0,f,h,d,!g),l>Jm&&(s.moveTo(l*qm(d),l*Km(d)),s.arc(0,0,l,d,h,g));else{var y,_,x=h,v=d,m=h,b=d,w=p,S=p,T=o.apply(this,arguments)/2,A=T>Jm&&(i?+i.apply(this,arguments):$m(l*l+f*f)),P=Zm(Um(f-l)/2,+n.apply(this,arguments)),C=P,M=P;if(A>Jm){var L=rb(A/l*Km(T)),E=rb(A/f*Km(T));(w-=2*L)>Jm?(m+=L*=g?1:-1,b-=L):(w=0,m=b=(h+d)/2),(S-=2*E)>Jm?(x+=E*=g?1:-1,v-=E):(S=0,x=v=(h+d)/2)}var k=f*qm(x),V=f*Km(x),G=l*qm(b),O=l*Km(b);if(P>Jm){var R,I=f*qm(v),N=f*Km(v),D=l*qm(m),F=l*Km(m);if(pJm?M>Jm?(y=fb(D,F,k,V,f,M,g),_=fb(I,N,G,O,f,M,g),s.moveTo(y.cx+y.x01,y.cy+y.y01),MJm&&w>Jm?C>Jm?(y=fb(G,O,I,N,l,-C,g),_=fb(k,V,D,F,l,-C,g),s.lineTo(y.cx+y.x01,y.cy+y.y01),C=l;--f)s.point(y[f],_[f]);s.lineEnd(),s.areaEnd()}g&&(y[u]=+t(h,u,c),_[u]=+n(h,u,c),s.point(e?+e(h,u,c):y[u],i?+i(h,u,c):_[u]))}if(d)return s=null,d+""||null}function u(){return _b().defined(r).curve(o).context(a)}return c.x=function(n){return arguments.length?(t="function"==typeof n?n:jm(+n),e=null,c):t},c.x0=function(e){return arguments.length?(t="function"==typeof e?e:jm(+e),c):t},c.x1=function(t){return arguments.length?(e=null==t?null:"function"==typeof t?t:jm(+t),c):e},c.y=function(t){return arguments.length?(n="function"==typeof t?t:jm(+t),i=null,c):n},c.y0=function(t){return arguments.length?(n="function"==typeof t?t:jm(+t),c):n},c.y1=function(t){return arguments.length?(i=null==t?null:"function"==typeof t?t:jm(+t),c):i},c.lineX0=c.lineY0=function(){return u().x(t).y(n)},c.lineY1=function(){return u().x(t).y(i)},c.lineX1=function(){return u().x(e).y(n)},c.defined=function(t){return arguments.length?(r="function"==typeof t?t:jm(!!t),c):r},c.curve=function(t){return arguments.length?(o=t,null!=a&&(s=o(a)),c):o},c.context=function(t){return arguments.length?(null==t?a=s=null:s=o(a=t),c):a},c}function vb(t,e){return et?1:e>=t?0:NaN}function mb(t){return t}function bb(){var t=mb,e=vb,n=null,i=jm(0),r=jm(nb),a=jm(0);function o(o){var s,c,u,l,f,h=o.length,d=0,p=new Array(h),g=new Array(h),y=+i.apply(this,arguments),_=Math.min(nb,Math.max(-nb,r.apply(this,arguments)-y)),x=Math.min(Math.abs(_)/h,a.apply(this,arguments)),v=x*(_<0?-1:1);for(s=0;s0&&(d+=f);for(null!=e?p.sort((function(t,n){return e(g[t],g[n])})):null!=n&&p.sort((function(t,e){return n(o[t],o[e])})),s=0,u=d?(_-h*v)/d:0;s0?f*u:0)+v,g[c]={data:o[c],index:s,value:f,startAngle:y,endAngle:l,padAngle:x};return g}return o.value=function(e){return arguments.length?(t="function"==typeof e?e:jm(+e),o):t},o.sortValues=function(t){return arguments.length?(e=t,n=null,o):e},o.sort=function(t){return arguments.length?(n=t,e=null,o):n},o.startAngle=function(t){return arguments.length?(i="function"==typeof t?t:jm(+t),o):i},o.endAngle=function(t){return arguments.length?(r="function"==typeof t?t:jm(+t),o):r},o.padAngle=function(t){return arguments.length?(a="function"==typeof t?t:jm(+t),o):a},o}db.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:this._context.lineTo(t,e)}}};var wb=Tb(pb);function Sb(t){this._curve=t}function Tb(t){function e(e){return new Sb(t(e))}return e._curve=t,e}function Ab(t){var e=t.curve;return t.angle=t.x,delete t.x,t.radius=t.y,delete t.y,t.curve=function(t){return arguments.length?e(Tb(t)):e()._curve},t}function Pb(){return Ab(_b().curve(wb))}function Cb(){var t=xb().curve(wb),e=t.curve,n=t.lineX0,i=t.lineX1,r=t.lineY0,a=t.lineY1;return t.angle=t.x,delete t.x,t.startAngle=t.x0,delete t.x0,t.endAngle=t.x1,delete t.x1,t.radius=t.y,delete t.y,t.innerRadius=t.y0,delete t.y0,t.outerRadius=t.y1,delete t.y1,t.lineStartAngle=function(){return Ab(n())},delete t.lineX0,t.lineEndAngle=function(){return Ab(i())},delete t.lineX1,t.lineInnerRadius=function(){return Ab(r())},delete t.lineY0,t.lineOuterRadius=function(){return Ab(a())},delete t.lineY1,t.curve=function(t){return arguments.length?e(Tb(t)):e()._curve},t}function Mb(t,e){return[(e=+e)*Math.cos(t-=Math.PI/2),e*Math.sin(t)]}Sb.prototype={areaStart:function(){this._curve.areaStart()},areaEnd:function(){this._curve.areaEnd()},lineStart:function(){this._curve.lineStart()},lineEnd:function(){this._curve.lineEnd()},point:function(t,e){this._curve.point(e*Math.sin(t),e*-Math.cos(t))}};var Lb=Array.prototype.slice;function Eb(t){return t.source}function kb(t){return t.target}function Vb(t){var e=Eb,n=kb,i=gb,r=yb,a=null;function o(){var o,s=Lb.call(arguments),c=e.apply(this,s),u=n.apply(this,s);if(a||(a=o=Ur()),t(a,+i.apply(this,(s[0]=c,s)),+r.apply(this,s),+i.apply(this,(s[0]=u,s)),+r.apply(this,s)),o)return a=null,o+""||null}return o.source=function(t){return arguments.length?(e=t,o):e},o.target=function(t){return arguments.length?(n=t,o):n},o.x=function(t){return arguments.length?(i="function"==typeof t?t:jm(+t),o):i},o.y=function(t){return arguments.length?(r="function"==typeof t?t:jm(+t),o):r},o.context=function(t){return arguments.length?(a=null==t?null:t,o):a},o}function Gb(t,e,n,i,r){t.moveTo(e,n),t.bezierCurveTo(e=(e+i)/2,n,e,r,i,r)}function Ob(t,e,n,i,r){t.moveTo(e,n),t.bezierCurveTo(e,n=(n+r)/2,i,n,i,r)}function Rb(t,e,n,i,r){var a=Mb(e,n),o=Mb(e,n=(n+r)/2),s=Mb(i,n),c=Mb(i,r);t.moveTo(a[0],a[1]),t.bezierCurveTo(o[0],o[1],s[0],s[1],c[0],c[1])}function Ib(){return Vb(Gb)}function Nb(){return Vb(Ob)}function Db(){var t=Vb(Rb);return t.angle=t.x,delete t.x,t.radius=t.y,delete t.y,t}const Fb={draw:function(t,e){var n=Math.sqrt(e/tb);t.moveTo(n,0),t.arc(0,0,n,0,nb)}},zb={draw:function(t,e){var n=Math.sqrt(e/5)/2;t.moveTo(-3*n,-n),t.lineTo(-n,-n),t.lineTo(-n,-3*n),t.lineTo(n,-3*n),t.lineTo(n,-n),t.lineTo(3*n,-n),t.lineTo(3*n,n),t.lineTo(n,n),t.lineTo(n,3*n),t.lineTo(-n,3*n),t.lineTo(-n,n),t.lineTo(-3*n,n),t.closePath()}};var Xb=Math.sqrt(1/3),Bb=2*Xb;const Yb={draw:function(t,e){var n=Math.sqrt(e/Bb),i=n*Xb;t.moveTo(0,-n),t.lineTo(i,0),t.lineTo(0,n),t.lineTo(-i,0),t.closePath()}};var Hb=Math.sin(tb/10)/Math.sin(7*tb/10),jb=Math.sin(nb/10)*Hb,Ub=-Math.cos(nb/10)*Hb;const Wb={draw:function(t,e){var n=Math.sqrt(.8908130915292852*e),i=jb*n,r=Ub*n;t.moveTo(0,-n),t.lineTo(i,r);for(var a=1;a<5;++a){var o=nb*a/5,s=Math.cos(o),c=Math.sin(o);t.lineTo(c*n,-s*n),t.lineTo(s*i-c*r,c*i+s*r)}t.closePath()}},qb={draw:function(t,e){var n=Math.sqrt(e),i=-n/2;t.rect(i,i,n,n)}};var Qb=Math.sqrt(3);const Zb={draw:function(t,e){var n=-Math.sqrt(e/(3*Qb));t.moveTo(0,2*n),t.lineTo(-Qb*n,-n),t.lineTo(Qb*n,-n),t.closePath()}};var Kb=-.5,$b=Math.sqrt(3)/2,Jb=1/Math.sqrt(12),tw=3*(Jb/2+1);const ew={draw:function(t,e){var n=Math.sqrt(e/tw),i=n/2,r=n*Jb,a=i,o=n*Jb+n,s=-a,c=o;t.moveTo(i,r),t.lineTo(a,o),t.lineTo(s,c),t.lineTo(Kb*i-$b*r,$b*i+Kb*r),t.lineTo(Kb*a-$b*o,$b*a+Kb*o),t.lineTo(Kb*s-$b*c,$b*s+Kb*c),t.lineTo(Kb*i+$b*r,Kb*r-$b*i),t.lineTo(Kb*a+$b*o,Kb*o-$b*a),t.lineTo(Kb*s+$b*c,Kb*c-$b*s),t.closePath()}};var nw=[Fb,zb,Yb,qb,Wb,Zb,ew];function iw(){var t=jm(Fb),e=jm(64),n=null;function i(){var i;if(n||(n=i=Ur()),t.apply(this,arguments).draw(n,+e.apply(this,arguments)),i)return n=null,i+""||null}return i.type=function(e){return arguments.length?(t="function"==typeof e?e:jm(e),i):t},i.size=function(t){return arguments.length?(e="function"==typeof t?t:jm(+t),i):e},i.context=function(t){return arguments.length?(n=null==t?null:t,i):n},i}function rw(){}function aw(t,e,n){t._context.bezierCurveTo((2*t._x0+t._x1)/3,(2*t._y0+t._y1)/3,(t._x0+2*t._x1)/3,(t._y0+2*t._y1)/3,(t._x0+4*t._x1+e)/6,(t._y0+4*t._y1+n)/6)}function ow(t){this._context=t}function sw(t){return new ow(t)}function cw(t){this._context=t}function uw(t){return new cw(t)}function lw(t){this._context=t}function fw(t){return new lw(t)}function hw(t,e){this._basis=new ow(t),this._beta=e}ow.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:aw(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:aw(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}},cw.prototype={areaStart:rw,areaEnd:rw,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x2,this._y2),this._context.closePath();break;case 2:this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break;case 3:this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4)}},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x2=t,this._y2=e;break;case 1:this._point=2,this._x3=t,this._y3=e;break;case 2:this._point=3,this._x4=t,this._y4=e,this._context.moveTo((this._x0+4*this._x1+t)/6,(this._y0+4*this._y1+e)/6);break;default:aw(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}},lw.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var n=(this._x0+4*this._x1+t)/6,i=(this._y0+4*this._y1+e)/6;this._line?this._context.lineTo(n,i):this._context.moveTo(n,i);break;case 3:this._point=4;default:aw(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}},hw.prototype={lineStart:function(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function(){var t=this._x,e=this._y,n=t.length-1;if(n>0)for(var i,r=t[0],a=e[0],o=t[n]-r,s=e[n]-a,c=-1;++c<=n;)i=c/n,this._basis.point(this._beta*t[c]+(1-this._beta)*(r+i*o),this._beta*e[c]+(1-this._beta)*(a+i*s));this._x=this._y=null,this._basis.lineEnd()},point:function(t,e){this._x.push(+t),this._y.push(+e)}};const dw=function t(e){function n(t){return 1===e?new ow(t):new hw(t,e)}return n.beta=function(e){return t(+e)},n}(.85);function pw(t,e,n){t._context.bezierCurveTo(t._x1+t._k*(t._x2-t._x0),t._y1+t._k*(t._y2-t._y0),t._x2+t._k*(t._x1-e),t._y2+t._k*(t._y1-n),t._x2,t._y2)}function gw(t,e){this._context=t,this._k=(1-e)/6}gw.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:pw(this,this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2,this._x1=t,this._y1=e;break;case 2:this._point=3;default:pw(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const yw=function t(e){function n(t){return new gw(t,e)}return n.tension=function(e){return t(+e)},n}(0);function _w(t,e){this._context=t,this._k=(1-e)/6}_w.prototype={areaStart:rw,areaEnd:rw,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:pw(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const xw=function t(e){function n(t){return new _w(t,e)}return n.tension=function(e){return t(+e)},n}(0);function vw(t,e){this._context=t,this._k=(1-e)/6}vw.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:pw(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const mw=function t(e){function n(t){return new vw(t,e)}return n.tension=function(e){return t(+e)},n}(0);function bw(t,e,n){var i=t._x1,r=t._y1,a=t._x2,o=t._y2;if(t._l01_a>Jm){var s=2*t._l01_2a+3*t._l01_a*t._l12_a+t._l12_2a,c=3*t._l01_a*(t._l01_a+t._l12_a);i=(i*s-t._x0*t._l12_2a+t._x2*t._l01_2a)/c,r=(r*s-t._y0*t._l12_2a+t._y2*t._l01_2a)/c}if(t._l23_a>Jm){var u=2*t._l23_2a+3*t._l23_a*t._l12_a+t._l12_2a,l=3*t._l23_a*(t._l23_a+t._l12_a);a=(a*u+t._x1*t._l23_2a-e*t._l12_2a)/l,o=(o*u+t._y1*t._l23_2a-n*t._l12_2a)/l}t._context.bezierCurveTo(i,r,a,o,t._x2,t._y2)}function ww(t,e){this._context=t,this._alpha=e}ww.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){if(t=+t,e=+e,this._point){var n=this._x2-t,i=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+i*i,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3;default:bw(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const Sw=function t(e){function n(t){return e?new ww(t,e):new gw(t,0)}return n.alpha=function(e){return t(+e)},n}(.5);function Tw(t,e){this._context=t,this._alpha=e}Tw.prototype={areaStart:rw,areaEnd:rw,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,e){if(t=+t,e=+e,this._point){var n=this._x2-t,i=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+i*i,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:bw(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const Aw=function t(e){function n(t){return e?new Tw(t,e):new _w(t,0)}return n.alpha=function(e){return t(+e)},n}(.5);function Pw(t,e){this._context=t,this._alpha=e}Pw.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){if(t=+t,e=+e,this._point){var n=this._x2-t,i=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+i*i,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:bw(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const Cw=function t(e){function n(t){return e?new Pw(t,e):new vw(t,0)}return n.alpha=function(e){return t(+e)},n}(.5);function Mw(t){this._context=t}function Lw(t){return new Mw(t)}function Ew(t){return t<0?-1:1}function kw(t,e,n){var i=t._x1-t._x0,r=e-t._x1,a=(t._y1-t._y0)/(i||r<0&&-0),o=(n-t._y1)/(r||i<0&&-0),s=(a*r+o*i)/(i+r);return(Ew(a)+Ew(o))*Math.min(Math.abs(a),Math.abs(o),.5*Math.abs(s))||0}function Vw(t,e){var n=t._x1-t._x0;return n?(3*(t._y1-t._y0)/n-e)/2:e}function Gw(t,e,n){var i=t._x0,r=t._y0,a=t._x1,o=t._y1,s=(a-i)/3;t._context.bezierCurveTo(i+s,r+s*e,a-s,o-s*n,a,o)}function Ow(t){this._context=t}function Rw(t){this._context=new Iw(t)}function Iw(t){this._context=t}function Nw(t){return new Ow(t)}function Dw(t){return new Rw(t)}function Fw(t){this._context=t}function zw(t){var e,n,i=t.length-1,r=new Array(i),a=new Array(i),o=new Array(i);for(r[0]=0,a[0]=2,o[0]=t[0]+2*t[1],e=1;e=0;--e)r[e]=(o[e]-r[e+1])/a[e];for(a[i-1]=(t[i]+r[i-1])/2,e=0;e1)for(var n,i,r,a=1,o=t[e[0]],s=o.length;a=0;)n[e]=e;return n}function qw(t,e){return t[e]}function Qw(){var t=jm([]),e=Ww,n=Uw,i=qw;function r(r){var a,o,s=t.apply(this,arguments),c=r.length,u=s.length,l=new Array(u);for(a=0;a0){for(var n,i,r,a=0,o=t[0].length;a0)for(var n,i,r,a,o,s,c=0,u=t[e[0]].length;c0?(i[0]=a,i[1]=a+=r):r<0?(i[1]=o,i[0]=o+=r):(i[0]=0,i[1]=r)}function $w(t,e){if((n=t.length)>0){for(var n,i=0,r=t[e[0]],a=r.length;i0&&(i=(n=t[e[0]]).length)>0){for(var n,i,r,a=0,o=1;oa&&(a=e,i=n);return i}function nS(t){var e=t.map(iS);return Ww(t).sort((function(t,n){return e[t]-e[n]}))}function iS(t){for(var e,n=0,i=-1,r=t.length;++i=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,e),this._context.lineTo(t,e);else{var n=this._x*(1-this._t)+t*this._t;this._context.lineTo(n,this._y),this._context.lineTo(n,e)}}this._x=t,this._y=e}};var sS="%Y-%m-%dT%H:%M:%S.%LZ",cS=Date.prototype.toISOString?function(t){return t.toISOString()}:y_(sS);const uS=cS;var lS=+new Date("2000-01-01T00:00:00.000Z")?function(t){var e=new Date(t);return isNaN(e)?null:e}:__(sS);const fS=lS;function hS(t,e,n){var i=new Un,r=e;return null==e?(i.restart(t,e,n),i):(e=+e,n=null==n?Hn():+n,i.restart((function a(o){o+=r,i.restart(a,r+=e,n),t(o)}),e,n),i)}function dS(t){return function(){return t}}function pS(t){return t[0]}function gS(t){return t[1]}function yS(){this._=null}function _S(t){t.U=t.C=t.L=t.R=t.P=t.N=null}function xS(t,e){var n=e,i=e.R,r=n.U;r?r.L===n?r.L=i:r.R=i:t._=i,i.U=r,n.U=i,n.R=i.L,n.R&&(n.R.U=n),i.L=n}function vS(t,e){var n=e,i=e.L,r=n.U;r?r.L===n?r.L=i:r.R=i:t._=i,i.U=r,n.U=i,n.L=i.R,n.L&&(n.L.U=n),i.R=n}function mS(t){for(;t.L;)t=t.L;return t}yS.prototype={constructor:yS,insert:function(t,e){var n,i,r;if(t){if(e.P=t,e.N=t.N,t.N&&(t.N.P=e),t.N=e,t.R){for(t=t.R;t.L;)t=t.L;t.L=e}else t.R=e;n=t}else this._?(t=mS(this._),e.P=null,e.N=t,t.P=t.L=e,n=t):(e.P=e.N=null,this._=e,n=null);for(e.L=e.R=null,e.U=n,e.C=!0,t=e;n&&n.C;)n===(i=n.U).L?(r=i.R)&&r.C?(n.C=r.C=!1,i.C=!0,t=i):(t===n.R&&(xS(this,n),n=(t=n).U),n.C=!1,i.C=!0,vS(this,i)):(r=i.L)&&r.C?(n.C=r.C=!1,i.C=!0,t=i):(t===n.L&&(vS(this,n),n=(t=n).U),n.C=!1,i.C=!0,xS(this,i)),n=t.U;this._.C=!1},remove:function(t){t.N&&(t.N.P=t.P),t.P&&(t.P.N=t.N),t.N=t.P=null;var e,n,i,r=t.U,a=t.L,o=t.R;if(n=a?o?mS(o):a:o,r?r.L===t?r.L=n:r.R=n:this._=n,a&&o?(i=n.C,n.C=t.C,n.L=a,a.U=n,n!==o?(r=n.U,n.U=t.U,t=n.R,r.L=t,n.R=o,o.U=n):(n.U=r,r=n,t=n.R)):(i=t.C,t=n),t&&(t.U=r),!i)if(t&&t.C)t.C=!1;else{do{if(t===this._)break;if(t===r.L){if((e=r.R).C&&(e.C=!1,r.C=!0,xS(this,r),e=r.R),e.L&&e.L.C||e.R&&e.R.C){e.R&&e.R.C||(e.L.C=!1,e.C=!0,vS(this,e),e=r.R),e.C=r.C,r.C=e.R.C=!1,xS(this,r),t=this._;break}}else if((e=r.L).C&&(e.C=!1,r.C=!0,vS(this,r),e=r.L),e.L&&e.L.C||e.R&&e.R.C){e.L&&e.L.C||(e.R.C=!1,e.C=!0,xS(this,e),e=r.L),e.C=r.C,r.C=e.L.C=!1,vS(this,r),t=this._;break}e.C=!0,t=r,r=r.U}while(!t.C);t&&(t.C=!1)}}};const bS=yS;function wS(t,e,n,i){var r=[null,null],a=US.push(r)-1;return r.left=t,r.right=e,n&&TS(r,t,e,n),i&&TS(r,e,t,i),HS[t.index].halfedges.push(a),HS[e.index].halfedges.push(a),r}function SS(t,e,n){var i=[e,n];return i.left=t,i}function TS(t,e,n,i){t[0]||t[1]?t.left===n?t[1]=i:t[0]=i:(t[0]=i,t.left=e,t.right=n)}function AS(t,e,n,i,r){var a,o=t[0],s=t[1],c=o[0],u=o[1],l=0,f=1,h=s[0]-c,d=s[1]-u;if(a=e-c,h||!(a>0)){if(a/=h,h<0){if(a0){if(a>f)return;a>l&&(l=a)}if(a=i-c,h||!(a<0)){if(a/=h,h<0){if(a>f)return;a>l&&(l=a)}else if(h>0){if(a0)){if(a/=d,d<0){if(a0){if(a>f)return;a>l&&(l=a)}if(a=r-u,d||!(a<0)){if(a/=d,d<0){if(a>f)return;a>l&&(l=a)}else if(d>0){if(a0||f<1)||(l>0&&(t[0]=[c+l*h,u+l*d]),f<1&&(t[1]=[c+f*h,u+f*d]),!0)}}}}}function PS(t,e,n,i,r){var a=t[1];if(a)return!0;var o,s,c=t[0],u=t.left,l=t.right,f=u[0],h=u[1],d=l[0],p=l[1],g=(f+d)/2,y=(h+p)/2;if(p===h){if(g=i)return;if(f>d){if(c){if(c[1]>=r)return}else c=[g,n];a=[g,r]}else{if(c){if(c[1]1)if(f>d){if(c){if(c[1]>=r)return}else c=[(n-s)/o,n];a=[(r-s)/o,r]}else{if(c){if(c[1]=i)return}else c=[e,o*e+s];a=[i,o*i+s]}else{if(c){if(c[0]=-qS)){var d=c*c+u*u,p=l*l+f*f,g=(f*d-u*p)/h,y=(c*p-l*d)/h,_=kS.pop()||new VS;_.arc=t,_.site=r,_.x=g+o,_.y=(_.cy=y+s)+Math.sqrt(g*g+y*y),t.circle=_;for(var x=null,v=jS._;v;)if(_.yWS)s=s.L;else{if(!((r=a-BS(s,o))>WS)){i>-WS?(e=s.P,n=s):r>-WS?(e=s,n=s.N):e=n=s;break}if(!s.R){e=s;break}s=s.R}!function(t){HS[t.index]={site:t,halfedges:[]}}(t);var c=NS(t);if(YS.insert(e,c),e||n){if(e===n)return OS(e),n=NS(e.site),YS.insert(c,n),c.edge=n.edge=wS(e.site,c.site),GS(e),void GS(n);if(n){OS(e),OS(n);var u=e.site,l=u[0],f=u[1],h=t[0]-l,d=t[1]-f,p=n.site,g=p[0]-l,y=p[1]-f,_=2*(h*y-d*g),x=h*h+d*d,v=g*g+y*y,m=[(y*x-d*v)/_+l,(h*v-g*x)/_+f];TS(n.edge,u,p,m),c.edge=wS(u,t,null,m),n.edge=wS(t,p,null,m),GS(e),GS(n)}else c.edge=wS(e.site,c.site)}}function XS(t,e){var n=t.site,i=n[0],r=n[1],a=r-e;if(!a)return i;var o=t.P;if(!o)return-1/0;var s=(n=o.site)[0],c=n[1],u=c-e;if(!u)return s;var l=s-i,f=1/a-1/u,h=l/u;return f?(-h+Math.sqrt(h*h-2*f*(l*l/(-2*u)-c+u/2+r-a/2)))/f+i:(i+s)/2}function BS(t,e){var n=t.N;if(n)return XS(n,e);var i=t.site;return i[1]===e?i[0]:1/0}var YS,HS,jS,US,WS=1e-6,qS=1e-12;function QS(t,e,n){return(t[0]-n[0])*(e[1]-t[1])-(t[0]-e[0])*(n[1]-t[1])}function ZS(t,e){return e[1]-t[1]||e[0]-t[0]}function KS(t,e){var n,i,r,a=t.sort(ZS).pop();for(US=[],HS=new Array(t.length),YS=new bS,jS=new bS;;)if(r=ES,a&&(!r||a[1]WS||Math.abs(r[0][1]-r[1][1])>WS)||delete US[a]}(o,s,c,u),function(t,e,n,i){var r,a,o,s,c,u,l,f,h,d,p,g,y=HS.length,_=!0;for(r=0;rWS||Math.abs(g-h)>WS)&&(c.splice(s,0,US.push(SS(o,d,Math.abs(p-t)WS?[t,Math.abs(f-t)WS?[Math.abs(h-i)WS?[n,Math.abs(f-n)WS?[Math.abs(h-e)=s)return null;var c=t-r.site[0],u=e-r.site[1],l=c*c+u*u;do{r=a.cells[i=o],o=null,r.halfedges.forEach((function(n){var i=a.edges[n],s=i.left;if(s!==r.site&&s||(s=i.right)){var c=t-s[0],u=e-s[1],f=c*c+u*u;fi?(i+r)/2:Math.min(0,i)||Math.max(0,r),o>a?(a+o)/2:Math.min(0,a)||Math.max(0,o))}function hT(){var t,e,n=oT,i=sT,r=fT,a=uT,o=lT,s=[0,1/0],c=[[-1/0,-1/0],[1/0,1/0]],u=250,l=Vp,f=ht("start","zoom","end"),h=500,d=0;function p(t){t.property("__zoom",cT).on("wheel.zoom",b).on("mousedown.zoom",w).on("dblclick.zoom",S).filter(o).on("touchstart.zoom",T).on("touchmove.zoom",A).on("touchend.zoom touchcancel.zoom",P).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function g(t,e){return(e=Math.max(s[0],Math.min(s[1],e)))===t.k?t:new eT(e,t.x,t.y)}function y(t,e,n){var i=e[0]-n[0]*t.k,r=e[1]-n[1]*t.k;return i===t.x&&r===t.y?t:new eT(t.k,i,r)}function _(t){return[(+t[0][0]+ +t[1][0])/2,(+t[0][1]+ +t[1][1])/2]}function x(t,e,n){t.on("start.zoom",(function(){v(this,arguments).start()})).on("interrupt.zoom end.zoom",(function(){v(this,arguments).end()})).tween("zoom",(function(){var t=this,r=arguments,a=v(t,r),o=i.apply(t,r),s=null==n?_(o):"function"==typeof n?n.apply(t,r):n,c=Math.max(o[1][0]-o[0][0],o[1][1]-o[0][1]),u=t.__zoom,f="function"==typeof e?e.apply(t,r):e,h=l(u.invert(s).concat(c/u.k),f.invert(s).concat(c/f.k));return function(t){if(1===t)t=f;else{var e=h(t),n=c/e[2];t=new eT(n,s[0]-e[0]*n,s[1]-e[1]*n)}a.zoom(null,t)}}))}function v(t,e,n){return!n&&t.__zooming||new m(t,e)}function m(t,e){this.that=t,this.args=e,this.active=0,this.extent=i.apply(t,e),this.taps=0}function b(){if(n.apply(this,arguments)){var t=v(this,arguments),e=this.__zoom,i=Math.max(s[0],Math.min(s[1],e.k*Math.pow(2,a.apply(this,arguments)))),o=Gn(this);if(t.wheel)t.mouse[0][0]===o[0]&&t.mouse[0][1]===o[1]||(t.mouse[1]=e.invert(t.mouse[0]=o)),clearTimeout(t.wheel);else{if(e.k===i)return;t.mouse=[o,e.invert(o)],ai(this),t.start()}aT(),t.wheel=setTimeout(u,150),t.zoom("mouse",r(y(g(e,i),t.mouse[0],t.mouse[1]),t.extent,c))}function u(){t.wheel=null,t.end()}}function w(){if(!e&&n.apply(this,arguments)){var t=v(this,arguments,!0),i=Te(le.view).on("mousemove.zoom",u,!0).on("mouseup.zoom",l,!0),a=Gn(this),o=le.clientX,s=le.clientY;Ce(le.view),rT(),t.mouse=[a,this.__zoom.invert(a)],ai(this),t.start()}function u(){if(aT(),!t.moved){var e=le.clientX-o,n=le.clientY-s;t.moved=e*e+n*n>d}t.zoom("mouse",r(y(t.that.__zoom,t.mouse[0]=Gn(t.that),t.mouse[1]),t.extent,c))}function l(){i.on("mousemove.zoom mouseup.zoom",null),Me(le.view,t.moved),aT(),t.end()}}function S(){if(n.apply(this,arguments)){var t=this.__zoom,e=Gn(this),a=t.invert(e),o=t.k*(le.shiftKey?.5:2),s=r(y(g(t,o),e,a),i.apply(this,arguments),c);aT(),u>0?Te(this).transition().duration(u).call(x,s,e):Te(this).call(p.transform,s)}}function T(){if(n.apply(this,arguments)){var e,i,r,a,o=le.touches,s=o.length,c=v(this,arguments,le.changedTouches.length===s);for(rT(),i=0;i{t.exports=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")},t.exports.__esModule=!0,t.exports.default=t.exports},728:t=>{function e(t,e){for(var n=0;n{t.exports=function(t){return t&&t.__esModule?t:{default:t}},t.exports.__esModule=!0,t.exports.default=t.exports},698:t=>{function e(n){return t.exports=e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},t.exports.__esModule=!0,t.exports.default=t.exports,e(n)}t.exports=e,t.exports.__esModule=!0,t.exports.default=t.exports}},e={};function n(i){var r=e[i];if(void 0!==r)return r.exports;var a=e[i]={exports:{}};return t[i].call(a.exports,a,a.exports,n),a.exports}n.d=(t,e)=>{for(var i in e)n.o(e,i)&&!n.o(t,i)&&Object.defineProperty(t,i,{enumerable:!0,get:e[i]})},n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),n.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},(()=>{"use strict";var t=n(836),e=n(698),i=t(n(690)),r=t(n(728)),a=t(n(208));function o(t){if("function"!=typeof WeakMap)return null;var e=new WeakMap,n=new WeakMap;return(o=function(t){return t?n:e})(t)}!function(t,n){if(t&&t.__esModule)return t;if(null===t||"object"!==e(t)&&"function"!=typeof t)return{default:t};var i=o(n);if(i&&i.has(t))return i.get(t);var r={},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var s in t)if("default"!==s&&Object.prototype.hasOwnProperty.call(t,s)){var c=a?Object.getOwnPropertyDescriptor(t,s):null;c&&(c.get||c.set)?Object.defineProperty(r,s,c):r[s]=t[s]}r.default=t,i&&i.set(t,r)}(n(693));var s=new(function(){function t(){(0,i.default)(this,t),this.elements=document.getElementsByClassName("c4g_chart"),this.charts=[]}return(0,r.default)(t,[{key:"generateCharts",value:function(){for(var t=this,e=this,n=0,i=function(){var i=t.elements.item(n);if(i&&i.dataset&&i.dataset.chart){var r="/visualization-api/fetchChart/"+i.dataset.chart;fetch(r).then((function(t){return t.json()})).then((function(n){n=t.setTickConfigForYAxis(n);var r={bindto:"#"+i.id,base:n,json:{},range:function(t){document.querySelectorAll(".c4g_chart_range_button").forEach((function(e){e.getAttribute("data-range")===t?e.classList.add("range-active"):e.classList.remove("range-active")})),this.json=e.parseJson(this.bindto,this.base,this,t)},update:function(){this.chart=this.json?a.default.generate(this.json):""}};r.json=e.parseJson("#"+i.id,n,r),n.axis&&void 0!==n.axis.x.tick&&void 0!==n.axis.x.tick.format&&(r.format=n.axis.x.tick.format,r.json.axis.x.tick.format=function(t){return e.getChartByBindId(i.id).format[t]}),n.axis&&void 0!==n.axis.x.tick&&"1"==typeof n.axis.x.tick.rotate&&(r.rotate=n.axis.x.tick.rotate,r.json.axis.x.tick.rotate=function(t){return e.getChartByBindId(i.id).rotate[t]}),e.charts.push(r),r.update()}))}n+=1};n0&&(t.axis.y.tick.count=e)}if(t.axis.y2.tickFormat&&(t.axis.y2.tick||(t.axis.y2.tick={}),t.axis.y2.tick.format=function(e){return parseFloat(e).toFixed(3)+t.axis.y2.tickFormat}),t.axis.y2.labelCount){t.axis.y2.tick||(t.axis.y2.tick={});var n=parseInt(t.axis.y2.labelCount,10);n>0&&(t.axis.y2.tick.count=n)}}return t}},{key:"parseJson",value:function(t,e,n){var i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"range_default",r={bindto:t,data:{xs:{},columns:[],types:{},colors:{},names:{},groups:[],redirects:{}},axis:{},tooltip:{format:{}},zoom:{enabled:!1},points:{enabled:!0},legend:{enabled:!0},tooltips:{enabled:!0},labels:{enabled:!1},oneLabelPerElement:{enabled:!1},grid:{x:{show:!1},y:{show:!1}}};if(!e)return"";for(var a,o,s=0;s=a&&e.data[s].dataPoints[f].x<=o;(h||d)&&(u.push(e.data[s].dataPoints[f].x),l.push(e.data[s].dataPoints[f].y)),f+=1}r.data.columns.push(u,l),"areaspline"==e.data[s].type&&(e.data[s].type="area-spline");var p="gantt"!==e.data[s].type?e.data[s].type:"line";if(r.data.types["y"+s]=p,void 0!==e.data[s].name&&(r.data.names["y"+s]=e.data[s].name),void 0!==e.data[s].group){for(;void 0===r.data.groups[e.data[s].group];)r.data.groups.push([]);r.data.groups[e.data[s].group].push("y"+s)}if(void 0!==e.data[s].group){for(;void 0===r.data.groups[e.data[s].group];)r.data.groups.push([]);r.data.groups[e.data[s].group].push("y"+s)}void 0!==e.data[s].dataPoints[0].redirect&&(r.data.redirects["y"+s]=e.data[s].dataPoints[0].redirect),e.data[s].tooltipExtension&&(c=!0),s+=1}if(void 0!==e.grid&&(e.grid.x.show&&(r.grid.x.show=!0),e.grid.y.show&&(r.grid.y.show=!0)),void 0!==e.subchart&&(r.subchart=e.subchart),void 0!==e.zoom&&void 0!==e.zoom.enabled&&(r.zoom.enabled=e.zoom.enabled,r.zoom.type="scroll"),void 0!==e.points&&void 0!==e.points.enabled&&(r.point={show:e.points.enabled}),void 0!==e.legend&&void 0!==e.legend.enabled&&(r.legend={hide:!e.legend.enabled}),void 0!==e.labels&&void 0!==e.labels.enabled&&(r.data.labels=e.labels.enabled,"pie"===e.data[0].type&&(r.pie||(r.pie={}),r.pie.label={show:e.labels.enabled}),void 0!==e.oneLabelPerElement&&void 0!==e.oneLabelPerElement.enabled&&e.oneLabelPerElement.enabled)){var g=this;r.data.labels={format:function(e,n,i,r){var a=g.getChartByBindId(t.substr(1,t.length));return n&&0==i?a.json.data.names[n]:""}}}if(void 0!==e.tooltips&&void 0!==e.tooltips.enabled&&e.tooltips.enabled&&void 0!==e.tooltip&&void 0!==e.tooltip.format&&void 0!==e.tooltip.format.title){n.tooltipformattitle=e.tooltip.format.title;var y=this;r.tooltip.format.title=function(e){return y.getChartByBindId(t.substr(1,t.length)).tooltipformattitle[e]}}else r.tooltip.show=e.tooltips.enabled&&"undefined"!==e.tooltips.enabled;r.tooltip.format.value=function(t,e,n,i){return"y0"===n?t+" "+r.axis.y.tickFormat:"y1"===n&&r.axis.y2.show?t+" "+r.axis.y2.tickFormat:r.data.axes[n]?t+" "+r.axis[r.data.axes[n]].tickFormat:t},c&&("line"===e.data[0].type?r.tooltip.contents=function(t,n,i,a){var o="
";if("datetime"===e.data[0].xType){var s=new Date(1e3*t[0].x);o+="
"+(s=s.toLocaleDateString("de"))+"
"}else o+="
"+t[0].x+"
";o+="
";for(var c=0;c",o+="
",o+="
"+t[c].name+": "+i(t[c].value,1,u)+"
",o+="
"+e.data[c].tooltipExtension+"
",o+="
"}return(o+="
")+""}:r.tooltip.contents=function(t,n,i,r){var a="
";a+="
";for(var o=0;o"+e.data[s].tooltipExtension+"
",a+="
"}return(a+="")+""});var _=this;return r.data.onclick=function(e,n){var i=_.getChartByBindId(t.substr(1,t.length)),r=i.json.data.redirects[e.id];r&&0!=r&&(window.location=i.json.data.redirects[e.id])},r}},{key:"getChartByBindId",value:function(t){for(var e=0;e