diff options
-rw-r--r-- | assets/Makefile | 7 | ||||
-rw-r--r-- | assets/assets/site.css | 3 | ||||
-rw-r--r-- | assets/assets/site.js | 34 | ||||
-rw-r--r-- | assets/controllers/time_controller.js | 19 | ||||
-rw-r--r-- | assets/css/chat.css | 45 | ||||
-rw-r--r-- | assets/css/dropdown.css | 26 | ||||
-rw-r--r-- | assets/package-lock.json | 49 | ||||
-rw-r--r-- | assets/package.json | 4 | ||||
-rw-r--r-- | assets/script/watch.site.js | 2 | ||||
-rw-r--r-- | assets/site.css | 3 | ||||
-rw-r--r-- | assets/site.js | 30 | ||||
-rw-r--r-- | assets/tailwind.config.js | 4 | ||||
-rw-r--r-- | priv/static/assets/alcoolog.js.gz | bin | 44 -> 44 bytes | |||
-rw-r--r-- | priv/static/assets/site.css | 2 | ||||
-rw-r--r-- | priv/static/assets/site.css.br | bin | 4100 -> 7957 bytes | |||
-rw-r--r-- | priv/static/assets/site.css.gz | bin | 4697 -> 9187 bytes | |||
-rw-r--r-- | priv/static/assets/site.js | 33 | ||||
-rw-r--r-- | priv/static/assets/site.js.br | bin | 20930 -> 61103 bytes | |||
-rw-r--r-- | priv/static/assets/site.js.gz | bin | 23492 -> 68949 bytes |
19 files changed, 234 insertions, 27 deletions
diff --git a/assets/Makefile b/assets/Makefile index 02a4048..5a376d9 100644 --- a/assets/Makefile +++ b/assets/Makefile @@ -13,6 +13,7 @@ FILES = ../priv/static/assets/site.css ../priv/static/assets/site.js ../priv/sta FILES_GZ := $(addsuffix .gz, $(FILES)) FILES_BR := $(addsuffix .br, $(FILES)) FILES_CONTROLLERS := $(shell find controllers/ -name '*.js') +FILES_CSS := $(shell find css/ -name '*.css') .PHONY: all all: node_modules $(FILES) $(FILES_GZ) $(FILES_BR) @@ -21,7 +22,7 @@ node_modules: package.json package-lock.json $(NPM) install @$(TOUCH) node_modules -../priv/static/assets/%.css: %.css +../priv/static/assets/%.css: %.css $(FILES_CSS) tailwind.config.js postcss.config.js NODE_ENV=production $(NPX) tailwindcss --postcss --minify -i $< -o $@ ../priv/static/assets/%.js: %.js $(FILES_CONTROLLERS) script/build.%.js @@ -54,9 +55,9 @@ watch: #watch_css watch_js .PHONY: watch_css watch_css: - NODE_ENV=development $(NPX) tailwindcss --input=site.css --output=assets/site.css --postcss --watch + NODE_ENV=development $(NPX) tailwindcss --input=site.css --output=../priv/static/assets/site.css --postcss --watch .PHONY: watch_js watch_js: - #NODE_ENV=development $(ESBUILD) site.js --bundle --sourcemap=inline --watch --outfile=assets/site.js + #NODE_ENV=development $(ESBUILD) site.js --bundle --sourcemap=inline --watch --outfile=../priv/static/assets/site.js NODE_ENV=development $(NODE) script/watch.site.js diff --git a/assets/assets/site.css b/assets/assets/site.css deleted file mode 100644 index 3010559..0000000 --- a/assets/assets/site.css +++ /dev/null @@ -1,3 +0,0 @@ -/*! tailwindcss v2.2.9 | MIT License | https://tailwindcss.com*/ - -/*! modern-normalize v1.1.0 | MIT License | https://github.com/sindresorhus/modern-normalize */html{-webkit-text-size-adjust:100%;line-height:1.15;-moz-tab-size:4;-o-tab-size:4;tab-size:4}body{font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji;margin:0}hr{color:inherit;height:0}abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}::-moz-focus-inner{border-style:none;padding:0}:-moz-focusring{outline:1px dotted ButtonText}:-moz-ui-invalid{box-shadow:none}legend{padding:0}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}button{background-color:transparent;background-image:none}fieldset,ol,ul{margin:0;padding:0}ol,ul{list-style:none}html{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}body{font-family:inherit;line-height:inherit}*,:after,:before{border:0 solid;box-sizing:border-box}hr{border-top-width:1px}img{border-style:solid}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{color:#a8a29e;opacity:1}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#a8a29e;opacity:1}input::-moz-placeholder, textarea::-moz-placeholder{color:#a8a29e;opacity:1}input:-ms-input-placeholder, textarea:-ms-input-placeholder{color:#a8a29e;opacity:1}input::placeholder,textarea::placeholder{color:#a8a29e;opacity:1}[role=button],button{cursor:pointer}:-moz-focusring{outline:auto}table{border-collapse:collapse}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}button,input,optgroup,select,textarea{color:inherit;line-height:inherit;padding:0}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[hidden]{display:none}*,:after,:before{--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-transform:translateX(var(--tw-translate-x)) translateY(var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-border-opacity:1;--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,0.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-blur:var(--tw-empty,/*!*/ /*!*/);--tw-brightness:var(--tw-empty,/*!*/ /*!*/);--tw-contrast:var(--tw-empty,/*!*/ /*!*/);--tw-grayscale:var(--tw-empty,/*!*/ /*!*/);--tw-hue-rotate:var(--tw-empty,/*!*/ /*!*/);--tw-invert:var(--tw-empty,/*!*/ /*!*/);--tw-saturate:var(--tw-empty,/*!*/ /*!*/);--tw-sepia:var(--tw-empty,/*!*/ /*!*/);--tw-drop-shadow:var(--tw-empty,/*!*/ /*!*/);--tw-filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);--tw-backdrop-blur:var(--tw-empty,/*!*/ /*!*/);--tw-backdrop-brightness:var(--tw-empty,/*!*/ /*!*/);--tw-backdrop-contrast:var(--tw-empty,/*!*/ /*!*/);--tw-backdrop-grayscale:var(--tw-empty,/*!*/ /*!*/);--tw-backdrop-hue-rotate:var(--tw-empty,/*!*/ /*!*/);--tw-backdrop-invert:var(--tw-empty,/*!*/ /*!*/);--tw-backdrop-opacity:var(--tw-empty,/*!*/ /*!*/);--tw-backdrop-saturate:var(--tw-empty,/*!*/ /*!*/);--tw-backdrop-sepia:var(--tw-empty,/*!*/ /*!*/);--tw-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);border-color:rgba(231,229,228,var(--tw-border-opacity))}.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.prose{color:#44403c;max-width:65ch}.prose [class~=lead]{color:#57534e;font-size:1.25em;line-height:1.6;margin-bottom:1.2em;margin-top:1.2em}.prose a{color:#1c1917;font-weight:500;text-decoration:underline}.prose strong{color:#1c1917;font-weight:600}.prose ol[type=A]{--list-counter-style:upper-alpha}.prose ol[type=a]{--list-counter-style:lower-alpha}.prose ol[type=A s]{--list-counter-style:upper-alpha}.prose ol[type=a s]{--list-counter-style:lower-alpha}.prose ol[type=I]{--list-counter-style:upper-roman}.prose ol[type=i]{--list-counter-style:lower-roman}.prose ol[type=I s]{--list-counter-style:upper-roman}.prose ol[type=i s]{--list-counter-style:lower-roman}.prose ol[type="1"]{--list-counter-style:decimal}.prose ol>li{padding-left:1.75em;position:relative}.prose ol>li:before{color:#78716c;content:counter(list-item,var(--list-counter-style,decimal)) ".";font-weight:400;left:0;position:absolute}.prose ul>li{padding-left:1.75em;position:relative}.prose ul>li:before{background-color:#d6d3d1;border-radius:50%;content:"";height:.375em;left:.25em;position:absolute;top:.6875em;width:.375em}.prose hr{border-color:#e7e5e4;border-top-width:1px;margin-bottom:3em;margin-top:3em}.prose blockquote{border-left-color:#e7e5e4;border-left-width:.25rem;color:#1c1917;font-style:italic;font-weight:500;margin-bottom:1.6em;margin-top:1.6em;padding-left:1em;quotes:"\201C""\201D""\2018""\2019"}.prose blockquote p:first-of-type:before{content:open-quote}.prose blockquote p:last-of-type:after{content:close-quote}.prose h1{color:#1c1917;font-size:2.25em;font-weight:800;line-height:1.1111111;margin-bottom:.8888889em;margin-top:0}.prose h2{color:#1c1917;font-size:1.5em;font-weight:700;line-height:1.3333333;margin-bottom:1em;margin-top:2em}.prose h3{font-size:1.25em;line-height:1.6;margin-bottom:.6em;margin-top:1.6em}.prose h3,.prose h4{color:#1c1917;font-weight:600}.prose h4{line-height:1.5;margin-bottom:.5em;margin-top:1.5em}.prose figure figcaption{color:#78716c;font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose code{color:#1c1917;font-size:.875em;font-weight:600}.prose code:after,.prose code:before{content:"`"}.prose a code{color:#1c1917}.prose pre{background-color:#292524;border-radius:.375rem;color:#e7e5e4;font-size:.875em;line-height:1.7142857;margin-bottom:1.7142857em;margin-top:1.7142857em;overflow-x:auto;padding:.8571429em 1.1428571em}.prose pre code{background-color:transparent;border-radius:0;border-width:0;color:inherit;font-family:inherit;font-size:inherit;font-weight:400;line-height:inherit;padding:0}.prose pre code:after,.prose pre code:before{content:none}.prose table{font-size:.875em;line-height:1.7142857;margin-bottom:2em;margin-top:2em;table-layout:auto;text-align:left;width:100%}.prose thead{border-bottom-color:#d6d3d1;border-bottom-width:1px;color:#1c1917;font-weight:600}.prose thead th{padding-bottom:.5714286em;padding-left:.5714286em;padding-right:.5714286em;vertical-align:bottom}.prose tbody tr{border-bottom-color:#e7e5e4;border-bottom-width:1px}.prose tbody tr:last-child{border-bottom-width:0}.prose tbody td{padding:.5714286em;vertical-align:top}.prose{font-size:1rem;line-height:1.75}.prose p{margin-bottom:1.25em;margin-top:1.25em}.prose figure,.prose img,.prose video{margin-bottom:2em;margin-top:2em}.prose figure>*{margin-bottom:0;margin-top:0}.prose h2 code{font-size:.875em}.prose h3 code{font-size:.9em}.prose ol,.prose ul{margin-bottom:1.25em;margin-top:1.25em}.prose li{margin-bottom:.5em;margin-top:.5em}.prose>ul>li p{margin-bottom:.75em;margin-top:.75em}.prose>ul>li>:first-child{margin-top:1.25em}.prose>ul>li>:last-child{margin-bottom:1.25em}.prose>ol>li>:first-child{margin-top:1.25em}.prose>ol>li>:last-child{margin-bottom:1.25em}.prose ol ol,.prose ol ul,.prose ul ol,.prose ul ul{margin-bottom:.75em;margin-top:.75em}.prose h2+*,.prose h3+*,.prose h4+*,.prose hr+*{margin-top:0}.prose thead th:first-child{padding-left:0}.prose thead th:last-child{padding-right:0}.prose tbody td:first-child{padding-left:0}.prose tbody td:last-child{padding-right:0}.prose>:first-child{margin-top:0}.prose>:last-child{margin-bottom:0}.prose-sm{font-size:.875rem;line-height:1.7142857}.prose-sm p{margin-bottom:1.1428571em;margin-top:1.1428571em}.prose-sm [class~=lead]{font-size:1.2857143em;line-height:1.5555556;margin-bottom:.8888889em;margin-top:.8888889em}.prose-sm blockquote{margin-bottom:1.3333333em;margin-top:1.3333333em;padding-left:1.1111111em}.prose-sm h1{font-size:2.1428571em;line-height:1.2;margin-bottom:.8em;margin-top:0}.prose-sm h2{font-size:1.4285714em;line-height:1.4;margin-bottom:.8em;margin-top:1.6em}.prose-sm h3{font-size:1.2857143em;line-height:1.5555556;margin-bottom:.4444444em;margin-top:1.5555556em}.prose-sm h4{line-height:1.4285714;margin-bottom:.5714286em;margin-top:1.4285714em}.prose-sm figure,.prose-sm img,.prose-sm video{margin-bottom:1.7142857em;margin-top:1.7142857em}.prose-sm figure>*{margin-bottom:0;margin-top:0}.prose-sm figure figcaption{font-size:.8571429em;line-height:1.3333333;margin-top:.6666667em}.prose-sm code{font-size:.8571429em}.prose-sm h2 code{font-size:.9em}.prose-sm h3 code{font-size:.8888889em}.prose-sm pre{border-radius:.25rem;font-size:.8571429em;line-height:1.6666667;margin-bottom:1.6666667em;margin-top:1.6666667em;padding:.6666667em 1em}.prose-sm ol,.prose-sm ul{margin-bottom:1.1428571em;margin-top:1.1428571em}.prose-sm li{margin-bottom:.2857143em;margin-top:.2857143em}.prose-sm ol>li{padding-left:1.5714286em}.prose-sm ol>li:before{left:0}.prose-sm ul>li{padding-left:1.5714286em}.prose-sm ul>li:before{height:.3571429em;left:.2142857em;top:.67857em;width:.3571429em}.prose-sm>ul>li p{margin-bottom:.5714286em;margin-top:.5714286em}.prose-sm>ul>li>:first-child{margin-top:1.1428571em}.prose-sm>ul>li>:last-child{margin-bottom:1.1428571em}.prose-sm>ol>li>:first-child{margin-top:1.1428571em}.prose-sm>ol>li>:last-child{margin-bottom:1.1428571em}.prose-sm ol ol,.prose-sm ol ul,.prose-sm ul ol,.prose-sm ul ul{margin-bottom:.5714286em;margin-top:.5714286em}.prose-sm hr{margin-bottom:2.8571429em;margin-top:2.8571429em}.prose-sm h2+*,.prose-sm h3+*,.prose-sm h4+*,.prose-sm hr+*{margin-top:0}.prose-sm table{font-size:.8571429em;line-height:1.5}.prose-sm thead th{padding-bottom:.6666667em;padding-left:1em;padding-right:1em}.prose-sm thead th:first-child{padding-left:0}.prose-sm thead th:last-child{padding-right:0}.prose-sm tbody td{padding:.6666667em 1em}.prose-sm tbody td:first-child{padding-left:0}.prose-sm tbody td:last-child{padding-right:0}.prose-sm>:first-child{margin-top:0}.prose-sm>:last-child{margin-bottom:0}.prose-lg{font-size:1.125rem;line-height:1.7777778}.prose-lg p{margin-bottom:1.3333333em;margin-top:1.3333333em}.prose-lg [class~=lead]{font-size:1.2222222em;line-height:1.4545455;margin-bottom:1.0909091em;margin-top:1.0909091em}.prose-lg blockquote{margin-bottom:1.6666667em;margin-top:1.6666667em;padding-left:1em}.prose-lg h1{font-size:2.6666667em;line-height:1;margin-bottom:.8333333em;margin-top:0}.prose-lg h2{font-size:1.6666667em;line-height:1.3333333;margin-bottom:1.0666667em;margin-top:1.8666667em}.prose-lg h3{font-size:1.3333333em;line-height:1.5;margin-bottom:.6666667em;margin-top:1.6666667em}.prose-lg h4{line-height:1.5555556;margin-bottom:.4444444em;margin-top:1.7777778em}.prose-lg figure,.prose-lg img,.prose-lg video{margin-bottom:1.7777778em;margin-top:1.7777778em}.prose-lg figure>*{margin-bottom:0;margin-top:0}.prose-lg figure figcaption{font-size:.8888889em;line-height:1.5;margin-top:1em}.prose-lg code{font-size:.8888889em}.prose-lg h2 code{font-size:.8666667em}.prose-lg h3 code{font-size:.875em}.prose-lg pre{border-radius:.375rem;font-size:.8888889em;line-height:1.75;margin-bottom:2em;margin-top:2em;padding:1em 1.5em}.prose-lg ol,.prose-lg ul{margin-bottom:1.3333333em;margin-top:1.3333333em}.prose-lg li{margin-bottom:.6666667em;margin-top:.6666667em}.prose-lg ol>li{padding-left:1.6666667em}.prose-lg ol>li:before{left:0}.prose-lg ul>li{padding-left:1.6666667em}.prose-lg ul>li:before{height:.3333333em;left:.2222222em;top:.72222em;width:.3333333em}.prose-lg>ul>li p{margin-bottom:.8888889em;margin-top:.8888889em}.prose-lg>ul>li>:first-child{margin-top:1.3333333em}.prose-lg>ul>li>:last-child{margin-bottom:1.3333333em}.prose-lg>ol>li>:first-child{margin-top:1.3333333em}.prose-lg>ol>li>:last-child{margin-bottom:1.3333333em}.prose-lg ol ol,.prose-lg ol ul,.prose-lg ul ol,.prose-lg ul ul{margin-bottom:.8888889em;margin-top:.8888889em}.prose-lg hr{margin-bottom:3.1111111em;margin-top:3.1111111em}.prose-lg h2+*,.prose-lg h3+*,.prose-lg h4+*,.prose-lg hr+*{margin-top:0}.prose-lg table{font-size:.8888889em;line-height:1.5}.prose-lg thead th{padding-bottom:.75em;padding-left:.75em;padding-right:.75em}.prose-lg thead th:first-child{padding-left:0}.prose-lg thead th:last-child{padding-right:0}.prose-lg tbody td{padding:.75em}.prose-lg tbody td:first-child{padding-left:0}.prose-lg tbody td:last-child{padding-right:0}.prose-lg>:first-child{margin-top:0}.prose-lg>:last-child{margin-bottom:0}.prose-xl{font-size:1.25rem;line-height:1.8}.prose-xl p{margin-bottom:1.2em;margin-top:1.2em}.prose-xl [class~=lead]{font-size:1.2em;line-height:1.5;margin-bottom:1em;margin-top:1em}.prose-xl blockquote{margin-bottom:1.6em;margin-top:1.6em;padding-left:1.0666667em}.prose-xl h1{font-size:2.8em;line-height:1;margin-bottom:.8571429em;margin-top:0}.prose-xl h2{font-size:1.8em;line-height:1.1111111;margin-bottom:.8888889em;margin-top:1.5555556em}.prose-xl h3{font-size:1.5em;line-height:1.3333333;margin-bottom:.6666667em;margin-top:1.6em}.prose-xl h4{line-height:1.6;margin-bottom:.6em;margin-top:1.8em}.prose-xl figure,.prose-xl img,.prose-xl video{margin-bottom:2em;margin-top:2em}.prose-xl figure>*{margin-bottom:0;margin-top:0}.prose-xl figure figcaption{font-size:.9em;line-height:1.5555556;margin-top:1em}.prose-xl code{font-size:.9em}.prose-xl h2 code{font-size:.8611111em}.prose-xl h3 code,.prose-xl pre{font-size:.9em}.prose-xl pre{border-radius:.5rem;line-height:1.7777778;margin-bottom:2em;margin-top:2em;padding:1.1111111em 1.3333333em}.prose-xl ol,.prose-xl ul{margin-bottom:1.2em;margin-top:1.2em}.prose-xl li{margin-bottom:.6em;margin-top:.6em}.prose-xl ol>li{padding-left:1.8em}.prose-xl ol>li:before{left:0}.prose-xl ul>li{padding-left:1.8em}.prose-xl ul>li:before{height:.35em;left:.25em;top:.725em;width:.35em}.prose-xl>ul>li p{margin-bottom:.8em;margin-top:.8em}.prose-xl>ul>li>:first-child{margin-top:1.2em}.prose-xl>ul>li>:last-child{margin-bottom:1.2em}.prose-xl>ol>li>:first-child{margin-top:1.2em}.prose-xl>ol>li>:last-child{margin-bottom:1.2em}.prose-xl ol ol,.prose-xl ol ul,.prose-xl ul ol,.prose-xl ul ul{margin-bottom:.8em;margin-top:.8em}.prose-xl hr{margin-bottom:2.8em;margin-top:2.8em}.prose-xl h2+*,.prose-xl h3+*,.prose-xl h4+*,.prose-xl hr+*{margin-top:0}.prose-xl table{font-size:.9em;line-height:1.5555556}.prose-xl thead th{padding-bottom:.8888889em;padding-left:.6666667em;padding-right:.6666667em}.prose-xl thead th:first-child{padding-left:0}.prose-xl thead th:last-child{padding-right:0}.prose-xl tbody td{padding:.8888889em .6666667em}.prose-xl tbody td:first-child{padding-left:0}.prose-xl tbody td:last-child{padding-right:0}.prose-xl>:first-child{margin-top:0}.prose-xl>:last-child{margin-bottom:0}.prose-2xl{font-size:1.5rem;line-height:1.6666667}.prose-2xl p{margin-bottom:1.3333333em;margin-top:1.3333333em}.prose-2xl [class~=lead]{font-size:1.25em;line-height:1.4666667;margin-bottom:1.0666667em;margin-top:1.0666667em}.prose-2xl blockquote{margin-bottom:1.7777778em;margin-top:1.7777778em;padding-left:1.1111111em}.prose-2xl h1{font-size:2.6666667em;line-height:1;margin-bottom:.875em;margin-top:0}.prose-2xl h2{font-size:2em;line-height:1.0833333;margin-bottom:.8333333em;margin-top:1.5em}.prose-2xl h3{font-size:1.5em;line-height:1.2222222;margin-bottom:.6666667em;margin-top:1.5555556em}.prose-2xl h4{line-height:1.5;margin-bottom:.6666667em;margin-top:1.6666667em}.prose-2xl figure,.prose-2xl img,.prose-2xl video{margin-bottom:2em;margin-top:2em}.prose-2xl figure>*{margin-bottom:0;margin-top:0}.prose-2xl figure figcaption{font-size:.8333333em;line-height:1.6;margin-top:1em}.prose-2xl code{font-size:.8333333em}.prose-2xl h2 code{font-size:.875em}.prose-2xl h3 code{font-size:.8888889em}.prose-2xl pre{border-radius:.5rem;font-size:.8333333em;line-height:1.8;margin-bottom:2em;margin-top:2em;padding:1.2em 1.6em}.prose-2xl ol,.prose-2xl ul{margin-bottom:1.3333333em;margin-top:1.3333333em}.prose-2xl li{margin-bottom:.5em;margin-top:.5em}.prose-2xl ol>li{padding-left:1.6666667em}.prose-2xl ol>li:before{left:0}.prose-2xl ul>li{padding-left:1.6666667em}.prose-2xl ul>li:before{height:.3333333em;left:.25em;top:.66667em;width:.3333333em}.prose-2xl>ul>li p{margin-bottom:.8333333em;margin-top:.8333333em}.prose-2xl>ul>li>:first-child{margin-top:1.3333333em}.prose-2xl>ul>li>:last-child{margin-bottom:1.3333333em}.prose-2xl>ol>li>:first-child{margin-top:1.3333333em}.prose-2xl>ol>li>:last-child{margin-bottom:1.3333333em}.prose-2xl ol ol,.prose-2xl ol ul,.prose-2xl ul ol,.prose-2xl ul ul{margin-bottom:.6666667em;margin-top:.6666667em}.prose-2xl hr{margin-bottom:3em;margin-top:3em}.prose-2xl h2+*,.prose-2xl h3+*,.prose-2xl h4+*,.prose-2xl hr+*{margin-top:0}.prose-2xl table{font-size:.8333333em;line-height:1.4}.prose-2xl thead th{padding-bottom:.8em;padding-left:.6em;padding-right:.6em}.prose-2xl thead th:first-child{padding-left:0}.prose-2xl thead th:last-child{padding-right:0}.prose-2xl tbody td{padding:.8em .6em}.prose-2xl tbody td:first-child{padding-left:0}.prose-2xl tbody td:last-child{padding-right:0}.prose-2xl>:first-child{margin-top:0}.prose-2xl>:last-child{margin-bottom:0}.prose-indigo a,.prose-indigo a code{color:#4f46e5}.prose-red a,.prose-red a code{color:#e11d48}.prose-yellow a,.prose-yellow a code{color:#d97706}.prose-blue a,.prose-blue a code{color:#2563eb}.prose-purple a,.prose-purple a code{color:#9333ea}.aspect-none{padding-bottom:0;position:static}.aspect-none>*{bottom:auto;height:auto;left:auto;position:static;right:auto;top:auto;width:auto}.sr-only{clip:rect(0,0,0,0);border-width:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.not-sr-only{clip:auto;height:auto;margin:0;overflow:visible;padding:0;position:static;white-space:normal;width:auto}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.visible{visibility:visible}.\!visible{visibility:visible!important}.invisible{visibility:hidden}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.right-0{right:0}.isolate{isolation:isolate}.isolation-auto{isolation:auto}.col-span-1{grid-column:span 1/span 1}.float-right{float:right}.float-left{float:left}.float-none{float:none}.clear-left{clear:left}.clear-right{clear:right}.clear-both{clear:both}.clear-none{clear:none}.m-4{margin:1rem}.m-3{margin:.75rem}.m-8{margin:2rem}.m-14{margin:3.5rem}.m-16{margin:4rem}.-my-2{margin-bottom:-.5rem;margin-top:-.5rem}.mx-auto{margin-left:auto;margin-right:auto}.ml-3{margin-left:.75rem}.mt-1{margin-top:.25rem}.ml-4{margin-left:1rem}.mt-3{margin-top:.75rem}.mt-12{margin-top:3rem}.mt-24{margin-top:6rem}.ml-10{margin-left:2.5rem}.mt-2{margin-top:.5rem}.-mr-2{margin-right:-.5rem}.-mt-32{margin-top:-8rem}.box-border{box-sizing:border-box}.box-content{box-sizing:content-box}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.inline-table{display:inline-table}.table-caption{display:table-caption}.table-cell{display:table-cell}.table-column{display:table-column}.table-column-group{display:table-column-group}.table-footer-group{display:table-footer-group}.table-header-group{display:table-header-group}.table-row-group{display:table-row-group}.table-row{display:table-row}.flow-root{display:flow-root}.grid{display:grid}.inline-grid{display:inline-grid}.contents{display:contents}.list-item{display:list-item}.hidden{display:none}.h-5{height:1.25rem}.h-16{height:4rem}.h-8{height:2rem}.h-6{height:1.5rem}.h-10{height:2.5rem}.w-1{width:.25rem}.w-5{width:1.25rem}.w-full{width:100%}.w-auto{width:auto}.w-8{width:2rem}.w-6{width:1.5rem}.w-48{width:12rem}.w-10{width:2.5rem}.w-1\/2{width:50%}.w-\[this-is\\\\\]w-\\\\\[weird-but-valid\]{width:this-is\\]w-\\[weird-but-valid}.min-w-full{min-width:100%}.max-w-full{max-width:100%}.max-w-7xl{max-width:80rem}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.flex-shrink-0{flex-shrink:0}.flex-shrink{flex-shrink:1}.flex-grow{flex-grow:1}.table-auto{table-layout:auto}.table-fixed{table-layout:fixed}.border-collapse{border-collapse:collapse}.border-separate{border-collapse:separate}.origin-top-right{transform-origin:top right}.rotate-90{--tw-rotate:90deg}.rotate-90,.rotate-180{transform:var(--tw-transform)}.rotate-180{--tw-rotate:180deg}.scale-95{--tw-scale-x:.95;--tw-scale-y:.95}.scale-95,.scale-100{transform:var(--tw-transform)}.scale-100{--tw-scale-x:1;--tw-scale-y:1}.transform{transform:var(--tw-transform)}.\!transform{transform:var(--tw-transform)!important}.transform-cpu{--tw-transform:translateX(var(--tw-translate-x)) translateY(var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform-gpu{--tw-transform:translate3d(var(--tw-translate-x),var(--tw-translate-y),0) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform-none{transform:none}.select-none{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.select-text{-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.select-all{-webkit-user-select:all;-moz-user-select:all;user-select:all}.select-auto{-webkit-user-select:auto;-moz-user-select:auto;-ms-user-select:auto;user-select:auto}.resize-none{resize:none}.resize-y{resize:vertical}.resize-x{resize:horizontal}.resize{resize:both}.list-inside{list-style-position:inside}.list-outside{list-style-position:outside}.list-decimal{list-style-type:decimal}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-flow-row{grid-auto-flow:row}.grid-flow-col{grid-auto-flow:column}.grid-flow-row-dense{grid-auto-flow:row dense}.grid-flow-col-dense{grid-auto-flow:column dense}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.flex-row{flex-direction:row}.flex-row-reverse{flex-direction:row-reverse}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.flex-wrap-reverse{flex-wrap:wrap-reverse}.flex-nowrap{flex-wrap:nowrap}.place-content-center{place-content:center}.place-content-start{place-content:start}.place-content-end{place-content:end}.place-content-between{place-content:space-between}.place-content-around{place-content:space-around}.place-content-evenly{place-content:space-evenly}.place-content-stretch{place-content:stretch}.place-items-start{place-items:start}.place-items-end{place-items:end}.place-items-center{place-items:center}.place-items-stretch{place-items:stretch}.content-center{align-content:center}.content-start{align-content:flex-start}.content-end{align-content:flex-end}.content-between{align-content:space-between}.content-around{align-content:space-around}.content-evenly{align-content:space-evenly}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.items-baseline{align-items:baseline}.items-stretch{align-items:stretch}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-around{justify-content:space-around}.justify-evenly{justify-content:space-evenly}.justify-items-start{justify-items:start}.justify-items-end{justify-items:end}.justify-items-center{justify-items:center}.justify-items-stretch{justify-items:stretch}.gap-6{gap:1.5rem}.gap-5{gap:1.25rem}.space-x-6>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(1.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(1.5rem*var(--tw-space-x-reverse))}.space-x-3>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.75rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.75rem*var(--tw-space-x-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1.5rem*var(--tw-space-y-reverse));margin-top:calc(1.5rem*(1 - var(--tw-space-y-reverse)))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.75rem*var(--tw-space-y-reverse));margin-top:calc(.75rem*(1 - var(--tw-space-y-reverse)))}.space-y-reverse>:not([hidden])~:not([hidden]){--tw-space-y-reverse:1}.space-x-reverse>:not([hidden])~:not([hidden]){--tw-space-x-reverse:1}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-bottom-width:calc(1px*var(--tw-divide-y-reverse));border-top-width:calc(1px*(1 - var(--tw-divide-y-reverse)))}.divide-x>:not([hidden])~:not([hidden]){--tw-divide-x-reverse:0;border-left-width:calc(1px*(1 - var(--tw-divide-x-reverse)));border-right-width:calc(1px*var(--tw-divide-x-reverse))}.divide-y-reverse>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:1}.divide-x-reverse>:not([hidden])~:not([hidden]){--tw-divide-x-reverse:1}.divide-solid>:not([hidden])~:not([hidden]){border-style:solid}.divide-dashed>:not([hidden])~:not([hidden]){border-style:dashed}.divide-dotted>:not([hidden])~:not([hidden]){border-style:dotted}.divide-double>:not([hidden])~:not([hidden]){border-style:double}.divide-none>:not([hidden])~:not([hidden]){border-style:none}.divide-gray-200>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgba(231,229,228,var(--tw-divide-opacity))}.place-self-auto{place-self:auto}.place-self-start{place-self:start}.place-self-end{place-self:end}.place-self-center{place-self:center}.place-self-stretch{place-self:stretch}.self-auto{align-self:auto}.self-start{align-self:flex-start}.self-end{align-self:flex-end}.self-center{align-self:center}.self-stretch{align-self:stretch}.self-baseline{align-self:baseline}.justify-self-auto{justify-self:auto}.justify-self-start{justify-self:start}.justify-self-end{justify-self:end}.justify-self-center{justify-self:center}.justify-self-stretch{justify-self:stretch}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-scroll{overflow:scroll}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-hidden{overflow-y:hidden}.overflow-x-visible{overflow-x:visible}.overflow-y-visible{overflow-y:visible}.overflow-x-scroll{overflow-x:scroll}.overflow-y-scroll{overflow-y:scroll}.overscroll-auto{-ms-scroll-chaining:chained;overscroll-behavior:auto}.overscroll-contain{-ms-scroll-chaining:none;overscroll-behavior:contain}.overscroll-none{-ms-scroll-chaining:none;overscroll-behavior:none}.overscroll-y-auto{overscroll-behavior-y:auto}.overscroll-y-contain{overscroll-behavior-y:contain}.overscroll-y-none{overscroll-behavior-y:none}.overscroll-x-auto{overscroll-behavior-x:auto}.overscroll-x-contain{overscroll-behavior-x:contain}.overscroll-x-none{overscroll-behavior-x:none}.truncate{overflow:hidden;white-space:nowrap}.overflow-ellipsis,.truncate{text-overflow:ellipsis}.overflow-clip{text-overflow:clip}.whitespace-normal{white-space:normal}.whitespace-nowrap{white-space:nowrap}.whitespace-pre{white-space:pre}.whitespace-pre-line{white-space:pre-line}.whitespace-pre-wrap{white-space:pre-wrap}.break-normal{overflow-wrap:normal;word-break:normal}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.rounded-md{border-radius:.375rem}.rounded-lg{border-radius:.5rem}.rounded-full{border-radius:9999px}.rounded{border-radius:.25rem}.rounded-t{border-top-left-radius:.25rem}.rounded-r,.rounded-t{border-top-right-radius:.25rem}.rounded-b,.rounded-r{border-bottom-right-radius:.25rem}.rounded-b,.rounded-l{border-bottom-left-radius:.25rem}.rounded-l,.rounded-tl{border-top-left-radius:.25rem}.rounded-tr{border-top-right-radius:.25rem}.rounded-br{border-bottom-right-radius:.25rem}.rounded-bl{border-bottom-left-radius:.25rem}.border-2{border-width:2px}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.border-t{border-top-width:1px}.border-r{border-right-width:1px}.border-solid{border-style:solid}.border-dashed{border-style:dashed}.border-dotted{border-style:dotted}.border-double{border-style:double}.border-none{border-style:none}.border-gray-200{--tw-border-opacity:1;border-color:rgba(231,229,228,var(--tw-border-opacity))}.border-gray-700{--tw-border-opacity:1;border-color:rgba(68,64,60,var(--tw-border-opacity))}.border-transparent{border-color:transparent}.bg-red-50{--tw-bg-opacity:1;background-color:rgba(255,241,242,var(--tw-bg-opacity))}.bg-white{--tw-bg-opacity:1;background-color:rgba(255,255,255,var(--tw-bg-opacity))}.bg-gray-50{--tw-bg-opacity:1;background-color:rgba(250,250,249,var(--tw-bg-opacity))}.bg-gray-800{--tw-bg-opacity:1;background-color:rgba(41,37,36,var(--tw-bg-opacity))}.bg-gray-900{--tw-bg-opacity:1;background-color:rgba(28,25,23,var(--tw-bg-opacity))}.decoration-slice{-webkit-box-decoration-break:slice;box-decoration-break:slice}.decoration-clone{-webkit-box-decoration-break:clone;box-decoration-break:clone}.bg-fixed{background-attachment:fixed}.bg-local{background-attachment:local}.bg-scroll{background-attachment:scroll}.bg-clip-border{background-clip:border-box}.bg-clip-padding{background-clip:padding-box}.bg-clip-content{background-clip:content-box}.bg-clip-text{-webkit-background-clip:text;background-clip:text}.bg-repeat{background-repeat:repeat}.bg-no-repeat{background-repeat:no-repeat}.bg-repeat-x{background-repeat:repeat-x}.bg-repeat-y{background-repeat:repeat-y}.bg-repeat-round{background-repeat:round}.bg-repeat-space{background-repeat:space}.bg-origin-border{background-origin:border-box}.bg-origin-padding{background-origin:padding-box}.bg-origin-content{background-origin:content-box}.fill-\[\#bada55\]{fill:#bada55}.object-contain{-o-object-fit:contain;object-fit:contain}.object-cover{-o-object-fit:cover;object-fit:cover}.object-fill{-o-object-fit:fill;object-fit:fill}.object-none{-o-object-fit:none;object-fit:none}.object-scale-down{-o-object-fit:scale-down;object-fit:scale-down}.p-4{padding:1rem}.p-6{padding:1.5rem}.p-1{padding:.25rem}.p-2{padding:.5rem}.px-2{padding-left:.5rem;padding-right:.5rem}.py-0\.5{padding-bottom:.125rem;padding-top:.125rem}.py-0{padding-bottom:0;padding-top:0}.py-2{padding-bottom:.5rem;padding-top:.5rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-3{padding-bottom:.75rem;padding-top:.75rem}.py-4{padding-bottom:1rem;padding-top:1rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.py-1{padding-bottom:.25rem;padding-top:.25rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.py-10{padding-bottom:2.5rem;padding-top:2.5rem}.py-6{padding-bottom:1.5rem;padding-top:1.5rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-1{padding-left:.25rem;padding-right:.25rem}.pb-32{padding-bottom:8rem}.pt-4{padding-top:1rem}.pb-3{padding-bottom:.75rem}.pb-12{padding-bottom:3rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.text-justify{text-align:justify}.align-baseline{vertical-align:baseline}.align-top{vertical-align:top}.align-middle{vertical-align:middle}.align-bottom{vertical-align:bottom}.align-text-top{vertical-align:text-top}.align-text-bottom{vertical-align:text-bottom}.text-sm{font-size:.875rem;line-height:1.25rem}.text-base{font-size:1rem;line-height:1.5rem}.text-2xl{font-size:1.5rem;line-height:2rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.font-medium{font-weight:500}.font-semibold{font-weight:600}.font-thin{font-weight:100}.font-bold{font-weight:700}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.capitalize{text-transform:capitalize}.normal-case{text-transform:none}.italic{font-style:italic}.not-italic{font-style:normal}.diagonal-fractions,.lining-nums,.oldstyle-nums,.ordinal,.proportional-nums,.slashed-zero,.stacked-fractions,.tabular-nums{--tw-ordinal:var(--tw-empty,/*!*/ /*!*/);--tw-slashed-zero:var(--tw-empty,/*!*/ /*!*/);--tw-numeric-figure:var(--tw-empty,/*!*/ /*!*/);--tw-numeric-spacing:var(--tw-empty,/*!*/ /*!*/);--tw-numeric-fraction:var(--tw-empty,/*!*/ /*!*/);font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.normal-nums{font-variant-numeric:normal}.ordinal{--tw-ordinal:ordinal}.slashed-zero{--tw-slashed-zero:slashed-zero}.lining-nums{--tw-numeric-figure:lining-nums}.oldstyle-nums{--tw-numeric-figure:oldstyle-nums}.proportional-nums{--tw-numeric-spacing:proportional-nums}.tabular-nums{--tw-numeric-spacing:tabular-nums}.diagonal-fractions{--tw-numeric-fraction:diagonal-fractions}.stacked-fractions{--tw-numeric-fraction:stacked-fractions}.leading-5{line-height:1.25rem}.leading-4{line-height:1rem}.leading-8{line-height:2rem}.leading-loose{line-height:2}.leading-none{line-height:1}.leading-9{line-height:2.25rem}.tracking-wider{letter-spacing:.05em}.tracking-wide{letter-spacing:.025em}.text-red-400{--tw-text-opacity:1;color:rgba(251,113,133,var(--tw-text-opacity))}.text-red-800{--tw-text-opacity:1;color:rgba(159,18,57,var(--tw-text-opacity))}.text-gray-900{--tw-text-opacity:1;color:rgba(28,25,23,var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity:1;color:rgba(68,64,60,var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity:1;color:rgba(120,113,108,var(--tw-text-opacity))}.text-gray-600{--tw-text-opacity:1;color:rgba(87,83,78,var(--tw-text-opacity))}.text-gray-300{--tw-text-opacity:1;color:rgba(214,211,209,var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgba(255,255,255,var(--tw-text-opacity))}.text-gray-400{--tw-text-opacity:1;color:rgba(168,162,158,var(--tw-text-opacity))}.underline{text-decoration:underline}.line-through{text-decoration:line-through}.no-underline{text-decoration:none}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.subpixel-antialiased{-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}.opacity-0{opacity:0}.opacity-100{opacity:1}.bg-blend-normal{background-blend-mode:normal}.bg-blend-multiply{background-blend-mode:multiply}.bg-blend-screen{background-blend-mode:screen}.bg-blend-overlay{background-blend-mode:overlay}.bg-blend-darken{background-blend-mode:darken}.bg-blend-lighten{background-blend-mode:lighten}.bg-blend-color-dodge{background-blend-mode:color-dodge}.bg-blend-color-burn{background-blend-mode:color-burn}.bg-blend-hard-light{background-blend-mode:hard-light}.bg-blend-soft-light{background-blend-mode:soft-light}.bg-blend-difference{background-blend-mode:difference}.bg-blend-exclusion{background-blend-mode:exclusion}.bg-blend-hue{background-blend-mode:hue}.bg-blend-saturation{background-blend-mode:saturation}.bg-blend-color{background-blend-mode:color}.bg-blend-luminosity{background-blend-mode:luminosity}.mix-blend-normal{mix-blend-mode:normal}.mix-blend-multiply{mix-blend-mode:multiply}.mix-blend-screen{mix-blend-mode:screen}.mix-blend-overlay{mix-blend-mode:overlay}.mix-blend-darken{mix-blend-mode:darken}.mix-blend-lighten{mix-blend-mode:lighten}.mix-blend-color-dodge{mix-blend-mode:color-dodge}.mix-blend-color-burn{mix-blend-mode:color-burn}.mix-blend-hard-light{mix-blend-mode:hard-light}.mix-blend-soft-light{mix-blend-mode:soft-light}.mix-blend-difference{mix-blend-mode:difference}.mix-blend-exclusion{mix-blend-mode:exclusion}.mix-blend-hue{mix-blend-mode:hue}.mix-blend-saturation{mix-blend-mode:saturation}.mix-blend-color{mix-blend-mode:color}.mix-blend-luminosity{mix-blend-mode:luminosity}.shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,0.1),0 1px 2px 0 rgba(0,0,0,0.06)}.shadow,.shadow-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,0.05)}.shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,0.1),0 4px 6px -2px rgba(0,0,0,0.05);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.ring{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-inset{--tw-ring-inset:inset}.blur{--tw-blur:blur(8px)}.blur,.drop-shadow{filter:var(--tw-filter)}.drop-shadow{--tw-drop-shadow:drop-shadow(0 1px 2px rgba(0,0,0,0.1)) drop-shadow(0 1px 1px rgba(0,0,0,0.06))}.grayscale{--tw-grayscale:grayscale(100%)}.grayscale,.invert{filter:var(--tw-filter)}.invert{--tw-invert:invert(100%)}.sepia{--tw-sepia:sepia(100%)}.filter,.sepia{filter:var(--tw-filter)}.\!filter{filter:var(--tw-filter)!important}.filter-none{filter:none}.backdrop-blur{--tw-backdrop-blur:blur(8px)}.backdrop-blur,.backdrop-grayscale{-webkit-backdrop-filter:var(--tw-backdrop-filter);backdrop-filter:var(--tw-backdrop-filter)}.backdrop-grayscale{--tw-backdrop-grayscale:grayscale(100%)}.backdrop-invert{--tw-backdrop-invert:invert(100%)}.backdrop-invert,.backdrop-sepia{-webkit-backdrop-filter:var(--tw-backdrop-filter);backdrop-filter:var(--tw-backdrop-filter)}.backdrop-sepia{--tw-backdrop-sepia:sepia(100%)}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-filter);backdrop-filter:var(--tw-backdrop-filter)}.backdrop-filter-none{-webkit-backdrop-filter:none;backdrop-filter:none}.transition{transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-150,.transition{transition-duration:.15s}.duration-100{transition-duration:.1s}.duration-75{transition-duration:75ms}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.content-\[\"hello\"\],.content-\[\'hello\'\]{content:"hello"}.content-\[\'this-is-also-valid\]-weirdly-enough\'\]{content:"this-is-also-valid]-weirdly-enough"}.hover\:bg-gray-700:hover{--tw-bg-opacity:1;background-color:rgba(68,64,60,var(--tw-bg-opacity))}.hover\:bg-gray-100:hover{--tw-bg-opacity:1;background-color:rgba(245,245,244,var(--tw-bg-opacity))}.hover\:font-bold:hover{font-weight:700}.hover\:text-gray-700:hover{--tw-text-opacity:1;color:rgba(68,64,60,var(--tw-text-opacity))}.hover\:text-gray-600:hover{--tw-text-opacity:1;color:rgba(87,83,78,var(--tw-text-opacity))}.hover\:text-white:hover{--tw-text-opacity:1;color:rgba(255,255,255,var(--tw-text-opacity))}.focus\:bg-indigo-50:focus{--tw-bg-opacity:1;background-color:rgba(238,242,255,var(--tw-bg-opacity))}.focus\:bg-gray-700:focus{--tw-bg-opacity:1;background-color:rgba(68,64,60,var(--tw-bg-opacity))}.focus\:text-indigo-600:focus{--tw-text-opacity:1;color:rgba(79,70,229,var(--tw-text-opacity))}.focus\:text-white:focus{--tw-text-opacity:1;color:rgba(255,255,255,var(--tw-text-opacity))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:hover\:text-center:focus:hover,.hover\:focus\:text-center:hover:focus{text-align:center}@media (min-width:640px){.sm\:-mx-6{margin-left:-1.5rem;margin-right:-1.5rem}.sm\:block{display:block}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:gap-6{gap:1.5rem}.sm\:rounded-lg{border-radius:.5rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:px-0{padding-left:0;padding-right:0}.sm\:px-3{padding-left:.75rem;padding-right:.75rem}}@media (min-width:768px){.md\:ml-6{margin-left:1.5rem}.md\:block{display:block}.md\:hidden{display:none}}@media (min-width:1024px){.lg\:-mx-8{margin-left:-2rem;margin-right:-2rem}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.lg\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.lg\:px-8{padding-left:2rem;padding-right:2rem}}
\ No newline at end of file diff --git a/assets/assets/site.js b/assets/assets/site.js index bec3ce9..30cd1fa 100644 --- a/assets/assets/site.js +++ b/assets/assets/site.js @@ -1,6 +1,6 @@ -(()=>{(function(){if(window.Reflect===void 0||window.customElements===void 0||window.customElements.polyfillWrapFlushCallback)return;let r=HTMLElement,e={HTMLElement:function(){return Reflect.construct(r,[],this.constructor)}};window.HTMLElement=e.HTMLElement,HTMLElement.prototype=r.prototype,HTMLElement.prototype.constructor=HTMLElement,Object.setPrototypeOf(HTMLElement,r)})();var Z=new WeakMap;function dt(r){let e=r instanceof Element?r:r instanceof Node?r.parentElement:null,t=e?e.closest("input, button"):null;return(t==null?void 0:t.type)=="submit"?t:null}function ft(r){let e=dt(r.target);e&&e.form&&Z.set(e.form,e)}(function(){"SubmitEvent"in window||(addEventListener("click",ft,!0),Object.defineProperty(Event.prototype,"submitter",{get(){if(this.type=="submit"&&this.target instanceof HTMLFormElement)return Z.get(this.target)}}))})();var w;(function(r){r.eager="eager",r.lazy="lazy"})(w||(w={}));var v=class extends HTMLElement{constructor(){super();this.loaded=Promise.resolve(),this.delegate=new v.delegateConstructor(this)}static get observedAttributes(){return["disabled","loading","src"]}connectedCallback(){this.delegate.connect()}disconnectedCallback(){this.delegate.disconnect()}reload(){let{src:e}=this;this.src=null,this.src=e}attributeChangedCallback(e){e=="loading"?this.delegate.loadingStyleChanged():e=="src"?this.delegate.sourceURLChanged():this.delegate.disabledChanged()}get src(){return this.getAttribute("src")}set src(e){e?this.setAttribute("src",e):this.removeAttribute("src")}get loading(){return pt(this.getAttribute("loading")||"")}set loading(e){e?this.setAttribute("loading",e):this.removeAttribute("loading")}get disabled(){return this.hasAttribute("disabled")}set disabled(e){e?this.setAttribute("disabled",""):this.removeAttribute("disabled")}get autoscroll(){return this.hasAttribute("autoscroll")}set autoscroll(e){e?this.setAttribute("autoscroll",""):this.removeAttribute("autoscroll")}get complete(){return!this.delegate.isLoading}get isActive(){return this.ownerDocument===document&&!this.isPreview}get isPreview(){var e,t;return(t=(e=this.ownerDocument)===null||e===void 0?void 0:e.documentElement)===null||t===void 0?void 0:t.hasAttribute("data-turbo-preview")}};function pt(r){switch(r.toLowerCase()){case"lazy":return w.lazy;default:return w.eager}}function m(r){return new URL(r.toString(),document.baseURI)}function P(r){let e;if(r.hash)return r.hash.slice(1);if(e=r.href.match(/#(.*)$/))return e[1]}function mt(r){return(wt(r).match(/\.[^.]*$/)||[])[0]||""}function gt(r){return!!mt(r).match(/^(?:|\.(?:htm|html|xhtml))$/)}function vt(r,e){let t=Et(e);return r.href===m(t).href||r.href.startsWith(t)}function _(r){let e=P(r);return e!=null?r.href.slice(0,-(e.length+1)):r.href}function F(r){return _(r)}function bt(r,e){return m(r).href==m(e).href}function yt(r){return r.pathname.split("/").slice(1)}function wt(r){return yt(r).slice(-1)[0]}function Et(r){return St(r.origin+r.pathname)}function St(r){return r.endsWith("/")?r:r+"/"}var W=class{constructor(e){this.response=e}get succeeded(){return this.response.ok}get failed(){return!this.succeeded}get clientError(){return this.statusCode>=400&&this.statusCode<=499}get serverError(){return this.statusCode>=500&&this.statusCode<=599}get redirected(){return this.response.redirected}get location(){return m(this.response.url)}get isHTML(){return this.contentType&&this.contentType.match(/^(?:text\/([^\s;,]+\b)?html|application\/xhtml\+xml)\b/)}get statusCode(){return this.response.status}get contentType(){return this.header("Content-Type")}get responseText(){return this.response.text()}get responseHTML(){return this.isHTML?this.response.text():Promise.resolve(void 0)}header(e){return this.response.headers.get(e)}};function u(r,{target:e,cancelable:t,detail:n}={}){let i=new CustomEvent(r,{cancelable:t,bubbles:!0,detail:n});return(e||document.documentElement).dispatchEvent(i),i}function B(){return new Promise(r=>requestAnimationFrame(()=>r()))}function At(){return new Promise(r=>setTimeout(()=>r(),0))}function Pt(){return Promise.resolve()}function ee(r=""){return new DOMParser().parseFromString(r,"text/html")}function te(r,...e){let t=Lt(r,e).replace(/^\n/,"").split(` -`),n=t[0].match(/^\s+/),i=n?n[0].length:0;return t.map(s=>s.slice(i)).join(` -`)}function Lt(r,e){return r.reduce((t,n,i)=>{let s=e[i]==null?"":e[i];return t+n+s},"")}function k(){return Array.apply(null,{length:36}).map((r,e)=>e==8||e==13||e==18||e==23?"-":e==14?"4":e==19?(Math.floor(Math.random()*4)+8).toString(16):Math.floor(Math.random()*15).toString(16)).join("")}var h;(function(r){r[r.get=0]="get",r[r.post=1]="post",r[r.put=2]="put",r[r.patch=3]="patch",r[r.delete=4]="delete"})(h||(h={}));function Tt(r){switch(r.toLowerCase()){case"get":return h.get;case"post":return h.post;case"put":return h.put;case"patch":return h.patch;case"delete":return h.delete}}var I=class{constructor(e,t,n,i=new URLSearchParams){this.abortController=new AbortController,this.resolveRequestPromise=s=>{},this.delegate=e,this.method=t,this.headers=this.defaultHeaders,this.isIdempotent?this.url=Ct(n,[...i.entries()]):(this.body=i,this.url=n)}get location(){return this.url}get params(){return this.url.searchParams}get entries(){return this.body?Array.from(this.body.entries()):[]}cancel(){this.abortController.abort()}async perform(){var e,t;let{fetchOptions:n}=this;(t=(e=this.delegate).prepareHeadersForRequest)===null||t===void 0||t.call(e,this.headers,this),await this.allowRequestToBeIntercepted(n);try{this.delegate.requestStarted(this);let i=await fetch(this.url.href,n);return await this.receive(i)}catch(i){if(i.name!=="AbortError")throw this.delegate.requestErrored(this,i),i}finally{this.delegate.requestFinished(this)}}async receive(e){let t=new W(e);return u("turbo:before-fetch-response",{cancelable:!0,detail:{fetchResponse:t}}).defaultPrevented?this.delegate.requestPreventedHandlingResponse(this,t):t.succeeded?this.delegate.requestSucceededWithResponse(this,t):this.delegate.requestFailedWithResponse(this,t),t}get fetchOptions(){var e;return{method:h[this.method].toUpperCase(),credentials:"same-origin",headers:this.headers,redirect:"follow",body:this.body,signal:this.abortSignal,referrer:(e=this.delegate.referrer)===null||e===void 0?void 0:e.href}}get defaultHeaders(){return{Accept:"text/html, application/xhtml+xml"}}get isIdempotent(){return this.method==h.get}get abortSignal(){return this.abortController.signal}async allowRequestToBeIntercepted(e){let t=new Promise(i=>this.resolveRequestPromise=i);u("turbo:before-fetch-request",{cancelable:!0,detail:{fetchOptions:e,url:this.url.href,resume:this.resolveRequestPromise}}).defaultPrevented&&await t}};function Ct(r,e){let t=new URLSearchParams(r.search);for(let[n,i]of e)i instanceof File||(t.has(n)?(t.delete(n),r.searchParams.set(n,i)):r.searchParams.append(n,i));return r}var re=class{constructor(e,t){this.started=!1,this.intersect=n=>{let i=n.slice(-1)[0];(i==null?void 0:i.isIntersecting)&&this.delegate.elementAppearedInViewport(this.element)},this.delegate=e,this.element=t,this.intersectionObserver=new IntersectionObserver(this.intersect)}start(){this.started||(this.started=!0,this.intersectionObserver.observe(this.element))}stop(){this.started&&(this.started=!1,this.intersectionObserver.unobserve(this.element))}},L=class{constructor(e){this.templateElement=document.createElement("template"),this.templateElement.innerHTML=e}static wrap(e){return typeof e=="string"?new this(e):e}get fragment(){let e=document.createDocumentFragment();for(let t of this.foreignElements)e.appendChild(document.importNode(t,!0));return e}get foreignElements(){return this.templateChildren.reduce((e,t)=>t.tagName.toLowerCase()=="turbo-stream"?[...e,t]:e,[])}get templateChildren(){return Array.from(this.templateElement.content.children)}};L.contentType="text/vnd.turbo-stream.html";var E;(function(r){r[r.initialized=0]="initialized",r[r.requesting=1]="requesting",r[r.waiting=2]="waiting",r[r.receiving=3]="receiving",r[r.stopping=4]="stopping",r[r.stopped=5]="stopped"})(E||(E={}));var S;(function(r){r.urlEncoded="application/x-www-form-urlencoded",r.multipart="multipart/form-data",r.plain="text/plain"})(S||(S={}));function Ot(r){switch(r.toLowerCase()){case S.multipart:return S.multipart;case S.plain:return S.plain;default:return S.urlEncoded}}var U=class{constructor(e,t,n,i=!1){this.state=E.initialized,this.delegate=e,this.formElement=t,this.submitter=n,this.formData=Rt(t,n),this.fetchRequest=new I(this,this.method,this.location,this.body),this.mustRedirect=i}get method(){var e;let t=((e=this.submitter)===null||e===void 0?void 0:e.getAttribute("formmethod"))||this.formElement.getAttribute("method")||"";return Tt(t.toLowerCase())||h.get}get action(){var e;let t=typeof this.formElement.action=="string"?this.formElement.action:null;return((e=this.submitter)===null||e===void 0?void 0:e.getAttribute("formaction"))||this.formElement.getAttribute("action")||t||""}get location(){return m(this.action)}get body(){return this.enctype==S.urlEncoded||this.method==h.get?new URLSearchParams(this.stringFormData):this.formData}get enctype(){var e;return Ot(((e=this.submitter)===null||e===void 0?void 0:e.getAttribute("formenctype"))||this.formElement.enctype)}get isIdempotent(){return this.fetchRequest.isIdempotent}get stringFormData(){return[...this.formData].reduce((e,[t,n])=>e.concat(typeof n=="string"?[[t,n]]:[]),[])}async start(){let{initialized:e,requesting:t}=E;if(this.state==e)return this.state=t,this.fetchRequest.perform()}stop(){let{stopping:e,stopped:t}=E;if(this.state!=e&&this.state!=t)return this.state=e,this.fetchRequest.cancel(),!0}prepareHeadersForRequest(e,t){if(!t.isIdempotent){let n=kt(ne("csrf-param"))||ne("csrf-token");n&&(e["X-CSRF-Token"]=n),e.Accept=[L.contentType,e.Accept].join(", ")}}requestStarted(e){this.state=E.waiting,u("turbo:submit-start",{target:this.formElement,detail:{formSubmission:this}}),this.delegate.formSubmissionStarted(this)}requestPreventedHandlingResponse(e,t){this.result={success:t.succeeded,fetchResponse:t}}requestSucceededWithResponse(e,t){if(t.clientError||t.serverError)this.delegate.formSubmissionFailedWithResponse(this,t);else if(this.requestMustRedirect(e)&&Mt(t)){let n=new Error("Form responses must redirect to another location");this.delegate.formSubmissionErrored(this,n)}else this.state=E.receiving,this.result={success:!0,fetchResponse:t},this.delegate.formSubmissionSucceededWithResponse(this,t)}requestFailedWithResponse(e,t){this.result={success:!1,fetchResponse:t},this.delegate.formSubmissionFailedWithResponse(this,t)}requestErrored(e,t){this.result={success:!1,error:t},this.delegate.formSubmissionErrored(this,t)}requestFinished(e){this.state=E.stopped,u("turbo:submit-end",{target:this.formElement,detail:Object.assign({formSubmission:this},this.result)}),this.delegate.formSubmissionFinished(this)}requestMustRedirect(e){return!e.isIdempotent&&this.mustRedirect}};function Rt(r,e){let t=new FormData(r),n=e==null?void 0:e.getAttribute("name"),i=e==null?void 0:e.getAttribute("value");return n&&i!=null&&t.get(n)!=i&&t.append(n,i),t}function kt(r){if(r!=null){let t=(document.cookie?document.cookie.split("; "):[]).find(n=>n.startsWith(r));if(t){let n=t.split("=").slice(1).join("=");return n?decodeURIComponent(n):void 0}}}function ne(r){let e=document.querySelector(`meta[name="${r}"]`);return e&&e.content}function Mt(r){return r.statusCode==200&&!r.redirected}var M=class{constructor(e){this.element=e}get children(){return[...this.element.children]}hasAnchor(e){return this.getElementForAnchor(e)!=null}getElementForAnchor(e){return e?this.element.querySelector(`[id='${e}'], a[name='${e}']`):null}get isConnected(){return this.element.isConnected}get firstAutofocusableElement(){return this.element.querySelector("[autofocus]")}get permanentElements(){return[...this.element.querySelectorAll("[id][data-turbo-permanent]")]}getPermanentElementById(e){return this.element.querySelector(`#${e}[data-turbo-permanent]`)}getPermanentElementMapForSnapshot(e){let t={};for(let n of this.permanentElements){let{id:i}=n,s=e.getPermanentElementById(i);s&&(t[i]=[n,s])}return t}},K=class{constructor(e,t){this.submitBubbled=n=>{if(n.target instanceof HTMLFormElement){let i=n.target,s=n.submitter||void 0;this.delegate.shouldInterceptFormSubmission(i,s)&&(n.preventDefault(),n.stopImmediatePropagation(),this.delegate.formSubmissionIntercepted(i,s))}},this.delegate=e,this.element=t}start(){this.element.addEventListener("submit",this.submitBubbled)}stop(){this.element.removeEventListener("submit",this.submitBubbled)}},z=class{constructor(e,t){this.resolveRenderPromise=n=>{},this.resolveInterceptionPromise=n=>{},this.delegate=e,this.element=t}scrollToAnchor(e){let t=this.snapshot.getElementForAnchor(e);t?(this.scrollToElement(t),this.focusElement(t)):this.scrollToPosition({x:0,y:0})}scrollToAnchorFromLocation(e){this.scrollToAnchor(P(e))}scrollToElement(e){e.scrollIntoView()}focusElement(e){e instanceof HTMLElement&&(e.hasAttribute("tabindex")?e.focus():(e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")))}scrollToPosition({x:e,y:t}){this.scrollRoot.scrollTo(e,t)}scrollToTop(){this.scrollToPosition({x:0,y:0})}get scrollRoot(){return window}async render(e){let{isPreview:t,shouldRender:n,newSnapshot:i}=e;if(n)try{this.renderPromise=new Promise(c=>this.resolveRenderPromise=c),this.renderer=e,this.prepareToRenderSnapshot(e);let s=new Promise(c=>this.resolveInterceptionPromise=c);this.delegate.allowsImmediateRender(i,this.resolveInterceptionPromise)||await s,await this.renderSnapshot(e),this.delegate.viewRenderedSnapshot(i,t),this.finishRenderingSnapshot(e)}finally{delete this.renderer,this.resolveRenderPromise(void 0),delete this.renderPromise}else this.invalidate()}invalidate(){this.delegate.viewInvalidated()}prepareToRenderSnapshot(e){this.markAsPreview(e.isPreview),e.prepareToRender()}markAsPreview(e){e?this.element.setAttribute("data-turbo-preview",""):this.element.removeAttribute("data-turbo-preview")}async renderSnapshot(e){await e.render()}finishRenderingSnapshot(e){e.finishRendering()}},ie=class extends z{invalidate(){this.element.innerHTML=""}get snapshot(){return new M(this.element)}},$=class{constructor(e,t){this.clickBubbled=n=>{this.respondsToEventTarget(n.target)?this.clickEvent=n:delete this.clickEvent},this.linkClicked=n=>{this.clickEvent&&this.respondsToEventTarget(n.target)&&n.target instanceof Element&&this.delegate.shouldInterceptLinkClick(n.target,n.detail.url)&&(this.clickEvent.preventDefault(),n.preventDefault(),this.delegate.linkClickIntercepted(n.target,n.detail.url)),delete this.clickEvent},this.willVisit=()=>{delete this.clickEvent},this.delegate=e,this.element=t}start(){this.element.addEventListener("click",this.clickBubbled),document.addEventListener("turbo:click",this.linkClicked),document.addEventListener("turbo:before-visit",this.willVisit)}stop(){this.element.removeEventListener("click",this.clickBubbled),document.removeEventListener("turbo:click",this.linkClicked),document.removeEventListener("turbo:before-visit",this.willVisit)}respondsToEventTarget(e){let t=e instanceof Element?e:e instanceof Node?e.parentElement:null;return t&&t.closest("turbo-frame, html")==this.element}},se=class{constructor(e){this.permanentElementMap=e}static preservingPermanentElements(e,t){let n=new this(e);n.enter(),t(),n.leave()}enter(){for(let e in this.permanentElementMap){let[,t]=this.permanentElementMap[e];this.replaceNewPermanentElementWithPlaceholder(t)}}leave(){for(let e in this.permanentElementMap){let[t]=this.permanentElementMap[e];this.replaceCurrentPermanentElementWithClone(t),this.replacePlaceholderWithPermanentElement(t)}}replaceNewPermanentElementWithPlaceholder(e){let t=xt(e);e.replaceWith(t)}replaceCurrentPermanentElementWithClone(e){let t=e.cloneNode(!0);e.replaceWith(t)}replacePlaceholderWithPermanentElement(e){let t=this.getPlaceholderById(e.id);t==null||t.replaceWith(e)}getPlaceholderById(e){return this.placeholders.find(t=>t.content==e)}get placeholders(){return[...document.querySelectorAll("meta[name=turbo-permanent-placeholder][content]")]}};function xt(r){let e=document.createElement("meta");return e.setAttribute("name","turbo-permanent-placeholder"),e.setAttribute("content",r.id),e}var N=class{constructor(e,t,n){this.currentSnapshot=e,this.newSnapshot=t,this.isPreview=n,this.promise=new Promise((i,s)=>this.resolvingFunctions={resolve:i,reject:s})}get shouldRender(){return!0}prepareToRender(){}finishRendering(){this.resolvingFunctions&&(this.resolvingFunctions.resolve(),delete this.resolvingFunctions)}createScriptElement(e){if(e.getAttribute("data-turbo-eval")=="false")return e;{let t=document.createElement("script");return this.cspNonce&&(t.nonce=this.cspNonce),t.textContent=e.textContent,t.async=!1,Ft(t,e),t}}preservingPermanentElements(e){se.preservingPermanentElements(this.permanentElementMap,e)}focusFirstAutofocusableElement(){let e=this.connectedSnapshot.firstAutofocusableElement;Bt(e)&&e.focus()}get connectedSnapshot(){return this.newSnapshot.isConnected?this.newSnapshot:this.currentSnapshot}get currentElement(){return this.currentSnapshot.element}get newElement(){return this.newSnapshot.element}get permanentElementMap(){return this.currentSnapshot.getPermanentElementMapForSnapshot(this.newSnapshot)}get cspNonce(){var e;return(e=document.head.querySelector('meta[name="csp-nonce"]'))===null||e===void 0?void 0:e.getAttribute("content")}};function Ft(r,e){for(let{name:t,value:n}of[...e.attributes])r.setAttribute(t,n)}function Bt(r){return r&&typeof r.focus=="function"}var oe=class extends N{get shouldRender(){return!0}async render(){await B(),this.preservingPermanentElements(()=>{this.loadFrameElement()}),this.scrollFrameIntoView(),await B(),this.focusFirstAutofocusableElement(),await B(),this.activateScriptElements()}loadFrameElement(){var e;let t=document.createRange();t.selectNodeContents(this.currentElement),t.deleteContents();let n=this.newElement,i=(e=n.ownerDocument)===null||e===void 0?void 0:e.createRange();i&&(i.selectNodeContents(n),this.currentElement.appendChild(i.extractContents()))}scrollFrameIntoView(){if(this.currentElement.autoscroll||this.newElement.autoscroll){let e=this.currentElement.firstElementChild,t=It(this.currentElement.getAttribute("data-autoscroll-block"),"end");if(e)return e.scrollIntoView({block:t}),!0}return!1}activateScriptElements(){for(let e of this.newScriptElements){let t=this.createScriptElement(e);e.replaceWith(t)}}get newScriptElements(){return this.currentElement.querySelectorAll("script")}};function It(r,e){return r=="end"||r=="start"||r=="center"||r=="nearest"?r:e}var g=class{constructor(){this.hiding=!1,this.value=0,this.visible=!1,this.trickle=()=>{this.setValue(this.value+Math.random()/100)},this.stylesheetElement=this.createStylesheetElement(),this.progressElement=this.createProgressElement(),this.installStylesheetElement(),this.setValue(0)}static get defaultCSS(){return te` +(()=>{(function(){if(window.Reflect===void 0||window.customElements===void 0||window.customElements.polyfillWrapFlushCallback)return;let t=HTMLElement,e={HTMLElement:function(){return Reflect.construct(t,[],this.constructor)}};window.HTMLElement=e.HTMLElement,HTMLElement.prototype=t.prototype,HTMLElement.prototype.constructor=HTMLElement,Object.setPrototypeOf(HTMLElement,t)})();var xt=new WeakMap;function kr(t){let e=t instanceof Element?t:t instanceof Node?t.parentElement:null,i=e?e.closest("input, button"):null;return(i==null?void 0:i.type)=="submit"?i:null}function Rr(t){let e=kr(t.target);e&&e.form&&xt.set(e.form,e)}(function(){"SubmitEvent"in window||(addEventListener("click",Rr,!0),Object.defineProperty(Event.prototype,"submitter",{get(){if(this.type=="submit"&&this.target instanceof HTMLFormElement)return xt.get(this.target)}}))})();var G;(function(t){t.eager="eager",t.lazy="lazy"})(G||(G={}));var V=class extends HTMLElement{constructor(){super();this.loaded=Promise.resolve(),this.delegate=new V.delegateConstructor(this)}static get observedAttributes(){return["disabled","loading","src"]}connectedCallback(){this.delegate.connect()}disconnectedCallback(){this.delegate.disconnect()}reload(){let{src:e}=this;this.src=null,this.src=e}attributeChangedCallback(e){e=="loading"?this.delegate.loadingStyleChanged():e=="src"?this.delegate.sourceURLChanged():this.delegate.disabledChanged()}get src(){return this.getAttribute("src")}set src(e){e?this.setAttribute("src",e):this.removeAttribute("src")}get loading(){return Or(this.getAttribute("loading")||"")}set loading(e){e?this.setAttribute("loading",e):this.removeAttribute("loading")}get disabled(){return this.hasAttribute("disabled")}set disabled(e){e?this.setAttribute("disabled",""):this.removeAttribute("disabled")}get autoscroll(){return this.hasAttribute("autoscroll")}set autoscroll(e){e?this.setAttribute("autoscroll",""):this.removeAttribute("autoscroll")}get complete(){return!this.delegate.isLoading}get isActive(){return this.ownerDocument===document&&!this.isPreview}get isPreview(){var e,i;return(i=(e=this.ownerDocument)===null||e===void 0?void 0:e.documentElement)===null||i===void 0?void 0:i.hasAttribute("data-turbo-preview")}};function Or(t){switch(t.toLowerCase()){case"lazy":return G.lazy;default:return G.eager}}function F(t){return new URL(t.toString(),document.baseURI)}function ie(t){let e;if(t.hash)return t.hash.slice(1);if(e=t.href.match(/#(.*)$/))return e[1]}function Ir(t){return(Fr(t).match(/\.[^.]*$/)||[])[0]||""}function xr(t){return!!Ir(t).match(/^(?:|\.(?:htm|html|xhtml))$/)}function _r(t,e){let i=Nr(e);return t.href===F(i).href||t.href.startsWith(i)}function rt(t){let e=ie(t);return e!=null?t.href.slice(0,-(e.length+1)):t.href}function _e(t){return rt(t)}function Mr(t,e){return F(t).href==F(e).href}function Dr(t){return t.pathname.split("/").slice(1)}function Fr(t){return Dr(t).slice(-1)[0]}function Nr(t){return Br(t.origin+t.pathname)}function Br(t){return t.endsWith("/")?t:t+"/"}var nt=class{constructor(e){this.response=e}get succeeded(){return this.response.ok}get failed(){return!this.succeeded}get clientError(){return this.statusCode>=400&&this.statusCode<=499}get serverError(){return this.statusCode>=500&&this.statusCode<=599}get redirected(){return this.response.redirected}get location(){return F(this.response.url)}get isHTML(){return this.contentType&&this.contentType.match(/^(?:text\/([^\s;,]+\b)?html|application\/xhtml\+xml)\b/)}get statusCode(){return this.response.status}get contentType(){return this.header("Content-Type")}get responseText(){return this.response.text()}get responseHTML(){return this.isHTML?this.response.text():Promise.resolve(void 0)}header(e){return this.response.headers.get(e)}};function P(t,{target:e,cancelable:i,detail:r}={}){let n=new CustomEvent(t,{cancelable:i,bubbles:!0,detail:r});return(e||document.documentElement).dispatchEvent(n),n}function Me(){return new Promise(t=>requestAnimationFrame(()=>t()))}function Hr(){return new Promise(t=>setTimeout(()=>t(),0))}function jr(){return Promise.resolve()}function _t(t=""){return new DOMParser().parseFromString(t,"text/html")}function Mt(t,...e){let i=Ur(t,e).replace(/^\n/,"").split(` +`),r=i[0].match(/^\s+/),n=r?r[0].length:0;return i.map(s=>s.slice(n)).join(` +`)}function Ur(t,e){return t.reduce((i,r,n)=>{let s=e[n]==null?"":e[n];return i+r+s},"")}function me(){return Array.apply(null,{length:36}).map((t,e)=>e==8||e==13||e==18||e==23?"-":e==14?"4":e==19?(Math.floor(Math.random()*4)+8).toString(16):Math.floor(Math.random()*15).toString(16)).join("")}var L;(function(t){t[t.get=0]="get",t[t.post=1]="post",t[t.put=2]="put",t[t.patch=3]="patch",t[t.delete=4]="delete"})(L||(L={}));function Vr(t){switch(t.toLowerCase()){case"get":return L.get;case"post":return L.post;case"put":return L.put;case"patch":return L.patch;case"delete":return L.delete}}var De=class{constructor(e,i,r,n=new URLSearchParams){this.abortController=new AbortController,this.resolveRequestPromise=s=>{},this.delegate=e,this.method=i,this.headers=this.defaultHeaders,this.isIdempotent?this.url=$r(r,[...n.entries()]):(this.body=n,this.url=r)}get location(){return this.url}get params(){return this.url.searchParams}get entries(){return this.body?Array.from(this.body.entries()):[]}cancel(){this.abortController.abort()}async perform(){var e,i;let{fetchOptions:r}=this;(i=(e=this.delegate).prepareHeadersForRequest)===null||i===void 0||i.call(e,this.headers,this),await this.allowRequestToBeIntercepted(r);try{this.delegate.requestStarted(this);let n=await fetch(this.url.href,r);return await this.receive(n)}catch(n){if(n.name!=="AbortError")throw this.delegate.requestErrored(this,n),n}finally{this.delegate.requestFinished(this)}}async receive(e){let i=new nt(e);return P("turbo:before-fetch-response",{cancelable:!0,detail:{fetchResponse:i}}).defaultPrevented?this.delegate.requestPreventedHandlingResponse(this,i):i.succeeded?this.delegate.requestSucceededWithResponse(this,i):this.delegate.requestFailedWithResponse(this,i),i}get fetchOptions(){var e;return{method:L[this.method].toUpperCase(),credentials:"same-origin",headers:this.headers,redirect:"follow",body:this.body,signal:this.abortSignal,referrer:(e=this.delegate.referrer)===null||e===void 0?void 0:e.href}}get defaultHeaders(){return{Accept:"text/html, application/xhtml+xml"}}get isIdempotent(){return this.method==L.get}get abortSignal(){return this.abortController.signal}async allowRequestToBeIntercepted(e){let i=new Promise(n=>this.resolveRequestPromise=n);P("turbo:before-fetch-request",{cancelable:!0,detail:{fetchOptions:e,url:this.url.href,resume:this.resolveRequestPromise}}).defaultPrevented&&await i}};function $r(t,e){let i=new URLSearchParams(t.search);for(let[r,n]of e)n instanceof File||(i.has(r)?(i.delete(r),t.searchParams.set(r,n)):t.searchParams.append(r,n));return t}var Dt=class{constructor(e,i){this.started=!1,this.intersect=r=>{let n=r.slice(-1)[0];(n==null?void 0:n.isIntersecting)&&this.delegate.elementAppearedInViewport(this.element)},this.delegate=e,this.element=i,this.intersectionObserver=new IntersectionObserver(this.intersect)}start(){this.started||(this.started=!0,this.intersectionObserver.observe(this.element))}stop(){this.started&&(this.started=!1,this.intersectionObserver.unobserve(this.element))}},ae=class{constructor(e){this.templateElement=document.createElement("template"),this.templateElement.innerHTML=e}static wrap(e){return typeof e=="string"?new this(e):e}get fragment(){let e=document.createDocumentFragment();for(let i of this.foreignElements)e.appendChild(document.importNode(i,!0));return e}get foreignElements(){return this.templateChildren.reduce((e,i)=>i.tagName.toLowerCase()=="turbo-stream"?[...e,i]:e,[])}get templateChildren(){return Array.from(this.templateElement.content.children)}};ae.contentType="text/vnd.turbo-stream.html";var Y;(function(t){t[t.initialized=0]="initialized",t[t.requesting=1]="requesting",t[t.waiting=2]="waiting",t[t.receiving=3]="receiving",t[t.stopping=4]="stopping",t[t.stopped=5]="stopped"})(Y||(Y={}));var Q;(function(t){t.urlEncoded="application/x-www-form-urlencoded",t.multipart="multipart/form-data",t.plain="text/plain"})(Q||(Q={}));function qr(t){switch(t.toLowerCase()){case Q.multipart:return Q.multipart;case Q.plain:return Q.plain;default:return Q.urlEncoded}}var st=class{constructor(e,i,r,n=!1){this.state=Y.initialized,this.delegate=e,this.formElement=i,this.submitter=r,this.formData=Wr(i,r),this.fetchRequest=new De(this,this.method,this.location,this.body),this.mustRedirect=n}get method(){var e;let i=((e=this.submitter)===null||e===void 0?void 0:e.getAttribute("formmethod"))||this.formElement.getAttribute("method")||"";return Vr(i.toLowerCase())||L.get}get action(){var e;let i=typeof this.formElement.action=="string"?this.formElement.action:null;return((e=this.submitter)===null||e===void 0?void 0:e.getAttribute("formaction"))||this.formElement.getAttribute("action")||i||""}get location(){return F(this.action)}get body(){return this.enctype==Q.urlEncoded||this.method==L.get?new URLSearchParams(this.stringFormData):this.formData}get enctype(){var e;return qr(((e=this.submitter)===null||e===void 0?void 0:e.getAttribute("formenctype"))||this.formElement.enctype)}get isIdempotent(){return this.fetchRequest.isIdempotent}get stringFormData(){return[...this.formData].reduce((e,[i,r])=>e.concat(typeof r=="string"?[[i,r]]:[]),[])}async start(){let{initialized:e,requesting:i}=Y;if(this.state==e)return this.state=i,this.fetchRequest.perform()}stop(){let{stopping:e,stopped:i}=Y;if(this.state!=e&&this.state!=i)return this.state=e,this.fetchRequest.cancel(),!0}prepareHeadersForRequest(e,i){if(!i.isIdempotent){let r=Kr(Ft("csrf-param"))||Ft("csrf-token");r&&(e["X-CSRF-Token"]=r),e.Accept=[ae.contentType,e.Accept].join(", ")}}requestStarted(e){this.state=Y.waiting,P("turbo:submit-start",{target:this.formElement,detail:{formSubmission:this}}),this.delegate.formSubmissionStarted(this)}requestPreventedHandlingResponse(e,i){this.result={success:i.succeeded,fetchResponse:i}}requestSucceededWithResponse(e,i){if(i.clientError||i.serverError)this.delegate.formSubmissionFailedWithResponse(this,i);else if(this.requestMustRedirect(e)&&zr(i)){let r=new Error("Form responses must redirect to another location");this.delegate.formSubmissionErrored(this,r)}else this.state=Y.receiving,this.result={success:!0,fetchResponse:i},this.delegate.formSubmissionSucceededWithResponse(this,i)}requestFailedWithResponse(e,i){this.result={success:!1,fetchResponse:i},this.delegate.formSubmissionFailedWithResponse(this,i)}requestErrored(e,i){this.result={success:!1,error:i},this.delegate.formSubmissionErrored(this,i)}requestFinished(e){this.state=Y.stopped,P("turbo:submit-end",{target:this.formElement,detail:Object.assign({formSubmission:this},this.result)}),this.delegate.formSubmissionFinished(this)}requestMustRedirect(e){return!e.isIdempotent&&this.mustRedirect}};function Wr(t,e){let i=new FormData(t),r=e==null?void 0:e.getAttribute("name"),n=e==null?void 0:e.getAttribute("value");return r&&n!=null&&i.get(r)!=n&&i.append(r,n),i}function Kr(t){if(t!=null){let i=(document.cookie?document.cookie.split("; "):[]).find(r=>r.startsWith(t));if(i){let r=i.split("=").slice(1).join("=");return r?decodeURIComponent(r):void 0}}}function Ft(t){let e=document.querySelector(`meta[name="${t}"]`);return e&&e.content}function zr(t){return t.statusCode==200&&!t.redirected}var ge=class{constructor(e){this.element=e}get children(){return[...this.element.children]}hasAnchor(e){return this.getElementForAnchor(e)!=null}getElementForAnchor(e){return e?this.element.querySelector(`[id='${e}'], a[name='${e}']`):null}get isConnected(){return this.element.isConnected}get firstAutofocusableElement(){return this.element.querySelector("[autofocus]")}get permanentElements(){return[...this.element.querySelectorAll("[id][data-turbo-permanent]")]}getPermanentElementById(e){return this.element.querySelector(`#${e}[data-turbo-permanent]`)}getPermanentElementMapForSnapshot(e){let i={};for(let r of this.permanentElements){let{id:n}=r,s=e.getPermanentElementById(n);s&&(i[n]=[r,s])}return i}},ot=class{constructor(e,i){this.submitBubbled=r=>{if(r.target instanceof HTMLFormElement){let n=r.target,s=r.submitter||void 0;this.delegate.shouldInterceptFormSubmission(n,s)&&(r.preventDefault(),r.stopImmediatePropagation(),this.delegate.formSubmissionIntercepted(n,s))}},this.delegate=e,this.element=i}start(){this.element.addEventListener("submit",this.submitBubbled)}stop(){this.element.removeEventListener("submit",this.submitBubbled)}},at=class{constructor(e,i){this.resolveRenderPromise=r=>{},this.resolveInterceptionPromise=r=>{},this.delegate=e,this.element=i}scrollToAnchor(e){let i=this.snapshot.getElementForAnchor(e);i?(this.scrollToElement(i),this.focusElement(i)):this.scrollToPosition({x:0,y:0})}scrollToAnchorFromLocation(e){this.scrollToAnchor(ie(e))}scrollToElement(e){e.scrollIntoView()}focusElement(e){e instanceof HTMLElement&&(e.hasAttribute("tabindex")?e.focus():(e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")))}scrollToPosition({x:e,y:i}){this.scrollRoot.scrollTo(e,i)}scrollToTop(){this.scrollToPosition({x:0,y:0})}get scrollRoot(){return window}async render(e){let{isPreview:i,shouldRender:r,newSnapshot:n}=e;if(r)try{this.renderPromise=new Promise(a=>this.resolveRenderPromise=a),this.renderer=e,this.prepareToRenderSnapshot(e);let s=new Promise(a=>this.resolveInterceptionPromise=a);this.delegate.allowsImmediateRender(n,this.resolveInterceptionPromise)||await s,await this.renderSnapshot(e),this.delegate.viewRenderedSnapshot(n,i),this.finishRenderingSnapshot(e)}finally{delete this.renderer,this.resolveRenderPromise(void 0),delete this.renderPromise}else this.invalidate()}invalidate(){this.delegate.viewInvalidated()}prepareToRenderSnapshot(e){this.markAsPreview(e.isPreview),e.prepareToRender()}markAsPreview(e){e?this.element.setAttribute("data-turbo-preview",""):this.element.removeAttribute("data-turbo-preview")}async renderSnapshot(e){await e.render()}finishRenderingSnapshot(e){e.finishRendering()}},Nt=class extends at{invalidate(){this.element.innerHTML=""}get snapshot(){return new ge(this.element)}},lt=class{constructor(e,i){this.clickBubbled=r=>{this.respondsToEventTarget(r.target)?this.clickEvent=r:delete this.clickEvent},this.linkClicked=r=>{this.clickEvent&&this.respondsToEventTarget(r.target)&&r.target instanceof Element&&this.delegate.shouldInterceptLinkClick(r.target,r.detail.url)&&(this.clickEvent.preventDefault(),r.preventDefault(),this.delegate.linkClickIntercepted(r.target,r.detail.url)),delete this.clickEvent},this.willVisit=()=>{delete this.clickEvent},this.delegate=e,this.element=i}start(){this.element.addEventListener("click",this.clickBubbled),document.addEventListener("turbo:click",this.linkClicked),document.addEventListener("turbo:before-visit",this.willVisit)}stop(){this.element.removeEventListener("click",this.clickBubbled),document.removeEventListener("turbo:click",this.linkClicked),document.removeEventListener("turbo:before-visit",this.willVisit)}respondsToEventTarget(e){let i=e instanceof Element?e:e instanceof Node?e.parentElement:null;return i&&i.closest("turbo-frame, html")==this.element}},Bt=class{constructor(e){this.permanentElementMap=e}static preservingPermanentElements(e,i){let r=new this(e);r.enter(),i(),r.leave()}enter(){for(let e in this.permanentElementMap){let[,i]=this.permanentElementMap[e];this.replaceNewPermanentElementWithPlaceholder(i)}}leave(){for(let e in this.permanentElementMap){let[i]=this.permanentElementMap[e];this.replaceCurrentPermanentElementWithClone(i),this.replacePlaceholderWithPermanentElement(i)}}replaceNewPermanentElementWithPlaceholder(e){let i=Jr(e);e.replaceWith(i)}replaceCurrentPermanentElementWithClone(e){let i=e.cloneNode(!0);e.replaceWith(i)}replacePlaceholderWithPermanentElement(e){let i=this.getPlaceholderById(e.id);i==null||i.replaceWith(e)}getPlaceholderById(e){return this.placeholders.find(i=>i.content==e)}get placeholders(){return[...document.querySelectorAll("meta[name=turbo-permanent-placeholder][content]")]}};function Jr(t){let e=document.createElement("meta");return e.setAttribute("name","turbo-permanent-placeholder"),e.setAttribute("content",t.id),e}var Fe=class{constructor(e,i,r){this.currentSnapshot=e,this.newSnapshot=i,this.isPreview=r,this.promise=new Promise((n,s)=>this.resolvingFunctions={resolve:n,reject:s})}get shouldRender(){return!0}prepareToRender(){}finishRendering(){this.resolvingFunctions&&(this.resolvingFunctions.resolve(),delete this.resolvingFunctions)}createScriptElement(e){if(e.getAttribute("data-turbo-eval")=="false")return e;{let i=document.createElement("script");return this.cspNonce&&(i.nonce=this.cspNonce),i.textContent=e.textContent,i.async=!1,Xr(i,e),i}}preservingPermanentElements(e){Bt.preservingPermanentElements(this.permanentElementMap,e)}focusFirstAutofocusableElement(){let e=this.connectedSnapshot.firstAutofocusableElement;Gr(e)&&e.focus()}get connectedSnapshot(){return this.newSnapshot.isConnected?this.newSnapshot:this.currentSnapshot}get currentElement(){return this.currentSnapshot.element}get newElement(){return this.newSnapshot.element}get permanentElementMap(){return this.currentSnapshot.getPermanentElementMapForSnapshot(this.newSnapshot)}get cspNonce(){var e;return(e=document.head.querySelector('meta[name="csp-nonce"]'))===null||e===void 0?void 0:e.getAttribute("content")}};function Xr(t,e){for(let{name:i,value:r}of[...e.attributes])t.setAttribute(i,r)}function Gr(t){return t&&typeof t.focus=="function"}var Ht=class extends Fe{get shouldRender(){return!0}async render(){await Me(),this.preservingPermanentElements(()=>{this.loadFrameElement()}),this.scrollFrameIntoView(),await Me(),this.focusFirstAutofocusableElement(),await Me(),this.activateScriptElements()}loadFrameElement(){var e;let i=document.createRange();i.selectNodeContents(this.currentElement),i.deleteContents();let r=this.newElement,n=(e=r.ownerDocument)===null||e===void 0?void 0:e.createRange();n&&(n.selectNodeContents(r),this.currentElement.appendChild(n.extractContents()))}scrollFrameIntoView(){if(this.currentElement.autoscroll||this.newElement.autoscroll){let e=this.currentElement.firstElementChild,i=Yr(this.currentElement.getAttribute("data-autoscroll-block"),"end");if(e)return e.scrollIntoView({block:i}),!0}return!1}activateScriptElements(){for(let e of this.newScriptElements){let i=this.createScriptElement(e);e.replaceWith(i)}}get newScriptElements(){return this.currentElement.querySelectorAll("script")}};function Yr(t,e){return t=="end"||t=="start"||t=="center"||t=="nearest"?t:e}var N=class{constructor(){this.hiding=!1,this.value=0,this.visible=!1,this.trickle=()=>{this.setValue(this.value+Math.random()/100)},this.stylesheetElement=this.createStylesheetElement(),this.progressElement=this.createProgressElement(),this.installStylesheetElement(),this.setValue(0)}static get defaultCSS(){return Mt` .turbo-progress-bar { position: fixed; display: block; @@ -10,11 +10,11 @@ background: #0076ff; z-index: 9999; transition: - width ${g.animationDuration}ms ease-out, - opacity ${g.animationDuration/2}ms ${g.animationDuration/2}ms ease-in; + width ${N.animationDuration}ms ease-out, + opacity ${N.animationDuration/2}ms ${N.animationDuration/2}ms ease-in; transform: translate3d(0, 0, 0); } - `}show(){this.visible||(this.visible=!0,this.installProgressElement(),this.startTrickling())}hide(){this.visible&&!this.hiding&&(this.hiding=!0,this.fadeProgressElement(()=>{this.uninstallProgressElement(),this.stopTrickling(),this.visible=!1,this.hiding=!1}))}setValue(e){this.value=e,this.refresh()}installStylesheetElement(){document.head.insertBefore(this.stylesheetElement,document.head.firstChild)}installProgressElement(){this.progressElement.style.width="0",this.progressElement.style.opacity="1",document.documentElement.insertBefore(this.progressElement,document.body),this.refresh()}fadeProgressElement(e){this.progressElement.style.opacity="0",setTimeout(e,g.animationDuration*1.5)}uninstallProgressElement(){this.progressElement.parentNode&&document.documentElement.removeChild(this.progressElement)}startTrickling(){this.trickleInterval||(this.trickleInterval=window.setInterval(this.trickle,g.animationDuration))}stopTrickling(){window.clearInterval(this.trickleInterval),delete this.trickleInterval}refresh(){requestAnimationFrame(()=>{this.progressElement.style.width=`${10+this.value*90}%`})}createStylesheetElement(){let e=document.createElement("style");return e.type="text/css",e.textContent=g.defaultCSS,e}createProgressElement(){let e=document.createElement("div");return e.className="turbo-progress-bar",e}};g.animationDuration=300;var ae=class extends M{constructor(){super(...arguments);this.detailsByOuterHTML=this.children.filter(e=>!jt(e)).reduce((e,t)=>{let{outerHTML:n}=t,i=n in e?e[n]:{type:Nt(t),tracked:qt(t),elements:[]};return Object.assign(Object.assign({},e),{[n]:Object.assign(Object.assign({},i),{elements:[...i.elements,t]})})},{})}get trackedElementSignature(){return Object.keys(this.detailsByOuterHTML).filter(e=>this.detailsByOuterHTML[e].tracked).join("")}getScriptElementsNotInSnapshot(e){return this.getElementsMatchingTypeNotInSnapshot("script",e)}getStylesheetElementsNotInSnapshot(e){return this.getElementsMatchingTypeNotInSnapshot("stylesheet",e)}getElementsMatchingTypeNotInSnapshot(e,t){return Object.keys(this.detailsByOuterHTML).filter(n=>!(n in t.detailsByOuterHTML)).map(n=>this.detailsByOuterHTML[n]).filter(({type:n})=>n==e).map(({elements:[n]})=>n)}get provisionalElements(){return Object.keys(this.detailsByOuterHTML).reduce((e,t)=>{let{type:n,tracked:i,elements:s}=this.detailsByOuterHTML[t];return n==null&&!i?[...e,...s]:s.length>1?[...e,...s.slice(1)]:e},[])}getMetaValue(e){let t=this.findMetaElementByName(e);return t?t.getAttribute("content"):null}findMetaElementByName(e){return Object.keys(this.detailsByOuterHTML).reduce((t,n)=>{let{elements:[i]}=this.detailsByOuterHTML[n];return Ht(i,e)?i:t},void 0)}};function Nt(r){if(Vt(r))return"script";if(Dt(r))return"stylesheet"}function qt(r){return r.getAttribute("data-turbo-track")=="reload"}function Vt(r){return r.tagName.toLowerCase()=="script"}function jt(r){return r.tagName.toLowerCase()=="noscript"}function Dt(r){let e=r.tagName.toLowerCase();return e=="style"||e=="link"&&r.getAttribute("rel")=="stylesheet"}function Ht(r,e){return r.tagName.toLowerCase()=="meta"&&r.getAttribute("name")==e}var b=class extends M{constructor(e,t){super(e);this.headSnapshot=t}static fromHTMLString(e=""){return this.fromDocument(ee(e))}static fromElement(e){return this.fromDocument(e.ownerDocument)}static fromDocument({head:e,body:t}){return new this(t,new ae(e))}clone(){return new b(this.element.cloneNode(!0),this.headSnapshot)}get headElement(){return this.headSnapshot.element}get rootLocation(){var e;let t=(e=this.getSetting("root"))!==null&&e!==void 0?e:"/";return m(t)}get cacheControlValue(){return this.getSetting("cache-control")}get isPreviewable(){return this.cacheControlValue!="no-preview"}get isCacheable(){return this.cacheControlValue!="no-cache"}get isVisitable(){return this.getSetting("visit-control")!="reload"}getSetting(e){return this.headSnapshot.getMetaValue(`turbo-${e}`)}},T;(function(r){r.visitStart="visitStart",r.requestStart="requestStart",r.requestEnd="requestEnd",r.visitEnd="visitEnd"})(T||(T={}));var p;(function(r){r.initialized="initialized",r.started="started",r.canceled="canceled",r.failed="failed",r.completed="completed"})(p||(p={}));var _t={action:"advance",historyChanged:!1},A;(function(r){r[r.networkFailure=0]="networkFailure",r[r.timeoutFailure=-1]="timeoutFailure",r[r.contentTypeMismatch=-2]="contentTypeMismatch"})(A||(A={}));var ce=class{constructor(e,t,n,i={}){this.identifier=k(),this.timingMetrics={},this.followedRedirect=!1,this.historyChanged=!1,this.scrolled=!1,this.snapshotCached=!1,this.state=p.initialized,this.delegate=e,this.location=t,this.restorationIdentifier=n||k();let{action:s,historyChanged:o,referrer:c,snapshotHTML:l,response:a}=Object.assign(Object.assign({},_t),i);this.action=s,this.historyChanged=o,this.referrer=c,this.snapshotHTML=l,this.response=a,this.isSamePage=this.delegate.locationWithActionIsSamePage(this.location,this.action)}get adapter(){return this.delegate.adapter}get view(){return this.delegate.view}get history(){return this.delegate.history}get restorationData(){return this.history.getRestorationDataForIdentifier(this.restorationIdentifier)}get silent(){return this.isSamePage}start(){this.state==p.initialized&&(this.recordTimingMetric(T.visitStart),this.state=p.started,this.adapter.visitStarted(this),this.delegate.visitStarted(this))}cancel(){this.state==p.started&&(this.request&&this.request.cancel(),this.cancelRender(),this.state=p.canceled)}complete(){this.state==p.started&&(this.recordTimingMetric(T.visitEnd),this.state=p.completed,this.adapter.visitCompleted(this),this.delegate.visitCompleted(this),this.followRedirect())}fail(){this.state==p.started&&(this.state=p.failed,this.adapter.visitFailed(this))}changeHistory(){var e;if(!this.historyChanged){let t=this.location.href===((e=this.referrer)===null||e===void 0?void 0:e.href)?"replace":this.action,n=this.getHistoryMethodForAction(t);this.history.update(n,this.location,this.restorationIdentifier),this.historyChanged=!0}}issueRequest(){this.hasPreloadedResponse()?this.simulateRequest():this.shouldIssueRequest()&&!this.request&&(this.request=new I(this,h.get,this.location),this.request.perform())}simulateRequest(){this.response&&(this.startRequest(),this.recordResponse(),this.finishRequest())}startRequest(){this.recordTimingMetric(T.requestStart),this.adapter.visitRequestStarted(this)}recordResponse(e=this.response){if(this.response=e,e){let{statusCode:t}=e;le(t)?this.adapter.visitRequestCompleted(this):this.adapter.visitRequestFailedWithStatusCode(this,t)}}finishRequest(){this.recordTimingMetric(T.requestEnd),this.adapter.visitRequestFinished(this)}loadResponse(){if(this.response){let{statusCode:e,responseHTML:t}=this.response;this.render(async()=>{this.cacheSnapshot(),this.view.renderPromise&&await this.view.renderPromise,le(e)&&t!=null?(await this.view.renderPage(b.fromHTMLString(t)),this.adapter.visitRendered(this),this.complete()):(await this.view.renderError(b.fromHTMLString(t)),this.adapter.visitRendered(this),this.fail())})}}getCachedSnapshot(){let e=this.view.getCachedSnapshotForLocation(this.location)||this.getPreloadedSnapshot();if(e&&(!P(this.location)||e.hasAnchor(P(this.location)))&&(this.action=="restore"||e.isPreviewable))return e}getPreloadedSnapshot(){if(this.snapshotHTML)return b.fromHTMLString(this.snapshotHTML)}hasCachedSnapshot(){return this.getCachedSnapshot()!=null}loadCachedSnapshot(){let e=this.getCachedSnapshot();if(e){let t=this.shouldIssueRequest();this.render(async()=>{this.cacheSnapshot(),this.isSamePage?this.adapter.visitRendered(this):(this.view.renderPromise&&await this.view.renderPromise,await this.view.renderPage(e,t),this.adapter.visitRendered(this),t||this.complete())})}}followRedirect(){this.redirectedToLocation&&!this.followedRedirect&&(this.adapter.visitProposedToLocation(this.redirectedToLocation,{action:"replace",response:this.response}),this.followedRedirect=!0)}goToSamePageAnchor(){this.isSamePage&&this.render(async()=>{this.cacheSnapshot(),this.adapter.visitRendered(this)})}requestStarted(){this.startRequest()}requestPreventedHandlingResponse(e,t){}async requestSucceededWithResponse(e,t){let n=await t.responseHTML;n==null?this.recordResponse({statusCode:A.contentTypeMismatch}):(this.redirectedToLocation=t.redirected?t.location:void 0,this.recordResponse({statusCode:t.statusCode,responseHTML:n}))}async requestFailedWithResponse(e,t){let n=await t.responseHTML;n==null?this.recordResponse({statusCode:A.contentTypeMismatch}):this.recordResponse({statusCode:t.statusCode,responseHTML:n})}requestErrored(e,t){this.recordResponse({statusCode:A.networkFailure})}requestFinished(){this.finishRequest()}performScroll(){this.scrolled||(this.action=="restore"?this.scrollToRestoredPosition()||this.scrollToAnchor()||this.view.scrollToTop():this.scrollToAnchor()||this.view.scrollToTop(),this.isSamePage&&this.delegate.visitScrolledToSamePageLocation(this.view.lastRenderedLocation,this.location),this.scrolled=!0)}scrollToRestoredPosition(){let{scrollPosition:e}=this.restorationData;if(e)return this.view.scrollToPosition(e),!0}scrollToAnchor(){let e=P(this.location);if(e!=null)return this.view.scrollToAnchor(e),!0}recordTimingMetric(e){this.timingMetrics[e]=new Date().getTime()}getTimingMetrics(){return Object.assign({},this.timingMetrics)}getHistoryMethodForAction(e){switch(e){case"replace":return history.replaceState;case"advance":case"restore":return history.pushState}}hasPreloadedResponse(){return typeof this.response=="object"}shouldIssueRequest(){return this.isSamePage?!1:this.action=="restore"?!this.hasCachedSnapshot():!0}cacheSnapshot(){this.snapshotCached||(this.view.cacheSnapshot(),this.snapshotCached=!0)}async render(e){this.cancelRender(),await new Promise(t=>{this.frame=requestAnimationFrame(()=>t())}),await e(),delete this.frame,this.performScroll()}cancelRender(){this.frame&&(cancelAnimationFrame(this.frame),delete this.frame)}};function le(r){return r>=200&&r<300}var ue=class{constructor(e){this.progressBar=new g,this.showProgressBar=()=>{this.progressBar.show()},this.session=e}visitProposedToLocation(e,t){this.navigator.startVisit(e,k(),t)}visitStarted(e){e.issueRequest(),e.changeHistory(),e.goToSamePageAnchor(),e.loadCachedSnapshot()}visitRequestStarted(e){this.progressBar.setValue(0),e.hasCachedSnapshot()||e.action!="restore"?this.showVisitProgressBarAfterDelay():this.showProgressBar()}visitRequestCompleted(e){e.loadResponse()}visitRequestFailedWithStatusCode(e,t){switch(t){case A.networkFailure:case A.timeoutFailure:case A.contentTypeMismatch:return this.reload();default:return e.loadResponse()}}visitRequestFinished(e){this.progressBar.setValue(1),this.hideVisitProgressBar()}visitCompleted(e){}pageInvalidated(){this.reload()}visitFailed(e){}visitRendered(e){}formSubmissionStarted(e){this.progressBar.setValue(0),this.showFormProgressBarAfterDelay()}formSubmissionFinished(e){this.progressBar.setValue(1),this.hideFormProgressBar()}showVisitProgressBarAfterDelay(){this.visitProgressBarTimeout=window.setTimeout(this.showProgressBar,this.session.progressBarDelay)}hideVisitProgressBar(){this.progressBar.hide(),this.visitProgressBarTimeout!=null&&(window.clearTimeout(this.visitProgressBarTimeout),delete this.visitProgressBarTimeout)}showFormProgressBarAfterDelay(){this.formProgressBarTimeout==null&&(this.formProgressBarTimeout=window.setTimeout(this.showProgressBar,this.session.progressBarDelay))}hideFormProgressBar(){this.progressBar.hide(),this.formProgressBarTimeout!=null&&(window.clearTimeout(this.formProgressBarTimeout),delete this.formProgressBarTimeout)}reload(){window.location.reload()}get navigator(){return this.session.navigator}},he=class{constructor(){this.started=!1}start(){this.started||(this.started=!0,addEventListener("turbo:before-cache",this.removeStaleElements,!1))}stop(){this.started&&(this.started=!1,removeEventListener("turbo:before-cache",this.removeStaleElements,!1))}removeStaleElements(){let e=[...document.querySelectorAll('[data-turbo-cache="false"]')];for(let t of e)t.remove()}},de=class{constructor(e){this.started=!1,this.submitCaptured=()=>{removeEventListener("submit",this.submitBubbled,!1),addEventListener("submit",this.submitBubbled,!1)},this.submitBubbled=t=>{if(!t.defaultPrevented){let n=t.target instanceof HTMLFormElement?t.target:void 0,i=t.submitter||void 0;n&&((i==null?void 0:i.getAttribute("formmethod"))||n.method)!="dialog"&&this.delegate.willSubmitForm(n,i)&&(t.preventDefault(),this.delegate.formSubmitted(n,i))}},this.delegate=e}start(){this.started||(addEventListener("submit",this.submitCaptured,!0),this.started=!0)}stop(){this.started&&(removeEventListener("submit",this.submitCaptured,!0),this.started=!1)}},fe=class{constructor(e){this.element=e,this.linkInterceptor=new $(this,e),this.formInterceptor=new K(this,e)}start(){this.linkInterceptor.start(),this.formInterceptor.start()}stop(){this.linkInterceptor.stop(),this.formInterceptor.stop()}shouldInterceptLinkClick(e,t){return this.shouldRedirect(e)}linkClickIntercepted(e,t){let n=this.findFrameElement(e);n&&(n.setAttribute("reloadable",""),n.src=t)}shouldInterceptFormSubmission(e,t){return this.shouldRedirect(e,t)}formSubmissionIntercepted(e,t){let n=this.findFrameElement(e);n&&(n.removeAttribute("reloadable"),n.delegate.formSubmissionIntercepted(e,t))}shouldRedirect(e,t){let n=this.findFrameElement(e);return n?n!=e.closest("turbo-frame"):!1}findFrameElement(e){let t=e.getAttribute("data-turbo-frame");if(t&&t!="_top"){let n=this.element.querySelector(`#${t}:not([disabled])`);if(n instanceof v)return n}}},pe=class{constructor(e){this.restorationIdentifier=k(),this.restorationData={},this.started=!1,this.pageLoaded=!1,this.onPopState=t=>{if(this.shouldHandlePopState()){let{turbo:n}=t.state||{};if(n){this.location=new URL(window.location.href);let{restorationIdentifier:i}=n;this.restorationIdentifier=i,this.delegate.historyPoppedToLocationWithRestorationIdentifier(this.location,i)}}},this.onPageLoad=async t=>{await Pt(),this.pageLoaded=!0},this.delegate=e}start(){this.started||(addEventListener("popstate",this.onPopState,!1),addEventListener("load",this.onPageLoad,!1),this.started=!0,this.replace(new URL(window.location.href)))}stop(){this.started&&(removeEventListener("popstate",this.onPopState,!1),removeEventListener("load",this.onPageLoad,!1),this.started=!1)}push(e,t){this.update(history.pushState,e,t)}replace(e,t){this.update(history.replaceState,e,t)}update(e,t,n=k()){let i={turbo:{restorationIdentifier:n}};e.call(history,i,"",t.href),this.location=t,this.restorationIdentifier=n}getRestorationDataForIdentifier(e){return this.restorationData[e]||{}}updateRestorationData(e){let{restorationIdentifier:t}=this,n=this.restorationData[t];this.restorationData[t]=Object.assign(Object.assign({},n),e)}assumeControlOfScrollRestoration(){var e;this.previousScrollRestoration||(this.previousScrollRestoration=(e=history.scrollRestoration)!==null&&e!==void 0?e:"auto",history.scrollRestoration="manual")}relinquishControlOfScrollRestoration(){this.previousScrollRestoration&&(history.scrollRestoration=this.previousScrollRestoration,delete this.previousScrollRestoration)}shouldHandlePopState(){return this.pageIsLoaded()}pageIsLoaded(){return this.pageLoaded||document.readyState=="complete"}},me=class{constructor(e){this.started=!1,this.clickCaptured=()=>{removeEventListener("click",this.clickBubbled,!1),addEventListener("click",this.clickBubbled,!1)},this.clickBubbled=t=>{if(this.clickEventIsSignificant(t)){let n=t.composedPath&&t.composedPath()[0]||t.target,i=this.findLinkFromClickTarget(n);if(i){let s=this.getLocationForLink(i);this.delegate.willFollowLinkToLocation(i,s)&&(t.preventDefault(),this.delegate.followedLinkToLocation(i,s))}}},this.delegate=e}start(){this.started||(addEventListener("click",this.clickCaptured,!0),this.started=!0)}stop(){this.started&&(removeEventListener("click",this.clickCaptured,!0),this.started=!1)}clickEventIsSignificant(e){return!(e.target&&e.target.isContentEditable||e.defaultPrevented||e.which>1||e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)}findLinkFromClickTarget(e){if(e instanceof Element)return e.closest("a[href]:not([target^=_]):not([download])")}getLocationForLink(e){return m(e.getAttribute("href")||"")}};function ge(r){return r=="advance"||r=="replace"||r=="restore"}var ve=class{constructor(e){this.delegate=e}proposeVisit(e,t={}){this.delegate.allowsVisitingLocationWithAction(e,t.action)&&this.delegate.visitProposedToLocation(e,t)}startVisit(e,t,n={}){this.stop(),this.currentVisit=new ce(this,m(e),t,Object.assign({referrer:this.location},n)),this.currentVisit.start()}submitForm(e,t){this.stop(),this.formSubmission=new U(this,e,t,!0),this.formSubmission.isIdempotent?this.proposeVisit(this.formSubmission.fetchRequest.url,{action:this.getActionForFormSubmission(this.formSubmission)}):this.formSubmission.start()}stop(){this.formSubmission&&(this.formSubmission.stop(),delete this.formSubmission),this.currentVisit&&(this.currentVisit.cancel(),delete this.currentVisit)}get adapter(){return this.delegate.adapter}get view(){return this.delegate.view}get history(){return this.delegate.history}formSubmissionStarted(e){typeof this.adapter.formSubmissionStarted=="function"&&this.adapter.formSubmissionStarted(e)}async formSubmissionSucceededWithResponse(e,t){if(e==this.formSubmission){let n=await t.responseHTML;if(n){e.method!=h.get&&this.view.clearSnapshotCache();let{statusCode:i}=t,s={response:{statusCode:i,responseHTML:n}};this.proposeVisit(t.location,s)}}}async formSubmissionFailedWithResponse(e,t){let n=await t.responseHTML;if(n){let i=b.fromHTMLString(n);t.serverError?await this.view.renderError(i):await this.view.renderPage(i),this.view.scrollToTop(),this.view.clearSnapshotCache()}}formSubmissionErrored(e,t){console.error(t)}formSubmissionFinished(e){typeof this.adapter.formSubmissionFinished=="function"&&this.adapter.formSubmissionFinished(e)}visitStarted(e){this.delegate.visitStarted(e)}visitCompleted(e){this.delegate.visitCompleted(e)}locationWithActionIsSamePage(e,t){let n=P(e),i=P(this.view.lastRenderedLocation),s=t==="restore"&&typeof n=="undefined";return t!=="replace"&&_(e)===_(this.view.lastRenderedLocation)&&(s||n!=null&&n!==i)}visitScrolledToSamePageLocation(e,t){this.delegate.visitScrolledToSamePageLocation(e,t)}get location(){return this.history.location}get restorationIdentifier(){return this.history.restorationIdentifier}getActionForFormSubmission(e){let{formElement:t,submitter:n}=e,i=(n==null?void 0:n.getAttribute("data-turbo-action"))||t.getAttribute("data-turbo-action");return ge(i)?i:"advance"}},y;(function(r){r[r.initial=0]="initial",r[r.loading=1]="loading",r[r.interactive=2]="interactive",r[r.complete=3]="complete"})(y||(y={}));var be=class{constructor(e){this.stage=y.initial,this.started=!1,this.interpretReadyState=()=>{let{readyState:t}=this;t=="interactive"?this.pageIsInteractive():t=="complete"&&this.pageIsComplete()},this.pageWillUnload=()=>{this.delegate.pageWillUnload()},this.delegate=e}start(){this.started||(this.stage==y.initial&&(this.stage=y.loading),document.addEventListener("readystatechange",this.interpretReadyState,!1),addEventListener("pagehide",this.pageWillUnload,!1),this.started=!0)}stop(){this.started&&(document.removeEventListener("readystatechange",this.interpretReadyState,!1),removeEventListener("pagehide",this.pageWillUnload,!1),this.started=!1)}pageIsInteractive(){this.stage==y.loading&&(this.stage=y.interactive,this.delegate.pageBecameInteractive())}pageIsComplete(){this.pageIsInteractive(),this.stage==y.interactive&&(this.stage=y.complete,this.delegate.pageLoaded())}get readyState(){return document.readyState}},ye=class{constructor(e){this.started=!1,this.onScroll=()=>{this.updatePosition({x:window.pageXOffset,y:window.pageYOffset})},this.delegate=e}start(){this.started||(addEventListener("scroll",this.onScroll,!1),this.onScroll(),this.started=!0)}stop(){this.started&&(removeEventListener("scroll",this.onScroll,!1),this.started=!1)}updatePosition(e){this.delegate.scrollPositionChanged(e)}},we=class{constructor(e){this.sources=new Set,this.started=!1,this.inspectFetchResponse=t=>{let n=Wt(t);n&&Ut(n)&&(t.preventDefault(),this.receiveMessageResponse(n))},this.receiveMessageEvent=t=>{this.started&&typeof t.data=="string"&&this.receiveMessageHTML(t.data)},this.delegate=e}start(){this.started||(this.started=!0,addEventListener("turbo:before-fetch-response",this.inspectFetchResponse,!1))}stop(){this.started&&(this.started=!1,removeEventListener("turbo:before-fetch-response",this.inspectFetchResponse,!1))}connectStreamSource(e){this.streamSourceIsConnected(e)||(this.sources.add(e),e.addEventListener("message",this.receiveMessageEvent,!1))}disconnectStreamSource(e){this.streamSourceIsConnected(e)&&(this.sources.delete(e),e.removeEventListener("message",this.receiveMessageEvent,!1))}streamSourceIsConnected(e){return this.sources.has(e)}async receiveMessageResponse(e){let t=await e.responseHTML;t&&this.receiveMessageHTML(t)}receiveMessageHTML(e){this.delegate.receivedMessageFromStream(new L(e))}};function Wt(r){var e;let t=(e=r.detail)===null||e===void 0?void 0:e.fetchResponse;if(t instanceof W)return t}function Ut(r){var e;return((e=r.contentType)!==null&&e!==void 0?e:"").startsWith(L.contentType)}var Ee=class extends N{async render(){this.replaceHeadAndBody(),this.activateScriptElements()}replaceHeadAndBody(){let{documentElement:e,head:t,body:n}=document;e.replaceChild(this.newHead,t),e.replaceChild(this.newElement,n)}activateScriptElements(){for(let e of this.scriptElements){let t=e.parentNode;if(t){let n=this.createScriptElement(e);t.replaceChild(n,e)}}}get newHead(){return this.newSnapshot.headSnapshot.element}get scriptElements(){return[...document.documentElement.querySelectorAll("script")]}},J=class extends N{get shouldRender(){return this.newSnapshot.isVisitable&&this.trackedElementsAreIdentical}prepareToRender(){this.mergeHead()}async render(){this.replaceBody()}finishRendering(){super.finishRendering(),this.isPreview||this.focusFirstAutofocusableElement()}get currentHeadSnapshot(){return this.currentSnapshot.headSnapshot}get newHeadSnapshot(){return this.newSnapshot.headSnapshot}get newElement(){return this.newSnapshot.element}mergeHead(){this.copyNewHeadStylesheetElements(),this.copyNewHeadScriptElements(),this.removeCurrentHeadProvisionalElements(),this.copyNewHeadProvisionalElements()}replaceBody(){this.preservingPermanentElements(()=>{this.activateNewBody(),this.assignNewBody()})}get trackedElementsAreIdentical(){return this.currentHeadSnapshot.trackedElementSignature==this.newHeadSnapshot.trackedElementSignature}copyNewHeadStylesheetElements(){for(let e of this.newHeadStylesheetElements)document.head.appendChild(e)}copyNewHeadScriptElements(){for(let e of this.newHeadScriptElements)document.head.appendChild(this.createScriptElement(e))}removeCurrentHeadProvisionalElements(){for(let e of this.currentHeadProvisionalElements)document.head.removeChild(e)}copyNewHeadProvisionalElements(){for(let e of this.newHeadProvisionalElements)document.head.appendChild(e)}activateNewBody(){document.adoptNode(this.newElement),this.activateNewBodyScriptElements()}activateNewBodyScriptElements(){for(let e of this.newBodyScriptElements){let t=this.createScriptElement(e);e.replaceWith(t)}}assignNewBody(){document.body&&this.newElement instanceof HTMLBodyElement?document.body.replaceWith(this.newElement):document.documentElement.appendChild(this.newElement)}get newHeadStylesheetElements(){return this.newHeadSnapshot.getStylesheetElementsNotInSnapshot(this.currentHeadSnapshot)}get newHeadScriptElements(){return this.newHeadSnapshot.getScriptElementsNotInSnapshot(this.currentHeadSnapshot)}get currentHeadProvisionalElements(){return this.currentHeadSnapshot.provisionalElements}get newHeadProvisionalElements(){return this.newHeadSnapshot.provisionalElements}get newBodyScriptElements(){return this.newElement.querySelectorAll("script")}},Se=class{constructor(e){this.keys=[],this.snapshots={},this.size=e}has(e){return F(e)in this.snapshots}get(e){if(this.has(e)){let t=this.read(e);return this.touch(e),t}}put(e,t){return this.write(e,t),this.touch(e),t}clear(){this.snapshots={}}read(e){return this.snapshots[F(e)]}write(e,t){this.snapshots[F(e)]=t}touch(e){let t=F(e),n=this.keys.indexOf(t);n>-1&&this.keys.splice(n,1),this.keys.unshift(t),this.trim()}trim(){for(let e of this.keys.splice(this.size))delete this.snapshots[e]}},Ae=class extends z{constructor(){super(...arguments);this.snapshotCache=new Se(10),this.lastRenderedLocation=new URL(location.href)}renderPage(e,t=!1){let n=new J(this.snapshot,e,t);return this.render(n)}renderError(e){let t=new Ee(this.snapshot,e,!1);return this.render(t)}clearSnapshotCache(){this.snapshotCache.clear()}async cacheSnapshot(){if(this.shouldCacheSnapshot){this.delegate.viewWillCacheSnapshot();let{snapshot:e,lastRenderedLocation:t}=this;await At(),this.snapshotCache.put(t,e.clone())}}getCachedSnapshotForLocation(e){return this.snapshotCache.get(e)}get snapshot(){return b.fromElement(this.element)}get shouldCacheSnapshot(){return this.snapshot.isCacheable}},Pe=class{constructor(){this.navigator=new ve(this),this.history=new pe(this),this.view=new Ae(this,document.documentElement),this.adapter=new ue(this),this.pageObserver=new be(this),this.cacheObserver=new he,this.linkClickObserver=new me(this),this.formSubmitObserver=new de(this),this.scrollObserver=new ye(this),this.streamObserver=new we(this),this.frameRedirector=new fe(document.documentElement),this.drive=!0,this.enabled=!0,this.progressBarDelay=500,this.started=!1}start(){this.started||(this.pageObserver.start(),this.cacheObserver.start(),this.linkClickObserver.start(),this.formSubmitObserver.start(),this.scrollObserver.start(),this.streamObserver.start(),this.frameRedirector.start(),this.history.start(),this.started=!0,this.enabled=!0)}disable(){this.enabled=!1}stop(){this.started&&(this.pageObserver.stop(),this.cacheObserver.stop(),this.linkClickObserver.stop(),this.formSubmitObserver.stop(),this.scrollObserver.stop(),this.streamObserver.stop(),this.frameRedirector.stop(),this.history.stop(),this.started=!1)}registerAdapter(e){this.adapter=e}visit(e,t={}){this.navigator.proposeVisit(m(e),t)}connectStreamSource(e){this.streamObserver.connectStreamSource(e)}disconnectStreamSource(e){this.streamObserver.disconnectStreamSource(e)}renderStreamMessage(e){document.documentElement.appendChild(L.wrap(e).fragment)}clearCache(){this.view.clearSnapshotCache()}setProgressBarDelay(e){this.progressBarDelay=e}get location(){return this.history.location}get restorationIdentifier(){return this.history.restorationIdentifier}historyPoppedToLocationWithRestorationIdentifier(e,t){this.enabled?this.navigator.startVisit(e,t,{action:"restore",historyChanged:!0}):this.adapter.pageInvalidated()}scrollPositionChanged(e){this.history.updateRestorationData({scrollPosition:e})}willFollowLinkToLocation(e,t){return this.elementDriveEnabled(e)&&this.locationIsVisitable(t)&&this.applicationAllowsFollowingLinkToLocation(e,t)}followedLinkToLocation(e,t){let n=this.getActionForLink(e);this.convertLinkWithMethodClickToFormSubmission(e)||this.visit(t.href,{action:n})}convertLinkWithMethodClickToFormSubmission(e){let t=e.getAttribute("data-turbo-method");if(t){let n=document.createElement("form");return n.method=t,n.action=e.getAttribute("href")||"undefined",document.body.appendChild(n),u("submit",{cancelable:!0,target:n})}else return!1}allowsVisitingLocationWithAction(e,t){return this.locationWithActionIsSamePage(e,t)||this.applicationAllowsVisitingLocation(e)}visitProposedToLocation(e,t){Le(e),this.adapter.visitProposedToLocation(e,t)}visitStarted(e){Le(e.location),e.silent||this.notifyApplicationAfterVisitingLocation(e.location,e.action)}visitCompleted(e){this.notifyApplicationAfterPageLoad(e.getTimingMetrics())}locationWithActionIsSamePage(e,t){return this.navigator.locationWithActionIsSamePage(e,t)}visitScrolledToSamePageLocation(e,t){this.notifyApplicationAfterVisitingSamePageLocation(e,t)}willSubmitForm(e,t){return this.elementDriveEnabled(e)&&this.elementDriveEnabled(t)}formSubmitted(e,t){this.navigator.submitForm(e,t)}pageBecameInteractive(){this.view.lastRenderedLocation=this.location,this.notifyApplicationAfterPageLoad()}pageLoaded(){this.history.assumeControlOfScrollRestoration()}pageWillUnload(){this.history.relinquishControlOfScrollRestoration()}receivedMessageFromStream(e){this.renderStreamMessage(e)}viewWillCacheSnapshot(){var e;((e=this.navigator.currentVisit)===null||e===void 0?void 0:e.silent)||this.notifyApplicationBeforeCachingSnapshot()}allowsImmediateRender({element:e},t){return!this.notifyApplicationBeforeRender(e,t).defaultPrevented}viewRenderedSnapshot(e,t){this.view.lastRenderedLocation=this.history.location,this.notifyApplicationAfterRender()}viewInvalidated(){this.adapter.pageInvalidated()}frameLoaded(e){this.notifyApplicationAfterFrameLoad(e)}frameRendered(e,t){this.notifyApplicationAfterFrameRender(e,t)}applicationAllowsFollowingLinkToLocation(e,t){return!this.notifyApplicationAfterClickingLinkToLocation(e,t).defaultPrevented}applicationAllowsVisitingLocation(e){return!this.notifyApplicationBeforeVisitingLocation(e).defaultPrevented}notifyApplicationAfterClickingLinkToLocation(e,t){return u("turbo:click",{target:e,detail:{url:t.href},cancelable:!0})}notifyApplicationBeforeVisitingLocation(e){return u("turbo:before-visit",{detail:{url:e.href},cancelable:!0})}notifyApplicationAfterVisitingLocation(e,t){return u("turbo:visit",{detail:{url:e.href,action:t}})}notifyApplicationBeforeCachingSnapshot(){return u("turbo:before-cache")}notifyApplicationBeforeRender(e,t){return u("turbo:before-render",{detail:{newBody:e,resume:t},cancelable:!0})}notifyApplicationAfterRender(){return u("turbo:render")}notifyApplicationAfterPageLoad(e={}){return u("turbo:load",{detail:{url:this.location.href,timing:e}})}notifyApplicationAfterVisitingSamePageLocation(e,t){dispatchEvent(new HashChangeEvent("hashchange",{oldURL:e.toString(),newURL:t.toString()}))}notifyApplicationAfterFrameLoad(e){return u("turbo:frame-load",{target:e})}notifyApplicationAfterFrameRender(e,t){return u("turbo:frame-render",{detail:{fetchResponse:e},target:t,cancelable:!0})}elementDriveEnabled(e){let t=e==null?void 0:e.closest("[data-turbo]");return this.drive?t?t.getAttribute("data-turbo")!="false":!0:t?t.getAttribute("data-turbo")=="true":!1}getActionForLink(e){let t=e.getAttribute("data-turbo-action");return ge(t)?t:"advance"}locationIsVisitable(e){return vt(e,this.snapshot.rootLocation)&>(e)}get snapshot(){return this.view.snapshot}};function Le(r){Object.defineProperties(r,Kt)}var Kt={absoluteURL:{get(){return this.toString()}}},d=new Pe,{navigator:zt}=d;function Te(){d.start()}function $t(r){d.registerAdapter(r)}function Jt(r,e){d.visit(r,e)}function Gt(r){d.connectStreamSource(r)}function Qt(r){d.disconnectStreamSource(r)}function Xt(r){d.renderStreamMessage(r)}function Yt(){d.clearCache()}function Zt(r){d.setProgressBarDelay(r)}var er=Object.freeze({__proto__:null,navigator:zt,session:d,PageRenderer:J,PageSnapshot:b,start:Te,registerAdapter:$t,visit:Jt,connectStreamSource:Gt,disconnectStreamSource:Qt,renderStreamMessage:Xt,clearCache:Yt,setProgressBarDelay:Zt}),Ce=class{constructor(e){this.resolveVisitPromise=()=>{},this.connected=!1,this.hasBeenLoaded=!1,this.settingSourceURL=!1,this.element=e,this.view=new ie(this,this.element),this.appearanceObserver=new re(this,this.element),this.linkInterceptor=new $(this,this.element),this.formInterceptor=new K(this,this.element)}connect(){this.connected||(this.connected=!0,this.reloadable=!1,this.loadingStyle==w.lazy&&this.appearanceObserver.start(),this.linkInterceptor.start(),this.formInterceptor.start(),this.sourceURLChanged())}disconnect(){this.connected&&(this.connected=!1,this.appearanceObserver.stop(),this.linkInterceptor.stop(),this.formInterceptor.stop())}disabledChanged(){this.loadingStyle==w.eager&&this.loadSourceURL()}sourceURLChanged(){(this.loadingStyle==w.eager||this.hasBeenLoaded)&&this.loadSourceURL()}loadingStyleChanged(){this.loadingStyle==w.lazy?this.appearanceObserver.start():(this.appearanceObserver.stop(),this.loadSourceURL())}async loadSourceURL(){if(!this.settingSourceURL&&this.enabled&&this.isActive&&(this.reloadable||this.sourceURL!=this.currentURL)){let e=this.currentURL;if(this.currentURL=this.sourceURL,this.sourceURL)try{this.element.loaded=this.visit(this.sourceURL),this.appearanceObserver.stop(),await this.element.loaded,this.hasBeenLoaded=!0,d.frameLoaded(this.element)}catch(t){throw this.currentURL=e,t}}}async loadResponse(e){e.redirected&&(this.sourceURL=e.response.url);try{let t=await e.responseHTML;if(t){let{body:n}=ee(t),i=new M(await this.extractForeignFrameElement(n)),s=new oe(this.view.snapshot,i,!1);this.view.renderPromise&&await this.view.renderPromise,await this.view.render(s),d.frameRendered(e,this.element)}}catch(t){console.error(t),this.view.invalidate()}}elementAppearedInViewport(e){this.loadSourceURL()}shouldInterceptLinkClick(e,t){return e.hasAttribute("data-turbo-method")?!1:this.shouldInterceptNavigation(e)}linkClickIntercepted(e,t){this.reloadable=!0,this.navigateFrame(e,t)}shouldInterceptFormSubmission(e,t){return this.shouldInterceptNavigation(e,t)}formSubmissionIntercepted(e,t){if(this.formSubmission&&this.formSubmission.stop(),this.reloadable=!1,this.formSubmission=new U(this,e,t),this.formSubmission.fetchRequest.isIdempotent)this.navigateFrame(e,this.formSubmission.fetchRequest.url.href);else{let{fetchRequest:n}=this.formSubmission;this.prepareHeadersForRequest(n.headers,n),this.formSubmission.start()}}prepareHeadersForRequest(e,t){e["Turbo-Frame"]=this.id}requestStarted(e){this.element.setAttribute("busy","")}requestPreventedHandlingResponse(e,t){this.resolveVisitPromise()}async requestSucceededWithResponse(e,t){await this.loadResponse(t),this.resolveVisitPromise()}requestFailedWithResponse(e,t){console.error(t),this.resolveVisitPromise()}requestErrored(e,t){console.error(t),this.resolveVisitPromise()}requestFinished(e){this.element.removeAttribute("busy")}formSubmissionStarted(e){this.findFrameElement(e.formElement).setAttribute("busy","")}formSubmissionSucceededWithResponse(e,t){this.findFrameElement(e.formElement).delegate.loadResponse(t)}formSubmissionFailedWithResponse(e,t){this.element.delegate.loadResponse(t)}formSubmissionErrored(e,t){console.error(t)}formSubmissionFinished(e){this.findFrameElement(e.formElement).removeAttribute("busy")}allowsImmediateRender(e,t){return!0}viewRenderedSnapshot(e,t){}viewInvalidated(){}async visit(e){let t=new I(this,h.get,m(e));return new Promise(n=>{this.resolveVisitPromise=()=>{this.resolveVisitPromise=()=>{},n()},t.perform()})}navigateFrame(e,t){let n=this.findFrameElement(e);n.src=t}findFrameElement(e){var t;let n=e.getAttribute("data-turbo-frame")||this.element.getAttribute("target");return(t=Oe(n))!==null&&t!==void 0?t:this.element}async extractForeignFrameElement(e){let t,n=CSS.escape(this.id);try{if(t=Re(e.querySelector(`turbo-frame#${n}`),this.currentURL))return t;if(t=Re(e.querySelector(`turbo-frame[src][recurse~=${n}]`),this.currentURL))return await t.loaded,await this.extractForeignFrameElement(t);console.error(`Response has no matching <turbo-frame id="${n}"> element`)}catch(i){console.error(i)}return new v}shouldInterceptNavigation(e,t){let n=e.getAttribute("data-turbo-frame")||this.element.getAttribute("target");if(!this.enabled||n=="_top")return!1;if(n){let i=Oe(n);if(i)return!i.disabled}return!(!d.elementDriveEnabled(e)||t&&!d.elementDriveEnabled(t))}get id(){return this.element.id}get enabled(){return!this.element.disabled}get sourceURL(){if(this.element.src)return this.element.src}get reloadable(){return this.findFrameElement(this.element).hasAttribute("reloadable")}set reloadable(e){let t=this.findFrameElement(this.element);e?t.setAttribute("reloadable",""):t.removeAttribute("reloadable")}set sourceURL(e){this.settingSourceURL=!0,this.element.src=e??null,this.currentURL=this.element.src,this.settingSourceURL=!1}get loadingStyle(){return this.element.loading}get isLoading(){return this.formSubmission!==void 0||this.resolveVisitPromise()!==void 0}get isActive(){return this.element.isActive&&this.connected}};function Oe(r){if(r!=null){let e=document.getElementById(r);if(e instanceof v)return e}}function Re(r,e){if(r){let t=r.getAttribute("src");if(t!=null&&e!=null&&bt(t,e))throw new Error(`Matching <turbo-frame id="${r.id}"> element has a source URL which references itself`);if(r.ownerDocument!==document&&(r=document.importNode(r,!0)),r instanceof v)return r.connectedCallback(),r}}var tr={after(){this.targetElements.forEach(r=>{var e;return(e=r.parentElement)===null||e===void 0?void 0:e.insertBefore(this.templateContent,r.nextSibling)})},append(){this.removeDuplicateTargetChildren(),this.targetElements.forEach(r=>r.append(this.templateContent))},before(){this.targetElements.forEach(r=>{var e;return(e=r.parentElement)===null||e===void 0?void 0:e.insertBefore(this.templateContent,r)})},prepend(){this.removeDuplicateTargetChildren(),this.targetElements.forEach(r=>r.prepend(this.templateContent))},remove(){this.targetElements.forEach(r=>r.remove())},replace(){this.targetElements.forEach(r=>r.replaceWith(this.templateContent))},update(){this.targetElements.forEach(r=>{r.innerHTML="",r.append(this.templateContent)})}},ke=class extends HTMLElement{async connectedCallback(){try{await this.render()}catch(e){console.error(e)}finally{this.disconnect()}}async render(){var e;return(e=this.renderPromise)!==null&&e!==void 0?e:this.renderPromise=(async()=>{this.dispatchEvent(this.beforeRenderEvent)&&(await B(),this.performAction())})()}disconnect(){try{this.remove()}catch(e){}}removeDuplicateTargetChildren(){this.duplicateChildren.forEach(e=>e.remove())}get duplicateChildren(){var e;let t=this.targetElements.flatMap(i=>[...i.children]).filter(i=>!!i.id),n=[...(e=this.templateContent)===null||e===void 0?void 0:e.children].filter(i=>!!i.id).map(i=>i.id);return t.filter(i=>n.includes(i.id))}get performAction(){if(this.action){let e=tr[this.action];if(e)return e;this.raise("unknown action")}this.raise("action attribute is missing")}get targetElements(){if(this.target)return this.targetElementsById;if(this.targets)return this.targetElementsByQuery;this.raise("target or targets attribute is missing")}get templateContent(){return this.templateElement.content.cloneNode(!0)}get templateElement(){if(this.firstElementChild instanceof HTMLTemplateElement)return this.firstElementChild;this.raise("first child element must be a <template> element")}get action(){return this.getAttribute("action")}get target(){return this.getAttribute("target")}get targets(){return this.getAttribute("targets")}raise(e){throw new Error(`${this.description}: ${e}`)}get description(){var e,t;return(t=((e=this.outerHTML.match(/<[^>]+>/))!==null&&e!==void 0?e:[])[0])!==null&&t!==void 0?t:"<turbo-stream>"}get beforeRenderEvent(){return new CustomEvent("turbo:before-stream-render",{bubbles:!0,cancelable:!0})}get targetElementsById(){var e;let t=(e=this.ownerDocument)===null||e===void 0?void 0:e.getElementById(this.target);return t!==null?[t]:[]}get targetElementsByQuery(){var e;let t=(e=this.ownerDocument)===null||e===void 0?void 0:e.querySelectorAll(this.targets);return t.length!==0?Array.prototype.slice.call(t):[]}};v.delegateConstructor=Ce;customElements.define("turbo-frame",v);customElements.define("turbo-stream",ke);(()=>{let r=document.currentScript;if(!!r&&!r.hasAttribute("data-turbo-suppress-warning")){for(;r=r.parentElement;)if(r==document.body)return console.warn(te` + `}show(){this.visible||(this.visible=!0,this.installProgressElement(),this.startTrickling())}hide(){this.visible&&!this.hiding&&(this.hiding=!0,this.fadeProgressElement(()=>{this.uninstallProgressElement(),this.stopTrickling(),this.visible=!1,this.hiding=!1}))}setValue(e){this.value=e,this.refresh()}installStylesheetElement(){document.head.insertBefore(this.stylesheetElement,document.head.firstChild)}installProgressElement(){this.progressElement.style.width="0",this.progressElement.style.opacity="1",document.documentElement.insertBefore(this.progressElement,document.body),this.refresh()}fadeProgressElement(e){this.progressElement.style.opacity="0",setTimeout(e,N.animationDuration*1.5)}uninstallProgressElement(){this.progressElement.parentNode&&document.documentElement.removeChild(this.progressElement)}startTrickling(){this.trickleInterval||(this.trickleInterval=window.setInterval(this.trickle,N.animationDuration))}stopTrickling(){window.clearInterval(this.trickleInterval),delete this.trickleInterval}refresh(){requestAnimationFrame(()=>{this.progressElement.style.width=`${10+this.value*90}%`})}createStylesheetElement(){let e=document.createElement("style");return e.type="text/css",e.textContent=N.defaultCSS,e}createProgressElement(){let e=document.createElement("div");return e.className="turbo-progress-bar",e}};N.animationDuration=300;var jt=class extends ge{constructor(){super(...arguments);this.detailsByOuterHTML=this.children.filter(e=>!tn(e)).reduce((e,i)=>{let{outerHTML:r}=i,n=r in e?e[r]:{type:Qr(i),tracked:Zr(i),elements:[]};return Object.assign(Object.assign({},e),{[r]:Object.assign(Object.assign({},n),{elements:[...n.elements,i]})})},{})}get trackedElementSignature(){return Object.keys(this.detailsByOuterHTML).filter(e=>this.detailsByOuterHTML[e].tracked).join("")}getScriptElementsNotInSnapshot(e){return this.getElementsMatchingTypeNotInSnapshot("script",e)}getStylesheetElementsNotInSnapshot(e){return this.getElementsMatchingTypeNotInSnapshot("stylesheet",e)}getElementsMatchingTypeNotInSnapshot(e,i){return Object.keys(this.detailsByOuterHTML).filter(r=>!(r in i.detailsByOuterHTML)).map(r=>this.detailsByOuterHTML[r]).filter(({type:r})=>r==e).map(({elements:[r]})=>r)}get provisionalElements(){return Object.keys(this.detailsByOuterHTML).reduce((e,i)=>{let{type:r,tracked:n,elements:s}=this.detailsByOuterHTML[i];return r==null&&!n?[...e,...s]:s.length>1?[...e,...s.slice(1)]:e},[])}getMetaValue(e){let i=this.findMetaElementByName(e);return i?i.getAttribute("content"):null}findMetaElementByName(e){return Object.keys(this.detailsByOuterHTML).reduce((i,r)=>{let{elements:[n]}=this.detailsByOuterHTML[r];return nn(n,e)?n:i},void 0)}};function Qr(t){if(en(t))return"script";if(rn(t))return"stylesheet"}function Zr(t){return t.getAttribute("data-turbo-track")=="reload"}function en(t){return t.tagName.toLowerCase()=="script"}function tn(t){return t.tagName.toLowerCase()=="noscript"}function rn(t){let e=t.tagName.toLowerCase();return e=="style"||e=="link"&&t.getAttribute("rel")=="stylesheet"}function nn(t,e){return t.tagName.toLowerCase()=="meta"&&t.getAttribute("name")==e}var $=class extends ge{constructor(e,i){super(e);this.headSnapshot=i}static fromHTMLString(e=""){return this.fromDocument(_t(e))}static fromElement(e){return this.fromDocument(e.ownerDocument)}static fromDocument({head:e,body:i}){return new this(i,new jt(e))}clone(){return new $(this.element.cloneNode(!0),this.headSnapshot)}get headElement(){return this.headSnapshot.element}get rootLocation(){var e;let i=(e=this.getSetting("root"))!==null&&e!==void 0?e:"/";return F(i)}get cacheControlValue(){return this.getSetting("cache-control")}get isPreviewable(){return this.cacheControlValue!="no-preview"}get isCacheable(){return this.cacheControlValue!="no-cache"}get isVisitable(){return this.getSetting("visit-control")!="reload"}getSetting(e){return this.headSnapshot.getMetaValue(`turbo-${e}`)}},le;(function(t){t.visitStart="visitStart",t.requestStart="requestStart",t.requestEnd="requestEnd",t.visitEnd="visitEnd"})(le||(le={}));var D;(function(t){t.initialized="initialized",t.started="started",t.canceled="canceled",t.failed="failed",t.completed="completed"})(D||(D={}));var sn={action:"advance",historyChanged:!1},Z;(function(t){t[t.networkFailure=0]="networkFailure",t[t.timeoutFailure=-1]="timeoutFailure",t[t.contentTypeMismatch=-2]="contentTypeMismatch"})(Z||(Z={}));var Ut=class{constructor(e,i,r,n={}){this.identifier=me(),this.timingMetrics={},this.followedRedirect=!1,this.historyChanged=!1,this.scrolled=!1,this.snapshotCached=!1,this.state=D.initialized,this.delegate=e,this.location=i,this.restorationIdentifier=r||me();let{action:s,historyChanged:o,referrer:a,snapshotHTML:l,response:h}=Object.assign(Object.assign({},sn),n);this.action=s,this.historyChanged=o,this.referrer=a,this.snapshotHTML=l,this.response=h,this.isSamePage=this.delegate.locationWithActionIsSamePage(this.location,this.action)}get adapter(){return this.delegate.adapter}get view(){return this.delegate.view}get history(){return this.delegate.history}get restorationData(){return this.history.getRestorationDataForIdentifier(this.restorationIdentifier)}get silent(){return this.isSamePage}start(){this.state==D.initialized&&(this.recordTimingMetric(le.visitStart),this.state=D.started,this.adapter.visitStarted(this),this.delegate.visitStarted(this))}cancel(){this.state==D.started&&(this.request&&this.request.cancel(),this.cancelRender(),this.state=D.canceled)}complete(){this.state==D.started&&(this.recordTimingMetric(le.visitEnd),this.state=D.completed,this.adapter.visitCompleted(this),this.delegate.visitCompleted(this),this.followRedirect())}fail(){this.state==D.started&&(this.state=D.failed,this.adapter.visitFailed(this))}changeHistory(){var e;if(!this.historyChanged){let i=this.location.href===((e=this.referrer)===null||e===void 0?void 0:e.href)?"replace":this.action,r=this.getHistoryMethodForAction(i);this.history.update(r,this.location,this.restorationIdentifier),this.historyChanged=!0}}issueRequest(){this.hasPreloadedResponse()?this.simulateRequest():this.shouldIssueRequest()&&!this.request&&(this.request=new De(this,L.get,this.location),this.request.perform())}simulateRequest(){this.response&&(this.startRequest(),this.recordResponse(),this.finishRequest())}startRequest(){this.recordTimingMetric(le.requestStart),this.adapter.visitRequestStarted(this)}recordResponse(e=this.response){if(this.response=e,e){let{statusCode:i}=e;Vt(i)?this.adapter.visitRequestCompleted(this):this.adapter.visitRequestFailedWithStatusCode(this,i)}}finishRequest(){this.recordTimingMetric(le.requestEnd),this.adapter.visitRequestFinished(this)}loadResponse(){if(this.response){let{statusCode:e,responseHTML:i}=this.response;this.render(async()=>{this.cacheSnapshot(),this.view.renderPromise&&await this.view.renderPromise,Vt(e)&&i!=null?(await this.view.renderPage($.fromHTMLString(i)),this.adapter.visitRendered(this),this.complete()):(await this.view.renderError($.fromHTMLString(i)),this.adapter.visitRendered(this),this.fail())})}}getCachedSnapshot(){let e=this.view.getCachedSnapshotForLocation(this.location)||this.getPreloadedSnapshot();if(e&&(!ie(this.location)||e.hasAnchor(ie(this.location)))&&(this.action=="restore"||e.isPreviewable))return e}getPreloadedSnapshot(){if(this.snapshotHTML)return $.fromHTMLString(this.snapshotHTML)}hasCachedSnapshot(){return this.getCachedSnapshot()!=null}loadCachedSnapshot(){let e=this.getCachedSnapshot();if(e){let i=this.shouldIssueRequest();this.render(async()=>{this.cacheSnapshot(),this.isSamePage?this.adapter.visitRendered(this):(this.view.renderPromise&&await this.view.renderPromise,await this.view.renderPage(e,i),this.adapter.visitRendered(this),i||this.complete())})}}followRedirect(){this.redirectedToLocation&&!this.followedRedirect&&(this.adapter.visitProposedToLocation(this.redirectedToLocation,{action:"replace",response:this.response}),this.followedRedirect=!0)}goToSamePageAnchor(){this.isSamePage&&this.render(async()=>{this.cacheSnapshot(),this.adapter.visitRendered(this)})}requestStarted(){this.startRequest()}requestPreventedHandlingResponse(e,i){}async requestSucceededWithResponse(e,i){let r=await i.responseHTML;r==null?this.recordResponse({statusCode:Z.contentTypeMismatch}):(this.redirectedToLocation=i.redirected?i.location:void 0,this.recordResponse({statusCode:i.statusCode,responseHTML:r}))}async requestFailedWithResponse(e,i){let r=await i.responseHTML;r==null?this.recordResponse({statusCode:Z.contentTypeMismatch}):this.recordResponse({statusCode:i.statusCode,responseHTML:r})}requestErrored(e,i){this.recordResponse({statusCode:Z.networkFailure})}requestFinished(){this.finishRequest()}performScroll(){this.scrolled||(this.action=="restore"?this.scrollToRestoredPosition()||this.scrollToAnchor()||this.view.scrollToTop():this.scrollToAnchor()||this.view.scrollToTop(),this.isSamePage&&this.delegate.visitScrolledToSamePageLocation(this.view.lastRenderedLocation,this.location),this.scrolled=!0)}scrollToRestoredPosition(){let{scrollPosition:e}=this.restorationData;if(e)return this.view.scrollToPosition(e),!0}scrollToAnchor(){let e=ie(this.location);if(e!=null)return this.view.scrollToAnchor(e),!0}recordTimingMetric(e){this.timingMetrics[e]=new Date().getTime()}getTimingMetrics(){return Object.assign({},this.timingMetrics)}getHistoryMethodForAction(e){switch(e){case"replace":return history.replaceState;case"advance":case"restore":return history.pushState}}hasPreloadedResponse(){return typeof this.response=="object"}shouldIssueRequest(){return this.isSamePage?!1:this.action=="restore"?!this.hasCachedSnapshot():!0}cacheSnapshot(){this.snapshotCached||(this.view.cacheSnapshot(),this.snapshotCached=!0)}async render(e){this.cancelRender(),await new Promise(i=>{this.frame=requestAnimationFrame(()=>i())}),await e(),delete this.frame,this.performScroll()}cancelRender(){this.frame&&(cancelAnimationFrame(this.frame),delete this.frame)}};function Vt(t){return t>=200&&t<300}var $t=class{constructor(e){this.progressBar=new N,this.showProgressBar=()=>{this.progressBar.show()},this.session=e}visitProposedToLocation(e,i){this.navigator.startVisit(e,me(),i)}visitStarted(e){e.issueRequest(),e.changeHistory(),e.goToSamePageAnchor(),e.loadCachedSnapshot()}visitRequestStarted(e){this.progressBar.setValue(0),e.hasCachedSnapshot()||e.action!="restore"?this.showVisitProgressBarAfterDelay():this.showProgressBar()}visitRequestCompleted(e){e.loadResponse()}visitRequestFailedWithStatusCode(e,i){switch(i){case Z.networkFailure:case Z.timeoutFailure:case Z.contentTypeMismatch:return this.reload();default:return e.loadResponse()}}visitRequestFinished(e){this.progressBar.setValue(1),this.hideVisitProgressBar()}visitCompleted(e){}pageInvalidated(){this.reload()}visitFailed(e){}visitRendered(e){}formSubmissionStarted(e){this.progressBar.setValue(0),this.showFormProgressBarAfterDelay()}formSubmissionFinished(e){this.progressBar.setValue(1),this.hideFormProgressBar()}showVisitProgressBarAfterDelay(){this.visitProgressBarTimeout=window.setTimeout(this.showProgressBar,this.session.progressBarDelay)}hideVisitProgressBar(){this.progressBar.hide(),this.visitProgressBarTimeout!=null&&(window.clearTimeout(this.visitProgressBarTimeout),delete this.visitProgressBarTimeout)}showFormProgressBarAfterDelay(){this.formProgressBarTimeout==null&&(this.formProgressBarTimeout=window.setTimeout(this.showProgressBar,this.session.progressBarDelay))}hideFormProgressBar(){this.progressBar.hide(),this.formProgressBarTimeout!=null&&(window.clearTimeout(this.formProgressBarTimeout),delete this.formProgressBarTimeout)}reload(){window.location.reload()}get navigator(){return this.session.navigator}},qt=class{constructor(){this.started=!1}start(){this.started||(this.started=!0,addEventListener("turbo:before-cache",this.removeStaleElements,!1))}stop(){this.started&&(this.started=!1,removeEventListener("turbo:before-cache",this.removeStaleElements,!1))}removeStaleElements(){let e=[...document.querySelectorAll('[data-turbo-cache="false"]')];for(let i of e)i.remove()}},Wt=class{constructor(e){this.started=!1,this.submitCaptured=()=>{removeEventListener("submit",this.submitBubbled,!1),addEventListener("submit",this.submitBubbled,!1)},this.submitBubbled=i=>{if(!i.defaultPrevented){let r=i.target instanceof HTMLFormElement?i.target:void 0,n=i.submitter||void 0;r&&((n==null?void 0:n.getAttribute("formmethod"))||r.method)!="dialog"&&this.delegate.willSubmitForm(r,n)&&(i.preventDefault(),this.delegate.formSubmitted(r,n))}},this.delegate=e}start(){this.started||(addEventListener("submit",this.submitCaptured,!0),this.started=!0)}stop(){this.started&&(removeEventListener("submit",this.submitCaptured,!0),this.started=!1)}},Kt=class{constructor(e){this.element=e,this.linkInterceptor=new lt(this,e),this.formInterceptor=new ot(this,e)}start(){this.linkInterceptor.start(),this.formInterceptor.start()}stop(){this.linkInterceptor.stop(),this.formInterceptor.stop()}shouldInterceptLinkClick(e,i){return this.shouldRedirect(e)}linkClickIntercepted(e,i){let r=this.findFrameElement(e);r&&(r.setAttribute("reloadable",""),r.src=i)}shouldInterceptFormSubmission(e,i){return this.shouldRedirect(e,i)}formSubmissionIntercepted(e,i){let r=this.findFrameElement(e);r&&(r.removeAttribute("reloadable"),r.delegate.formSubmissionIntercepted(e,i))}shouldRedirect(e,i){let r=this.findFrameElement(e);return r?r!=e.closest("turbo-frame"):!1}findFrameElement(e){let i=e.getAttribute("data-turbo-frame");if(i&&i!="_top"){let r=this.element.querySelector(`#${i}:not([disabled])`);if(r instanceof V)return r}}},zt=class{constructor(e){this.restorationIdentifier=me(),this.restorationData={},this.started=!1,this.pageLoaded=!1,this.onPopState=i=>{if(this.shouldHandlePopState()){let{turbo:r}=i.state||{};if(r){this.location=new URL(window.location.href);let{restorationIdentifier:n}=r;this.restorationIdentifier=n,this.delegate.historyPoppedToLocationWithRestorationIdentifier(this.location,n)}}},this.onPageLoad=async i=>{await jr(),this.pageLoaded=!0},this.delegate=e}start(){this.started||(addEventListener("popstate",this.onPopState,!1),addEventListener("load",this.onPageLoad,!1),this.started=!0,this.replace(new URL(window.location.href)))}stop(){this.started&&(removeEventListener("popstate",this.onPopState,!1),removeEventListener("load",this.onPageLoad,!1),this.started=!1)}push(e,i){this.update(history.pushState,e,i)}replace(e,i){this.update(history.replaceState,e,i)}update(e,i,r=me()){let n={turbo:{restorationIdentifier:r}};e.call(history,n,"",i.href),this.location=i,this.restorationIdentifier=r}getRestorationDataForIdentifier(e){return this.restorationData[e]||{}}updateRestorationData(e){let{restorationIdentifier:i}=this,r=this.restorationData[i];this.restorationData[i]=Object.assign(Object.assign({},r),e)}assumeControlOfScrollRestoration(){var e;this.previousScrollRestoration||(this.previousScrollRestoration=(e=history.scrollRestoration)!==null&&e!==void 0?e:"auto",history.scrollRestoration="manual")}relinquishControlOfScrollRestoration(){this.previousScrollRestoration&&(history.scrollRestoration=this.previousScrollRestoration,delete this.previousScrollRestoration)}shouldHandlePopState(){return this.pageIsLoaded()}pageIsLoaded(){return this.pageLoaded||document.readyState=="complete"}},Jt=class{constructor(e){this.started=!1,this.clickCaptured=()=>{removeEventListener("click",this.clickBubbled,!1),addEventListener("click",this.clickBubbled,!1)},this.clickBubbled=i=>{if(this.clickEventIsSignificant(i)){let r=i.composedPath&&i.composedPath()[0]||i.target,n=this.findLinkFromClickTarget(r);if(n){let s=this.getLocationForLink(n);this.delegate.willFollowLinkToLocation(n,s)&&(i.preventDefault(),this.delegate.followedLinkToLocation(n,s))}}},this.delegate=e}start(){this.started||(addEventListener("click",this.clickCaptured,!0),this.started=!0)}stop(){this.started&&(removeEventListener("click",this.clickCaptured,!0),this.started=!1)}clickEventIsSignificant(e){return!(e.target&&e.target.isContentEditable||e.defaultPrevented||e.which>1||e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)}findLinkFromClickTarget(e){if(e instanceof Element)return e.closest("a[href]:not([target^=_]):not([download])")}getLocationForLink(e){return F(e.getAttribute("href")||"")}};function Xt(t){return t=="advance"||t=="replace"||t=="restore"}var Gt=class{constructor(e){this.delegate=e}proposeVisit(e,i={}){this.delegate.allowsVisitingLocationWithAction(e,i.action)&&this.delegate.visitProposedToLocation(e,i)}startVisit(e,i,r={}){this.stop(),this.currentVisit=new Ut(this,F(e),i,Object.assign({referrer:this.location},r)),this.currentVisit.start()}submitForm(e,i){this.stop(),this.formSubmission=new st(this,e,i,!0),this.formSubmission.isIdempotent?this.proposeVisit(this.formSubmission.fetchRequest.url,{action:this.getActionForFormSubmission(this.formSubmission)}):this.formSubmission.start()}stop(){this.formSubmission&&(this.formSubmission.stop(),delete this.formSubmission),this.currentVisit&&(this.currentVisit.cancel(),delete this.currentVisit)}get adapter(){return this.delegate.adapter}get view(){return this.delegate.view}get history(){return this.delegate.history}formSubmissionStarted(e){typeof this.adapter.formSubmissionStarted=="function"&&this.adapter.formSubmissionStarted(e)}async formSubmissionSucceededWithResponse(e,i){if(e==this.formSubmission){let r=await i.responseHTML;if(r){e.method!=L.get&&this.view.clearSnapshotCache();let{statusCode:n}=i,s={response:{statusCode:n,responseHTML:r}};this.proposeVisit(i.location,s)}}}async formSubmissionFailedWithResponse(e,i){let r=await i.responseHTML;if(r){let n=$.fromHTMLString(r);i.serverError?await this.view.renderError(n):await this.view.renderPage(n),this.view.scrollToTop(),this.view.clearSnapshotCache()}}formSubmissionErrored(e,i){console.error(i)}formSubmissionFinished(e){typeof this.adapter.formSubmissionFinished=="function"&&this.adapter.formSubmissionFinished(e)}visitStarted(e){this.delegate.visitStarted(e)}visitCompleted(e){this.delegate.visitCompleted(e)}locationWithActionIsSamePage(e,i){let r=ie(e),n=ie(this.view.lastRenderedLocation),s=i==="restore"&&typeof r=="undefined";return i!=="replace"&&rt(e)===rt(this.view.lastRenderedLocation)&&(s||r!=null&&r!==n)}visitScrolledToSamePageLocation(e,i){this.delegate.visitScrolledToSamePageLocation(e,i)}get location(){return this.history.location}get restorationIdentifier(){return this.history.restorationIdentifier}getActionForFormSubmission(e){let{formElement:i,submitter:r}=e,n=(r==null?void 0:r.getAttribute("data-turbo-action"))||i.getAttribute("data-turbo-action");return Xt(n)?n:"advance"}},q;(function(t){t[t.initial=0]="initial",t[t.loading=1]="loading",t[t.interactive=2]="interactive",t[t.complete=3]="complete"})(q||(q={}));var Yt=class{constructor(e){this.stage=q.initial,this.started=!1,this.interpretReadyState=()=>{let{readyState:i}=this;i=="interactive"?this.pageIsInteractive():i=="complete"&&this.pageIsComplete()},this.pageWillUnload=()=>{this.delegate.pageWillUnload()},this.delegate=e}start(){this.started||(this.stage==q.initial&&(this.stage=q.loading),document.addEventListener("readystatechange",this.interpretReadyState,!1),addEventListener("pagehide",this.pageWillUnload,!1),this.started=!0)}stop(){this.started&&(document.removeEventListener("readystatechange",this.interpretReadyState,!1),removeEventListener("pagehide",this.pageWillUnload,!1),this.started=!1)}pageIsInteractive(){this.stage==q.loading&&(this.stage=q.interactive,this.delegate.pageBecameInteractive())}pageIsComplete(){this.pageIsInteractive(),this.stage==q.interactive&&(this.stage=q.complete,this.delegate.pageLoaded())}get readyState(){return document.readyState}},Qt=class{constructor(e){this.started=!1,this.onScroll=()=>{this.updatePosition({x:window.pageXOffset,y:window.pageYOffset})},this.delegate=e}start(){this.started||(addEventListener("scroll",this.onScroll,!1),this.onScroll(),this.started=!0)}stop(){this.started&&(removeEventListener("scroll",this.onScroll,!1),this.started=!1)}updatePosition(e){this.delegate.scrollPositionChanged(e)}},Zt=class{constructor(e){this.sources=new Set,this.started=!1,this.inspectFetchResponse=i=>{let r=on(i);r&&an(r)&&(i.preventDefault(),this.receiveMessageResponse(r))},this.receiveMessageEvent=i=>{this.started&&typeof i.data=="string"&&this.receiveMessageHTML(i.data)},this.delegate=e}start(){this.started||(this.started=!0,addEventListener("turbo:before-fetch-response",this.inspectFetchResponse,!1))}stop(){this.started&&(this.started=!1,removeEventListener("turbo:before-fetch-response",this.inspectFetchResponse,!1))}connectStreamSource(e){this.streamSourceIsConnected(e)||(this.sources.add(e),e.addEventListener("message",this.receiveMessageEvent,!1))}disconnectStreamSource(e){this.streamSourceIsConnected(e)&&(this.sources.delete(e),e.removeEventListener("message",this.receiveMessageEvent,!1))}streamSourceIsConnected(e){return this.sources.has(e)}async receiveMessageResponse(e){let i=await e.responseHTML;i&&this.receiveMessageHTML(i)}receiveMessageHTML(e){this.delegate.receivedMessageFromStream(new ae(e))}};function on(t){var e;let i=(e=t.detail)===null||e===void 0?void 0:e.fetchResponse;if(i instanceof nt)return i}function an(t){var e;return((e=t.contentType)!==null&&e!==void 0?e:"").startsWith(ae.contentType)}var ei=class extends Fe{async render(){this.replaceHeadAndBody(),this.activateScriptElements()}replaceHeadAndBody(){let{documentElement:e,head:i,body:r}=document;e.replaceChild(this.newHead,i),e.replaceChild(this.newElement,r)}activateScriptElements(){for(let e of this.scriptElements){let i=e.parentNode;if(i){let r=this.createScriptElement(e);i.replaceChild(r,e)}}}get newHead(){return this.newSnapshot.headSnapshot.element}get scriptElements(){return[...document.documentElement.querySelectorAll("script")]}},ht=class extends Fe{get shouldRender(){return this.newSnapshot.isVisitable&&this.trackedElementsAreIdentical}prepareToRender(){this.mergeHead()}async render(){this.replaceBody()}finishRendering(){super.finishRendering(),this.isPreview||this.focusFirstAutofocusableElement()}get currentHeadSnapshot(){return this.currentSnapshot.headSnapshot}get newHeadSnapshot(){return this.newSnapshot.headSnapshot}get newElement(){return this.newSnapshot.element}mergeHead(){this.copyNewHeadStylesheetElements(),this.copyNewHeadScriptElements(),this.removeCurrentHeadProvisionalElements(),this.copyNewHeadProvisionalElements()}replaceBody(){this.preservingPermanentElements(()=>{this.activateNewBody(),this.assignNewBody()})}get trackedElementsAreIdentical(){return this.currentHeadSnapshot.trackedElementSignature==this.newHeadSnapshot.trackedElementSignature}copyNewHeadStylesheetElements(){for(let e of this.newHeadStylesheetElements)document.head.appendChild(e)}copyNewHeadScriptElements(){for(let e of this.newHeadScriptElements)document.head.appendChild(this.createScriptElement(e))}removeCurrentHeadProvisionalElements(){for(let e of this.currentHeadProvisionalElements)document.head.removeChild(e)}copyNewHeadProvisionalElements(){for(let e of this.newHeadProvisionalElements)document.head.appendChild(e)}activateNewBody(){document.adoptNode(this.newElement),this.activateNewBodyScriptElements()}activateNewBodyScriptElements(){for(let e of this.newBodyScriptElements){let i=this.createScriptElement(e);e.replaceWith(i)}}assignNewBody(){document.body&&this.newElement instanceof HTMLBodyElement?document.body.replaceWith(this.newElement):document.documentElement.appendChild(this.newElement)}get newHeadStylesheetElements(){return this.newHeadSnapshot.getStylesheetElementsNotInSnapshot(this.currentHeadSnapshot)}get newHeadScriptElements(){return this.newHeadSnapshot.getScriptElementsNotInSnapshot(this.currentHeadSnapshot)}get currentHeadProvisionalElements(){return this.currentHeadSnapshot.provisionalElements}get newHeadProvisionalElements(){return this.newHeadSnapshot.provisionalElements}get newBodyScriptElements(){return this.newElement.querySelectorAll("script")}},ti=class{constructor(e){this.keys=[],this.snapshots={},this.size=e}has(e){return _e(e)in this.snapshots}get(e){if(this.has(e)){let i=this.read(e);return this.touch(e),i}}put(e,i){return this.write(e,i),this.touch(e),i}clear(){this.snapshots={}}read(e){return this.snapshots[_e(e)]}write(e,i){this.snapshots[_e(e)]=i}touch(e){let i=_e(e),r=this.keys.indexOf(i);r>-1&&this.keys.splice(r,1),this.keys.unshift(i),this.trim()}trim(){for(let e of this.keys.splice(this.size))delete this.snapshots[e]}},ii=class extends at{constructor(){super(...arguments);this.snapshotCache=new ti(10),this.lastRenderedLocation=new URL(location.href)}renderPage(e,i=!1){let r=new ht(this.snapshot,e,i);return this.render(r)}renderError(e){let i=new ei(this.snapshot,e,!1);return this.render(i)}clearSnapshotCache(){this.snapshotCache.clear()}async cacheSnapshot(){if(this.shouldCacheSnapshot){this.delegate.viewWillCacheSnapshot();let{snapshot:e,lastRenderedLocation:i}=this;await Hr(),this.snapshotCache.put(i,e.clone())}}getCachedSnapshotForLocation(e){return this.snapshotCache.get(e)}get snapshot(){return $.fromElement(this.element)}get shouldCacheSnapshot(){return this.snapshot.isCacheable}},ri=class{constructor(){this.navigator=new Gt(this),this.history=new zt(this),this.view=new ii(this,document.documentElement),this.adapter=new $t(this),this.pageObserver=new Yt(this),this.cacheObserver=new qt,this.linkClickObserver=new Jt(this),this.formSubmitObserver=new Wt(this),this.scrollObserver=new Qt(this),this.streamObserver=new Zt(this),this.frameRedirector=new Kt(document.documentElement),this.drive=!0,this.enabled=!0,this.progressBarDelay=500,this.started=!1}start(){this.started||(this.pageObserver.start(),this.cacheObserver.start(),this.linkClickObserver.start(),this.formSubmitObserver.start(),this.scrollObserver.start(),this.streamObserver.start(),this.frameRedirector.start(),this.history.start(),this.started=!0,this.enabled=!0)}disable(){this.enabled=!1}stop(){this.started&&(this.pageObserver.stop(),this.cacheObserver.stop(),this.linkClickObserver.stop(),this.formSubmitObserver.stop(),this.scrollObserver.stop(),this.streamObserver.stop(),this.frameRedirector.stop(),this.history.stop(),this.started=!1)}registerAdapter(e){this.adapter=e}visit(e,i={}){this.navigator.proposeVisit(F(e),i)}connectStreamSource(e){this.streamObserver.connectStreamSource(e)}disconnectStreamSource(e){this.streamObserver.disconnectStreamSource(e)}renderStreamMessage(e){document.documentElement.appendChild(ae.wrap(e).fragment)}clearCache(){this.view.clearSnapshotCache()}setProgressBarDelay(e){this.progressBarDelay=e}get location(){return this.history.location}get restorationIdentifier(){return this.history.restorationIdentifier}historyPoppedToLocationWithRestorationIdentifier(e,i){this.enabled?this.navigator.startVisit(e,i,{action:"restore",historyChanged:!0}):this.adapter.pageInvalidated()}scrollPositionChanged(e){this.history.updateRestorationData({scrollPosition:e})}willFollowLinkToLocation(e,i){return this.elementDriveEnabled(e)&&this.locationIsVisitable(i)&&this.applicationAllowsFollowingLinkToLocation(e,i)}followedLinkToLocation(e,i){let r=this.getActionForLink(e);this.convertLinkWithMethodClickToFormSubmission(e)||this.visit(i.href,{action:r})}convertLinkWithMethodClickToFormSubmission(e){let i=e.getAttribute("data-turbo-method");if(i){let r=document.createElement("form");return r.method=i,r.action=e.getAttribute("href")||"undefined",document.body.appendChild(r),P("submit",{cancelable:!0,target:r})}else return!1}allowsVisitingLocationWithAction(e,i){return this.locationWithActionIsSamePage(e,i)||this.applicationAllowsVisitingLocation(e)}visitProposedToLocation(e,i){ni(e),this.adapter.visitProposedToLocation(e,i)}visitStarted(e){ni(e.location),e.silent||this.notifyApplicationAfterVisitingLocation(e.location,e.action)}visitCompleted(e){this.notifyApplicationAfterPageLoad(e.getTimingMetrics())}locationWithActionIsSamePage(e,i){return this.navigator.locationWithActionIsSamePage(e,i)}visitScrolledToSamePageLocation(e,i){this.notifyApplicationAfterVisitingSamePageLocation(e,i)}willSubmitForm(e,i){return this.elementDriveEnabled(e)&&this.elementDriveEnabled(i)}formSubmitted(e,i){this.navigator.submitForm(e,i)}pageBecameInteractive(){this.view.lastRenderedLocation=this.location,this.notifyApplicationAfterPageLoad()}pageLoaded(){this.history.assumeControlOfScrollRestoration()}pageWillUnload(){this.history.relinquishControlOfScrollRestoration()}receivedMessageFromStream(e){this.renderStreamMessage(e)}viewWillCacheSnapshot(){var e;((e=this.navigator.currentVisit)===null||e===void 0?void 0:e.silent)||this.notifyApplicationBeforeCachingSnapshot()}allowsImmediateRender({element:e},i){return!this.notifyApplicationBeforeRender(e,i).defaultPrevented}viewRenderedSnapshot(e,i){this.view.lastRenderedLocation=this.history.location,this.notifyApplicationAfterRender()}viewInvalidated(){this.adapter.pageInvalidated()}frameLoaded(e){this.notifyApplicationAfterFrameLoad(e)}frameRendered(e,i){this.notifyApplicationAfterFrameRender(e,i)}applicationAllowsFollowingLinkToLocation(e,i){return!this.notifyApplicationAfterClickingLinkToLocation(e,i).defaultPrevented}applicationAllowsVisitingLocation(e){return!this.notifyApplicationBeforeVisitingLocation(e).defaultPrevented}notifyApplicationAfterClickingLinkToLocation(e,i){return P("turbo:click",{target:e,detail:{url:i.href},cancelable:!0})}notifyApplicationBeforeVisitingLocation(e){return P("turbo:before-visit",{detail:{url:e.href},cancelable:!0})}notifyApplicationAfterVisitingLocation(e,i){return P("turbo:visit",{detail:{url:e.href,action:i}})}notifyApplicationBeforeCachingSnapshot(){return P("turbo:before-cache")}notifyApplicationBeforeRender(e,i){return P("turbo:before-render",{detail:{newBody:e,resume:i},cancelable:!0})}notifyApplicationAfterRender(){return P("turbo:render")}notifyApplicationAfterPageLoad(e={}){return P("turbo:load",{detail:{url:this.location.href,timing:e}})}notifyApplicationAfterVisitingSamePageLocation(e,i){dispatchEvent(new HashChangeEvent("hashchange",{oldURL:e.toString(),newURL:i.toString()}))}notifyApplicationAfterFrameLoad(e){return P("turbo:frame-load",{target:e})}notifyApplicationAfterFrameRender(e,i){return P("turbo:frame-render",{detail:{fetchResponse:e},target:i,cancelable:!0})}elementDriveEnabled(e){let i=e==null?void 0:e.closest("[data-turbo]");return this.drive?i?i.getAttribute("data-turbo")!="false":!0:i?i.getAttribute("data-turbo")=="true":!1}getActionForLink(e){let i=e.getAttribute("data-turbo-action");return Xt(i)?i:"advance"}locationIsVisitable(e){return _r(e,this.snapshot.rootLocation)&&xr(e)}get snapshot(){return this.view.snapshot}};function ni(t){Object.defineProperties(t,ln)}var ln={absoluteURL:{get(){return this.toString()}}},k=new ri,{navigator:hn}=k;function si(){k.start()}function cn(t){k.registerAdapter(t)}function un(t,e){k.visit(t,e)}function dn(t){k.connectStreamSource(t)}function fn(t){k.disconnectStreamSource(t)}function pn(t){k.renderStreamMessage(t)}function mn(){k.clearCache()}function gn(t){k.setProgressBarDelay(t)}var vn=Object.freeze({__proto__:null,navigator:hn,session:k,PageRenderer:ht,PageSnapshot:$,start:si,registerAdapter:cn,visit:un,connectStreamSource:dn,disconnectStreamSource:fn,renderStreamMessage:pn,clearCache:mn,setProgressBarDelay:gn}),oi=class{constructor(e){this.resolveVisitPromise=()=>{},this.connected=!1,this.hasBeenLoaded=!1,this.settingSourceURL=!1,this.element=e,this.view=new Nt(this,this.element),this.appearanceObserver=new Dt(this,this.element),this.linkInterceptor=new lt(this,this.element),this.formInterceptor=new ot(this,this.element)}connect(){this.connected||(this.connected=!0,this.reloadable=!1,this.loadingStyle==G.lazy&&this.appearanceObserver.start(),this.linkInterceptor.start(),this.formInterceptor.start(),this.sourceURLChanged())}disconnect(){this.connected&&(this.connected=!1,this.appearanceObserver.stop(),this.linkInterceptor.stop(),this.formInterceptor.stop())}disabledChanged(){this.loadingStyle==G.eager&&this.loadSourceURL()}sourceURLChanged(){(this.loadingStyle==G.eager||this.hasBeenLoaded)&&this.loadSourceURL()}loadingStyleChanged(){this.loadingStyle==G.lazy?this.appearanceObserver.start():(this.appearanceObserver.stop(),this.loadSourceURL())}async loadSourceURL(){if(!this.settingSourceURL&&this.enabled&&this.isActive&&(this.reloadable||this.sourceURL!=this.currentURL)){let e=this.currentURL;if(this.currentURL=this.sourceURL,this.sourceURL)try{this.element.loaded=this.visit(this.sourceURL),this.appearanceObserver.stop(),await this.element.loaded,this.hasBeenLoaded=!0,k.frameLoaded(this.element)}catch(i){throw this.currentURL=e,i}}}async loadResponse(e){e.redirected&&(this.sourceURL=e.response.url);try{let i=await e.responseHTML;if(i){let{body:r}=_t(i),n=new ge(await this.extractForeignFrameElement(r)),s=new Ht(this.view.snapshot,n,!1);this.view.renderPromise&&await this.view.renderPromise,await this.view.render(s),k.frameRendered(e,this.element)}}catch(i){console.error(i),this.view.invalidate()}}elementAppearedInViewport(e){this.loadSourceURL()}shouldInterceptLinkClick(e,i){return e.hasAttribute("data-turbo-method")?!1:this.shouldInterceptNavigation(e)}linkClickIntercepted(e,i){this.reloadable=!0,this.navigateFrame(e,i)}shouldInterceptFormSubmission(e,i){return this.shouldInterceptNavigation(e,i)}formSubmissionIntercepted(e,i){if(this.formSubmission&&this.formSubmission.stop(),this.reloadable=!1,this.formSubmission=new st(this,e,i),this.formSubmission.fetchRequest.isIdempotent)this.navigateFrame(e,this.formSubmission.fetchRequest.url.href);else{let{fetchRequest:r}=this.formSubmission;this.prepareHeadersForRequest(r.headers,r),this.formSubmission.start()}}prepareHeadersForRequest(e,i){e["Turbo-Frame"]=this.id}requestStarted(e){this.element.setAttribute("busy","")}requestPreventedHandlingResponse(e,i){this.resolveVisitPromise()}async requestSucceededWithResponse(e,i){await this.loadResponse(i),this.resolveVisitPromise()}requestFailedWithResponse(e,i){console.error(i),this.resolveVisitPromise()}requestErrored(e,i){console.error(i),this.resolveVisitPromise()}requestFinished(e){this.element.removeAttribute("busy")}formSubmissionStarted(e){this.findFrameElement(e.formElement).setAttribute("busy","")}formSubmissionSucceededWithResponse(e,i){this.findFrameElement(e.formElement).delegate.loadResponse(i)}formSubmissionFailedWithResponse(e,i){this.element.delegate.loadResponse(i)}formSubmissionErrored(e,i){console.error(i)}formSubmissionFinished(e){this.findFrameElement(e.formElement).removeAttribute("busy")}allowsImmediateRender(e,i){return!0}viewRenderedSnapshot(e,i){}viewInvalidated(){}async visit(e){let i=new De(this,L.get,F(e));return new Promise(r=>{this.resolveVisitPromise=()=>{this.resolveVisitPromise=()=>{},r()},i.perform()})}navigateFrame(e,i){let r=this.findFrameElement(e);r.src=i}findFrameElement(e){var i;let r=e.getAttribute("data-turbo-frame")||this.element.getAttribute("target");return(i=ai(r))!==null&&i!==void 0?i:this.element}async extractForeignFrameElement(e){let i,r=CSS.escape(this.id);try{if(i=li(e.querySelector(`turbo-frame#${r}`),this.currentURL))return i;if(i=li(e.querySelector(`turbo-frame[src][recurse~=${r}]`),this.currentURL))return await i.loaded,await this.extractForeignFrameElement(i);console.error(`Response has no matching <turbo-frame id="${r}"> element`)}catch(n){console.error(n)}return new V}shouldInterceptNavigation(e,i){let r=e.getAttribute("data-turbo-frame")||this.element.getAttribute("target");if(!this.enabled||r=="_top")return!1;if(r){let n=ai(r);if(n)return!n.disabled}return!(!k.elementDriveEnabled(e)||i&&!k.elementDriveEnabled(i))}get id(){return this.element.id}get enabled(){return!this.element.disabled}get sourceURL(){if(this.element.src)return this.element.src}get reloadable(){return this.findFrameElement(this.element).hasAttribute("reloadable")}set reloadable(e){let i=this.findFrameElement(this.element);e?i.setAttribute("reloadable",""):i.removeAttribute("reloadable")}set sourceURL(e){this.settingSourceURL=!0,this.element.src=e??null,this.currentURL=this.element.src,this.settingSourceURL=!1}get loadingStyle(){return this.element.loading}get isLoading(){return this.formSubmission!==void 0||this.resolveVisitPromise()!==void 0}get isActive(){return this.element.isActive&&this.connected}};function ai(t){if(t!=null){let e=document.getElementById(t);if(e instanceof V)return e}}function li(t,e){if(t){let i=t.getAttribute("src");if(i!=null&&e!=null&&Mr(i,e))throw new Error(`Matching <turbo-frame id="${t.id}"> element has a source URL which references itself`);if(t.ownerDocument!==document&&(t=document.importNode(t,!0)),t instanceof V)return t.connectedCallback(),t}}var bn={after(){this.targetElements.forEach(t=>{var e;return(e=t.parentElement)===null||e===void 0?void 0:e.insertBefore(this.templateContent,t.nextSibling)})},append(){this.removeDuplicateTargetChildren(),this.targetElements.forEach(t=>t.append(this.templateContent))},before(){this.targetElements.forEach(t=>{var e;return(e=t.parentElement)===null||e===void 0?void 0:e.insertBefore(this.templateContent,t)})},prepend(){this.removeDuplicateTargetChildren(),this.targetElements.forEach(t=>t.prepend(this.templateContent))},remove(){this.targetElements.forEach(t=>t.remove())},replace(){this.targetElements.forEach(t=>t.replaceWith(this.templateContent))},update(){this.targetElements.forEach(t=>{t.innerHTML="",t.append(this.templateContent)})}},hi=class extends HTMLElement{async connectedCallback(){try{await this.render()}catch(e){console.error(e)}finally{this.disconnect()}}async render(){var e;return(e=this.renderPromise)!==null&&e!==void 0?e:this.renderPromise=(async()=>{this.dispatchEvent(this.beforeRenderEvent)&&(await Me(),this.performAction())})()}disconnect(){try{this.remove()}catch(e){}}removeDuplicateTargetChildren(){this.duplicateChildren.forEach(e=>e.remove())}get duplicateChildren(){var e;let i=this.targetElements.flatMap(n=>[...n.children]).filter(n=>!!n.id),r=[...(e=this.templateContent)===null||e===void 0?void 0:e.children].filter(n=>!!n.id).map(n=>n.id);return i.filter(n=>r.includes(n.id))}get performAction(){if(this.action){let e=bn[this.action];if(e)return e;this.raise("unknown action")}this.raise("action attribute is missing")}get targetElements(){if(this.target)return this.targetElementsById;if(this.targets)return this.targetElementsByQuery;this.raise("target or targets attribute is missing")}get templateContent(){return this.templateElement.content.cloneNode(!0)}get templateElement(){if(this.firstElementChild instanceof HTMLTemplateElement)return this.firstElementChild;this.raise("first child element must be a <template> element")}get action(){return this.getAttribute("action")}get target(){return this.getAttribute("target")}get targets(){return this.getAttribute("targets")}raise(e){throw new Error(`${this.description}: ${e}`)}get description(){var e,i;return(i=((e=this.outerHTML.match(/<[^>]+>/))!==null&&e!==void 0?e:[])[0])!==null&&i!==void 0?i:"<turbo-stream>"}get beforeRenderEvent(){return new CustomEvent("turbo:before-stream-render",{bubbles:!0,cancelable:!0})}get targetElementsById(){var e;let i=(e=this.ownerDocument)===null||e===void 0?void 0:e.getElementById(this.target);return i!==null?[i]:[]}get targetElementsByQuery(){var e;let i=(e=this.ownerDocument)===null||e===void 0?void 0:e.querySelectorAll(this.targets);return i.length!==0?Array.prototype.slice.call(i):[]}};V.delegateConstructor=oi;customElements.define("turbo-frame",V);customElements.define("turbo-stream",hi);(()=>{let t=document.currentScript;if(!!t&&!t.hasAttribute("data-turbo-suppress-warning")){for(;t=t.parentElement;)if(t==document.body)return console.warn(Mt` You are loading Turbo from a <script> element inside the <body> element. This is probably not what you meant to do! Load your application’s JavaScript bundle inside the <head> element instead. <script> elements in <body> are evaluated with each page change. @@ -23,9 +23,25 @@ —— Suppress this warning by adding a "data-turbo-suppress-warning" attribute to: %s - `,r.outerHTML)}})();window.Turbo=er;Te();var Me=function(){function r(e,t,n){this.eventTarget=e,this.eventName=t,this.eventOptions=n,this.unorderedBindings=new Set}return r.prototype.connect=function(){this.eventTarget.addEventListener(this.eventName,this,this.eventOptions)},r.prototype.disconnect=function(){this.eventTarget.removeEventListener(this.eventName,this,this.eventOptions)},r.prototype.bindingConnected=function(e){this.unorderedBindings.add(e)},r.prototype.bindingDisconnected=function(e){this.unorderedBindings.delete(e)},r.prototype.handleEvent=function(e){for(var t=rr(e),n=0,i=this.bindings;n<i.length;n++){var s=i[n];if(t.immediatePropagationStopped)break;s.handleEvent(t)}},Object.defineProperty(r.prototype,"bindings",{get:function(){return Array.from(this.unorderedBindings).sort(function(e,t){var n=e.index,i=t.index;return n<i?-1:n>i?1:0})},enumerable:!1,configurable:!0}),r}();function rr(r){if("immediatePropagationStopped"in r)return r;var e=r.stopImmediatePropagation;return Object.assign(r,{immediatePropagationStopped:!1,stopImmediatePropagation:function(){this.immediatePropagationStopped=!0,e.call(this)}})}var xe=function(){function r(e){this.application=e,this.eventListenerMaps=new Map,this.started=!1}return r.prototype.start=function(){this.started||(this.started=!0,this.eventListeners.forEach(function(e){return e.connect()}))},r.prototype.stop=function(){this.started&&(this.started=!1,this.eventListeners.forEach(function(e){return e.disconnect()}))},Object.defineProperty(r.prototype,"eventListeners",{get:function(){return Array.from(this.eventListenerMaps.values()).reduce(function(e,t){return e.concat(Array.from(t.values()))},[])},enumerable:!1,configurable:!0}),r.prototype.bindingConnected=function(e){this.fetchEventListenerForBinding(e).bindingConnected(e)},r.prototype.bindingDisconnected=function(e){this.fetchEventListenerForBinding(e).bindingDisconnected(e)},r.prototype.handleError=function(e,t,n){n===void 0&&(n={}),this.application.handleError(e,"Error "+t,n)},r.prototype.fetchEventListenerForBinding=function(e){var t=e.eventTarget,n=e.eventName,i=e.eventOptions;return this.fetchEventListener(t,n,i)},r.prototype.fetchEventListener=function(e,t,n){var i=this.fetchEventListenerMapForEventTarget(e),s=this.cacheKey(t,n),o=i.get(s);return o||(o=this.createEventListener(e,t,n),i.set(s,o)),o},r.prototype.createEventListener=function(e,t,n){var i=new Me(e,t,n);return this.started&&i.connect(),i},r.prototype.fetchEventListenerMapForEventTarget=function(e){var t=this.eventListenerMaps.get(e);return t||(t=new Map,this.eventListenerMaps.set(e,t)),t},r.prototype.cacheKey=function(e,t){var n=[e];return Object.keys(t).sort().forEach(function(i){n.push(""+(t[i]?"":"!")+i)}),n.join(":")},r}();var nr=/^((.+?)(@(window|document))?->)?(.+?)(#([^:]+?))(:(.+))?$/;function Fe(r){var e=r.trim(),t=e.match(nr)||[];return{eventTarget:ir(t[4]),eventName:t[2],eventOptions:t[9]?sr(t[9]):{},identifier:t[5],methodName:t[7]}}function ir(r){if(r=="window")return window;if(r=="document")return document}function sr(r){return r.split(":").reduce(function(e,t){var n;return Object.assign(e,(n={},n[t.replace(/^!/,"")]=!/^!/.test(t),n))},{})}function Be(r){if(r==window)return"window";if(r==document)return"document"}var Ie=function(){function r(e,t,n){this.element=e,this.index=t,this.eventTarget=n.eventTarget||e,this.eventName=n.eventName||or(e)||G("missing event name"),this.eventOptions=n.eventOptions||{},this.identifier=n.identifier||G("missing identifier"),this.methodName=n.methodName||G("missing method name")}return r.forToken=function(e){return new this(e.element,e.index,Fe(e.content))},r.prototype.toString=function(){var e=this.eventTargetName?"@"+this.eventTargetName:"";return""+this.eventName+e+"->"+this.identifier+"#"+this.methodName},Object.defineProperty(r.prototype,"eventTargetName",{get:function(){return Be(this.eventTarget)},enumerable:!1,configurable:!0}),r}();var Ne={a:function(r){return"click"},button:function(r){return"click"},form:function(r){return"submit"},input:function(r){return r.getAttribute("type")=="submit"?"click":"input"},select:function(r){return"change"},textarea:function(r){return"input"}};function or(r){var e=r.tagName.toLowerCase();if(e in Ne)return Ne[e](r)}function G(r){throw new Error(r)}var qe=function(){function r(e,t){this.context=e,this.action=t}return Object.defineProperty(r.prototype,"index",{get:function(){return this.action.index},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"eventTarget",{get:function(){return this.action.eventTarget},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"eventOptions",{get:function(){return this.action.eventOptions},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"identifier",{get:function(){return this.context.identifier},enumerable:!1,configurable:!0}),r.prototype.handleEvent=function(e){this.willBeInvokedByEvent(e)&&this.invokeWithEvent(e)},Object.defineProperty(r.prototype,"eventName",{get:function(){return this.action.eventName},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"method",{get:function(){var e=this.controller[this.methodName];if(typeof e=="function")return e;throw new Error('Action "'+this.action+'" references undefined method "'+this.methodName+'"')},enumerable:!1,configurable:!0}),r.prototype.invokeWithEvent=function(e){try{this.method.call(this.controller,e)}catch(l){var t=this,n=t.identifier,i=t.controller,s=t.element,o=t.index,c={identifier:n,controller:i,element:s,index:o,event:e};this.context.handleError(l,'invoking action "'+this.action+'"',c)}},r.prototype.willBeInvokedByEvent=function(e){var t=e.target;return this.element===t?!0:t instanceof Element&&this.element.contains(t)?this.scope.containsElement(t):this.scope.containsElement(this.action.element)},Object.defineProperty(r.prototype,"controller",{get:function(){return this.context.controller},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"methodName",{get:function(){return this.action.methodName},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"element",{get:function(){return this.scope.element},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"scope",{get:function(){return this.context.scope},enumerable:!1,configurable:!0}),r}();var Ve=function(){function r(e,t){var n=this;this.element=e,this.started=!1,this.delegate=t,this.elements=new Set,this.mutationObserver=new MutationObserver(function(i){return n.processMutations(i)})}return r.prototype.start=function(){this.started||(this.started=!0,this.mutationObserver.observe(this.element,{attributes:!0,childList:!0,subtree:!0}),this.refresh())},r.prototype.stop=function(){this.started&&(this.mutationObserver.takeRecords(),this.mutationObserver.disconnect(),this.started=!1)},r.prototype.refresh=function(){if(this.started){for(var e=new Set(this.matchElementsInTree()),t=0,n=Array.from(this.elements);t<n.length;t++){var i=n[t];e.has(i)||this.removeElement(i)}for(var s=0,o=Array.from(e);s<o.length;s++){var i=o[s];this.addElement(i)}}},r.prototype.processMutations=function(e){if(this.started)for(var t=0,n=e;t<n.length;t++){var i=n[t];this.processMutation(i)}},r.prototype.processMutation=function(e){e.type=="attributes"?this.processAttributeChange(e.target,e.attributeName):e.type=="childList"&&(this.processRemovedNodes(e.removedNodes),this.processAddedNodes(e.addedNodes))},r.prototype.processAttributeChange=function(e,t){var n=e;this.elements.has(n)?this.delegate.elementAttributeChanged&&this.matchElement(n)?this.delegate.elementAttributeChanged(n,t):this.removeElement(n):this.matchElement(n)&&this.addElement(n)},r.prototype.processRemovedNodes=function(e){for(var t=0,n=Array.from(e);t<n.length;t++){var i=n[t],s=this.elementFromNode(i);s&&this.processTree(s,this.removeElement)}},r.prototype.processAddedNodes=function(e){for(var t=0,n=Array.from(e);t<n.length;t++){var i=n[t],s=this.elementFromNode(i);s&&this.elementIsActive(s)&&this.processTree(s,this.addElement)}},r.prototype.matchElement=function(e){return this.delegate.matchElement(e)},r.prototype.matchElementsInTree=function(e){return e===void 0&&(e=this.element),this.delegate.matchElementsInTree(e)},r.prototype.processTree=function(e,t){for(var n=0,i=this.matchElementsInTree(e);n<i.length;n++){var s=i[n];t.call(this,s)}},r.prototype.elementFromNode=function(e){if(e.nodeType==Node.ELEMENT_NODE)return e},r.prototype.elementIsActive=function(e){return e.isConnected!=this.element.isConnected?!1:this.element.contains(e)},r.prototype.addElement=function(e){this.elements.has(e)||this.elementIsActive(e)&&(this.elements.add(e),this.delegate.elementMatched&&this.delegate.elementMatched(e))},r.prototype.removeElement=function(e){this.elements.has(e)&&(this.elements.delete(e),this.delegate.elementUnmatched&&this.delegate.elementUnmatched(e))},r}();var je=function(){function r(e,t,n){this.attributeName=t,this.delegate=n,this.elementObserver=new Ve(e,this)}return Object.defineProperty(r.prototype,"element",{get:function(){return this.elementObserver.element},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"selector",{get:function(){return"["+this.attributeName+"]"},enumerable:!1,configurable:!0}),r.prototype.start=function(){this.elementObserver.start()},r.prototype.stop=function(){this.elementObserver.stop()},r.prototype.refresh=function(){this.elementObserver.refresh()},Object.defineProperty(r.prototype,"started",{get:function(){return this.elementObserver.started},enumerable:!1,configurable:!0}),r.prototype.matchElement=function(e){return e.hasAttribute(this.attributeName)},r.prototype.matchElementsInTree=function(e){var t=this.matchElement(e)?[e]:[],n=Array.from(e.querySelectorAll(this.selector));return t.concat(n)},r.prototype.elementMatched=function(e){this.delegate.elementMatchedAttribute&&this.delegate.elementMatchedAttribute(e,this.attributeName)},r.prototype.elementUnmatched=function(e){this.delegate.elementUnmatchedAttribute&&this.delegate.elementUnmatchedAttribute(e,this.attributeName)},r.prototype.elementAttributeChanged=function(e,t){this.delegate.elementAttributeValueChanged&&this.attributeName==t&&this.delegate.elementAttributeValueChanged(e,t)},r}();var De=function(){function r(e,t){var n=this;this.element=e,this.delegate=t,this.started=!1,this.stringMap=new Map,this.mutationObserver=new MutationObserver(function(i){return n.processMutations(i)})}return r.prototype.start=function(){this.started||(this.started=!0,this.mutationObserver.observe(this.element,{attributes:!0}),this.refresh())},r.prototype.stop=function(){this.started&&(this.mutationObserver.takeRecords(),this.mutationObserver.disconnect(),this.started=!1)},r.prototype.refresh=function(){if(this.started)for(var e=0,t=this.knownAttributeNames;e<t.length;e++){var n=t[e];this.refreshAttribute(n)}},r.prototype.processMutations=function(e){if(this.started)for(var t=0,n=e;t<n.length;t++){var i=n[t];this.processMutation(i)}},r.prototype.processMutation=function(e){var t=e.attributeName;t&&this.refreshAttribute(t)},r.prototype.refreshAttribute=function(e){var t=this.delegate.getStringMapKeyForAttribute(e);if(t!=null){this.stringMap.has(e)||this.stringMapKeyAdded(t,e);var n=this.element.getAttribute(e);this.stringMap.get(e)!=n&&this.stringMapValueChanged(n,t),n==null?(this.stringMap.delete(e),this.stringMapKeyRemoved(t,e)):this.stringMap.set(e,n)}},r.prototype.stringMapKeyAdded=function(e,t){this.delegate.stringMapKeyAdded&&this.delegate.stringMapKeyAdded(e,t)},r.prototype.stringMapValueChanged=function(e,t){this.delegate.stringMapValueChanged&&this.delegate.stringMapValueChanged(e,t)},r.prototype.stringMapKeyRemoved=function(e,t){this.delegate.stringMapKeyRemoved&&this.delegate.stringMapKeyRemoved(e,t)},Object.defineProperty(r.prototype,"knownAttributeNames",{get:function(){return Array.from(new Set(this.currentAttributeNames.concat(this.recordedAttributeNames)))},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"currentAttributeNames",{get:function(){return Array.from(this.element.attributes).map(function(e){return e.name})},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"recordedAttributeNames",{get:function(){return Array.from(this.stringMap.keys())},enumerable:!1,configurable:!0}),r}();function q(r,e,t){He(r,e).add(t)}function V(r,e,t){He(r,e).delete(t),ar(r,e)}function He(r,e){var t=r.get(e);return t||(t=new Set,r.set(e,t)),t}function ar(r,e){var t=r.get(e);t!=null&&t.size==0&&r.delete(e)}var C=function(){function r(){this.valuesByKey=new Map}return Object.defineProperty(r.prototype,"values",{get:function(){var e=Array.from(this.valuesByKey.values());return e.reduce(function(t,n){return t.concat(Array.from(n))},[])},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"size",{get:function(){var e=Array.from(this.valuesByKey.values());return e.reduce(function(t,n){return t+n.size},0)},enumerable:!1,configurable:!0}),r.prototype.add=function(e,t){q(this.valuesByKey,e,t)},r.prototype.delete=function(e,t){V(this.valuesByKey,e,t)},r.prototype.has=function(e,t){var n=this.valuesByKey.get(e);return n!=null&&n.has(t)},r.prototype.hasKey=function(e){return this.valuesByKey.has(e)},r.prototype.hasValue=function(e){var t=Array.from(this.valuesByKey.values());return t.some(function(n){return n.has(e)})},r.prototype.getValuesForKey=function(e){var t=this.valuesByKey.get(e);return t?Array.from(t):[]},r.prototype.getKeysForValue=function(e){return Array.from(this.valuesByKey).filter(function(t){var n=t[0],i=t[1];return i.has(e)}).map(function(t){var n=t[0],i=t[1];return n})},r}();var cr=function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,i){n.__proto__=i}||function(n,i){for(var s in i)i.hasOwnProperty(s)&&(n[s]=i[s])},r(e,t)};return function(e,t){r(e,t);function n(){this.constructor=e}e.prototype=t===null?Object.create(t):(n.prototype=t.prototype,new n)}}(),en=function(r){cr(e,r);function e(){var t=r.call(this)||this;return t.keysByValue=new Map,t}return Object.defineProperty(e.prototype,"values",{get:function(){return Array.from(this.keysByValue.keys())},enumerable:!1,configurable:!0}),e.prototype.add=function(t,n){r.prototype.add.call(this,t,n),q(this.keysByValue,n,t)},e.prototype.delete=function(t,n){r.prototype.delete.call(this,t,n),V(this.keysByValue,n,t)},e.prototype.hasValue=function(t){return this.keysByValue.has(t)},e.prototype.getKeysForValue=function(t){var n=this.keysByValue.get(t);return n?Array.from(n):[]},e}(C);var _e=function(){function r(e,t,n){this.attributeObserver=new je(e,t,this),this.delegate=n,this.tokensByElement=new C}return Object.defineProperty(r.prototype,"started",{get:function(){return this.attributeObserver.started},enumerable:!1,configurable:!0}),r.prototype.start=function(){this.attributeObserver.start()},r.prototype.stop=function(){this.attributeObserver.stop()},r.prototype.refresh=function(){this.attributeObserver.refresh()},Object.defineProperty(r.prototype,"element",{get:function(){return this.attributeObserver.element},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"attributeName",{get:function(){return this.attributeObserver.attributeName},enumerable:!1,configurable:!0}),r.prototype.elementMatchedAttribute=function(e){this.tokensMatched(this.readTokensForElement(e))},r.prototype.elementAttributeValueChanged=function(e){var t=this.refreshTokensForElement(e),n=t[0],i=t[1];this.tokensUnmatched(n),this.tokensMatched(i)},r.prototype.elementUnmatchedAttribute=function(e){this.tokensUnmatched(this.tokensByElement.getValuesForKey(e))},r.prototype.tokensMatched=function(e){var t=this;e.forEach(function(n){return t.tokenMatched(n)})},r.prototype.tokensUnmatched=function(e){var t=this;e.forEach(function(n){return t.tokenUnmatched(n)})},r.prototype.tokenMatched=function(e){this.delegate.tokenMatched(e),this.tokensByElement.add(e.element,e)},r.prototype.tokenUnmatched=function(e){this.delegate.tokenUnmatched(e),this.tokensByElement.delete(e.element,e)},r.prototype.refreshTokensForElement=function(e){var t=this.tokensByElement.getValuesForKey(e),n=this.readTokensForElement(e),i=ur(t,n).findIndex(function(s){var o=s[0],c=s[1];return!hr(o,c)});return i==-1?[[],[]]:[t.slice(i),n.slice(i)]},r.prototype.readTokensForElement=function(e){var t=this.attributeName,n=e.getAttribute(t)||"";return lr(n,e,t)},r}();function lr(r,e,t){return r.trim().split(/\s+/).filter(function(n){return n.length}).map(function(n,i){return{element:e,attributeName:t,content:n,index:i}})}function ur(r,e){var t=Math.max(r.length,e.length);return Array.from({length:t},function(n,i){return[r[i],e[i]]})}function hr(r,e){return r&&e&&r.index==e.index&&r.content==e.content}var j=function(){function r(e,t,n){this.tokenListObserver=new _e(e,t,this),this.delegate=n,this.parseResultsByToken=new WeakMap,this.valuesByTokenByElement=new WeakMap}return Object.defineProperty(r.prototype,"started",{get:function(){return this.tokenListObserver.started},enumerable:!1,configurable:!0}),r.prototype.start=function(){this.tokenListObserver.start()},r.prototype.stop=function(){this.tokenListObserver.stop()},r.prototype.refresh=function(){this.tokenListObserver.refresh()},Object.defineProperty(r.prototype,"element",{get:function(){return this.tokenListObserver.element},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"attributeName",{get:function(){return this.tokenListObserver.attributeName},enumerable:!1,configurable:!0}),r.prototype.tokenMatched=function(e){var t=e.element,n=this.fetchParseResultForToken(e).value;n&&(this.fetchValuesByTokenForElement(t).set(e,n),this.delegate.elementMatchedValue(t,n))},r.prototype.tokenUnmatched=function(e){var t=e.element,n=this.fetchParseResultForToken(e).value;n&&(this.fetchValuesByTokenForElement(t).delete(e),this.delegate.elementUnmatchedValue(t,n))},r.prototype.fetchParseResultForToken=function(e){var t=this.parseResultsByToken.get(e);return t||(t=this.parseToken(e),this.parseResultsByToken.set(e,t)),t},r.prototype.fetchValuesByTokenForElement=function(e){var t=this.valuesByTokenByElement.get(e);return t||(t=new Map,this.valuesByTokenByElement.set(e,t)),t},r.prototype.parseToken=function(e){try{var t=this.delegate.parseValueForToken(e);return{value:t}}catch(n){return{error:n}}},r}();var We=function(){function r(e,t){this.context=e,this.delegate=t,this.bindingsByAction=new Map}return r.prototype.start=function(){this.valueListObserver||(this.valueListObserver=new j(this.element,this.actionAttribute,this),this.valueListObserver.start())},r.prototype.stop=function(){this.valueListObserver&&(this.valueListObserver.stop(),delete this.valueListObserver,this.disconnectAllActions())},Object.defineProperty(r.prototype,"element",{get:function(){return this.context.element},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"identifier",{get:function(){return this.context.identifier},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"actionAttribute",{get:function(){return this.schema.actionAttribute},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"schema",{get:function(){return this.context.schema},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"bindings",{get:function(){return Array.from(this.bindingsByAction.values())},enumerable:!1,configurable:!0}),r.prototype.connectAction=function(e){var t=new qe(this.context,e);this.bindingsByAction.set(e,t),this.delegate.bindingConnected(t)},r.prototype.disconnectAction=function(e){var t=this.bindingsByAction.get(e);t&&(this.bindingsByAction.delete(e),this.delegate.bindingDisconnected(t))},r.prototype.disconnectAllActions=function(){var e=this;this.bindings.forEach(function(t){return e.delegate.bindingDisconnected(t)}),this.bindingsByAction.clear()},r.prototype.parseValueForToken=function(e){var t=Ie.forToken(e);if(t.identifier==this.identifier)return t},r.prototype.elementMatchedValue=function(e,t){this.connectAction(t)},r.prototype.elementUnmatchedValue=function(e,t){this.disconnectAction(t)},r}();var Ue=function(){function r(e,t){this.context=e,this.receiver=t,this.stringMapObserver=new De(this.element,this),this.valueDescriptorMap=this.controller.valueDescriptorMap,this.invokeChangedCallbacksForDefaultValues()}return r.prototype.start=function(){this.stringMapObserver.start()},r.prototype.stop=function(){this.stringMapObserver.stop()},Object.defineProperty(r.prototype,"element",{get:function(){return this.context.element},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"controller",{get:function(){return this.context.controller},enumerable:!1,configurable:!0}),r.prototype.getStringMapKeyForAttribute=function(e){if(e in this.valueDescriptorMap)return this.valueDescriptorMap[e].name},r.prototype.stringMapValueChanged=function(e,t){this.invokeChangedCallbackForValue(t)},r.prototype.invokeChangedCallbacksForDefaultValues=function(){for(var e=0,t=this.valueDescriptors;e<t.length;e++){var n=t[e],i=n.key,s=n.name,o=n.defaultValue;o!=null&&!this.controller.data.has(i)&&this.invokeChangedCallbackForValue(s)}},r.prototype.invokeChangedCallbackForValue=function(e){var t=e+"Changed",n=this.receiver[t];if(typeof n=="function"){var i=this.receiver[e];n.call(this.receiver,i)}},Object.defineProperty(r.prototype,"valueDescriptors",{get:function(){var e=this.valueDescriptorMap;return Object.keys(e).map(function(t){return e[t]})},enumerable:!1,configurable:!0}),r}();var Q=function(){function r(e,t){this.module=e,this.scope=t,this.controller=new e.controllerConstructor(this),this.bindingObserver=new We(this,this.dispatcher),this.valueObserver=new Ue(this,this.controller);try{this.controller.initialize()}catch(n){this.handleError(n,"initializing controller")}}return r.prototype.connect=function(){this.bindingObserver.start(),this.valueObserver.start();try{this.controller.connect()}catch(e){this.handleError(e,"connecting controller")}},r.prototype.disconnect=function(){try{this.controller.disconnect()}catch(e){this.handleError(e,"disconnecting controller")}this.valueObserver.stop(),this.bindingObserver.stop()},Object.defineProperty(r.prototype,"application",{get:function(){return this.module.application},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"identifier",{get:function(){return this.module.identifier},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"schema",{get:function(){return this.application.schema},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"dispatcher",{get:function(){return this.application.dispatcher},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"element",{get:function(){return this.scope.element},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"parentElement",{get:function(){return this.element.parentElement},enumerable:!1,configurable:!0}),r.prototype.handleError=function(e,t,n){n===void 0&&(n={});var i=this,s=i.identifier,o=i.controller,c=i.element;n=Object.assign({identifier:s,controller:o,element:c},n),this.application.handleError(e,"Error "+t,n)},r}();function O(r,e){var t=ze(r);return Array.from(t.reduce(function(n,i){return dr(i,e).forEach(function(s){return n.add(s)}),n},new Set))}function Ke(r,e){var t=ze(r);return t.reduce(function(n,i){return n.push.apply(n,fr(i,e)),n},[])}function ze(r){for(var e=[];r;)e.push(r),r=Object.getPrototypeOf(r);return e.reverse()}function dr(r,e){var t=r[e];return Array.isArray(t)?t:[]}function fr(r,e){var t=r[e];return t?Object.keys(t).map(function(n){return[n,t[n]]}):[]}var pr=function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,i){n.__proto__=i}||function(n,i){for(var s in i)i.hasOwnProperty(s)&&(n[s]=i[s])},r(e,t)};return function(e,t){r(e,t);function n(){this.constructor=e}e.prototype=t===null?Object.create(t):(n.prototype=t.prototype,new n)}}(),mr=function(){for(var r=0,e=0,t=arguments.length;e<t;e++)r+=arguments[e].length;for(var n=Array(r),i=0,e=0;e<t;e++)for(var s=arguments[e],o=0,c=s.length;o<c;o++,i++)n[i]=s[o];return n};function $e(r){return gr(r,vr(r))}function gr(r,e){var t=Er(r),n=br(r.prototype,e);return Object.defineProperties(t.prototype,n),t}function vr(r){var e=O(r,"blessings");return e.reduce(function(t,n){var i=n(r);for(var s in i){var o=t[s]||{};t[s]=Object.assign(o,i[s])}return t},{})}function br(r,e){return wr(e).reduce(function(t,n){var i,s=yr(r,e,n);return s&&Object.assign(t,(i={},i[n]=s,i)),t},{})}function yr(r,e,t){var n=Object.getOwnPropertyDescriptor(r,t),i=n&&"value"in n;if(!i){var s=Object.getOwnPropertyDescriptor(e,t).value;return n&&(s.get=n.get||s.get,s.set=n.set||s.set),s}}var wr=function(){return typeof Object.getOwnPropertySymbols=="function"?function(r){return mr(Object.getOwnPropertyNames(r),Object.getOwnPropertySymbols(r))}:Object.getOwnPropertyNames}(),Er=function(){function r(t){function n(){var i=this&&this instanceof n?this.constructor:void 0;return Reflect.construct(t,arguments,i)}return n.prototype=Object.create(t.prototype,{constructor:{value:n}}),Reflect.setPrototypeOf(n,t),n}function e(){var t=function(){this.a.call(this)},n=r(t);return n.prototype.a=function(){},new n}try{return e(),r}catch(t){return function(n){return function(i){pr(s,i);function s(){return i!==null&&i.apply(this,arguments)||this}return s}(n)}}}();function Je(r){return{identifier:r.identifier,controllerConstructor:$e(r.controllerConstructor)}}var Ge=function(){function r(e,t){this.application=e,this.definition=Je(t),this.contextsByScope=new WeakMap,this.connectedContexts=new Set}return Object.defineProperty(r.prototype,"identifier",{get:function(){return this.definition.identifier},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"controllerConstructor",{get:function(){return this.definition.controllerConstructor},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"contexts",{get:function(){return Array.from(this.connectedContexts)},enumerable:!1,configurable:!0}),r.prototype.connectContextForScope=function(e){var t=this.fetchContextForScope(e);this.connectedContexts.add(t),t.connect()},r.prototype.disconnectContextForScope=function(e){var t=this.contextsByScope.get(e);t&&(this.connectedContexts.delete(t),t.disconnect())},r.prototype.fetchContextForScope=function(e){var t=this.contextsByScope.get(e);return t||(t=new Q(this,e),this.contextsByScope.set(e,t)),t},r}();var Qe=function(){function r(e){this.scope=e}return r.prototype.has=function(e){return this.data.has(this.getDataKey(e))},r.prototype.get=function(e){return this.data.get(this.getDataKey(e))},r.prototype.getAttributeName=function(e){return this.data.getAttributeNameForKey(this.getDataKey(e))},r.prototype.getDataKey=function(e){return e+"-class"},Object.defineProperty(r.prototype,"data",{get:function(){return this.scope.data},enumerable:!1,configurable:!0}),r}();function Xe(r){return r.replace(/(?:[_-])([a-z0-9])/g,function(e,t){return t.toUpperCase()})}function R(r){return r.charAt(0).toUpperCase()+r.slice(1)}function D(r){return r.replace(/([A-Z])/g,function(e,t){return"-"+t.toLowerCase()})}var Ye=function(){function r(e){this.scope=e}return Object.defineProperty(r.prototype,"element",{get:function(){return this.scope.element},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"identifier",{get:function(){return this.scope.identifier},enumerable:!1,configurable:!0}),r.prototype.get=function(e){var t=this.getAttributeNameForKey(e);return this.element.getAttribute(t)},r.prototype.set=function(e,t){var n=this.getAttributeNameForKey(e);return this.element.setAttribute(n,t),this.get(e)},r.prototype.has=function(e){var t=this.getAttributeNameForKey(e);return this.element.hasAttribute(t)},r.prototype.delete=function(e){if(this.has(e)){var t=this.getAttributeNameForKey(e);return this.element.removeAttribute(t),!0}else return!1},r.prototype.getAttributeNameForKey=function(e){return"data-"+this.identifier+"-"+D(e)},r}();var Ze=function(){function r(e){this.warnedKeysByObject=new WeakMap,this.logger=e}return r.prototype.warn=function(e,t,n){var i=this.warnedKeysByObject.get(e);i||(i=new Set,this.warnedKeysByObject.set(e,i)),i.has(t)||(i.add(t),this.logger.warn(n,e))},r}();function x(r,e){return"["+r+'~="'+e+'"]'}var Sr=function(){for(var r=0,e=0,t=arguments.length;e<t;e++)r+=arguments[e].length;for(var n=Array(r),i=0,e=0;e<t;e++)for(var s=arguments[e],o=0,c=s.length;o<c;o++,i++)n[i]=s[o];return n},et=function(){function r(e){this.scope=e}return Object.defineProperty(r.prototype,"element",{get:function(){return this.scope.element},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"identifier",{get:function(){return this.scope.identifier},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"schema",{get:function(){return this.scope.schema},enumerable:!1,configurable:!0}),r.prototype.has=function(e){return this.find(e)!=null},r.prototype.find=function(){for(var e=this,t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];return t.reduce(function(i,s){return i||e.findTarget(s)||e.findLegacyTarget(s)},void 0)},r.prototype.findAll=function(){for(var e=this,t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];return t.reduce(function(i,s){return Sr(i,e.findAllTargets(s),e.findAllLegacyTargets(s))},[])},r.prototype.findTarget=function(e){var t=this.getSelectorForTargetName(e);return this.scope.findElement(t)},r.prototype.findAllTargets=function(e){var t=this.getSelectorForTargetName(e);return this.scope.findAllElements(t)},r.prototype.getSelectorForTargetName=function(e){var t="data-"+this.identifier+"-target";return x(t,e)},r.prototype.findLegacyTarget=function(e){var t=this.getLegacySelectorForTargetName(e);return this.deprecate(this.scope.findElement(t),e)},r.prototype.findAllLegacyTargets=function(e){var t=this,n=this.getLegacySelectorForTargetName(e);return this.scope.findAllElements(n).map(function(i){return t.deprecate(i,e)})},r.prototype.getLegacySelectorForTargetName=function(e){var t=this.identifier+"."+e;return x(this.schema.targetAttribute,t)},r.prototype.deprecate=function(e,t){if(e){var n=this.identifier,i=this.schema.targetAttribute;this.guide.warn(e,"target:"+t,"Please replace "+i+'="'+n+"."+t+'" with data-'+n+'-target="'+t+'". '+("The "+i+" attribute is deprecated and will be removed in a future version of Stimulus."))}return e},Object.defineProperty(r.prototype,"guide",{get:function(){return this.scope.guide},enumerable:!1,configurable:!0}),r}();var Ar=function(){for(var r=0,e=0,t=arguments.length;e<t;e++)r+=arguments[e].length;for(var n=Array(r),i=0,e=0;e<t;e++)for(var s=arguments[e],o=0,c=s.length;o<c;o++,i++)n[i]=s[o];return n},tt=function(){function r(e,t,n,i){var s=this;this.targets=new et(this),this.classes=new Qe(this),this.data=new Ye(this),this.containsElement=function(o){return o.closest(s.controllerSelector)===s.element},this.schema=e,this.element=t,this.identifier=n,this.guide=new Ze(i)}return r.prototype.findElement=function(e){return this.element.matches(e)?this.element:this.queryElements(e).find(this.containsElement)},r.prototype.findAllElements=function(e){return Ar(this.element.matches(e)?[this.element]:[],this.queryElements(e).filter(this.containsElement))},r.prototype.queryElements=function(e){return Array.from(this.element.querySelectorAll(e))},Object.defineProperty(r.prototype,"controllerSelector",{get:function(){return x(this.schema.controllerAttribute,this.identifier)},enumerable:!1,configurable:!0}),r}();var rt=function(){function r(e,t,n){this.element=e,this.schema=t,this.delegate=n,this.valueListObserver=new j(this.element,this.controllerAttribute,this),this.scopesByIdentifierByElement=new WeakMap,this.scopeReferenceCounts=new WeakMap}return r.prototype.start=function(){this.valueListObserver.start()},r.prototype.stop=function(){this.valueListObserver.stop()},Object.defineProperty(r.prototype,"controllerAttribute",{get:function(){return this.schema.controllerAttribute},enumerable:!1,configurable:!0}),r.prototype.parseValueForToken=function(e){var t=e.element,n=e.content,i=this.fetchScopesByIdentifierForElement(t),s=i.get(n);return s||(s=this.delegate.createScopeForElementAndIdentifier(t,n),i.set(n,s)),s},r.prototype.elementMatchedValue=function(e,t){var n=(this.scopeReferenceCounts.get(t)||0)+1;this.scopeReferenceCounts.set(t,n),n==1&&this.delegate.scopeConnected(t)},r.prototype.elementUnmatchedValue=function(e,t){var n=this.scopeReferenceCounts.get(t);n&&(this.scopeReferenceCounts.set(t,n-1),n==1&&this.delegate.scopeDisconnected(t))},r.prototype.fetchScopesByIdentifierForElement=function(e){var t=this.scopesByIdentifierByElement.get(e);return t||(t=new Map,this.scopesByIdentifierByElement.set(e,t)),t},r}();var nt=function(){function r(e){this.application=e,this.scopeObserver=new rt(this.element,this.schema,this),this.scopesByIdentifier=new C,this.modulesByIdentifier=new Map}return Object.defineProperty(r.prototype,"element",{get:function(){return this.application.element},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"schema",{get:function(){return this.application.schema},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"logger",{get:function(){return this.application.logger},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"controllerAttribute",{get:function(){return this.schema.controllerAttribute},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"modules",{get:function(){return Array.from(this.modulesByIdentifier.values())},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"contexts",{get:function(){return this.modules.reduce(function(e,t){return e.concat(t.contexts)},[])},enumerable:!1,configurable:!0}),r.prototype.start=function(){this.scopeObserver.start()},r.prototype.stop=function(){this.scopeObserver.stop()},r.prototype.loadDefinition=function(e){this.unloadIdentifier(e.identifier);var t=new Ge(this.application,e);this.connectModule(t)},r.prototype.unloadIdentifier=function(e){var t=this.modulesByIdentifier.get(e);t&&this.disconnectModule(t)},r.prototype.getContextForElementAndIdentifier=function(e,t){var n=this.modulesByIdentifier.get(t);if(n)return n.contexts.find(function(i){return i.element==e})},r.prototype.handleError=function(e,t,n){this.application.handleError(e,t,n)},r.prototype.createScopeForElementAndIdentifier=function(e,t){return new tt(this.schema,e,t,this.logger)},r.prototype.scopeConnected=function(e){this.scopesByIdentifier.add(e.identifier,e);var t=this.modulesByIdentifier.get(e.identifier);t&&t.connectContextForScope(e)},r.prototype.scopeDisconnected=function(e){this.scopesByIdentifier.delete(e.identifier,e);var t=this.modulesByIdentifier.get(e.identifier);t&&t.disconnectContextForScope(e)},r.prototype.connectModule=function(e){this.modulesByIdentifier.set(e.identifier,e);var t=this.scopesByIdentifier.getValuesForKey(e.identifier);t.forEach(function(n){return e.connectContextForScope(n)})},r.prototype.disconnectModule=function(e){this.modulesByIdentifier.delete(e.identifier);var t=this.scopesByIdentifier.getValuesForKey(e.identifier);t.forEach(function(n){return e.disconnectContextForScope(n)})},r}();var X={controllerAttribute:"data-controller",actionAttribute:"data-action",targetAttribute:"data-target"};var Pr=function(r,e,t,n){function i(s){return s instanceof t?s:new t(function(o){o(s)})}return new(t||(t=Promise))(function(s,o){function c(f){try{a(n.next(f))}catch(H){o(H)}}function l(f){try{a(n.throw(f))}catch(H){o(H)}}function a(f){f.done?s(f.value):i(f.value).then(c,l)}a((n=n.apply(r,e||[])).next())})},Lr=function(r,e){var t={label:0,sent:function(){if(s[0]&1)throw s[1];return s[1]},trys:[],ops:[]},n,i,s,o;return o={next:c(0),throw:c(1),return:c(2)},typeof Symbol=="function"&&(o[Symbol.iterator]=function(){return this}),o;function c(a){return function(f){return l([a,f])}}function l(a){if(n)throw new TypeError("Generator is already executing.");for(;t;)try{if(n=1,i&&(s=a[0]&2?i.return:a[0]?i.throw||((s=i.return)&&s.call(i),0):i.next)&&!(s=s.call(i,a[1])).done)return s;switch(i=0,s&&(a=[a[0]&2,s.value]),a[0]){case 0:case 1:s=a;break;case 4:return t.label++,{value:a[1],done:!1};case 5:t.label++,i=a[1],a=[0];continue;case 7:a=t.ops.pop(),t.trys.pop();continue;default:if(s=t.trys,!(s=s.length>0&&s[s.length-1])&&(a[0]===6||a[0]===2)){t=0;continue}if(a[0]===3&&(!s||a[1]>s[0]&&a[1]<s[3])){t.label=a[1];break}if(a[0]===6&&t.label<s[1]){t.label=s[1],s=a;break}if(s&&t.label<s[2]){t.label=s[2],t.ops.push(a);break}s[2]&&t.ops.pop(),t.trys.pop();continue}a=e.call(r,t)}catch(f){a=[6,f],i=0}finally{n=s=0}if(a[0]&5)throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}},it=function(){for(var r=0,e=0,t=arguments.length;e<t;e++)r+=arguments[e].length;for(var n=Array(r),i=0,e=0;e<t;e++)for(var s=arguments[e],o=0,c=s.length;o<c;o++,i++)n[i]=s[o];return n},Y=function(){function r(e,t){e===void 0&&(e=document.documentElement),t===void 0&&(t=X),this.logger=console,this.element=e,this.schema=t,this.dispatcher=new xe(this),this.router=new nt(this)}return r.start=function(e,t){var n=new r(e,t);return n.start(),n},r.prototype.start=function(){return Pr(this,void 0,void 0,function(){return Lr(this,function(e){switch(e.label){case 0:return[4,Tr()];case 1:return e.sent(),this.dispatcher.start(),this.router.start(),[2]}})})},r.prototype.stop=function(){this.dispatcher.stop(),this.router.stop()},r.prototype.register=function(e,t){this.load({identifier:e,controllerConstructor:t})},r.prototype.load=function(e){for(var t=this,n=[],i=1;i<arguments.length;i++)n[i-1]=arguments[i];var s=Array.isArray(e)?e:it([e],n);s.forEach(function(o){return t.router.loadDefinition(o)})},r.prototype.unload=function(e){for(var t=this,n=[],i=1;i<arguments.length;i++)n[i-1]=arguments[i];var s=Array.isArray(e)?e:it([e],n);s.forEach(function(o){return t.router.unloadIdentifier(o)})},Object.defineProperty(r.prototype,"controllers",{get:function(){return this.router.contexts.map(function(e){return e.controller})},enumerable:!1,configurable:!0}),r.prototype.getControllerForElementAndIdentifier=function(e,t){var n=this.router.getContextForElementAndIdentifier(e,t);return n?n.controller:null},r.prototype.handleError=function(e,t,n){this.logger.error(`%s + `,t.outerHTML)}})();window.Turbo=vn;si();var ci=function(){function t(e,i,r){this.eventTarget=e,this.eventName=i,this.eventOptions=r,this.unorderedBindings=new Set}return t.prototype.connect=function(){this.eventTarget.addEventListener(this.eventName,this,this.eventOptions)},t.prototype.disconnect=function(){this.eventTarget.removeEventListener(this.eventName,this,this.eventOptions)},t.prototype.bindingConnected=function(e){this.unorderedBindings.add(e)},t.prototype.bindingDisconnected=function(e){this.unorderedBindings.delete(e)},t.prototype.handleEvent=function(e){for(var i=yn(e),r=0,n=this.bindings;r<n.length;r++){var s=n[r];if(i.immediatePropagationStopped)break;s.handleEvent(i)}},Object.defineProperty(t.prototype,"bindings",{get:function(){return Array.from(this.unorderedBindings).sort(function(e,i){var r=e.index,n=i.index;return r<n?-1:r>n?1:0})},enumerable:!1,configurable:!0}),t}();function yn(t){if("immediatePropagationStopped"in t)return t;var e=t.stopImmediatePropagation;return Object.assign(t,{immediatePropagationStopped:!1,stopImmediatePropagation:function(){this.immediatePropagationStopped=!0,e.call(this)}})}var ui=function(){function t(e){this.application=e,this.eventListenerMaps=new Map,this.started=!1}return t.prototype.start=function(){this.started||(this.started=!0,this.eventListeners.forEach(function(e){return e.connect()}))},t.prototype.stop=function(){this.started&&(this.started=!1,this.eventListeners.forEach(function(e){return e.disconnect()}))},Object.defineProperty(t.prototype,"eventListeners",{get:function(){return Array.from(this.eventListenerMaps.values()).reduce(function(e,i){return e.concat(Array.from(i.values()))},[])},enumerable:!1,configurable:!0}),t.prototype.bindingConnected=function(e){this.fetchEventListenerForBinding(e).bindingConnected(e)},t.prototype.bindingDisconnected=function(e){this.fetchEventListenerForBinding(e).bindingDisconnected(e)},t.prototype.handleError=function(e,i,r){r===void 0&&(r={}),this.application.handleError(e,"Error "+i,r)},t.prototype.fetchEventListenerForBinding=function(e){var i=e.eventTarget,r=e.eventName,n=e.eventOptions;return this.fetchEventListener(i,r,n)},t.prototype.fetchEventListener=function(e,i,r){var n=this.fetchEventListenerMapForEventTarget(e),s=this.cacheKey(i,r),o=n.get(s);return o||(o=this.createEventListener(e,i,r),n.set(s,o)),o},t.prototype.createEventListener=function(e,i,r){var n=new ci(e,i,r);return this.started&&n.connect(),n},t.prototype.fetchEventListenerMapForEventTarget=function(e){var i=this.eventListenerMaps.get(e);return i||(i=new Map,this.eventListenerMaps.set(e,i)),i},t.prototype.cacheKey=function(e,i){var r=[e];return Object.keys(i).sort().forEach(function(n){r.push(""+(i[n]?"":"!")+n)}),r.join(":")},t}();var wn=/^((.+?)(@(window|document))?->)?(.+?)(#([^:]+?))(:(.+))?$/;function di(t){var e=t.trim(),i=e.match(wn)||[];return{eventTarget:En(i[4]),eventName:i[2],eventOptions:i[9]?Sn(i[9]):{},identifier:i[5],methodName:i[7]}}function En(t){if(t=="window")return window;if(t=="document")return document}function Sn(t){return t.split(":").reduce(function(e,i){var r;return Object.assign(e,(r={},r[i.replace(/^!/,"")]=!/^!/.test(i),r))},{})}function fi(t){if(t==window)return"window";if(t==document)return"document"}var pi=function(){function t(e,i,r){this.element=e,this.index=i,this.eventTarget=r.eventTarget||e,this.eventName=r.eventName||An(e)||ct("missing event name"),this.eventOptions=r.eventOptions||{},this.identifier=r.identifier||ct("missing identifier"),this.methodName=r.methodName||ct("missing method name")}return t.forToken=function(e){return new this(e.element,e.index,di(e.content))},t.prototype.toString=function(){var e=this.eventTargetName?"@"+this.eventTargetName:"";return""+this.eventName+e+"->"+this.identifier+"#"+this.methodName},Object.defineProperty(t.prototype,"eventTargetName",{get:function(){return fi(this.eventTarget)},enumerable:!1,configurable:!0}),t}();var mi={a:function(t){return"click"},button:function(t){return"click"},form:function(t){return"submit"},input:function(t){return t.getAttribute("type")=="submit"?"click":"input"},select:function(t){return"change"},textarea:function(t){return"input"}};function An(t){var e=t.tagName.toLowerCase();if(e in mi)return mi[e](t)}function ct(t){throw new Error(t)}var gi=function(){function t(e,i){this.context=e,this.action=i}return Object.defineProperty(t.prototype,"index",{get:function(){return this.action.index},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"eventTarget",{get:function(){return this.action.eventTarget},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"eventOptions",{get:function(){return this.action.eventOptions},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"identifier",{get:function(){return this.context.identifier},enumerable:!1,configurable:!0}),t.prototype.handleEvent=function(e){this.willBeInvokedByEvent(e)&&this.invokeWithEvent(e)},Object.defineProperty(t.prototype,"eventName",{get:function(){return this.action.eventName},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"method",{get:function(){var e=this.controller[this.methodName];if(typeof e=="function")return e;throw new Error('Action "'+this.action+'" references undefined method "'+this.methodName+'"')},enumerable:!1,configurable:!0}),t.prototype.invokeWithEvent=function(e){try{this.method.call(this.controller,e)}catch(l){var i=this,r=i.identifier,n=i.controller,s=i.element,o=i.index,a={identifier:r,controller:n,element:s,index:o,event:e};this.context.handleError(l,'invoking action "'+this.action+'"',a)}},t.prototype.willBeInvokedByEvent=function(e){var i=e.target;return this.element===i?!0:i instanceof Element&&this.element.contains(i)?this.scope.containsElement(i):this.scope.containsElement(this.action.element)},Object.defineProperty(t.prototype,"controller",{get:function(){return this.context.controller},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"methodName",{get:function(){return this.action.methodName},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"element",{get:function(){return this.scope.element},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"scope",{get:function(){return this.context.scope},enumerable:!1,configurable:!0}),t}();var vi=function(){function t(e,i){var r=this;this.element=e,this.started=!1,this.delegate=i,this.elements=new Set,this.mutationObserver=new MutationObserver(function(n){return r.processMutations(n)})}return t.prototype.start=function(){this.started||(this.started=!0,this.mutationObserver.observe(this.element,{attributes:!0,childList:!0,subtree:!0}),this.refresh())},t.prototype.stop=function(){this.started&&(this.mutationObserver.takeRecords(),this.mutationObserver.disconnect(),this.started=!1)},t.prototype.refresh=function(){if(this.started){for(var e=new Set(this.matchElementsInTree()),i=0,r=Array.from(this.elements);i<r.length;i++){var n=r[i];e.has(n)||this.removeElement(n)}for(var s=0,o=Array.from(e);s<o.length;s++){var n=o[s];this.addElement(n)}}},t.prototype.processMutations=function(e){if(this.started)for(var i=0,r=e;i<r.length;i++){var n=r[i];this.processMutation(n)}},t.prototype.processMutation=function(e){e.type=="attributes"?this.processAttributeChange(e.target,e.attributeName):e.type=="childList"&&(this.processRemovedNodes(e.removedNodes),this.processAddedNodes(e.addedNodes))},t.prototype.processAttributeChange=function(e,i){var r=e;this.elements.has(r)?this.delegate.elementAttributeChanged&&this.matchElement(r)?this.delegate.elementAttributeChanged(r,i):this.removeElement(r):this.matchElement(r)&&this.addElement(r)},t.prototype.processRemovedNodes=function(e){for(var i=0,r=Array.from(e);i<r.length;i++){var n=r[i],s=this.elementFromNode(n);s&&this.processTree(s,this.removeElement)}},t.prototype.processAddedNodes=function(e){for(var i=0,r=Array.from(e);i<r.length;i++){var n=r[i],s=this.elementFromNode(n);s&&this.elementIsActive(s)&&this.processTree(s,this.addElement)}},t.prototype.matchElement=function(e){return this.delegate.matchElement(e)},t.prototype.matchElementsInTree=function(e){return e===void 0&&(e=this.element),this.delegate.matchElementsInTree(e)},t.prototype.processTree=function(e,i){for(var r=0,n=this.matchElementsInTree(e);r<n.length;r++){var s=n[r];i.call(this,s)}},t.prototype.elementFromNode=function(e){if(e.nodeType==Node.ELEMENT_NODE)return e},t.prototype.elementIsActive=function(e){return e.isConnected!=this.element.isConnected?!1:this.element.contains(e)},t.prototype.addElement=function(e){this.elements.has(e)||this.elementIsActive(e)&&(this.elements.add(e),this.delegate.elementMatched&&this.delegate.elementMatched(e))},t.prototype.removeElement=function(e){this.elements.has(e)&&(this.elements.delete(e),this.delegate.elementUnmatched&&this.delegate.elementUnmatched(e))},t}();var bi=function(){function t(e,i,r){this.attributeName=i,this.delegate=r,this.elementObserver=new vi(e,this)}return Object.defineProperty(t.prototype,"element",{get:function(){return this.elementObserver.element},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"selector",{get:function(){return"["+this.attributeName+"]"},enumerable:!1,configurable:!0}),t.prototype.start=function(){this.elementObserver.start()},t.prototype.stop=function(){this.elementObserver.stop()},t.prototype.refresh=function(){this.elementObserver.refresh()},Object.defineProperty(t.prototype,"started",{get:function(){return this.elementObserver.started},enumerable:!1,configurable:!0}),t.prototype.matchElement=function(e){return e.hasAttribute(this.attributeName)},t.prototype.matchElementsInTree=function(e){var i=this.matchElement(e)?[e]:[],r=Array.from(e.querySelectorAll(this.selector));return i.concat(r)},t.prototype.elementMatched=function(e){this.delegate.elementMatchedAttribute&&this.delegate.elementMatchedAttribute(e,this.attributeName)},t.prototype.elementUnmatched=function(e){this.delegate.elementUnmatchedAttribute&&this.delegate.elementUnmatchedAttribute(e,this.attributeName)},t.prototype.elementAttributeChanged=function(e,i){this.delegate.elementAttributeValueChanged&&this.attributeName==i&&this.delegate.elementAttributeValueChanged(e,i)},t}();var yi=function(){function t(e,i){var r=this;this.element=e,this.delegate=i,this.started=!1,this.stringMap=new Map,this.mutationObserver=new MutationObserver(function(n){return r.processMutations(n)})}return t.prototype.start=function(){this.started||(this.started=!0,this.mutationObserver.observe(this.element,{attributes:!0}),this.refresh())},t.prototype.stop=function(){this.started&&(this.mutationObserver.takeRecords(),this.mutationObserver.disconnect(),this.started=!1)},t.prototype.refresh=function(){if(this.started)for(var e=0,i=this.knownAttributeNames;e<i.length;e++){var r=i[e];this.refreshAttribute(r)}},t.prototype.processMutations=function(e){if(this.started)for(var i=0,r=e;i<r.length;i++){var n=r[i];this.processMutation(n)}},t.prototype.processMutation=function(e){var i=e.attributeName;i&&this.refreshAttribute(i)},t.prototype.refreshAttribute=function(e){var i=this.delegate.getStringMapKeyForAttribute(e);if(i!=null){this.stringMap.has(e)||this.stringMapKeyAdded(i,e);var r=this.element.getAttribute(e);this.stringMap.get(e)!=r&&this.stringMapValueChanged(r,i),r==null?(this.stringMap.delete(e),this.stringMapKeyRemoved(i,e)):this.stringMap.set(e,r)}},t.prototype.stringMapKeyAdded=function(e,i){this.delegate.stringMapKeyAdded&&this.delegate.stringMapKeyAdded(e,i)},t.prototype.stringMapValueChanged=function(e,i){this.delegate.stringMapValueChanged&&this.delegate.stringMapValueChanged(e,i)},t.prototype.stringMapKeyRemoved=function(e,i){this.delegate.stringMapKeyRemoved&&this.delegate.stringMapKeyRemoved(e,i)},Object.defineProperty(t.prototype,"knownAttributeNames",{get:function(){return Array.from(new Set(this.currentAttributeNames.concat(this.recordedAttributeNames)))},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"currentAttributeNames",{get:function(){return Array.from(this.element.attributes).map(function(e){return e.name})},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"recordedAttributeNames",{get:function(){return Array.from(this.stringMap.keys())},enumerable:!1,configurable:!0}),t}();function Ne(t,e,i){wi(t,e).add(i)}function Be(t,e,i){wi(t,e).delete(i),Cn(t,e)}function wi(t,e){var i=t.get(e);return i||(i=new Set,t.set(e,i)),i}function Cn(t,e){var i=t.get(e);i!=null&&i.size==0&&t.delete(e)}var he=function(){function t(){this.valuesByKey=new Map}return Object.defineProperty(t.prototype,"values",{get:function(){var e=Array.from(this.valuesByKey.values());return e.reduce(function(i,r){return i.concat(Array.from(r))},[])},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"size",{get:function(){var e=Array.from(this.valuesByKey.values());return e.reduce(function(i,r){return i+r.size},0)},enumerable:!1,configurable:!0}),t.prototype.add=function(e,i){Ne(this.valuesByKey,e,i)},t.prototype.delete=function(e,i){Be(this.valuesByKey,e,i)},t.prototype.has=function(e,i){var r=this.valuesByKey.get(e);return r!=null&&r.has(i)},t.prototype.hasKey=function(e){return this.valuesByKey.has(e)},t.prototype.hasValue=function(e){var i=Array.from(this.valuesByKey.values());return i.some(function(r){return r.has(e)})},t.prototype.getValuesForKey=function(e){var i=this.valuesByKey.get(e);return i?Array.from(i):[]},t.prototype.getKeysForValue=function(e){return Array.from(this.valuesByKey).filter(function(i){var r=i[0],n=i[1];return n.has(e)}).map(function(i){var r=i[0],n=i[1];return r})},t}();var Tn=function(){var t=function(e,i){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,n){r.__proto__=n}||function(r,n){for(var s in n)n.hasOwnProperty(s)&&(r[s]=n[s])},t(e,i)};return function(e,i){t(e,i);function r(){this.constructor=e}e.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),uo=function(t){Tn(e,t);function e(){var i=t.call(this)||this;return i.keysByValue=new Map,i}return Object.defineProperty(e.prototype,"values",{get:function(){return Array.from(this.keysByValue.keys())},enumerable:!1,configurable:!0}),e.prototype.add=function(i,r){t.prototype.add.call(this,i,r),Ne(this.keysByValue,r,i)},e.prototype.delete=function(i,r){t.prototype.delete.call(this,i,r),Be(this.keysByValue,r,i)},e.prototype.hasValue=function(i){return this.keysByValue.has(i)},e.prototype.getKeysForValue=function(i){var r=this.keysByValue.get(i);return r?Array.from(r):[]},e}(he);var Ei=function(){function t(e,i,r){this.attributeObserver=new bi(e,i,this),this.delegate=r,this.tokensByElement=new he}return Object.defineProperty(t.prototype,"started",{get:function(){return this.attributeObserver.started},enumerable:!1,configurable:!0}),t.prototype.start=function(){this.attributeObserver.start()},t.prototype.stop=function(){this.attributeObserver.stop()},t.prototype.refresh=function(){this.attributeObserver.refresh()},Object.defineProperty(t.prototype,"element",{get:function(){return this.attributeObserver.element},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"attributeName",{get:function(){return this.attributeObserver.attributeName},enumerable:!1,configurable:!0}),t.prototype.elementMatchedAttribute=function(e){this.tokensMatched(this.readTokensForElement(e))},t.prototype.elementAttributeValueChanged=function(e){var i=this.refreshTokensForElement(e),r=i[0],n=i[1];this.tokensUnmatched(r),this.tokensMatched(n)},t.prototype.elementUnmatchedAttribute=function(e){this.tokensUnmatched(this.tokensByElement.getValuesForKey(e))},t.prototype.tokensMatched=function(e){var i=this;e.forEach(function(r){return i.tokenMatched(r)})},t.prototype.tokensUnmatched=function(e){var i=this;e.forEach(function(r){return i.tokenUnmatched(r)})},t.prototype.tokenMatched=function(e){this.delegate.tokenMatched(e),this.tokensByElement.add(e.element,e)},t.prototype.tokenUnmatched=function(e){this.delegate.tokenUnmatched(e),this.tokensByElement.delete(e.element,e)},t.prototype.refreshTokensForElement=function(e){var i=this.tokensByElement.getValuesForKey(e),r=this.readTokensForElement(e),n=Ln(i,r).findIndex(function(s){var o=s[0],a=s[1];return!kn(o,a)});return n==-1?[[],[]]:[i.slice(n),r.slice(n)]},t.prototype.readTokensForElement=function(e){var i=this.attributeName,r=e.getAttribute(i)||"";return Pn(r,e,i)},t}();function Pn(t,e,i){return t.trim().split(/\s+/).filter(function(r){return r.length}).map(function(r,n){return{element:e,attributeName:i,content:r,index:n}})}function Ln(t,e){var i=Math.max(t.length,e.length);return Array.from({length:i},function(r,n){return[t[n],e[n]]})}function kn(t,e){return t&&e&&t.index==e.index&&t.content==e.content}var He=function(){function t(e,i,r){this.tokenListObserver=new Ei(e,i,this),this.delegate=r,this.parseResultsByToken=new WeakMap,this.valuesByTokenByElement=new WeakMap}return Object.defineProperty(t.prototype,"started",{get:function(){return this.tokenListObserver.started},enumerable:!1,configurable:!0}),t.prototype.start=function(){this.tokenListObserver.start()},t.prototype.stop=function(){this.tokenListObserver.stop()},t.prototype.refresh=function(){this.tokenListObserver.refresh()},Object.defineProperty(t.prototype,"element",{get:function(){return this.tokenListObserver.element},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"attributeName",{get:function(){return this.tokenListObserver.attributeName},enumerable:!1,configurable:!0}),t.prototype.tokenMatched=function(e){var i=e.element,r=this.fetchParseResultForToken(e).value;r&&(this.fetchValuesByTokenForElement(i).set(e,r),this.delegate.elementMatchedValue(i,r))},t.prototype.tokenUnmatched=function(e){var i=e.element,r=this.fetchParseResultForToken(e).value;r&&(this.fetchValuesByTokenForElement(i).delete(e),this.delegate.elementUnmatchedValue(i,r))},t.prototype.fetchParseResultForToken=function(e){var i=this.parseResultsByToken.get(e);return i||(i=this.parseToken(e),this.parseResultsByToken.set(e,i)),i},t.prototype.fetchValuesByTokenForElement=function(e){var i=this.valuesByTokenByElement.get(e);return i||(i=new Map,this.valuesByTokenByElement.set(e,i)),i},t.prototype.parseToken=function(e){try{var i=this.delegate.parseValueForToken(e);return{value:i}}catch(r){return{error:r}}},t}();var Si=function(){function t(e,i){this.context=e,this.delegate=i,this.bindingsByAction=new Map}return t.prototype.start=function(){this.valueListObserver||(this.valueListObserver=new He(this.element,this.actionAttribute,this),this.valueListObserver.start())},t.prototype.stop=function(){this.valueListObserver&&(this.valueListObserver.stop(),delete this.valueListObserver,this.disconnectAllActions())},Object.defineProperty(t.prototype,"element",{get:function(){return this.context.element},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"identifier",{get:function(){return this.context.identifier},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"actionAttribute",{get:function(){return this.schema.actionAttribute},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"schema",{get:function(){return this.context.schema},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"bindings",{get:function(){return Array.from(this.bindingsByAction.values())},enumerable:!1,configurable:!0}),t.prototype.connectAction=function(e){var i=new gi(this.context,e);this.bindingsByAction.set(e,i),this.delegate.bindingConnected(i)},t.prototype.disconnectAction=function(e){var i=this.bindingsByAction.get(e);i&&(this.bindingsByAction.delete(e),this.delegate.bindingDisconnected(i))},t.prototype.disconnectAllActions=function(){var e=this;this.bindings.forEach(function(i){return e.delegate.bindingDisconnected(i)}),this.bindingsByAction.clear()},t.prototype.parseValueForToken=function(e){var i=pi.forToken(e);if(i.identifier==this.identifier)return i},t.prototype.elementMatchedValue=function(e,i){this.connectAction(i)},t.prototype.elementUnmatchedValue=function(e,i){this.disconnectAction(i)},t}();var Ai=function(){function t(e,i){this.context=e,this.receiver=i,this.stringMapObserver=new yi(this.element,this),this.valueDescriptorMap=this.controller.valueDescriptorMap,this.invokeChangedCallbacksForDefaultValues()}return t.prototype.start=function(){this.stringMapObserver.start()},t.prototype.stop=function(){this.stringMapObserver.stop()},Object.defineProperty(t.prototype,"element",{get:function(){return this.context.element},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"controller",{get:function(){return this.context.controller},enumerable:!1,configurable:!0}),t.prototype.getStringMapKeyForAttribute=function(e){if(e in this.valueDescriptorMap)return this.valueDescriptorMap[e].name},t.prototype.stringMapValueChanged=function(e,i){this.invokeChangedCallbackForValue(i)},t.prototype.invokeChangedCallbacksForDefaultValues=function(){for(var e=0,i=this.valueDescriptors;e<i.length;e++){var r=i[e],n=r.key,s=r.name,o=r.defaultValue;o!=null&&!this.controller.data.has(n)&&this.invokeChangedCallbackForValue(s)}},t.prototype.invokeChangedCallbackForValue=function(e){var i=e+"Changed",r=this.receiver[i];if(typeof r=="function"){var n=this.receiver[e];r.call(this.receiver,n)}},Object.defineProperty(t.prototype,"valueDescriptors",{get:function(){var e=this.valueDescriptorMap;return Object.keys(e).map(function(i){return e[i]})},enumerable:!1,configurable:!0}),t}();var ut=function(){function t(e,i){this.module=e,this.scope=i,this.controller=new e.controllerConstructor(this),this.bindingObserver=new Si(this,this.dispatcher),this.valueObserver=new Ai(this,this.controller);try{this.controller.initialize()}catch(r){this.handleError(r,"initializing controller")}}return t.prototype.connect=function(){this.bindingObserver.start(),this.valueObserver.start();try{this.controller.connect()}catch(e){this.handleError(e,"connecting controller")}},t.prototype.disconnect=function(){try{this.controller.disconnect()}catch(e){this.handleError(e,"disconnecting controller")}this.valueObserver.stop(),this.bindingObserver.stop()},Object.defineProperty(t.prototype,"application",{get:function(){return this.module.application},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"identifier",{get:function(){return this.module.identifier},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"schema",{get:function(){return this.application.schema},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"dispatcher",{get:function(){return this.application.dispatcher},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"element",{get:function(){return this.scope.element},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"parentElement",{get:function(){return this.element.parentElement},enumerable:!1,configurable:!0}),t.prototype.handleError=function(e,i,r){r===void 0&&(r={});var n=this,s=n.identifier,o=n.controller,a=n.element;r=Object.assign({identifier:s,controller:o,element:a},r),this.application.handleError(e,"Error "+i,r)},t}();function ce(t,e){var i=Ti(t);return Array.from(i.reduce(function(r,n){return Rn(n,e).forEach(function(s){return r.add(s)}),r},new Set))}function Ci(t,e){var i=Ti(t);return i.reduce(function(r,n){return r.push.apply(r,On(n,e)),r},[])}function Ti(t){for(var e=[];t;)e.push(t),t=Object.getPrototypeOf(t);return e.reverse()}function Rn(t,e){var i=t[e];return Array.isArray(i)?i:[]}function On(t,e){var i=t[e];return i?Object.keys(i).map(function(r){return[r,i[r]]}):[]}var In=function(){var t=function(e,i){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,n){r.__proto__=n}||function(r,n){for(var s in n)n.hasOwnProperty(s)&&(r[s]=n[s])},t(e,i)};return function(e,i){t(e,i);function r(){this.constructor=e}e.prototype=i===null?Object.create(i):(r.prototype=i.prototype,new r)}}(),xn=function(){for(var t=0,e=0,i=arguments.length;e<i;e++)t+=arguments[e].length;for(var r=Array(t),n=0,e=0;e<i;e++)for(var s=arguments[e],o=0,a=s.length;o<a;o++,n++)r[n]=s[o];return r};function Pi(t){return _n(t,Mn(t))}function _n(t,e){var i=Bn(t),r=Dn(t.prototype,e);return Object.defineProperties(i.prototype,r),i}function Mn(t){var e=ce(t,"blessings");return e.reduce(function(i,r){var n=r(t);for(var s in n){var o=i[s]||{};i[s]=Object.assign(o,n[s])}return i},{})}function Dn(t,e){return Nn(e).reduce(function(i,r){var n,s=Fn(t,e,r);return s&&Object.assign(i,(n={},n[r]=s,n)),i},{})}function Fn(t,e,i){var r=Object.getOwnPropertyDescriptor(t,i),n=r&&"value"in r;if(!n){var s=Object.getOwnPropertyDescriptor(e,i).value;return r&&(s.get=r.get||s.get,s.set=r.set||s.set),s}}var Nn=function(){return typeof Object.getOwnPropertySymbols=="function"?function(t){return xn(Object.getOwnPropertyNames(t),Object.getOwnPropertySymbols(t))}:Object.getOwnPropertyNames}(),Bn=function(){function t(i){function r(){var n=this&&this instanceof r?this.constructor:void 0;return Reflect.construct(i,arguments,n)}return r.prototype=Object.create(i.prototype,{constructor:{value:r}}),Reflect.setPrototypeOf(r,i),r}function e(){var i=function(){this.a.call(this)},r=t(i);return r.prototype.a=function(){},new r}try{return e(),t}catch(i){return function(r){return function(n){In(s,n);function s(){return n!==null&&n.apply(this,arguments)||this}return s}(r)}}}();function Li(t){return{identifier:t.identifier,controllerConstructor:Pi(t.controllerConstructor)}}var ki=function(){function t(e,i){this.application=e,this.definition=Li(i),this.contextsByScope=new WeakMap,this.connectedContexts=new Set}return Object.defineProperty(t.prototype,"identifier",{get:function(){return this.definition.identifier},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"controllerConstructor",{get:function(){return this.definition.controllerConstructor},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"contexts",{get:function(){return Array.from(this.connectedContexts)},enumerable:!1,configurable:!0}),t.prototype.connectContextForScope=function(e){var i=this.fetchContextForScope(e);this.connectedContexts.add(i),i.connect()},t.prototype.disconnectContextForScope=function(e){var i=this.contextsByScope.get(e);i&&(this.connectedContexts.delete(i),i.disconnect())},t.prototype.fetchContextForScope=function(e){var i=this.contextsByScope.get(e);return i||(i=new ut(this,e),this.contextsByScope.set(e,i)),i},t}();var Ri=function(){function t(e){this.scope=e}return t.prototype.has=function(e){return this.data.has(this.getDataKey(e))},t.prototype.get=function(e){return this.data.get(this.getDataKey(e))},t.prototype.getAttributeName=function(e){return this.data.getAttributeNameForKey(this.getDataKey(e))},t.prototype.getDataKey=function(e){return e+"-class"},Object.defineProperty(t.prototype,"data",{get:function(){return this.scope.data},enumerable:!1,configurable:!0}),t}();function Oi(t){return t.replace(/(?:[_-])([a-z0-9])/g,function(e,i){return i.toUpperCase()})}function ue(t){return t.charAt(0).toUpperCase()+t.slice(1)}function je(t){return t.replace(/([A-Z])/g,function(e,i){return"-"+i.toLowerCase()})}var Ii=function(){function t(e){this.scope=e}return Object.defineProperty(t.prototype,"element",{get:function(){return this.scope.element},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"identifier",{get:function(){return this.scope.identifier},enumerable:!1,configurable:!0}),t.prototype.get=function(e){var i=this.getAttributeNameForKey(e);return this.element.getAttribute(i)},t.prototype.set=function(e,i){var r=this.getAttributeNameForKey(e);return this.element.setAttribute(r,i),this.get(e)},t.prototype.has=function(e){var i=this.getAttributeNameForKey(e);return this.element.hasAttribute(i)},t.prototype.delete=function(e){if(this.has(e)){var i=this.getAttributeNameForKey(e);return this.element.removeAttribute(i),!0}else return!1},t.prototype.getAttributeNameForKey=function(e){return"data-"+this.identifier+"-"+je(e)},t}();var xi=function(){function t(e){this.warnedKeysByObject=new WeakMap,this.logger=e}return t.prototype.warn=function(e,i,r){var n=this.warnedKeysByObject.get(e);n||(n=new Set,this.warnedKeysByObject.set(e,n)),n.has(i)||(n.add(i),this.logger.warn(r,e))},t}();function ve(t,e){return"["+t+'~="'+e+'"]'}var Hn=function(){for(var t=0,e=0,i=arguments.length;e<i;e++)t+=arguments[e].length;for(var r=Array(t),n=0,e=0;e<i;e++)for(var s=arguments[e],o=0,a=s.length;o<a;o++,n++)r[n]=s[o];return r},_i=function(){function t(e){this.scope=e}return Object.defineProperty(t.prototype,"element",{get:function(){return this.scope.element},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"identifier",{get:function(){return this.scope.identifier},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"schema",{get:function(){return this.scope.schema},enumerable:!1,configurable:!0}),t.prototype.has=function(e){return this.find(e)!=null},t.prototype.find=function(){for(var e=this,i=[],r=0;r<arguments.length;r++)i[r]=arguments[r];return i.reduce(function(n,s){return n||e.findTarget(s)||e.findLegacyTarget(s)},void 0)},t.prototype.findAll=function(){for(var e=this,i=[],r=0;r<arguments.length;r++)i[r]=arguments[r];return i.reduce(function(n,s){return Hn(n,e.findAllTargets(s),e.findAllLegacyTargets(s))},[])},t.prototype.findTarget=function(e){var i=this.getSelectorForTargetName(e);return this.scope.findElement(i)},t.prototype.findAllTargets=function(e){var i=this.getSelectorForTargetName(e);return this.scope.findAllElements(i)},t.prototype.getSelectorForTargetName=function(e){var i="data-"+this.identifier+"-target";return ve(i,e)},t.prototype.findLegacyTarget=function(e){var i=this.getLegacySelectorForTargetName(e);return this.deprecate(this.scope.findElement(i),e)},t.prototype.findAllLegacyTargets=function(e){var i=this,r=this.getLegacySelectorForTargetName(e);return this.scope.findAllElements(r).map(function(n){return i.deprecate(n,e)})},t.prototype.getLegacySelectorForTargetName=function(e){var i=this.identifier+"."+e;return ve(this.schema.targetAttribute,i)},t.prototype.deprecate=function(e,i){if(e){var r=this.identifier,n=this.schema.targetAttribute;this.guide.warn(e,"target:"+i,"Please replace "+n+'="'+r+"."+i+'" with data-'+r+'-target="'+i+'". '+("The "+n+" attribute is deprecated and will be removed in a future version of Stimulus."))}return e},Object.defineProperty(t.prototype,"guide",{get:function(){return this.scope.guide},enumerable:!1,configurable:!0}),t}();var jn=function(){for(var t=0,e=0,i=arguments.length;e<i;e++)t+=arguments[e].length;for(var r=Array(t),n=0,e=0;e<i;e++)for(var s=arguments[e],o=0,a=s.length;o<a;o++,n++)r[n]=s[o];return r},Mi=function(){function t(e,i,r,n){var s=this;this.targets=new _i(this),this.classes=new Ri(this),this.data=new Ii(this),this.containsElement=function(o){return o.closest(s.controllerSelector)===s.element},this.schema=e,this.element=i,this.identifier=r,this.guide=new xi(n)}return t.prototype.findElement=function(e){return this.element.matches(e)?this.element:this.queryElements(e).find(this.containsElement)},t.prototype.findAllElements=function(e){return jn(this.element.matches(e)?[this.element]:[],this.queryElements(e).filter(this.containsElement))},t.prototype.queryElements=function(e){return Array.from(this.element.querySelectorAll(e))},Object.defineProperty(t.prototype,"controllerSelector",{get:function(){return ve(this.schema.controllerAttribute,this.identifier)},enumerable:!1,configurable:!0}),t}();var Di=function(){function t(e,i,r){this.element=e,this.schema=i,this.delegate=r,this.valueListObserver=new He(this.element,this.controllerAttribute,this),this.scopesByIdentifierByElement=new WeakMap,this.scopeReferenceCounts=new WeakMap}return t.prototype.start=function(){this.valueListObserver.start()},t.prototype.stop=function(){this.valueListObserver.stop()},Object.defineProperty(t.prototype,"controllerAttribute",{get:function(){return this.schema.controllerAttribute},enumerable:!1,configurable:!0}),t.prototype.parseValueForToken=function(e){var i=e.element,r=e.content,n=this.fetchScopesByIdentifierForElement(i),s=n.get(r);return s||(s=this.delegate.createScopeForElementAndIdentifier(i,r),n.set(r,s)),s},t.prototype.elementMatchedValue=function(e,i){var r=(this.scopeReferenceCounts.get(i)||0)+1;this.scopeReferenceCounts.set(i,r),r==1&&this.delegate.scopeConnected(i)},t.prototype.elementUnmatchedValue=function(e,i){var r=this.scopeReferenceCounts.get(i);r&&(this.scopeReferenceCounts.set(i,r-1),r==1&&this.delegate.scopeDisconnected(i))},t.prototype.fetchScopesByIdentifierForElement=function(e){var i=this.scopesByIdentifierByElement.get(e);return i||(i=new Map,this.scopesByIdentifierByElement.set(e,i)),i},t}();var Fi=function(){function t(e){this.application=e,this.scopeObserver=new Di(this.element,this.schema,this),this.scopesByIdentifier=new he,this.modulesByIdentifier=new Map}return Object.defineProperty(t.prototype,"element",{get:function(){return this.application.element},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"schema",{get:function(){return this.application.schema},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"logger",{get:function(){return this.application.logger},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"controllerAttribute",{get:function(){return this.schema.controllerAttribute},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"modules",{get:function(){return Array.from(this.modulesByIdentifier.values())},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"contexts",{get:function(){return this.modules.reduce(function(e,i){return e.concat(i.contexts)},[])},enumerable:!1,configurable:!0}),t.prototype.start=function(){this.scopeObserver.start()},t.prototype.stop=function(){this.scopeObserver.stop()},t.prototype.loadDefinition=function(e){this.unloadIdentifier(e.identifier);var i=new ki(this.application,e);this.connectModule(i)},t.prototype.unloadIdentifier=function(e){var i=this.modulesByIdentifier.get(e);i&&this.disconnectModule(i)},t.prototype.getContextForElementAndIdentifier=function(e,i){var r=this.modulesByIdentifier.get(i);if(r)return r.contexts.find(function(n){return n.element==e})},t.prototype.handleError=function(e,i,r){this.application.handleError(e,i,r)},t.prototype.createScopeForElementAndIdentifier=function(e,i){return new Mi(this.schema,e,i,this.logger)},t.prototype.scopeConnected=function(e){this.scopesByIdentifier.add(e.identifier,e);var i=this.modulesByIdentifier.get(e.identifier);i&&i.connectContextForScope(e)},t.prototype.scopeDisconnected=function(e){this.scopesByIdentifier.delete(e.identifier,e);var i=this.modulesByIdentifier.get(e.identifier);i&&i.disconnectContextForScope(e)},t.prototype.connectModule=function(e){this.modulesByIdentifier.set(e.identifier,e);var i=this.scopesByIdentifier.getValuesForKey(e.identifier);i.forEach(function(r){return e.connectContextForScope(r)})},t.prototype.disconnectModule=function(e){this.modulesByIdentifier.delete(e.identifier);var i=this.scopesByIdentifier.getValuesForKey(e.identifier);i.forEach(function(r){return e.disconnectContextForScope(r)})},t}();var dt={controllerAttribute:"data-controller",actionAttribute:"data-action",targetAttribute:"data-target"};var Un=function(t,e,i,r){function n(s){return s instanceof i?s:new i(function(o){o(s)})}return new(i||(i=Promise))(function(s,o){function a(u){try{h(r.next(u))}catch(f){o(f)}}function l(u){try{h(r.throw(u))}catch(f){o(f)}}function h(u){u.done?s(u.value):n(u.value).then(a,l)}h((r=r.apply(t,e||[])).next())})},Vn=function(t,e){var i={label:0,sent:function(){if(s[0]&1)throw s[1];return s[1]},trys:[],ops:[]},r,n,s,o;return o={next:a(0),throw:a(1),return:a(2)},typeof Symbol=="function"&&(o[Symbol.iterator]=function(){return this}),o;function a(h){return function(u){return l([h,u])}}function l(h){if(r)throw new TypeError("Generator is already executing.");for(;i;)try{if(r=1,n&&(s=h[0]&2?n.return:h[0]?n.throw||((s=n.return)&&s.call(n),0):n.next)&&!(s=s.call(n,h[1])).done)return s;switch(n=0,s&&(h=[h[0]&2,s.value]),h[0]){case 0:case 1:s=h;break;case 4:return i.label++,{value:h[1],done:!1};case 5:i.label++,n=h[1],h=[0];continue;case 7:h=i.ops.pop(),i.trys.pop();continue;default:if(s=i.trys,!(s=s.length>0&&s[s.length-1])&&(h[0]===6||h[0]===2)){i=0;continue}if(h[0]===3&&(!s||h[1]>s[0]&&h[1]<s[3])){i.label=h[1];break}if(h[0]===6&&i.label<s[1]){i.label=s[1],s=h;break}if(s&&i.label<s[2]){i.label=s[2],i.ops.push(h);break}s[2]&&i.ops.pop(),i.trys.pop();continue}h=e.call(t,i)}catch(u){h=[6,u],n=0}finally{r=s=0}if(h[0]&5)throw h[1];return{value:h[0]?h[1]:void 0,done:!0}}},Ni=function(){for(var t=0,e=0,i=arguments.length;e<i;e++)t+=arguments[e].length;for(var r=Array(t),n=0,e=0;e<i;e++)for(var s=arguments[e],o=0,a=s.length;o<a;o++,n++)r[n]=s[o];return r},ft=function(){function t(e,i){e===void 0&&(e=document.documentElement),i===void 0&&(i=dt),this.logger=console,this.element=e,this.schema=i,this.dispatcher=new ui(this),this.router=new Fi(this)}return t.start=function(e,i){var r=new t(e,i);return r.start(),r},t.prototype.start=function(){return Un(this,void 0,void 0,function(){return Vn(this,function(e){switch(e.label){case 0:return[4,$n()];case 1:return e.sent(),this.dispatcher.start(),this.router.start(),[2]}})})},t.prototype.stop=function(){this.dispatcher.stop(),this.router.stop()},t.prototype.register=function(e,i){this.load({identifier:e,controllerConstructor:i})},t.prototype.load=function(e){for(var i=this,r=[],n=1;n<arguments.length;n++)r[n-1]=arguments[n];var s=Array.isArray(e)?e:Ni([e],r);s.forEach(function(o){return i.router.loadDefinition(o)})},t.prototype.unload=function(e){for(var i=this,r=[],n=1;n<arguments.length;n++)r[n-1]=arguments[n];var s=Array.isArray(e)?e:Ni([e],r);s.forEach(function(o){return i.router.unloadIdentifier(o)})},Object.defineProperty(t.prototype,"controllers",{get:function(){return this.router.contexts.map(function(e){return e.controller})},enumerable:!1,configurable:!0}),t.prototype.getControllerForElementAndIdentifier=function(e,i){var r=this.router.getContextForElementAndIdentifier(e,i);return r?r.controller:null},t.prototype.handleError=function(e,i,r){this.logger.error(`%s %o -%o`,t,e,n)},r}();function Tr(){return new Promise(function(r){document.readyState=="loading"?document.addEventListener("DOMContentLoaded",r):r()})}function st(r){var e=O(r,"classes");return e.reduce(function(t,n){return Object.assign(t,Cr(n))},{})}function Cr(r){var e,t=r+"Class";return e={},e[t]={get:function(){var n=this.classes;if(n.has(r))return n.get(r);var i=n.getAttributeName(r);throw new Error('Missing attribute "'+i+'"')}},e["has"+R(t)]={get:function(){return this.classes.has(r)}},e}function ot(r){var e=O(r,"targets");return e.reduce(function(t,n){return Object.assign(t,Or(n))},{})}function Or(r){var e;return e={},e[r+"Target"]={get:function(){var t=this.targets.find(r);if(t)return t;throw new Error('Missing target element "'+this.identifier+"."+r+'"')}},e[r+"Targets"]={get:function(){return this.targets.findAll(r)}},e["has"+R(r)+"Target"]={get:function(){return this.targets.has(r)}},e}function at(r){var e=Ke(r,"values"),t={valueDescriptorMap:{get:function(){var n=this;return e.reduce(function(i,s){var o,c=ct(s),l=n.data.getAttributeNameForKey(c.key);return Object.assign(i,(o={},o[l]=c,o))},{})}}};return e.reduce(function(n,i){return Object.assign(n,Rr(i))},t)}function Rr(r){var e,t=ct(r),n=t.type,i=t.key,s=t.name,o=Fr[n],c=lt[n]||lt.default;return e={},e[s]={get:function(){var l=this.data.get(i);return l!==null?o(l):t.defaultValue},set:function(l){l===void 0?this.data.delete(i):this.data.set(i,c(l))}},e["has"+R(s)]={get:function(){return this.data.has(i)}},e}function ct(r){var e=r[0],t=r[1],n=kr(t);return Mr(e,n)}function kr(r){switch(r){case Array:return"array";case Boolean:return"boolean";case Number:return"number";case Object:return"object";case String:return"string"}throw new Error('Unknown value type constant "'+r+'"')}function Mr(r,e){var t=D(r)+"-value";return{type:e,key:t,name:Xe(t),get defaultValue(){return xr[e]}}}var xr={get array(){return[]},boolean:!1,number:0,get object(){return{}},string:""},Fr={array:function(r){var e=JSON.parse(r);if(!Array.isArray(e))throw new TypeError("Expected array");return e},boolean:function(r){return!(r=="0"||r=="false")},number:function(r){return parseFloat(r)},object:function(r){var e=JSON.parse(r);if(e===null||typeof e!="object"||Array.isArray(e))throw new TypeError("Expected object");return e},string:function(r){return r}},lt={default:Br,array:ut,object:ut};function ut(r){return JSON.stringify(r)}function Br(r){return""+r}var Ir=function(){function r(e){this.context=e}return Object.defineProperty(r.prototype,"application",{get:function(){return this.context.application},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"scope",{get:function(){return this.context.scope},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"element",{get:function(){return this.scope.element},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"identifier",{get:function(){return this.scope.identifier},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"targets",{get:function(){return this.scope.targets},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"classes",{get:function(){return this.scope.classes},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"data",{get:function(){return this.scope.data},enumerable:!1,configurable:!0}),r.prototype.initialize=function(){},r.prototype.connect=function(){},r.prototype.disconnect=function(){},r.blessings=[st,ot,at],r.targets=[],r.values={},r}();var ht=[];var Nr=Y.start();Nr.load(ht);})(); -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vbm9kZV9tb2R1bGVzL0Bob3R3aXJlZC90dXJiby9kaXN0L3R1cmJvLmVzMjAxNy1lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzdGltdWx1cy9jb3JlL3NyYy9ldmVudF9saXN0ZW5lci50cyIsICIuLi9ub2RlX21vZHVsZXMvQHN0aW11bHVzL2NvcmUvc3JjL2Rpc3BhdGNoZXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzdGltdWx1cy9jb3JlL3NyYy9hY3Rpb25fZGVzY3JpcHRvci50cyIsICIuLi9ub2RlX21vZHVsZXMvQHN0aW11bHVzL2NvcmUvc3JjL2FjdGlvbi50cyIsICIuLi9ub2RlX21vZHVsZXMvQHN0aW11bHVzL2NvcmUvc3JjL2JpbmRpbmcudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzdGltdWx1cy9tdXRhdGlvbi1vYnNlcnZlcnMvc3JjL2VsZW1lbnRfb2JzZXJ2ZXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzdGltdWx1cy9tdXRhdGlvbi1vYnNlcnZlcnMvc3JjL2F0dHJpYnV0ZV9vYnNlcnZlci50cyIsICIuLi9ub2RlX21vZHVsZXMvQHN0aW11bHVzL211dGF0aW9uLW9ic2VydmVycy9zcmMvc3RyaW5nX21hcF9vYnNlcnZlci50cyIsICIuLi9ub2RlX21vZHVsZXMvQHN0aW11bHVzL211bHRpbWFwL3NyYy9zZXRfb3BlcmF0aW9ucy50cyIsICIuLi9ub2RlX21vZHVsZXMvQHN0aW11bHVzL211bHRpbWFwL3NyYy9tdWx0aW1hcC50cyIsICIuLi9ub2RlX21vZHVsZXMvQHN0aW11bHVzL211bHRpbWFwL3NyYy9pbmRleGVkX211bHRpbWFwLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac3RpbXVsdXMvbXV0YXRpb24tb2JzZXJ2ZXJzL3NyYy90b2tlbl9saXN0X29ic2VydmVyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac3RpbXVsdXMvbXV0YXRpb24tb2JzZXJ2ZXJzL3NyYy92YWx1ZV9saXN0X29ic2VydmVyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac3RpbXVsdXMvY29yZS9zcmMvYmluZGluZ19vYnNlcnZlci50cyIsICIuLi9ub2RlX21vZHVsZXMvQHN0aW11bHVzL2NvcmUvc3JjL3ZhbHVlX29ic2VydmVyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac3RpbXVsdXMvY29yZS9zcmMvY29udGV4dC50cyIsICIuLi9ub2RlX21vZHVsZXMvQHN0aW11bHVzL2NvcmUvc3JjL2luaGVyaXRhYmxlX3N0YXRpY3MudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzdGltdWx1cy9jb3JlL3NyYy9ibGVzc2luZy50cyIsICIuLi9ub2RlX21vZHVsZXMvQHN0aW11bHVzL2NvcmUvc3JjL2RlZmluaXRpb24udHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzdGltdWx1cy9jb3JlL3NyYy9tb2R1bGUudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzdGltdWx1cy9jb3JlL3NyYy9jbGFzc19tYXAudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzdGltdWx1cy9jb3JlL3NyYy9zdHJpbmdfaGVscGVycy50cyIsICIuLi9ub2RlX21vZHVsZXMvQHN0aW11bHVzL2NvcmUvc3JjL2RhdGFfbWFwLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac3RpbXVsdXMvY29yZS9zcmMvZ3VpZGUudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzdGltdWx1cy9jb3JlL3NyYy9zZWxlY3RvcnMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzdGltdWx1cy9jb3JlL3NyYy90YXJnZXRfc2V0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac3RpbXVsdXMvY29yZS9zcmMvc2NvcGUudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzdGltdWx1cy9jb3JlL3NyYy9zY29wZV9vYnNlcnZlci50cyIsICIuLi9ub2RlX21vZHVsZXMvQHN0aW11bHVzL2NvcmUvc3JjL3JvdXRlci50cyIsICIuLi9ub2RlX21vZHVsZXMvQHN0aW11bHVzL2NvcmUvc3JjL3NjaGVtYS50cyIsICIuLi9ub2RlX21vZHVsZXMvQHN0aW11bHVzL2NvcmUvc3JjL2FwcGxpY2F0aW9uLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac3RpbXVsdXMvY29yZS9zcmMvY2xhc3NfcHJvcGVydGllcy50cyIsICIuLi9ub2RlX21vZHVsZXMvQHN0aW11bHVzL2NvcmUvc3JjL3RhcmdldF9wcm9wZXJ0aWVzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac3RpbXVsdXMvY29yZS9zcmMvdmFsdWVfcHJvcGVydGllcy50cyIsICIuLi9ub2RlX21vZHVsZXMvQHN0aW11bHVzL2NvcmUvc3JjL2NvbnRyb2xsZXIudHMiLCAic3RpbXVsdXNfbnM6L1VzZXJzL2hyZWYvZGV2L2JvdC9hc3NldHMvY29udHJvbGxlcnMiLCAiLi4vc2l0ZS5qcyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLypcblR1cmJvIDcuMC4wLXJjLjJcbkNvcHlyaWdodCBcdTAwQTkgMjAyMSBCYXNlY2FtcCwgTExDXG4gKi9cbihmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHdpbmRvdy5SZWZsZWN0ID09PSB1bmRlZmluZWQgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgd2luZG93LmN1c3RvbUVsZW1lbnRzLnBvbHlmaWxsV3JhcEZsdXNoQ2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBCdWlsdEluSFRNTEVsZW1lbnQgPSBIVE1MRWxlbWVudDtcbiAgICBjb25zdCB3cmFwcGVyRm9yVGhlTmFtZSA9IHtcbiAgICAgICAgJ0hUTUxFbGVtZW50JzogZnVuY3Rpb24gSFRNTEVsZW1lbnQoKSB7XG4gICAgICAgICAgICByZXR1cm4gUmVmbGVjdC5jb25zdHJ1Y3QoQnVpbHRJbkhUTUxFbGVtZW50LCBbXSwgdGhpcy5jb25zdHJ1Y3Rvcik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHdpbmRvdy5IVE1MRWxlbWVudCA9XG4gICAgICAgIHdyYXBwZXJGb3JUaGVOYW1lWydIVE1MRWxlbWVudCddO1xuICAgIEhUTUxFbGVtZW50LnByb3RvdHlwZSA9IEJ1aWx0SW5IVE1MRWxlbWVudC5wcm90b3R5cGU7XG4gICAgSFRNTEVsZW1lbnQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gSFRNTEVsZW1lbnQ7XG4gICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxFbGVtZW50LCBCdWlsdEluSFRNTEVsZW1lbnQpO1xufSkoKTtcblxuY29uc3Qgc3VibWl0dGVyc0J5Rm9ybSA9IG5ldyBXZWFrTWFwO1xuZnVuY3Rpb24gZmluZFN1Ym1pdHRlckZyb21DbGlja1RhcmdldCh0YXJnZXQpIHtcbiAgICBjb25zdCBlbGVtZW50ID0gdGFyZ2V0IGluc3RhbmNlb2YgRWxlbWVudCA/IHRhcmdldCA6IHRhcmdldCBpbnN0YW5jZW9mIE5vZGUgPyB0YXJnZXQucGFyZW50RWxlbWVudCA6IG51bGw7XG4gICAgY29uc3QgY2FuZGlkYXRlID0gZWxlbWVudCA/IGVsZW1lbnQuY2xvc2VzdChcImlucHV0LCBidXR0b25cIikgOiBudWxsO1xuICAgIHJldHVybiAoY2FuZGlkYXRlID09PSBudWxsIHx8IGNhbmRpZGF0ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogY2FuZGlkYXRlLnR5cGUpID09IFwic3VibWl0XCIgPyBjYW5kaWRhdGUgOiBudWxsO1xufVxuZnVuY3Rpb24gY2xpY2tDYXB0dXJlZChldmVudCkge1xuICAgIGNvbnN0IHN1Ym1pdHRlciA9IGZpbmRTdWJtaXR0ZXJGcm9tQ2xpY2tUYXJnZXQoZXZlbnQudGFyZ2V0KTtcbiAgICBpZiAoc3VibWl0dGVyICYmIHN1Ym1pdHRlci5mb3JtKSB7XG4gICAgICAgIHN1Ym1pdHRlcnNCeUZvcm0uc2V0KHN1Ym1pdHRlci5mb3JtLCBzdWJtaXR0ZXIpO1xuICAgIH1cbn1cbihmdW5jdGlvbiAoKSB7XG4gICAgaWYgKFwiU3VibWl0RXZlbnRcIiBpbiB3aW5kb3cpXG4gICAgICAgIHJldHVybjtcbiAgICBhZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgY2xpY2tDYXB0dXJlZCwgdHJ1ZSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEV2ZW50LnByb3RvdHlwZSwgXCJzdWJtaXR0ZXJcIiwge1xuICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy50eXBlID09IFwic3VibWl0XCIgJiYgdGhpcy50YXJnZXQgaW5zdGFuY2VvZiBIVE1MRm9ybUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3VibWl0dGVyc0J5Rm9ybS5nZXQodGhpcy50YXJnZXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59KSgpO1xuXG52YXIgRnJhbWVMb2FkaW5nU3R5bGU7XG4oZnVuY3Rpb24gKEZyYW1lTG9hZGluZ1N0eWxlKSB7XG4gICAgRnJhbWVMb2FkaW5nU3R5bGVbXCJlYWdlclwiXSA9IFwiZWFnZXJcIjtcbiAgICBGcmFtZUxvYWRpbmdTdHlsZVtcImxhenlcIl0gPSBcImxhenlcIjtcbn0pKEZyYW1lTG9hZGluZ1N0eWxlIHx8IChGcmFtZUxvYWRpbmdTdHlsZSA9IHt9KSk7XG5jbGFzcyBGcmFtZUVsZW1lbnQgZXh0ZW5kcyBIVE1MRWxlbWVudCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMubG9hZGVkID0gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgIHRoaXMuZGVsZWdhdGUgPSBuZXcgRnJhbWVFbGVtZW50LmRlbGVnYXRlQ29uc3RydWN0b3IodGhpcyk7XG4gICAgfVxuICAgIHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuICAgICAgICByZXR1cm4gW1wiZGlzYWJsZWRcIiwgXCJsb2FkaW5nXCIsIFwic3JjXCJdO1xuICAgIH1cbiAgICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICAgICAgdGhpcy5kZWxlZ2F0ZS5jb25uZWN0KCk7XG4gICAgfVxuICAgIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgICAgICB0aGlzLmRlbGVnYXRlLmRpc2Nvbm5lY3QoKTtcbiAgICB9XG4gICAgcmVsb2FkKCkge1xuICAgICAgICBjb25zdCB7IHNyYyB9ID0gdGhpcztcbiAgICAgICAgdGhpcy5zcmMgPSBudWxsO1xuICAgICAgICB0aGlzLnNyYyA9IHNyYztcbiAgICB9XG4gICAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKG5hbWUpIHtcbiAgICAgICAgaWYgKG5hbWUgPT0gXCJsb2FkaW5nXCIpIHtcbiAgICAgICAgICAgIHRoaXMuZGVsZWdhdGUubG9hZGluZ1N0eWxlQ2hhbmdlZCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gXCJzcmNcIikge1xuICAgICAgICAgICAgdGhpcy5kZWxlZ2F0ZS5zb3VyY2VVUkxDaGFuZ2VkKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRlbGVnYXRlLmRpc2FibGVkQ2hhbmdlZCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBzcmMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEF0dHJpYnV0ZShcInNyY1wiKTtcbiAgICB9XG4gICAgc2V0IHNyYyh2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKFwic3JjXCIsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlKFwic3JjXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBsb2FkaW5nKCkge1xuICAgICAgICByZXR1cm4gZnJhbWVMb2FkaW5nU3R5bGVGcm9tU3RyaW5nKHRoaXMuZ2V0QXR0cmlidXRlKFwibG9hZGluZ1wiKSB8fCBcIlwiKTtcbiAgICB9XG4gICAgc2V0IGxvYWRpbmcodmFsdWUpIHtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZShcImxvYWRpbmdcIiwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGUoXCJsb2FkaW5nXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBkaXNhYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFzQXR0cmlidXRlKFwiZGlzYWJsZWRcIik7XG4gICAgfVxuICAgIHNldCBkaXNhYmxlZCh2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiZGlzYWJsZWRcIiwgXCJcIik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZShcImRpc2FibGVkXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBhdXRvc2Nyb2xsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5oYXNBdHRyaWJ1dGUoXCJhdXRvc2Nyb2xsXCIpO1xuICAgIH1cbiAgICBzZXQgYXV0b3Njcm9sbCh2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiYXV0b3Njcm9sbFwiLCBcIlwiKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlKFwiYXV0b3Njcm9sbFwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgY29tcGxldGUoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5kZWxlZ2F0ZS5pc0xvYWRpbmc7XG4gICAgfVxuICAgIGdldCBpc0FjdGl2ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3duZXJEb2N1bWVudCA9PT0gZG9jdW1lbnQgJiYgIXRoaXMuaXNQcmV2aWV3O1xuICAgIH1cbiAgICBnZXQgaXNQcmV2aWV3KCkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICByZXR1cm4gKF9iID0gKF9hID0gdGhpcy5vd25lckRvY3VtZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZG9jdW1lbnRFbGVtZW50KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaGFzQXR0cmlidXRlKFwiZGF0YS10dXJiby1wcmV2aWV3XCIpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGZyYW1lTG9hZGluZ1N0eWxlRnJvbVN0cmluZyhzdHlsZSkge1xuICAgIHN3aXRjaCAoc3R5bGUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICBjYXNlIFwibGF6eVwiOiByZXR1cm4gRnJhbWVMb2FkaW5nU3R5bGUubGF6eTtcbiAgICAgICAgZGVmYXVsdDogcmV0dXJuIEZyYW1lTG9hZGluZ1N0eWxlLmVhZ2VyO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZXhwYW5kVVJMKGxvY2F0YWJsZSkge1xuICAgIHJldHVybiBuZXcgVVJMKGxvY2F0YWJsZS50b1N0cmluZygpLCBkb2N1bWVudC5iYXNlVVJJKTtcbn1cbmZ1bmN0aW9uIGdldEFuY2hvcih1cmwpIHtcbiAgICBsZXQgYW5jaG9yTWF0Y2g7XG4gICAgaWYgKHVybC5oYXNoKSB7XG4gICAgICAgIHJldHVybiB1cmwuaGFzaC5zbGljZSgxKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoYW5jaG9yTWF0Y2ggPSB1cmwuaHJlZi5tYXRjaCgvIyguKikkLykpIHtcbiAgICAgICAgcmV0dXJuIGFuY2hvck1hdGNoWzFdO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGdldEV4dGVuc2lvbih1cmwpIHtcbiAgICByZXR1cm4gKGdldExhc3RQYXRoQ29tcG9uZW50KHVybCkubWF0Y2goL1xcLlteLl0qJC8pIHx8IFtdKVswXSB8fCBcIlwiO1xufVxuZnVuY3Rpb24gaXNIVE1MKHVybCkge1xuICAgIHJldHVybiAhIWdldEV4dGVuc2lvbih1cmwpLm1hdGNoKC9eKD86fFxcLig/Omh0bXxodG1sfHhodG1sKSkkLyk7XG59XG5mdW5jdGlvbiBpc1ByZWZpeGVkQnkoYmFzZVVSTCwgdXJsKSB7XG4gICAgY29uc3QgcHJlZml4ID0gZ2V0UHJlZml4KHVybCk7XG4gICAgcmV0dXJuIGJhc2VVUkwuaHJlZiA9PT0gZXhwYW5kVVJMKHByZWZpeCkuaHJlZiB8fCBiYXNlVVJMLmhyZWYuc3RhcnRzV2l0aChwcmVmaXgpO1xufVxuZnVuY3Rpb24gZ2V0UmVxdWVzdFVSTCh1cmwpIHtcbiAgICBjb25zdCBhbmNob3IgPSBnZXRBbmNob3IodXJsKTtcbiAgICByZXR1cm4gYW5jaG9yICE9IG51bGxcbiAgICAgICAgPyB1cmwuaHJlZi5zbGljZSgwLCAtKGFuY2hvci5sZW5ndGggKyAxKSlcbiAgICAgICAgOiB1cmwuaHJlZjtcbn1cbmZ1bmN0aW9uIHRvQ2FjaGVLZXkodXJsKSB7XG4gICAgcmV0dXJuIGdldFJlcXVlc3RVUkwodXJsKTtcbn1cbmZ1bmN0aW9uIHVybHNBcmVFcXVhbChsZWZ0LCByaWdodCkge1xuICAgIHJldHVybiBleHBhbmRVUkwobGVmdCkuaHJlZiA9PSBleHBhbmRVUkwocmlnaHQpLmhyZWY7XG59XG5mdW5jdGlvbiBnZXRQYXRoQ29tcG9uZW50cyh1cmwpIHtcbiAgICByZXR1cm4gdXJsLnBhdGhuYW1lLnNwbGl0KFwiL1wiKS5zbGljZSgxKTtcbn1cbmZ1bmN0aW9uIGdldExhc3RQYXRoQ29tcG9uZW50KHVybCkge1xuICAgIHJldHVybiBnZXRQYXRoQ29tcG9uZW50cyh1cmwpLnNsaWNlKC0xKVswXTtcbn1cbmZ1bmN0aW9uIGdldFByZWZpeCh1cmwpIHtcbiAgICByZXR1cm4gYWRkVHJhaWxpbmdTbGFzaCh1cmwub3JpZ2luICsgdXJsLnBhdGhuYW1lKTtcbn1cbmZ1bmN0aW9uIGFkZFRyYWlsaW5nU2xhc2godmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUuZW5kc1dpdGgoXCIvXCIpID8gdmFsdWUgOiB2YWx1ZSArIFwiL1wiO1xufVxuXG5jbGFzcyBGZXRjaFJlc3BvbnNlIHtcbiAgICBjb25zdHJ1Y3RvcihyZXNwb25zZSkge1xuICAgICAgICB0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2U7XG4gICAgfVxuICAgIGdldCBzdWNjZWVkZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlc3BvbnNlLm9rO1xuICAgIH1cbiAgICBnZXQgZmFpbGVkKCkge1xuICAgICAgICByZXR1cm4gIXRoaXMuc3VjY2VlZGVkO1xuICAgIH1cbiAgICBnZXQgY2xpZW50RXJyb3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXR1c0NvZGUgPj0gNDAwICYmIHRoaXMuc3RhdHVzQ29kZSA8PSA0OTk7XG4gICAgfVxuICAgIGdldCBzZXJ2ZXJFcnJvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdHVzQ29kZSA+PSA1MDAgJiYgdGhpcy5zdGF0dXNDb2RlIDw9IDU5OTtcbiAgICB9XG4gICAgZ2V0IHJlZGlyZWN0ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlc3BvbnNlLnJlZGlyZWN0ZWQ7XG4gICAgfVxuICAgIGdldCBsb2NhdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGV4cGFuZFVSTCh0aGlzLnJlc3BvbnNlLnVybCk7XG4gICAgfVxuICAgIGdldCBpc0hUTUwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRlbnRUeXBlICYmIHRoaXMuY29udGVudFR5cGUubWF0Y2goL14oPzp0ZXh0XFwvKFteXFxzOyxdK1xcYik/aHRtbHxhcHBsaWNhdGlvblxcL3hodG1sXFwreG1sKVxcYi8pO1xuICAgIH1cbiAgICBnZXQgc3RhdHVzQ29kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVzcG9uc2Uuc3RhdHVzO1xuICAgIH1cbiAgICBnZXQgY29udGVudFR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhlYWRlcihcIkNvbnRlbnQtVHlwZVwiKTtcbiAgICB9XG4gICAgZ2V0IHJlc3BvbnNlVGV4dCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVzcG9uc2UudGV4dCgpO1xuICAgIH1cbiAgICBnZXQgcmVzcG9uc2VIVE1MKCkge1xuICAgICAgICBpZiAodGhpcy5pc0hUTUwpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlc3BvbnNlLnRleHQoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBoZWFkZXIobmFtZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXNwb25zZS5oZWFkZXJzLmdldChuYW1lKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRpc3BhdGNoKGV2ZW50TmFtZSwgeyB0YXJnZXQsIGNhbmNlbGFibGUsIGRldGFpbCB9ID0ge30pIHtcbiAgICBjb25zdCBldmVudCA9IG5ldyBDdXN0b21FdmVudChldmVudE5hbWUsIHsgY2FuY2VsYWJsZSwgYnViYmxlczogdHJ1ZSwgZGV0YWlsIH0pO1xuICAgIHZvaWQgKHRhcmdldCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpLmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuICAgIHJldHVybiBldmVudDtcbn1cbmZ1bmN0aW9uIG5leHRBbmltYXRpb25GcmFtZSgpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gcmVzb2x2ZSgpKSk7XG59XG5mdW5jdGlvbiBuZXh0RXZlbnRMb29wVGljaygpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KCgpID0+IHJlc29sdmUoKSwgMCkpO1xufVxuZnVuY3Rpb24gbmV4dE1pY3JvdGFzaygpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG59XG5mdW5jdGlvbiBwYXJzZUhUTUxEb2N1bWVudChodG1sID0gXCJcIikge1xuICAgIHJldHVybiBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKGh0bWwsIFwidGV4dC9odG1sXCIpO1xufVxuZnVuY3Rpb24gdW5pbmRlbnQoc3RyaW5ncywgLi4udmFsdWVzKSB7XG4gICAgY29uc3QgbGluZXMgPSBpbnRlcnBvbGF0ZShzdHJpbmdzLCB2YWx1ZXMpLnJlcGxhY2UoL15cXG4vLCBcIlwiKS5zcGxpdChcIlxcblwiKTtcbiAgICBjb25zdCBtYXRjaCA9IGxpbmVzWzBdLm1hdGNoKC9eXFxzKy8pO1xuICAgIGNvbnN0IGluZGVudCA9IG1hdGNoID8gbWF0Y2hbMF0ubGVuZ3RoIDogMDtcbiAgICByZXR1cm4gbGluZXMubWFwKGxpbmUgPT4gbGluZS5zbGljZShpbmRlbnQpKS5qb2luKFwiXFxuXCIpO1xufVxuZnVuY3Rpb24gaW50ZXJwb2xhdGUoc3RyaW5ncywgdmFsdWVzKSB7XG4gICAgcmV0dXJuIHN0cmluZ3MucmVkdWNlKChyZXN1bHQsIHN0cmluZywgaSkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHZhbHVlc1tpXSA9PSB1bmRlZmluZWQgPyBcIlwiIDogdmFsdWVzW2ldO1xuICAgICAgICByZXR1cm4gcmVzdWx0ICsgc3RyaW5nICsgdmFsdWU7XG4gICAgfSwgXCJcIik7XG59XG5mdW5jdGlvbiB1dWlkKCkge1xuICAgIHJldHVybiBBcnJheS5hcHBseShudWxsLCB7IGxlbmd0aDogMzYgfSkubWFwKChfLCBpKSA9PiB7XG4gICAgICAgIGlmIChpID09IDggfHwgaSA9PSAxMyB8fCBpID09IDE4IHx8IGkgPT0gMjMpIHtcbiAgICAgICAgICAgIHJldHVybiBcIi1cIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpID09IDE0KSB7XG4gICAgICAgICAgICByZXR1cm4gXCI0XCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaSA9PSAxOSkge1xuICAgICAgICAgICAgcmV0dXJuIChNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA0KSArIDgpLnRvU3RyaW5nKDE2KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxNSkudG9TdHJpbmcoMTYpO1xuICAgICAgICB9XG4gICAgfSkuam9pbihcIlwiKTtcbn1cblxudmFyIEZldGNoTWV0aG9kO1xuKGZ1bmN0aW9uIChGZXRjaE1ldGhvZCkge1xuICAgIEZldGNoTWV0aG9kW0ZldGNoTWV0aG9kW1wiZ2V0XCJdID0gMF0gPSBcImdldFwiO1xuICAgIEZldGNoTWV0aG9kW0ZldGNoTWV0aG9kW1wicG9zdFwiXSA9IDFdID0gXCJwb3N0XCI7XG4gICAgRmV0Y2hNZXRob2RbRmV0Y2hNZXRob2RbXCJwdXRcIl0gPSAyXSA9IFwicHV0XCI7XG4gICAgRmV0Y2hNZXRob2RbRmV0Y2hNZXRob2RbXCJwYXRjaFwiXSA9IDNdID0gXCJwYXRjaFwiO1xuICAgIEZldGNoTWV0aG9kW0ZldGNoTWV0aG9kW1wiZGVsZXRlXCJdID0gNF0gPSBcImRlbGV0ZVwiO1xufSkoRmV0Y2hNZXRob2QgfHwgKEZldGNoTWV0aG9kID0ge30pKTtcbmZ1bmN0aW9uIGZldGNoTWV0aG9kRnJvbVN0cmluZyhtZXRob2QpIHtcbiAgICBzd2l0Y2ggKG1ldGhvZC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgIGNhc2UgXCJnZXRcIjogcmV0dXJuIEZldGNoTWV0aG9kLmdldDtcbiAgICAgICAgY2FzZSBcInBvc3RcIjogcmV0dXJuIEZldGNoTWV0aG9kLnBvc3Q7XG4gICAgICAgIGNhc2UgXCJwdXRcIjogcmV0dXJuIEZldGNoTWV0aG9kLnB1dDtcbiAgICAgICAgY2FzZSBcInBhdGNoXCI6IHJldHVybiBGZXRjaE1ldGhvZC5wYXRjaDtcbiAgICAgICAgY2FzZSBcImRlbGV0ZVwiOiByZXR1cm4gRmV0Y2hNZXRob2QuZGVsZXRlO1xuICAgIH1cbn1cbmNsYXNzIEZldGNoUmVxdWVzdCB7XG4gICAgY29uc3RydWN0b3IoZGVsZWdhdGUsIG1ldGhvZCwgbG9jYXRpb24sIGJvZHkgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKSB7XG4gICAgICAgIHRoaXMuYWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcjtcbiAgICAgICAgdGhpcy5yZXNvbHZlUmVxdWVzdFByb21pc2UgPSAodmFsdWUpID0+IHsgfTtcbiAgICAgICAgdGhpcy5kZWxlZ2F0ZSA9IGRlbGVnYXRlO1xuICAgICAgICB0aGlzLm1ldGhvZCA9IG1ldGhvZDtcbiAgICAgICAgdGhpcy5oZWFkZXJzID0gdGhpcy5kZWZhdWx0SGVhZGVycztcbiAgICAgICAgaWYgKHRoaXMuaXNJZGVtcG90ZW50KSB7XG4gICAgICAgICAgICB0aGlzLnVybCA9IG1lcmdlRm9ybURhdGFFbnRyaWVzKGxvY2F0aW9uLCBbLi4uYm9keS5lbnRyaWVzKCldKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYm9keSA9IGJvZHk7XG4gICAgICAgICAgICB0aGlzLnVybCA9IGxvY2F0aW9uO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBsb2NhdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudXJsO1xuICAgIH1cbiAgICBnZXQgcGFyYW1zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy51cmwuc2VhcmNoUGFyYW1zO1xuICAgIH1cbiAgICBnZXQgZW50cmllcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYm9keSA/IEFycmF5LmZyb20odGhpcy5ib2R5LmVudHJpZXMoKSkgOiBbXTtcbiAgICB9XG4gICAgY2FuY2VsKCkge1xuICAgICAgICB0aGlzLmFib3J0Q29udHJvbGxlci5hYm9ydCgpO1xuICAgIH1cbiAgICBhc3luYyBwZXJmb3JtKCkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBjb25zdCB7IGZldGNoT3B0aW9ucyB9ID0gdGhpcztcbiAgICAgICAgKF9iID0gKF9hID0gdGhpcy5kZWxlZ2F0ZSkucHJlcGFyZUhlYWRlcnNGb3JSZXF1ZXN0KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSwgdGhpcy5oZWFkZXJzLCB0aGlzKTtcbiAgICAgICAgYXdhaXQgdGhpcy5hbGxvd1JlcXVlc3RUb0JlSW50ZXJjZXB0ZWQoZmV0Y2hPcHRpb25zKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuZGVsZWdhdGUucmVxdWVzdFN0YXJ0ZWQodGhpcyk7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHRoaXMudXJsLmhyZWYsIGZldGNoT3B0aW9ucyk7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5yZWNlaXZlKHJlc3BvbnNlKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmIChlcnJvci5uYW1lICE9PSAnQWJvcnRFcnJvcicpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlbGVnYXRlLnJlcXVlc3RFcnJvcmVkKHRoaXMsIGVycm9yKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMuZGVsZWdhdGUucmVxdWVzdEZpbmlzaGVkKHRoaXMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIHJlY2VpdmUocmVzcG9uc2UpIHtcbiAgICAgICAgY29uc3QgZmV0Y2hSZXNwb25zZSA9IG5ldyBGZXRjaFJlc3BvbnNlKHJlc3BvbnNlKTtcbiAgICAgICAgY29uc3QgZXZlbnQgPSBkaXNwYXRjaChcInR1cmJvOmJlZm9yZS1mZXRjaC1yZXNwb25zZVwiLCB7IGNhbmNlbGFibGU6IHRydWUsIGRldGFpbDogeyBmZXRjaFJlc3BvbnNlIH0gfSk7XG4gICAgICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgICAgICB0aGlzLmRlbGVnYXRlLnJlcXVlc3RQcmV2ZW50ZWRIYW5kbGluZ1Jlc3BvbnNlKHRoaXMsIGZldGNoUmVzcG9uc2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGZldGNoUmVzcG9uc2Uuc3VjY2VlZGVkKSB7XG4gICAgICAgICAgICB0aGlzLmRlbGVnYXRlLnJlcXVlc3RTdWNjZWVkZWRXaXRoUmVzcG9uc2UodGhpcywgZmV0Y2hSZXNwb25zZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRlbGVnYXRlLnJlcXVlc3RGYWlsZWRXaXRoUmVzcG9uc2UodGhpcywgZmV0Y2hSZXNwb25zZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZldGNoUmVzcG9uc2U7XG4gICAgfVxuICAgIGdldCBmZXRjaE9wdGlvbnMoKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG1ldGhvZDogRmV0Y2hNZXRob2RbdGhpcy5tZXRob2RdLnRvVXBwZXJDYXNlKCksXG4gICAgICAgICAgICBjcmVkZW50aWFsczogXCJzYW1lLW9yaWdpblwiLFxuICAgICAgICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxuICAgICAgICAgICAgcmVkaXJlY3Q6IFwiZm9sbG93XCIsXG4gICAgICAgICAgICBib2R5OiB0aGlzLmJvZHksXG4gICAgICAgICAgICBzaWduYWw6IHRoaXMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICByZWZlcnJlcjogKF9hID0gdGhpcy5kZWxlZ2F0ZS5yZWZlcnJlcikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmhyZWZcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZ2V0IGRlZmF1bHRIZWFkZXJzKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgXCJBY2NlcHRcIjogXCJ0ZXh0L2h0bWwsIGFwcGxpY2F0aW9uL3hodG1sK3htbFwiXG4gICAgICAgIH07XG4gICAgfVxuICAgIGdldCBpc0lkZW1wb3RlbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1ldGhvZCA9PSBGZXRjaE1ldGhvZC5nZXQ7XG4gICAgfVxuICAgIGdldCBhYm9ydFNpZ25hbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWJvcnRDb250cm9sbGVyLnNpZ25hbDtcbiAgICB9XG4gICAgYXN5bmMgYWxsb3dSZXF1ZXN0VG9CZUludGVyY2VwdGVkKGZldGNoT3B0aW9ucykge1xuICAgICAgICBjb25zdCByZXF1ZXN0SW50ZXJjZXB0aW9uID0gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB0aGlzLnJlc29sdmVSZXF1ZXN0UHJvbWlzZSA9IHJlc29sdmUpO1xuICAgICAgICBjb25zdCBldmVudCA9IGRpc3BhdGNoKFwidHVyYm86YmVmb3JlLWZldGNoLXJlcXVlc3RcIiwgeyBjYW5jZWxhYmxlOiB0cnVlLCBkZXRhaWw6IHsgZmV0Y2hPcHRpb25zLCB1cmw6IHRoaXMudXJsLmhyZWYsIHJlc3VtZTogdGhpcy5yZXNvbHZlUmVxdWVzdFByb21pc2UgfSB9KTtcbiAgICAgICAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpXG4gICAgICAgICAgICBhd2FpdCByZXF1ZXN0SW50ZXJjZXB0aW9uO1xuICAgIH1cbn1cbmZ1bmN0aW9uIG1lcmdlRm9ybURhdGFFbnRyaWVzKHVybCwgZW50cmllcykge1xuICAgIGNvbnN0IGN1cnJlbnRTZWFyY2hQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHVybC5zZWFyY2gpO1xuICAgIGZvciAoY29uc3QgW25hbWUsIHZhbHVlXSBvZiBlbnRyaWVzKSB7XG4gICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEZpbGUpXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgaWYgKGN1cnJlbnRTZWFyY2hQYXJhbXMuaGFzKG5hbWUpKSB7XG4gICAgICAgICAgICBjdXJyZW50U2VhcmNoUGFyYW1zLmRlbGV0ZShuYW1lKTtcbiAgICAgICAgICAgIHVybC5zZWFyY2hQYXJhbXMuc2V0KG5hbWUsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHVybC5zZWFyY2hQYXJhbXMuYXBwZW5kKG5hbWUsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdXJsO1xufVxuXG5jbGFzcyBBcHBlYXJhbmNlT2JzZXJ2ZXIge1xuICAgIGNvbnN0cnVjdG9yKGRlbGVnYXRlLCBlbGVtZW50KSB7XG4gICAgICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmludGVyc2VjdCA9IGVudHJpZXMgPT4ge1xuICAgICAgICAgICAgY29uc3QgbGFzdEVudHJ5ID0gZW50cmllcy5zbGljZSgtMSlbMF07XG4gICAgICAgICAgICBpZiAobGFzdEVudHJ5ID09PSBudWxsIHx8IGxhc3RFbnRyeSA9PT0gdm9pZCAwID8gdm9pZCAwIDogbGFzdEVudHJ5LmlzSW50ZXJzZWN0aW5nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWxlZ2F0ZS5lbGVtZW50QXBwZWFyZWRJblZpZXdwb3J0KHRoaXMuZWxlbWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZGVsZWdhdGUgPSBkZWxlZ2F0ZTtcbiAgICAgICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcbiAgICAgICAgdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcih0aGlzLmludGVyc2VjdCk7XG4gICAgfVxuICAgIHN0YXJ0KCkge1xuICAgICAgICBpZiAoIXRoaXMuc3RhcnRlZCkge1xuICAgICAgICAgICAgdGhpcy5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLmVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0b3AoKSB7XG4gICAgICAgIGlmICh0aGlzLnN0YXJ0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlci51bm9ic2VydmUodGhpcy5lbGVtZW50KTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgU3RyZWFtTWVzc2FnZSB7XG4gICAgY29uc3RydWN0b3IoaHRtbCkge1xuICAgICAgICB0aGlzLnRlbXBsYXRlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKTtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUVsZW1lbnQuaW5uZXJIVE1MID0gaHRtbDtcbiAgICB9XG4gICAgc3RhdGljIHdyYXAobWVzc2FnZSkge1xuICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2UgPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyB0aGlzKG1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IGZyYWdtZW50KCkge1xuICAgICAgICBjb25zdCBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIHRoaXMuZm9yZWlnbkVsZW1lbnRzKSB7XG4gICAgICAgICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5pbXBvcnROb2RlKGVsZW1lbnQsIHRydWUpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZnJhZ21lbnQ7XG4gICAgfVxuICAgIGdldCBmb3JlaWduRWxlbWVudHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRlbXBsYXRlQ2hpbGRyZW4ucmVkdWNlKChzdHJlYW1FbGVtZW50cywgY2hpbGQpID0+IHtcbiAgICAgICAgICAgIGlmIChjaGlsZC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT0gXCJ0dXJiby1zdHJlYW1cIikge1xuICAgICAgICAgICAgICAgIHJldHVybiBbLi4uc3RyZWFtRWxlbWVudHMsIGNoaWxkXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBzdHJlYW1FbGVtZW50cztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgW10pO1xuICAgIH1cbiAgICBnZXQgdGVtcGxhdGVDaGlsZHJlbigpIHtcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy50ZW1wbGF0ZUVsZW1lbnQuY29udGVudC5jaGlsZHJlbik7XG4gICAgfVxufVxuU3RyZWFtTWVzc2FnZS5jb250ZW50VHlwZSA9IFwidGV4dC92bmQudHVyYm8tc3RyZWFtLmh0bWxcIjtcblxudmFyIEZvcm1TdWJtaXNzaW9uU3RhdGU7XG4oZnVuY3Rpb24gKEZvcm1TdWJtaXNzaW9uU3RhdGUpIHtcbiAgICBGb3JtU3VibWlzc2lvblN0YXRlW0Zvcm1TdWJtaXNzaW9uU3RhdGVbXCJpbml0aWFsaXplZFwiXSA9IDBdID0gXCJpbml0aWFsaXplZFwiO1xuICAgIEZvcm1TdWJtaXNzaW9uU3RhdGVbRm9ybVN1Ym1pc3Npb25TdGF0ZVtcInJlcXVlc3RpbmdcIl0gPSAxXSA9IFwicmVxdWVzdGluZ1wiO1xuICAgIEZvcm1TdWJtaXNzaW9uU3RhdGVbRm9ybVN1Ym1pc3Npb25TdGF0ZVtcIndhaXRpbmdcIl0gPSAyXSA9IFwid2FpdGluZ1wiO1xuICAgIEZvcm1TdWJtaXNzaW9uU3RhdGVbRm9ybVN1Ym1pc3Npb25TdGF0ZVtcInJlY2VpdmluZ1wiXSA9IDNdID0gXCJyZWNlaXZpbmdcIjtcbiAgICBGb3JtU3VibWlzc2lvblN0YXRlW0Zvcm1TdWJtaXNzaW9uU3RhdGVbXCJzdG9wcGluZ1wiXSA9IDRdID0gXCJzdG9wcGluZ1wiO1xuICAgIEZvcm1TdWJtaXNzaW9uU3RhdGVbRm9ybVN1Ym1pc3Npb25TdGF0ZVtcInN0b3BwZWRcIl0gPSA1XSA9IFwic3RvcHBlZFwiO1xufSkoRm9ybVN1Ym1pc3Npb25TdGF0ZSB8fCAoRm9ybVN1Ym1pc3Npb25TdGF0ZSA9IHt9KSk7XG52YXIgRm9ybUVuY3R5cGU7XG4oZnVuY3Rpb24gKEZvcm1FbmN0eXBlKSB7XG4gICAgRm9ybUVuY3R5cGVbXCJ1cmxFbmNvZGVkXCJdID0gXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIjtcbiAgICBGb3JtRW5jdHlwZVtcIm11bHRpcGFydFwiXSA9IFwibXVsdGlwYXJ0L2Zvcm0tZGF0YVwiO1xuICAgIEZvcm1FbmN0eXBlW1wicGxhaW5cIl0gPSBcInRleHQvcGxhaW5cIjtcbn0pKEZvcm1FbmN0eXBlIHx8IChGb3JtRW5jdHlwZSA9IHt9KSk7XG5mdW5jdGlvbiBmb3JtRW5jdHlwZUZyb21TdHJpbmcoZW5jb2RpbmcpIHtcbiAgICBzd2l0Y2ggKGVuY29kaW5nLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgY2FzZSBGb3JtRW5jdHlwZS5tdWx0aXBhcnQ6IHJldHVybiBGb3JtRW5jdHlwZS5tdWx0aXBhcnQ7XG4gICAgICAgIGNhc2UgRm9ybUVuY3R5cGUucGxhaW46IHJldHVybiBGb3JtRW5jdHlwZS5wbGFpbjtcbiAgICAgICAgZGVmYXVsdDogcmV0dXJuIEZvcm1FbmN0eXBlLnVybEVuY29kZWQ7XG4gICAgfVxufVxuY2xhc3MgRm9ybVN1Ym1pc3Npb24ge1xuICAgIGNvbnN0cnVjdG9yKGRlbGVnYXRlLCBmb3JtRWxlbWVudCwgc3VibWl0dGVyLCBtdXN0UmVkaXJlY3QgPSBmYWxzZSkge1xuICAgICAgICB0aGlzLnN0YXRlID0gRm9ybVN1Ym1pc3Npb25TdGF0ZS5pbml0aWFsaXplZDtcbiAgICAgICAgdGhpcy5kZWxlZ2F0ZSA9IGRlbGVnYXRlO1xuICAgICAgICB0aGlzLmZvcm1FbGVtZW50ID0gZm9ybUVsZW1lbnQ7XG4gICAgICAgIHRoaXMuc3VibWl0dGVyID0gc3VibWl0dGVyO1xuICAgICAgICB0aGlzLmZvcm1EYXRhID0gYnVpbGRGb3JtRGF0YShmb3JtRWxlbWVudCwgc3VibWl0dGVyKTtcbiAgICAgICAgdGhpcy5mZXRjaFJlcXVlc3QgPSBuZXcgRmV0Y2hSZXF1ZXN0KHRoaXMsIHRoaXMubWV0aG9kLCB0aGlzLmxvY2F0aW9uLCB0aGlzLmJvZHkpO1xuICAgICAgICB0aGlzLm11c3RSZWRpcmVjdCA9IG11c3RSZWRpcmVjdDtcbiAgICB9XG4gICAgZ2V0IG1ldGhvZCgpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCBtZXRob2QgPSAoKF9hID0gdGhpcy5zdWJtaXR0ZXIpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5nZXRBdHRyaWJ1dGUoXCJmb3JtbWV0aG9kXCIpKSB8fCB0aGlzLmZvcm1FbGVtZW50LmdldEF0dHJpYnV0ZShcIm1ldGhvZFwiKSB8fCBcIlwiO1xuICAgICAgICByZXR1cm4gZmV0Y2hNZXRob2RGcm9tU3RyaW5nKG1ldGhvZC50b0xvd2VyQ2FzZSgpKSB8fCBGZXRjaE1ldGhvZC5nZXQ7XG4gICAgfVxuICAgIGdldCBhY3Rpb24oKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3QgZm9ybUVsZW1lbnRBY3Rpb24gPSB0eXBlb2YgdGhpcy5mb3JtRWxlbWVudC5hY3Rpb24gPT09ICdzdHJpbmcnID8gdGhpcy5mb3JtRWxlbWVudC5hY3Rpb24gOiBudWxsO1xuICAgICAgICByZXR1cm4gKChfYSA9IHRoaXMuc3VibWl0dGVyKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZ2V0QXR0cmlidXRlKFwiZm9ybWFjdGlvblwiKSkgfHwgdGhpcy5mb3JtRWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJhY3Rpb25cIikgfHwgZm9ybUVsZW1lbnRBY3Rpb24gfHwgXCJcIjtcbiAgICB9XG4gICAgZ2V0IGxvY2F0aW9uKCkge1xuICAgICAgICByZXR1cm4gZXhwYW5kVVJMKHRoaXMuYWN0aW9uKTtcbiAgICB9XG4gICAgZ2V0IGJvZHkoKSB7XG4gICAgICAgIGlmICh0aGlzLmVuY3R5cGUgPT0gRm9ybUVuY3R5cGUudXJsRW5jb2RlZCB8fCB0aGlzLm1ldGhvZCA9PSBGZXRjaE1ldGhvZC5nZXQpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgVVJMU2VhcmNoUGFyYW1zKHRoaXMuc3RyaW5nRm9ybURhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZm9ybURhdGE7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IGVuY3R5cGUoKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmV0dXJuIGZvcm1FbmN0eXBlRnJvbVN0cmluZygoKF9hID0gdGhpcy5zdWJtaXR0ZXIpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5nZXRBdHRyaWJ1dGUoXCJmb3JtZW5jdHlwZVwiKSkgfHwgdGhpcy5mb3JtRWxlbWVudC5lbmN0eXBlKTtcbiAgICB9XG4gICAgZ2V0IGlzSWRlbXBvdGVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmV0Y2hSZXF1ZXN0LmlzSWRlbXBvdGVudDtcbiAgICB9XG4gICAgZ2V0IHN0cmluZ0Zvcm1EYXRhKCkge1xuICAgICAgICByZXR1cm4gWy4uLnRoaXMuZm9ybURhdGFdLnJlZHVjZSgoZW50cmllcywgW25hbWUsIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGVudHJpZXMuY29uY2F0KHR5cGVvZiB2YWx1ZSA9PSBcInN0cmluZ1wiID8gW1tuYW1lLCB2YWx1ZV1dIDogW10pO1xuICAgICAgICB9LCBbXSk7XG4gICAgfVxuICAgIGFzeW5jIHN0YXJ0KCkge1xuICAgICAgICBjb25zdCB7IGluaXRpYWxpemVkLCByZXF1ZXN0aW5nIH0gPSBGb3JtU3VibWlzc2lvblN0YXRlO1xuICAgICAgICBpZiAodGhpcy5zdGF0ZSA9PSBpbml0aWFsaXplZCkge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IHJlcXVlc3Rpbmc7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5mZXRjaFJlcXVlc3QucGVyZm9ybSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0b3AoKSB7XG4gICAgICAgIGNvbnN0IHsgc3RvcHBpbmcsIHN0b3BwZWQgfSA9IEZvcm1TdWJtaXNzaW9uU3RhdGU7XG4gICAgICAgIGlmICh0aGlzLnN0YXRlICE9IHN0b3BwaW5nICYmIHRoaXMuc3RhdGUgIT0gc3RvcHBlZCkge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IHN0b3BwaW5nO1xuICAgICAgICAgICAgdGhpcy5mZXRjaFJlcXVlc3QuY2FuY2VsKCk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwcmVwYXJlSGVhZGVyc0ZvclJlcXVlc3QoaGVhZGVycywgcmVxdWVzdCkge1xuICAgICAgICBpZiAoIXJlcXVlc3QuaXNJZGVtcG90ZW50KSB7XG4gICAgICAgICAgICBjb25zdCB0b2tlbiA9IGdldENvb2tpZVZhbHVlKGdldE1ldGFDb250ZW50KFwiY3NyZi1wYXJhbVwiKSkgfHwgZ2V0TWV0YUNvbnRlbnQoXCJjc3JmLXRva2VuXCIpO1xuICAgICAgICAgICAgaWYgKHRva2VuKSB7XG4gICAgICAgICAgICAgICAgaGVhZGVyc1tcIlgtQ1NSRi1Ub2tlblwiXSA9IHRva2VuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaGVhZGVyc1tcIkFjY2VwdFwiXSA9IFtTdHJlYW1NZXNzYWdlLmNvbnRlbnRUeXBlLCBoZWFkZXJzW1wiQWNjZXB0XCJdXS5qb2luKFwiLCBcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmVxdWVzdFN0YXJ0ZWQocmVxdWVzdCkge1xuICAgICAgICB0aGlzLnN0YXRlID0gRm9ybVN1Ym1pc3Npb25TdGF0ZS53YWl0aW5nO1xuICAgICAgICBkaXNwYXRjaChcInR1cmJvOnN1Ym1pdC1zdGFydFwiLCB7IHRhcmdldDogdGhpcy5mb3JtRWxlbWVudCwgZGV0YWlsOiB7IGZvcm1TdWJtaXNzaW9uOiB0aGlzIH0gfSk7XG4gICAgICAgIHRoaXMuZGVsZWdhdGUuZm9ybVN1Ym1pc3Npb25TdGFydGVkKHRoaXMpO1xuICAgIH1cbiAgICByZXF1ZXN0UHJldmVudGVkSGFuZGxpbmdSZXNwb25zZShyZXF1ZXN0LCByZXNwb25zZSkge1xuICAgICAgICB0aGlzLnJlc3VsdCA9IHsgc3VjY2VzczogcmVzcG9uc2Uuc3VjY2VlZGVkLCBmZXRjaFJlc3BvbnNlOiByZXNwb25zZSB9O1xuICAgIH1cbiAgICByZXF1ZXN0U3VjY2VlZGVkV2l0aFJlc3BvbnNlKHJlcXVlc3QsIHJlc3BvbnNlKSB7XG4gICAgICAgIGlmIChyZXNwb25zZS5jbGllbnRFcnJvciB8fCByZXNwb25zZS5zZXJ2ZXJFcnJvcikge1xuICAgICAgICAgICAgdGhpcy5kZWxlZ2F0ZS5mb3JtU3VibWlzc2lvbkZhaWxlZFdpdGhSZXNwb25zZSh0aGlzLCByZXNwb25zZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5yZXF1ZXN0TXVzdFJlZGlyZWN0KHJlcXVlc3QpICYmIHJlc3BvbnNlU3VjY2VlZGVkV2l0aG91dFJlZGlyZWN0KHJlc3BvbnNlKSkge1xuICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoXCJGb3JtIHJlc3BvbnNlcyBtdXN0IHJlZGlyZWN0IHRvIGFub3RoZXIgbG9jYXRpb25cIik7XG4gICAgICAgICAgICB0aGlzLmRlbGVnYXRlLmZvcm1TdWJtaXNzaW9uRXJyb3JlZCh0aGlzLCBlcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gRm9ybVN1Ym1pc3Npb25TdGF0ZS5yZWNlaXZpbmc7XG4gICAgICAgICAgICB0aGlzLnJlc3VsdCA9IHsgc3VjY2VzczogdHJ1ZSwgZmV0Y2hSZXNwb25zZTogcmVzcG9uc2UgfTtcbiAgICAgICAgICAgIHRoaXMuZGVsZWdhdGUuZm9ybVN1Ym1pc3Npb25TdWNjZWVkZWRXaXRoUmVzcG9uc2UodGhpcywgcmVzcG9uc2UpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJlcXVlc3RGYWlsZWRXaXRoUmVzcG9uc2UocmVxdWVzdCwgcmVzcG9uc2UpIHtcbiAgICAgICAgdGhpcy5yZXN1bHQgPSB7IHN1Y2Nlc3M6IGZhbHNlLCBmZXRjaFJlc3BvbnNlOiByZXNwb25zZSB9O1xuICAgICAgICB0aGlzLmRlbGVnYXRlLmZvcm1TdWJtaXNzaW9uRmFpbGVkV2l0aFJlc3BvbnNlKHRoaXMsIHJlc3BvbnNlKTtcbiAgICB9XG4gICAgcmVxdWVzdEVycm9yZWQocmVxdWVzdCwgZXJyb3IpIHtcbiAgICAgICAgdGhpcy5yZXN1bHQgPSB7IHN1Y2Nlc3M6IGZhbHNlLCBlcnJvciB9O1xuICAgICAgICB0aGlzLmRlbGVnYXRlLmZvcm1TdWJtaXNzaW9uRXJyb3JlZCh0aGlzLCBlcnJvcik7XG4gICAgfVxuICAgIHJlcXVlc3RGaW5pc2hlZChyZXF1ZXN0KSB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSBGb3JtU3VibWlzc2lvblN0YXRlLnN0b3BwZWQ7XG4gICAgICAgIGRpc3BhdGNoKFwidHVyYm86c3VibWl0LWVuZFwiLCB7IHRhcmdldDogdGhpcy5mb3JtRWxlbWVudCwgZGV0YWlsOiBPYmplY3QuYXNzaWduKHsgZm9ybVN1Ym1pc3Npb246IHRoaXMgfSwgdGhpcy5yZXN1bHQpIH0pO1xuICAgICAgICB0aGlzLmRlbGVnYXRlLmZvcm1TdWJtaXNzaW9uRmluaXNoZWQodGhpcyk7XG4gICAgfVxuICAgIHJlcXVlc3RNdXN0UmVkaXJlY3QocmVxdWVzdCkge1xuICAgICAgICByZXR1cm4gIXJlcXVlc3QuaXNJZGVtcG90ZW50ICYmIHRoaXMubXVzdFJlZGlyZWN0O1xuICAgIH1cbn1cbmZ1bmN0aW9uIGJ1aWxkRm9ybURhdGEoZm9ybUVsZW1lbnQsIHN1Ym1pdHRlcikge1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKGZvcm1FbGVtZW50KTtcbiAgICBjb25zdCBuYW1lID0gc3VibWl0dGVyID09PSBudWxsIHx8IHN1Ym1pdHRlciA9PT0gdm9pZCAwID8gdm9pZCAwIDogc3VibWl0dGVyLmdldEF0dHJpYnV0ZShcIm5hbWVcIik7XG4gICAgY29uc3QgdmFsdWUgPSBzdWJtaXR0ZXIgPT09IG51bGwgfHwgc3VibWl0dGVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzdWJtaXR0ZXIuZ2V0QXR0cmlidXRlKFwidmFsdWVcIik7XG4gICAgaWYgKG5hbWUgJiYgdmFsdWUgIT0gbnVsbCAmJiBmb3JtRGF0YS5nZXQobmFtZSkgIT0gdmFsdWUpIHtcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKG5hbWUsIHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIGZvcm1EYXRhO1xufVxuZnVuY3Rpb24gZ2V0Q29va2llVmFsdWUoY29va2llTmFtZSkge1xuICAgIGlmIChjb29raWVOYW1lICE9IG51bGwpIHtcbiAgICAgICAgY29uc3QgY29va2llcyA9IGRvY3VtZW50LmNvb2tpZSA/IGRvY3VtZW50LmNvb2tpZS5zcGxpdChcIjsgXCIpIDogW107XG4gICAgICAgIGNvbnN0IGNvb2tpZSA9IGNvb2tpZXMuZmluZCgoY29va2llKSA9PiBjb29raWUuc3RhcnRzV2l0aChjb29raWVOYW1lKSk7XG4gICAgICAgIGlmIChjb29raWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gY29va2llLnNwbGl0KFwiPVwiKS5zbGljZSgxKS5qb2luKFwiPVwiKTtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZSA/IGRlY29kZVVSSUNvbXBvbmVudCh2YWx1ZSkgOiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBnZXRNZXRhQ29udGVudChuYW1lKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYG1ldGFbbmFtZT1cIiR7bmFtZX1cIl1gKTtcbiAgICByZXR1cm4gZWxlbWVudCAmJiBlbGVtZW50LmNvbnRlbnQ7XG59XG5mdW5jdGlvbiByZXNwb25zZVN1Y2NlZWRlZFdpdGhvdXRSZWRpcmVjdChyZXNwb25zZSkge1xuICAgIHJldHVybiByZXNwb25zZS5zdGF0dXNDb2RlID09IDIwMCAmJiAhcmVzcG9uc2UucmVkaXJlY3RlZDtcbn1cblxuY2xhc3MgU25hcHNob3Qge1xuICAgIGNvbnN0cnVjdG9yKGVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcbiAgICB9XG4gICAgZ2V0IGNoaWxkcmVuKCkge1xuICAgICAgICByZXR1cm4gWy4uLnRoaXMuZWxlbWVudC5jaGlsZHJlbl07XG4gICAgfVxuICAgIGhhc0FuY2hvcihhbmNob3IpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RWxlbWVudEZvckFuY2hvcihhbmNob3IpICE9IG51bGw7XG4gICAgfVxuICAgIGdldEVsZW1lbnRGb3JBbmNob3IoYW5jaG9yKSB7XG4gICAgICAgIHJldHVybiBhbmNob3IgPyB0aGlzLmVsZW1lbnQucXVlcnlTZWxlY3RvcihgW2lkPScke2FuY2hvcn0nXSwgYVtuYW1lPScke2FuY2hvcn0nXWApIDogbnVsbDtcbiAgICB9XG4gICAgZ2V0IGlzQ29ubmVjdGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50LmlzQ29ubmVjdGVkO1xuICAgIH1cbiAgICBnZXQgZmlyc3RBdXRvZm9jdXNhYmxlRWxlbWVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiW2F1dG9mb2N1c11cIik7XG4gICAgfVxuICAgIGdldCBwZXJtYW5lbnRFbGVtZW50cygpIHtcbiAgICAgICAgcmV0dXJuIFsuLi50aGlzLmVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcIltpZF1bZGF0YS10dXJiby1wZXJtYW5lbnRdXCIpXTtcbiAgICB9XG4gICAgZ2V0UGVybWFuZW50RWxlbWVudEJ5SWQoaWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5xdWVyeVNlbGVjdG9yKGAjJHtpZH1bZGF0YS10dXJiby1wZXJtYW5lbnRdYCk7XG4gICAgfVxuICAgIGdldFBlcm1hbmVudEVsZW1lbnRNYXBGb3JTbmFwc2hvdChzbmFwc2hvdCkge1xuICAgICAgICBjb25zdCBwZXJtYW5lbnRFbGVtZW50TWFwID0ge307XG4gICAgICAgIGZvciAoY29uc3QgY3VycmVudFBlcm1hbmVudEVsZW1lbnQgb2YgdGhpcy5wZXJtYW5lbnRFbGVtZW50cykge1xuICAgICAgICAgICAgY29uc3QgeyBpZCB9ID0gY3VycmVudFBlcm1hbmVudEVsZW1lbnQ7XG4gICAgICAgICAgICBjb25zdCBuZXdQZXJtYW5lbnRFbGVtZW50ID0gc25hcHNob3QuZ2V0UGVybWFuZW50RWxlbWVudEJ5SWQoaWQpO1xuICAgICAgICAgICAgaWYgKG5ld1Blcm1hbmVudEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBwZXJtYW5lbnRFbGVtZW50TWFwW2lkXSA9IFtjdXJyZW50UGVybWFuZW50RWxlbWVudCwgbmV3UGVybWFuZW50RWxlbWVudF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBlcm1hbmVudEVsZW1lbnRNYXA7XG4gICAgfVxufVxuXG5jbGFzcyBGb3JtSW50ZXJjZXB0b3Ige1xuICAgIGNvbnN0cnVjdG9yKGRlbGVnYXRlLCBlbGVtZW50KSB7XG4gICAgICAgIHRoaXMuc3VibWl0QnViYmxlZCA9ICgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGlmIChldmVudC50YXJnZXQgaW5zdGFuY2VvZiBIVE1MRm9ybUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmb3JtID0gZXZlbnQudGFyZ2V0O1xuICAgICAgICAgICAgICAgIGNvbnN0IHN1Ym1pdHRlciA9IGV2ZW50LnN1Ym1pdHRlciB8fCB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGVsZWdhdGUuc2hvdWxkSW50ZXJjZXB0Rm9ybVN1Ym1pc3Npb24oZm9ybSwgc3VibWl0dGVyKSkge1xuICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWxlZ2F0ZS5mb3JtU3VibWlzc2lvbkludGVyY2VwdGVkKGZvcm0sIHN1Ym1pdHRlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5kZWxlZ2F0ZSA9IGRlbGVnYXRlO1xuICAgICAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuICAgIH1cbiAgICBzdGFydCgpIHtcbiAgICAgICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJzdWJtaXRcIiwgdGhpcy5zdWJtaXRCdWJibGVkKTtcbiAgICB9XG4gICAgc3RvcCgpIHtcbiAgICAgICAgdGhpcy5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzdWJtaXRcIiwgdGhpcy5zdWJtaXRCdWJibGVkKTtcbiAgICB9XG59XG5cbmNsYXNzIFZpZXcge1xuICAgIGNvbnN0cnVjdG9yKGRlbGVnYXRlLCBlbGVtZW50KSB7XG4gICAgICAgIHRoaXMucmVzb2x2ZVJlbmRlclByb21pc2UgPSAodmFsdWUpID0+IHsgfTtcbiAgICAgICAgdGhpcy5yZXNvbHZlSW50ZXJjZXB0aW9uUHJvbWlzZSA9ICh2YWx1ZSkgPT4geyB9O1xuICAgICAgICB0aGlzLmRlbGVnYXRlID0gZGVsZWdhdGU7XG4gICAgICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgfVxuICAgIHNjcm9sbFRvQW5jaG9yKGFuY2hvcikge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5zbmFwc2hvdC5nZXRFbGVtZW50Rm9yQW5jaG9yKGFuY2hvcik7XG4gICAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbFRvRWxlbWVudChlbGVtZW50KTtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNFbGVtZW50KGVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxUb1Bvc2l0aW9uKHsgeDogMCwgeTogMCB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzY3JvbGxUb0FuY2hvckZyb21Mb2NhdGlvbihsb2NhdGlvbikge1xuICAgICAgICB0aGlzLnNjcm9sbFRvQW5jaG9yKGdldEFuY2hvcihsb2NhdGlvbikpO1xuICAgIH1cbiAgICBzY3JvbGxUb0VsZW1lbnQoZWxlbWVudCkge1xuICAgICAgICBlbGVtZW50LnNjcm9sbEludG9WaWV3KCk7XG4gICAgfVxuICAgIGZvY3VzRWxlbWVudChlbGVtZW50KSB7XG4gICAgICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcbiAgICAgICAgICAgIGlmIChlbGVtZW50Lmhhc0F0dHJpYnV0ZShcInRhYmluZGV4XCIpKSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJ0YWJpbmRleFwiLCBcIi0xXCIpO1xuICAgICAgICAgICAgICAgIGVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShcInRhYmluZGV4XCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHNjcm9sbFRvUG9zaXRpb24oeyB4LCB5IH0pIHtcbiAgICAgICAgdGhpcy5zY3JvbGxSb290LnNjcm9sbFRvKHgsIHkpO1xuICAgIH1cbiAgICBzY3JvbGxUb1RvcCgpIHtcbiAgICAgICAgdGhpcy5zY3JvbGxUb1Bvc2l0aW9uKHsgeDogMCwgeTogMCB9KTtcbiAgICB9XG4gICAgZ2V0IHNjcm9sbFJvb3QoKSB7XG4gICAgICAgIHJldHVybiB3aW5kb3c7XG4gICAgfVxuICAgIGFzeW5jIHJlbmRlcihyZW5kZXJlcikge1xuICAgICAgICBjb25zdCB7IGlzUHJldmlldywgc2hvdWxkUmVuZGVyLCBuZXdTbmFwc2hvdDogc25hcHNob3QgfSA9IHJlbmRlcmVyO1xuICAgICAgICBpZiAoc2hvdWxkUmVuZGVyKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyUHJvbWlzZSA9IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gdGhpcy5yZXNvbHZlUmVuZGVyUHJvbWlzZSA9IHJlc29sdmUpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcbiAgICAgICAgICAgICAgICB0aGlzLnByZXBhcmVUb1JlbmRlclNuYXBzaG90KHJlbmRlcmVyKTtcbiAgICAgICAgICAgICAgICBjb25zdCByZW5kZXJJbnRlcmNlcHRpb24gPSBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHRoaXMucmVzb2x2ZUludGVyY2VwdGlvblByb21pc2UgPSByZXNvbHZlKTtcbiAgICAgICAgICAgICAgICBjb25zdCBpbW1lZGlhdGVSZW5kZXIgPSB0aGlzLmRlbGVnYXRlLmFsbG93c0ltbWVkaWF0ZVJlbmRlcihzbmFwc2hvdCwgdGhpcy5yZXNvbHZlSW50ZXJjZXB0aW9uUHJvbWlzZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFpbW1lZGlhdGVSZW5kZXIpXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHJlbmRlckludGVyY2VwdGlvbjtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlbmRlclNuYXBzaG90KHJlbmRlcmVyKTtcbiAgICAgICAgICAgICAgICB0aGlzLmRlbGVnYXRlLnZpZXdSZW5kZXJlZFNuYXBzaG90KHNuYXBzaG90LCBpc1ByZXZpZXcpO1xuICAgICAgICAgICAgICAgIHRoaXMuZmluaXNoUmVuZGVyaW5nU25hcHNob3QocmVuZGVyZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMucmVuZGVyZXI7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNvbHZlUmVuZGVyUHJvbWlzZSh1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnJlbmRlclByb21pc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmludmFsaWRhdGUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpbnZhbGlkYXRlKCkge1xuICAgICAgICB0aGlzLmRlbGVnYXRlLnZpZXdJbnZhbGlkYXRlZCgpO1xuICAgIH1cbiAgICBwcmVwYXJlVG9SZW5kZXJTbmFwc2hvdChyZW5kZXJlcikge1xuICAgICAgICB0aGlzLm1hcmtBc1ByZXZpZXcocmVuZGVyZXIuaXNQcmV2aWV3KTtcbiAgICAgICAgcmVuZGVyZXIucHJlcGFyZVRvUmVuZGVyKCk7XG4gICAgfVxuICAgIG1hcmtBc1ByZXZpZXcoaXNQcmV2aWV3KSB7XG4gICAgICAgIGlmIChpc1ByZXZpZXcpIHtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJkYXRhLXR1cmJvLXByZXZpZXdcIiwgXCJcIik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKFwiZGF0YS10dXJiby1wcmV2aWV3XCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIHJlbmRlclNuYXBzaG90KHJlbmRlcmVyKSB7XG4gICAgICAgIGF3YWl0IHJlbmRlcmVyLnJlbmRlcigpO1xuICAgIH1cbiAgICBmaW5pc2hSZW5kZXJpbmdTbmFwc2hvdChyZW5kZXJlcikge1xuICAgICAgICByZW5kZXJlci5maW5pc2hSZW5kZXJpbmcoKTtcbiAgICB9XG59XG5cbmNsYXNzIEZyYW1lVmlldyBleHRlbmRzIFZpZXcge1xuICAgIGludmFsaWRhdGUoKSB7XG4gICAgICAgIHRoaXMuZWxlbWVudC5pbm5lckhUTUwgPSBcIlwiO1xuICAgIH1cbiAgICBnZXQgc25hcHNob3QoKSB7XG4gICAgICAgIHJldHVybiBuZXcgU25hcHNob3QodGhpcy5lbGVtZW50KTtcbiAgICB9XG59XG5cbmNsYXNzIExpbmtJbnRlcmNlcHRvciB7XG4gICAgY29uc3RydWN0b3IoZGVsZWdhdGUsIGVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5jbGlja0J1YmJsZWQgPSAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnJlc3BvbmRzVG9FdmVudFRhcmdldChldmVudC50YXJnZXQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGlja0V2ZW50ID0gZXZlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5jbGlja0V2ZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmxpbmtDbGlja2VkID0gKChldmVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2xpY2tFdmVudCAmJiB0aGlzLnJlc3BvbmRzVG9FdmVudFRhcmdldChldmVudC50YXJnZXQpICYmIGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kZWxlZ2F0ZS5zaG91bGRJbnRlcmNlcHRMaW5rQ2xpY2soZXZlbnQudGFyZ2V0LCBldmVudC5kZXRhaWwudXJsKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsaWNrRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWxlZ2F0ZS5saW5rQ2xpY2tJbnRlcmNlcHRlZChldmVudC50YXJnZXQsIGV2ZW50LmRldGFpbC51cmwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmNsaWNrRXZlbnQ7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLndpbGxWaXNpdCA9ICgpID0+IHtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmNsaWNrRXZlbnQ7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZGVsZWdhdGUgPSBkZWxlZ2F0ZTtcbiAgICAgICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcbiAgICB9XG4gICAgc3RhcnQoKSB7XG4gICAgICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5jbGlja0J1YmJsZWQpO1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwidHVyYm86Y2xpY2tcIiwgdGhpcy5saW5rQ2xpY2tlZCk7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJ0dXJibzpiZWZvcmUtdmlzaXRcIiwgdGhpcy53aWxsVmlzaXQpO1xuICAgIH1cbiAgICBzdG9wKCkge1xuICAgICAgICB0aGlzLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXMuY2xpY2tCdWJibGVkKTtcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInR1cmJvOmNsaWNrXCIsIHRoaXMubGlua0NsaWNrZWQpO1xuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwidHVyYm86YmVmb3JlLXZpc2l0XCIsIHRoaXMud2lsbFZpc2l0KTtcbiAgICB9XG4gICAgcmVzcG9uZHNUb0V2ZW50VGFyZ2V0KHRhcmdldCkge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGFyZ2V0IGluc3RhbmNlb2YgRWxlbWVudFxuICAgICAgICAgICAgPyB0YXJnZXRcbiAgICAgICAgICAgIDogdGFyZ2V0IGluc3RhbmNlb2YgTm9kZVxuICAgICAgICAgICAgICAgID8gdGFyZ2V0LnBhcmVudEVsZW1lbnRcbiAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgIHJldHVybiBlbGVtZW50ICYmIGVsZW1lbnQuY2xvc2VzdChcInR1cmJvLWZyYW1lLCBodG1sXCIpID09IHRoaXMuZWxlbWVudDtcbiAgICB9XG59XG5cbmNsYXNzIEJhcmRvIHtcbiAgICBjb25zdHJ1Y3RvcihwZXJtYW5lbnRFbGVtZW50TWFwKSB7XG4gICAgICAgIHRoaXMucGVybWFuZW50RWxlbWVudE1hcCA9IHBlcm1hbmVudEVsZW1lbnRNYXA7XG4gICAgfVxuICAgIHN0YXRpYyBwcmVzZXJ2aW5nUGVybWFuZW50RWxlbWVudHMocGVybWFuZW50RWxlbWVudE1hcCwgY2FsbGJhY2spIHtcbiAgICAgICAgY29uc3QgYmFyZG8gPSBuZXcgdGhpcyhwZXJtYW5lbnRFbGVtZW50TWFwKTtcbiAgICAgICAgYmFyZG8uZW50ZXIoKTtcbiAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgYmFyZG8ubGVhdmUoKTtcbiAgICB9XG4gICAgZW50ZXIoKSB7XG4gICAgICAgIGZvciAoY29uc3QgaWQgaW4gdGhpcy5wZXJtYW5lbnRFbGVtZW50TWFwKSB7XG4gICAgICAgICAgICBjb25zdCBbLCBuZXdQZXJtYW5lbnRFbGVtZW50XSA9IHRoaXMucGVybWFuZW50RWxlbWVudE1hcFtpZF07XG4gICAgICAgICAgICB0aGlzLnJlcGxhY2VOZXdQZXJtYW5lbnRFbGVtZW50V2l0aFBsYWNlaG9sZGVyKG5ld1Blcm1hbmVudEVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGxlYXZlKCkge1xuICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHRoaXMucGVybWFuZW50RWxlbWVudE1hcCkge1xuICAgICAgICAgICAgY29uc3QgW2N1cnJlbnRQZXJtYW5lbnRFbGVtZW50XSA9IHRoaXMucGVybWFuZW50RWxlbWVudE1hcFtpZF07XG4gICAgICAgICAgICB0aGlzLnJlcGxhY2VDdXJyZW50UGVybWFuZW50RWxlbWVudFdpdGhDbG9uZShjdXJyZW50UGVybWFuZW50RWxlbWVudCk7XG4gICAgICAgICAgICB0aGlzLnJlcGxhY2VQbGFjZWhvbGRlcldpdGhQZXJtYW5lbnRFbGVtZW50KGN1cnJlbnRQZXJtYW5lbnRFbGVtZW50KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXBsYWNlTmV3UGVybWFuZW50RWxlbWVudFdpdGhQbGFjZWhvbGRlcihwZXJtYW5lbnRFbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IHBsYWNlaG9sZGVyID0gY3JlYXRlUGxhY2Vob2xkZXJGb3JQZXJtYW5lbnRFbGVtZW50KHBlcm1hbmVudEVsZW1lbnQpO1xuICAgICAgICBwZXJtYW5lbnRFbGVtZW50LnJlcGxhY2VXaXRoKHBsYWNlaG9sZGVyKTtcbiAgICB9XG4gICAgcmVwbGFjZUN1cnJlbnRQZXJtYW5lbnRFbGVtZW50V2l0aENsb25lKHBlcm1hbmVudEVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBwZXJtYW5lbnRFbGVtZW50LmNsb25lTm9kZSh0cnVlKTtcbiAgICAgICAgcGVybWFuZW50RWxlbWVudC5yZXBsYWNlV2l0aChjbG9uZSk7XG4gICAgfVxuICAgIHJlcGxhY2VQbGFjZWhvbGRlcldpdGhQZXJtYW5lbnRFbGVtZW50KHBlcm1hbmVudEVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgcGxhY2Vob2xkZXIgPSB0aGlzLmdldFBsYWNlaG9sZGVyQnlJZChwZXJtYW5lbnRFbGVtZW50LmlkKTtcbiAgICAgICAgcGxhY2Vob2xkZXIgPT09IG51bGwgfHwgcGxhY2Vob2xkZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBsYWNlaG9sZGVyLnJlcGxhY2VXaXRoKHBlcm1hbmVudEVsZW1lbnQpO1xuICAgIH1cbiAgICBnZXRQbGFjZWhvbGRlckJ5SWQoaWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGxhY2Vob2xkZXJzLmZpbmQoZWxlbWVudCA9PiBlbGVtZW50LmNvbnRlbnQgPT0gaWQpO1xuICAgIH1cbiAgICBnZXQgcGxhY2Vob2xkZXJzKCkge1xuICAgICAgICByZXR1cm4gWy4uLmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJtZXRhW25hbWU9dHVyYm8tcGVybWFuZW50LXBsYWNlaG9sZGVyXVtjb250ZW50XVwiKV07XG4gICAgfVxufVxuZnVuY3Rpb24gY3JlYXRlUGxhY2Vob2xkZXJGb3JQZXJtYW5lbnRFbGVtZW50KHBlcm1hbmVudEVsZW1lbnQpIHtcbiAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcIm1ldGFcIik7XG4gICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJuYW1lXCIsIFwidHVyYm8tcGVybWFuZW50LXBsYWNlaG9sZGVyXCIpO1xuICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKFwiY29udGVudFwiLCBwZXJtYW5lbnRFbGVtZW50LmlkKTtcbiAgICByZXR1cm4gZWxlbWVudDtcbn1cblxuY2xhc3MgUmVuZGVyZXIge1xuICAgIGNvbnN0cnVjdG9yKGN1cnJlbnRTbmFwc2hvdCwgbmV3U25hcHNob3QsIGlzUHJldmlldykge1xuICAgICAgICB0aGlzLmN1cnJlbnRTbmFwc2hvdCA9IGN1cnJlbnRTbmFwc2hvdDtcbiAgICAgICAgdGhpcy5uZXdTbmFwc2hvdCA9IG5ld1NuYXBzaG90O1xuICAgICAgICB0aGlzLmlzUHJldmlldyA9IGlzUHJldmlldztcbiAgICAgICAgdGhpcy5wcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gdGhpcy5yZXNvbHZpbmdGdW5jdGlvbnMgPSB7IHJlc29sdmUsIHJlamVjdCB9KTtcbiAgICB9XG4gICAgZ2V0IHNob3VsZFJlbmRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHByZXBhcmVUb1JlbmRlcigpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmaW5pc2hSZW5kZXJpbmcoKSB7XG4gICAgICAgIGlmICh0aGlzLnJlc29sdmluZ0Z1bmN0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5yZXNvbHZpbmdGdW5jdGlvbnMucmVzb2x2ZSgpO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMucmVzb2x2aW5nRnVuY3Rpb25zO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNyZWF0ZVNjcmlwdEVsZW1lbnQoZWxlbWVudCkge1xuICAgICAgICBpZiAoZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJkYXRhLXR1cmJvLWV2YWxcIikgPT0gXCJmYWxzZVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGNyZWF0ZWRTY3JpcHRFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmNzcE5vbmNlKSB7XG4gICAgICAgICAgICAgICAgY3JlYXRlZFNjcmlwdEVsZW1lbnQubm9uY2UgPSB0aGlzLmNzcE5vbmNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY3JlYXRlZFNjcmlwdEVsZW1lbnQudGV4dENvbnRlbnQgPSBlbGVtZW50LnRleHRDb250ZW50O1xuICAgICAgICAgICAgY3JlYXRlZFNjcmlwdEVsZW1lbnQuYXN5bmMgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvcHlFbGVtZW50QXR0cmlidXRlcyhjcmVhdGVkU2NyaXB0RWxlbWVudCwgZWxlbWVudCk7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlZFNjcmlwdEVsZW1lbnQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHJlc2VydmluZ1Blcm1hbmVudEVsZW1lbnRzKGNhbGxiYWNrKSB7XG4gICAgICAgIEJhcmRvLnByZXNlcnZpbmdQZXJtYW5lbnRFbGVtZW50cyh0aGlzLnBlcm1hbmVudEVsZW1lbnRNYXAsIGNhbGxiYWNrKTtcbiAgICB9XG4gICAgZm9jdXNGaXJzdEF1dG9mb2N1c2FibGVFbGVtZW50KCkge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5jb25uZWN0ZWRTbmFwc2hvdC5maXJzdEF1dG9mb2N1c2FibGVFbGVtZW50O1xuICAgICAgICBpZiAoZWxlbWVudElzRm9jdXNhYmxlKGVsZW1lbnQpKSB7XG4gICAgICAgICAgICBlbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IGNvbm5lY3RlZFNuYXBzaG90KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5uZXdTbmFwc2hvdC5pc0Nvbm5lY3RlZCA/IHRoaXMubmV3U25hcHNob3QgOiB0aGlzLmN1cnJlbnRTbmFwc2hvdDtcbiAgICB9XG4gICAgZ2V0IGN1cnJlbnRFbGVtZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50U25hcHNob3QuZWxlbWVudDtcbiAgICB9XG4gICAgZ2V0IG5ld0VsZW1lbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5ld1NuYXBzaG90LmVsZW1lbnQ7XG4gICAgfVxuICAgIGdldCBwZXJtYW5lbnRFbGVtZW50TWFwKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50U25hcHNob3QuZ2V0UGVybWFuZW50RWxlbWVudE1hcEZvclNuYXBzaG90KHRoaXMubmV3U25hcHNob3QpO1xuICAgIH1cbiAgICBnZXQgY3NwTm9uY2UoKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmV0dXJuIChfYSA9IGRvY3VtZW50LmhlYWQucXVlcnlTZWxlY3RvcignbWV0YVtuYW1lPVwiY3NwLW5vbmNlXCJdJykpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5nZXRBdHRyaWJ1dGUoXCJjb250ZW50XCIpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGNvcHlFbGVtZW50QXR0cmlidXRlcyhkZXN0aW5hdGlvbkVsZW1lbnQsIHNvdXJjZUVsZW1lbnQpIHtcbiAgICBmb3IgKGNvbnN0IHsgbmFtZSwgdmFsdWUgfSBvZiBbLi4uc291cmNlRWxlbWVudC5hdHRyaWJ1dGVzXSkge1xuICAgICAgICBkZXN0aW5hdGlvbkVsZW1lbnQuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcbiAgICB9XG59XG5mdW5jdGlvbiBlbGVtZW50SXNGb2N1c2FibGUoZWxlbWVudCkge1xuICAgIHJldHVybiBlbGVtZW50ICYmIHR5cGVvZiBlbGVtZW50LmZvY3VzID09IFwiZnVuY3Rpb25cIjtcbn1cblxuY2xhc3MgRnJhbWVSZW5kZXJlciBleHRlbmRzIFJlbmRlcmVyIHtcbiAgICBnZXQgc2hvdWxkUmVuZGVyKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgYXN5bmMgcmVuZGVyKCkge1xuICAgICAgICBhd2FpdCBuZXh0QW5pbWF0aW9uRnJhbWUoKTtcbiAgICAgICAgdGhpcy5wcmVzZXJ2aW5nUGVybWFuZW50RWxlbWVudHMoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5sb2FkRnJhbWVFbGVtZW50KCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnNjcm9sbEZyYW1lSW50b1ZpZXcoKTtcbiAgICAgICAgYXdhaXQgbmV4dEFuaW1hdGlvbkZyYW1lKCk7XG4gICAgICAgIHRoaXMuZm9jdXNGaXJzdEF1dG9mb2N1c2FibGVFbGVtZW50KCk7XG4gICAgICAgIGF3YWl0IG5leHRBbmltYXRpb25GcmFtZSgpO1xuICAgICAgICB0aGlzLmFjdGl2YXRlU2NyaXB0RWxlbWVudHMoKTtcbiAgICB9XG4gICAgbG9hZEZyYW1lRWxlbWVudCgpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCBkZXN0aW5hdGlvblJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgICAgICAgZGVzdGluYXRpb25SYW5nZS5zZWxlY3ROb2RlQ29udGVudHModGhpcy5jdXJyZW50RWxlbWVudCk7XG4gICAgICAgIGRlc3RpbmF0aW9uUmFuZ2UuZGVsZXRlQ29udGVudHMoKTtcbiAgICAgICAgY29uc3QgZnJhbWVFbGVtZW50ID0gdGhpcy5uZXdFbGVtZW50O1xuICAgICAgICBjb25zdCBzb3VyY2VSYW5nZSA9IChfYSA9IGZyYW1lRWxlbWVudC5vd25lckRvY3VtZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY3JlYXRlUmFuZ2UoKTtcbiAgICAgICAgaWYgKHNvdXJjZVJhbmdlKSB7XG4gICAgICAgICAgICBzb3VyY2VSYW5nZS5zZWxlY3ROb2RlQ29udGVudHMoZnJhbWVFbGVtZW50KTtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoc291cmNlUmFuZ2UuZXh0cmFjdENvbnRlbnRzKCkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNjcm9sbEZyYW1lSW50b1ZpZXcoKSB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRFbGVtZW50LmF1dG9zY3JvbGwgfHwgdGhpcy5uZXdFbGVtZW50LmF1dG9zY3JvbGwpIHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmN1cnJlbnRFbGVtZW50LmZpcnN0RWxlbWVudENoaWxkO1xuICAgICAgICAgICAgY29uc3QgYmxvY2sgPSByZWFkU2Nyb2xsTG9naWNhbFBvc2l0aW9uKHRoaXMuY3VycmVudEVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiZGF0YS1hdXRvc2Nyb2xsLWJsb2NrXCIpLCBcImVuZFwiKTtcbiAgICAgICAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5zY3JvbGxJbnRvVmlldyh7IGJsb2NrIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgYWN0aXZhdGVTY3JpcHRFbGVtZW50cygpIHtcbiAgICAgICAgZm9yIChjb25zdCBpbmVydFNjcmlwdEVsZW1lbnQgb2YgdGhpcy5uZXdTY3JpcHRFbGVtZW50cykge1xuICAgICAgICAgICAgY29uc3QgYWN0aXZhdGVkU2NyaXB0RWxlbWVudCA9IHRoaXMuY3JlYXRlU2NyaXB0RWxlbWVudChpbmVydFNjcmlwdEVsZW1lbnQpO1xuICAgICAgICAgICAgaW5lcnRTY3JpcHRFbGVtZW50LnJlcGxhY2VXaXRoKGFjdGl2YXRlZFNjcmlwdEVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBuZXdTY3JpcHRFbGVtZW50cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudEVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcInNjcmlwdFwiKTtcbiAgICB9XG59XG5mdW5jdGlvbiByZWFkU2Nyb2xsTG9naWNhbFBvc2l0aW9uKHZhbHVlLCBkZWZhdWx0VmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT0gXCJlbmRcIiB8fCB2YWx1ZSA9PSBcInN0YXJ0XCIgfHwgdmFsdWUgPT0gXCJjZW50ZXJcIiB8fCB2YWx1ZSA9PSBcIm5lYXJlc3RcIikge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICAgIH1cbn1cblxuY2xhc3MgUHJvZ3Jlc3NCYXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmhpZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnZhbHVlID0gMDtcbiAgICAgICAgdGhpcy52aXNpYmxlID0gZmFsc2U7XG4gICAgICAgIHRoaXMudHJpY2tsZSA9ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUodGhpcy52YWx1ZSArIE1hdGgucmFuZG9tKCkgLyAxMDApO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLnN0eWxlc2hlZXRFbGVtZW50ID0gdGhpcy5jcmVhdGVTdHlsZXNoZWV0RWxlbWVudCgpO1xuICAgICAgICB0aGlzLnByb2dyZXNzRWxlbWVudCA9IHRoaXMuY3JlYXRlUHJvZ3Jlc3NFbGVtZW50KCk7XG4gICAgICAgIHRoaXMuaW5zdGFsbFN0eWxlc2hlZXRFbGVtZW50KCk7XG4gICAgICAgIHRoaXMuc2V0VmFsdWUoMCk7XG4gICAgfVxuICAgIHN0YXRpYyBnZXQgZGVmYXVsdENTUygpIHtcbiAgICAgICAgcmV0dXJuIHVuaW5kZW50IGBcbiAgICAgIC50dXJiby1wcm9ncmVzcy1iYXIge1xuICAgICAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICB0b3A6IDA7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIGhlaWdodDogM3B4O1xuICAgICAgICBiYWNrZ3JvdW5kOiAjMDA3NmZmO1xuICAgICAgICB6LWluZGV4OiA5OTk5O1xuICAgICAgICB0cmFuc2l0aW9uOlxuICAgICAgICAgIHdpZHRoICR7UHJvZ3Jlc3NCYXIuYW5pbWF0aW9uRHVyYXRpb259bXMgZWFzZS1vdXQsXG4gICAgICAgICAgb3BhY2l0eSAke1Byb2dyZXNzQmFyLmFuaW1hdGlvbkR1cmF0aW9uIC8gMn1tcyAke1Byb2dyZXNzQmFyLmFuaW1hdGlvbkR1cmF0aW9uIC8gMn1tcyBlYXNlLWluO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIDAsIDApO1xuICAgICAgfVxuICAgIGA7XG4gICAgfVxuICAgIHNob3coKSB7XG4gICAgICAgIGlmICghdGhpcy52aXNpYmxlKSB7XG4gICAgICAgICAgICB0aGlzLnZpc2libGUgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5pbnN0YWxsUHJvZ3Jlc3NFbGVtZW50KCk7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0VHJpY2tsaW5nKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaGlkZSgpIHtcbiAgICAgICAgaWYgKHRoaXMudmlzaWJsZSAmJiAhdGhpcy5oaWRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuaGlkaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuZmFkZVByb2dyZXNzRWxlbWVudCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy51bmluc3RhbGxQcm9ncmVzc0VsZW1lbnQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3BUcmlja2xpbmcoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmhpZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2V0VmFsdWUodmFsdWUpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG4gICAgaW5zdGFsbFN0eWxlc2hlZXRFbGVtZW50KCkge1xuICAgICAgICBkb2N1bWVudC5oZWFkLmluc2VydEJlZm9yZSh0aGlzLnN0eWxlc2hlZXRFbGVtZW50LCBkb2N1bWVudC5oZWFkLmZpcnN0Q2hpbGQpO1xuICAgIH1cbiAgICBpbnN0YWxsUHJvZ3Jlc3NFbGVtZW50KCkge1xuICAgICAgICB0aGlzLnByb2dyZXNzRWxlbWVudC5zdHlsZS53aWR0aCA9IFwiMFwiO1xuICAgICAgICB0aGlzLnByb2dyZXNzRWxlbWVudC5zdHlsZS5vcGFjaXR5ID0gXCIxXCI7XG4gICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5pbnNlcnRCZWZvcmUodGhpcy5wcm9ncmVzc0VsZW1lbnQsIGRvY3VtZW50LmJvZHkpO1xuICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG4gICAgZmFkZVByb2dyZXNzRWxlbWVudChjYWxsYmFjaykge1xuICAgICAgICB0aGlzLnByb2dyZXNzRWxlbWVudC5zdHlsZS5vcGFjaXR5ID0gXCIwXCI7XG4gICAgICAgIHNldFRpbWVvdXQoY2FsbGJhY2ssIFByb2dyZXNzQmFyLmFuaW1hdGlvbkR1cmF0aW9uICogMS41KTtcbiAgICB9XG4gICAgdW5pbnN0YWxsUHJvZ3Jlc3NFbGVtZW50KCkge1xuICAgICAgICBpZiAodGhpcy5wcm9ncmVzc0VsZW1lbnQucGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnJlbW92ZUNoaWxkKHRoaXMucHJvZ3Jlc3NFbGVtZW50KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGFydFRyaWNrbGluZygpIHtcbiAgICAgICAgaWYgKCF0aGlzLnRyaWNrbGVJbnRlcnZhbCkge1xuICAgICAgICAgICAgdGhpcy50cmlja2xlSW50ZXJ2YWwgPSB3aW5kb3cuc2V0SW50ZXJ2YWwodGhpcy50cmlja2xlLCBQcm9ncmVzc0Jhci5hbmltYXRpb25EdXJhdGlvbik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RvcFRyaWNrbGluZygpIHtcbiAgICAgICAgd2luZG93LmNsZWFySW50ZXJ2YWwodGhpcy50cmlja2xlSW50ZXJ2YWwpO1xuICAgICAgICBkZWxldGUgdGhpcy50cmlja2xlSW50ZXJ2YWw7XG4gICAgfVxuICAgIHJlZnJlc2goKSB7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnByb2dyZXNzRWxlbWVudC5zdHlsZS53aWR0aCA9IGAkezEwICsgKHRoaXMudmFsdWUgKiA5MCl9JWA7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjcmVhdGVTdHlsZXNoZWV0RWxlbWVudCgpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcbiAgICAgICAgZWxlbWVudC50eXBlID0gXCJ0ZXh0L2Nzc1wiO1xuICAgICAgICBlbGVtZW50LnRleHRDb250ZW50ID0gUHJvZ3Jlc3NCYXIuZGVmYXVsdENTUztcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfVxuICAgIGNyZWF0ZVByb2dyZXNzRWxlbWVudCgpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgIGVsZW1lbnQuY2xhc3NOYW1lID0gXCJ0dXJiby1wcm9ncmVzcy1iYXJcIjtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfVxufVxuUHJvZ3Jlc3NCYXIuYW5pbWF0aW9uRHVyYXRpb24gPSAzMDA7XG5cbmNsYXNzIEhlYWRTbmFwc2hvdCBleHRlbmRzIFNuYXBzaG90IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5kZXRhaWxzQnlPdXRlckhUTUwgPSB0aGlzLmNoaWxkcmVuXG4gICAgICAgICAgICAuZmlsdGVyKChlbGVtZW50KSA9PiAhZWxlbWVudElzTm9zY3JpcHQoZWxlbWVudCkpXG4gICAgICAgICAgICAucmVkdWNlKChyZXN1bHQsIGVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgb3V0ZXJIVE1MIH0gPSBlbGVtZW50O1xuICAgICAgICAgICAgY29uc3QgZGV0YWlscyA9IG91dGVySFRNTCBpbiByZXN1bHRcbiAgICAgICAgICAgICAgICA/IHJlc3VsdFtvdXRlckhUTUxdXG4gICAgICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IGVsZW1lbnRUeXBlKGVsZW1lbnQpLFxuICAgICAgICAgICAgICAgICAgICB0cmFja2VkOiBlbGVtZW50SXNUcmFja2VkKGVsZW1lbnQpLFxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50czogW11cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcmVzdWx0KSwgeyBbb3V0ZXJIVE1MXTogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBkZXRhaWxzKSwgeyBlbGVtZW50czogWy4uLmRldGFpbHMuZWxlbWVudHMsIGVsZW1lbnRdIH0pIH0pO1xuICAgICAgICB9LCB7fSk7XG4gICAgfVxuICAgIGdldCB0cmFja2VkRWxlbWVudFNpZ25hdHVyZSgpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuZGV0YWlsc0J5T3V0ZXJIVE1MKVxuICAgICAgICAgICAgLmZpbHRlcihvdXRlckhUTUwgPT4gdGhpcy5kZXRhaWxzQnlPdXRlckhUTUxbb3V0ZXJIVE1MXS50cmFja2VkKVxuICAgICAgICAgICAgLmpvaW4oXCJcIik7XG4gICAgfVxuICAgIGdldFNjcmlwdEVsZW1lbnRzTm90SW5TbmFwc2hvdChzbmFwc2hvdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRFbGVtZW50c01hdGNoaW5nVHlwZU5vdEluU25hcHNob3QoXCJzY3JpcHRcIiwgc25hcHNob3QpO1xuICAgIH1cbiAgICBnZXRTdHlsZXNoZWV0RWxlbWVudHNOb3RJblNuYXBzaG90KHNuYXBzaG90KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEVsZW1lbnRzTWF0Y2hpbmdUeXBlTm90SW5TbmFwc2hvdChcInN0eWxlc2hlZXRcIiwgc25hcHNob3QpO1xuICAgIH1cbiAgICBnZXRFbGVtZW50c01hdGNoaW5nVHlwZU5vdEluU25hcHNob3QobWF0Y2hlZFR5cGUsIHNuYXBzaG90KSB7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmRldGFpbHNCeU91dGVySFRNTClcbiAgICAgICAgICAgIC5maWx0ZXIob3V0ZXJIVE1MID0+ICEob3V0ZXJIVE1MIGluIHNuYXBzaG90LmRldGFpbHNCeU91dGVySFRNTCkpXG4gICAgICAgICAgICAubWFwKG91dGVySFRNTCA9PiB0aGlzLmRldGFpbHNCeU91dGVySFRNTFtvdXRlckhUTUxdKVxuICAgICAgICAgICAgLmZpbHRlcigoeyB0eXBlIH0pID0+IHR5cGUgPT0gbWF0Y2hlZFR5cGUpXG4gICAgICAgICAgICAubWFwKCh7IGVsZW1lbnRzOiBbZWxlbWVudF0gfSkgPT4gZWxlbWVudCk7XG4gICAgfVxuICAgIGdldCBwcm92aXNpb25hbEVsZW1lbnRzKCkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5kZXRhaWxzQnlPdXRlckhUTUwpLnJlZHVjZSgocmVzdWx0LCBvdXRlckhUTUwpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgdHlwZSwgdHJhY2tlZCwgZWxlbWVudHMgfSA9IHRoaXMuZGV0YWlsc0J5T3V0ZXJIVE1MW291dGVySFRNTF07XG4gICAgICAgICAgICBpZiAodHlwZSA9PSBudWxsICYmICF0cmFja2VkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFsuLi5yZXN1bHQsIC4uLmVsZW1lbnRzXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGVsZW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gWy4uLnJlc3VsdCwgLi4uZWxlbWVudHMuc2xpY2UoMSldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgW10pO1xuICAgIH1cbiAgICBnZXRNZXRhVmFsdWUobmFtZSkge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5maW5kTWV0YUVsZW1lbnRCeU5hbWUobmFtZSk7XG4gICAgICAgIHJldHVybiBlbGVtZW50XG4gICAgICAgICAgICA/IGVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiY29udGVudFwiKVxuICAgICAgICAgICAgOiBudWxsO1xuICAgIH1cbiAgICBmaW5kTWV0YUVsZW1lbnRCeU5hbWUobmFtZSkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5kZXRhaWxzQnlPdXRlckhUTUwpLnJlZHVjZSgocmVzdWx0LCBvdXRlckhUTUwpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgZWxlbWVudHM6IFtlbGVtZW50XSB9ID0gdGhpcy5kZXRhaWxzQnlPdXRlckhUTUxbb3V0ZXJIVE1MXTtcbiAgICAgICAgICAgIHJldHVybiBlbGVtZW50SXNNZXRhRWxlbWVudFdpdGhOYW1lKGVsZW1lbnQsIG5hbWUpID8gZWxlbWVudCA6IHJlc3VsdDtcbiAgICAgICAgfSwgdW5kZWZpbmVkKTtcbiAgICB9XG59XG5mdW5jdGlvbiBlbGVtZW50VHlwZShlbGVtZW50KSB7XG4gICAgaWYgKGVsZW1lbnRJc1NjcmlwdChlbGVtZW50KSkge1xuICAgICAgICByZXR1cm4gXCJzY3JpcHRcIjtcbiAgICB9XG4gICAgZWxzZSBpZiAoZWxlbWVudElzU3R5bGVzaGVldChlbGVtZW50KSkge1xuICAgICAgICByZXR1cm4gXCJzdHlsZXNoZWV0XCI7XG4gICAgfVxufVxuZnVuY3Rpb24gZWxlbWVudElzVHJhY2tlZChlbGVtZW50KSB7XG4gICAgcmV0dXJuIGVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiZGF0YS10dXJiby10cmFja1wiKSA9PSBcInJlbG9hZFwiO1xufVxuZnVuY3Rpb24gZWxlbWVudElzU2NyaXB0KGVsZW1lbnQpIHtcbiAgICBjb25zdCB0YWdOYW1lID0gZWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgcmV0dXJuIHRhZ05hbWUgPT0gXCJzY3JpcHRcIjtcbn1cbmZ1bmN0aW9uIGVsZW1lbnRJc05vc2NyaXB0KGVsZW1lbnQpIHtcbiAgICBjb25zdCB0YWdOYW1lID0gZWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgcmV0dXJuIHRhZ05hbWUgPT0gXCJub3NjcmlwdFwiO1xufVxuZnVuY3Rpb24gZWxlbWVudElzU3R5bGVzaGVldChlbGVtZW50KSB7XG4gICAgY29uc3QgdGFnTmFtZSA9IGVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiB0YWdOYW1lID09IFwic3R5bGVcIiB8fCAodGFnTmFtZSA9PSBcImxpbmtcIiAmJiBlbGVtZW50LmdldEF0dHJpYnV0ZShcInJlbFwiKSA9PSBcInN0eWxlc2hlZXRcIik7XG59XG5mdW5jdGlvbiBlbGVtZW50SXNNZXRhRWxlbWVudFdpdGhOYW1lKGVsZW1lbnQsIG5hbWUpIHtcbiAgICBjb25zdCB0YWdOYW1lID0gZWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgcmV0dXJuIHRhZ05hbWUgPT0gXCJtZXRhXCIgJiYgZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJuYW1lXCIpID09IG5hbWU7XG59XG5cbmNsYXNzIFBhZ2VTbmFwc2hvdCBleHRlbmRzIFNuYXBzaG90IHtcbiAgICBjb25zdHJ1Y3RvcihlbGVtZW50LCBoZWFkU25hcHNob3QpIHtcbiAgICAgICAgc3VwZXIoZWxlbWVudCk7XG4gICAgICAgIHRoaXMuaGVhZFNuYXBzaG90ID0gaGVhZFNuYXBzaG90O1xuICAgIH1cbiAgICBzdGF0aWMgZnJvbUhUTUxTdHJpbmcoaHRtbCA9IFwiXCIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZnJvbURvY3VtZW50KHBhcnNlSFRNTERvY3VtZW50KGh0bWwpKTtcbiAgICB9XG4gICAgc3RhdGljIGZyb21FbGVtZW50KGVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZnJvbURvY3VtZW50KGVsZW1lbnQub3duZXJEb2N1bWVudCk7XG4gICAgfVxuICAgIHN0YXRpYyBmcm9tRG9jdW1lbnQoeyBoZWFkLCBib2R5IH0pIHtcbiAgICAgICAgcmV0dXJuIG5ldyB0aGlzKGJvZHksIG5ldyBIZWFkU25hcHNob3QoaGVhZCkpO1xuICAgIH1cbiAgICBjbG9uZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQYWdlU25hcHNob3QodGhpcy5lbGVtZW50LmNsb25lTm9kZSh0cnVlKSwgdGhpcy5oZWFkU25hcHNob3QpO1xuICAgIH1cbiAgICBnZXQgaGVhZEVsZW1lbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhlYWRTbmFwc2hvdC5lbGVtZW50O1xuICAgIH1cbiAgICBnZXQgcm9vdExvY2F0aW9uKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IHJvb3QgPSAoX2EgPSB0aGlzLmdldFNldHRpbmcoXCJyb290XCIpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBcIi9cIjtcbiAgICAgICAgcmV0dXJuIGV4cGFuZFVSTChyb290KTtcbiAgICB9XG4gICAgZ2V0IGNhY2hlQ29udHJvbFZhbHVlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRTZXR0aW5nKFwiY2FjaGUtY29udHJvbFwiKTtcbiAgICB9XG4gICAgZ2V0IGlzUHJldmlld2FibGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhY2hlQ29udHJvbFZhbHVlICE9IFwibm8tcHJldmlld1wiO1xuICAgIH1cbiAgICBnZXQgaXNDYWNoZWFibGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhY2hlQ29udHJvbFZhbHVlICE9IFwibm8tY2FjaGVcIjtcbiAgICB9XG4gICAgZ2V0IGlzVmlzaXRhYmxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRTZXR0aW5nKFwidmlzaXQtY29udHJvbFwiKSAhPSBcInJlbG9hZFwiO1xuICAgIH1cbiAgICBnZXRTZXR0aW5nKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGVhZFNuYXBzaG90LmdldE1ldGFWYWx1ZShgdHVyYm8tJHtuYW1lfWApO1xuICAgIH1cbn1cblxudmFyIFRpbWluZ01ldHJpYztcbihmdW5jdGlvbiAoVGltaW5nTWV0cmljKSB7XG4gICAgVGltaW5nTWV0cmljW1widmlzaXRTdGFydFwiXSA9IFwidmlzaXRTdGFydFwiO1xuICAgIFRpbWluZ01ldHJpY1tcInJlcXVlc3RTdGFydFwiXSA9IFwicmVxdWVzdFN0YXJ0XCI7XG4gICAgVGltaW5nTWV0cmljW1wicmVxdWVzdEVuZFwiXSA9IFwicmVxdWVzdEVuZFwiO1xuICAgIFRpbWluZ01ldHJpY1tcInZpc2l0RW5kXCJdID0gXCJ2aXNpdEVuZFwiO1xufSkoVGltaW5nTWV0cmljIHx8IChUaW1pbmdNZXRyaWMgPSB7fSkpO1xudmFyIFZpc2l0U3RhdGU7XG4oZnVuY3Rpb24gKFZpc2l0U3RhdGUpIHtcbiAgICBWaXNpdFN0YXRlW1wiaW5pdGlhbGl6ZWRcIl0gPSBcImluaXRpYWxpemVkXCI7XG4gICAgVmlzaXRTdGF0ZVtcInN0YXJ0ZWRcIl0gPSBcInN0YXJ0ZWRcIjtcbiAgICBWaXNpdFN0YXRlW1wiY2FuY2VsZWRcIl0gPSBcImNhbmNlbGVkXCI7XG4gICAgVmlzaXRTdGF0ZVtcImZhaWxlZFwiXSA9IFwiZmFpbGVkXCI7XG4gICAgVmlzaXRTdGF0ZVtcImNvbXBsZXRlZFwiXSA9IFwiY29tcGxldGVkXCI7XG59KShWaXNpdFN0YXRlIHx8IChWaXNpdFN0YXRlID0ge30pKTtcbmNvbnN0IGRlZmF1bHRPcHRpb25zID0ge1xuICAgIGFjdGlvbjogXCJhZHZhbmNlXCIsXG4gICAgaGlzdG9yeUNoYW5nZWQ6IGZhbHNlXG59O1xudmFyIFN5c3RlbVN0YXR1c0NvZGU7XG4oZnVuY3Rpb24gKFN5c3RlbVN0YXR1c0NvZGUpIHtcbiAgICBTeXN0ZW1TdGF0dXNDb2RlW1N5c3RlbVN0YXR1c0NvZGVbXCJuZXR3b3JrRmFpbHVyZVwiXSA9IDBdID0gXCJuZXR3b3JrRmFpbHVyZVwiO1xuICAgIFN5c3RlbVN0YXR1c0NvZGVbU3lzdGVtU3RhdHVzQ29kZVtcInRpbWVvdXRGYWlsdXJlXCJdID0gLTFdID0gXCJ0aW1lb3V0RmFpbHVyZVwiO1xuICAgIFN5c3RlbVN0YXR1c0NvZGVbU3lzdGVtU3RhdHVzQ29kZVtcImNvbnRlbnRUeXBlTWlzbWF0Y2hcIl0gPSAtMl0gPSBcImNvbnRlbnRUeXBlTWlzbWF0Y2hcIjtcbn0pKFN5c3RlbVN0YXR1c0NvZGUgfHwgKFN5c3RlbVN0YXR1c0NvZGUgPSB7fSkpO1xuY2xhc3MgVmlzaXQge1xuICAgIGNvbnN0cnVjdG9yKGRlbGVnYXRlLCBsb2NhdGlvbiwgcmVzdG9yYXRpb25JZGVudGlmaWVyLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgdGhpcy5pZGVudGlmaWVyID0gdXVpZCgpO1xuICAgICAgICB0aGlzLnRpbWluZ01ldHJpY3MgPSB7fTtcbiAgICAgICAgdGhpcy5mb2xsb3dlZFJlZGlyZWN0ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaGlzdG9yeUNoYW5nZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zY3JvbGxlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNuYXBzaG90Q2FjaGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3RhdGUgPSBWaXNpdFN0YXRlLmluaXRpYWxpemVkO1xuICAgICAgICB0aGlzLmRlbGVnYXRlID0gZGVsZWdhdGU7XG4gICAgICAgIHRoaXMubG9jYXRpb24gPSBsb2NhdGlvbjtcbiAgICAgICAgdGhpcy5yZXN0b3JhdGlvbklkZW50aWZpZXIgPSByZXN0b3JhdGlvbklkZW50aWZpZXIgfHwgdXVpZCgpO1xuICAgICAgICBjb25zdCB7IGFjdGlvbiwgaGlzdG9yeUNoYW5nZWQsIHJlZmVycmVyLCBzbmFwc2hvdEhUTUwsIHJlc3BvbnNlIH0gPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRPcHRpb25zKSwgb3B0aW9ucyk7XG4gICAgICAgIHRoaXMuYWN0aW9uID0gYWN0aW9uO1xuICAgICAgICB0aGlzLmhpc3RvcnlDaGFuZ2VkID0gaGlzdG9yeUNoYW5nZWQ7XG4gICAgICAgIHRoaXMucmVmZXJyZXIgPSByZWZlcnJlcjtcbiAgICAgICAgdGhpcy5zbmFwc2hvdEhUTUwgPSBzbmFwc2hvdEhUTUw7XG4gICAgICAgIHRoaXMucmVzcG9uc2UgPSByZXNwb25zZTtcbiAgICAgICAgdGhpcy5pc1NhbWVQYWdlID0gdGhpcy5kZWxlZ2F0ZS5sb2NhdGlvbldpdGhBY3Rpb25Jc1NhbWVQYWdlKHRoaXMubG9jYXRpb24sIHRoaXMuYWN0aW9uKTtcbiAgICB9XG4gICAgZ2V0IGFkYXB0ZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLmFkYXB0ZXI7XG4gICAgfVxuICAgIGdldCB2aWV3KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS52aWV3O1xuICAgIH1cbiAgICBnZXQgaGlzdG9yeSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUuaGlzdG9yeTtcbiAgICB9XG4gICAgZ2V0IHJlc3RvcmF0aW9uRGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGlzdG9yeS5nZXRSZXN0b3JhdGlvbkRhdGFGb3JJZGVudGlmaWVyKHRoaXMucmVzdG9yYXRpb25JZGVudGlmaWVyKTtcbiAgICB9XG4gICAgZ2V0IHNpbGVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNTYW1lUGFnZTtcbiAgICB9XG4gICAgc3RhcnQoKSB7XG4gICAgICAgIGlmICh0aGlzLnN0YXRlID09IFZpc2l0U3RhdGUuaW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICAgIHRoaXMucmVjb3JkVGltaW5nTWV0cmljKFRpbWluZ01ldHJpYy52aXNpdFN0YXJ0KTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBWaXNpdFN0YXRlLnN0YXJ0ZWQ7XG4gICAgICAgICAgICB0aGlzLmFkYXB0ZXIudmlzaXRTdGFydGVkKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5kZWxlZ2F0ZS52aXNpdFN0YXJ0ZWQodGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2FuY2VsKCkge1xuICAgICAgICBpZiAodGhpcy5zdGF0ZSA9PSBWaXNpdFN0YXRlLnN0YXJ0ZWQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnJlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlcXVlc3QuY2FuY2VsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNhbmNlbFJlbmRlcigpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFZpc2l0U3RhdGUuY2FuY2VsZWQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29tcGxldGUoKSB7XG4gICAgICAgIGlmICh0aGlzLnN0YXRlID09IFZpc2l0U3RhdGUuc3RhcnRlZCkge1xuICAgICAgICAgICAgdGhpcy5yZWNvcmRUaW1pbmdNZXRyaWMoVGltaW5nTWV0cmljLnZpc2l0RW5kKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBWaXNpdFN0YXRlLmNvbXBsZXRlZDtcbiAgICAgICAgICAgIHRoaXMuYWRhcHRlci52aXNpdENvbXBsZXRlZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZGVsZWdhdGUudmlzaXRDb21wbGV0ZWQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmZvbGxvd1JlZGlyZWN0KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZmFpbCgpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUgPT0gVmlzaXRTdGF0ZS5zdGFydGVkKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gVmlzaXRTdGF0ZS5mYWlsZWQ7XG4gICAgICAgICAgICB0aGlzLmFkYXB0ZXIudmlzaXRGYWlsZWQodGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2hhbmdlSGlzdG9yeSgpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoIXRoaXMuaGlzdG9yeUNoYW5nZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbkZvckhpc3RvcnkgPSB0aGlzLmxvY2F0aW9uLmhyZWYgPT09ICgoX2EgPSB0aGlzLnJlZmVycmVyKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuaHJlZikgPyBcInJlcGxhY2VcIiA6IHRoaXMuYWN0aW9uO1xuICAgICAgICAgICAgY29uc3QgbWV0aG9kID0gdGhpcy5nZXRIaXN0b3J5TWV0aG9kRm9yQWN0aW9uKGFjdGlvbkZvckhpc3RvcnkpO1xuICAgICAgICAgICAgdGhpcy5oaXN0b3J5LnVwZGF0ZShtZXRob2QsIHRoaXMubG9jYXRpb24sIHRoaXMucmVzdG9yYXRpb25JZGVudGlmaWVyKTtcbiAgICAgICAgICAgIHRoaXMuaGlzdG9yeUNoYW5nZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlzc3VlUmVxdWVzdCgpIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzUHJlbG9hZGVkUmVzcG9uc2UoKSkge1xuICAgICAgICAgICAgdGhpcy5zaW11bGF0ZVJlcXVlc3QoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLnNob3VsZElzc3VlUmVxdWVzdCgpICYmICF0aGlzLnJlcXVlc3QpIHtcbiAgICAgICAgICAgIHRoaXMucmVxdWVzdCA9IG5ldyBGZXRjaFJlcXVlc3QodGhpcywgRmV0Y2hNZXRob2QuZ2V0LCB0aGlzLmxvY2F0aW9uKTtcbiAgICAgICAgICAgIHRoaXMucmVxdWVzdC5wZXJmb3JtKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2ltdWxhdGVSZXF1ZXN0KCkge1xuICAgICAgICBpZiAodGhpcy5yZXNwb25zZSkge1xuICAgICAgICAgICAgdGhpcy5zdGFydFJlcXVlc3QoKTtcbiAgICAgICAgICAgIHRoaXMucmVjb3JkUmVzcG9uc2UoKTtcbiAgICAgICAgICAgIHRoaXMuZmluaXNoUmVxdWVzdCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXJ0UmVxdWVzdCgpIHtcbiAgICAgICAgdGhpcy5yZWNvcmRUaW1pbmdNZXRyaWMoVGltaW5nTWV0cmljLnJlcXVlc3RTdGFydCk7XG4gICAgICAgIHRoaXMuYWRhcHRlci52aXNpdFJlcXVlc3RTdGFydGVkKHRoaXMpO1xuICAgIH1cbiAgICByZWNvcmRSZXNwb25zZShyZXNwb25zZSA9IHRoaXMucmVzcG9uc2UpIHtcbiAgICAgICAgdGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlO1xuICAgICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgc3RhdHVzQ29kZSB9ID0gcmVzcG9uc2U7XG4gICAgICAgICAgICBpZiAoaXNTdWNjZXNzZnVsKHN0YXR1c0NvZGUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGFwdGVyLnZpc2l0UmVxdWVzdENvbXBsZXRlZCh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRhcHRlci52aXNpdFJlcXVlc3RGYWlsZWRXaXRoU3RhdHVzQ29kZSh0aGlzLCBzdGF0dXNDb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBmaW5pc2hSZXF1ZXN0KCkge1xuICAgICAgICB0aGlzLnJlY29yZFRpbWluZ01ldHJpYyhUaW1pbmdNZXRyaWMucmVxdWVzdEVuZCk7XG4gICAgICAgIHRoaXMuYWRhcHRlci52aXNpdFJlcXVlc3RGaW5pc2hlZCh0aGlzKTtcbiAgICB9XG4gICAgbG9hZFJlc3BvbnNlKCkge1xuICAgICAgICBpZiAodGhpcy5yZXNwb25zZSkge1xuICAgICAgICAgICAgY29uc3QgeyBzdGF0dXNDb2RlLCByZXNwb25zZUhUTUwgfSA9IHRoaXMucmVzcG9uc2U7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcihhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWNoZVNuYXBzaG90KCk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudmlldy5yZW5kZXJQcm9taXNlKVxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnZpZXcucmVuZGVyUHJvbWlzZTtcbiAgICAgICAgICAgICAgICBpZiAoaXNTdWNjZXNzZnVsKHN0YXR1c0NvZGUpICYmIHJlc3BvbnNlSFRNTCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMudmlldy5yZW5kZXJQYWdlKFBhZ2VTbmFwc2hvdC5mcm9tSFRNTFN0cmluZyhyZXNwb25zZUhUTUwpKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGFwdGVyLnZpc2l0UmVuZGVyZWQodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMudmlldy5yZW5kZXJFcnJvcihQYWdlU25hcHNob3QuZnJvbUhUTUxTdHJpbmcocmVzcG9uc2VIVE1MKSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRhcHRlci52aXNpdFJlbmRlcmVkKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZhaWwoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXRDYWNoZWRTbmFwc2hvdCgpIHtcbiAgICAgICAgY29uc3Qgc25hcHNob3QgPSB0aGlzLnZpZXcuZ2V0Q2FjaGVkU25hcHNob3RGb3JMb2NhdGlvbih0aGlzLmxvY2F0aW9uKSB8fCB0aGlzLmdldFByZWxvYWRlZFNuYXBzaG90KCk7XG4gICAgICAgIGlmIChzbmFwc2hvdCAmJiAoIWdldEFuY2hvcih0aGlzLmxvY2F0aW9uKSB8fCBzbmFwc2hvdC5oYXNBbmNob3IoZ2V0QW5jaG9yKHRoaXMubG9jYXRpb24pKSkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmFjdGlvbiA9PSBcInJlc3RvcmVcIiB8fCBzbmFwc2hvdC5pc1ByZXZpZXdhYmxlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNuYXBzaG90O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGdldFByZWxvYWRlZFNuYXBzaG90KCkge1xuICAgICAgICBpZiAodGhpcy5zbmFwc2hvdEhUTUwpIHtcbiAgICAgICAgICAgIHJldHVybiBQYWdlU25hcHNob3QuZnJvbUhUTUxTdHJpbmcodGhpcy5zbmFwc2hvdEhUTUwpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGhhc0NhY2hlZFNuYXBzaG90KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRDYWNoZWRTbmFwc2hvdCgpICE9IG51bGw7XG4gICAgfVxuICAgIGxvYWRDYWNoZWRTbmFwc2hvdCgpIHtcbiAgICAgICAgY29uc3Qgc25hcHNob3QgPSB0aGlzLmdldENhY2hlZFNuYXBzaG90KCk7XG4gICAgICAgIGlmIChzbmFwc2hvdCkge1xuICAgICAgICAgICAgY29uc3QgaXNQcmV2aWV3ID0gdGhpcy5zaG91bGRJc3N1ZVJlcXVlc3QoKTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhY2hlU25hcHNob3QoKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1NhbWVQYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRhcHRlci52aXNpdFJlbmRlcmVkKHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudmlldy5yZW5kZXJQcm9taXNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy52aWV3LnJlbmRlclByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMudmlldy5yZW5kZXJQYWdlKHNuYXBzaG90LCBpc1ByZXZpZXcpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkYXB0ZXIudmlzaXRSZW5kZXJlZCh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1ByZXZpZXcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZvbGxvd1JlZGlyZWN0KCkge1xuICAgICAgICBpZiAodGhpcy5yZWRpcmVjdGVkVG9Mb2NhdGlvbiAmJiAhdGhpcy5mb2xsb3dlZFJlZGlyZWN0KSB7XG4gICAgICAgICAgICB0aGlzLmFkYXB0ZXIudmlzaXRQcm9wb3NlZFRvTG9jYXRpb24odGhpcy5yZWRpcmVjdGVkVG9Mb2NhdGlvbiwge1xuICAgICAgICAgICAgICAgIGFjdGlvbjogJ3JlcGxhY2UnLFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlOiB0aGlzLnJlc3BvbnNlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuZm9sbG93ZWRSZWRpcmVjdCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ29Ub1NhbWVQYWdlQW5jaG9yKCkge1xuICAgICAgICBpZiAodGhpcy5pc1NhbWVQYWdlKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcihhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWNoZVNuYXBzaG90KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGFwdGVyLnZpc2l0UmVuZGVyZWQodGhpcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXF1ZXN0U3RhcnRlZCgpIHtcbiAgICAgICAgdGhpcy5zdGFydFJlcXVlc3QoKTtcbiAgICB9XG4gICAgcmVxdWVzdFByZXZlbnRlZEhhbmRsaW5nUmVzcG9uc2UocmVxdWVzdCwgcmVzcG9uc2UpIHtcbiAgICB9XG4gICAgYXN5bmMgcmVxdWVzdFN1Y2NlZWRlZFdpdGhSZXNwb25zZShyZXF1ZXN0LCByZXNwb25zZSkge1xuICAgICAgICBjb25zdCByZXNwb25zZUhUTUwgPSBhd2FpdCByZXNwb25zZS5yZXNwb25zZUhUTUw7XG4gICAgICAgIGlmIChyZXNwb25zZUhUTUwgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLnJlY29yZFJlc3BvbnNlKHsgc3RhdHVzQ29kZTogU3lzdGVtU3RhdHVzQ29kZS5jb250ZW50VHlwZU1pc21hdGNoIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZWRpcmVjdGVkVG9Mb2NhdGlvbiA9IHJlc3BvbnNlLnJlZGlyZWN0ZWQgPyByZXNwb25zZS5sb2NhdGlvbiA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMucmVjb3JkUmVzcG9uc2UoeyBzdGF0dXNDb2RlOiByZXNwb25zZS5zdGF0dXNDb2RlLCByZXNwb25zZUhUTUwgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgcmVxdWVzdEZhaWxlZFdpdGhSZXNwb25zZShyZXF1ZXN0LCByZXNwb25zZSkge1xuICAgICAgICBjb25zdCByZXNwb25zZUhUTUwgPSBhd2FpdCByZXNwb25zZS5yZXNwb25zZUhUTUw7XG4gICAgICAgIGlmIChyZXNwb25zZUhUTUwgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLnJlY29yZFJlc3BvbnNlKHsgc3RhdHVzQ29kZTogU3lzdGVtU3RhdHVzQ29kZS5jb250ZW50VHlwZU1pc21hdGNoIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZWNvcmRSZXNwb25zZSh7IHN0YXR1c0NvZGU6IHJlc3BvbnNlLnN0YXR1c0NvZGUsIHJlc3BvbnNlSFRNTCB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXF1ZXN0RXJyb3JlZChyZXF1ZXN0LCBlcnJvcikge1xuICAgICAgICB0aGlzLnJlY29yZFJlc3BvbnNlKHsgc3RhdHVzQ29kZTogU3lzdGVtU3RhdHVzQ29kZS5uZXR3b3JrRmFpbHVyZSB9KTtcbiAgICB9XG4gICAgcmVxdWVzdEZpbmlzaGVkKCkge1xuICAgICAgICB0aGlzLmZpbmlzaFJlcXVlc3QoKTtcbiAgICB9XG4gICAgcGVyZm9ybVNjcm9sbCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnNjcm9sbGVkKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5hY3Rpb24gPT0gXCJyZXN0b3JlXCIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvUmVzdG9yZWRQb3NpdGlvbigpIHx8IHRoaXMuc2Nyb2xsVG9BbmNob3IoKSB8fCB0aGlzLnZpZXcuc2Nyb2xsVG9Ub3AoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BbmNob3IoKSB8fCB0aGlzLnZpZXcuc2Nyb2xsVG9Ub3AoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmlzU2FtZVBhZ2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlbGVnYXRlLnZpc2l0U2Nyb2xsZWRUb1NhbWVQYWdlTG9jYXRpb24odGhpcy52aWV3Lmxhc3RSZW5kZXJlZExvY2F0aW9uLCB0aGlzLmxvY2F0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNjcm9sbFRvUmVzdG9yZWRQb3NpdGlvbigpIHtcbiAgICAgICAgY29uc3QgeyBzY3JvbGxQb3NpdGlvbiB9ID0gdGhpcy5yZXN0b3JhdGlvbkRhdGE7XG4gICAgICAgIGlmIChzY3JvbGxQb3NpdGlvbikge1xuICAgICAgICAgICAgdGhpcy52aWV3LnNjcm9sbFRvUG9zaXRpb24oc2Nyb2xsUG9zaXRpb24pO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2Nyb2xsVG9BbmNob3IoKSB7XG4gICAgICAgIGNvbnN0IGFuY2hvciA9IGdldEFuY2hvcih0aGlzLmxvY2F0aW9uKTtcbiAgICAgICAgaWYgKGFuY2hvciAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLnZpZXcuc2Nyb2xsVG9BbmNob3IoYW5jaG9yKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJlY29yZFRpbWluZ01ldHJpYyhtZXRyaWMpIHtcbiAgICAgICAgdGhpcy50aW1pbmdNZXRyaWNzW21ldHJpY10gPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICB9XG4gICAgZ2V0VGltaW5nTWV0cmljcygpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHRoaXMudGltaW5nTWV0cmljcyk7XG4gICAgfVxuICAgIGdldEhpc3RvcnlNZXRob2RGb3JBY3Rpb24oYWN0aW9uKSB7XG4gICAgICAgIHN3aXRjaCAoYWN0aW9uKSB7XG4gICAgICAgICAgICBjYXNlIFwicmVwbGFjZVwiOiByZXR1cm4gaGlzdG9yeS5yZXBsYWNlU3RhdGU7XG4gICAgICAgICAgICBjYXNlIFwiYWR2YW5jZVwiOlxuICAgICAgICAgICAgY2FzZSBcInJlc3RvcmVcIjogcmV0dXJuIGhpc3RvcnkucHVzaFN0YXRlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGhhc1ByZWxvYWRlZFJlc3BvbnNlKCkge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHRoaXMucmVzcG9uc2UgPT0gXCJvYmplY3RcIjtcbiAgICB9XG4gICAgc2hvdWxkSXNzdWVSZXF1ZXN0KCkge1xuICAgICAgICBpZiAodGhpcy5pc1NhbWVQYWdlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5hY3Rpb24gPT0gXCJyZXN0b3JlXCIpIHtcbiAgICAgICAgICAgIHJldHVybiAhdGhpcy5oYXNDYWNoZWRTbmFwc2hvdCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2FjaGVTbmFwc2hvdCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnNuYXBzaG90Q2FjaGVkKSB7XG4gICAgICAgICAgICB0aGlzLnZpZXcuY2FjaGVTbmFwc2hvdCgpO1xuICAgICAgICAgICAgdGhpcy5zbmFwc2hvdENhY2hlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgcmVuZGVyKGNhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMuY2FuY2VsUmVuZGVyKCk7XG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgICAgdGhpcy5mcmFtZSA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiByZXNvbHZlKCkpO1xuICAgICAgICB9KTtcbiAgICAgICAgYXdhaXQgY2FsbGJhY2soKTtcbiAgICAgICAgZGVsZXRlIHRoaXMuZnJhbWU7XG4gICAgICAgIHRoaXMucGVyZm9ybVNjcm9sbCgpO1xuICAgIH1cbiAgICBjYW5jZWxSZW5kZXIoKSB7XG4gICAgICAgIGlmICh0aGlzLmZyYW1lKSB7XG4gICAgICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLmZyYW1lKTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmZyYW1lO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gaXNTdWNjZXNzZnVsKHN0YXR1c0NvZGUpIHtcbiAgICByZXR1cm4gc3RhdHVzQ29kZSA+PSAyMDAgJiYgc3RhdHVzQ29kZSA8IDMwMDtcbn1cblxuY2xhc3MgQnJvd3NlckFkYXB0ZXIge1xuICAgIGNvbnN0cnVjdG9yKHNlc3Npb24pIHtcbiAgICAgICAgdGhpcy5wcm9ncmVzc0JhciA9IG5ldyBQcm9ncmVzc0JhcjtcbiAgICAgICAgdGhpcy5zaG93UHJvZ3Jlc3NCYXIgPSAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnByb2dyZXNzQmFyLnNob3coKTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5zZXNzaW9uID0gc2Vzc2lvbjtcbiAgICB9XG4gICAgdmlzaXRQcm9wb3NlZFRvTG9jYXRpb24obG9jYXRpb24sIG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5uYXZpZ2F0b3Iuc3RhcnRWaXNpdChsb2NhdGlvbiwgdXVpZCgpLCBvcHRpb25zKTtcbiAgICB9XG4gICAgdmlzaXRTdGFydGVkKHZpc2l0KSB7XG4gICAgICAgIHZpc2l0Lmlzc3VlUmVxdWVzdCgpO1xuICAgICAgICB2aXNpdC5jaGFuZ2VIaXN0b3J5KCk7XG4gICAgICAgIHZpc2l0LmdvVG9TYW1lUGFnZUFuY2hvcigpO1xuICAgICAgICB2aXNpdC5sb2FkQ2FjaGVkU25hcHNob3QoKTtcbiAgICB9XG4gICAgdmlzaXRSZXF1ZXN0U3RhcnRlZCh2aXNpdCkge1xuICAgICAgICB0aGlzLnByb2dyZXNzQmFyLnNldFZhbHVlKDApO1xuICAgICAgICBpZiAodmlzaXQuaGFzQ2FjaGVkU25hcHNob3QoKSB8fCB2aXNpdC5hY3Rpb24gIT0gXCJyZXN0b3JlXCIpIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd1Zpc2l0UHJvZ3Jlc3NCYXJBZnRlckRlbGF5KCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNob3dQcm9ncmVzc0JhcigpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZpc2l0UmVxdWVzdENvbXBsZXRlZCh2aXNpdCkge1xuICAgICAgICB2aXNpdC5sb2FkUmVzcG9uc2UoKTtcbiAgICB9XG4gICAgdmlzaXRSZXF1ZXN0RmFpbGVkV2l0aFN0YXR1c0NvZGUodmlzaXQsIHN0YXR1c0NvZGUpIHtcbiAgICAgICAgc3dpdGNoIChzdGF0dXNDb2RlKSB7XG4gICAgICAgICAgICBjYXNlIFN5c3RlbVN0YXR1c0NvZGUubmV0d29ya0ZhaWx1cmU6XG4gICAgICAgICAgICBjYXNlIFN5c3RlbVN0YXR1c0NvZGUudGltZW91dEZhaWx1cmU6XG4gICAgICAgICAgICBjYXNlIFN5c3RlbVN0YXR1c0NvZGUuY29udGVudFR5cGVNaXNtYXRjaDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZWxvYWQoKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZpc2l0LmxvYWRSZXNwb25zZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZpc2l0UmVxdWVzdEZpbmlzaGVkKHZpc2l0KSB7XG4gICAgICAgIHRoaXMucHJvZ3Jlc3NCYXIuc2V0VmFsdWUoMSk7XG4gICAgICAgIHRoaXMuaGlkZVZpc2l0UHJvZ3Jlc3NCYXIoKTtcbiAgICB9XG4gICAgdmlzaXRDb21wbGV0ZWQodmlzaXQpIHtcbiAgICB9XG4gICAgcGFnZUludmFsaWRhdGVkKCkge1xuICAgICAgICB0aGlzLnJlbG9hZCgpO1xuICAgIH1cbiAgICB2aXNpdEZhaWxlZCh2aXNpdCkge1xuICAgIH1cbiAgICB2aXNpdFJlbmRlcmVkKHZpc2l0KSB7XG4gICAgfVxuICAgIGZvcm1TdWJtaXNzaW9uU3RhcnRlZChmb3JtU3VibWlzc2lvbikge1xuICAgICAgICB0aGlzLnByb2dyZXNzQmFyLnNldFZhbHVlKDApO1xuICAgICAgICB0aGlzLnNob3dGb3JtUHJvZ3Jlc3NCYXJBZnRlckRlbGF5KCk7XG4gICAgfVxuICAgIGZvcm1TdWJtaXNzaW9uRmluaXNoZWQoZm9ybVN1Ym1pc3Npb24pIHtcbiAgICAgICAgdGhpcy5wcm9ncmVzc0Jhci5zZXRWYWx1ZSgxKTtcbiAgICAgICAgdGhpcy5oaWRlRm9ybVByb2dyZXNzQmFyKCk7XG4gICAgfVxuICAgIHNob3dWaXNpdFByb2dyZXNzQmFyQWZ0ZXJEZWxheSgpIHtcbiAgICAgICAgdGhpcy52aXNpdFByb2dyZXNzQmFyVGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KHRoaXMuc2hvd1Byb2dyZXNzQmFyLCB0aGlzLnNlc3Npb24ucHJvZ3Jlc3NCYXJEZWxheSk7XG4gICAgfVxuICAgIGhpZGVWaXNpdFByb2dyZXNzQmFyKCkge1xuICAgICAgICB0aGlzLnByb2dyZXNzQmFyLmhpZGUoKTtcbiAgICAgICAgaWYgKHRoaXMudmlzaXRQcm9ncmVzc0JhclRpbWVvdXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aGlzLnZpc2l0UHJvZ3Jlc3NCYXJUaW1lb3V0KTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnZpc2l0UHJvZ3Jlc3NCYXJUaW1lb3V0O1xuICAgICAgICB9XG4gICAgfVxuICAgIHNob3dGb3JtUHJvZ3Jlc3NCYXJBZnRlckRlbGF5KCkge1xuICAgICAgICBpZiAodGhpcy5mb3JtUHJvZ3Jlc3NCYXJUaW1lb3V0ID09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybVByb2dyZXNzQmFyVGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KHRoaXMuc2hvd1Byb2dyZXNzQmFyLCB0aGlzLnNlc3Npb24ucHJvZ3Jlc3NCYXJEZWxheSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaGlkZUZvcm1Qcm9ncmVzc0JhcigpIHtcbiAgICAgICAgdGhpcy5wcm9ncmVzc0Jhci5oaWRlKCk7XG4gICAgICAgIGlmICh0aGlzLmZvcm1Qcm9ncmVzc0JhclRpbWVvdXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aGlzLmZvcm1Qcm9ncmVzc0JhclRpbWVvdXQpO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuZm9ybVByb2dyZXNzQmFyVGltZW91dDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZWxvYWQoKSB7XG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcbiAgICB9XG4gICAgZ2V0IG5hdmlnYXRvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2Vzc2lvbi5uYXZpZ2F0b3I7XG4gICAgfVxufVxuXG5jbGFzcyBDYWNoZU9ic2VydmVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5zdGFydGVkID0gZmFsc2U7XG4gICAgfVxuICAgIHN0YXJ0KCkge1xuICAgICAgICBpZiAoIXRoaXMuc3RhcnRlZCkge1xuICAgICAgICAgICAgdGhpcy5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGFkZEV2ZW50TGlzdGVuZXIoXCJ0dXJibzpiZWZvcmUtY2FjaGVcIiwgdGhpcy5yZW1vdmVTdGFsZUVsZW1lbnRzLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RvcCgpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RhcnRlZCkge1xuICAgICAgICAgICAgdGhpcy5zdGFydGVkID0gZmFsc2U7XG4gICAgICAgICAgICByZW1vdmVFdmVudExpc3RlbmVyKFwidHVyYm86YmVmb3JlLWNhY2hlXCIsIHRoaXMucmVtb3ZlU3RhbGVFbGVtZW50cywgZmFsc2UpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJlbW92ZVN0YWxlRWxlbWVudHMoKSB7XG4gICAgICAgIGNvbnN0IHN0YWxlRWxlbWVudHMgPSBbLi4uZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtdHVyYm8tY2FjaGU9XCJmYWxzZVwiXScpXTtcbiAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIHN0YWxlRWxlbWVudHMpIHtcbiAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIEZvcm1TdWJtaXRPYnNlcnZlciB7XG4gICAgY29uc3RydWN0b3IoZGVsZWdhdGUpIHtcbiAgICAgICAgdGhpcy5zdGFydGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3VibWl0Q2FwdHVyZWQgPSAoKSA9PiB7XG4gICAgICAgICAgICByZW1vdmVFdmVudExpc3RlbmVyKFwic3VibWl0XCIsIHRoaXMuc3VibWl0QnViYmxlZCwgZmFsc2UpO1xuICAgICAgICAgICAgYWRkRXZlbnRMaXN0ZW5lcihcInN1Ym1pdFwiLCB0aGlzLnN1Ym1pdEJ1YmJsZWQsIGZhbHNlKTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5zdWJtaXRCdWJibGVkID0gKChldmVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFldmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZm9ybSA9IGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIEhUTUxGb3JtRWxlbWVudCA/IGV2ZW50LnRhcmdldCA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBjb25zdCBzdWJtaXR0ZXIgPSBldmVudC5zdWJtaXR0ZXIgfHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGlmIChmb3JtKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1ldGhvZCA9IChzdWJtaXR0ZXIgPT09IG51bGwgfHwgc3VibWl0dGVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzdWJtaXR0ZXIuZ2V0QXR0cmlidXRlKFwiZm9ybW1ldGhvZFwiKSkgfHwgZm9ybS5tZXRob2Q7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtZXRob2QgIT0gXCJkaWFsb2dcIiAmJiB0aGlzLmRlbGVnYXRlLndpbGxTdWJtaXRGb3JtKGZvcm0sIHN1Ym1pdHRlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlbGVnYXRlLmZvcm1TdWJtaXR0ZWQoZm9ybSwgc3VibWl0dGVyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZGVsZWdhdGUgPSBkZWxlZ2F0ZTtcbiAgICB9XG4gICAgc3RhcnQoKSB7XG4gICAgICAgIGlmICghdGhpcy5zdGFydGVkKSB7XG4gICAgICAgICAgICBhZGRFdmVudExpc3RlbmVyKFwic3VibWl0XCIsIHRoaXMuc3VibWl0Q2FwdHVyZWQsIHRydWUpO1xuICAgICAgICAgICAgdGhpcy5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdG9wKCkge1xuICAgICAgICBpZiAodGhpcy5zdGFydGVkKSB7XG4gICAgICAgICAgICByZW1vdmVFdmVudExpc3RlbmVyKFwic3VibWl0XCIsIHRoaXMuc3VibWl0Q2FwdHVyZWQsIHRydWUpO1xuICAgICAgICAgICAgdGhpcy5zdGFydGVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIEZyYW1lUmVkaXJlY3RvciB7XG4gICAgY29uc3RydWN0b3IoZWxlbWVudCkge1xuICAgICAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgICB0aGlzLmxpbmtJbnRlcmNlcHRvciA9IG5ldyBMaW5rSW50ZXJjZXB0b3IodGhpcywgZWxlbWVudCk7XG4gICAgICAgIHRoaXMuZm9ybUludGVyY2VwdG9yID0gbmV3IEZvcm1JbnRlcmNlcHRvcih0aGlzLCBlbGVtZW50KTtcbiAgICB9XG4gICAgc3RhcnQoKSB7XG4gICAgICAgIHRoaXMubGlua0ludGVyY2VwdG9yLnN0YXJ0KCk7XG4gICAgICAgIHRoaXMuZm9ybUludGVyY2VwdG9yLnN0YXJ0KCk7XG4gICAgfVxuICAgIHN0b3AoKSB7XG4gICAgICAgIHRoaXMubGlua0ludGVyY2VwdG9yLnN0b3AoKTtcbiAgICAgICAgdGhpcy5mb3JtSW50ZXJjZXB0b3Iuc3RvcCgpO1xuICAgIH1cbiAgICBzaG91bGRJbnRlcmNlcHRMaW5rQ2xpY2soZWxlbWVudCwgdXJsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNob3VsZFJlZGlyZWN0KGVsZW1lbnQpO1xuICAgIH1cbiAgICBsaW5rQ2xpY2tJbnRlcmNlcHRlZChlbGVtZW50LCB1cmwpIHtcbiAgICAgICAgY29uc3QgZnJhbWUgPSB0aGlzLmZpbmRGcmFtZUVsZW1lbnQoZWxlbWVudCk7XG4gICAgICAgIGlmIChmcmFtZSkge1xuICAgICAgICAgICAgZnJhbWUuc2V0QXR0cmlidXRlKFwicmVsb2FkYWJsZVwiLCBcIlwiKTtcbiAgICAgICAgICAgIGZyYW1lLnNyYyA9IHVybDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzaG91bGRJbnRlcmNlcHRGb3JtU3VibWlzc2lvbihlbGVtZW50LCBzdWJtaXR0ZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2hvdWxkUmVkaXJlY3QoZWxlbWVudCwgc3VibWl0dGVyKTtcbiAgICB9XG4gICAgZm9ybVN1Ym1pc3Npb25JbnRlcmNlcHRlZChlbGVtZW50LCBzdWJtaXR0ZXIpIHtcbiAgICAgICAgY29uc3QgZnJhbWUgPSB0aGlzLmZpbmRGcmFtZUVsZW1lbnQoZWxlbWVudCk7XG4gICAgICAgIGlmIChmcmFtZSkge1xuICAgICAgICAgICAgZnJhbWUucmVtb3ZlQXR0cmlidXRlKFwicmVsb2FkYWJsZVwiKTtcbiAgICAgICAgICAgIGZyYW1lLmRlbGVnYXRlLmZvcm1TdWJtaXNzaW9uSW50ZXJjZXB0ZWQoZWxlbWVudCwgc3VibWl0dGVyKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzaG91bGRSZWRpcmVjdChlbGVtZW50LCBzdWJtaXR0ZXIpIHtcbiAgICAgICAgY29uc3QgZnJhbWUgPSB0aGlzLmZpbmRGcmFtZUVsZW1lbnQoZWxlbWVudCk7XG4gICAgICAgIHJldHVybiBmcmFtZSA/IGZyYW1lICE9IGVsZW1lbnQuY2xvc2VzdChcInR1cmJvLWZyYW1lXCIpIDogZmFsc2U7XG4gICAgfVxuICAgIGZpbmRGcmFtZUVsZW1lbnQoZWxlbWVudCkge1xuICAgICAgICBjb25zdCBpZCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiZGF0YS10dXJiby1mcmFtZVwiKTtcbiAgICAgICAgaWYgKGlkICYmIGlkICE9IFwiX3RvcFwiKSB7XG4gICAgICAgICAgICBjb25zdCBmcmFtZSA9IHRoaXMuZWxlbWVudC5xdWVyeVNlbGVjdG9yKGAjJHtpZH06bm90KFtkaXNhYmxlZF0pYCk7XG4gICAgICAgICAgICBpZiAoZnJhbWUgaW5zdGFuY2VvZiBGcmFtZUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZnJhbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIEhpc3Rvcnkge1xuICAgIGNvbnN0cnVjdG9yKGRlbGVnYXRlKSB7XG4gICAgICAgIHRoaXMucmVzdG9yYXRpb25JZGVudGlmaWVyID0gdXVpZCgpO1xuICAgICAgICB0aGlzLnJlc3RvcmF0aW9uRGF0YSA9IHt9O1xuICAgICAgICB0aGlzLnN0YXJ0ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5wYWdlTG9hZGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMub25Qb3BTdGF0ZSA9IChldmVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuc2hvdWxkSGFuZGxlUG9wU3RhdGUoKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgdHVyYm8gfSA9IGV2ZW50LnN0YXRlIHx8IHt9O1xuICAgICAgICAgICAgICAgIGlmICh0dXJibykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvY2F0aW9uID0gbmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZik7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgcmVzdG9yYXRpb25JZGVudGlmaWVyIH0gPSB0dXJibztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXN0b3JhdGlvbklkZW50aWZpZXIgPSByZXN0b3JhdGlvbklkZW50aWZpZXI7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVsZWdhdGUuaGlzdG9yeVBvcHBlZFRvTG9jYXRpb25XaXRoUmVzdG9yYXRpb25JZGVudGlmaWVyKHRoaXMubG9jYXRpb24sIHJlc3RvcmF0aW9uSWRlbnRpZmllcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLm9uUGFnZUxvYWQgPSBhc3luYyAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGF3YWl0IG5leHRNaWNyb3Rhc2soKTtcbiAgICAgICAgICAgIHRoaXMucGFnZUxvYWRlZCA9IHRydWU7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZGVsZWdhdGUgPSBkZWxlZ2F0ZTtcbiAgICB9XG4gICAgc3RhcnQoKSB7XG4gICAgICAgIGlmICghdGhpcy5zdGFydGVkKSB7XG4gICAgICAgICAgICBhZGRFdmVudExpc3RlbmVyKFwicG9wc3RhdGVcIiwgdGhpcy5vblBvcFN0YXRlLCBmYWxzZSk7XG4gICAgICAgICAgICBhZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLCB0aGlzLm9uUGFnZUxvYWQsIGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnJlcGxhY2UobmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZikpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0b3AoKSB7XG4gICAgICAgIGlmICh0aGlzLnN0YXJ0ZWQpIHtcbiAgICAgICAgICAgIHJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb3BzdGF0ZVwiLCB0aGlzLm9uUG9wU3RhdGUsIGZhbHNlKTtcbiAgICAgICAgICAgIHJlbW92ZUV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsIHRoaXMub25QYWdlTG9hZCwgZmFsc2UpO1xuICAgICAgICAgICAgdGhpcy5zdGFydGVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHVzaChsb2NhdGlvbiwgcmVzdG9yYXRpb25JZGVudGlmaWVyKSB7XG4gICAgICAgIHRoaXMudXBkYXRlKGhpc3RvcnkucHVzaFN0YXRlLCBsb2NhdGlvbiwgcmVzdG9yYXRpb25JZGVudGlmaWVyKTtcbiAgICB9XG4gICAgcmVwbGFjZShsb2NhdGlvbiwgcmVzdG9yYXRpb25JZGVudGlmaWVyKSB7XG4gICAgICAgIHRoaXMudXBkYXRlKGhpc3RvcnkucmVwbGFjZVN0YXRlLCBsb2NhdGlvbiwgcmVzdG9yYXRpb25JZGVudGlmaWVyKTtcbiAgICB9XG4gICAgdXBkYXRlKG1ldGhvZCwgbG9jYXRpb24sIHJlc3RvcmF0aW9uSWRlbnRpZmllciA9IHV1aWQoKSkge1xuICAgICAgICBjb25zdCBzdGF0ZSA9IHsgdHVyYm86IHsgcmVzdG9yYXRpb25JZGVudGlmaWVyIH0gfTtcbiAgICAgICAgbWV0aG9kLmNhbGwoaGlzdG9yeSwgc3RhdGUsIFwiXCIsIGxvY2F0aW9uLmhyZWYpO1xuICAgICAgICB0aGlzLmxvY2F0aW9uID0gbG9jYXRpb247XG4gICAgICAgIHRoaXMucmVzdG9yYXRpb25JZGVudGlmaWVyID0gcmVzdG9yYXRpb25JZGVudGlmaWVyO1xuICAgIH1cbiAgICBnZXRSZXN0b3JhdGlvbkRhdGFGb3JJZGVudGlmaWVyKHJlc3RvcmF0aW9uSWRlbnRpZmllcikge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXN0b3JhdGlvbkRhdGFbcmVzdG9yYXRpb25JZGVudGlmaWVyXSB8fCB7fTtcbiAgICB9XG4gICAgdXBkYXRlUmVzdG9yYXRpb25EYXRhKGFkZGl0aW9uYWxEYXRhKSB7XG4gICAgICAgIGNvbnN0IHsgcmVzdG9yYXRpb25JZGVudGlmaWVyIH0gPSB0aGlzO1xuICAgICAgICBjb25zdCByZXN0b3JhdGlvbkRhdGEgPSB0aGlzLnJlc3RvcmF0aW9uRGF0YVtyZXN0b3JhdGlvbklkZW50aWZpZXJdO1xuICAgICAgICB0aGlzLnJlc3RvcmF0aW9uRGF0YVtyZXN0b3JhdGlvbklkZW50aWZpZXJdID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCByZXN0b3JhdGlvbkRhdGEpLCBhZGRpdGlvbmFsRGF0YSk7XG4gICAgfVxuICAgIGFzc3VtZUNvbnRyb2xPZlNjcm9sbFJlc3RvcmF0aW9uKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmICghdGhpcy5wcmV2aW91c1Njcm9sbFJlc3RvcmF0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnByZXZpb3VzU2Nyb2xsUmVzdG9yYXRpb24gPSAoX2EgPSBoaXN0b3J5LnNjcm9sbFJlc3RvcmF0aW9uKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBcImF1dG9cIjtcbiAgICAgICAgICAgIGhpc3Rvcnkuc2Nyb2xsUmVzdG9yYXRpb24gPSBcIm1hbnVhbFwiO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJlbGlucXVpc2hDb250cm9sT2ZTY3JvbGxSZXN0b3JhdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMucHJldmlvdXNTY3JvbGxSZXN0b3JhdGlvbikge1xuICAgICAgICAgICAgaGlzdG9yeS5zY3JvbGxSZXN0b3JhdGlvbiA9IHRoaXMucHJldmlvdXNTY3JvbGxSZXN0b3JhdGlvbjtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnByZXZpb3VzU2Nyb2xsUmVzdG9yYXRpb247XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2hvdWxkSGFuZGxlUG9wU3RhdGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhZ2VJc0xvYWRlZCgpO1xuICAgIH1cbiAgICBwYWdlSXNMb2FkZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhZ2VMb2FkZWQgfHwgZG9jdW1lbnQucmVhZHlTdGF0ZSA9PSBcImNvbXBsZXRlXCI7XG4gICAgfVxufVxuXG5jbGFzcyBMaW5rQ2xpY2tPYnNlcnZlciB7XG4gICAgY29uc3RydWN0b3IoZGVsZWdhdGUpIHtcbiAgICAgICAgdGhpcy5zdGFydGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY2xpY2tDYXB0dXJlZCA9ICgpID0+IHtcbiAgICAgICAgICAgIHJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzLmNsaWNrQnViYmxlZCwgZmFsc2UpO1xuICAgICAgICAgICAgYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXMuY2xpY2tCdWJibGVkLCBmYWxzZSk7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuY2xpY2tCdWJibGVkID0gKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5jbGlja0V2ZW50SXNTaWduaWZpY2FudChldmVudCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXQgPSAoZXZlbnQuY29tcG9zZWRQYXRoICYmIGV2ZW50LmNvbXBvc2VkUGF0aCgpWzBdKSB8fCBldmVudC50YXJnZXQ7XG4gICAgICAgICAgICAgICAgY29uc3QgbGluayA9IHRoaXMuZmluZExpbmtGcm9tQ2xpY2tUYXJnZXQodGFyZ2V0KTtcbiAgICAgICAgICAgICAgICBpZiAobGluaykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBsb2NhdGlvbiA9IHRoaXMuZ2V0TG9jYXRpb25Gb3JMaW5rKGxpbmspO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kZWxlZ2F0ZS53aWxsRm9sbG93TGlua1RvTG9jYXRpb24obGluaywgbG9jYXRpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWxlZ2F0ZS5mb2xsb3dlZExpbmtUb0xvY2F0aW9uKGxpbmssIGxvY2F0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5kZWxlZ2F0ZSA9IGRlbGVnYXRlO1xuICAgIH1cbiAgICBzdGFydCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnN0YXJ0ZWQpIHtcbiAgICAgICAgICAgIGFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzLmNsaWNrQ2FwdHVyZWQsIHRydWUpO1xuICAgICAgICAgICAgdGhpcy5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdG9wKCkge1xuICAgICAgICBpZiAodGhpcy5zdGFydGVkKSB7XG4gICAgICAgICAgICByZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5jbGlja0NhcHR1cmVkLCB0cnVlKTtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNsaWNrRXZlbnRJc1NpZ25pZmljYW50KGV2ZW50KSB7XG4gICAgICAgIHJldHVybiAhKChldmVudC50YXJnZXQgJiYgZXZlbnQudGFyZ2V0LmlzQ29udGVudEVkaXRhYmxlKVxuICAgICAgICAgICAgfHwgZXZlbnQuZGVmYXVsdFByZXZlbnRlZFxuICAgICAgICAgICAgfHwgZXZlbnQud2hpY2ggPiAxXG4gICAgICAgICAgICB8fCBldmVudC5hbHRLZXlcbiAgICAgICAgICAgIHx8IGV2ZW50LmN0cmxLZXlcbiAgICAgICAgICAgIHx8IGV2ZW50Lm1ldGFLZXlcbiAgICAgICAgICAgIHx8IGV2ZW50LnNoaWZ0S2V5KTtcbiAgICB9XG4gICAgZmluZExpbmtGcm9tQ2xpY2tUYXJnZXQodGFyZ2V0KSB7XG4gICAgICAgIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0LmNsb3Nlc3QoXCJhW2hyZWZdOm5vdChbdGFyZ2V0Xj1fXSk6bm90KFtkb3dubG9hZF0pXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldExvY2F0aW9uRm9yTGluayhsaW5rKSB7XG4gICAgICAgIHJldHVybiBleHBhbmRVUkwobGluay5nZXRBdHRyaWJ1dGUoXCJocmVmXCIpIHx8IFwiXCIpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gaXNBY3Rpb24oYWN0aW9uKSB7XG4gICAgcmV0dXJuIGFjdGlvbiA9PSBcImFkdmFuY2VcIiB8fCBhY3Rpb24gPT0gXCJyZXBsYWNlXCIgfHwgYWN0aW9uID09IFwicmVzdG9yZVwiO1xufVxuXG5jbGFzcyBOYXZpZ2F0b3Ige1xuICAgIGNvbnN0cnVjdG9yKGRlbGVnYXRlKSB7XG4gICAgICAgIHRoaXMuZGVsZWdhdGUgPSBkZWxlZ2F0ZTtcbiAgICB9XG4gICAgcHJvcG9zZVZpc2l0KGxvY2F0aW9uLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgaWYgKHRoaXMuZGVsZWdhdGUuYWxsb3dzVmlzaXRpbmdMb2NhdGlvbldpdGhBY3Rpb24obG9jYXRpb24sIG9wdGlvbnMuYWN0aW9uKSkge1xuICAgICAgICAgICAgdGhpcy5kZWxlZ2F0ZS52aXNpdFByb3Bvc2VkVG9Mb2NhdGlvbihsb2NhdGlvbiwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhcnRWaXNpdChsb2NhdGFibGUsIHJlc3RvcmF0aW9uSWRlbnRpZmllciwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHRoaXMuc3RvcCgpO1xuICAgICAgICB0aGlzLmN1cnJlbnRWaXNpdCA9IG5ldyBWaXNpdCh0aGlzLCBleHBhbmRVUkwobG9jYXRhYmxlKSwgcmVzdG9yYXRpb25JZGVudGlmaWVyLCBPYmplY3QuYXNzaWduKHsgcmVmZXJyZXI6IHRoaXMubG9jYXRpb24gfSwgb3B0aW9ucykpO1xuICAgICAgICB0aGlzLmN1cnJlbnRWaXNpdC5zdGFydCgpO1xuICAgIH1cbiAgICBzdWJtaXRGb3JtKGZvcm0sIHN1Ym1pdHRlcikge1xuICAgICAgICB0aGlzLnN0b3AoKTtcbiAgICAgICAgdGhpcy5mb3JtU3VibWlzc2lvbiA9IG5ldyBGb3JtU3VibWlzc2lvbih0aGlzLCBmb3JtLCBzdWJtaXR0ZXIsIHRydWUpO1xuICAgICAgICBpZiAodGhpcy5mb3JtU3VibWlzc2lvbi5pc0lkZW1wb3RlbnQpIHtcbiAgICAgICAgICAgIHRoaXMucHJvcG9zZVZpc2l0KHRoaXMuZm9ybVN1Ym1pc3Npb24uZmV0Y2hSZXF1ZXN0LnVybCwgeyBhY3Rpb246IHRoaXMuZ2V0QWN0aW9uRm9yRm9ybVN1Ym1pc3Npb24odGhpcy5mb3JtU3VibWlzc2lvbikgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1TdWJtaXNzaW9uLnN0YXJ0KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RvcCgpIHtcbiAgICAgICAgaWYgKHRoaXMuZm9ybVN1Ym1pc3Npb24pIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybVN1Ym1pc3Npb24uc3RvcCgpO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuZm9ybVN1Ym1pc3Npb247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFZpc2l0KSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRWaXNpdC5jYW5jZWwoKTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmN1cnJlbnRWaXNpdDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgYWRhcHRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUuYWRhcHRlcjtcbiAgICB9XG4gICAgZ2V0IHZpZXcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLnZpZXc7XG4gICAgfVxuICAgIGdldCBoaXN0b3J5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS5oaXN0b3J5O1xuICAgIH1cbiAgICBmb3JtU3VibWlzc2lvblN0YXJ0ZWQoZm9ybVN1Ym1pc3Npb24pIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFkYXB0ZXIuZm9ybVN1Ym1pc3Npb25TdGFydGVkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aGlzLmFkYXB0ZXIuZm9ybVN1Ym1pc3Npb25TdGFydGVkKGZvcm1TdWJtaXNzaW9uKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBmb3JtU3VibWlzc2lvblN1Y2NlZWRlZFdpdGhSZXNwb25zZShmb3JtU3VibWlzc2lvbiwgZmV0Y2hSZXNwb25zZSkge1xuICAgICAgICBpZiAoZm9ybVN1Ym1pc3Npb24gPT0gdGhpcy5mb3JtU3VibWlzc2lvbikge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2VIVE1MID0gYXdhaXQgZmV0Y2hSZXNwb25zZS5yZXNwb25zZUhUTUw7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2VIVE1MKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZvcm1TdWJtaXNzaW9uLm1ldGhvZCAhPSBGZXRjaE1ldGhvZC5nZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3LmNsZWFyU25hcHNob3RDYWNoZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCB7IHN0YXR1c0NvZGUgfSA9IGZldGNoUmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgY29uc3QgdmlzaXRPcHRpb25zID0geyByZXNwb25zZTogeyBzdGF0dXNDb2RlLCByZXNwb25zZUhUTUwgfSB9O1xuICAgICAgICAgICAgICAgIHRoaXMucHJvcG9zZVZpc2l0KGZldGNoUmVzcG9uc2UubG9jYXRpb24sIHZpc2l0T3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgZm9ybVN1Ym1pc3Npb25GYWlsZWRXaXRoUmVzcG9uc2UoZm9ybVN1Ym1pc3Npb24sIGZldGNoUmVzcG9uc2UpIHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2VIVE1MID0gYXdhaXQgZmV0Y2hSZXNwb25zZS5yZXNwb25zZUhUTUw7XG4gICAgICAgIGlmIChyZXNwb25zZUhUTUwpIHtcbiAgICAgICAgICAgIGNvbnN0IHNuYXBzaG90ID0gUGFnZVNuYXBzaG90LmZyb21IVE1MU3RyaW5nKHJlc3BvbnNlSFRNTCk7XG4gICAgICAgICAgICBpZiAoZmV0Y2hSZXNwb25zZS5zZXJ2ZXJFcnJvcikge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMudmlldy5yZW5kZXJFcnJvcihzbmFwc2hvdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnZpZXcucmVuZGVyUGFnZShzbmFwc2hvdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnZpZXcuc2Nyb2xsVG9Ub3AoKTtcbiAgICAgICAgICAgIHRoaXMudmlldy5jbGVhclNuYXBzaG90Q2FjaGUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmb3JtU3VibWlzc2lvbkVycm9yZWQoZm9ybVN1Ym1pc3Npb24sIGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgIH1cbiAgICBmb3JtU3VibWlzc2lvbkZpbmlzaGVkKGZvcm1TdWJtaXNzaW9uKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hZGFwdGVyLmZvcm1TdWJtaXNzaW9uRmluaXNoZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRoaXMuYWRhcHRlci5mb3JtU3VibWlzc2lvbkZpbmlzaGVkKGZvcm1TdWJtaXNzaW9uKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2aXNpdFN0YXJ0ZWQodmlzaXQpIHtcbiAgICAgICAgdGhpcy5kZWxlZ2F0ZS52aXNpdFN0YXJ0ZWQodmlzaXQpO1xuICAgIH1cbiAgICB2aXNpdENvbXBsZXRlZCh2aXNpdCkge1xuICAgICAgICB0aGlzLmRlbGVnYXRlLnZpc2l0Q29tcGxldGVkKHZpc2l0KTtcbiAgICB9XG4gICAgbG9jYXRpb25XaXRoQWN0aW9uSXNTYW1lUGFnZShsb2NhdGlvbiwgYWN0aW9uKSB7XG4gICAgICAgIGNvbnN0IGFuY2hvciA9IGdldEFuY2hvcihsb2NhdGlvbik7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRBbmNob3IgPSBnZXRBbmNob3IodGhpcy52aWV3Lmxhc3RSZW5kZXJlZExvY2F0aW9uKTtcbiAgICAgICAgY29uc3QgaXNSZXN0b3JhdGlvblRvVG9wID0gYWN0aW9uID09PSAncmVzdG9yZScgJiYgdHlwZW9mIGFuY2hvciA9PT0gJ3VuZGVmaW5lZCc7XG4gICAgICAgIHJldHVybiBhY3Rpb24gIT09IFwicmVwbGFjZVwiICYmXG4gICAgICAgICAgICBnZXRSZXF1ZXN0VVJMKGxvY2F0aW9uKSA9PT0gZ2V0UmVxdWVzdFVSTCh0aGlzLnZpZXcubGFzdFJlbmRlcmVkTG9jYXRpb24pICYmXG4gICAgICAgICAgICAoaXNSZXN0b3JhdGlvblRvVG9wIHx8IChhbmNob3IgIT0gbnVsbCAmJiBhbmNob3IgIT09IGN1cnJlbnRBbmNob3IpKTtcbiAgICB9XG4gICAgdmlzaXRTY3JvbGxlZFRvU2FtZVBhZ2VMb2NhdGlvbihvbGRVUkwsIG5ld1VSTCkge1xuICAgICAgICB0aGlzLmRlbGVnYXRlLnZpc2l0U2Nyb2xsZWRUb1NhbWVQYWdlTG9jYXRpb24ob2xkVVJMLCBuZXdVUkwpO1xuICAgIH1cbiAgICBnZXQgbG9jYXRpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhpc3RvcnkubG9jYXRpb247XG4gICAgfVxuICAgIGdldCByZXN0b3JhdGlvbklkZW50aWZpZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhpc3RvcnkucmVzdG9yYXRpb25JZGVudGlmaWVyO1xuICAgIH1cbiAgICBnZXRBY3Rpb25Gb3JGb3JtU3VibWlzc2lvbihmb3JtU3VibWlzc2lvbikge1xuICAgICAgICBjb25zdCB7IGZvcm1FbGVtZW50LCBzdWJtaXR0ZXIgfSA9IGZvcm1TdWJtaXNzaW9uO1xuICAgICAgICBjb25zdCBhY3Rpb24gPSAoc3VibWl0dGVyID09PSBudWxsIHx8IHN1Ym1pdHRlciA9PT0gdm9pZCAwID8gdm9pZCAwIDogc3VibWl0dGVyLmdldEF0dHJpYnV0ZShcImRhdGEtdHVyYm8tYWN0aW9uXCIpKSB8fCBmb3JtRWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJkYXRhLXR1cmJvLWFjdGlvblwiKTtcbiAgICAgICAgcmV0dXJuIGlzQWN0aW9uKGFjdGlvbikgPyBhY3Rpb24gOiBcImFkdmFuY2VcIjtcbiAgICB9XG59XG5cbnZhciBQYWdlU3RhZ2U7XG4oZnVuY3Rpb24gKFBhZ2VTdGFnZSkge1xuICAgIFBhZ2VTdGFnZVtQYWdlU3RhZ2VbXCJpbml0aWFsXCJdID0gMF0gPSBcImluaXRpYWxcIjtcbiAgICBQYWdlU3RhZ2VbUGFnZVN0YWdlW1wibG9hZGluZ1wiXSA9IDFdID0gXCJsb2FkaW5nXCI7XG4gICAgUGFnZVN0YWdlW1BhZ2VTdGFnZVtcImludGVyYWN0aXZlXCJdID0gMl0gPSBcImludGVyYWN0aXZlXCI7XG4gICAgUGFnZVN0YWdlW1BhZ2VTdGFnZVtcImNvbXBsZXRlXCJdID0gM10gPSBcImNvbXBsZXRlXCI7XG59KShQYWdlU3RhZ2UgfHwgKFBhZ2VTdGFnZSA9IHt9KSk7XG5jbGFzcyBQYWdlT2JzZXJ2ZXIge1xuICAgIGNvbnN0cnVjdG9yKGRlbGVnYXRlKSB7XG4gICAgICAgIHRoaXMuc3RhZ2UgPSBQYWdlU3RhZ2UuaW5pdGlhbDtcbiAgICAgICAgdGhpcy5zdGFydGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaW50ZXJwcmV0UmVhZHlTdGF0ZSA9ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgcmVhZHlTdGF0ZSB9ID0gdGhpcztcbiAgICAgICAgICAgIGlmIChyZWFkeVN0YXRlID09IFwiaW50ZXJhY3RpdmVcIikge1xuICAgICAgICAgICAgICAgIHRoaXMucGFnZUlzSW50ZXJhY3RpdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHJlYWR5U3RhdGUgPT0gXCJjb21wbGV0ZVwiKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYWdlSXNDb21wbGV0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnBhZ2VXaWxsVW5sb2FkID0gKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5kZWxlZ2F0ZS5wYWdlV2lsbFVubG9hZCgpO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLmRlbGVnYXRlID0gZGVsZWdhdGU7XG4gICAgfVxuICAgIHN0YXJ0KCkge1xuICAgICAgICBpZiAoIXRoaXMuc3RhcnRlZCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuc3RhZ2UgPT0gUGFnZVN0YWdlLmluaXRpYWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YWdlID0gUGFnZVN0YWdlLmxvYWRpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwicmVhZHlzdGF0ZWNoYW5nZVwiLCB0aGlzLmludGVycHJldFJlYWR5U3RhdGUsIGZhbHNlKTtcbiAgICAgICAgICAgIGFkZEV2ZW50TGlzdGVuZXIoXCJwYWdlaGlkZVwiLCB0aGlzLnBhZ2VXaWxsVW5sb2FkLCBmYWxzZSk7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0b3AoKSB7XG4gICAgICAgIGlmICh0aGlzLnN0YXJ0ZWQpIHtcbiAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJyZWFkeXN0YXRlY2hhbmdlXCIsIHRoaXMuaW50ZXJwcmV0UmVhZHlTdGF0ZSwgZmFsc2UpO1xuICAgICAgICAgICAgcmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBhZ2VoaWRlXCIsIHRoaXMucGFnZVdpbGxVbmxvYWQsIGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHBhZ2VJc0ludGVyYWN0aXZlKCkge1xuICAgICAgICBpZiAodGhpcy5zdGFnZSA9PSBQYWdlU3RhZ2UubG9hZGluZykge1xuICAgICAgICAgICAgdGhpcy5zdGFnZSA9IFBhZ2VTdGFnZS5pbnRlcmFjdGl2ZTtcbiAgICAgICAgICAgIHRoaXMuZGVsZWdhdGUucGFnZUJlY2FtZUludGVyYWN0aXZlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcGFnZUlzQ29tcGxldGUoKSB7XG4gICAgICAgIHRoaXMucGFnZUlzSW50ZXJhY3RpdmUoKTtcbiAgICAgICAgaWYgKHRoaXMuc3RhZ2UgPT0gUGFnZVN0YWdlLmludGVyYWN0aXZlKSB7XG4gICAgICAgICAgICB0aGlzLnN0YWdlID0gUGFnZVN0YWdlLmNvbXBsZXRlO1xuICAgICAgICAgICAgdGhpcy5kZWxlZ2F0ZS5wYWdlTG9hZGVkKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IHJlYWR5U3RhdGUoKSB7XG4gICAgICAgIHJldHVybiBkb2N1bWVudC5yZWFkeVN0YXRlO1xuICAgIH1cbn1cblxuY2xhc3MgU2Nyb2xsT2JzZXJ2ZXIge1xuICAgIGNvbnN0cnVjdG9yKGRlbGVnYXRlKSB7XG4gICAgICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLm9uU2Nyb2xsID0gKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVQb3NpdGlvbih7IHg6IHdpbmRvdy5wYWdlWE9mZnNldCwgeTogd2luZG93LnBhZ2VZT2Zmc2V0IH0pO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLmRlbGVnYXRlID0gZGVsZWdhdGU7XG4gICAgfVxuICAgIHN0YXJ0KCkge1xuICAgICAgICBpZiAoIXRoaXMuc3RhcnRlZCkge1xuICAgICAgICAgICAgYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCB0aGlzLm9uU2Nyb2xsLCBmYWxzZSk7XG4gICAgICAgICAgICB0aGlzLm9uU2Nyb2xsKCk7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0b3AoKSB7XG4gICAgICAgIGlmICh0aGlzLnN0YXJ0ZWQpIHtcbiAgICAgICAgICAgIHJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgdGhpcy5vblNjcm9sbCwgZmFsc2UpO1xuICAgICAgICAgICAgdGhpcy5zdGFydGVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdXBkYXRlUG9zaXRpb24ocG9zaXRpb24pIHtcbiAgICAgICAgdGhpcy5kZWxlZ2F0ZS5zY3JvbGxQb3NpdGlvbkNoYW5nZWQocG9zaXRpb24pO1xuICAgIH1cbn1cblxuY2xhc3MgU3RyZWFtT2JzZXJ2ZXIge1xuICAgIGNvbnN0cnVjdG9yKGRlbGVnYXRlKSB7XG4gICAgICAgIHRoaXMuc291cmNlcyA9IG5ldyBTZXQ7XG4gICAgICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmluc3BlY3RGZXRjaFJlc3BvbnNlID0gKChldmVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBmZXRjaFJlc3BvbnNlRnJvbUV2ZW50KGV2ZW50KTtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZSAmJiBmZXRjaFJlc3BvbnNlSXNTdHJlYW0ocmVzcG9uc2UpKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlY2VpdmVNZXNzYWdlUmVzcG9uc2UocmVzcG9uc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yZWNlaXZlTWVzc2FnZUV2ZW50ID0gKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5zdGFydGVkICYmIHR5cGVvZiBldmVudC5kYXRhID09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlY2VpdmVNZXNzYWdlSFRNTChldmVudC5kYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5kZWxlZ2F0ZSA9IGRlbGVnYXRlO1xuICAgIH1cbiAgICBzdGFydCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnN0YXJ0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRlZCA9IHRydWU7XG4gICAgICAgICAgICBhZGRFdmVudExpc3RlbmVyKFwidHVyYm86YmVmb3JlLWZldGNoLXJlc3BvbnNlXCIsIHRoaXMuaW5zcGVjdEZldGNoUmVzcG9uc2UsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdG9wKCkge1xuICAgICAgICBpZiAodGhpcy5zdGFydGVkKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0dXJibzpiZWZvcmUtZmV0Y2gtcmVzcG9uc2VcIiwgdGhpcy5pbnNwZWN0RmV0Y2hSZXNwb25zZSwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbm5lY3RTdHJlYW1Tb3VyY2Uoc291cmNlKSB7XG4gICAgICAgIGlmICghdGhpcy5zdHJlYW1Tb3VyY2VJc0Nvbm5lY3RlZChzb3VyY2UpKSB7XG4gICAgICAgICAgICB0aGlzLnNvdXJjZXMuYWRkKHNvdXJjZSk7XG4gICAgICAgICAgICBzb3VyY2UuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5yZWNlaXZlTWVzc2FnZUV2ZW50LCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZGlzY29ubmVjdFN0cmVhbVNvdXJjZShzb3VyY2UpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RyZWFtU291cmNlSXNDb25uZWN0ZWQoc291cmNlKSkge1xuICAgICAgICAgICAgdGhpcy5zb3VyY2VzLmRlbGV0ZShzb3VyY2UpO1xuICAgICAgICAgICAgc291cmNlLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMucmVjZWl2ZU1lc3NhZ2VFdmVudCwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0cmVhbVNvdXJjZUlzQ29ubmVjdGVkKHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5zb3VyY2VzLmhhcyhzb3VyY2UpO1xuICAgIH1cbiAgICBhc3luYyByZWNlaXZlTWVzc2FnZVJlc3BvbnNlKHJlc3BvbnNlKSB7XG4gICAgICAgIGNvbnN0IGh0bWwgPSBhd2FpdCByZXNwb25zZS5yZXNwb25zZUhUTUw7XG4gICAgICAgIGlmIChodG1sKSB7XG4gICAgICAgICAgICB0aGlzLnJlY2VpdmVNZXNzYWdlSFRNTChodG1sKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZWNlaXZlTWVzc2FnZUhUTUwoaHRtbCkge1xuICAgICAgICB0aGlzLmRlbGVnYXRlLnJlY2VpdmVkTWVzc2FnZUZyb21TdHJlYW0obmV3IFN0cmVhbU1lc3NhZ2UoaHRtbCkpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGZldGNoUmVzcG9uc2VGcm9tRXZlbnQoZXZlbnQpIHtcbiAgICB2YXIgX2E7XG4gICAgY29uc3QgZmV0Y2hSZXNwb25zZSA9IChfYSA9IGV2ZW50LmRldGFpbCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmZldGNoUmVzcG9uc2U7XG4gICAgaWYgKGZldGNoUmVzcG9uc2UgaW5zdGFuY2VvZiBGZXRjaFJlc3BvbnNlKSB7XG4gICAgICAgIHJldHVybiBmZXRjaFJlc3BvbnNlO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGZldGNoUmVzcG9uc2VJc1N0cmVhbShyZXNwb25zZSkge1xuICAgIHZhciBfYTtcbiAgICBjb25zdCBjb250ZW50VHlwZSA9IChfYSA9IHJlc3BvbnNlLmNvbnRlbnRUeXBlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBcIlwiO1xuICAgIHJldHVybiBjb250ZW50VHlwZS5zdGFydHNXaXRoKFN0cmVhbU1lc3NhZ2UuY29udGVudFR5cGUpO1xufVxuXG5jbGFzcyBFcnJvclJlbmRlcmVyIGV4dGVuZHMgUmVuZGVyZXIge1xuICAgIGFzeW5jIHJlbmRlcigpIHtcbiAgICAgICAgdGhpcy5yZXBsYWNlSGVhZEFuZEJvZHkoKTtcbiAgICAgICAgdGhpcy5hY3RpdmF0ZVNjcmlwdEVsZW1lbnRzKCk7XG4gICAgfVxuICAgIHJlcGxhY2VIZWFkQW5kQm9keSgpIHtcbiAgICAgICAgY29uc3QgeyBkb2N1bWVudEVsZW1lbnQsIGhlYWQsIGJvZHkgfSA9IGRvY3VtZW50O1xuICAgICAgICBkb2N1bWVudEVsZW1lbnQucmVwbGFjZUNoaWxkKHRoaXMubmV3SGVhZCwgaGVhZCk7XG4gICAgICAgIGRvY3VtZW50RWxlbWVudC5yZXBsYWNlQ2hpbGQodGhpcy5uZXdFbGVtZW50LCBib2R5KTtcbiAgICB9XG4gICAgYWN0aXZhdGVTY3JpcHRFbGVtZW50cygpIHtcbiAgICAgICAgZm9yIChjb25zdCByZXBsYWNlYWJsZUVsZW1lbnQgb2YgdGhpcy5zY3JpcHRFbGVtZW50cykge1xuICAgICAgICAgICAgY29uc3QgcGFyZW50Tm9kZSA9IHJlcGxhY2VhYmxlRWxlbWVudC5wYXJlbnROb2RlO1xuICAgICAgICAgICAgaWYgKHBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5jcmVhdGVTY3JpcHRFbGVtZW50KHJlcGxhY2VhYmxlRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgcGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoZWxlbWVudCwgcmVwbGFjZWFibGVFbGVtZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgbmV3SGVhZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmV3U25hcHNob3QuaGVhZFNuYXBzaG90LmVsZW1lbnQ7XG4gICAgfVxuICAgIGdldCBzY3JpcHRFbGVtZW50cygpIHtcbiAgICAgICAgcmV0dXJuIFsuLi5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcInNjcmlwdFwiKV07XG4gICAgfVxufVxuXG5jbGFzcyBQYWdlUmVuZGVyZXIgZXh0ZW5kcyBSZW5kZXJlciB7XG4gICAgZ2V0IHNob3VsZFJlbmRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmV3U25hcHNob3QuaXNWaXNpdGFibGUgJiYgdGhpcy50cmFja2VkRWxlbWVudHNBcmVJZGVudGljYWw7XG4gICAgfVxuICAgIHByZXBhcmVUb1JlbmRlcigpIHtcbiAgICAgICAgdGhpcy5tZXJnZUhlYWQoKTtcbiAgICB9XG4gICAgYXN5bmMgcmVuZGVyKCkge1xuICAgICAgICB0aGlzLnJlcGxhY2VCb2R5KCk7XG4gICAgfVxuICAgIGZpbmlzaFJlbmRlcmluZygpIHtcbiAgICAgICAgc3VwZXIuZmluaXNoUmVuZGVyaW5nKCk7XG4gICAgICAgIGlmICghdGhpcy5pc1ByZXZpZXcpIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNGaXJzdEF1dG9mb2N1c2FibGVFbGVtZW50KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IGN1cnJlbnRIZWFkU25hcHNob3QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRTbmFwc2hvdC5oZWFkU25hcHNob3Q7XG4gICAgfVxuICAgIGdldCBuZXdIZWFkU25hcHNob3QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5ld1NuYXBzaG90LmhlYWRTbmFwc2hvdDtcbiAgICB9XG4gICAgZ2V0IG5ld0VsZW1lbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5ld1NuYXBzaG90LmVsZW1lbnQ7XG4gICAgfVxuICAgIG1lcmdlSGVhZCgpIHtcbiAgICAgICAgdGhpcy5jb3B5TmV3SGVhZFN0eWxlc2hlZXRFbGVtZW50cygpO1xuICAgICAgICB0aGlzLmNvcHlOZXdIZWFkU2NyaXB0RWxlbWVudHMoKTtcbiAgICAgICAgdGhpcy5yZW1vdmVDdXJyZW50SGVhZFByb3Zpc2lvbmFsRWxlbWVudHMoKTtcbiAgICAgICAgdGhpcy5jb3B5TmV3SGVhZFByb3Zpc2lvbmFsRWxlbWVudHMoKTtcbiAgICB9XG4gICAgcmVwbGFjZUJvZHkoKSB7XG4gICAgICAgIHRoaXMucHJlc2VydmluZ1Blcm1hbmVudEVsZW1lbnRzKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZhdGVOZXdCb2R5KCk7XG4gICAgICAgICAgICB0aGlzLmFzc2lnbk5ld0JvZHkoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGdldCB0cmFja2VkRWxlbWVudHNBcmVJZGVudGljYWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRIZWFkU25hcHNob3QudHJhY2tlZEVsZW1lbnRTaWduYXR1cmUgPT0gdGhpcy5uZXdIZWFkU25hcHNob3QudHJhY2tlZEVsZW1lbnRTaWduYXR1cmU7XG4gICAgfVxuICAgIGNvcHlOZXdIZWFkU3R5bGVzaGVldEVsZW1lbnRzKCkge1xuICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgdGhpcy5uZXdIZWFkU3R5bGVzaGVldEVsZW1lbnRzKSB7XG4gICAgICAgICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvcHlOZXdIZWFkU2NyaXB0RWxlbWVudHMoKSB7XG4gICAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiB0aGlzLm5ld0hlYWRTY3JpcHRFbGVtZW50cykge1xuICAgICAgICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZVNjcmlwdEVsZW1lbnQoZWxlbWVudCkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJlbW92ZUN1cnJlbnRIZWFkUHJvdmlzaW9uYWxFbGVtZW50cygpIHtcbiAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIHRoaXMuY3VycmVudEhlYWRQcm92aXNpb25hbEVsZW1lbnRzKSB7XG4gICAgICAgICAgICBkb2N1bWVudC5oZWFkLnJlbW92ZUNoaWxkKGVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvcHlOZXdIZWFkUHJvdmlzaW9uYWxFbGVtZW50cygpIHtcbiAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIHRoaXMubmV3SGVhZFByb3Zpc2lvbmFsRWxlbWVudHMpIHtcbiAgICAgICAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYWN0aXZhdGVOZXdCb2R5KCkge1xuICAgICAgICBkb2N1bWVudC5hZG9wdE5vZGUodGhpcy5uZXdFbGVtZW50KTtcbiAgICAgICAgdGhpcy5hY3RpdmF0ZU5ld0JvZHlTY3JpcHRFbGVtZW50cygpO1xuICAgIH1cbiAgICBhY3RpdmF0ZU5ld0JvZHlTY3JpcHRFbGVtZW50cygpIHtcbiAgICAgICAgZm9yIChjb25zdCBpbmVydFNjcmlwdEVsZW1lbnQgb2YgdGhpcy5uZXdCb2R5U2NyaXB0RWxlbWVudHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGFjdGl2YXRlZFNjcmlwdEVsZW1lbnQgPSB0aGlzLmNyZWF0ZVNjcmlwdEVsZW1lbnQoaW5lcnRTY3JpcHRFbGVtZW50KTtcbiAgICAgICAgICAgIGluZXJ0U2NyaXB0RWxlbWVudC5yZXBsYWNlV2l0aChhY3RpdmF0ZWRTY3JpcHRFbGVtZW50KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3NpZ25OZXdCb2R5KCkge1xuICAgICAgICBpZiAoZG9jdW1lbnQuYm9keSAmJiB0aGlzLm5ld0VsZW1lbnQgaW5zdGFuY2VvZiBIVE1MQm9keUVsZW1lbnQpIHtcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVwbGFjZVdpdGgodGhpcy5uZXdFbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLm5ld0VsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBuZXdIZWFkU3R5bGVzaGVldEVsZW1lbnRzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5uZXdIZWFkU25hcHNob3QuZ2V0U3R5bGVzaGVldEVsZW1lbnRzTm90SW5TbmFwc2hvdCh0aGlzLmN1cnJlbnRIZWFkU25hcHNob3QpO1xuICAgIH1cbiAgICBnZXQgbmV3SGVhZFNjcmlwdEVsZW1lbnRzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5uZXdIZWFkU25hcHNob3QuZ2V0U2NyaXB0RWxlbWVudHNOb3RJblNuYXBzaG90KHRoaXMuY3VycmVudEhlYWRTbmFwc2hvdCk7XG4gICAgfVxuICAgIGdldCBjdXJyZW50SGVhZFByb3Zpc2lvbmFsRWxlbWVudHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRIZWFkU25hcHNob3QucHJvdmlzaW9uYWxFbGVtZW50cztcbiAgICB9XG4gICAgZ2V0IG5ld0hlYWRQcm92aXNpb25hbEVsZW1lbnRzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5uZXdIZWFkU25hcHNob3QucHJvdmlzaW9uYWxFbGVtZW50cztcbiAgICB9XG4gICAgZ2V0IG5ld0JvZHlTY3JpcHRFbGVtZW50cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmV3RWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFwic2NyaXB0XCIpO1xuICAgIH1cbn1cblxuY2xhc3MgU25hcHNob3RDYWNoZSB7XG4gICAgY29uc3RydWN0b3Ioc2l6ZSkge1xuICAgICAgICB0aGlzLmtleXMgPSBbXTtcbiAgICAgICAgdGhpcy5zbmFwc2hvdHMgPSB7fTtcbiAgICAgICAgdGhpcy5zaXplID0gc2l6ZTtcbiAgICB9XG4gICAgaGFzKGxvY2F0aW9uKSB7XG4gICAgICAgIHJldHVybiB0b0NhY2hlS2V5KGxvY2F0aW9uKSBpbiB0aGlzLnNuYXBzaG90cztcbiAgICB9XG4gICAgZ2V0KGxvY2F0aW9uKSB7XG4gICAgICAgIGlmICh0aGlzLmhhcyhsb2NhdGlvbikpIHtcbiAgICAgICAgICAgIGNvbnN0IHNuYXBzaG90ID0gdGhpcy5yZWFkKGxvY2F0aW9uKTtcbiAgICAgICAgICAgIHRoaXMudG91Y2gobG9jYXRpb24pO1xuICAgICAgICAgICAgcmV0dXJuIHNuYXBzaG90O1xuICAgICAgICB9XG4gICAgfVxuICAgIHB1dChsb2NhdGlvbiwgc25hcHNob3QpIHtcbiAgICAgICAgdGhpcy53cml0ZShsb2NhdGlvbiwgc25hcHNob3QpO1xuICAgICAgICB0aGlzLnRvdWNoKGxvY2F0aW9uKTtcbiAgICAgICAgcmV0dXJuIHNuYXBzaG90O1xuICAgIH1cbiAgICBjbGVhcigpIHtcbiAgICAgICAgdGhpcy5zbmFwc2hvdHMgPSB7fTtcbiAgICB9XG4gICAgcmVhZChsb2NhdGlvbikge1xuICAgICAgICByZXR1cm4gdGhpcy5zbmFwc2hvdHNbdG9DYWNoZUtleShsb2NhdGlvbildO1xuICAgIH1cbiAgICB3cml0ZShsb2NhdGlvbiwgc25hcHNob3QpIHtcbiAgICAgICAgdGhpcy5zbmFwc2hvdHNbdG9DYWNoZUtleShsb2NhdGlvbildID0gc25hcHNob3Q7XG4gICAgfVxuICAgIHRvdWNoKGxvY2F0aW9uKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IHRvQ2FjaGVLZXkobG9jYXRpb24pO1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMua2V5cy5pbmRleE9mKGtleSk7XG4gICAgICAgIGlmIChpbmRleCA+IC0xKVxuICAgICAgICAgICAgdGhpcy5rZXlzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIHRoaXMua2V5cy51bnNoaWZ0KGtleSk7XG4gICAgICAgIHRoaXMudHJpbSgpO1xuICAgIH1cbiAgICB0cmltKCkge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiB0aGlzLmtleXMuc3BsaWNlKHRoaXMuc2l6ZSkpIHtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnNuYXBzaG90c1trZXldO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBQYWdlVmlldyBleHRlbmRzIFZpZXcge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLnNuYXBzaG90Q2FjaGUgPSBuZXcgU25hcHNob3RDYWNoZSgxMCk7XG4gICAgICAgIHRoaXMubGFzdFJlbmRlcmVkTG9jYXRpb24gPSBuZXcgVVJMKGxvY2F0aW9uLmhyZWYpO1xuICAgIH1cbiAgICByZW5kZXJQYWdlKHNuYXBzaG90LCBpc1ByZXZpZXcgPSBmYWxzZSkge1xuICAgICAgICBjb25zdCByZW5kZXJlciA9IG5ldyBQYWdlUmVuZGVyZXIodGhpcy5zbmFwc2hvdCwgc25hcHNob3QsIGlzUHJldmlldyk7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbmRlcihyZW5kZXJlcik7XG4gICAgfVxuICAgIHJlbmRlckVycm9yKHNuYXBzaG90KSB7XG4gICAgICAgIGNvbnN0IHJlbmRlcmVyID0gbmV3IEVycm9yUmVuZGVyZXIodGhpcy5zbmFwc2hvdCwgc25hcHNob3QsIGZhbHNlKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyKHJlbmRlcmVyKTtcbiAgICB9XG4gICAgY2xlYXJTbmFwc2hvdENhY2hlKCkge1xuICAgICAgICB0aGlzLnNuYXBzaG90Q2FjaGUuY2xlYXIoKTtcbiAgICB9XG4gICAgYXN5bmMgY2FjaGVTbmFwc2hvdCgpIHtcbiAgICAgICAgaWYgKHRoaXMuc2hvdWxkQ2FjaGVTbmFwc2hvdCkge1xuICAgICAgICAgICAgdGhpcy5kZWxlZ2F0ZS52aWV3V2lsbENhY2hlU25hcHNob3QoKTtcbiAgICAgICAgICAgIGNvbnN0IHsgc25hcHNob3QsIGxhc3RSZW5kZXJlZExvY2F0aW9uOiBsb2NhdGlvbiB9ID0gdGhpcztcbiAgICAgICAgICAgIGF3YWl0IG5leHRFdmVudExvb3BUaWNrKCk7XG4gICAgICAgICAgICB0aGlzLnNuYXBzaG90Q2FjaGUucHV0KGxvY2F0aW9uLCBzbmFwc2hvdC5jbG9uZSgpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXRDYWNoZWRTbmFwc2hvdEZvckxvY2F0aW9uKGxvY2F0aW9uKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNuYXBzaG90Q2FjaGUuZ2V0KGxvY2F0aW9uKTtcbiAgICB9XG4gICAgZ2V0IHNuYXBzaG90KCkge1xuICAgICAgICByZXR1cm4gUGFnZVNuYXBzaG90LmZyb21FbGVtZW50KHRoaXMuZWxlbWVudCk7XG4gICAgfVxuICAgIGdldCBzaG91bGRDYWNoZVNuYXBzaG90KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zbmFwc2hvdC5pc0NhY2hlYWJsZTtcbiAgICB9XG59XG5cbmNsYXNzIFNlc3Npb24ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLm5hdmlnYXRvciA9IG5ldyBOYXZpZ2F0b3IodGhpcyk7XG4gICAgICAgIHRoaXMuaGlzdG9yeSA9IG5ldyBIaXN0b3J5KHRoaXMpO1xuICAgICAgICB0aGlzLnZpZXcgPSBuZXcgUGFnZVZpZXcodGhpcywgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KTtcbiAgICAgICAgdGhpcy5hZGFwdGVyID0gbmV3IEJyb3dzZXJBZGFwdGVyKHRoaXMpO1xuICAgICAgICB0aGlzLnBhZ2VPYnNlcnZlciA9IG5ldyBQYWdlT2JzZXJ2ZXIodGhpcyk7XG4gICAgICAgIHRoaXMuY2FjaGVPYnNlcnZlciA9IG5ldyBDYWNoZU9ic2VydmVyKCk7XG4gICAgICAgIHRoaXMubGlua0NsaWNrT2JzZXJ2ZXIgPSBuZXcgTGlua0NsaWNrT2JzZXJ2ZXIodGhpcyk7XG4gICAgICAgIHRoaXMuZm9ybVN1Ym1pdE9ic2VydmVyID0gbmV3IEZvcm1TdWJtaXRPYnNlcnZlcih0aGlzKTtcbiAgICAgICAgdGhpcy5zY3JvbGxPYnNlcnZlciA9IG5ldyBTY3JvbGxPYnNlcnZlcih0aGlzKTtcbiAgICAgICAgdGhpcy5zdHJlYW1PYnNlcnZlciA9IG5ldyBTdHJlYW1PYnNlcnZlcih0aGlzKTtcbiAgICAgICAgdGhpcy5mcmFtZVJlZGlyZWN0b3IgPSBuZXcgRnJhbWVSZWRpcmVjdG9yKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCk7XG4gICAgICAgIHRoaXMuZHJpdmUgPSB0cnVlO1xuICAgICAgICB0aGlzLmVuYWJsZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnByb2dyZXNzQmFyRGVsYXkgPSA1MDA7XG4gICAgICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xuICAgIH1cbiAgICBzdGFydCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnN0YXJ0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMucGFnZU9ic2VydmVyLnN0YXJ0KCk7XG4gICAgICAgICAgICB0aGlzLmNhY2hlT2JzZXJ2ZXIuc3RhcnQoKTtcbiAgICAgICAgICAgIHRoaXMubGlua0NsaWNrT2JzZXJ2ZXIuc3RhcnQoKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybVN1Ym1pdE9ic2VydmVyLnN0YXJ0KCk7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbE9ic2VydmVyLnN0YXJ0KCk7XG4gICAgICAgICAgICB0aGlzLnN0cmVhbU9ic2VydmVyLnN0YXJ0KCk7XG4gICAgICAgICAgICB0aGlzLmZyYW1lUmVkaXJlY3Rvci5zdGFydCgpO1xuICAgICAgICAgICAgdGhpcy5oaXN0b3J5LnN0YXJ0KCk7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5lbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBkaXNhYmxlKCkge1xuICAgICAgICB0aGlzLmVuYWJsZWQgPSBmYWxzZTtcbiAgICB9XG4gICAgc3RvcCgpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RhcnRlZCkge1xuICAgICAgICAgICAgdGhpcy5wYWdlT2JzZXJ2ZXIuc3RvcCgpO1xuICAgICAgICAgICAgdGhpcy5jYWNoZU9ic2VydmVyLnN0b3AoKTtcbiAgICAgICAgICAgIHRoaXMubGlua0NsaWNrT2JzZXJ2ZXIuc3RvcCgpO1xuICAgICAgICAgICAgdGhpcy5mb3JtU3VibWl0T2JzZXJ2ZXIuc3RvcCgpO1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxPYnNlcnZlci5zdG9wKCk7XG4gICAgICAgICAgICB0aGlzLnN0cmVhbU9ic2VydmVyLnN0b3AoKTtcbiAgICAgICAgICAgIHRoaXMuZnJhbWVSZWRpcmVjdG9yLnN0b3AoKTtcbiAgICAgICAgICAgIHRoaXMuaGlzdG9yeS5zdG9wKCk7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0ZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZWdpc3RlckFkYXB0ZXIoYWRhcHRlcikge1xuICAgICAgICB0aGlzLmFkYXB0ZXIgPSBhZGFwdGVyO1xuICAgIH1cbiAgICB2aXNpdChsb2NhdGlvbiwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHRoaXMubmF2aWdhdG9yLnByb3Bvc2VWaXNpdChleHBhbmRVUkwobG9jYXRpb24pLCBvcHRpb25zKTtcbiAgICB9XG4gICAgY29ubmVjdFN0cmVhbVNvdXJjZShzb3VyY2UpIHtcbiAgICAgICAgdGhpcy5zdHJlYW1PYnNlcnZlci5jb25uZWN0U3RyZWFtU291cmNlKHNvdXJjZSk7XG4gICAgfVxuICAgIGRpc2Nvbm5lY3RTdHJlYW1Tb3VyY2Uoc291cmNlKSB7XG4gICAgICAgIHRoaXMuc3RyZWFtT2JzZXJ2ZXIuZGlzY29ubmVjdFN0cmVhbVNvdXJjZShzb3VyY2UpO1xuICAgIH1cbiAgICByZW5kZXJTdHJlYW1NZXNzYWdlKG1lc3NhZ2UpIHtcbiAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKFN0cmVhbU1lc3NhZ2Uud3JhcChtZXNzYWdlKS5mcmFnbWVudCk7XG4gICAgfVxuICAgIGNsZWFyQ2FjaGUoKSB7XG4gICAgICAgIHRoaXMudmlldy5jbGVhclNuYXBzaG90Q2FjaGUoKTtcbiAgICB9XG4gICAgc2V0UHJvZ3Jlc3NCYXJEZWxheShkZWxheSkge1xuICAgICAgICB0aGlzLnByb2dyZXNzQmFyRGVsYXkgPSBkZWxheTtcbiAgICB9XG4gICAgZ2V0IGxvY2F0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5oaXN0b3J5LmxvY2F0aW9uO1xuICAgIH1cbiAgICBnZXQgcmVzdG9yYXRpb25JZGVudGlmaWVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5oaXN0b3J5LnJlc3RvcmF0aW9uSWRlbnRpZmllcjtcbiAgICB9XG4gICAgaGlzdG9yeVBvcHBlZFRvTG9jYXRpb25XaXRoUmVzdG9yYXRpb25JZGVudGlmaWVyKGxvY2F0aW9uLCByZXN0b3JhdGlvbklkZW50aWZpZXIpIHtcbiAgICAgICAgaWYgKHRoaXMuZW5hYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0b3Iuc3RhcnRWaXNpdChsb2NhdGlvbiwgcmVzdG9yYXRpb25JZGVudGlmaWVyLCB7IGFjdGlvbjogXCJyZXN0b3JlXCIsIGhpc3RvcnlDaGFuZ2VkOiB0cnVlIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hZGFwdGVyLnBhZ2VJbnZhbGlkYXRlZCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNjcm9sbFBvc2l0aW9uQ2hhbmdlZChwb3NpdGlvbikge1xuICAgICAgICB0aGlzLmhpc3RvcnkudXBkYXRlUmVzdG9yYXRpb25EYXRhKHsgc2Nyb2xsUG9zaXRpb246IHBvc2l0aW9uIH0pO1xuICAgIH1cbiAgICB3aWxsRm9sbG93TGlua1RvTG9jYXRpb24obGluaywgbG9jYXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudERyaXZlRW5hYmxlZChsaW5rKVxuICAgICAgICAgICAgJiYgdGhpcy5sb2NhdGlvbklzVmlzaXRhYmxlKGxvY2F0aW9uKVxuICAgICAgICAgICAgJiYgdGhpcy5hcHBsaWNhdGlvbkFsbG93c0ZvbGxvd2luZ0xpbmtUb0xvY2F0aW9uKGxpbmssIGxvY2F0aW9uKTtcbiAgICB9XG4gICAgZm9sbG93ZWRMaW5rVG9Mb2NhdGlvbihsaW5rLCBsb2NhdGlvbikge1xuICAgICAgICBjb25zdCBhY3Rpb24gPSB0aGlzLmdldEFjdGlvbkZvckxpbmsobGluayk7XG4gICAgICAgIHRoaXMuY29udmVydExpbmtXaXRoTWV0aG9kQ2xpY2tUb0Zvcm1TdWJtaXNzaW9uKGxpbmspIHx8IHRoaXMudmlzaXQobG9jYXRpb24uaHJlZiwgeyBhY3Rpb24gfSk7XG4gICAgfVxuICAgIGNvbnZlcnRMaW5rV2l0aE1ldGhvZENsaWNrVG9Gb3JtU3VibWlzc2lvbihsaW5rKSB7XG4gICAgICAgIGNvbnN0IGxpbmtNZXRob2QgPSBsaW5rLmdldEF0dHJpYnV0ZShcImRhdGEtdHVyYm8tbWV0aG9kXCIpO1xuICAgICAgICBpZiAobGlua01ldGhvZCkge1xuICAgICAgICAgICAgY29uc3QgZm9ybSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJmb3JtXCIpO1xuICAgICAgICAgICAgZm9ybS5tZXRob2QgPSBsaW5rTWV0aG9kO1xuICAgICAgICAgICAgZm9ybS5hY3Rpb24gPSBsaW5rLmdldEF0dHJpYnV0ZShcImhyZWZcIikgfHwgXCJ1bmRlZmluZWRcIjtcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZm9ybSk7XG4gICAgICAgICAgICByZXR1cm4gZGlzcGF0Y2goXCJzdWJtaXRcIiwgeyBjYW5jZWxhYmxlOiB0cnVlLCB0YXJnZXQ6IGZvcm0gfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYWxsb3dzVmlzaXRpbmdMb2NhdGlvbldpdGhBY3Rpb24obG9jYXRpb24sIGFjdGlvbikge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhdGlvbldpdGhBY3Rpb25Jc1NhbWVQYWdlKGxvY2F0aW9uLCBhY3Rpb24pIHx8IHRoaXMuYXBwbGljYXRpb25BbGxvd3NWaXNpdGluZ0xvY2F0aW9uKGxvY2F0aW9uKTtcbiAgICB9XG4gICAgdmlzaXRQcm9wb3NlZFRvTG9jYXRpb24obG9jYXRpb24sIG9wdGlvbnMpIHtcbiAgICAgICAgZXh0ZW5kVVJMV2l0aERlcHJlY2F0ZWRQcm9wZXJ0aWVzKGxvY2F0aW9uKTtcbiAgICAgICAgdGhpcy5hZGFwdGVyLnZpc2l0UHJvcG9zZWRUb0xvY2F0aW9uKGxvY2F0aW9uLCBvcHRpb25zKTtcbiAgICB9XG4gICAgdmlzaXRTdGFydGVkKHZpc2l0KSB7XG4gICAgICAgIGV4dGVuZFVSTFdpdGhEZXByZWNhdGVkUHJvcGVydGllcyh2aXNpdC5sb2NhdGlvbik7XG4gICAgICAgIGlmICghdmlzaXQuc2lsZW50KSB7XG4gICAgICAgICAgICB0aGlzLm5vdGlmeUFwcGxpY2F0aW9uQWZ0ZXJWaXNpdGluZ0xvY2F0aW9uKHZpc2l0LmxvY2F0aW9uLCB2aXNpdC5hY3Rpb24pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZpc2l0Q29tcGxldGVkKHZpc2l0KSB7XG4gICAgICAgIHRoaXMubm90aWZ5QXBwbGljYXRpb25BZnRlclBhZ2VMb2FkKHZpc2l0LmdldFRpbWluZ01ldHJpY3MoKSk7XG4gICAgfVxuICAgIGxvY2F0aW9uV2l0aEFjdGlvbklzU2FtZVBhZ2UobG9jYXRpb24sIGFjdGlvbikge1xuICAgICAgICByZXR1cm4gdGhpcy5uYXZpZ2F0b3IubG9jYXRpb25XaXRoQWN0aW9uSXNTYW1lUGFnZShsb2NhdGlvbiwgYWN0aW9uKTtcbiAgICB9XG4gICAgdmlzaXRTY3JvbGxlZFRvU2FtZVBhZ2VMb2NhdGlvbihvbGRVUkwsIG5ld1VSTCkge1xuICAgICAgICB0aGlzLm5vdGlmeUFwcGxpY2F0aW9uQWZ0ZXJWaXNpdGluZ1NhbWVQYWdlTG9jYXRpb24ob2xkVVJMLCBuZXdVUkwpO1xuICAgIH1cbiAgICB3aWxsU3VibWl0Rm9ybShmb3JtLCBzdWJtaXR0ZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudERyaXZlRW5hYmxlZChmb3JtKSAmJiB0aGlzLmVsZW1lbnREcml2ZUVuYWJsZWQoc3VibWl0dGVyKTtcbiAgICB9XG4gICAgZm9ybVN1Ym1pdHRlZChmb3JtLCBzdWJtaXR0ZXIpIHtcbiAgICAgICAgdGhpcy5uYXZpZ2F0b3Iuc3VibWl0Rm9ybShmb3JtLCBzdWJtaXR0ZXIpO1xuICAgIH1cbiAgICBwYWdlQmVjYW1lSW50ZXJhY3RpdmUoKSB7XG4gICAgICAgIHRoaXMudmlldy5sYXN0UmVuZGVyZWRMb2NhdGlvbiA9IHRoaXMubG9jYXRpb247XG4gICAgICAgIHRoaXMubm90aWZ5QXBwbGljYXRpb25BZnRlclBhZ2VMb2FkKCk7XG4gICAgfVxuICAgIHBhZ2VMb2FkZWQoKSB7XG4gICAgICAgIHRoaXMuaGlzdG9yeS5hc3N1bWVDb250cm9sT2ZTY3JvbGxSZXN0b3JhdGlvbigpO1xuICAgIH1cbiAgICBwYWdlV2lsbFVubG9hZCgpIHtcbiAgICAgICAgdGhpcy5oaXN0b3J5LnJlbGlucXVpc2hDb250cm9sT2ZTY3JvbGxSZXN0b3JhdGlvbigpO1xuICAgIH1cbiAgICByZWNlaXZlZE1lc3NhZ2VGcm9tU3RyZWFtKG1lc3NhZ2UpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJTdHJlYW1NZXNzYWdlKG1lc3NhZ2UpO1xuICAgIH1cbiAgICB2aWV3V2lsbENhY2hlU25hcHNob3QoKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKCEoKF9hID0gdGhpcy5uYXZpZ2F0b3IuY3VycmVudFZpc2l0KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc2lsZW50KSkge1xuICAgICAgICAgICAgdGhpcy5ub3RpZnlBcHBsaWNhdGlvbkJlZm9yZUNhY2hpbmdTbmFwc2hvdCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFsbG93c0ltbWVkaWF0ZVJlbmRlcih7IGVsZW1lbnQgfSwgcmVzdW1lKSB7XG4gICAgICAgIGNvbnN0IGV2ZW50ID0gdGhpcy5ub3RpZnlBcHBsaWNhdGlvbkJlZm9yZVJlbmRlcihlbGVtZW50LCByZXN1bWUpO1xuICAgICAgICByZXR1cm4gIWV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQ7XG4gICAgfVxuICAgIHZpZXdSZW5kZXJlZFNuYXBzaG90KHNuYXBzaG90LCBpc1ByZXZpZXcpIHtcbiAgICAgICAgdGhpcy52aWV3Lmxhc3RSZW5kZXJlZExvY2F0aW9uID0gdGhpcy5oaXN0b3J5LmxvY2F0aW9uO1xuICAgICAgICB0aGlzLm5vdGlmeUFwcGxpY2F0aW9uQWZ0ZXJSZW5kZXIoKTtcbiAgICB9XG4gICAgdmlld0ludmFsaWRhdGVkKCkge1xuICAgICAgICB0aGlzLmFkYXB0ZXIucGFnZUludmFsaWRhdGVkKCk7XG4gICAgfVxuICAgIGZyYW1lTG9hZGVkKGZyYW1lKSB7XG4gICAgICAgIHRoaXMubm90aWZ5QXBwbGljYXRpb25BZnRlckZyYW1lTG9hZChmcmFtZSk7XG4gICAgfVxuICAgIGZyYW1lUmVuZGVyZWQoZmV0Y2hSZXNwb25zZSwgZnJhbWUpIHtcbiAgICAgICAgdGhpcy5ub3RpZnlBcHBsaWNhdGlvbkFmdGVyRnJhbWVSZW5kZXIoZmV0Y2hSZXNwb25zZSwgZnJhbWUpO1xuICAgIH1cbiAgICBhcHBsaWNhdGlvbkFsbG93c0ZvbGxvd2luZ0xpbmtUb0xvY2F0aW9uKGxpbmssIGxvY2F0aW9uKSB7XG4gICAgICAgIGNvbnN0IGV2ZW50ID0gdGhpcy5ub3RpZnlBcHBsaWNhdGlvbkFmdGVyQ2xpY2tpbmdMaW5rVG9Mb2NhdGlvbihsaW5rLCBsb2NhdGlvbik7XG4gICAgICAgIHJldHVybiAhZXZlbnQuZGVmYXVsdFByZXZlbnRlZDtcbiAgICB9XG4gICAgYXBwbGljYXRpb25BbGxvd3NWaXNpdGluZ0xvY2F0aW9uKGxvY2F0aW9uKSB7XG4gICAgICAgIGNvbnN0IGV2ZW50ID0gdGhpcy5ub3RpZnlBcHBsaWNhdGlvbkJlZm9yZVZpc2l0aW5nTG9jYXRpb24obG9jYXRpb24pO1xuICAgICAgICByZXR1cm4gIWV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQ7XG4gICAgfVxuICAgIG5vdGlmeUFwcGxpY2F0aW9uQWZ0ZXJDbGlja2luZ0xpbmtUb0xvY2F0aW9uKGxpbmssIGxvY2F0aW9uKSB7XG4gICAgICAgIHJldHVybiBkaXNwYXRjaChcInR1cmJvOmNsaWNrXCIsIHsgdGFyZ2V0OiBsaW5rLCBkZXRhaWw6IHsgdXJsOiBsb2NhdGlvbi5ocmVmIH0sIGNhbmNlbGFibGU6IHRydWUgfSk7XG4gICAgfVxuICAgIG5vdGlmeUFwcGxpY2F0aW9uQmVmb3JlVmlzaXRpbmdMb2NhdGlvbihsb2NhdGlvbikge1xuICAgICAgICByZXR1cm4gZGlzcGF0Y2goXCJ0dXJibzpiZWZvcmUtdmlzaXRcIiwgeyBkZXRhaWw6IHsgdXJsOiBsb2NhdGlvbi5ocmVmIH0sIGNhbmNlbGFibGU6IHRydWUgfSk7XG4gICAgfVxuICAgIG5vdGlmeUFwcGxpY2F0aW9uQWZ0ZXJWaXNpdGluZ0xvY2F0aW9uKGxvY2F0aW9uLCBhY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIGRpc3BhdGNoKFwidHVyYm86dmlzaXRcIiwgeyBkZXRhaWw6IHsgdXJsOiBsb2NhdGlvbi5ocmVmLCBhY3Rpb24gfSB9KTtcbiAgICB9XG4gICAgbm90aWZ5QXBwbGljYXRpb25CZWZvcmVDYWNoaW5nU25hcHNob3QoKSB7XG4gICAgICAgIHJldHVybiBkaXNwYXRjaChcInR1cmJvOmJlZm9yZS1jYWNoZVwiKTtcbiAgICB9XG4gICAgbm90aWZ5QXBwbGljYXRpb25CZWZvcmVSZW5kZXIobmV3Qm9keSwgcmVzdW1lKSB7XG4gICAgICAgIHJldHVybiBkaXNwYXRjaChcInR1cmJvOmJlZm9yZS1yZW5kZXJcIiwgeyBkZXRhaWw6IHsgbmV3Qm9keSwgcmVzdW1lIH0sIGNhbmNlbGFibGU6IHRydWUgfSk7XG4gICAgfVxuICAgIG5vdGlmeUFwcGxpY2F0aW9uQWZ0ZXJSZW5kZXIoKSB7XG4gICAgICAgIHJldHVybiBkaXNwYXRjaChcInR1cmJvOnJlbmRlclwiKTtcbiAgICB9XG4gICAgbm90aWZ5QXBwbGljYXRpb25BZnRlclBhZ2VMb2FkKHRpbWluZyA9IHt9KSB7XG4gICAgICAgIHJldHVybiBkaXNwYXRjaChcInR1cmJvOmxvYWRcIiwgeyBkZXRhaWw6IHsgdXJsOiB0aGlzLmxvY2F0aW9uLmhyZWYsIHRpbWluZyB9IH0pO1xuICAgIH1cbiAgICBub3RpZnlBcHBsaWNhdGlvbkFmdGVyVmlzaXRpbmdTYW1lUGFnZUxvY2F0aW9uKG9sZFVSTCwgbmV3VVJMKSB7XG4gICAgICAgIGRpc3BhdGNoRXZlbnQobmV3IEhhc2hDaGFuZ2VFdmVudChcImhhc2hjaGFuZ2VcIiwgeyBvbGRVUkw6IG9sZFVSTC50b1N0cmluZygpLCBuZXdVUkw6IG5ld1VSTC50b1N0cmluZygpIH0pKTtcbiAgICB9XG4gICAgbm90aWZ5QXBwbGljYXRpb25BZnRlckZyYW1lTG9hZChmcmFtZSkge1xuICAgICAgICByZXR1cm4gZGlzcGF0Y2goXCJ0dXJibzpmcmFtZS1sb2FkXCIsIHsgdGFyZ2V0OiBmcmFtZSB9KTtcbiAgICB9XG4gICAgbm90aWZ5QXBwbGljYXRpb25BZnRlckZyYW1lUmVuZGVyKGZldGNoUmVzcG9uc2UsIGZyYW1lKSB7XG4gICAgICAgIHJldHVybiBkaXNwYXRjaChcInR1cmJvOmZyYW1lLXJlbmRlclwiLCB7IGRldGFpbDogeyBmZXRjaFJlc3BvbnNlIH0sIHRhcmdldDogZnJhbWUsIGNhbmNlbGFibGU6IHRydWUgfSk7XG4gICAgfVxuICAgIGVsZW1lbnREcml2ZUVuYWJsZWQoZWxlbWVudCkge1xuICAgICAgICBjb25zdCBjb250YWluZXIgPSBlbGVtZW50ID09PSBudWxsIHx8IGVsZW1lbnQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGVsZW1lbnQuY2xvc2VzdChcIltkYXRhLXR1cmJvXVwiKTtcbiAgICAgICAgaWYgKHRoaXMuZHJpdmUpIHtcbiAgICAgICAgICAgIGlmIChjb250YWluZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29udGFpbmVyLmdldEF0dHJpYnV0ZShcImRhdGEtdHVyYm9cIikgIT0gXCJmYWxzZVwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoY29udGFpbmVyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5lci5nZXRBdHRyaWJ1dGUoXCJkYXRhLXR1cmJvXCIpID09IFwidHJ1ZVwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGdldEFjdGlvbkZvckxpbmsobGluaykge1xuICAgICAgICBjb25zdCBhY3Rpb24gPSBsaW5rLmdldEF0dHJpYnV0ZShcImRhdGEtdHVyYm8tYWN0aW9uXCIpO1xuICAgICAgICByZXR1cm4gaXNBY3Rpb24oYWN0aW9uKSA/IGFjdGlvbiA6IFwiYWR2YW5jZVwiO1xuICAgIH1cbiAgICBsb2NhdGlvbklzVmlzaXRhYmxlKGxvY2F0aW9uKSB7XG4gICAgICAgIHJldHVybiBpc1ByZWZpeGVkQnkobG9jYXRpb24sIHRoaXMuc25hcHNob3Qucm9vdExvY2F0aW9uKSAmJiBpc0hUTUwobG9jYXRpb24pO1xuICAgIH1cbiAgICBnZXQgc25hcHNob3QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpZXcuc25hcHNob3Q7XG4gICAgfVxufVxuZnVuY3Rpb24gZXh0ZW5kVVJMV2l0aERlcHJlY2F0ZWRQcm9wZXJ0aWVzKHVybCkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHVybCwgZGVwcmVjYXRlZExvY2F0aW9uUHJvcGVydHlEZXNjcmlwdG9ycyk7XG59XG5jb25zdCBkZXByZWNhdGVkTG9jYXRpb25Qcm9wZXJ0eURlc2NyaXB0b3JzID0ge1xuICAgIGFic29sdXRlVVJMOiB7XG4gICAgICAgIGdldCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5jb25zdCBzZXNzaW9uID0gbmV3IFNlc3Npb247XG5jb25zdCB7IG5hdmlnYXRvciB9ID0gc2Vzc2lvbjtcbmZ1bmN0aW9uIHN0YXJ0KCkge1xuICAgIHNlc3Npb24uc3RhcnQoKTtcbn1cbmZ1bmN0aW9uIHJlZ2lzdGVyQWRhcHRlcihhZGFwdGVyKSB7XG4gICAgc2Vzc2lvbi5yZWdpc3RlckFkYXB0ZXIoYWRhcHRlcik7XG59XG5mdW5jdGlvbiB2aXNpdChsb2NhdGlvbiwgb3B0aW9ucykge1xuICAgIHNlc3Npb24udmlzaXQobG9jYXRpb24sIG9wdGlvbnMpO1xufVxuZnVuY3Rpb24gY29ubmVjdFN0cmVhbVNvdXJjZShzb3VyY2UpIHtcbiAgICBzZXNzaW9uLmNvbm5lY3RTdHJlYW1Tb3VyY2Uoc291cmNlKTtcbn1cbmZ1bmN0aW9uIGRpc2Nvbm5lY3RTdHJlYW1Tb3VyY2Uoc291cmNlKSB7XG4gICAgc2Vzc2lvbi5kaXNjb25uZWN0U3RyZWFtU291cmNlKHNvdXJjZSk7XG59XG5mdW5jdGlvbiByZW5kZXJTdHJlYW1NZXNzYWdlKG1lc3NhZ2UpIHtcbiAgICBzZXNzaW9uLnJlbmRlclN0cmVhbU1lc3NhZ2UobWVzc2FnZSk7XG59XG5mdW5jdGlvbiBjbGVhckNhY2hlKCkge1xuICAgIHNlc3Npb24uY2xlYXJDYWNoZSgpO1xufVxuZnVuY3Rpb24gc2V0UHJvZ3Jlc3NCYXJEZWxheShkZWxheSkge1xuICAgIHNlc3Npb24uc2V0UHJvZ3Jlc3NCYXJEZWxheShkZWxheSk7XG59XG5cbnZhciBUdXJibyA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgbmF2aWdhdG9yOiBuYXZpZ2F0b3IsXG4gICAgc2Vzc2lvbjogc2Vzc2lvbixcbiAgICBQYWdlUmVuZGVyZXI6IFBhZ2VSZW5kZXJlcixcbiAgICBQYWdlU25hcHNob3Q6IFBhZ2VTbmFwc2hvdCxcbiAgICBzdGFydDogc3RhcnQsXG4gICAgcmVnaXN0ZXJBZGFwdGVyOiByZWdpc3RlckFkYXB0ZXIsXG4gICAgdmlzaXQ6IHZpc2l0LFxuICAgIGNvbm5lY3RTdHJlYW1Tb3VyY2U6IGNvbm5lY3RTdHJlYW1Tb3VyY2UsXG4gICAgZGlzY29ubmVjdFN0cmVhbVNvdXJjZTogZGlzY29ubmVjdFN0cmVhbVNvdXJjZSxcbiAgICByZW5kZXJTdHJlYW1NZXNzYWdlOiByZW5kZXJTdHJlYW1NZXNzYWdlLFxuICAgIGNsZWFyQ2FjaGU6IGNsZWFyQ2FjaGUsXG4gICAgc2V0UHJvZ3Jlc3NCYXJEZWxheTogc2V0UHJvZ3Jlc3NCYXJEZWxheVxufSk7XG5cbmNsYXNzIEZyYW1lQ29udHJvbGxlciB7XG4gICAgY29uc3RydWN0b3IoZWxlbWVudCkge1xuICAgICAgICB0aGlzLnJlc29sdmVWaXNpdFByb21pc2UgPSAoKSA9PiB7IH07XG4gICAgICAgIHRoaXMuY29ubmVjdGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaGFzQmVlbkxvYWRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNldHRpbmdTb3VyY2VVUkwgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcbiAgICAgICAgdGhpcy52aWV3ID0gbmV3IEZyYW1lVmlldyh0aGlzLCB0aGlzLmVsZW1lbnQpO1xuICAgICAgICB0aGlzLmFwcGVhcmFuY2VPYnNlcnZlciA9IG5ldyBBcHBlYXJhbmNlT2JzZXJ2ZXIodGhpcywgdGhpcy5lbGVtZW50KTtcbiAgICAgICAgdGhpcy5saW5rSW50ZXJjZXB0b3IgPSBuZXcgTGlua0ludGVyY2VwdG9yKHRoaXMsIHRoaXMuZWxlbWVudCk7XG4gICAgICAgIHRoaXMuZm9ybUludGVyY2VwdG9yID0gbmV3IEZvcm1JbnRlcmNlcHRvcih0aGlzLCB0aGlzLmVsZW1lbnQpO1xuICAgIH1cbiAgICBjb25uZWN0KCkge1xuICAgICAgICBpZiAoIXRoaXMuY29ubmVjdGVkKSB7XG4gICAgICAgICAgICB0aGlzLmNvbm5lY3RlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnJlbG9hZGFibGUgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmICh0aGlzLmxvYWRpbmdTdHlsZSA9PSBGcmFtZUxvYWRpbmdTdHlsZS5sYXp5KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBlYXJhbmNlT2JzZXJ2ZXIuc3RhcnQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMubGlua0ludGVyY2VwdG9yLnN0YXJ0KCk7XG4gICAgICAgICAgICB0aGlzLmZvcm1JbnRlcmNlcHRvci5zdGFydCgpO1xuICAgICAgICAgICAgdGhpcy5zb3VyY2VVUkxDaGFuZ2VkKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZGlzY29ubmVjdCgpIHtcbiAgICAgICAgaWYgKHRoaXMuY29ubmVjdGVkKSB7XG4gICAgICAgICAgICB0aGlzLmNvbm5lY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5hcHBlYXJhbmNlT2JzZXJ2ZXIuc3RvcCgpO1xuICAgICAgICAgICAgdGhpcy5saW5rSW50ZXJjZXB0b3Iuc3RvcCgpO1xuICAgICAgICAgICAgdGhpcy5mb3JtSW50ZXJjZXB0b3Iuc3RvcCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGRpc2FibGVkQ2hhbmdlZCgpIHtcbiAgICAgICAgaWYgKHRoaXMubG9hZGluZ1N0eWxlID09IEZyYW1lTG9hZGluZ1N0eWxlLmVhZ2VyKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRTb3VyY2VVUkwoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzb3VyY2VVUkxDaGFuZ2VkKCkge1xuICAgICAgICBpZiAodGhpcy5sb2FkaW5nU3R5bGUgPT0gRnJhbWVMb2FkaW5nU3R5bGUuZWFnZXIgfHwgdGhpcy5oYXNCZWVuTG9hZGVkKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRTb3VyY2VVUkwoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBsb2FkaW5nU3R5bGVDaGFuZ2VkKCkge1xuICAgICAgICBpZiAodGhpcy5sb2FkaW5nU3R5bGUgPT0gRnJhbWVMb2FkaW5nU3R5bGUubGF6eSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlYXJhbmNlT2JzZXJ2ZXIuc3RhcnQoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZWFyYW5jZU9ic2VydmVyLnN0b3AoKTtcbiAgICAgICAgICAgIHRoaXMubG9hZFNvdXJjZVVSTCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIGxvYWRTb3VyY2VVUkwoKSB7XG4gICAgICAgIGlmICghdGhpcy5zZXR0aW5nU291cmNlVVJMICYmIHRoaXMuZW5hYmxlZCAmJiB0aGlzLmlzQWN0aXZlICYmICh0aGlzLnJlbG9hZGFibGUgfHwgdGhpcy5zb3VyY2VVUkwgIT0gdGhpcy5jdXJyZW50VVJMKSkge1xuICAgICAgICAgICAgY29uc3QgcHJldmlvdXNVUkwgPSB0aGlzLmN1cnJlbnRVUkw7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRVUkwgPSB0aGlzLnNvdXJjZVVSTDtcbiAgICAgICAgICAgIGlmICh0aGlzLnNvdXJjZVVSTCkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5sb2FkZWQgPSB0aGlzLnZpc2l0KHRoaXMuc291cmNlVVJMKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHBlYXJhbmNlT2JzZXJ2ZXIuc3RvcCgpO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmVsZW1lbnQubG9hZGVkO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhc0JlZW5Mb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLmZyYW1lTG9hZGVkKHRoaXMuZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRVUkwgPSBwcmV2aW91c1VSTDtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIGxvYWRSZXNwb25zZShmZXRjaFJlc3BvbnNlKSB7XG4gICAgICAgIGlmIChmZXRjaFJlc3BvbnNlLnJlZGlyZWN0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc291cmNlVVJMID0gZmV0Y2hSZXNwb25zZS5yZXNwb25zZS51cmw7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGh0bWwgPSBhd2FpdCBmZXRjaFJlc3BvbnNlLnJlc3BvbnNlSFRNTDtcbiAgICAgICAgICAgIGlmIChodG1sKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBib2R5IH0gPSBwYXJzZUhUTUxEb2N1bWVudChodG1sKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzbmFwc2hvdCA9IG5ldyBTbmFwc2hvdChhd2FpdCB0aGlzLmV4dHJhY3RGb3JlaWduRnJhbWVFbGVtZW50KGJvZHkpKTtcbiAgICAgICAgICAgICAgICBjb25zdCByZW5kZXJlciA9IG5ldyBGcmFtZVJlbmRlcmVyKHRoaXMudmlldy5zbmFwc2hvdCwgc25hcHNob3QsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy52aWV3LnJlbmRlclByb21pc2UpXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMudmlldy5yZW5kZXJQcm9taXNlO1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMudmlldy5yZW5kZXIocmVuZGVyZXIpO1xuICAgICAgICAgICAgICAgIHNlc3Npb24uZnJhbWVSZW5kZXJlZChmZXRjaFJlc3BvbnNlLCB0aGlzLmVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICB0aGlzLnZpZXcuaW52YWxpZGF0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsZW1lbnRBcHBlYXJlZEluVmlld3BvcnQoZWxlbWVudCkge1xuICAgICAgICB0aGlzLmxvYWRTb3VyY2VVUkwoKTtcbiAgICB9XG4gICAgc2hvdWxkSW50ZXJjZXB0TGlua0NsaWNrKGVsZW1lbnQsIHVybCkge1xuICAgICAgICBpZiAoZWxlbWVudC5oYXNBdHRyaWJ1dGUoXCJkYXRhLXR1cmJvLW1ldGhvZFwiKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2hvdWxkSW50ZXJjZXB0TmF2aWdhdGlvbihlbGVtZW50KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBsaW5rQ2xpY2tJbnRlcmNlcHRlZChlbGVtZW50LCB1cmwpIHtcbiAgICAgICAgdGhpcy5yZWxvYWRhYmxlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5uYXZpZ2F0ZUZyYW1lKGVsZW1lbnQsIHVybCk7XG4gICAgfVxuICAgIHNob3VsZEludGVyY2VwdEZvcm1TdWJtaXNzaW9uKGVsZW1lbnQsIHN1Ym1pdHRlcikge1xuICAgICAgICByZXR1cm4gdGhpcy5zaG91bGRJbnRlcmNlcHROYXZpZ2F0aW9uKGVsZW1lbnQsIHN1Ym1pdHRlcik7XG4gICAgfVxuICAgIGZvcm1TdWJtaXNzaW9uSW50ZXJjZXB0ZWQoZWxlbWVudCwgc3VibWl0dGVyKSB7XG4gICAgICAgIGlmICh0aGlzLmZvcm1TdWJtaXNzaW9uKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1TdWJtaXNzaW9uLnN0b3AoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlbG9hZGFibGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5mb3JtU3VibWlzc2lvbiA9IG5ldyBGb3JtU3VibWlzc2lvbih0aGlzLCBlbGVtZW50LCBzdWJtaXR0ZXIpO1xuICAgICAgICBpZiAodGhpcy5mb3JtU3VibWlzc2lvbi5mZXRjaFJlcXVlc3QuaXNJZGVtcG90ZW50KSB7XG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRlRnJhbWUoZWxlbWVudCwgdGhpcy5mb3JtU3VibWlzc2lvbi5mZXRjaFJlcXVlc3QudXJsLmhyZWYpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgeyBmZXRjaFJlcXVlc3QgfSA9IHRoaXMuZm9ybVN1Ym1pc3Npb247XG4gICAgICAgICAgICB0aGlzLnByZXBhcmVIZWFkZXJzRm9yUmVxdWVzdChmZXRjaFJlcXVlc3QuaGVhZGVycywgZmV0Y2hSZXF1ZXN0KTtcbiAgICAgICAgICAgIHRoaXMuZm9ybVN1Ym1pc3Npb24uc3RhcnQoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwcmVwYXJlSGVhZGVyc0ZvclJlcXVlc3QoaGVhZGVycywgcmVxdWVzdCkge1xuICAgICAgICBoZWFkZXJzW1wiVHVyYm8tRnJhbWVcIl0gPSB0aGlzLmlkO1xuICAgIH1cbiAgICByZXF1ZXN0U3RhcnRlZChyZXF1ZXN0KSB7XG4gICAgICAgIHRoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJidXN5XCIsIFwiXCIpO1xuICAgIH1cbiAgICByZXF1ZXN0UHJldmVudGVkSGFuZGxpbmdSZXNwb25zZShyZXF1ZXN0LCByZXNwb25zZSkge1xuICAgICAgICB0aGlzLnJlc29sdmVWaXNpdFByb21pc2UoKTtcbiAgICB9XG4gICAgYXN5bmMgcmVxdWVzdFN1Y2NlZWRlZFdpdGhSZXNwb25zZShyZXF1ZXN0LCByZXNwb25zZSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRSZXNwb25zZShyZXNwb25zZSk7XG4gICAgICAgIHRoaXMucmVzb2x2ZVZpc2l0UHJvbWlzZSgpO1xuICAgIH1cbiAgICByZXF1ZXN0RmFpbGVkV2l0aFJlc3BvbnNlKHJlcXVlc3QsIHJlc3BvbnNlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IocmVzcG9uc2UpO1xuICAgICAgICB0aGlzLnJlc29sdmVWaXNpdFByb21pc2UoKTtcbiAgICB9XG4gICAgcmVxdWVzdEVycm9yZWQocmVxdWVzdCwgZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgIHRoaXMucmVzb2x2ZVZpc2l0UHJvbWlzZSgpO1xuICAgIH1cbiAgICByZXF1ZXN0RmluaXNoZWQocmVxdWVzdCkge1xuICAgICAgICB0aGlzLmVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKFwiYnVzeVwiKTtcbiAgICB9XG4gICAgZm9ybVN1Ym1pc3Npb25TdGFydGVkKGZvcm1TdWJtaXNzaW9uKSB7XG4gICAgICAgIGNvbnN0IGZyYW1lID0gdGhpcy5maW5kRnJhbWVFbGVtZW50KGZvcm1TdWJtaXNzaW9uLmZvcm1FbGVtZW50KTtcbiAgICAgICAgZnJhbWUuc2V0QXR0cmlidXRlKFwiYnVzeVwiLCBcIlwiKTtcbiAgICB9XG4gICAgZm9ybVN1Ym1pc3Npb25TdWNjZWVkZWRXaXRoUmVzcG9uc2UoZm9ybVN1Ym1pc3Npb24sIHJlc3BvbnNlKSB7XG4gICAgICAgIGNvbnN0IGZyYW1lID0gdGhpcy5maW5kRnJhbWVFbGVtZW50KGZvcm1TdWJtaXNzaW9uLmZvcm1FbGVtZW50KTtcbiAgICAgICAgZnJhbWUuZGVsZWdhdGUubG9hZFJlc3BvbnNlKHJlc3BvbnNlKTtcbiAgICB9XG4gICAgZm9ybVN1Ym1pc3Npb25GYWlsZWRXaXRoUmVzcG9uc2UoZm9ybVN1Ym1pc3Npb24sIGZldGNoUmVzcG9uc2UpIHtcbiAgICAgICAgdGhpcy5lbGVtZW50LmRlbGVnYXRlLmxvYWRSZXNwb25zZShmZXRjaFJlc3BvbnNlKTtcbiAgICB9XG4gICAgZm9ybVN1Ym1pc3Npb25FcnJvcmVkKGZvcm1TdWJtaXNzaW9uLCBlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICB9XG4gICAgZm9ybVN1Ym1pc3Npb25GaW5pc2hlZChmb3JtU3VibWlzc2lvbikge1xuICAgICAgICBjb25zdCBmcmFtZSA9IHRoaXMuZmluZEZyYW1lRWxlbWVudChmb3JtU3VibWlzc2lvbi5mb3JtRWxlbWVudCk7XG4gICAgICAgIGZyYW1lLnJlbW92ZUF0dHJpYnV0ZShcImJ1c3lcIik7XG4gICAgfVxuICAgIGFsbG93c0ltbWVkaWF0ZVJlbmRlcihzbmFwc2hvdCwgcmVzdW1lKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICB2aWV3UmVuZGVyZWRTbmFwc2hvdChzbmFwc2hvdCwgaXNQcmV2aWV3KSB7XG4gICAgfVxuICAgIHZpZXdJbnZhbGlkYXRlZCgpIHtcbiAgICB9XG4gICAgYXN5bmMgdmlzaXQodXJsKSB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSBuZXcgRmV0Y2hSZXF1ZXN0KHRoaXMsIEZldGNoTWV0aG9kLmdldCwgZXhwYW5kVVJMKHVybCkpO1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlc29sdmVWaXNpdFByb21pc2UgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNvbHZlVmlzaXRQcm9taXNlID0gKCkgPT4geyB9O1xuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXF1ZXN0LnBlcmZvcm0oKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG5hdmlnYXRlRnJhbWUoZWxlbWVudCwgdXJsKSB7XG4gICAgICAgIGNvbnN0IGZyYW1lID0gdGhpcy5maW5kRnJhbWVFbGVtZW50KGVsZW1lbnQpO1xuICAgICAgICBmcmFtZS5zcmMgPSB1cmw7XG4gICAgfVxuICAgIGZpbmRGcmFtZUVsZW1lbnQoZWxlbWVudCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IGlkID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJkYXRhLXR1cmJvLWZyYW1lXCIpIHx8IHRoaXMuZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJ0YXJnZXRcIik7XG4gICAgICAgIHJldHVybiAoX2EgPSBnZXRGcmFtZUVsZW1lbnRCeUlkKGlkKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdGhpcy5lbGVtZW50O1xuICAgIH1cbiAgICBhc3luYyBleHRyYWN0Rm9yZWlnbkZyYW1lRWxlbWVudChjb250YWluZXIpIHtcbiAgICAgICAgbGV0IGVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGlkID0gQ1NTLmVzY2FwZSh0aGlzLmlkKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChlbGVtZW50ID0gYWN0aXZhdGVFbGVtZW50KGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKGB0dXJiby1mcmFtZSMke2lkfWApLCB0aGlzLmN1cnJlbnRVUkwpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZWxlbWVudCA9IGFjdGl2YXRlRWxlbWVudChjb250YWluZXIucXVlcnlTZWxlY3RvcihgdHVyYm8tZnJhbWVbc3JjXVtyZWN1cnNlfj0ke2lkfV1gKSwgdGhpcy5jdXJyZW50VVJMKSkge1xuICAgICAgICAgICAgICAgIGF3YWl0IGVsZW1lbnQubG9hZGVkO1xuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmV4dHJhY3RGb3JlaWduRnJhbWVFbGVtZW50KGVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgUmVzcG9uc2UgaGFzIG5vIG1hdGNoaW5nIDx0dXJiby1mcmFtZSBpZD1cIiR7aWR9XCI+IGVsZW1lbnRgKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgRnJhbWVFbGVtZW50KCk7XG4gICAgfVxuICAgIHNob3VsZEludGVyY2VwdE5hdmlnYXRpb24oZWxlbWVudCwgc3VibWl0dGVyKSB7XG4gICAgICAgIGNvbnN0IGlkID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJkYXRhLXR1cmJvLWZyYW1lXCIpIHx8IHRoaXMuZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJ0YXJnZXRcIik7XG4gICAgICAgIGlmICghdGhpcy5lbmFibGVkIHx8IGlkID09IFwiX3RvcFwiKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlkKSB7XG4gICAgICAgICAgICBjb25zdCBmcmFtZUVsZW1lbnQgPSBnZXRGcmFtZUVsZW1lbnRCeUlkKGlkKTtcbiAgICAgICAgICAgIGlmIChmcmFtZUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gIWZyYW1lRWxlbWVudC5kaXNhYmxlZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIXNlc3Npb24uZWxlbWVudERyaXZlRW5hYmxlZChlbGVtZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdWJtaXR0ZXIgJiYgIXNlc3Npb24uZWxlbWVudERyaXZlRW5hYmxlZChzdWJtaXR0ZXIpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGdldCBpZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5pZDtcbiAgICB9XG4gICAgZ2V0IGVuYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5lbGVtZW50LmRpc2FibGVkO1xuICAgIH1cbiAgICBnZXQgc291cmNlVVJMKCkge1xuICAgICAgICBpZiAodGhpcy5lbGVtZW50LnNyYykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5zcmM7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IHJlbG9hZGFibGUoKSB7XG4gICAgICAgIGNvbnN0IGZyYW1lID0gdGhpcy5maW5kRnJhbWVFbGVtZW50KHRoaXMuZWxlbWVudCk7XG4gICAgICAgIHJldHVybiBmcmFtZS5oYXNBdHRyaWJ1dGUoXCJyZWxvYWRhYmxlXCIpO1xuICAgIH1cbiAgICBzZXQgcmVsb2FkYWJsZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCBmcmFtZSA9IHRoaXMuZmluZEZyYW1lRWxlbWVudCh0aGlzLmVsZW1lbnQpO1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIGZyYW1lLnNldEF0dHJpYnV0ZShcInJlbG9hZGFibGVcIiwgXCJcIik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBmcmFtZS5yZW1vdmVBdHRyaWJ1dGUoXCJyZWxvYWRhYmxlXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNldCBzb3VyY2VVUkwoc291cmNlVVJMKSB7XG4gICAgICAgIHRoaXMuc2V0dGluZ1NvdXJjZVVSTCA9IHRydWU7XG4gICAgICAgIHRoaXMuZWxlbWVudC5zcmMgPSBzb3VyY2VVUkwgIT09IG51bGwgJiYgc291cmNlVVJMICE9PSB2b2lkIDAgPyBzb3VyY2VVUkwgOiBudWxsO1xuICAgICAgICB0aGlzLmN1cnJlbnRVUkwgPSB0aGlzLmVsZW1lbnQuc3JjO1xuICAgICAgICB0aGlzLnNldHRpbmdTb3VyY2VVUkwgPSBmYWxzZTtcbiAgICB9XG4gICAgZ2V0IGxvYWRpbmdTdHlsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5sb2FkaW5nO1xuICAgIH1cbiAgICBnZXQgaXNMb2FkaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtU3VibWlzc2lvbiAhPT0gdW5kZWZpbmVkIHx8IHRoaXMucmVzb2x2ZVZpc2l0UHJvbWlzZSgpICE9PSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGdldCBpc0FjdGl2ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5pc0FjdGl2ZSAmJiB0aGlzLmNvbm5lY3RlZDtcbiAgICB9XG59XG5mdW5jdGlvbiBnZXRGcmFtZUVsZW1lbnRCeUlkKGlkKSB7XG4gICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgICAgICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBGcmFtZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBlbGVtZW50O1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gYWN0aXZhdGVFbGVtZW50KGVsZW1lbnQsIGN1cnJlbnRVUkwpIHtcbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICBjb25zdCBzcmMgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShcInNyY1wiKTtcbiAgICAgICAgaWYgKHNyYyAhPSBudWxsICYmIGN1cnJlbnRVUkwgIT0gbnVsbCAmJiB1cmxzQXJlRXF1YWwoc3JjLCBjdXJyZW50VVJMKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBNYXRjaGluZyA8dHVyYm8tZnJhbWUgaWQ9XCIke2VsZW1lbnQuaWR9XCI+IGVsZW1lbnQgaGFzIGEgc291cmNlIFVSTCB3aGljaCByZWZlcmVuY2VzIGl0c2VsZmApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbGVtZW50Lm93bmVyRG9jdW1lbnQgIT09IGRvY3VtZW50KSB7XG4gICAgICAgICAgICBlbGVtZW50ID0gZG9jdW1lbnQuaW1wb3J0Tm9kZShlbGVtZW50LCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEZyYW1lRWxlbWVudCkge1xuICAgICAgICAgICAgZWxlbWVudC5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNvbnN0IFN0cmVhbUFjdGlvbnMgPSB7XG4gICAgYWZ0ZXIoKSB7XG4gICAgICAgIHRoaXMudGFyZ2V0RWxlbWVudHMuZm9yRWFjaChlID0+IHsgdmFyIF9hOyByZXR1cm4gKF9hID0gZS5wYXJlbnRFbGVtZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuaW5zZXJ0QmVmb3JlKHRoaXMudGVtcGxhdGVDb250ZW50LCBlLm5leHRTaWJsaW5nKTsgfSk7XG4gICAgfSxcbiAgICBhcHBlbmQoKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlRHVwbGljYXRlVGFyZ2V0Q2hpbGRyZW4oKTtcbiAgICAgICAgdGhpcy50YXJnZXRFbGVtZW50cy5mb3JFYWNoKGUgPT4gZS5hcHBlbmQodGhpcy50ZW1wbGF0ZUNvbnRlbnQpKTtcbiAgICB9LFxuICAgIGJlZm9yZSgpIHtcbiAgICAgICAgdGhpcy50YXJnZXRFbGVtZW50cy5mb3JFYWNoKGUgPT4geyB2YXIgX2E7IHJldHVybiAoX2EgPSBlLnBhcmVudEVsZW1lbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5pbnNlcnRCZWZvcmUodGhpcy50ZW1wbGF0ZUNvbnRlbnQsIGUpOyB9KTtcbiAgICB9LFxuICAgIHByZXBlbmQoKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlRHVwbGljYXRlVGFyZ2V0Q2hpbGRyZW4oKTtcbiAgICAgICAgdGhpcy50YXJnZXRFbGVtZW50cy5mb3JFYWNoKGUgPT4gZS5wcmVwZW5kKHRoaXMudGVtcGxhdGVDb250ZW50KSk7XG4gICAgfSxcbiAgICByZW1vdmUoKSB7XG4gICAgICAgIHRoaXMudGFyZ2V0RWxlbWVudHMuZm9yRWFjaChlID0+IGUucmVtb3ZlKCkpO1xuICAgIH0sXG4gICAgcmVwbGFjZSgpIHtcbiAgICAgICAgdGhpcy50YXJnZXRFbGVtZW50cy5mb3JFYWNoKGUgPT4gZS5yZXBsYWNlV2l0aCh0aGlzLnRlbXBsYXRlQ29udGVudCkpO1xuICAgIH0sXG4gICAgdXBkYXRlKCkge1xuICAgICAgICB0aGlzLnRhcmdldEVsZW1lbnRzLmZvckVhY2goZSA9PiB7XG4gICAgICAgICAgICBlLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgICAgICBlLmFwcGVuZCh0aGlzLnRlbXBsYXRlQ29udGVudCk7XG4gICAgICAgIH0pO1xuICAgIH1cbn07XG5cbmNsYXNzIFN0cmVhbUVsZW1lbnQgZXh0ZW5kcyBIVE1MRWxlbWVudCB7XG4gICAgYXN5bmMgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnJlbmRlcigpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyByZW5kZXIoKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmV0dXJuIChfYSA9IHRoaXMucmVuZGVyUHJvbWlzZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogKHRoaXMucmVuZGVyUHJvbWlzZSA9IChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5kaXNwYXRjaEV2ZW50KHRoaXMuYmVmb3JlUmVuZGVyRXZlbnQpKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgbmV4dEFuaW1hdGlvbkZyYW1lKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5wZXJmb3JtQWN0aW9uKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pKCkpO1xuICAgIH1cbiAgICBkaXNjb25uZWN0KCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmUoKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoX2EpIHsgfVxuICAgIH1cbiAgICByZW1vdmVEdXBsaWNhdGVUYXJnZXRDaGlsZHJlbigpIHtcbiAgICAgICAgdGhpcy5kdXBsaWNhdGVDaGlsZHJlbi5mb3JFYWNoKGMgPT4gYy5yZW1vdmUoKSk7XG4gICAgfVxuICAgIGdldCBkdXBsaWNhdGVDaGlsZHJlbigpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCBleGlzdGluZ0NoaWxkcmVuID0gdGhpcy50YXJnZXRFbGVtZW50cy5mbGF0TWFwKGUgPT4gWy4uLmUuY2hpbGRyZW5dKS5maWx0ZXIoYyA9PiAhIWMuaWQpO1xuICAgICAgICBjb25zdCBuZXdDaGlsZHJlbklkcyA9IFsuLi4oX2EgPSB0aGlzLnRlbXBsYXRlQ29udGVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNoaWxkcmVuXS5maWx0ZXIoYyA9PiAhIWMuaWQpLm1hcChjID0+IGMuaWQpO1xuICAgICAgICByZXR1cm4gZXhpc3RpbmdDaGlsZHJlbi5maWx0ZXIoYyA9PiBuZXdDaGlsZHJlbklkcy5pbmNsdWRlcyhjLmlkKSk7XG4gICAgfVxuICAgIGdldCBwZXJmb3JtQWN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5hY3Rpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbkZ1bmN0aW9uID0gU3RyZWFtQWN0aW9uc1t0aGlzLmFjdGlvbl07XG4gICAgICAgICAgICBpZiAoYWN0aW9uRnVuY3Rpb24pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWN0aW9uRnVuY3Rpb247XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnJhaXNlKFwidW5rbm93biBhY3Rpb25cIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yYWlzZShcImFjdGlvbiBhdHRyaWJ1dGUgaXMgbWlzc2luZ1wiKTtcbiAgICB9XG4gICAgZ2V0IHRhcmdldEVsZW1lbnRzKCkge1xuICAgICAgICBpZiAodGhpcy50YXJnZXQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRhcmdldEVsZW1lbnRzQnlJZDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLnRhcmdldHMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRhcmdldEVsZW1lbnRzQnlRdWVyeTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmFpc2UoXCJ0YXJnZXQgb3IgdGFyZ2V0cyBhdHRyaWJ1dGUgaXMgbWlzc2luZ1wiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgdGVtcGxhdGVDb250ZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZUVsZW1lbnQuY29udGVudC5jbG9uZU5vZGUodHJ1ZSk7XG4gICAgfVxuICAgIGdldCB0ZW1wbGF0ZUVsZW1lbnQoKSB7XG4gICAgICAgIGlmICh0aGlzLmZpcnN0RWxlbWVudENoaWxkIGluc3RhbmNlb2YgSFRNTFRlbXBsYXRlRWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmlyc3RFbGVtZW50Q2hpbGQ7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yYWlzZShcImZpcnN0IGNoaWxkIGVsZW1lbnQgbXVzdCBiZSBhIDx0ZW1wbGF0ZT4gZWxlbWVudFwiKTtcbiAgICB9XG4gICAgZ2V0IGFjdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QXR0cmlidXRlKFwiYWN0aW9uXCIpO1xuICAgIH1cbiAgICBnZXQgdGFyZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGUoXCJ0YXJnZXRcIik7XG4gICAgfVxuICAgIGdldCB0YXJnZXRzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGUoXCJ0YXJnZXRzXCIpO1xuICAgIH1cbiAgICByYWlzZShtZXNzYWdlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0aGlzLmRlc2NyaXB0aW9ufTogJHttZXNzYWdlfWApO1xuICAgIH1cbiAgICBnZXQgZGVzY3JpcHRpb24oKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIHJldHVybiAoX2IgPSAoKF9hID0gdGhpcy5vdXRlckhUTUwubWF0Y2goLzxbXj5dKz4vKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogW10pWzBdKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBcIjx0dXJiby1zdHJlYW0+XCI7XG4gICAgfVxuICAgIGdldCBiZWZvcmVSZW5kZXJFdmVudCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDdXN0b21FdmVudChcInR1cmJvOmJlZm9yZS1zdHJlYW0tcmVuZGVyXCIsIHsgYnViYmxlczogdHJ1ZSwgY2FuY2VsYWJsZTogdHJ1ZSB9KTtcbiAgICB9XG4gICAgZ2V0IHRhcmdldEVsZW1lbnRzQnlJZCgpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gKF9hID0gdGhpcy5vd25lckRvY3VtZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZ2V0RWxlbWVudEJ5SWQodGhpcy50YXJnZXQpO1xuICAgICAgICBpZiAoZWxlbWVudCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIFtlbGVtZW50XTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgdGFyZ2V0RWxlbWVudHNCeVF1ZXJ5KCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRzID0gKF9hID0gdGhpcy5vd25lckRvY3VtZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EucXVlcnlTZWxlY3RvckFsbCh0aGlzLnRhcmdldHMpO1xuICAgICAgICBpZiAoZWxlbWVudHMubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZWxlbWVudHMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5GcmFtZUVsZW1lbnQuZGVsZWdhdGVDb25zdHJ1Y3RvciA9IEZyYW1lQ29udHJvbGxlcjtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInR1cmJvLWZyYW1lXCIsIEZyYW1lRWxlbWVudCk7XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ0dXJiby1zdHJlYW1cIiwgU3RyZWFtRWxlbWVudCk7XG5cbigoKSA9PiB7XG4gICAgbGV0IGVsZW1lbnQgPSBkb2N1bWVudC5jdXJyZW50U2NyaXB0O1xuICAgIGlmICghZWxlbWVudClcbiAgICAgICAgcmV0dXJuO1xuICAgIGlmIChlbGVtZW50Lmhhc0F0dHJpYnV0ZShcImRhdGEtdHVyYm8tc3VwcHJlc3Mtd2FybmluZ1wiKSlcbiAgICAgICAgcmV0dXJuO1xuICAgIHdoaWxlIChlbGVtZW50ID0gZWxlbWVudC5wYXJlbnRFbGVtZW50KSB7XG4gICAgICAgIGlmIChlbGVtZW50ID09IGRvY3VtZW50LmJvZHkpIHtcbiAgICAgICAgICAgIHJldHVybiBjb25zb2xlLndhcm4odW5pbmRlbnQgYFxuICAgICAgICBZb3UgYXJlIGxvYWRpbmcgVHVyYm8gZnJvbSBhIDxzY3JpcHQ+IGVsZW1lbnQgaW5zaWRlIHRoZSA8Ym9keT4gZWxlbWVudC4gVGhpcyBpcyBwcm9iYWJseSBub3Qgd2hhdCB5b3UgbWVhbnQgdG8gZG8hXG5cbiAgICAgICAgTG9hZCB5b3VyIGFwcGxpY2F0aW9uXHUyMDE5cyBKYXZhU2NyaXB0IGJ1bmRsZSBpbnNpZGUgdGhlIDxoZWFkPiBlbGVtZW50IGluc3RlYWQuIDxzY3JpcHQ+IGVsZW1lbnRzIGluIDxib2R5PiBhcmUgZXZhbHVhdGVkIHdpdGggZWFjaCBwYWdlIGNoYW5nZS5cblxuICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlOiBodHRwczovL3R1cmJvLmhvdHdpcmVkLmRldi9oYW5kYm9vay9idWlsZGluZyN3b3JraW5nLXdpdGgtc2NyaXB0LWVsZW1lbnRzXG5cbiAgICAgICAgXHUyMDE0XHUyMDE0XG4gICAgICAgIFN1cHByZXNzIHRoaXMgd2FybmluZyBieSBhZGRpbmcgYSBcImRhdGEtdHVyYm8tc3VwcHJlc3Mtd2FybmluZ1wiIGF0dHJpYnV0ZSB0bzogJXNcbiAgICAgIGAsIGVsZW1lbnQub3V0ZXJIVE1MKTtcbiAgICAgICAgfVxuICAgIH1cbn0pKCk7XG5cbndpbmRvdy5UdXJibyA9IFR1cmJvO1xuc3RhcnQoKTtcblxuZXhwb3J0IHsgUGFnZVJlbmRlcmVyLCBQYWdlU25hcHNob3QsIGNsZWFyQ2FjaGUsIGNvbm5lY3RTdHJlYW1Tb3VyY2UsIGRpc2Nvbm5lY3RTdHJlYW1Tb3VyY2UsIG5hdmlnYXRvciwgcmVnaXN0ZXJBZGFwdGVyLCByZW5kZXJTdHJlYW1NZXNzYWdlLCBzZXNzaW9uLCBzZXRQcm9ncmVzc0JhckRlbGF5LCBzdGFydCwgdmlzaXQgfTtcbiIsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsICJleHBvcnQgY29uc3QgZGVmaW5pdGlvbnMgPSBbXG5dO1xuIiwgImltcG9ydCAqIGFzIFR1cmJvIGZyb20gXCJAaG90d2lyZWQvdHVyYm9cIlxuaW1wb3J0IHsgQXBwbGljYXRpb24gfSBmcm9tIFwic3RpbXVsdXNcIlxuaW1wb3J0IHsgZGVmaW5pdGlvbnMgfSBmcm9tICdzdGltdWx1czouL2NvbnRyb2xsZXJzJztcblxuY29uc3QgYXBwID0gQXBwbGljYXRpb24uc3RhcnQoKTtcbmFwcC5sb2FkKGRlZmluaXRpb25zKTtcbiJdLAogICJtYXBwaW5ncyI6ICJNQUlBLEFBQUMsV0FBWSxDQUNULEdBQUksT0FBTyxVQUFZLFFBQWEsT0FBTyxpQkFBbUIsUUFDMUQsT0FBTyxlQUFlLDBCQUN0QixPQUVKLEdBQU0sR0FBcUIsWUFDckIsRUFBb0IsQ0FDdEIsWUFBZSxVQUF1QixDQUNsQyxNQUFPLFNBQVEsVUFBVSxFQUFvQixHQUFJLEtBQUssZUFHOUQsT0FBTyxZQUNILEVBQWtCLFlBQ3RCLFlBQVksVUFBWSxFQUFtQixVQUMzQyxZQUFZLFVBQVUsWUFBYyxZQUNwQyxPQUFPLGVBQWUsWUFBYSxPQUd2QyxHQUFNLEdBQW1CLEdBQUksU0FDN0IsWUFBc0MsRUFBUSxDQUMxQyxHQUFNLEdBQVUsWUFBa0IsU0FBVSxFQUFTLFlBQWtCLE1BQU8sRUFBTyxjQUFnQixLQUMvRixFQUFZLEVBQVUsRUFBUSxRQUFRLGlCQUFtQixLQUMvRCxNQUFRLElBQWMsS0FBK0IsT0FBUyxFQUFVLE9BQVMsU0FBVyxFQUFZLEtBRTVHLFlBQXVCLEVBQU8sQ0FDMUIsR0FBTSxHQUFZLEdBQTZCLEVBQU0sUUFDckQsQUFBSSxHQUFhLEVBQVUsTUFDdkIsRUFBaUIsSUFBSSxFQUFVLEtBQU0sR0FHN0MsQUFBQyxXQUFZLENBQ1QsQUFBSSxlQUFpQixTQUVyQixrQkFBaUIsUUFBUyxHQUFlLElBQ3pDLE9BQU8sZUFBZSxNQUFNLFVBQVcsWUFBYSxDQUNoRCxLQUFNLENBQ0YsR0FBSSxLQUFLLE1BQVEsVUFBWSxLQUFLLGlCQUFrQixpQkFDaEQsTUFBTyxHQUFpQixJQUFJLEtBQUssZ0JBTWpELEdBQUksR0FDSixBQUFDLFVBQVUsRUFBbUIsQ0FDMUIsRUFBa0IsTUFBVyxRQUM3QixFQUFrQixLQUFVLFNBQzdCLEdBQXNCLEdBQW9CLEtBQzdDLG1CQUEyQixZQUFZLENBQ25DLGFBQWMsQ0FDVixRQUNBLEtBQUssT0FBUyxRQUFRLFVBQ3RCLEtBQUssU0FB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 +%o`,i,e,r)},t}();function $n(){return new Promise(function(t){document.readyState=="loading"?document.addEventListener("DOMContentLoaded",t):t()})}function Bi(t){var e=ce(t,"classes");return e.reduce(function(i,r){return Object.assign(i,qn(r))},{})}function qn(t){var e,i=t+"Class";return e={},e[i]={get:function(){var r=this.classes;if(r.has(t))return r.get(t);var n=r.getAttributeName(t);throw new Error('Missing attribute "'+n+'"')}},e["has"+ue(i)]={get:function(){return this.classes.has(t)}},e}function Hi(t){var e=ce(t,"targets");return e.reduce(function(i,r){return Object.assign(i,Wn(r))},{})}function Wn(t){var e;return e={},e[t+"Target"]={get:function(){var i=this.targets.find(t);if(i)return i;throw new Error('Missing target element "'+this.identifier+"."+t+'"')}},e[t+"Targets"]={get:function(){return this.targets.findAll(t)}},e["has"+ue(t)+"Target"]={get:function(){return this.targets.has(t)}},e}function ji(t){var e=Ci(t,"values"),i={valueDescriptorMap:{get:function(){var r=this;return e.reduce(function(n,s){var o,a=Ui(s),l=r.data.getAttributeNameForKey(a.key);return Object.assign(n,(o={},o[l]=a,o))},{})}}};return e.reduce(function(r,n){return Object.assign(r,Kn(n))},i)}function Kn(t){var e,i=Ui(t),r=i.type,n=i.key,s=i.name,o=Gn[r],a=Vi[r]||Vi.default;return e={},e[s]={get:function(){var l=this.data.get(n);return l!==null?o(l):i.defaultValue},set:function(l){l===void 0?this.data.delete(n):this.data.set(n,a(l))}},e["has"+ue(s)]={get:function(){return this.data.has(n)}},e}function Ui(t){var e=t[0],i=t[1],r=zn(i);return Jn(e,r)}function zn(t){switch(t){case Array:return"array";case Boolean:return"boolean";case Number:return"number";case Object:return"object";case String:return"string"}throw new Error('Unknown value type constant "'+t+'"')}function Jn(t,e){var i=je(t)+"-value";return{type:e,key:i,name:Oi(i),get defaultValue(){return Xn[e]}}}var Xn={get array(){return[]},boolean:!1,number:0,get object(){return{}},string:""},Gn={array:function(t){var e=JSON.parse(t);if(!Array.isArray(e))throw new TypeError("Expected array");return e},boolean:function(t){return!(t=="0"||t=="false")},number:function(t){return parseFloat(t)},object:function(t){var e=JSON.parse(t);if(e===null||typeof e!="object"||Array.isArray(e))throw new TypeError("Expected object");return e},string:function(t){return t}},Vi={default:Yn,array:$i,object:$i};function $i(t){return JSON.stringify(t)}function Yn(t){return""+t}var Qn=function(){function t(e){this.context=e}return Object.defineProperty(t.prototype,"application",{get:function(){return this.context.application},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"scope",{get:function(){return this.context.scope},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"element",{get:function(){return this.scope.element},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"identifier",{get:function(){return this.scope.identifier},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"targets",{get:function(){return this.scope.targets},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"classes",{get:function(){return this.scope.classes},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"data",{get:function(){return this.scope.data},enumerable:!1,configurable:!0}),t.prototype.initialize=function(){},t.prototype.connect=function(){},t.prototype.disconnect=function(){},t.blessings=[Bi,Hi,ji],t.targets=[],t.values={},t}();var qi=[];var be=t=>typeof t=="function"?t:function(){return t},Zn=typeof self!="undefined"?self:null,ye=typeof window!="undefined"?window:null,Ue=Zn||ye||void 0,es="2.0.0",B={connecting:0,open:1,closing:2,closed:3},ts=1e4,is=1e3,I={closed:"closed",errored:"errored",joined:"joined",joining:"joining",leaving:"leaving"},R={close:"phx_close",error:"phx_error",join:"phx_join",reply:"phx_reply",leave:"phx_leave"},rs=[R.close,R.error,R.join,R.reply,R.leave],pt={longpoll:"longpoll",websocket:"websocket"},Ve=class{constructor(t,e,i,r){this.channel=t,this.event=e,this.payload=i||function(){return{}},this.receivedResp=null,this.timeout=r,this.timeoutTimer=null,this.recHooks=[],this.sent=!1}resend(t){this.timeout=t,this.reset(),this.send()}send(){this.hasReceived("timeout")||(this.startTimeout(),this.sent=!0,this.channel.socket.push({topic:this.channel.topic,event:this.event,payload:this.payload(),ref:this.ref,join_ref:this.channel.joinRef()}))}receive(t,e){return this.hasReceived(t)&&e(this.receivedResp.response),this.recHooks.push({status:t,callback:e}),this}reset(){this.cancelRefEvent(),this.ref=null,this.refEvent=null,this.receivedResp=null,this.sent=!1}matchReceive({status:t,response:e,_ref:i}){this.recHooks.filter(r=>r.status===t).forEach(r=>r.callback(e))}cancelRefEvent(){!this.refEvent||this.channel.off(this.refEvent)}cancelTimeout(){clearTimeout(this.timeoutTimer),this.timeoutTimer=null}startTimeout(){this.timeoutTimer&&this.cancelTimeout(),this.ref=this.channel.socket.makeRef(),this.refEvent=this.channel.replyEventName(this.ref),this.channel.on(this.refEvent,t=>{this.cancelRefEvent(),this.cancelTimeout(),this.receivedResp=t,this.matchReceive(t)}),this.timeoutTimer=setTimeout(()=>{this.trigger("timeout",{})},this.timeout)}hasReceived(t){return this.receivedResp&&this.receivedResp.status===t}trigger(t,e){this.channel.trigger(this.refEvent,{status:t,response:e})}},Wi=class{constructor(t,e){this.callback=t,this.timerCalc=e,this.timer=null,this.tries=0}reset(){this.tries=0,clearTimeout(this.timer)}scheduleTimeout(){clearTimeout(this.timer),this.timer=setTimeout(()=>{this.tries=this.tries+1,this.callback()},this.timerCalc(this.tries+1))}},ns=class{constructor(t,e,i){this.state=I.closed,this.topic=t,this.params=be(e||{}),this.socket=i,this.bindings=[],this.bindingRef=0,this.timeout=this.socket.timeout,this.joinedOnce=!1,this.joinPush=new Ve(this,R.join,this.params,this.timeout),this.pushBuffer=[],this.stateChangeRefs=[],this.rejoinTimer=new Wi(()=>{this.socket.isConnected()&&this.rejoin()},this.socket.rejoinAfterMs),this.stateChangeRefs.push(this.socket.onError(()=>this.rejoinTimer.reset())),this.stateChangeRefs.push(this.socket.onOpen(()=>{this.rejoinTimer.reset(),this.isErrored()&&this.rejoin()})),this.joinPush.receive("ok",()=>{this.state=I.joined,this.rejoinTimer.reset(),this.pushBuffer.forEach(r=>r.send()),this.pushBuffer=[]}),this.joinPush.receive("error",()=>{this.state=I.errored,this.socket.isConnected()&&this.rejoinTimer.scheduleTimeout()}),this.onClose(()=>{this.rejoinTimer.reset(),this.socket.hasLogger()&&this.socket.log("channel",`close ${this.topic} ${this.joinRef()}`),this.state=I.closed,this.socket.remove(this)}),this.onError(r=>{this.socket.hasLogger()&&this.socket.log("channel",`error ${this.topic}`,r),this.isJoining()&&this.joinPush.reset(),this.state=I.errored,this.socket.isConnected()&&this.rejoinTimer.scheduleTimeout()}),this.joinPush.receive("timeout",()=>{this.socket.hasLogger()&&this.socket.log("channel",`timeout ${this.topic} (${this.joinRef()})`,this.joinPush.timeout),new Ve(this,R.leave,be({}),this.timeout).send(),this.state=I.errored,this.joinPush.reset(),this.socket.isConnected()&&this.rejoinTimer.scheduleTimeout()}),this.on(R.reply,(r,n)=>{this.trigger(this.replyEventName(n),r)})}join(t=this.timeout){if(this.joinedOnce)throw new Error("tried to join multiple times. 'join' can only be called a single time per channel instance");return this.timeout=t,this.joinedOnce=!0,this.rejoin(),this.joinPush}onClose(t){this.on(R.close,t)}onError(t){return this.on(R.error,e=>t(e))}on(t,e){let i=this.bindingRef++;return this.bindings.push({event:t,ref:i,callback:e}),i}off(t,e){this.bindings=this.bindings.filter(i=>!(i.event===t&&(typeof e=="undefined"||e===i.ref)))}canPush(){return this.socket.isConnected()&&this.isJoined()}push(t,e,i=this.timeout){if(e=e||{},!this.joinedOnce)throw new Error(`tried to push '${t}' to '${this.topic}' before joining. Use channel.join() before pushing events`);let r=new Ve(this,t,function(){return e},i);return this.canPush()?r.send():(r.startTimeout(),this.pushBuffer.push(r)),r}leave(t=this.timeout){this.rejoinTimer.reset(),this.joinPush.cancelTimeout(),this.state=I.leaving;let e=()=>{this.socket.hasLogger()&&this.socket.log("channel",`leave ${this.topic}`),this.trigger(R.close,"leave")},i=new Ve(this,R.leave,be({}),t);return i.receive("ok",()=>e()).receive("timeout",()=>e()),i.send(),this.canPush()||i.trigger("ok",{}),i}onMessage(t,e,i){return e}isLifecycleEvent(t){return rs.indexOf(t)>=0}isMember(t,e,i,r){return this.topic!==t?!1:r&&r!==this.joinRef()&&this.isLifecycleEvent(e)?(this.socket.hasLogger()&&this.socket.log("channel","dropping outdated message",{topic:t,event:e,payload:i,joinRef:r}),!1):!0}joinRef(){return this.joinPush.ref}rejoin(t=this.timeout){this.isLeaving()||(this.socket.leaveOpenTopic(this.topic),this.state=I.joining,this.joinPush.resend(t))}trigger(t,e,i,r){let n=this.onMessage(t,e,i,r);if(e&&!n)throw new Error("channel onMessage callbacks must return the payload, modified or unmodified");let s=this.bindings.filter(o=>o.event===t);for(let o=0;o<s.length;o++)s[o].callback(n,i,r||this.joinRef())}replyEventName(t){return`chan_reply_${t}`}isClosed(){return this.state===I.closed}isErrored(){return this.state===I.errored}isJoined(){return this.state===I.joined}isJoining(){return this.state===I.joining}isLeaving(){return this.state===I.leaving}},we=class{constructor(){this.states={complete:4}}static request(t,e,i,r,n,s,o){if(Ue.XDomainRequest){let a=new Ue.XDomainRequest;this.xdomainRequest(a,t,e,r,n,s,o)}else{let a=new Ue.XMLHttpRequest;this.xhrRequest(a,t,e,i,r,n,s,o)}}static xdomainRequest(t,e,i,r,n,s,o){t.timeout=n,t.open(e,i),t.onload=()=>{let a=this.parseJSON(t.responseText);o&&o(a)},s&&(t.ontimeout=s),t.onprogress=()=>{},t.send(r)}static xhrRequest(t,e,i,r,n,s,o,a){t.open(e,i,!0),t.timeout=s,t.setRequestHeader("Content-Type",r),t.onerror=()=>{a&&a(null)},t.onreadystatechange=()=>{if(t.readyState===this.states.complete&&a){let l=this.parseJSON(t.responseText);a(l)}},o&&(t.ontimeout=o),t.send(n)}static parseJSON(t){if(!t||t==="")return null;try{return JSON.parse(t)}catch(e){return console&&console.log("failed to parse JSON response",t),null}}static serialize(t,e){let i=[];for(var r in t){if(!Object.prototype.hasOwnProperty.call(t,r))continue;let n=e?`${e}[${r}]`:r,s=t[r];typeof s=="object"?i.push(this.serialize(s,n)):i.push(encodeURIComponent(n)+"="+encodeURIComponent(s))}return i.join("&")}static appendParams(t,e){if(Object.keys(e).length===0)return t;let i=t.match(/\?/)?"&":"?";return`${t}${i}${this.serialize(e)}`}},Ki=class{constructor(t){this.endPoint=null,this.token=null,this.skipHeartbeat=!0,this.onopen=function(){},this.onerror=function(){},this.onmessage=function(){},this.onclose=function(){},this.pollEndpoint=this.normalizeEndpoint(t),this.readyState=B.connecting,this.poll()}normalizeEndpoint(t){return t.replace("ws://","http://").replace("wss://","https://").replace(new RegExp("(.*)/"+pt.websocket),"$1/"+pt.longpoll)}endpointURL(){return we.appendParams(this.pollEndpoint,{token:this.token})}closeAndRetry(){this.close(),this.readyState=B.connecting}ontimeout(){this.onerror("timeout"),this.closeAndRetry()}poll(){(this.readyState===B.open||this.readyState===B.connecting)&&we.request("GET",this.endpointURL(),"application/json",null,this.timeout,this.ontimeout.bind(this),t=>{if(t){var{status:e,token:i,messages:r}=t;this.token=i}else e=0;switch(e){case 200:r.forEach(n=>{setTimeout(()=>{this.onmessage({data:n})},0)}),this.poll();break;case 204:this.poll();break;case 410:this.readyState=B.open,this.onopen(),this.poll();break;case 403:this.onerror(),this.close();break;case 0:case 500:this.onerror(),this.closeAndRetry();break;default:throw new Error(`unhandled poll status ${e}`)}})}send(t){we.request("POST",this.endpointURL(),"application/json",t,this.timeout,this.onerror.bind(this,"timeout"),e=>{(!e||e.status!==200)&&(this.onerror(e&&e.status),this.closeAndRetry())})}close(t,e){this.readyState=B.closed,this.onclose()}};var $e={HEADER_LENGTH:1,META_LENGTH:4,KINDS:{push:0,reply:1,broadcast:2},encode(t,e){if(t.payload.constructor===ArrayBuffer)return e(this.binaryEncode(t));{let i=[t.join_ref,t.ref,t.topic,t.event,t.payload];return e(JSON.stringify(i))}},decode(t,e){if(t.constructor===ArrayBuffer)return e(this.binaryDecode(t));{let[i,r,n,s,o]=JSON.parse(t);return e({join_ref:i,ref:r,topic:n,event:s,payload:o})}},binaryEncode(t){let{join_ref:e,ref:i,event:r,topic:n,payload:s}=t,o=this.META_LENGTH+e.length+i.length+n.length+r.length,a=new ArrayBuffer(this.HEADER_LENGTH+o),l=new DataView(a),h=0;l.setUint8(h++,this.KINDS.push),l.setUint8(h++,e.length),l.setUint8(h++,i.length),l.setUint8(h++,n.length),l.setUint8(h++,r.length),Array.from(e,f=>l.setUint8(h++,f.charCodeAt(0))),Array.from(i,f=>l.setUint8(h++,f.charCodeAt(0))),Array.from(n,f=>l.setUint8(h++,f.charCodeAt(0))),Array.from(r,f=>l.setUint8(h++,f.charCodeAt(0)));var u=new Uint8Array(a.byteLength+s.byteLength);return u.set(new Uint8Array(a),0),u.set(new Uint8Array(s),a.byteLength),u.buffer},binaryDecode(t){let e=new DataView(t),i=e.getUint8(0),r=new TextDecoder;switch(i){case this.KINDS.push:return this.decodePush(t,e,r);case this.KINDS.reply:return this.decodeReply(t,e,r);case this.KINDS.broadcast:return this.decodeBroadcast(t,e,r)}},decodePush(t,e,i){let r=e.getUint8(1),n=e.getUint8(2),s=e.getUint8(3),o=this.HEADER_LENGTH+this.META_LENGTH-1,a=i.decode(t.slice(o,o+r));o=o+r;let l=i.decode(t.slice(o,o+n));o=o+n;let h=i.decode(t.slice(o,o+s));o=o+s;let u=t.slice(o,t.byteLength);return{join_ref:a,ref:null,topic:l,event:h,payload:u}},decodeReply(t,e,i){let r=e.getUint8(1),n=e.getUint8(2),s=e.getUint8(3),o=e.getUint8(4),a=this.HEADER_LENGTH+this.META_LENGTH,l=i.decode(t.slice(a,a+r));a=a+r;let h=i.decode(t.slice(a,a+n));a=a+n;let u=i.decode(t.slice(a,a+s));a=a+s;let f=i.decode(t.slice(a,a+o));a=a+o;let y=t.slice(a,t.byteLength),w={status:f,response:y};return{join_ref:l,ref:h,topic:u,event:R.reply,payload:w}},decodeBroadcast(t,e,i){let r=e.getUint8(1),n=e.getUint8(2),s=this.HEADER_LENGTH+2,o=i.decode(t.slice(s,s+r));s=s+r;let a=i.decode(t.slice(s,s+n));s=s+n;let l=t.slice(s,t.byteLength);return{join_ref:null,ref:null,topic:o,event:a,payload:l}}},zi=class{constructor(t,e={}){this.stateChangeCallbacks={open:[],close:[],error:[],message:[]},this.channels=[],this.sendBuffer=[],this.ref=0,this.timeout=e.timeout||ts,this.transport=e.transport||Ue.WebSocket||Ki,this.establishedConnections=0,this.defaultEncoder=$e.encode.bind($e),this.defaultDecoder=$e.decode.bind($e),this.closeWasClean=!1,this.binaryType=e.binaryType||"arraybuffer",this.connectClock=1,this.transport!==Ki?(this.encode=e.encode||this.defaultEncoder,this.decode=e.decode||this.defaultDecoder):(this.encode=this.defaultEncoder,this.decode=this.defaultDecoder);let i=null;ye&&ye.addEventListener&&(ye.addEventListener("pagehide",r=>{this.conn&&(this.disconnect(),i=this.connectClock)}),ye.addEventListener("pageshow",r=>{i===this.connectClock&&(i=null,this.connect())})),this.heartbeatIntervalMs=e.heartbeatIntervalMs||3e4,this.rejoinAfterMs=r=>e.rejoinAfterMs?e.rejoinAfterMs(r):[1e3,2e3,5e3][r-1]||1e4,this.reconnectAfterMs=r=>e.reconnectAfterMs?e.reconnectAfterMs(r):[10,50,100,150,200,250,500,1e3,2e3][r-1]||5e3,this.logger=e.logger||null,this.longpollerTimeout=e.longpollerTimeout||2e4,this.params=be(e.params||{}),this.endPoint=`${t}/${pt.websocket}`,this.vsn=e.vsn||es,this.heartbeatTimer=null,this.pendingHeartbeatRef=null,this.reconnectTimer=new Wi(()=>{this.teardown(()=>this.connect())},this.reconnectAfterMs)}replaceTransport(t){this.disconnect(),this.transport=t}protocol(){return location.protocol.match(/^https/)?"wss":"ws"}endPointURL(){let t=we.appendParams(we.appendParams(this.endPoint,this.params()),{vsn:this.vsn});return t.charAt(0)!=="/"?t:t.charAt(1)==="/"?`${this.protocol()}:${t}`:`${this.protocol()}://${location.host}${t}`}disconnect(t,e,i){this.connectClock++,this.closeWasClean=!0,this.reconnectTimer.reset(),this.teardown(t,e,i)}connect(t){this.connectClock++,t&&(console&&console.log("passing params to connect is deprecated. Instead pass :params to the Socket constructor"),this.params=be(t)),!this.conn&&(this.closeWasClean=!1,this.conn=new this.transport(this.endPointURL()),this.conn.binaryType=this.binaryType,this.conn.timeout=this.longpollerTimeout,this.conn.onopen=()=>this.onConnOpen(),this.conn.onerror=e=>this.onConnError(e),this.conn.onmessage=e=>this.onConnMessage(e),this.conn.onclose=e=>this.onConnClose(e))}log(t,e,i){this.logger(t,e,i)}hasLogger(){return this.logger!==null}onOpen(t){let e=this.makeRef();return this.stateChangeCallbacks.open.push([e,t]),e}onClose(t){let e=this.makeRef();return this.stateChangeCallbacks.close.push([e,t]),e}onError(t){let e=this.makeRef();return this.stateChangeCallbacks.error.push([e,t]),e}onMessage(t){let e=this.makeRef();return this.stateChangeCallbacks.message.push([e,t]),e}onConnOpen(){this.hasLogger()&&this.log("transport",`connected to ${this.endPointURL()}`),this.closeWasClean=!1,this.establishedConnections++,this.flushSendBuffer(),this.reconnectTimer.reset(),this.resetHeartbeat(),this.stateChangeCallbacks.open.forEach(([,t])=>t())}heartbeatTimeout(){this.pendingHeartbeatRef&&(this.pendingHeartbeatRef=null,this.hasLogger()&&this.log("transport","heartbeat timeout. Attempting to re-establish connection"),this.abnormalClose("heartbeat timeout"))}resetHeartbeat(){this.conn&&this.conn.skipHeartbeat||(this.pendingHeartbeatRef=null,clearTimeout(this.heartbeatTimer),setTimeout(()=>this.sendHeartbeat(),this.heartbeatIntervalMs))}teardown(t,e,i){if(!this.conn)return t&&t();this.waitForBufferDone(()=>{this.conn&&(e?this.conn.close(e,i||""):this.conn.close()),this.waitForSocketClosed(()=>{this.conn&&(this.conn.onclose=function(){},this.conn=null),t&&t()})})}waitForBufferDone(t,e=1){if(e===5||!this.conn||!this.conn.bufferedAmount){t();return}setTimeout(()=>{this.waitForBufferDone(t,e+1)},150*e)}waitForSocketClosed(t,e=1){if(e===5||!this.conn||this.conn.readyState===B.closed){t();return}setTimeout(()=>{this.waitForSocketClosed(t,e+1)},150*e)}onConnClose(t){this.hasLogger()&&this.log("transport","close",t),this.triggerChanError(),clearTimeout(this.heartbeatTimer),this.closeWasClean||this.reconnectTimer.scheduleTimeout(),this.stateChangeCallbacks.close.forEach(([,e])=>e(t))}onConnError(t){this.hasLogger()&&this.log("transport",t);let e=this.transport,i=this.establishedConnections;this.stateChangeCallbacks.error.forEach(([,r])=>{r(t,e,i)}),(e===this.transport||i>0)&&this.triggerChanError()}triggerChanError(){this.channels.forEach(t=>{t.isErrored()||t.isLeaving()||t.isClosed()||t.trigger(R.error)})}connectionState(){switch(this.conn&&this.conn.readyState){case B.connecting:return"connecting";case B.open:return"open";case B.closing:return"closing";default:return"closed"}}isConnected(){return this.connectionState()==="open"}remove(t){this.off(t.stateChangeRefs),this.channels=this.channels.filter(e=>e.joinRef()!==t.joinRef())}off(t){for(let e in this.stateChangeCallbacks)this.stateChangeCallbacks[e]=this.stateChangeCallbacks[e].filter(([i])=>t.indexOf(i)===-1)}channel(t,e={}){let i=new ns(t,e,this);return this.channels.push(i),i}push(t){if(this.hasLogger()){let{topic:e,event:i,payload:r,ref:n,join_ref:s}=t;this.log("push",`${e} ${i} (${s}, ${n})`,r)}this.isConnected()?this.encode(t,e=>this.conn.send(e)):this.sendBuffer.push(()=>this.encode(t,e=>this.conn.send(e)))}makeRef(){let t=this.ref+1;return t===this.ref?this.ref=0:this.ref=t,this.ref.toString()}sendHeartbeat(){this.pendingHeartbeatRef&&!this.isConnected()||(this.pendingHeartbeatRef=this.makeRef(),this.push({topic:"phoenix",event:"heartbeat",payload:{},ref:this.pendingHeartbeatRef}),this.heartbeatTimer=setTimeout(()=>this.heartbeatTimeout(),this.heartbeatIntervalMs))}abnormalClose(t){this.closeWasClean=!1,this.isConnected()&&this.conn.close(is,t)}flushSendBuffer(){this.isConnected()&&this.sendBuffer.length>0&&(this.sendBuffer.forEach(t=>t()),this.sendBuffer=[])}onConnMessage(t){this.decode(t.data,e=>{let{topic:i,event:r,payload:n,ref:s,join_ref:o}=e;s&&s===this.pendingHeartbeatRef&&(clearTimeout(this.heartbeatTimer),this.pendingHeartbeatRef=null,setTimeout(()=>this.sendHeartbeat(),this.heartbeatIntervalMs)),this.hasLogger()&&this.log("receive",`${n.status||""} ${i} ${r} ${s&&"("+s+")"||""}`,n);for(let a=0;a<this.channels.length;a++){let l=this.channels[a];!l.isMember(i,r,n,o)||l.trigger(r,n,s,o)}for(let a=0;a<this.stateChangeCallbacks.message.length;a++){let[,l]=this.stateChangeCallbacks.message[a];l(e)}})}leaveOpenTopic(t){let e=this.channels.find(i=>i.topic===t&&(i.isJoined()||i.isJoining()));e&&(this.hasLogger()&&this.log("transport",`leaving duplicate topic "${t}"`),e.leave())}};var Ji="consecutive-reloads",Xi=10,ss=[1e3,3e3],os=3e4,Gi=["phx-click-loading","phx-change-loading","phx-submit-loading","phx-keydown-loading","phx-keyup-loading","phx-blur-loading","phx-focus-loading"],_="data-phx-component",mt="data-phx-link",as="track-static",ls="data-phx-link-state",H="data-phx-ref",Yi="track-uploads",re="data-phx-upload-ref",gt="data-phx-preflighted-refs",hs="data-phx-done-refs",Qi="drop-target",vt="data-phx-active-refs",bt="phx:live-file:updated",yt="data-phx-skip",Zi="data-phx-remove",er="page-loading",tr="phx-connected",qe="phx-disconnected",ir="phx-no-feedback",rr="phx-error",Ee="data-phx-parent-id",nr="data-phx-main",We="data-phx-root-id",cs="trigger-action",sr="feedback-for",or="phx-has-focused",us=["text","textarea","number","email","password","search","tel","url","date","time"],ar=["checkbox","radio"],lr="phx-has-submitted",ee="data-phx-session",de=`[${ee}]`,Se="data-phx-static",wt="data-phx-readonly",Ke="data-phx-disabled",Et="disable-with",ze="data-phx-disable-with-restore",Je="hook",ds="debounce",fs="throttle",St="update",ps="key",j="phxPrivate",hr="auto-recover",At="phx:live-socket:debug",Ct="phx:live-socket:profiling",Tt="phx:live-socket:latency-sim",ms="progress",gs=1,vs=200,bs="phx-",ys=3e4,Ae="debounce-trigger",Xe="throttled",cr="debounce-prev-key",ws={debounce:300,throttle:300},ur="d",U="s",x="c",dr="e",fr="r",pr="t",Es=class{constructor(t,e,i){this.liveSocket=i,this.entry=t,this.offset=0,this.chunkSize=e,this.chunkTimer=null,this.uploadChannel=i.channel(`lvu:${t.ref}`,{token:t.metadata()})}error(t){clearTimeout(this.chunkTimer),this.uploadChannel.leave(),this.entry.error(t)}upload(){this.uploadChannel.onError(t=>this.error(t)),this.uploadChannel.join().receive("ok",t=>this.readNextChunk()).receive("error",t=>this.error(t))}isDone(){return this.offset>=this.entry.file.size}readNextChunk(){let t=new window.FileReader,e=this.entry.file.slice(this.offset,this.chunkSize+this.offset);t.onload=i=>{if(i.target.error===null)this.offset+=i.target.result.byteLength,this.pushChunk(i.target.result);else return C("Read error: "+i.target.error)},t.readAsArrayBuffer(e)}pushChunk(t){!this.uploadChannel.isJoined()||this.uploadChannel.push("chunk",t).receive("ok",()=>{this.entry.progress(this.offset/this.entry.file.size*100),this.isDone()||(this.chunkTimer=setTimeout(()=>this.readNextChunk(),this.liveSocket.getLatencySim()||0))})}},C=(t,e)=>console.error&&console.error(t,e);function Ss(){let t=new Set,e=document.querySelectorAll("*[id]");for(let i=0,r=e.length;i<r;i++)t.has(e[i].id)?console.error(`Multiple IDs detected: ${e[i].id}. Ensure unique element ids.`):t.add(e[i].id)}var As=(t,e,i,r)=>{t.liveSocket.isDebugEnabled()&&console.log(`${t.id} ${e}: ${i} - `,r)},Pt=t=>typeof t=="function"?t:function(){return t},Ce=t=>JSON.parse(JSON.stringify(t)),Te=(t,e,i)=>{do{if(t.matches(`[${e}]`))return t;t=t.parentElement||t.parentNode}while(t!==null&&t.nodeType===1&&!(i&&i.isSameNode(t)||t.matches(de)));return null},Pe=t=>t!==null&&typeof t=="object"&&!(t instanceof Array),Cs=(t,e)=>JSON.stringify(t)===JSON.stringify(e),mr=t=>{for(let e in t)return!1;return!0},W=(t,e)=>t&&e(t),Ts=function(t,e,i,r){t.forEach(n=>{new Es(n,i.config.chunk_size,r).upload()})},gr={canPushState(){return typeof history.pushState!="undefined"},dropLocal(t,e,i){return t.removeItem(this.localKey(e,i))},updateLocal(t,e,i,r,n){let s=this.getLocal(t,e,i),o=this.localKey(e,i),a=s===null?r:n(s);return t.setItem(o,JSON.stringify(a)),a},getLocal(t,e,i){return JSON.parse(t.getItem(this.localKey(e,i)))},updateCurrentState(t){!this.canPushState()||history.replaceState(t(history.state||{}),"",window.location.href)},pushState(t,e,i){if(this.canPushState()){if(i!==window.location.href){if(e.type=="redirect"&&e.scroll){let n=history.state||{};n.scroll=e.scroll,history.replaceState(n,"",window.location.href)}delete e.scroll,history[t+"State"](e,"",i||null);let r=this.getHashTargetEl(window.location.hash);r?r.scrollIntoView():e.type==="redirect"&&window.scroll(0,0)}}else this.redirect(i)},setCookie(t,e){document.cookie=`${t}=${e}`},getCookie(t){return document.cookie.replace(new RegExp(`(?:(?:^|.*;s*)${t}s*=s*([^;]*).*$)|^.*$`),"$1")},redirect(t,e){e&&gr.setCookie("__phoenix_flash__",e+"; max-age=60000; path=/"),window.location=t},localKey(t,e){return`${t}-${e}`},getHashTargetEl(t){let e=t.toString().substring(1);if(e!=="")return document.getElementById(e)||document.querySelector(`a[name="${e}"]`)}},te=gr,K={byId(t){return document.getElementById(t)||C(`no id found for ${t}`)},removeClass(t,e){t.classList.remove(e),t.classList.length===0&&t.removeAttribute("class")},all(t,e,i){if(!t)return[];let r=Array.from(t.querySelectorAll(e));return i?r.forEach(i):r},childNodeLength(t){let e=document.createElement("template");return e.innerHTML=t,e.content.childElementCount},isUploadInput(t){return t.type==="file"&&t.getAttribute(re)!==null},findUploadInputs(t){return this.all(t,`input[type="file"][${re}]`)},findComponentNodeList(t,e){return this.filterWithinSameLiveView(this.all(t,`[${_}="${e}"]`),t)},isPhxDestroyed(t){return!!(t.id&&K.private(t,"destroyed"))},markPhxChildDestroyed(t){t.setAttribute(ee,""),this.putPrivate(t,"destroyed",!0)},findPhxChildrenInFragment(t,e){let i=document.createElement("template");return i.innerHTML=t,this.findPhxChildren(i.content,e)},isIgnored(t,e){return(t.getAttribute(e)||t.getAttribute("data-phx-update"))==="ignore"},isPhxUpdate(t,e,i){return t.getAttribute&&i.indexOf(t.getAttribute(e))>=0},findPhxChildren(t,e){return this.all(t,`${de}[${Ee}="${e}"]`)},findParentCIDs(t,e){let i=new Set(e);return e.reduce((r,n)=>{let s=`[${_}="${n}"] [${_}]`;return this.filterWithinSameLiveView(this.all(t,s),t).map(o=>parseInt(o.getAttribute(_))).forEach(o=>r.delete(o)),r},i)},filterWithinSameLiveView(t,e){return e.querySelector(de)?t.filter(i=>this.withinSameLiveView(i,e)):t},withinSameLiveView(t,e){for(;t=t.parentNode;){if(t.isSameNode(e))return!0;if(t.getAttribute(ee)!==null)return!1}},private(t,e){return t[j]&&t[j][e]},deletePrivate(t,e){t[j]&&delete t[j][e]},putPrivate(t,e,i){t[j]||(t[j]={}),t[j][e]=i},copyPrivates(t,e){e[j]&&(t[j]=Ce(e[j]))},putTitle(t){let e=document.querySelector("title"),{prefix:i,suffix:r}=e.dataset;document.title=`${i||""}${t}${r||""}`},debounce(t,e,i,r,n,s,o){let a=t.getAttribute(i),l=t.getAttribute(n);a===""&&(a=r),l===""&&(l=s);let h=a||l;switch(h){case null:return o();case"blur":this.once(t,"debounce-blur")&&t.addEventListener("blur",()=>o());return;default:let u=parseInt(h),f=()=>l?this.deletePrivate(t,Xe):o(),y=this.incCycle(t,Ae,f);if(isNaN(u))return C(`invalid throttle/debounce value: ${h}`);if(l){let v=!1;if(e.type==="keydown"){let S=this.private(t,cr);this.putPrivate(t,cr,e.key),v=S!==e.key}if(!v&&this.private(t,Xe))return!1;o(),this.putPrivate(t,Xe,!0),setTimeout(()=>this.triggerCycle(t,Ae),u)}else setTimeout(()=>this.triggerCycle(t,Ae,y),u);let w=t.form;w&&this.once(w,"bind-debounce")&&w.addEventListener("submit",()=>{Array.from(new FormData(w).entries(),([v])=>{let S=w.querySelector(`[name="${v}"]`);this.incCycle(S,Ae),this.deletePrivate(S,Xe)})}),this.once(t,"bind-debounce")&&t.addEventListener("blur",()=>this.triggerCycle(t,Ae))}},triggerCycle(t,e,i){let[r,n]=this.private(t,e);i||(i=r),i===r&&(this.incCycle(t,e),n())},once(t,e){return this.private(t,e)===!0?!1:(this.putPrivate(t,e,!0),!0)},incCycle(t,e,i=function(){}){let[r]=this.private(t,e)||[0,i];return r++,this.putPrivate(t,e,[r,i]),r},discardError(t,e,i){let r=e.getAttribute&&e.getAttribute(i),n=r&&t.querySelector(`[id="${r}"], [name="${r}"]`);!n||this.private(n,or)||this.private(n.form,lr)||e.classList.add(ir)},showError(t,e){(t.id||t.name)&&this.all(t.form,`[${e}="${t.id}"], [${e}="${t.name}"]`,i=>{this.removeClass(i,ir)})},isPhxChild(t){return t.getAttribute&&t.getAttribute(Ee)},dispatchEvent(t,e,i={}){let r=new CustomEvent(e,{bubbles:!0,cancelable:!0,detail:i});t.dispatchEvent(r)},cloneNode(t,e){if(typeof e=="undefined")return t.cloneNode(!0);{let i=t.cloneNode(!1);return i.innerHTML=e,i}},mergeAttrs(t,e,i={}){let r=i.exclude||[],n=i.isIgnored,s=e.attributes;for(let a=s.length-1;a>=0;a--){let l=s[a].name;r.indexOf(l)<0&&t.setAttribute(l,e.getAttribute(l))}let o=t.attributes;for(let a=o.length-1;a>=0;a--){let l=o[a].name;n?l.startsWith("data-")&&!e.hasAttribute(l)&&t.removeAttribute(l):e.hasAttribute(l)||t.removeAttribute(l)}},mergeFocusedInput(t,e){t instanceof HTMLSelectElement||K.mergeAttrs(t,e,{except:["value"]}),e.readOnly?t.setAttribute("readonly",!0):t.removeAttribute("readonly")},hasSelectionRange(t){return t.setSelectionRange&&(t.type==="text"||t.type==="textarea")},restoreFocus(t,e,i){if(!K.isTextualInput(t))return;let r=t.matches(":focus");t.readOnly&&t.blur(),r||t.focus(),this.hasSelectionRange(t)&&t.setSelectionRange(e,i)},isFormInput(t){return/^(?:input|select|textarea)$/i.test(t.tagName)&&t.type!=="button"},syncAttrsToProps(t){t instanceof HTMLInputElement&&ar.indexOf(t.type.toLocaleLowerCase())>=0&&(t.checked=t.getAttribute("checked")!==null)},syncPropsToAttrs(t){if(t instanceof HTMLSelectElement){let e=t.options.item(t.selectedIndex);e&&e.getAttribute("selected")===null&&e.setAttribute("selected","")}},isTextualInput(t){return us.indexOf(t.type)>=0},isNowTriggerFormExternal(t,e){return t.getAttribute&&t.getAttribute(e)!==null},syncPendingRef(t,e,i){let r=t.getAttribute(H);return r===null?!0:K.isFormInput(t)||t.getAttribute(i)!==null?(K.isUploadInput(t)&&K.mergeAttrs(t,e,{isIgnored:!0}),K.putPrivate(t,H,e),!1):(Gi.forEach(n=>{t.classList.contains(n)&&e.classList.add(n)}),e.setAttribute(H,r),!0)},cleanChildNodes(t,e){if(K.isPhxUpdate(t,e,["append","prepend"])){let i=[];t.childNodes.forEach(r=>{r.id||(r.nodeType===Node.TEXT_NODE&&r.nodeValue.trim()===""||C(`only HTML element tags with an id are allowed inside containers with phx-update. + +removing illegal node: "${(r.outerHTML||r.nodeValue).trim()}" + +`),i.push(r))}),i.forEach(r=>r.remove())}},replaceRootContainer(t,e,i){let r=new Set(["id",ee,Se,nr]);if(t.tagName.toLowerCase()===e.toLowerCase())return Array.from(t.attributes).filter(n=>!r.has(n.name.toLowerCase())).forEach(n=>t.removeAttribute(n.name)),Object.keys(i).filter(n=>!r.has(n.toLowerCase())).forEach(n=>t.setAttribute(n,i[n])),t;{let n=document.createElement(e);return Object.keys(i).forEach(s=>n.setAttribute(s,i[s])),r.forEach(s=>n.setAttribute(s,t.getAttribute(s))),n.innerHTML=t.innerHTML,t.replaceWith(n),n}}},c=K,Lt=class{static isActive(t,e){let i=e._phxRef===void 0,n=t.getAttribute(vt).split(",").indexOf(T.genFileRef(e))>=0;return e.size>0&&(i||n)}static isPreflighted(t,e){return t.getAttribute(gt).split(",").indexOf(T.genFileRef(e))>=0&&this.isActive(t,e)}constructor(t,e,i){this.ref=T.genFileRef(e),this.fileEl=t,this.file=e,this.view=i,this.meta=null,this._isCancelled=!1,this._isDone=!1,this._progress=0,this._lastProgressSent=-1,this._onDone=function(){},this._onElUpdated=this.onElUpdated.bind(this),this.fileEl.addEventListener(bt,this._onElUpdated)}metadata(){return this.meta}progress(t){this._progress=Math.floor(t),this._progress>this._lastProgressSent&&(this._progress>=100?(this._progress=100,this._lastProgressSent=100,this._isDone=!0,this.view.pushFileProgress(this.fileEl,this.ref,100,()=>{T.untrackFile(this.fileEl,this.file),this._onDone()})):(this._lastProgressSent=this._progress,this.view.pushFileProgress(this.fileEl,this.ref,this._progress)))}cancel(){this._isCancelled=!0,this._isDone=!0,this._onDone()}isDone(){return this._isDone}error(t="failed"){this.view.pushFileProgress(this.fileEl,this.ref,{error:t}),T.clearFiles(this.fileEl)}onDone(t){this._onDone=()=>{this.fileEl.removeEventListener(bt,this._onElUpdated),t()}}onElUpdated(){this.fileEl.getAttribute(vt).split(",").indexOf(this.ref)===-1&&this.cancel()}toPreflightPayload(){return{last_modified:this.file.lastModified,name:this.file.name,size:this.file.size,type:this.file.type,ref:this.ref}}uploader(t){if(this.meta.uploader){let e=t[this.meta.uploader]||C(`no uploader configured for ${this.meta.uploader}`);return{name:this.meta.uploader,callback:e}}else return{name:"channel",callback:Ts}}zipPostFlight(t){this.meta=t.entries[this.ref],this.meta||C(`no preflight upload response returned with ref ${this.ref}`,{input:this.fileEl,response:t})}},Ps=0,T=class{static genFileRef(t){let e=t._phxRef;return e!==void 0?e:(t._phxRef=(Ps++).toString(),t._phxRef)}static getEntryDataURL(t,e,i){let r=this.activeFiles(t).find(n=>this.genFileRef(n)===e);i(URL.createObjectURL(r))}static hasUploadsInProgress(t){let e=0;return c.findUploadInputs(t).forEach(i=>{i.getAttribute(gt)!==i.getAttribute(hs)&&e++}),e>0}static serializeUploads(t){let e=this.activeFiles(t),i={};return e.forEach(r=>{let n={path:t.name},s=t.getAttribute(re);i[s]=i[s]||[],n.ref=this.genFileRef(r),n.name=r.name||n.ref,n.type=r.type,n.size=r.size,i[s].push(n)}),i}static clearFiles(t){t.value=null,t.removeAttribute(re),c.putPrivate(t,"files",[])}static untrackFile(t,e){c.putPrivate(t,"files",c.private(t,"files").filter(i=>!Object.is(i,e)))}static trackFiles(t,e){if(t.getAttribute("multiple")!==null){let i=e.filter(r=>!this.activeFiles(t).find(n=>Object.is(n,r)));c.putPrivate(t,"files",this.activeFiles(t).concat(i)),t.value=null}else c.putPrivate(t,"files",e)}static activeFileInputs(t){let e=c.findUploadInputs(t);return Array.from(e).filter(i=>i.files&&this.activeFiles(i).length>0)}static activeFiles(t){return(c.private(t,"files")||[]).filter(e=>Lt.isActive(t,e))}static inputsAwaitingPreflight(t){let e=c.findUploadInputs(t);return Array.from(e).filter(i=>this.filesAwaitingPreflight(i).length>0)}static filesAwaitingPreflight(t){return this.activeFiles(t).filter(e=>!Lt.isPreflighted(t,e))}constructor(t,e,i){this.view=e,this.onComplete=i,this._entries=Array.from(T.filesAwaitingPreflight(t)||[]).map(r=>new Lt(t,r,e)),this.numEntriesInProgress=this._entries.length}entries(){return this._entries}initAdapterUpload(t,e,i){this._entries=this._entries.map(n=>(n.zipPostFlight(t),n.onDone(()=>{this.numEntriesInProgress--,this.numEntriesInProgress===0&&this.onComplete()}),n));let r=this._entries.reduce((n,s)=>{let{name:o,callback:a}=s.uploader(i.uploaders);return n[o]=n[o]||{callback:a,entries:[]},n[o].entries.push(s),n},{});for(let n in r){let{callback:s,entries:o}=r[n];s(o,e,t,i)}}},Ls={LiveFileUpload:{activeRefs(){return this.el.getAttribute(vt)},preflightedRefs(){return this.el.getAttribute(gt)},mounted(){this.preflightedWas=this.preflightedRefs()},updated(){let t=this.preflightedRefs();this.preflightedWas!==t&&(this.preflightedWas=t,t===""&&this.__view.cancelSubmit(this.el.form)),this.activeRefs()===""&&(this.el.value=null),this.el.dispatchEvent(new CustomEvent(bt))}},LiveImgPreview:{mounted(){this.ref=this.el.getAttribute("data-phx-entry-ref"),this.inputEl=document.getElementById(this.el.getAttribute(re)),T.getEntryDataURL(this.inputEl,this.ref,t=>{this.url=t,this.el.src=t})},destroyed(){URL.revokeObjectURL(this.url)}}},ks=Ls,Rs=class{constructor(t,e,i){let r=new Set,n=new Set([...e.children].map(o=>o.id)),s=[];Array.from(t.children).forEach(o=>{if(o.id&&(r.add(o.id),n.has(o.id))){let a=o.previousElementSibling&&o.previousElementSibling.id;s.push({elementId:o.id,previousElementId:a})}}),this.containerId=e.id,this.updateType=i,this.elementsToModify=s,this.elementIdsToAdd=[...n].filter(o=>!r.has(o))}perform(){let t=c.byId(this.containerId);this.elementsToModify.forEach(e=>{e.previousElementId?W(document.getElementById(e.previousElementId),i=>{W(document.getElementById(e.elementId),r=>{r.previousElementSibling&&r.previousElementSibling.id==i.id||i.insertAdjacentElement("afterend",r)})}):W(document.getElementById(e.elementId),i=>{i.previousElementSibling==null||t.insertAdjacentElement("afterbegin",i)})}),this.updateType=="prepend"&&this.elementIdsToAdd.reverse().forEach(e=>{W(document.getElementById(e),i=>t.insertAdjacentElement("afterbegin",i))})}},vr=11;function Os(t,e){var i=e.attributes,r,n,s,o,a;if(!(e.nodeType===vr||t.nodeType===vr)){for(var l=i.length-1;l>=0;l--)r=i[l],n=r.name,s=r.namespaceURI,o=r.value,s?(n=r.localName||n,a=t.getAttributeNS(s,n),a!==o&&(r.prefix==="xmlns"&&(n=r.name),t.setAttributeNS(s,n,o))):(a=t.getAttribute(n),a!==o&&t.setAttribute(n,o));for(var h=t.attributes,u=h.length-1;u>=0;u--)r=h[u],n=r.name,s=r.namespaceURI,s?(n=r.localName||n,e.hasAttributeNS(s,n)||t.removeAttributeNS(s,n)):e.hasAttribute(n)||t.removeAttribute(n)}}var Ge,Is="http://www.w3.org/1999/xhtml",O=typeof document=="undefined"?void 0:document,xs=!!O&&"content"in O.createElement("template"),_s=!!O&&O.createRange&&"createContextualFragment"in O.createRange();function Ms(t){var e=O.createElement("template");return e.innerHTML=t,e.content.childNodes[0]}function Ds(t){Ge||(Ge=O.createRange(),Ge.selectNode(O.body));var e=Ge.createContextualFragment(t);return e.childNodes[0]}function Fs(t){var e=O.createElement("body");return e.innerHTML=t,e.childNodes[0]}function Ns(t){return t=t.trim(),xs?Ms(t):_s?Ds(t):Fs(t)}function Ye(t,e){var i=t.nodeName,r=e.nodeName,n,s;return i===r?!0:(n=i.charCodeAt(0),s=r.charCodeAt(0),n<=90&&s>=97?i===r.toUpperCase():s<=90&&n>=97?r===i.toUpperCase():!1)}function Bs(t,e){return!e||e===Is?O.createElement(t):O.createElementNS(e,t)}function Hs(t,e){for(var i=t.firstChild;i;){var r=i.nextSibling;e.appendChild(i),i=r}return e}function kt(t,e,i){t[i]!==e[i]&&(t[i]=e[i],t[i]?t.setAttribute(i,""):t.removeAttribute(i))}var br={OPTION:function(t,e){var i=t.parentNode;if(i){var r=i.nodeName.toUpperCase();r==="OPTGROUP"&&(i=i.parentNode,r=i&&i.nodeName.toUpperCase()),r==="SELECT"&&!i.hasAttribute("multiple")&&(t.hasAttribute("selected")&&!e.selected&&(t.setAttribute("selected","selected"),t.removeAttribute("selected")),i.selectedIndex=-1)}kt(t,e,"selected")},INPUT:function(t,e){kt(t,e,"checked"),kt(t,e,"disabled"),t.value!==e.value&&(t.value=e.value),e.hasAttribute("value")||t.removeAttribute("value")},TEXTAREA:function(t,e){var i=e.value;t.value!==i&&(t.value=i);var r=t.firstChild;if(r){var n=r.nodeValue;if(n==i||!i&&n==t.placeholder)return;r.nodeValue=i}},SELECT:function(t,e){if(!e.hasAttribute("multiple")){for(var i=-1,r=0,n=t.firstChild,s,o;n;)if(o=n.nodeName&&n.nodeName.toUpperCase(),o==="OPTGROUP")s=n,n=s.firstChild;else{if(o==="OPTION"){if(n.hasAttribute("selected")){i=r;break}r++}n=n.nextSibling,!n&&s&&(n=s.nextSibling,s=null)}t.selectedIndex=i}}},Le=1,js=11,yr=3,wr=8;function ne(){}function Us(t){if(t)return t.getAttribute&&t.getAttribute("id")||t.id}function Vs(t){return function(i,r,n){if(n||(n={}),typeof r=="string")if(i.nodeName==="#document"||i.nodeName==="HTML"||i.nodeName==="BODY"){var s=r;r=O.createElement("html"),r.innerHTML=s}else r=Ns(r);var o=n.getNodeKey||Us,a=n.onBeforeNodeAdded||ne,l=n.onNodeAdded||ne,h=n.onBeforeElUpdated||ne,u=n.onElUpdated||ne,f=n.onBeforeNodeDiscarded||ne,y=n.onNodeDiscarded||ne,w=n.onBeforeElChildrenUpdated||ne,v=n.childrenOnly===!0,S=Object.create(null),se=[];function d(g){se.push(g)}function E(g,m){if(g.nodeType===Le)for(var p=g.firstChild;p;){var b=void 0;m&&(b=o(p))?d(b):(y(p),p.firstChild&&E(p,m)),p=p.nextSibling}}function fe(g,m,p){f(g)!==!1&&(m&&m.removeChild(g),y(g),E(g,p))}function pe(g){if(g.nodeType===Le||g.nodeType===js)for(var m=g.firstChild;m;){var p=o(m);p&&(S[p]=m),pe(m),m=m.nextSibling}}pe(i);function Ze(g){l(g);for(var m=g.firstChild;m;){var p=m.nextSibling,b=o(m);if(b){var M=S[b];M&&Ye(m,M)?(m.parentNode.replaceChild(M,m),Re(M,m)):Ze(m)}else Ze(m);m=p}}function Tr(g,m,p){for(;m;){var b=m.nextSibling;(p=o(m))?d(p):fe(m,g,!0),m=b}}function Re(g,m,p){var b=o(m);b&&delete S[b],!(!p&&(h(g,m)===!1||(t(g,m),u(g),w(g,m)===!1)))&&(g.nodeName!=="TEXTAREA"?Pr(g,m):br.TEXTAREA(g,m))}function Pr(g,m){var p=m.firstChild,b=g.firstChild,M,z,oe,Ie,J;e:for(;p;){for(Ie=p.nextSibling,M=o(p);b;){if(oe=b.nextSibling,p.isSameNode&&p.isSameNode(b)){p=Ie,b=oe;continue e}z=o(b);var xe=b.nodeType,X=void 0;if(xe===p.nodeType&&(xe===Le?(M?M!==z&&((J=S[M])?oe===J?X=!1:(g.insertBefore(J,b),z?d(z):fe(b,g,!0),b=J):X=!1):z&&(X=!1),X=X!==!1&&Ye(b,p),X&&Re(b,p)):(xe===yr||xe==wr)&&(X=!0,b.nodeValue!==p.nodeValue&&(b.nodeValue=p.nodeValue))),X){p=Ie,b=oe;continue e}z?d(z):fe(b,g,!0),b=oe}if(M&&(J=S[M])&&Ye(J,p))g.appendChild(J),Re(J,p);else{var it=a(p);it!==!1&&(it&&(p=it),p.actualize&&(p=p.actualize(g.ownerDocument||O)),g.appendChild(p),Ze(p))}p=Ie,b=oe}Tr(g,b,z);var It=br[g.nodeName];It&&It(g,m)}var A=i,Oe=A.nodeType,Ot=r.nodeType;if(!v){if(Oe===Le)Ot===Le?Ye(i,r)||(y(i),A=Hs(i,Bs(r.nodeName,r.namespaceURI))):A=r;else if(Oe===yr||Oe===wr){if(Ot===Oe)return A.nodeValue!==r.nodeValue&&(A.nodeValue=r.nodeValue),A;A=r}}if(A===r)y(i);else{if(r.isSameNode&&r.isSameNode(A))return;if(Re(A,r,v),se)for(var et=0,Lr=se.length;et<Lr;et++){var tt=S[se[et]];tt&&fe(tt,tt.parentNode,!1)}}return!v&&A!==i&&i.parentNode&&(A.actualize&&(A=A.actualize(i.ownerDocument||O)),i.parentNode.replaceChild(A,i)),A}}var $s=Vs(Os),Er=$s,Qe=class{static patchEl(t,e,i){Er(t,e,{childrenOnly:!1,onBeforeElUpdated:(r,n)=>{if(i&&i.isSameNode(r)&&c.isFormInput(r))return c.mergeFocusedInput(r,n),!1}})}constructor(t,e,i,r,n){this.view=t,this.liveSocket=t.liveSocket,this.container=e,this.id=i,this.rootID=t.root.id,this.html=r,this.targetCID=n,this.cidPatch=typeof this.targetCID=="number",this.callbacks={beforeadded:[],beforeupdated:[],beforephxChildAdded:[],afteradded:[],afterupdated:[],afterdiscarded:[],afterphxChildAdded:[]}}before(t,e){this.callbacks[`before${t}`].push(e)}after(t,e){this.callbacks[`after${t}`].push(e)}trackBefore(t,...e){this.callbacks[`before${t}`].forEach(i=>i(...e))}trackAfter(t,...e){this.callbacks[`after${t}`].forEach(i=>i(...e))}markPrunableContentForRemoval(){c.all(this.container,"[phx-update=append] > *, [phx-update=prepend] > *",t=>{t.setAttribute(Zi,"")})}perform(){let{view:t,liveSocket:e,container:i,html:r}=this,n=this.isCIDPatch()?this.targetCIDContainer(r):i;if(this.isCIDPatch()&&!n)return;let s=e.getActiveElement(),{selectionStart:o,selectionEnd:a}=s&&c.hasSelectionRange(s)?s:{},l=e.binding(St),h=e.binding(sr),u=e.binding(Et),f=e.binding(cs),y=[],w=[],v=[],S=null,se=e.time("premorph container prep",()=>this.buildDiffHTML(i,r,l,n));return this.trackBefore("added",i),this.trackBefore("updated",i,i),e.time("morphdom",()=>{Er(n,se,{childrenOnly:n.getAttribute(_)===null,getNodeKey:d=>c.isPhxDestroyed(d)?null:d.id,onBeforeNodeAdded:d=>(this.trackBefore("added",d),d),onNodeAdded:d=>{c.isNowTriggerFormExternal(d,f)&&(S=d),c.discardError(n,d,h),c.isPhxChild(d)&&t.ownsElement(d)&&this.trackAfter("phxChildAdded",d),y.push(d)},onNodeDiscarded:d=>{c.isPhxChild(d)&&e.destroyViewByEl(d),this.trackAfter("discarded",d)},onBeforeNodeDiscarded:d=>d.getAttribute&&d.getAttribute(Zi)!==null?!0:!(d.parentNode!==null&&c.isPhxUpdate(d.parentNode,l,["append","prepend"])&&d.id||this.skipCIDSibling(d)),onElUpdated:d=>{c.isNowTriggerFormExternal(d,f)&&(S=d),w.push(d)},onBeforeElUpdated:(d,E)=>{if(c.cleanChildNodes(E,l),this.skipCIDSibling(E))return!1;if(c.isIgnored(d,l))return this.trackBefore("updated",d,E),c.mergeAttrs(d,E,{isIgnored:!0}),w.push(d),!1;if(d.type==="number"&&d.validity&&d.validity.badInput)return!1;if(!c.syncPendingRef(d,E,u))return c.isUploadInput(d)&&(this.trackBefore("updated",d,E),w.push(d)),!1;if(c.isPhxChild(E)){let pe=d.getAttribute(ee);return c.mergeAttrs(d,E,{exclude:[Se]}),pe!==""&&d.setAttribute(ee,pe),d.setAttribute(We,this.rootID),!1}return c.copyPrivates(E,d),c.discardError(n,E,h),c.syncPropsToAttrs(E),s&&d.isSameNode(s)&&c.isFormInput(d)&&!this.forceFocusedSelectUpdate(d,E)?(this.trackBefore("updated",d,E),c.mergeFocusedInput(d,E),c.syncAttrsToProps(d),w.push(d),!1):(c.isPhxUpdate(E,l,["append","prepend"])&&v.push(new Rs(d,E,E.getAttribute(l))),c.syncAttrsToProps(E),this.trackBefore("updated",d,E),!0)}})}),e.isDebugEnabled()&&Ss(),v.length>0&&e.time("post-morph append/prepend restoration",()=>{v.forEach(d=>d.perform())}),e.silenceEvents(()=>c.restoreFocus(s,o,a)),c.dispatchEvent(document,"phx:update"),y.forEach(d=>this.trackAfter("added",d)),w.forEach(d=>this.trackAfter("updated",d)),S&&(e.disconnect(),S.submit()),!0}forceFocusedSelectUpdate(t,e){let i=["select","select-one","select-multiple"].find(r=>r===t.type);return t.multiple===!0||i&&t.innerHTML!=e.innerHTML}isCIDPatch(){return this.cidPatch}skipCIDSibling(t){return t.nodeType===Node.ELEMENT_NODE&&t.getAttribute(yt)!==null}targetCIDContainer(t){if(!this.isCIDPatch())return;let[e,...i]=c.findComponentNodeList(this.container,this.targetCID);return i.length===0&&c.childNodeLength(t)===1?e:e&&e.parentNode}buildDiffHTML(t,e,i,r){let n=this.isCIDPatch(),s=n&&r.getAttribute(_)===this.targetCID.toString();if(!n||s)return e;{let o=null,a=document.createElement("template");o=c.cloneNode(r);let[l,...h]=c.findComponentNodeList(o,this.targetCID);return a.innerHTML=e,h.forEach(u=>u.remove()),Array.from(o.childNodes).forEach(u=>{u.id&&u.nodeType===Node.ELEMENT_NODE&&u.getAttribute(_)!==this.targetCID.toString()&&(u.setAttribute(yt,""),u.innerHTML="")}),Array.from(a.content.childNodes).forEach(u=>o.insertBefore(u,l)),l.remove(),o.outerHTML}}},Sr=class{static extract(t){let{[fr]:e,[dr]:i,[pr]:r}=t;return delete t[fr],delete t[dr],delete t[pr],{diff:t,title:r,reply:e||null,events:i||[]}}constructor(t,e){this.viewId=t,this.rendered={},this.mergeDiff(e)}parentViewId(){return this.viewId}toString(t){return this.recursiveToString(this.rendered,this.rendered[x],t)}recursiveToString(t,e=t[x],i){i=i?new Set(i):null;let r={buffer:"",components:e,onlyCids:i};return this.toOutputBuffer(t,r),r.buffer}componentCIDs(t){return Object.keys(t[x]||{}).map(e=>parseInt(e))}isComponentOnlyDiff(t){return t[x]?Object.keys(t).length===1:!1}getComponent(t,e){return t[x][e]}mergeDiff(t){let e=t[x],i={};if(delete t[x],this.rendered=this.mutableMerge(this.rendered,t),this.rendered[x]=this.rendered[x]||{},e){let n=this.rendered[x];for(let s in e)e[s]=this.cachedFindComponent(s,e[s],n,e,i);for(var r in e)n[r]=e[r];t[x]=e}}cachedFindComponent(t,e,i,r,n){if(n[t])return n[t];{let s,o,a=e[U];if(typeof a=="number"){let l;a>0?l=this.cachedFindComponent(a,r[a],i,r,n):l=i[-a],o=l[U],s=this.cloneMerge(l,e),s[U]=o}else s=e[U]!==void 0?e:this.cloneMerge(i[t]||{},e);return n[t]=s,s}}mutableMerge(t,e){return e[U]!==void 0?e:(this.doMutableMerge(t,e),t)}doMutableMerge(t,e){for(let i in e){let r=e[i],n=t[i];Pe(r)&&r[U]===void 0&&Pe(n)?this.doMutableMerge(n,r):t[i]=r}}cloneMerge(t,e){let i={...t,...e};for(let r in i){let n=e[r],s=t[r];Pe(n)&&n[U]===void 0&&Pe(s)&&(i[r]=this.cloneMerge(s,n))}return i}componentToString(t){return this.recursiveCIDToString(this.rendered[x],t)}pruneCIDs(t){t.forEach(e=>delete this.rendered[x][e])}get(){return this.rendered}isNewFingerprint(t={}){return!!t[U]}toOutputBuffer(t,e){if(t[ur])return this.comprehensionToBuffer(t,e);let{[U]:i}=t;e.buffer+=i[0];for(let r=1;r<i.length;r++)this.dynamicToBuffer(t[r-1],e),e.buffer+=i[r]}comprehensionToBuffer(t,e){let{[ur]:i,[U]:r}=t;for(let n=0;n<i.length;n++){let s=i[n];e.buffer+=r[0];for(let o=1;o<r.length;o++)this.dynamicToBuffer(s[o-1],e),e.buffer+=r[o]}}dynamicToBuffer(t,e){typeof t=="number"?e.buffer+=this.recursiveCIDToString(e.components,t,e.onlyCids):Pe(t)?this.toOutputBuffer(t,e):e.buffer+=t}recursiveCIDToString(t,e,i){let r=t[e]||C(`no component for CID ${e}`,t),n=document.createElement("template");n.innerHTML=this.recursiveToString(r,t,i);let s=n.content,o=i&&!i.has(e),[a,l]=Array.from(s.childNodes).reduce(([h,u],f,y)=>f.nodeType===Node.ELEMENT_NODE?f.getAttribute(_)?[h,!0]:(f.setAttribute(_,e),f.id||(f.id=`${this.parentViewId()}-${e}-${y}`),o&&(f.setAttribute(yt,""),f.innerHTML=""),[!0,u]):f.nodeValue.trim()!==""?(C(`only HTML element tags are allowed at the root of components. + +got: "${f.nodeValue.trim()}" + +within: +`,n.innerHTML.trim()),f.replaceWith(this.createSpan(f.nodeValue,e)),[!0,u]):(f.remove(),[h,u]),[!1,!1]);return!a&&!l?(C(`expected at least one HTML element tag inside a component, but the component is empty: +`,n.innerHTML.trim()),this.createSpan("",e).outerHTML):(!a&&l&&C("expected at least one HTML element tag directly inside a component, but only subcomponents were found. A component must render at least one HTML tag directly inside itself.",n.innerHTML.trim()),n.innerHTML)}createSpan(t,e){let i=document.createElement("span");return i.innerText=t,i.setAttribute(_,e),i}},qs=1,ke=class{static makeID(){return qs++}static elementID(t){return t.phxHookId}constructor(t,e,i){this.__view=t,this.__liveSocket=t.liveSocket,this.__callbacks=i,this.__listeners=new Set,this.__isDisconnected=!1,this.el=e,this.el.phxHookId=this.constructor.makeID();for(let r in this.__callbacks)this[r]=this.__callbacks[r]}__mounted(){this.mounted&&this.mounted()}__updated(){this.updated&&this.updated()}__beforeUpdate(){this.beforeUpdate&&this.beforeUpdate()}__destroyed(){this.destroyed&&this.destroyed()}__reconnected(){this.__isDisconnected&&(this.__isDisconnected=!1,this.reconnected&&this.reconnected())}__disconnected(){this.__isDisconnected=!0,this.disconnected&&this.disconnected()}pushEvent(t,e={},i=function(){}){return this.__view.pushHookEvent(null,t,e,i)}pushEventTo(t,e,i={},r=function(){}){return this.__view.withinTargets(t,(n,s)=>n.pushHookEvent(s,e,i,r))}handleEvent(t,e){let i=(r,n)=>n?t:e(r.detail);return window.addEventListener(`phx:hook:${t}`,i),this.__listeners.add(i),i}removeHandleEvent(t){let e=t(null,!0);window.removeEventListener(`phx:hook:${e}`,t),this.__listeners.delete(t)}upload(t,e){return this.__view.dispatchUploads(t,e)}uploadTo(t,e,i){return this.__view.withinTargets(t,r=>r.dispatchUploads(e,i))}__cleanup__(){this.__listeners.forEach(t=>this.removeHandleEvent(t))}},Rt=(t,e={})=>{let i=new FormData(t),r=[];i.forEach((s,o,a)=>{s instanceof File&&r.push(o)}),r.forEach(s=>i.delete(s));let n=new URLSearchParams;for(let[s,o]of i.entries())n.append(s,o);for(let s in e)n.append(s,e[s]);return n.toString()},Ar=class{constructor(t,e,i,r){this.liveSocket=e,this.flash=r,this.parent=i,this.root=i?i.root:this,this.el=t,this.id=this.el.id,this.ref=0,this.childJoins=0,this.loaderTimer=null,this.pendingDiffs=[],this.pruningCIDs=[],this.redirect=!1,this.href=null,this.joinCount=this.parent?this.parent.joinCount-1:0,this.joinPending=!0,this.destroyed=!1,this.joinCallback=function(){},this.stopCallback=function(){},this.pendingJoinOps=this.parent?null:[],this.viewHooks={},this.uploaders={},this.formSubmits=[],this.children=this.parent?null:{},this.root.children[this.id]={},this.channel=this.liveSocket.channel(`lv:${this.id}`,()=>({redirect:this.redirect?this.href:void 0,url:this.redirect?void 0:this.href||void 0,params:this.connectParams(),session:this.getSession(),static:this.getStatic(),flash:this.flash})),this.showLoader(this.liveSocket.loaderTimeout),this.bindChannel()}setHref(t){this.href=t}setRedirect(t){this.redirect=!0,this.href=t}isMain(){return this.liveSocket.main===this}connectParams(){let t=this.liveSocket.params(this.el),e=c.all(document,`[${this.binding(as)}]`).map(i=>i.src||i.href).filter(i=>typeof i=="string");return e.length>0&&(t._track_static=e),t._mounts=this.joinCount,t}isConnected(){return this.channel.canPush()}getSession(){return this.el.getAttribute(ee)}getStatic(){let t=this.el.getAttribute(Se);return t===""?null:t}destroy(t=function(){}){this.destroyAllChildren(),this.destroyed=!0,delete this.root.children[this.id],this.parent&&delete this.root.children[this.parent.id][this.id],clearTimeout(this.loaderTimer);let e=()=>{t();for(let i in this.viewHooks)this.destroyHook(this.viewHooks[i])};c.markPhxChildDestroyed(this.el),this.log("destroyed",()=>["the child has been removed from the parent"]),this.channel.leave().receive("ok",e).receive("error",e).receive("timeout",e)}setContainerClasses(...t){this.el.classList.remove(tr,qe,rr),this.el.classList.add(...t)}isLoading(){return this.el.classList.contains(qe)}showLoader(t){if(clearTimeout(this.loaderTimer),t)this.loaderTimer=setTimeout(()=>this.showLoader(),t);else{for(let e in this.viewHooks)this.viewHooks[e].__disconnected();this.setContainerClasses(qe)}}hideLoader(){clearTimeout(this.loaderTimer),this.setContainerClasses(tr)}triggerReconnected(){for(let t in this.viewHooks)this.viewHooks[t].__reconnected()}log(t,e){this.liveSocket.log(this,t,e)}withinTargets(t,e){if(t instanceof HTMLElement)return this.liveSocket.owner(t,i=>e(i,t));if(/^(0|[1-9]\d*)$/.test(t)){let i=c.findComponentNodeList(this.el,t);i.length===0?C(`no component found matching phx-target of ${t}`):e(this,i[0])}else{let i=Array.from(document.querySelectorAll(t));i.length===0&&C(`nothing found matching the phx-target selector "${t}"`),i.forEach(r=>this.liveSocket.owner(r,n=>e(n,r)))}}applyDiff(t,e,i){this.log(t,()=>["",Ce(e)]);let{diff:r,reply:n,events:s,title:o}=Sr.extract(e);return o&&c.putTitle(o),i({diff:r,reply:n,events:s}),n}onJoin(t){let{rendered:e,container:i}=t;if(i){let[r,n]=i;this.el=c.replaceRootContainer(this.el,r,n)}this.childJoins=0,this.joinPending=!0,this.flash=null,te.dropLocal(this.liveSocket.localStorage,window.location.pathname,Ji),this.applyDiff("mount",e,({diff:r,events:n})=>{this.rendered=new Sr(this.id,r);let s=this.renderContainer(null,"join");this.dropPendingRefs();let o=this.formsForRecovery(s);this.joinCount++,o.length>0?o.forEach((a,l)=>{this.pushFormRecovery(a,h=>{l===o.length-1&&this.onJoinComplete(h,s,n)})}):this.onJoinComplete(t,s,n)})}dropPendingRefs(){c.all(this.el,`[${H}]`,t=>t.removeAttribute(H))}onJoinComplete({live_patch:t},e,i){if(this.joinCount>1||this.parent&&!this.parent.isJoinPending())return this.applyJoinPatch(t,e,i);c.findPhxChildrenInFragment(e,this.id).filter(n=>{let s=n.id&&this.el.querySelector(`[id="${n.id}"]`),o=s&&s.getAttribute(Se);return o&&n.setAttribute(Se,o),this.joinChild(n)}).length===0?this.parent?(this.root.pendingJoinOps.push([this,()=>this.applyJoinPatch(t,e,i)]),this.parent.ackJoin(this)):(this.onAllChildJoinsComplete(),this.applyJoinPatch(t,e,i)):this.root.pendingJoinOps.push([this,()=>this.applyJoinPatch(t,e,i)])}attachTrueDocEl(){this.el=c.byId(this.id),this.el.setAttribute(We,this.root.id)}dispatchEvents(t){t.forEach(([e,i])=>{window.dispatchEvent(new CustomEvent(`phx:hook:${e}`,{detail:i}))})}applyJoinPatch(t,e,i){this.attachTrueDocEl();let r=new Qe(this,this.el,this.id,e,null);if(r.markPrunableContentForRemoval(),this.performPatch(r,!1),this.joinNewChildren(),c.all(this.el,`[${this.binding(Je)}], [data-phx-${Je}]`,n=>{let s=this.addHook(n);s&&s.__mounted()}),this.joinPending=!1,this.dispatchEvents(i),this.applyPendingUpdates(),t){let{kind:n,to:s}=t;this.liveSocket.historyPatch(s,n)}this.hideLoader(),this.joinCount>1&&this.triggerReconnected(),this.stopCallback()}triggerBeforeUpdateHook(t,e){this.liveSocket.triggerDOM("onBeforeElUpdated",[t,e]);let i=this.getHook(t),r=i&&c.isIgnored(t,this.binding(St));if(i&&!t.isEqualNode(e)&&!(r&&Cs(t.dataset,e.dataset)))return i.__beforeUpdate(),i}performPatch(t,e){let i=[],r=!1,n=new Set;return t.after("added",s=>{this.liveSocket.triggerDOM("onNodeAdded",[s]);let o=this.addHook(s);o&&o.__mounted()}),t.after("phxChildAdded",s=>r=!0),t.before("updated",(s,o)=>{this.triggerBeforeUpdateHook(s,o)&&n.add(s.id)}),t.after("updated",s=>{n.has(s.id)&&this.getHook(s).__updated()}),t.after("discarded",s=>{let o=this.componentID(s);typeof o=="number"&&i.indexOf(o)===-1&&i.push(o);let a=this.getHook(s);a&&this.destroyHook(a)}),t.perform(),e&&this.maybePushComponentsDestroyed(i),r}joinNewChildren(){c.findPhxChildren(this.el,this.id).forEach(t=>this.joinChild(t))}getChildById(t){return this.root.children[this.id][t]}getDescendentByEl(t){return t.id===this.id?this:this.children[t.getAttribute(Ee)][t.id]}destroyDescendent(t){for(let e in this.root.children)for(let i in this.root.children[e])if(i===t)return this.root.children[e][i].destroy()}joinChild(t){if(!this.getChildById(t.id)){let i=new Ar(t,this.liveSocket,this);return this.root.children[this.id][i.id]=i,i.join(),this.childJoins++,!0}}isJoinPending(){return this.joinPending}ackJoin(t){this.childJoins--,this.childJoins===0&&(this.parent?this.parent.ackJoin(this):this.onAllChildJoinsComplete())}onAllChildJoinsComplete(){this.joinCallback(),this.pendingJoinOps.forEach(([t,e])=>{t.isDestroyed()||e()}),this.pendingJoinOps=[]}update(t,e){if(this.isJoinPending()||this.liveSocket.hasPendingLink())return this.pendingDiffs.push({diff:t,events:e});this.rendered.mergeDiff(t);let i=!1;this.rendered.isComponentOnlyDiff(t)?this.liveSocket.time("component patch complete",()=>{c.findParentCIDs(this.el,this.rendered.componentCIDs(t)).forEach(n=>{this.componentPatch(this.rendered.getComponent(t,n),n)&&(i=!0)})}):mr(t)||this.liveSocket.time("full patch complete",()=>{let r=this.renderContainer(t,"update"),n=new Qe(this,this.el,this.id,r,null);i=this.performPatch(n,!0)}),this.dispatchEvents(e),i&&this.joinNewChildren()}renderContainer(t,e){return this.liveSocket.time(`toString diff (${e})`,()=>{let i=this.el.tagName,r=t?this.rendered.componentCIDs(t).concat(this.pruningCIDs):null,n=this.rendered.toString(r);return`<${i}>${n}</${i}>`})}componentPatch(t,e){if(mr(t))return!1;let i=this.rendered.componentToString(e),r=new Qe(this,this.el,this.id,i,e);return this.performPatch(r,!0)}getHook(t){return this.viewHooks[ke.elementID(t)]}addHook(t){if(ke.elementID(t)||!t.getAttribute)return;let e=t.getAttribute(`data-phx-${Je}`)||t.getAttribute(this.binding(Je));if(e&&!this.ownsElement(t))return;let i=this.liveSocket.getHookCallbacks(e);if(i){t.id||C(`no DOM ID for hook "${e}". Hooks require a unique ID on each element.`,t);let r=new ke(this,t,i);return this.viewHooks[ke.elementID(r.el)]=r,r}else e!==null&&C(`unknown hook found for "${e}"`,t)}destroyHook(t){t.__destroyed(),t.__cleanup__(),delete this.viewHooks[ke.elementID(t.el)]}applyPendingUpdates(){this.pendingDiffs.forEach(({diff:t,events:e})=>this.update(t,e)),this.pendingDiffs=[]}onChannel(t,e){this.liveSocket.onChannel(this.channel,t,i=>{this.isJoinPending()?this.root.pendingJoinOps.push([this,()=>e(i)]):e(i)})}bindChannel(){this.liveSocket.onChannel(this.channel,"diff",t=>{this.applyDiff("update",t,({diff:e,events:i})=>this.update(e,i))}),this.onChannel("redirect",({to:t,flash:e})=>this.onRedirect({to:t,flash:e})),this.onChannel("live_patch",t=>this.onLivePatch(t)),this.onChannel("live_redirect",t=>this.onLiveRedirect(t)),this.channel.onError(t=>this.onError(t)),this.channel.onClose(t=>this.onClose(t))}destroyAllChildren(){for(let t in this.root.children[this.id])this.getChildById(t).destroy()}onLiveRedirect(t){let{to:e,kind:i,flash:r}=t,n=this.expandURL(e);this.liveSocket.historyRedirect(n,i,r)}onLivePatch(t){let{to:e,kind:i}=t;this.href=this.expandURL(e),this.liveSocket.historyPatch(e,i)}expandURL(t){return t.startsWith("/")?`${window.location.protocol}//${window.location.host}${t}`:t}onRedirect({to:t,flash:e}){this.liveSocket.redirect(t,e)}isDestroyed(){return this.destroyed}join(t){this.parent||(this.stopCallback=this.liveSocket.withPageLoading({to:this.href,kind:"initial"})),this.joinCallback=()=>t&&t(this.joinCount),this.liveSocket.wrapPush(this,{timeout:!1},()=>this.channel.join().receive("ok",e=>!this.isDestroyed()&&this.onJoin(e)).receive("error",e=>!this.isDestroyed()&&this.onJoinError(e)).receive("timeout",()=>!this.isDestroyed()&&this.onJoinError({reason:"timeout"})))}onJoinError(t){return t.reason==="unauthorized"||t.reason==="stale"?(this.log("error",()=>["unauthorized live_redirect. Falling back to page request",t]),this.onRedirect({to:this.href})):((t.redirect||t.live_redirect)&&(this.joinPending=!1,this.channel.leave()),t.redirect?this.onRedirect(t.redirect):t.live_redirect?this.onLiveRedirect(t.live_redirect):(this.log("error",()=>["unable to join",t]),this.liveSocket.reloadWithJitter(this)))}onClose(t){if(!this.isDestroyed()){if(this.isJoinPending()&&document.visibilityState!=="hidden"||this.liveSocket.hasPendingLink()&&t!=="leave")return this.liveSocket.reloadWithJitter(this);this.destroyAllChildren(),this.liveSocket.dropActiveElement(this),document.activeElement&&document.activeElement.blur(),this.liveSocket.isUnloaded()&&this.showLoader(vs)}}onError(t){this.onClose(t),this.log("error",()=>["view crashed",t]),this.liveSocket.isUnloaded()||this.displayError()}displayError(){this.isMain()&&c.dispatchEvent(window,"phx:page-loading-start",{to:this.href,kind:"error"}),this.showLoader(),this.setContainerClasses(qe,rr)}pushWithReply(t,e,i,r=function(){}){if(!this.isConnected())return;let[n,[s]]=t?t():[null,[]],o=function(){};return s&&s.getAttribute(this.binding(er))!==null&&(o=this.liveSocket.withPageLoading({kind:"element",target:s})),typeof i.cid!="number"&&delete i.cid,this.liveSocket.wrapPush(this,{timeout:!0},()=>this.channel.push(e,i,ys).receive("ok",a=>{let l=null;n!==null&&this.undoRefs(n),a.diff&&(l=this.applyDiff("update",a.diff,({diff:h,events:u})=>{this.update(h,u)})),a.redirect&&this.onRedirect(a.redirect),a.live_patch&&this.onLivePatch(a.live_patch),a.live_redirect&&this.onLiveRedirect(a.live_redirect),o(),r(a,l)}))}undoRefs(t){c.all(this.el,`[${H}="${t}"]`,e=>{let i=e.getAttribute(Ke);e.removeAttribute(H),e.getAttribute(wt)!==null&&(e.readOnly=!1,e.removeAttribute(wt)),i!==null&&(e.disabled=i==="true",e.removeAttribute(Ke)),Gi.forEach(s=>c.removeClass(e,s));let r=e.getAttribute(ze);r!==null&&(e.innerText=r,e.removeAttribute(ze));let n=c.private(e,H);if(n){let s=this.triggerBeforeUpdateHook(e,n);Qe.patchEl(e,n,this.liveSocket.getActiveElement()),s&&s.__updated(),c.deletePrivate(e,H)}})}putRef(t,e){let i=this.ref++,r=this.binding(Et);return t.forEach(n=>{n.classList.add(`phx-${e}-loading`),n.setAttribute(H,i);let s=n.getAttribute(r);s!==null&&(n.getAttribute(ze)||n.setAttribute(ze,n.innerText),n.innerText=s)}),[i,t]}componentID(t){let e=t.getAttribute&&t.getAttribute(_);return e?parseInt(e):null}targetComponentID(t,e){return t.getAttribute(this.binding("target"))?this.closestComponentID(e):null}closestComponentID(t){return t?W(t.closest(`[${_}]`),e=>this.ownsElement(e)&&this.componentID(e)):null}pushHookEvent(t,e,i,r){if(!this.isConnected())return this.log("hook",()=>["unable to push hook event. LiveView not connected",e,i]),!1;let[n,s]=this.putRef([],"hook");return this.pushWithReply(()=>[n,s],"event",{type:"hook",event:e,value:i,cid:this.closestComponentID(t)},(o,a)=>r(a,n)),n}extractMeta(t,e){let i=this.binding("value-");for(let r=0;r<t.attributes.length;r++){let n=t.attributes[r].name;n.startsWith(i)&&(e[n.replace(i,"")]=t.getAttribute(n))}return t.value!==void 0&&(e.value=t.value,t.tagName==="INPUT"&&ar.indexOf(t.type)>=0&&!t.checked&&delete e.value),e}pushEvent(t,e,i,r,n){this.pushWithReply(()=>this.putRef([e],t),"event",{type:t,event:r,value:this.extractMeta(e,n),cid:this.targetComponentID(e,i)})}pushKey(t,e,i,r,n){this.pushWithReply(()=>this.putRef([t],i),"event",{type:i,event:r,value:this.extractMeta(t,n),cid:this.targetComponentID(t,e)})}pushFileProgress(t,e,i,r=function(){}){this.liveSocket.withinOwners(t.form,(n,s)=>{n.pushWithReply(null,"progress",{event:t.getAttribute(n.binding(ms)),ref:t.getAttribute(re),entry_ref:e,progress:i,cid:n.targetComponentID(t.form,s)},r)})}pushInput(t,e,i,r,n){let s,o=this.targetComponentID(t.form,e),a=()=>this.putRef([t,t.form],"change"),l=Rt(t.form,{_target:r.name});t.files&&t.files.length>0&&T.trackFiles(t,Array.from(t.files)),s=T.serializeUploads(t);let h={type:"form",event:i,value:l,uploads:s,cid:o};this.pushWithReply(a,"event",h,u=>{if(c.showError(t,this.liveSocket.binding(sr)),c.isUploadInput(t)&&t.getAttribute("data-phx-auto-upload")!==null){if(T.filesAwaitingPreflight(t).length>0){let[f,y]=a();this.uploadFiles(t.form,e,f,o,w=>{n&&n(u),this.triggerAwaitingSubmit(t.form)})}}else n&&n(u)})}triggerAwaitingSubmit(t){let e=this.getScheduledSubmit(t);if(e){let[i,r,n]=e;this.cancelSubmit(t),n()}}getScheduledSubmit(t){return this.formSubmits.find(([e,i])=>e.isSameNode(t))}scheduleSubmit(t,e,i){if(this.getScheduledSubmit(t))return!0;this.formSubmits.push([t,e,i])}cancelSubmit(t){this.formSubmits=this.formSubmits.filter(([e,i,r])=>e.isSameNode(t)?(this.undoRefs(i),!1):!0)}pushFormSubmit(t,e,i,r){let n=u=>!(Te(u,`${this.binding(St)}=ignore`,u.form)||Te(u,"data-phx-update=ignore",u.form)),s=u=>u.hasAttribute(this.binding(Et)),o=u=>u.tagName=="BUTTON",a=u=>["INPUT","TEXTAREA","SELECT"].includes(u.tagName),l=()=>{let u=Array.from(t.elements),f=u.filter(s),y=u.filter(o).filter(n),w=u.filter(a).filter(n);return y.forEach(v=>{v.setAttribute(Ke,v.disabled),v.disabled=!0}),w.forEach(v=>{v.setAttribute(wt,v.readOnly),v.readOnly=!0,v.files&&(v.setAttribute(Ke,v.disabled),v.disabled=!0)}),t.setAttribute(this.binding(er),""),this.putRef([t].concat(f).concat(y).concat(w),"submit")},h=this.targetComponentID(t,e);if(T.hasUploadsInProgress(t)){let[u,f]=l();return this.scheduleSubmit(t,u,()=>this.pushFormSubmit(t,e,i,r))}else if(T.inputsAwaitingPreflight(t).length>0){let[u,f]=l(),y=()=>[u,f];this.uploadFiles(t,e,u,h,w=>{let v=Rt(t,{});this.pushWithReply(y,"event",{type:"form",event:i,value:v,cid:h},r)})}else{let u=Rt(t);this.pushWithReply(l,"event",{type:"form",event:i,value:u,cid:h},r)}}uploadFiles(t,e,i,r,n){let s=this.joinCount,o=T.activeFileInputs(t),a=o.length;o.forEach(l=>{let h=new T(l,this,()=>{a--,a===0&&n()});this.uploaders[l]=h;let u=h.entries().map(y=>y.toPreflightPayload()),f={ref:l.getAttribute(re),entries:u,cid:this.targetComponentID(l.form,e)};this.log("upload",()=>["sending preflight request",f]),this.pushWithReply(null,"allow_upload",f,y=>{if(this.log("upload",()=>["got preflight response",y]),y.error){this.undoRefs(i);let[w,v]=y.error;this.log("upload",()=>[`error for entry ${w}`,v])}else{let w=v=>{this.channel.onError(()=>{this.joinCount===s&&v()})};h.initAdapterUpload(y,w,this.liveSocket)}})})}dispatchUploads(t,e){let i=c.findUploadInputs(this.el).filter(r=>r.name===t);i.length===0?C(`no live file inputs found matching the name "${t}"`):i.length>1?C(`duplicate live file inputs found matching the name "${t}"`):c.dispatchEvent(i[0],Yi,{files:e})}pushFormRecovery(t,e){this.liveSocket.withinOwners(t,(i,r)=>{let n=t.elements[0],s=t.getAttribute(this.binding(hr))||t.getAttribute(this.binding("change"));i.pushInput(n,r,s,n,e)})}pushLinkPatch(t,e,i){let r=this.liveSocket.setPendingLink(t),n=e?()=>this.putRef([e],"click"):null;this.pushWithReply(n,"live_patch",{url:t},s=>{s.link_redirect?this.liveSocket.replaceMain(t,null,i,r):(this.liveSocket.commitPendingLink(r)&&(this.href=t),this.applyPendingUpdates(),i&&i(r))}).receive("timeout",()=>this.liveSocket.redirect(window.location.href))}formsForRecovery(t){if(this.joinCount===0)return[];let e=this.binding("change"),i=document.createElement("template");return i.innerHTML=t,c.all(this.el,`form[${e}]`).filter(r=>this.ownsElement(r)).filter(r=>r.elements.length>0).filter(r=>r.getAttribute(this.binding(hr))!=="ignore").filter(r=>i.content.querySelector(`form[${e}="${r.getAttribute(e)}"]`))}maybePushComponentsDestroyed(t){let e=t.filter(i=>c.findComponentNodeList(this.el,i).length===0);e.length>0&&(this.pruningCIDs.push(...e),this.pushWithReply(null,"cids_will_destroy",{cids:e},()=>{this.pruningCIDs=this.pruningCIDs.filter(r=>e.indexOf(r)!==-1);let i=e.filter(r=>c.findComponentNodeList(this.el,r).length===0);i.length>0&&this.pushWithReply(null,"cids_destroyed",{cids:i},r=>{this.rendered.pruneCIDs(r.cids)})}))}ownsElement(t){return t.getAttribute(Ee)===this.id||W(t.closest(de),e=>e.id)===this.id}submitForm(t,e,i){c.putPrivate(t,lr,!0),this.liveSocket.blurActiveElement(this),this.pushFormSubmit(t,e,i,()=>{this.liveSocket.restorePreviouslyActiveFocus()})}binding(t){return this.liveSocket.binding(t)}},Cr=class{constructor(t,e,i={}){if(this.unloaded=!1,!e||e.constructor.name==="Object")throw new Error(` + a phoenix Socket must be provided as the second argument to the LiveSocket constructor. For example: + + import {Socket} from "phoenix" + import LiveSocket from "phoenix_live_view" + let liveSocket = new LiveSocket("/live", Socket, {...}) + `);this.socket=new e(t,i),this.bindingPrefix=i.bindingPrefix||bs,this.opts=i,this.params=Pt(i.params||{}),this.viewLogger=i.viewLogger,this.metadataCallbacks=i.metadata||{},this.defaults=Object.assign(Ce(ws),i.defaults||{}),this.activeElement=null,this.prevActive=null,this.silenced=!1,this.main=null,this.linkRef=1,this.roots={},this.href=window.location.href,this.pendingLink=null,this.currentLocation=Ce(window.location),this.hooks=i.hooks||{},this.uploaders=i.uploaders||{},this.loaderTimeout=i.loaderTimeout||gs,this.localStorage=i.localStorage||window.localStorage,this.sessionStorage=i.sessionStorage||window.sessionStorage,this.boundTopLevelEvents=!1,this.domCallbacks=Object.assign({onNodeAdded:Pt(),onBeforeElUpdated:Pt()},i.dom||{}),window.addEventListener("pagehide",r=>{this.unloaded=!0}),this.socket.onOpen(()=>{this.isUnloaded()&&window.location.reload()})}isProfileEnabled(){return this.sessionStorage.getItem(Ct)==="true"}isDebugEnabled(){return this.sessionStorage.getItem(At)==="true"}enableDebug(){this.sessionStorage.setItem(At,"true")}enableProfiling(){this.sessionStorage.setItem(Ct,"true")}disableDebug(){this.sessionStorage.removeItem(At)}disableProfiling(){this.sessionStorage.removeItem(Ct)}enableLatencySim(t){this.enableDebug(),console.log("latency simulator enabled for the duration of this browser session. Call disableLatencySim() to disable"),this.sessionStorage.setItem(Tt,t)}disableLatencySim(){this.sessionStorage.removeItem(Tt)}getLatencySim(){let t=this.sessionStorage.getItem(Tt);return t?parseInt(t):null}getSocket(){return this.socket}connect(){let t=()=>{this.joinRootViews()&&(this.bindTopLevelEvents(),this.socket.connect())};["complete","loaded","interactive"].indexOf(document.readyState)>=0?t():document.addEventListener("DOMContentLoaded",()=>t())}disconnect(t){this.socket.disconnect(t)}triggerDOM(t,e){this.domCallbacks[t](...e)}time(t,e){if(!this.isProfileEnabled()||!console.time)return e();console.time(t);let i=e();return console.timeEnd(t),i}log(t,e,i){if(this.viewLogger){let[r,n]=i();this.viewLogger(t,e,r,n)}else if(this.isDebugEnabled()){let[r,n]=i();As(t,e,r,n)}}onChannel(t,e,i){t.on(e,r=>{let n=this.getLatencySim();n?(console.log(`simulating ${n}ms of latency from server to client`),setTimeout(()=>i(r),n)):i(r)})}wrapPush(t,e,i){let r=this.getLatencySim(),n=t.joinCount;if(!r)return e.timeout?i().receive("timeout",()=>{t.joinCount===n&&!t.isDestroyed()&&this.reloadWithJitter(t,()=>{this.log(t,"timeout",()=>["received timeout while communicating with server. Falling back to hard refresh for recovery"])})}):i();console.log(`simulating ${r}ms of latency from client to server`);let s={receives:[],receive(o,a){this.receives.push([o,a])}};return setTimeout(()=>{t.isDestroyed()||s.receives.reduce((o,[a,l])=>o.receive(a,l),i())},r),s}reloadWithJitter(t,e){t.destroy(),this.disconnect();let[i,r]=ss,n=Math.floor(Math.random()*(r-i+1))+i,s=te.updateLocal(this.localStorage,window.location.pathname,Ji,0,o=>o+1);e?e():this.log(t,"join",()=>[`encountered ${s} consecutive reloads`]),s>Xi&&(this.log(t,"join",()=>[`exceeded ${Xi} consecutive reloads. Entering failsafe mode`]),n=os),setTimeout(()=>{this.hasPendingLink()?window.location=this.pendingLink:window.location.reload()},n)}getHookCallbacks(t){return t&&t.startsWith("Phoenix.")?ks[t.split(".")[1]]:this.hooks[t]}isUnloaded(){return this.unloaded}isConnected(){return this.socket.isConnected()}getBindingPrefix(){return this.bindingPrefix}binding(t){return`${this.getBindingPrefix()}${t}`}channel(t,e){return this.socket.channel(t,e)}joinRootViews(){let t=!1;return c.all(document,`${de}:not([${Ee}])`,e=>{if(!this.getRootById(e.id)){let i=this.newRootView(e);i.setHref(this.getHref()),i.join(),e.getAttribute(nr)&&(this.main=i)}t=!0}),t}redirect(t,e){this.disconnect(),te.redirect(t,e)}replaceMain(t,e,i=null,r=this.setPendingLink(t)){let n=this.main.el,s=c.cloneNode(n,"");this.main.showLoader(this.loaderTimeout),this.main.destroy(),this.main=this.newRootView(s,e),this.main.setRedirect(t),this.main.join(o=>{o===1&&this.commitPendingLink(r)&&(n.replaceWith(s),i&&i())})}isPhxView(t){return t.getAttribute&&t.getAttribute(ee)!==null}newRootView(t,e){let i=new Ar(t,this,null,e);return this.roots[i.id]=i,i}owner(t,e){let i=W(t.closest(de),r=>this.getViewByEl(r));i&&e(i)}withinOwners(t,e){this.owner(t,i=>{let r=t.getAttribute(this.binding("target"));r===null?e(i,t):i.withinTargets(r,e)})}getViewByEl(t){let e=t.getAttribute(We);return W(this.getRootById(e),i=>i.getDescendentByEl(t))}getRootById(t){return this.roots[t]}destroyAllViews(){for(let t in this.roots)this.roots[t].destroy(),delete this.roots[t]}destroyViewByEl(t){let e=this.getRootById(t.getAttribute(We));e&&e.destroyDescendent(t.id)}setActiveElement(t){if(this.activeElement===t)return;this.activeElement=t;let e=()=>{t===this.activeElement&&(this.activeElement=null),t.removeEventListener("mouseup",this),t.removeEventListener("touchend",this)};t.addEventListener("mouseup",e),t.addEventListener("touchend",e)}getActiveElement(){return document.activeElement===document.body?this.activeElement||document.activeElement:document.activeElement||document.body}dropActiveElement(t){this.prevActive&&t.ownsElement(this.prevActive)&&(this.prevActive=null)}restorePreviouslyActiveFocus(){this.prevActive&&this.prevActive!==document.body&&this.prevActive.focus()}blurActiveElement(){this.prevActive=this.getActiveElement(),this.prevActive!==document.body&&this.prevActive.blur()}bindTopLevelEvents(){this.boundTopLevelEvents||(this.boundTopLevelEvents=!0,document.body.addEventListener("click",function(){}),window.addEventListener("pageshow",t=>{t.persisted&&(this.getSocket().disconnect(),this.withPageLoading({to:window.location.href,kind:"redirect"}),window.location.reload())},!0),this.bindNav(),this.bindClicks(),this.bindForms(),this.bind({keyup:"keyup",keydown:"keydown"},(t,e,i,r,n,s,o)=>{let a=r.getAttribute(this.binding(ps)),l=t.key&&t.key.toLowerCase();a&&a.toLowerCase()!==l||i.pushKey(r,n,e,s,{key:t.key,...this.eventMeta(e,t,r)})}),this.bind({blur:"focusout",focus:"focusin"},(t,e,i,r,n,s,o)=>{o||i.pushEvent(e,r,n,s,this.eventMeta(e,t,r))}),this.bind({blur:"blur",focus:"focus"},(t,e,i,r,n,s,o)=>{o&&!o!=="window"&&i.pushEvent(e,r,n,s,this.eventMeta(e,t,r))}),window.addEventListener("dragover",t=>t.preventDefault()),window.addEventListener("drop",t=>{t.preventDefault();let e=W(Te(t.target,this.binding(Qi)),n=>n.getAttribute(this.binding(Qi))),i=e&&document.getElementById(e),r=Array.from(t.dataTransfer.files||[]);!i||i.disabled||r.length===0||!(i.files instanceof FileList)||(T.trackFiles(i,r),i.dispatchEvent(new Event("input",{bubbles:!0})))}),this.on(Yi,t=>{let e=t.target;if(!c.isUploadInput(e))return;let i=Array.from(t.detail.files||[]).filter(r=>r instanceof File||r instanceof Blob);T.trackFiles(e,i),e.dispatchEvent(new Event("input",{bubbles:!0}))}))}eventMeta(t,e,i){let r=this.metadataCallbacks[t];return r?r(e,i):{}}setPendingLink(t){return this.linkRef++,this.pendingLink=t,this.linkRef}commitPendingLink(t){return this.linkRef!==t?!1:(this.href=this.pendingLink,this.pendingLink=null,!0)}getHref(){return this.href}hasPendingLink(){return!!this.pendingLink}bind(t,e){for(let i in t){let r=t[i];this.on(r,n=>{let s=this.binding(i),o=this.binding(`window-${i}`),a=n.target.getAttribute&&n.target.getAttribute(s);a?this.debounce(n.target,n,()=>{this.withinOwners(n.target,(l,h)=>{e(n,i,l,n.target,h,a,null)})}):c.all(document,`[${o}]`,l=>{let h=l.getAttribute(o);this.debounce(l,n,()=>{this.withinOwners(l,(u,f)=>{e(n,i,u,l,f,h,"window")})})})})}}bindClicks(){this.bindClick("click","click",!1),this.bindClick("mousedown","capture-click",!0)}bindClick(t,e,i){let r=this.binding(e);window.addEventListener(t,n=>{if(!this.isConnected())return;let s=null;i?s=n.target.matches(`[${r}]`)?n.target:n.target.querySelector(`[${r}]`):s=Te(n.target,r);let o=s&&s.getAttribute(r);!o||(s.getAttribute("href")==="#"&&n.preventDefault(),this.debounce(s,n,()=>{this.withinOwners(s,(a,l)=>{a.pushEvent("click",s,l,o,this.eventMeta("click",n,s))})}))},i)}bindNav(){if(!te.canPushState())return;history.scrollRestoration&&(history.scrollRestoration="manual");let t=null;window.addEventListener("scroll",e=>{clearTimeout(t),t=setTimeout(()=>{te.updateCurrentState(i=>Object.assign(i,{scroll:window.scrollY}))},100)}),window.addEventListener("popstate",e=>{if(!this.registerNewLocation(window.location))return;let{type:i,id:r,root:n,scroll:s}=e.state||{},o=window.location.href;this.main.isConnected()&&i==="patch"&&r===this.main.id?this.main.pushLinkPatch(o,null):this.replaceMain(o,null,()=>{n&&this.replaceRootHistory(),typeof s=="number"&&setTimeout(()=>{window.scrollTo(0,s)},0)})},!1),window.addEventListener("click",e=>{let i=Te(e.target,mt),r=i&&i.getAttribute(mt),n=e.metaKey||e.ctrlKey||e.button===1;if(!r||!this.isConnected()||!this.main||n)return;let s=i.href,o=i.getAttribute(ls);if(e.preventDefault(),this.pendingLink!==s)if(r==="patch")this.pushHistoryPatch(s,o,i);else if(r==="redirect")this.historyRedirect(s,o);else throw new Error(`expected ${mt} to be "patch" or "redirect", got: ${r}`)},!1)}withPageLoading(t,e){c.dispatchEvent(window,"phx:page-loading-start",t);let i=()=>c.dispatchEvent(window,"phx:page-loading-stop",t);return e?e(i):i}pushHistoryPatch(t,e,i){this.withPageLoading({to:t,kind:"patch"},r=>{this.main.pushLinkPatch(t,i,n=>{this.historyPatch(t,e,n),r()})})}historyPatch(t,e,i=this.setPendingLink(t)){!this.commitPendingLink(i)||(te.pushState(e,{type:"patch",id:this.main.id},t),this.registerNewLocation(window.location))}historyRedirect(t,e,i){let r=window.scrollY;this.withPageLoading({to:t,kind:"redirect"},n=>{this.replaceMain(t,i,()=>{te.pushState(e,{type:"redirect",id:this.main.id,scroll:r},t),this.registerNewLocation(window.location),n()})})}replaceRootHistory(){te.pushState("replace",{root:!0,type:"patch",id:this.main.id})}registerNewLocation(t){let{pathname:e,search:i}=this.currentLocation;return e+i===t.pathname+t.search?!1:(this.currentLocation=Ce(t),!0)}bindForms(){let t=0;this.on("submit",e=>{let i=e.target.getAttribute(this.binding("submit"));!i||(e.preventDefault(),e.target.disabled=!0,this.withinOwners(e.target,(r,n)=>r.submitForm(e.target,n,i)))},!1);for(let e of["change","input"])this.on(e,i=>{let r=i.target,n=r.form&&r.form.getAttribute(this.binding("change"));if(!n||r.type==="number"&&r.validity&&r.validity.badInput)return;let s=t;t++;let{at:o,type:a}=c.private(r,"prev-iteration")||{};o===s-1&&e!==a||(c.putPrivate(r,"prev-iteration",{at:s,type:e}),this.debounce(r,i,()=>{this.withinOwners(r.form,(l,h)=>{c.putPrivate(r,or,!0),c.isTextualInput(r)||this.setActiveElement(r),l.pushInput(r,h,n,i.target)})}))},!1)}debounce(t,e,i){let r=this.binding(ds),n=this.binding(fs),s=this.defaults.debounce.toString(),o=this.defaults.throttle.toString();c.debounce(t,e,r,s,n,o,i)}silenceEvents(t){this.silenced=!0,t(),this.silenced=!1}on(t,e){window.addEventListener(t,i=>{this.silenced||e(i)})}};var Ws=ft.start();Ws.load(qi);var Ks=document.querySelector("meta[name='csrf-token']").getAttribute("content"),zs=new Cr("/live",zi,{params:{_csrf_token:Ks}});zs.connect();})(); +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vbm9kZV9tb2R1bGVzL0Bob3R3aXJlZC90dXJiby9kaXN0L3R1cmJvLmVzMjAxNy1lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzdGltdWx1cy9jb3JlL3NyYy9ldmVudF9saXN0ZW5lci50cyIsICIuLi9ub2RlX21vZHVsZXMvQHN0aW11bHVzL2NvcmUvc3JjL2Rpc3BhdGNoZXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzdGltdWx1cy9jb3JlL3NyYy9hY3Rpb25fZGVzY3JpcHRvci50cyIsICIuLi9ub2RlX21vZHVsZXMvQHN0aW11bHVzL2NvcmUvc3JjL2FjdGlvbi50cyIsICIuLi9ub2RlX21vZHVsZXMvQHN0aW11bHVzL2NvcmUvc3JjL2JpbmRpbmcudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzdGltdWx1cy9tdXRhdGlvbi1vYnNlcnZlcnMvc3JjL2VsZW1lbnRfb2JzZXJ2ZXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzdGltdWx1cy9tdXRhdGlvbi1vYnNlcnZlcnMvc3JjL2F0dHJpYnV0ZV9vYnNlcnZlci50cyIsICIuLi9ub2RlX21vZHVsZXMvQHN0aW11bHVzL211dGF0aW9uLW9ic2VydmVycy9zcmMvc3RyaW5nX21hcF9vYnNlcnZlci50cyIsICIuLi9ub2RlX21vZHVsZXMvQHN0aW11bHVzL211bHRpbWFwL3NyYy9zZXRfb3BlcmF0aW9ucy50cyIsICIuLi9ub2RlX21vZHVsZXMvQHN0aW11bHVzL211bHRpbWFwL3NyYy9tdWx0aW1hcC50cyIsICIuLi9ub2RlX21vZHVsZXMvQHN0aW11bHVzL211bHRpbWFwL3NyYy9pbmRleGVkX211bHRpbWFwLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac3RpbXVsdXMvbXV0YXRpb24tb2JzZXJ2ZXJzL3NyYy90b2tlbl9saXN0X29ic2VydmVyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac3RpbXVsdXMvbXV0YXRpb24tb2JzZXJ2ZXJzL3NyYy92YWx1ZV9saXN0X29ic2VydmVyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac3RpbXVsdXMvY29yZS9zcmMvYmluZGluZ19vYnNlcnZlci50cyIsICIuLi9ub2RlX21vZHVsZXMvQHN0aW11bHVzL2NvcmUvc3JjL3ZhbHVlX29ic2VydmVyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac3RpbXVsdXMvY29yZS9zcmMvY29udGV4dC50cyIsICIuLi9ub2RlX21vZHVsZXMvQHN0aW11bHVzL2NvcmUvc3JjL2luaGVyaXRhYmxlX3N0YXRpY3MudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzdGltdWx1cy9jb3JlL3NyYy9ibGVzc2luZy50cyIsICIuLi9ub2RlX21vZHVsZXMvQHN0aW11bHVzL2NvcmUvc3JjL2RlZmluaXRpb24udHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzdGltdWx1cy9jb3JlL3NyYy9tb2R1bGUudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzdGltdWx1cy9jb3JlL3NyYy9jbGFzc19tYXAudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzdGltdWx1cy9jb3JlL3NyYy9zdHJpbmdfaGVscGVycy50cyIsICIuLi9ub2RlX21vZHVsZXMvQHN0aW11bHVzL2NvcmUvc3JjL2RhdGFfbWFwLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac3RpbXVsdXMvY29yZS9zcmMvZ3VpZGUudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzdGltdWx1cy9jb3JlL3NyYy9zZWxlY3RvcnMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzdGltdWx1cy9jb3JlL3NyYy90YXJnZXRfc2V0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac3RpbXVsdXMvY29yZS9zcmMvc2NvcGUudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzdGltdWx1cy9jb3JlL3NyYy9zY29wZV9vYnNlcnZlci50cyIsICIuLi9ub2RlX21vZHVsZXMvQHN0aW11bHVzL2NvcmUvc3JjL3JvdXRlci50cyIsICIuLi9ub2RlX21vZHVsZXMvQHN0aW11bHVzL2NvcmUvc3JjL3NjaGVtYS50cyIsICIuLi9ub2RlX21vZHVsZXMvQHN0aW11bHVzL2NvcmUvc3JjL2FwcGxpY2F0aW9uLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac3RpbXVsdXMvY29yZS9zcmMvY2xhc3NfcHJvcGVydGllcy50cyIsICIuLi9ub2RlX21vZHVsZXMvQHN0aW11bHVzL2NvcmUvc3JjL3RhcmdldF9wcm9wZXJ0aWVzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac3RpbXVsdXMvY29yZS9zcmMvdmFsdWVfcHJvcGVydGllcy50cyIsICIuLi9ub2RlX21vZHVsZXMvQHN0aW11bHVzL2NvcmUvc3JjL2NvbnRyb2xsZXIudHMiLCAic3RpbXVsdXNfbnM6L1VzZXJzL2hyZWYvZGV2L2JvdC9hc3NldHMvY29udHJvbGxlcnMiLCAiLi4vLi4vZGVwcy9waG9lbml4L2Fzc2V0cy9qcy9waG9lbml4L3V0aWxzLmpzIiwgIi4uLy4uL2RlcHMvcGhvZW5peC9hc3NldHMvanMvcGhvZW5peC9jb25zdGFudHMuanMiLCAiLi4vLi4vZGVwcy9waG9lbml4L2Fzc2V0cy9qcy9waG9lbml4L3B1c2guanMiLCAiLi4vLi4vZGVwcy9waG9lbml4L2Fzc2V0cy9qcy9waG9lbml4L3RpbWVyLmpzIiwgIi4uLy4uL2RlcHMvcGhvZW5peC9hc3NldHMvanMvcGhvZW5peC9jaGFubmVsLmpzIiwgIi4uLy4uL2RlcHMvcGhvZW5peC9hc3NldHMvanMvcGhvZW5peC9hamF4LmpzIiwgIi4uLy4uL2RlcHMvcGhvZW5peC9hc3NldHMvanMvcGhvZW5peC9sb25ncG9sbC5qcyIsICIuLi8uLi9kZXBzL3Bob2VuaXgvYXNzZXRzL2pzL3Bob2VuaXgvcHJlc2VuY2UuanMiLCAiLi4vLi4vZGVwcy9waG9lbml4L2Fzc2V0cy9qcy9waG9lbml4L3NlcmlhbGl6ZXIuanMiLCAiLi4vLi4vZGVwcy9waG9lbml4L2Fzc2V0cy9qcy9waG9lbml4L3NvY2tldC5qcyIsICIuLi8uLi9kZXBzL3Bob2VuaXhfbGl2ZV92aWV3L2Fzc2V0cy9qcy9waG9lbml4X2xpdmVfdmlldy9jb25zdGFudHMuanMiLCAiLi4vLi4vZGVwcy9waG9lbml4X2xpdmVfdmlldy9hc3NldHMvanMvcGhvZW5peF9saXZlX3ZpZXcvZW50cnlfdXBsb2FkZXIuanMiLCAiLi4vLi4vZGVwcy9waG9lbml4X2xpdmVfdmlldy9hc3NldHMvanMvcGhvZW5peF9saXZlX3ZpZXcvdXRpbHMuanMiLCAiLi4vLi4vZGVwcy9waG9lbml4X2xpdmVfdmlldy9hc3NldHMvanMvcGhvZW5peF9saXZlX3ZpZXcvYnJvd3Nlci5qcyIsICIuLi8uLi9kZXBzL3Bob2VuaXhfbGl2ZV92aWV3L2Fzc2V0cy9qcy9waG9lbml4X2xpdmVfdmlldy9kb20uanMiLCAiLi4vLi4vZGVwcy9waG9lbml4X2xpdmVfdmlldy9hc3NldHMvanMvcGhvZW5peF9saXZlX3ZpZXcvdXBsb2FkX2VudHJ5LmpzIiwgIi4uLy4uL2RlcHMvcGhvZW5peF9saXZlX3ZpZXcvYXNzZXRzL2pzL3Bob2VuaXhfbGl2ZV92aWV3L2xpdmVfdXBsb2FkZXIuanMiLCAiLi4vLi4vZGVwcy9waG9lbml4X2xpdmVfdmlldy9hc3NldHMvanMvcGhvZW5peF9saXZlX3ZpZXcvaG9va3MuanMiLCAiLi4vLi4vZGVwcy9waG9lbml4X2xpdmVfdmlldy9hc3NldHMvanMvcGhvZW5peF9saXZlX3ZpZXcvZG9tX3Bvc3RfbW9ycGhfcmVzdG9yZXIuanMiLCAiLi4vLi4vZGVwcy9waG9lbml4X2xpdmVfdmlldy9hc3NldHMvbm9kZV9tb2R1bGVzL21vcnBoZG9tL2Rpc3QvbW9ycGhkb20tZXNtLmpzIiwgIi4uLy4uL2RlcHMvcGhvZW5peF9saXZlX3ZpZXcvYXNzZXRzL2pzL3Bob2VuaXhfbGl2ZV92aWV3L2RvbV9wYXRjaC5qcyIsICIuLi8uLi9kZXBzL3Bob2VuaXhfbGl2ZV92aWV3L2Fzc2V0cy9qcy9waG9lbml4X2xpdmVfdmlldy9yZW5kZXJlZC5qcyIsICIuLi8uLi9kZXBzL3Bob2VuaXhfbGl2ZV92aWV3L2Fzc2V0cy9qcy9waG9lbml4X2xpdmVfdmlldy92aWV3X2hvb2suanMiLCAiLi4vLi4vZGVwcy9waG9lbml4X2xpdmVfdmlldy9hc3NldHMvanMvcGhvZW5peF9saXZlX3ZpZXcvdmlldy5qcyIsICIuLi8uLi9kZXBzL3Bob2VuaXhfbGl2ZV92aWV3L2Fzc2V0cy9qcy9waG9lbml4X2xpdmVfdmlldy9saXZlX3NvY2tldC5qcyIsICIuLi9zaXRlLmpzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKlxuVHVyYm8gNy4wLjAtcmMuMlxuQ29weXJpZ2h0IFx1MDBBOSAyMDIxIEJhc2VjYW1wLCBMTENcbiAqL1xuKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAod2luZG93LlJlZmxlY3QgPT09IHVuZGVmaW5lZCB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICB3aW5kb3cuY3VzdG9tRWxlbWVudHMucG9seWZpbGxXcmFwRmx1c2hDYWxsYmFjaykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IEJ1aWx0SW5IVE1MRWxlbWVudCA9IEhUTUxFbGVtZW50O1xuICAgIGNvbnN0IHdyYXBwZXJGb3JUaGVOYW1lID0ge1xuICAgICAgICAnSFRNTEVsZW1lbnQnOiBmdW5jdGlvbiBIVE1MRWxlbWVudCgpIHtcbiAgICAgICAgICAgIHJldHVybiBSZWZsZWN0LmNvbnN0cnVjdChCdWlsdEluSFRNTEVsZW1lbnQsIFtdLCB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgd2luZG93LkhUTUxFbGVtZW50ID1cbiAgICAgICAgd3JhcHBlckZvclRoZU5hbWVbJ0hUTUxFbGVtZW50J107XG4gICAgSFRNTEVsZW1lbnQucHJvdG90eXBlID0gQnVpbHRJbkhUTUxFbGVtZW50LnByb3RvdHlwZTtcbiAgICBIVE1MRWxlbWVudC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBIVE1MRWxlbWVudDtcbiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTEVsZW1lbnQsIEJ1aWx0SW5IVE1MRWxlbWVudCk7XG59KSgpO1xuXG5jb25zdCBzdWJtaXR0ZXJzQnlGb3JtID0gbmV3IFdlYWtNYXA7XG5mdW5jdGlvbiBmaW5kU3VibWl0dGVyRnJvbUNsaWNrVGFyZ2V0KHRhcmdldCkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSB0YXJnZXQgaW5zdGFuY2VvZiBFbGVtZW50ID8gdGFyZ2V0IDogdGFyZ2V0IGluc3RhbmNlb2YgTm9kZSA/IHRhcmdldC5wYXJlbnRFbGVtZW50IDogbnVsbDtcbiAgICBjb25zdCBjYW5kaWRhdGUgPSBlbGVtZW50ID8gZWxlbWVudC5jbG9zZXN0KFwiaW5wdXQsIGJ1dHRvblwiKSA6IG51bGw7XG4gICAgcmV0dXJuIChjYW5kaWRhdGUgPT09IG51bGwgfHwgY2FuZGlkYXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjYW5kaWRhdGUudHlwZSkgPT0gXCJzdWJtaXRcIiA/IGNhbmRpZGF0ZSA6IG51bGw7XG59XG5mdW5jdGlvbiBjbGlja0NhcHR1cmVkKGV2ZW50KSB7XG4gICAgY29uc3Qgc3VibWl0dGVyID0gZmluZFN1Ym1pdHRlckZyb21DbGlja1RhcmdldChldmVudC50YXJnZXQpO1xuICAgIGlmIChzdWJtaXR0ZXIgJiYgc3VibWl0dGVyLmZvcm0pIHtcbiAgICAgICAgc3VibWl0dGVyc0J5Rm9ybS5zZXQoc3VibWl0dGVyLmZvcm0sIHN1Ym1pdHRlcik7XG4gICAgfVxufVxuKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoXCJTdWJtaXRFdmVudFwiIGluIHdpbmRvdylcbiAgICAgICAgcmV0dXJuO1xuICAgIGFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBjbGlja0NhcHR1cmVkLCB0cnVlKTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRXZlbnQucHJvdG90eXBlLCBcInN1Ym1pdHRlclwiLCB7XG4gICAgICAgIGdldCgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnR5cGUgPT0gXCJzdWJtaXRcIiAmJiB0aGlzLnRhcmdldCBpbnN0YW5jZW9mIEhUTUxGb3JtRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzdWJtaXR0ZXJzQnlGb3JtLmdldCh0aGlzLnRhcmdldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbn0pKCk7XG5cbnZhciBGcmFtZUxvYWRpbmdTdHlsZTtcbihmdW5jdGlvbiAoRnJhbWVMb2FkaW5nU3R5bGUpIHtcbiAgICBGcmFtZUxvYWRpbmdTdHlsZVtcImVhZ2VyXCJdID0gXCJlYWdlclwiO1xuICAgIEZyYW1lTG9hZGluZ1N0eWxlW1wibGF6eVwiXSA9IFwibGF6eVwiO1xufSkoRnJhbWVMb2FkaW5nU3R5bGUgfHwgKEZyYW1lTG9hZGluZ1N0eWxlID0ge30pKTtcbmNsYXNzIEZyYW1lRWxlbWVudCBleHRlbmRzIEhUTUxFbGVtZW50IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5sb2FkZWQgPSBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgdGhpcy5kZWxlZ2F0ZSA9IG5ldyBGcmFtZUVsZW1lbnQuZGVsZWdhdGVDb25zdHJ1Y3Rvcih0aGlzKTtcbiAgICB9XG4gICAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG4gICAgICAgIHJldHVybiBbXCJkaXNhYmxlZFwiLCBcImxvYWRpbmdcIiwgXCJzcmNcIl07XG4gICAgfVxuICAgIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgICAgICB0aGlzLmRlbGVnYXRlLmNvbm5lY3QoKTtcbiAgICB9XG4gICAgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgICAgIHRoaXMuZGVsZWdhdGUuZGlzY29ubmVjdCgpO1xuICAgIH1cbiAgICByZWxvYWQoKSB7XG4gICAgICAgIGNvbnN0IHsgc3JjIH0gPSB0aGlzO1xuICAgICAgICB0aGlzLnNyYyA9IG51bGw7XG4gICAgICAgIHRoaXMuc3JjID0gc3JjO1xuICAgIH1cbiAgICBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sobmFtZSkge1xuICAgICAgICBpZiAobmFtZSA9PSBcImxvYWRpbmdcIikge1xuICAgICAgICAgICAgdGhpcy5kZWxlZ2F0ZS5sb2FkaW5nU3R5bGVDaGFuZ2VkKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobmFtZSA9PSBcInNyY1wiKSB7XG4gICAgICAgICAgICB0aGlzLmRlbGVnYXRlLnNvdXJjZVVSTENoYW5nZWQoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGVsZWdhdGUuZGlzYWJsZWRDaGFuZ2VkKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IHNyYygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QXR0cmlidXRlKFwic3JjXCIpO1xuICAgIH1cbiAgICBzZXQgc3JjKHZhbHVlKSB7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJzcmNcIiwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGUoXCJzcmNcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IGxvYWRpbmcoKSB7XG4gICAgICAgIHJldHVybiBmcmFtZUxvYWRpbmdTdHlsZUZyb21TdHJpbmcodGhpcy5nZXRBdHRyaWJ1dGUoXCJsb2FkaW5nXCIpIHx8IFwiXCIpO1xuICAgIH1cbiAgICBzZXQgbG9hZGluZyh2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKFwibG9hZGluZ1wiLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZShcImxvYWRpbmdcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IGRpc2FibGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5oYXNBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiKTtcbiAgICB9XG4gICAgc2V0IGRpc2FibGVkKHZhbHVlKSB7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiLCBcIlwiKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlKFwiZGlzYWJsZWRcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IGF1dG9zY3JvbGwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhhc0F0dHJpYnV0ZShcImF1dG9zY3JvbGxcIik7XG4gICAgfVxuICAgIHNldCBhdXRvc2Nyb2xsKHZhbHVlKSB7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJhdXRvc2Nyb2xsXCIsIFwiXCIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGUoXCJhdXRvc2Nyb2xsXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBjb21wbGV0ZSgpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmRlbGVnYXRlLmlzTG9hZGluZztcbiAgICB9XG4gICAgZ2V0IGlzQWN0aXZlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vd25lckRvY3VtZW50ID09PSBkb2N1bWVudCAmJiAhdGhpcy5pc1ByZXZpZXc7XG4gICAgfVxuICAgIGdldCBpc1ByZXZpZXcoKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIHJldHVybiAoX2IgPSAoX2EgPSB0aGlzLm93bmVyRG9jdW1lbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5kb2N1bWVudEVsZW1lbnQpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5oYXNBdHRyaWJ1dGUoXCJkYXRhLXR1cmJvLXByZXZpZXdcIik7XG4gICAgfVxufVxuZnVuY3Rpb24gZnJhbWVMb2FkaW5nU3R5bGVGcm9tU3RyaW5nKHN0eWxlKSB7XG4gICAgc3dpdGNoIChzdHlsZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgIGNhc2UgXCJsYXp5XCI6IHJldHVybiBGcmFtZUxvYWRpbmdTdHlsZS5sYXp5O1xuICAgICAgICBkZWZhdWx0OiByZXR1cm4gRnJhbWVMb2FkaW5nU3R5bGUuZWFnZXI7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBleHBhbmRVUkwobG9jYXRhYmxlKSB7XG4gICAgcmV0dXJuIG5ldyBVUkwobG9jYXRhYmxlLnRvU3RyaW5nKCksIGRvY3VtZW50LmJhc2VVUkkpO1xufVxuZnVuY3Rpb24gZ2V0QW5jaG9yKHVybCkge1xuICAgIGxldCBhbmNob3JNYXRjaDtcbiAgICBpZiAodXJsLmhhc2gpIHtcbiAgICAgICAgcmV0dXJuIHVybC5oYXNoLnNsaWNlKDEpO1xuICAgIH1cbiAgICBlbHNlIGlmIChhbmNob3JNYXRjaCA9IHVybC5ocmVmLm1hdGNoKC8jKC4qKSQvKSkge1xuICAgICAgICByZXR1cm4gYW5jaG9yTWF0Y2hbMV07XG4gICAgfVxufVxuZnVuY3Rpb24gZ2V0RXh0ZW5zaW9uKHVybCkge1xuICAgIHJldHVybiAoZ2V0TGFzdFBhdGhDb21wb25lbnQodXJsKS5tYXRjaCgvXFwuW14uXSokLykgfHwgW10pWzBdIHx8IFwiXCI7XG59XG5mdW5jdGlvbiBpc0hUTUwodXJsKSB7XG4gICAgcmV0dXJuICEhZ2V0RXh0ZW5zaW9uKHVybCkubWF0Y2goL14oPzp8XFwuKD86aHRtfGh0bWx8eGh0bWwpKSQvKTtcbn1cbmZ1bmN0aW9uIGlzUHJlZml4ZWRCeShiYXNlVVJMLCB1cmwpIHtcbiAgICBjb25zdCBwcmVmaXggPSBnZXRQcmVmaXgodXJsKTtcbiAgICByZXR1cm4gYmFzZVVSTC5ocmVmID09PSBleHBhbmRVUkwocHJlZml4KS5ocmVmIHx8IGJhc2VVUkwuaHJlZi5zdGFydHNXaXRoKHByZWZpeCk7XG59XG5mdW5jdGlvbiBnZXRSZXF1ZXN0VVJMKHVybCkge1xuICAgIGNvbnN0IGFuY2hvciA9IGdldEFuY2hvcih1cmwpO1xuICAgIHJldHVybiBhbmNob3IgIT0gbnVsbFxuICAgICAgICA/IHVybC5ocmVmLnNsaWNlKDAsIC0oYW5jaG9yLmxlbmd0aCArIDEpKVxuICAgICAgICA6IHVybC5ocmVmO1xufVxuZnVuY3Rpb24gdG9DYWNoZUtleSh1cmwpIHtcbiAgICByZXR1cm4gZ2V0UmVxdWVzdFVSTCh1cmwpO1xufVxuZnVuY3Rpb24gdXJsc0FyZUVxdWFsKGxlZnQsIHJpZ2h0KSB7XG4gICAgcmV0dXJuIGV4cGFuZFVSTChsZWZ0KS5ocmVmID09IGV4cGFuZFVSTChyaWdodCkuaHJlZjtcbn1cbmZ1bmN0aW9uIGdldFBhdGhDb21wb25lbnRzKHVybCkge1xuICAgIHJldHVybiB1cmwucGF0aG5hbWUuc3BsaXQoXCIvXCIpLnNsaWNlKDEpO1xufVxuZnVuY3Rpb24gZ2V0TGFzdFBhdGhDb21wb25lbnQodXJsKSB7XG4gICAgcmV0dXJuIGdldFBhdGhDb21wb25lbnRzKHVybCkuc2xpY2UoLTEpWzBdO1xufVxuZnVuY3Rpb24gZ2V0UHJlZml4KHVybCkge1xuICAgIHJldHVybiBhZGRUcmFpbGluZ1NsYXNoKHVybC5vcmlnaW4gKyB1cmwucGF0aG5hbWUpO1xufVxuZnVuY3Rpb24gYWRkVHJhaWxpbmdTbGFzaCh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZS5lbmRzV2l0aChcIi9cIikgPyB2YWx1ZSA6IHZhbHVlICsgXCIvXCI7XG59XG5cbmNsYXNzIEZldGNoUmVzcG9uc2Uge1xuICAgIGNvbnN0cnVjdG9yKHJlc3BvbnNlKSB7XG4gICAgICAgIHRoaXMucmVzcG9uc2UgPSByZXNwb25zZTtcbiAgICB9XG4gICAgZ2V0IHN1Y2NlZWRlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVzcG9uc2Uub2s7XG4gICAgfVxuICAgIGdldCBmYWlsZWQoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5zdWNjZWVkZWQ7XG4gICAgfVxuICAgIGdldCBjbGllbnRFcnJvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdHVzQ29kZSA+PSA0MDAgJiYgdGhpcy5zdGF0dXNDb2RlIDw9IDQ5OTtcbiAgICB9XG4gICAgZ2V0IHNlcnZlckVycm9yKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGF0dXNDb2RlID49IDUwMCAmJiB0aGlzLnN0YXR1c0NvZGUgPD0gNTk5O1xuICAgIH1cbiAgICBnZXQgcmVkaXJlY3RlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVzcG9uc2UucmVkaXJlY3RlZDtcbiAgICB9XG4gICAgZ2V0IGxvY2F0aW9uKCkge1xuICAgICAgICByZXR1cm4gZXhwYW5kVVJMKHRoaXMucmVzcG9uc2UudXJsKTtcbiAgICB9XG4gICAgZ2V0IGlzSFRNTCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGVudFR5cGUgJiYgdGhpcy5jb250ZW50VHlwZS5tYXRjaCgvXig/OnRleHRcXC8oW15cXHM7LF0rXFxiKT9odG1sfGFwcGxpY2F0aW9uXFwveGh0bWxcXCt4bWwpXFxiLyk7XG4gICAgfVxuICAgIGdldCBzdGF0dXNDb2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXNwb25zZS5zdGF0dXM7XG4gICAgfVxuICAgIGdldCBjb250ZW50VHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGVhZGVyKFwiQ29udGVudC1UeXBlXCIpO1xuICAgIH1cbiAgICBnZXQgcmVzcG9uc2VUZXh0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXNwb25zZS50ZXh0KCk7XG4gICAgfVxuICAgIGdldCByZXNwb25zZUhUTUwoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzSFRNTCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVzcG9uc2UudGV4dCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGhlYWRlcihuYW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlc3BvbnNlLmhlYWRlcnMuZ2V0KG5hbWUpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZGlzcGF0Y2goZXZlbnROYW1lLCB7IHRhcmdldCwgY2FuY2VsYWJsZSwgZGV0YWlsIH0gPSB7fSkge1xuICAgIGNvbnN0IGV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KGV2ZW50TmFtZSwgeyBjYW5jZWxhYmxlLCBidWJibGVzOiB0cnVlLCBkZXRhaWwgfSk7XG4gICAgdm9pZCAodGFyZ2V0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkuZGlzcGF0Y2hFdmVudChldmVudCk7XG4gICAgcmV0dXJuIGV2ZW50O1xufVxuZnVuY3Rpb24gbmV4dEFuaW1hdGlvbkZyYW1lKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiByZXNvbHZlKCkpKTtcbn1cbmZ1bmN0aW9uIG5leHRFdmVudExvb3BUaWNrKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQoKCkgPT4gcmVzb2x2ZSgpLCAwKSk7XG59XG5mdW5jdGlvbiBuZXh0TWljcm90YXNrKCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbn1cbmZ1bmN0aW9uIHBhcnNlSFRNTERvY3VtZW50KGh0bWwgPSBcIlwiKSB7XG4gICAgcmV0dXJuIG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoaHRtbCwgXCJ0ZXh0L2h0bWxcIik7XG59XG5mdW5jdGlvbiB1bmluZGVudChzdHJpbmdzLCAuLi52YWx1ZXMpIHtcbiAgICBjb25zdCBsaW5lcyA9IGludGVycG9sYXRlKHN0cmluZ3MsIHZhbHVlcykucmVwbGFjZSgvXlxcbi8sIFwiXCIpLnNwbGl0KFwiXFxuXCIpO1xuICAgIGNvbnN0IG1hdGNoID0gbGluZXNbMF0ubWF0Y2goL15cXHMrLyk7XG4gICAgY29uc3QgaW5kZW50ID0gbWF0Y2ggPyBtYXRjaFswXS5sZW5ndGggOiAwO1xuICAgIHJldHVybiBsaW5lcy5tYXAobGluZSA9PiBsaW5lLnNsaWNlKGluZGVudCkpLmpvaW4oXCJcXG5cIik7XG59XG5mdW5jdGlvbiBpbnRlcnBvbGF0ZShzdHJpbmdzLCB2YWx1ZXMpIHtcbiAgICByZXR1cm4gc3RyaW5ncy5yZWR1Y2UoKHJlc3VsdCwgc3RyaW5nLCBpKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdmFsdWVzW2ldID09IHVuZGVmaW5lZCA/IFwiXCIgOiB2YWx1ZXNbaV07XG4gICAgICAgIHJldHVybiByZXN1bHQgKyBzdHJpbmcgKyB2YWx1ZTtcbiAgICB9LCBcIlwiKTtcbn1cbmZ1bmN0aW9uIHV1aWQoKSB7XG4gICAgcmV0dXJuIEFycmF5LmFwcGx5KG51bGwsIHsgbGVuZ3RoOiAzNiB9KS5tYXAoKF8sIGkpID0+IHtcbiAgICAgICAgaWYgKGkgPT0gOCB8fCBpID09IDEzIHx8IGkgPT0gMTggfHwgaSA9PSAyMykge1xuICAgICAgICAgICAgcmV0dXJuIFwiLVwiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGkgPT0gMTQpIHtcbiAgICAgICAgICAgIHJldHVybiBcIjRcIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpID09IDE5KSB7XG4gICAgICAgICAgICByZXR1cm4gKE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDQpICsgOCkudG9TdHJpbmcoMTYpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDE1KS50b1N0cmluZygxNik7XG4gICAgICAgIH1cbiAgICB9KS5qb2luKFwiXCIpO1xufVxuXG52YXIgRmV0Y2hNZXRob2Q7XG4oZnVuY3Rpb24gKEZldGNoTWV0aG9kKSB7XG4gICAgRmV0Y2hNZXRob2RbRmV0Y2hNZXRob2RbXCJnZXRcIl0gPSAwXSA9IFwiZ2V0XCI7XG4gICAgRmV0Y2hNZXRob2RbRmV0Y2hNZXRob2RbXCJwb3N0XCJdID0gMV0gPSBcInBvc3RcIjtcbiAgICBGZXRjaE1ldGhvZFtGZXRjaE1ldGhvZFtcInB1dFwiXSA9IDJdID0gXCJwdXRcIjtcbiAgICBGZXRjaE1ldGhvZFtGZXRjaE1ldGhvZFtcInBhdGNoXCJdID0gM10gPSBcInBhdGNoXCI7XG4gICAgRmV0Y2hNZXRob2RbRmV0Y2hNZXRob2RbXCJkZWxldGVcIl0gPSA0XSA9IFwiZGVsZXRlXCI7XG59KShGZXRjaE1ldGhvZCB8fCAoRmV0Y2hNZXRob2QgPSB7fSkpO1xuZnVuY3Rpb24gZmV0Y2hNZXRob2RGcm9tU3RyaW5nKG1ldGhvZCkge1xuICAgIHN3aXRjaCAobWV0aG9kLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgY2FzZSBcImdldFwiOiByZXR1cm4gRmV0Y2hNZXRob2QuZ2V0O1xuICAgICAgICBjYXNlIFwicG9zdFwiOiByZXR1cm4gRmV0Y2hNZXRob2QucG9zdDtcbiAgICAgICAgY2FzZSBcInB1dFwiOiByZXR1cm4gRmV0Y2hNZXRob2QucHV0O1xuICAgICAgICBjYXNlIFwicGF0Y2hcIjogcmV0dXJuIEZldGNoTWV0aG9kLnBhdGNoO1xuICAgICAgICBjYXNlIFwiZGVsZXRlXCI6IHJldHVybiBGZXRjaE1ldGhvZC5kZWxldGU7XG4gICAgfVxufVxuY2xhc3MgRmV0Y2hSZXF1ZXN0IHtcbiAgICBjb25zdHJ1Y3RvcihkZWxlZ2F0ZSwgbWV0aG9kLCBsb2NhdGlvbiwgYm9keSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMpIHtcbiAgICAgICAgdGhpcy5hYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyO1xuICAgICAgICB0aGlzLnJlc29sdmVSZXF1ZXN0UHJvbWlzZSA9ICh2YWx1ZSkgPT4geyB9O1xuICAgICAgICB0aGlzLmRlbGVnYXRlID0gZGVsZWdhdGU7XG4gICAgICAgIHRoaXMubWV0aG9kID0gbWV0aG9kO1xuICAgICAgICB0aGlzLmhlYWRlcnMgPSB0aGlzLmRlZmF1bHRIZWFkZXJzO1xuICAgICAgICBpZiAodGhpcy5pc0lkZW1wb3RlbnQpIHtcbiAgICAgICAgICAgIHRoaXMudXJsID0gbWVyZ2VGb3JtRGF0YUVudHJpZXMobG9jYXRpb24sIFsuLi5ib2R5LmVudHJpZXMoKV0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgICAgICAgICAgIHRoaXMudXJsID0gbG9jYXRpb247XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IGxvY2F0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy51cmw7XG4gICAgfVxuICAgIGdldCBwYXJhbXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnVybC5zZWFyY2hQYXJhbXM7XG4gICAgfVxuICAgIGdldCBlbnRyaWVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ib2R5ID8gQXJyYXkuZnJvbSh0aGlzLmJvZHkuZW50cmllcygpKSA6IFtdO1xuICAgIH1cbiAgICBjYW5jZWwoKSB7XG4gICAgICAgIHRoaXMuYWJvcnRDb250cm9sbGVyLmFib3J0KCk7XG4gICAgfVxuICAgIGFzeW5jIHBlcmZvcm0oKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIGNvbnN0IHsgZmV0Y2hPcHRpb25zIH0gPSB0aGlzO1xuICAgICAgICAoX2IgPSAoX2EgPSB0aGlzLmRlbGVnYXRlKS5wcmVwYXJlSGVhZGVyc0ZvclJlcXVlc3QpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hLCB0aGlzLmhlYWRlcnMsIHRoaXMpO1xuICAgICAgICBhd2FpdCB0aGlzLmFsbG93UmVxdWVzdFRvQmVJbnRlcmNlcHRlZChmZXRjaE9wdGlvbnMpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5kZWxlZ2F0ZS5yZXF1ZXN0U3RhcnRlZCh0aGlzKTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godGhpcy51cmwuaHJlZiwgZmV0Y2hPcHRpb25zKTtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnJlY2VpdmUocmVzcG9uc2UpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgaWYgKGVycm9yLm5hbWUgIT09ICdBYm9ydEVycm9yJykge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVsZWdhdGUucmVxdWVzdEVycm9yZWQodGhpcywgZXJyb3IpO1xuICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgdGhpcy5kZWxlZ2F0ZS5yZXF1ZXN0RmluaXNoZWQodGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgcmVjZWl2ZShyZXNwb25zZSkge1xuICAgICAgICBjb25zdCBmZXRjaFJlc3BvbnNlID0gbmV3IEZldGNoUmVzcG9uc2UocmVzcG9uc2UpO1xuICAgICAgICBjb25zdCBldmVudCA9IGRpc3BhdGNoKFwidHVyYm86YmVmb3JlLWZldGNoLXJlc3BvbnNlXCIsIHsgY2FuY2VsYWJsZTogdHJ1ZSwgZGV0YWlsOiB7IGZldGNoUmVzcG9uc2UgfSB9KTtcbiAgICAgICAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZGVsZWdhdGUucmVxdWVzdFByZXZlbnRlZEhhbmRsaW5nUmVzcG9uc2UodGhpcywgZmV0Y2hSZXNwb25zZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZmV0Y2hSZXNwb25zZS5zdWNjZWVkZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZGVsZWdhdGUucmVxdWVzdFN1Y2NlZWRlZFdpdGhSZXNwb25zZSh0aGlzLCBmZXRjaFJlc3BvbnNlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGVsZWdhdGUucmVxdWVzdEZhaWxlZFdpdGhSZXNwb25zZSh0aGlzLCBmZXRjaFJlc3BvbnNlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmV0Y2hSZXNwb25zZTtcbiAgICB9XG4gICAgZ2V0IGZldGNoT3B0aW9ucygpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbWV0aG9kOiBGZXRjaE1ldGhvZFt0aGlzLm1ldGhvZF0udG9VcHBlckNhc2UoKSxcbiAgICAgICAgICAgIGNyZWRlbnRpYWxzOiBcInNhbWUtb3JpZ2luXCIsXG4gICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXG4gICAgICAgICAgICByZWRpcmVjdDogXCJmb2xsb3dcIixcbiAgICAgICAgICAgIGJvZHk6IHRoaXMuYm9keSxcbiAgICAgICAgICAgIHNpZ25hbDogdGhpcy5hYm9ydFNpZ25hbCxcbiAgICAgICAgICAgIHJlZmVycmVyOiAoX2EgPSB0aGlzLmRlbGVnYXRlLnJlZmVycmVyKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuaHJlZlxuICAgICAgICB9O1xuICAgIH1cbiAgICBnZXQgZGVmYXVsdEhlYWRlcnMoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBcIkFjY2VwdFwiOiBcInRleHQvaHRtbCwgYXBwbGljYXRpb24veGh0bWwreG1sXCJcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZ2V0IGlzSWRlbXBvdGVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWV0aG9kID09IEZldGNoTWV0aG9kLmdldDtcbiAgICB9XG4gICAgZ2V0IGFib3J0U2lnbmFsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hYm9ydENvbnRyb2xsZXIuc2lnbmFsO1xuICAgIH1cbiAgICBhc3luYyBhbGxvd1JlcXVlc3RUb0JlSW50ZXJjZXB0ZWQoZmV0Y2hPcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3RJbnRlcmNlcHRpb24gPSBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHRoaXMucmVzb2x2ZVJlcXVlc3RQcm9taXNlID0gcmVzb2x2ZSk7XG4gICAgICAgIGNvbnN0IGV2ZW50ID0gZGlzcGF0Y2goXCJ0dXJibzpiZWZvcmUtZmV0Y2gtcmVxdWVzdFwiLCB7IGNhbmNlbGFibGU6IHRydWUsIGRldGFpbDogeyBmZXRjaE9wdGlvbnMsIHVybDogdGhpcy51cmwuaHJlZiwgcmVzdW1lOiB0aGlzLnJlc29sdmVSZXF1ZXN0UHJvbWlzZSB9IH0pO1xuICAgICAgICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZClcbiAgICAgICAgICAgIGF3YWl0IHJlcXVlc3RJbnRlcmNlcHRpb247XG4gICAgfVxufVxuZnVuY3Rpb24gbWVyZ2VGb3JtRGF0YUVudHJpZXModXJsLCBlbnRyaWVzKSB7XG4gICAgY29uc3QgY3VycmVudFNlYXJjaFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXModXJsLnNlYXJjaCk7XG4gICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIGVudHJpZXMpIHtcbiAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRmlsZSlcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBpZiAoY3VycmVudFNlYXJjaFBhcmFtcy5oYXMobmFtZSkpIHtcbiAgICAgICAgICAgIGN1cnJlbnRTZWFyY2hQYXJhbXMuZGVsZXRlKG5hbWUpO1xuICAgICAgICAgICAgdXJsLnNlYXJjaFBhcmFtcy5zZXQobmFtZSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdXJsLnNlYXJjaFBhcmFtcy5hcHBlbmQobmFtZSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1cmw7XG59XG5cbmNsYXNzIEFwcGVhcmFuY2VPYnNlcnZlciB7XG4gICAgY29uc3RydWN0b3IoZGVsZWdhdGUsIGVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5zdGFydGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaW50ZXJzZWN0ID0gZW50cmllcyA9PiB7XG4gICAgICAgICAgICBjb25zdCBsYXN0RW50cnkgPSBlbnRyaWVzLnNsaWNlKC0xKVswXTtcbiAgICAgICAgICAgIGlmIChsYXN0RW50cnkgPT09IG51bGwgfHwgbGFzdEVudHJ5ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBsYXN0RW50cnkuaXNJbnRlcnNlY3RpbmcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlbGVnYXRlLmVsZW1lbnRBcHBlYXJlZEluVmlld3BvcnQodGhpcy5lbGVtZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5kZWxlZ2F0ZSA9IGRlbGVnYXRlO1xuICAgICAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgICB0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKHRoaXMuaW50ZXJzZWN0KTtcbiAgICB9XG4gICAgc3RhcnQoKSB7XG4gICAgICAgIGlmICghdGhpcy5zdGFydGVkKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlci5vYnNlcnZlKHRoaXMuZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RvcCgpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RhcnRlZCkge1xuICAgICAgICAgICAgdGhpcy5zdGFydGVkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyLnVub2JzZXJ2ZSh0aGlzLmVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBTdHJlYW1NZXNzYWdlIHtcbiAgICBjb25zdHJ1Y3RvcihodG1sKSB7XG4gICAgICAgIHRoaXMudGVtcGxhdGVFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRlbXBsYXRlXCIpO1xuICAgICAgICB0aGlzLnRlbXBsYXRlRWxlbWVudC5pbm5lckhUTUwgPSBodG1sO1xuICAgIH1cbiAgICBzdGF0aWMgd3JhcChtZXNzYWdlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbWVzc2FnZSA9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IHRoaXMobWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgZnJhZ21lbnQoKSB7XG4gICAgICAgIGNvbnN0IGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgdGhpcy5mb3JlaWduRWxlbWVudHMpIHtcbiAgICAgICAgICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmltcG9ydE5vZGUoZWxlbWVudCwgdHJ1ZSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmcmFnbWVudDtcbiAgICB9XG4gICAgZ2V0IGZvcmVpZ25FbGVtZW50cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGVtcGxhdGVDaGlsZHJlbi5yZWR1Y2UoKHN0cmVhbUVsZW1lbnRzLCBjaGlsZCkgPT4ge1xuICAgICAgICAgICAgaWYgKGNoaWxkLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PSBcInR1cmJvLXN0cmVhbVwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFsuLi5zdHJlYW1FbGVtZW50cywgY2hpbGRdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0cmVhbUVsZW1lbnRzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBbXSk7XG4gICAgfVxuICAgIGdldCB0ZW1wbGF0ZUNoaWxkcmVuKCkge1xuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLnRlbXBsYXRlRWxlbWVudC5jb250ZW50LmNoaWxkcmVuKTtcbiAgICB9XG59XG5TdHJlYW1NZXNzYWdlLmNvbnRlbnRUeXBlID0gXCJ0ZXh0L3ZuZC50dXJiby1zdHJlYW0uaHRtbFwiO1xuXG52YXIgRm9ybVN1Ym1pc3Npb25TdGF0ZTtcbihmdW5jdGlvbiAoRm9ybVN1Ym1pc3Npb25TdGF0ZSkge1xuICAgIEZvcm1TdWJtaXNzaW9uU3RhdGVbRm9ybVN1Ym1pc3Npb25TdGF0ZVtcImluaXRpYWxpemVkXCJdID0gMF0gPSBcImluaXRpYWxpemVkXCI7XG4gICAgRm9ybVN1Ym1pc3Npb25TdGF0ZVtGb3JtU3VibWlzc2lvblN0YXRlW1wicmVxdWVzdGluZ1wiXSA9IDFdID0gXCJyZXF1ZXN0aW5nXCI7XG4gICAgRm9ybVN1Ym1pc3Npb25TdGF0ZVtGb3JtU3VibWlzc2lvblN0YXRlW1wid2FpdGluZ1wiXSA9IDJdID0gXCJ3YWl0aW5nXCI7XG4gICAgRm9ybVN1Ym1pc3Npb25TdGF0ZVtGb3JtU3VibWlzc2lvblN0YXRlW1wicmVjZWl2aW5nXCJdID0gM10gPSBcInJlY2VpdmluZ1wiO1xuICAgIEZvcm1TdWJtaXNzaW9uU3RhdGVbRm9ybVN1Ym1pc3Npb25TdGF0ZVtcInN0b3BwaW5nXCJdID0gNF0gPSBcInN0b3BwaW5nXCI7XG4gICAgRm9ybVN1Ym1pc3Npb25TdGF0ZVtGb3JtU3VibWlzc2lvblN0YXRlW1wic3RvcHBlZFwiXSA9IDVdID0gXCJzdG9wcGVkXCI7XG59KShGb3JtU3VibWlzc2lvblN0YXRlIHx8IChGb3JtU3VibWlzc2lvblN0YXRlID0ge30pKTtcbnZhciBGb3JtRW5jdHlwZTtcbihmdW5jdGlvbiAoRm9ybUVuY3R5cGUpIHtcbiAgICBGb3JtRW5jdHlwZVtcInVybEVuY29kZWRcIl0gPSBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiO1xuICAgIEZvcm1FbmN0eXBlW1wibXVsdGlwYXJ0XCJdID0gXCJtdWx0aXBhcnQvZm9ybS1kYXRhXCI7XG4gICAgRm9ybUVuY3R5cGVbXCJwbGFpblwiXSA9IFwidGV4dC9wbGFpblwiO1xufSkoRm9ybUVuY3R5cGUgfHwgKEZvcm1FbmN0eXBlID0ge30pKTtcbmZ1bmN0aW9uIGZvcm1FbmN0eXBlRnJvbVN0cmluZyhlbmNvZGluZykge1xuICAgIHN3aXRjaCAoZW5jb2RpbmcudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICBjYXNlIEZvcm1FbmN0eXBlLm11bHRpcGFydDogcmV0dXJuIEZvcm1FbmN0eXBlLm11bHRpcGFydDtcbiAgICAgICAgY2FzZSBGb3JtRW5jdHlwZS5wbGFpbjogcmV0dXJuIEZvcm1FbmN0eXBlLnBsYWluO1xuICAgICAgICBkZWZhdWx0OiByZXR1cm4gRm9ybUVuY3R5cGUudXJsRW5jb2RlZDtcbiAgICB9XG59XG5jbGFzcyBGb3JtU3VibWlzc2lvbiB7XG4gICAgY29uc3RydWN0b3IoZGVsZWdhdGUsIGZvcm1FbGVtZW50LCBzdWJtaXR0ZXIsIG11c3RSZWRpcmVjdCA9IGZhbHNlKSB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSBGb3JtU3VibWlzc2lvblN0YXRlLmluaXRpYWxpemVkO1xuICAgICAgICB0aGlzLmRlbGVnYXRlID0gZGVsZWdhdGU7XG4gICAgICAgIHRoaXMuZm9ybUVsZW1lbnQgPSBmb3JtRWxlbWVudDtcbiAgICAgICAgdGhpcy5zdWJtaXR0ZXIgPSBzdWJtaXR0ZXI7XG4gICAgICAgIHRoaXMuZm9ybURhdGEgPSBidWlsZEZvcm1EYXRhKGZvcm1FbGVtZW50LCBzdWJtaXR0ZXIpO1xuICAgICAgICB0aGlzLmZldGNoUmVxdWVzdCA9IG5ldyBGZXRjaFJlcXVlc3QodGhpcywgdGhpcy5tZXRob2QsIHRoaXMubG9jYXRpb24sIHRoaXMuYm9keSk7XG4gICAgICAgIHRoaXMubXVzdFJlZGlyZWN0ID0gbXVzdFJlZGlyZWN0O1xuICAgIH1cbiAgICBnZXQgbWV0aG9kKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IG1ldGhvZCA9ICgoX2EgPSB0aGlzLnN1Ym1pdHRlcikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmdldEF0dHJpYnV0ZShcImZvcm1tZXRob2RcIikpIHx8IHRoaXMuZm9ybUVsZW1lbnQuZ2V0QXR0cmlidXRlKFwibWV0aG9kXCIpIHx8IFwiXCI7XG4gICAgICAgIHJldHVybiBmZXRjaE1ldGhvZEZyb21TdHJpbmcobWV0aG9kLnRvTG93ZXJDYXNlKCkpIHx8IEZldGNoTWV0aG9kLmdldDtcbiAgICB9XG4gICAgZ2V0IGFjdGlvbigpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCBmb3JtRWxlbWVudEFjdGlvbiA9IHR5cGVvZiB0aGlzLmZvcm1FbGVtZW50LmFjdGlvbiA9PT0gJ3N0cmluZycgPyB0aGlzLmZvcm1FbGVtZW50LmFjdGlvbiA6IG51bGw7XG4gICAgICAgIHJldHVybiAoKF9hID0gdGhpcy5zdWJtaXR0ZXIpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5nZXRBdHRyaWJ1dGUoXCJmb3JtYWN0aW9uXCIpKSB8fCB0aGlzLmZvcm1FbGVtZW50LmdldEF0dHJpYnV0ZShcImFjdGlvblwiKSB8fCBmb3JtRWxlbWVudEFjdGlvbiB8fCBcIlwiO1xuICAgIH1cbiAgICBnZXQgbG9jYXRpb24oKSB7XG4gICAgICAgIHJldHVybiBleHBhbmRVUkwodGhpcy5hY3Rpb24pO1xuICAgIH1cbiAgICBnZXQgYm9keSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZW5jdHlwZSA9PSBGb3JtRW5jdHlwZS51cmxFbmNvZGVkIHx8IHRoaXMubWV0aG9kID09IEZldGNoTWV0aG9kLmdldCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBVUkxTZWFyY2hQYXJhbXModGhpcy5zdHJpbmdGb3JtRGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5mb3JtRGF0YTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgZW5jdHlwZSgpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4gZm9ybUVuY3R5cGVGcm9tU3RyaW5nKCgoX2EgPSB0aGlzLnN1Ym1pdHRlcikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmdldEF0dHJpYnV0ZShcImZvcm1lbmN0eXBlXCIpKSB8fCB0aGlzLmZvcm1FbGVtZW50LmVuY3R5cGUpO1xuICAgIH1cbiAgICBnZXQgaXNJZGVtcG90ZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mZXRjaFJlcXVlc3QuaXNJZGVtcG90ZW50O1xuICAgIH1cbiAgICBnZXQgc3RyaW5nRm9ybURhdGEoKSB7XG4gICAgICAgIHJldHVybiBbLi4udGhpcy5mb3JtRGF0YV0ucmVkdWNlKChlbnRyaWVzLCBbbmFtZSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZW50cmllcy5jb25jYXQodHlwZW9mIHZhbHVlID09IFwic3RyaW5nXCIgPyBbW25hbWUsIHZhbHVlXV0gOiBbXSk7XG4gICAgICAgIH0sIFtdKTtcbiAgICB9XG4gICAgYXN5bmMgc3RhcnQoKSB7XG4gICAgICAgIGNvbnN0IHsgaW5pdGlhbGl6ZWQsIHJlcXVlc3RpbmcgfSA9IEZvcm1TdWJtaXNzaW9uU3RhdGU7XG4gICAgICAgIGlmICh0aGlzLnN0YXRlID09IGluaXRpYWxpemVkKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gcmVxdWVzdGluZztcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZldGNoUmVxdWVzdC5wZXJmb3JtKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RvcCgpIHtcbiAgICAgICAgY29uc3QgeyBzdG9wcGluZywgc3RvcHBlZCB9ID0gRm9ybVN1Ym1pc3Npb25TdGF0ZTtcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUgIT0gc3RvcHBpbmcgJiYgdGhpcy5zdGF0ZSAhPSBzdG9wcGVkKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gc3RvcHBpbmc7XG4gICAgICAgICAgICB0aGlzLmZldGNoUmVxdWVzdC5jYW5jZWwoKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHByZXBhcmVIZWFkZXJzRm9yUmVxdWVzdChoZWFkZXJzLCByZXF1ZXN0KSB7XG4gICAgICAgIGlmICghcmVxdWVzdC5pc0lkZW1wb3RlbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHRva2VuID0gZ2V0Q29va2llVmFsdWUoZ2V0TWV0YUNvbnRlbnQoXCJjc3JmLXBhcmFtXCIpKSB8fCBnZXRNZXRhQ29udGVudChcImNzcmYtdG9rZW5cIik7XG4gICAgICAgICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgICAgICAgICBoZWFkZXJzW1wiWC1DU1JGLVRva2VuXCJdID0gdG9rZW47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBoZWFkZXJzW1wiQWNjZXB0XCJdID0gW1N0cmVhbU1lc3NhZ2UuY29udGVudFR5cGUsIGhlYWRlcnNbXCJBY2NlcHRcIl1dLmpvaW4oXCIsIFwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXF1ZXN0U3RhcnRlZChyZXF1ZXN0KSB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSBGb3JtU3VibWlzc2lvblN0YXRlLndhaXRpbmc7XG4gICAgICAgIGRpc3BhdGNoKFwidHVyYm86c3VibWl0LXN0YXJ0XCIsIHsgdGFyZ2V0OiB0aGlzLmZvcm1FbGVtZW50LCBkZXRhaWw6IHsgZm9ybVN1Ym1pc3Npb246IHRoaXMgfSB9KTtcbiAgICAgICAgdGhpcy5kZWxlZ2F0ZS5mb3JtU3VibWlzc2lvblN0YXJ0ZWQodGhpcyk7XG4gICAgfVxuICAgIHJlcXVlc3RQcmV2ZW50ZWRIYW5kbGluZ1Jlc3BvbnNlKHJlcXVlc3QsIHJlc3BvbnNlKSB7XG4gICAgICAgIHRoaXMucmVzdWx0ID0geyBzdWNjZXNzOiByZXNwb25zZS5zdWNjZWVkZWQsIGZldGNoUmVzcG9uc2U6IHJlc3BvbnNlIH07XG4gICAgfVxuICAgIHJlcXVlc3RTdWNjZWVkZWRXaXRoUmVzcG9uc2UocmVxdWVzdCwgcmVzcG9uc2UpIHtcbiAgICAgICAgaWYgKHJlc3BvbnNlLmNsaWVudEVycm9yIHx8IHJlc3BvbnNlLnNlcnZlckVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLmRlbGVnYXRlLmZvcm1TdWJtaXNzaW9uRmFpbGVkV2l0aFJlc3BvbnNlKHRoaXMsIHJlc3BvbnNlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLnJlcXVlc3RNdXN0UmVkaXJlY3QocmVxdWVzdCkgJiYgcmVzcG9uc2VTdWNjZWVkZWRXaXRob3V0UmVkaXJlY3QocmVzcG9uc2UpKSB7XG4gICAgICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihcIkZvcm0gcmVzcG9uc2VzIG11c3QgcmVkaXJlY3QgdG8gYW5vdGhlciBsb2NhdGlvblwiKTtcbiAgICAgICAgICAgIHRoaXMuZGVsZWdhdGUuZm9ybVN1Ym1pc3Npb25FcnJvcmVkKHRoaXMsIGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBGb3JtU3VibWlzc2lvblN0YXRlLnJlY2VpdmluZztcbiAgICAgICAgICAgIHRoaXMucmVzdWx0ID0geyBzdWNjZXNzOiB0cnVlLCBmZXRjaFJlc3BvbnNlOiByZXNwb25zZSB9O1xuICAgICAgICAgICAgdGhpcy5kZWxlZ2F0ZS5mb3JtU3VibWlzc2lvblN1Y2NlZWRlZFdpdGhSZXNwb25zZSh0aGlzLCByZXNwb25zZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmVxdWVzdEZhaWxlZFdpdGhSZXNwb25zZShyZXF1ZXN0LCByZXNwb25zZSkge1xuICAgICAgICB0aGlzLnJlc3VsdCA9IHsgc3VjY2VzczogZmFsc2UsIGZldGNoUmVzcG9uc2U6IHJlc3BvbnNlIH07XG4gICAgICAgIHRoaXMuZGVsZWdhdGUuZm9ybVN1Ym1pc3Npb25GYWlsZWRXaXRoUmVzcG9uc2UodGhpcywgcmVzcG9uc2UpO1xuICAgIH1cbiAgICByZXF1ZXN0RXJyb3JlZChyZXF1ZXN0LCBlcnJvcikge1xuICAgICAgICB0aGlzLnJlc3VsdCA9IHsgc3VjY2VzczogZmFsc2UsIGVycm9yIH07XG4gICAgICAgIHRoaXMuZGVsZWdhdGUuZm9ybVN1Ym1pc3Npb25FcnJvcmVkKHRoaXMsIGVycm9yKTtcbiAgICB9XG4gICAgcmVxdWVzdEZpbmlzaGVkKHJlcXVlc3QpIHtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEZvcm1TdWJtaXNzaW9uU3RhdGUuc3RvcHBlZDtcbiAgICAgICAgZGlzcGF0Y2goXCJ0dXJibzpzdWJtaXQtZW5kXCIsIHsgdGFyZ2V0OiB0aGlzLmZvcm1FbGVtZW50LCBkZXRhaWw6IE9iamVjdC5hc3NpZ24oeyBmb3JtU3VibWlzc2lvbjogdGhpcyB9LCB0aGlzLnJlc3VsdCkgfSk7XG4gICAgICAgIHRoaXMuZGVsZWdhdGUuZm9ybVN1Ym1pc3Npb25GaW5pc2hlZCh0aGlzKTtcbiAgICB9XG4gICAgcmVxdWVzdE11c3RSZWRpcmVjdChyZXF1ZXN0KSB7XG4gICAgICAgIHJldHVybiAhcmVxdWVzdC5pc0lkZW1wb3RlbnQgJiYgdGhpcy5tdXN0UmVkaXJlY3Q7XG4gICAgfVxufVxuZnVuY3Rpb24gYnVpbGRGb3JtRGF0YShmb3JtRWxlbWVudCwgc3VibWl0dGVyKSB7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoZm9ybUVsZW1lbnQpO1xuICAgIGNvbnN0IG5hbWUgPSBzdWJtaXR0ZXIgPT09IG51bGwgfHwgc3VibWl0dGVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzdWJtaXR0ZXIuZ2V0QXR0cmlidXRlKFwibmFtZVwiKTtcbiAgICBjb25zdCB2YWx1ZSA9IHN1Ym1pdHRlciA9PT0gbnVsbCB8fCBzdWJtaXR0ZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHN1Ym1pdHRlci5nZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiKTtcbiAgICBpZiAobmFtZSAmJiB2YWx1ZSAhPSBudWxsICYmIGZvcm1EYXRhLmdldChuYW1lKSAhPSB2YWx1ZSkge1xuICAgICAgICBmb3JtRGF0YS5hcHBlbmQobmFtZSwgdmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gZm9ybURhdGE7XG59XG5mdW5jdGlvbiBnZXRDb29raWVWYWx1ZShjb29raWVOYW1lKSB7XG4gICAgaWYgKGNvb2tpZU5hbWUgIT0gbnVsbCkge1xuICAgICAgICBjb25zdCBjb29raWVzID0gZG9jdW1lbnQuY29va2llID8gZG9jdW1lbnQuY29va2llLnNwbGl0KFwiOyBcIikgOiBbXTtcbiAgICAgICAgY29uc3QgY29va2llID0gY29va2llcy5maW5kKChjb29raWUpID0+IGNvb2tpZS5zdGFydHNXaXRoKGNvb2tpZU5hbWUpKTtcbiAgICAgICAgaWYgKGNvb2tpZSkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBjb29raWUuc3BsaXQoXCI9XCIpLnNsaWNlKDEpLmpvaW4oXCI9XCIpO1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlID8gZGVjb2RlVVJJQ29tcG9uZW50KHZhbHVlKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIGdldE1ldGFDb250ZW50KG5hbWUpIHtcbiAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgbWV0YVtuYW1lPVwiJHtuYW1lfVwiXWApO1xuICAgIHJldHVybiBlbGVtZW50ICYmIGVsZW1lbnQuY29udGVudDtcbn1cbmZ1bmN0aW9uIHJlc3BvbnNlU3VjY2VlZGVkV2l0aG91dFJlZGlyZWN0KHJlc3BvbnNlKSB7XG4gICAgcmV0dXJuIHJlc3BvbnNlLnN0YXR1c0NvZGUgPT0gMjAwICYmICFyZXNwb25zZS5yZWRpcmVjdGVkO1xufVxuXG5jbGFzcyBTbmFwc2hvdCB7XG4gICAgY29uc3RydWN0b3IoZWxlbWVudCkge1xuICAgICAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuICAgIH1cbiAgICBnZXQgY2hpbGRyZW4oKSB7XG4gICAgICAgIHJldHVybiBbLi4udGhpcy5lbGVtZW50LmNoaWxkcmVuXTtcbiAgICB9XG4gICAgaGFzQW5jaG9yKGFuY2hvcikge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRFbGVtZW50Rm9yQW5jaG9yKGFuY2hvcikgIT0gbnVsbDtcbiAgICB9XG4gICAgZ2V0RWxlbWVudEZvckFuY2hvcihhbmNob3IpIHtcbiAgICAgICAgcmV0dXJuIGFuY2hvciA/IHRoaXMuZWxlbWVudC5xdWVyeVNlbGVjdG9yKGBbaWQ9JyR7YW5jaG9yfSddLCBhW25hbWU9JyR7YW5jaG9yfSddYCkgOiBudWxsO1xuICAgIH1cbiAgICBnZXQgaXNDb25uZWN0ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnQuaXNDb25uZWN0ZWQ7XG4gICAgfVxuICAgIGdldCBmaXJzdEF1dG9mb2N1c2FibGVFbGVtZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCJbYXV0b2ZvY3VzXVwiKTtcbiAgICB9XG4gICAgZ2V0IHBlcm1hbmVudEVsZW1lbnRzKCkge1xuICAgICAgICByZXR1cm4gWy4uLnRoaXMuZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiW2lkXVtkYXRhLXR1cmJvLXBlcm1hbmVudF1cIildO1xuICAgIH1cbiAgICBnZXRQZXJtYW5lbnRFbGVtZW50QnlJZChpZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoYCMke2lkfVtkYXRhLXR1cmJvLXBlcm1hbmVudF1gKTtcbiAgICB9XG4gICAgZ2V0UGVybWFuZW50RWxlbWVudE1hcEZvclNuYXBzaG90KHNuYXBzaG90KSB7XG4gICAgICAgIGNvbnN0IHBlcm1hbmVudEVsZW1lbnRNYXAgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBjdXJyZW50UGVybWFuZW50RWxlbWVudCBvZiB0aGlzLnBlcm1hbmVudEVsZW1lbnRzKSB7XG4gICAgICAgICAgICBjb25zdCB7IGlkIH0gPSBjdXJyZW50UGVybWFuZW50RWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IG5ld1Blcm1hbmVudEVsZW1lbnQgPSBzbmFwc2hvdC5nZXRQZXJtYW5lbnRFbGVtZW50QnlJZChpZCk7XG4gICAgICAgICAgICBpZiAobmV3UGVybWFuZW50RWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHBlcm1hbmVudEVsZW1lbnRNYXBbaWRdID0gW2N1cnJlbnRQZXJtYW5lbnRFbGVtZW50LCBuZXdQZXJtYW5lbnRFbGVtZW50XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGVybWFuZW50RWxlbWVudE1hcDtcbiAgICB9XG59XG5cbmNsYXNzIEZvcm1JbnRlcmNlcHRvciB7XG4gICAgY29uc3RydWN0b3IoZGVsZWdhdGUsIGVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5zdWJtaXRCdWJibGVkID0gKChldmVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIEhUTUxGb3JtRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZvcm0gPSBldmVudC50YXJnZXQ7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3VibWl0dGVyID0gZXZlbnQuc3VibWl0dGVyIHx8IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kZWxlZ2F0ZS5zaG91bGRJbnRlcmNlcHRGb3JtU3VibWlzc2lvbihmb3JtLCBzdWJtaXR0ZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRlbGVnYXRlLmZvcm1TdWJtaXNzaW9uSW50ZXJjZXB0ZWQoZm9ybSwgc3VibWl0dGVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRlbGVnYXRlID0gZGVsZWdhdGU7XG4gICAgICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgfVxuICAgIHN0YXJ0KCkge1xuICAgICAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInN1Ym1pdFwiLCB0aGlzLnN1Ym1pdEJ1YmJsZWQpO1xuICAgIH1cbiAgICBzdG9wKCkge1xuICAgICAgICB0aGlzLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInN1Ym1pdFwiLCB0aGlzLnN1Ym1pdEJ1YmJsZWQpO1xuICAgIH1cbn1cblxuY2xhc3MgVmlldyB7XG4gICAgY29uc3RydWN0b3IoZGVsZWdhdGUsIGVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5yZXNvbHZlUmVuZGVyUHJvbWlzZSA9ICh2YWx1ZSkgPT4geyB9O1xuICAgICAgICB0aGlzLnJlc29sdmVJbnRlcmNlcHRpb25Qcm9taXNlID0gKHZhbHVlKSA9PiB7IH07XG4gICAgICAgIHRoaXMuZGVsZWdhdGUgPSBkZWxlZ2F0ZTtcbiAgICAgICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcbiAgICB9XG4gICAgc2Nyb2xsVG9BbmNob3IoYW5jaG9yKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLnNuYXBzaG90LmdldEVsZW1lbnRGb3JBbmNob3IoYW5jaG9yKTtcbiAgICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9FbGVtZW50KGVsZW1lbnQpO1xuICAgICAgICAgICAgdGhpcy5mb2N1c0VsZW1lbnQoZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbFRvUG9zaXRpb24oeyB4OiAwLCB5OiAwIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNjcm9sbFRvQW5jaG9yRnJvbUxvY2F0aW9uKGxvY2F0aW9uKSB7XG4gICAgICAgIHRoaXMuc2Nyb2xsVG9BbmNob3IoZ2V0QW5jaG9yKGxvY2F0aW9uKSk7XG4gICAgfVxuICAgIHNjcm9sbFRvRWxlbWVudChlbGVtZW50KSB7XG4gICAgICAgIGVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoKTtcbiAgICB9XG4gICAgZm9jdXNFbGVtZW50KGVsZW1lbnQpIHtcbiAgICAgICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgICAgICAgaWYgKGVsZW1lbnQuaGFzQXR0cmlidXRlKFwidGFiaW5kZXhcIikpIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShcInRhYmluZGV4XCIsIFwiLTFcIik7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKFwidGFiaW5kZXhcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2Nyb2xsVG9Qb3NpdGlvbih7IHgsIHkgfSkge1xuICAgICAgICB0aGlzLnNjcm9sbFJvb3Quc2Nyb2xsVG8oeCwgeSk7XG4gICAgfVxuICAgIHNjcm9sbFRvVG9wKCkge1xuICAgICAgICB0aGlzLnNjcm9sbFRvUG9zaXRpb24oeyB4OiAwLCB5OiAwIH0pO1xuICAgIH1cbiAgICBnZXQgc2Nyb2xsUm9vdCgpIHtcbiAgICAgICAgcmV0dXJuIHdpbmRvdztcbiAgICB9XG4gICAgYXN5bmMgcmVuZGVyKHJlbmRlcmVyKSB7XG4gICAgICAgIGNvbnN0IHsgaXNQcmV2aWV3LCBzaG91bGRSZW5kZXIsIG5ld1NuYXBzaG90OiBzbmFwc2hvdCB9ID0gcmVuZGVyZXI7XG4gICAgICAgIGlmIChzaG91bGRSZW5kZXIpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJQcm9taXNlID0gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB0aGlzLnJlc29sdmVSZW5kZXJQcm9taXNlID0gcmVzb2x2ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuICAgICAgICAgICAgICAgIHRoaXMucHJlcGFyZVRvUmVuZGVyU25hcHNob3QocmVuZGVyZXIpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlbmRlckludGVyY2VwdGlvbiA9IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gdGhpcy5yZXNvbHZlSW50ZXJjZXB0aW9uUHJvbWlzZSA9IHJlc29sdmUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGltbWVkaWF0ZVJlbmRlciA9IHRoaXMuZGVsZWdhdGUuYWxsb3dzSW1tZWRpYXRlUmVuZGVyKHNuYXBzaG90LCB0aGlzLnJlc29sdmVJbnRlcmNlcHRpb25Qcm9taXNlKTtcbiAgICAgICAgICAgICAgICBpZiAoIWltbWVkaWF0ZVJlbmRlcilcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgcmVuZGVySW50ZXJjZXB0aW9uO1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVuZGVyU25hcHNob3QocmVuZGVyZXIpO1xuICAgICAgICAgICAgICAgIHRoaXMuZGVsZWdhdGUudmlld1JlbmRlcmVkU25hcHNob3Qoc25hcHNob3QsIGlzUHJldmlldyk7XG4gICAgICAgICAgICAgICAgdGhpcy5maW5pc2hSZW5kZXJpbmdTbmFwc2hvdChyZW5kZXJlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5yZW5kZXJlcjtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc29sdmVSZW5kZXJQcm9taXNlKHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMucmVuZGVyUHJvbWlzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaW52YWxpZGF0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGludmFsaWRhdGUoKSB7XG4gICAgICAgIHRoaXMuZGVsZWdhdGUudmlld0ludmFsaWRhdGVkKCk7XG4gICAgfVxuICAgIHByZXBhcmVUb1JlbmRlclNuYXBzaG90KHJlbmRlcmVyKSB7XG4gICAgICAgIHRoaXMubWFya0FzUHJldmlldyhyZW5kZXJlci5pc1ByZXZpZXcpO1xuICAgICAgICByZW5kZXJlci5wcmVwYXJlVG9SZW5kZXIoKTtcbiAgICB9XG4gICAgbWFya0FzUHJldmlldyhpc1ByZXZpZXcpIHtcbiAgICAgICAgaWYgKGlzUHJldmlldykge1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZShcImRhdGEtdHVyYm8tcHJldmlld1wiLCBcIlwiKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoXCJkYXRhLXR1cmJvLXByZXZpZXdcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgcmVuZGVyU25hcHNob3QocmVuZGVyZXIpIHtcbiAgICAgICAgYXdhaXQgcmVuZGVyZXIucmVuZGVyKCk7XG4gICAgfVxuICAgIGZpbmlzaFJlbmRlcmluZ1NuYXBzaG90KHJlbmRlcmVyKSB7XG4gICAgICAgIHJlbmRlcmVyLmZpbmlzaFJlbmRlcmluZygpO1xuICAgIH1cbn1cblxuY2xhc3MgRnJhbWVWaWV3IGV4dGVuZHMgVmlldyB7XG4gICAgaW52YWxpZGF0ZSgpIHtcbiAgICAgICAgdGhpcy5lbGVtZW50LmlubmVySFRNTCA9IFwiXCI7XG4gICAgfVxuICAgIGdldCBzbmFwc2hvdCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTbmFwc2hvdCh0aGlzLmVsZW1lbnQpO1xuICAgIH1cbn1cblxuY2xhc3MgTGlua0ludGVyY2VwdG9yIHtcbiAgICBjb25zdHJ1Y3RvcihkZWxlZ2F0ZSwgZWxlbWVudCkge1xuICAgICAgICB0aGlzLmNsaWNrQnViYmxlZCA9IChldmVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMucmVzcG9uZHNUb0V2ZW50VGFyZ2V0KGV2ZW50LnRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsaWNrRXZlbnQgPSBldmVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmNsaWNrRXZlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMubGlua0NsaWNrZWQgPSAoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5jbGlja0V2ZW50ICYmIHRoaXMucmVzcG9uZHNUb0V2ZW50VGFyZ2V0KGV2ZW50LnRhcmdldCkgJiYgZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRlbGVnYXRlLnNob3VsZEludGVyY2VwdExpbmtDbGljayhldmVudC50YXJnZXQsIGV2ZW50LmRldGFpbC51cmwpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2xpY2tFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRlbGVnYXRlLmxpbmtDbGlja0ludGVyY2VwdGVkKGV2ZW50LnRhcmdldCwgZXZlbnQuZGV0YWlsLnVybCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVsZXRlIHRoaXMuY2xpY2tFdmVudDtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMud2lsbFZpc2l0ID0gKCkgPT4ge1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuY2xpY2tFdmVudDtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5kZWxlZ2F0ZSA9IGRlbGVnYXRlO1xuICAgICAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuICAgIH1cbiAgICBzdGFydCgpIHtcbiAgICAgICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzLmNsaWNrQnViYmxlZCk7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJ0dXJibzpjbGlja1wiLCB0aGlzLmxpbmtDbGlja2VkKTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInR1cmJvOmJlZm9yZS12aXNpdFwiLCB0aGlzLndpbGxWaXNpdCk7XG4gICAgfVxuICAgIHN0b3AoKSB7XG4gICAgICAgIHRoaXMuZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5jbGlja0J1YmJsZWQpO1xuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwidHVyYm86Y2xpY2tcIiwgdGhpcy5saW5rQ2xpY2tlZCk7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0dXJibzpiZWZvcmUtdmlzaXRcIiwgdGhpcy53aWxsVmlzaXQpO1xuICAgIH1cbiAgICByZXNwb25kc1RvRXZlbnRUYXJnZXQodGFyZ2V0KSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0YXJnZXQgaW5zdGFuY2VvZiBFbGVtZW50XG4gICAgICAgICAgICA/IHRhcmdldFxuICAgICAgICAgICAgOiB0YXJnZXQgaW5zdGFuY2VvZiBOb2RlXG4gICAgICAgICAgICAgICAgPyB0YXJnZXQucGFyZW50RWxlbWVudFxuICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQgJiYgZWxlbWVudC5jbG9zZXN0KFwidHVyYm8tZnJhbWUsIGh0bWxcIikgPT0gdGhpcy5lbGVtZW50O1xuICAgIH1cbn1cblxuY2xhc3MgQmFyZG8ge1xuICAgIGNvbnN0cnVjdG9yKHBlcm1hbmVudEVsZW1lbnRNYXApIHtcbiAgICAgICAgdGhpcy5wZXJtYW5lbnRFbGVtZW50TWFwID0gcGVybWFuZW50RWxlbWVudE1hcDtcbiAgICB9XG4gICAgc3RhdGljIHByZXNlcnZpbmdQZXJtYW5lbnRFbGVtZW50cyhwZXJtYW5lbnRFbGVtZW50TWFwLCBjYWxsYmFjaykge1xuICAgICAgICBjb25zdCBiYXJkbyA9IG5ldyB0aGlzKHBlcm1hbmVudEVsZW1lbnRNYXApO1xuICAgICAgICBiYXJkby5lbnRlcigpO1xuICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICBiYXJkby5sZWF2ZSgpO1xuICAgIH1cbiAgICBlbnRlcigpIHtcbiAgICAgICAgZm9yIChjb25zdCBpZCBpbiB0aGlzLnBlcm1hbmVudEVsZW1lbnRNYXApIHtcbiAgICAgICAgICAgIGNvbnN0IFssIG5ld1Blcm1hbmVudEVsZW1lbnRdID0gdGhpcy5wZXJtYW5lbnRFbGVtZW50TWFwW2lkXTtcbiAgICAgICAgICAgIHRoaXMucmVwbGFjZU5ld1Blcm1hbmVudEVsZW1lbnRXaXRoUGxhY2Vob2xkZXIobmV3UGVybWFuZW50RWxlbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbGVhdmUoKSB7XG4gICAgICAgIGZvciAoY29uc3QgaWQgaW4gdGhpcy5wZXJtYW5lbnRFbGVtZW50TWFwKSB7XG4gICAgICAgICAgICBjb25zdCBbY3VycmVudFBlcm1hbmVudEVsZW1lbnRdID0gdGhpcy5wZXJtYW5lbnRFbGVtZW50TWFwW2lkXTtcbiAgICAgICAgICAgIHRoaXMucmVwbGFjZUN1cnJlbnRQZXJtYW5lbnRFbGVtZW50V2l0aENsb25lKGN1cnJlbnRQZXJtYW5lbnRFbGVtZW50KTtcbiAgICAgICAgICAgIHRoaXMucmVwbGFjZVBsYWNlaG9sZGVyV2l0aFBlcm1hbmVudEVsZW1lbnQoY3VycmVudFBlcm1hbmVudEVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJlcGxhY2VOZXdQZXJtYW5lbnRFbGVtZW50V2l0aFBsYWNlaG9sZGVyKHBlcm1hbmVudEVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgcGxhY2Vob2xkZXIgPSBjcmVhdGVQbGFjZWhvbGRlckZvclBlcm1hbmVudEVsZW1lbnQocGVybWFuZW50RWxlbWVudCk7XG4gICAgICAgIHBlcm1hbmVudEVsZW1lbnQucmVwbGFjZVdpdGgocGxhY2Vob2xkZXIpO1xuICAgIH1cbiAgICByZXBsYWNlQ3VycmVudFBlcm1hbmVudEVsZW1lbnRXaXRoQ2xvbmUocGVybWFuZW50RWxlbWVudCkge1xuICAgICAgICBjb25zdCBjbG9uZSA9IHBlcm1hbmVudEVsZW1lbnQuY2xvbmVOb2RlKHRydWUpO1xuICAgICAgICBwZXJtYW5lbnRFbGVtZW50LnJlcGxhY2VXaXRoKGNsb25lKTtcbiAgICB9XG4gICAgcmVwbGFjZVBsYWNlaG9sZGVyV2l0aFBlcm1hbmVudEVsZW1lbnQocGVybWFuZW50RWxlbWVudCkge1xuICAgICAgICBjb25zdCBwbGFjZWhvbGRlciA9IHRoaXMuZ2V0UGxhY2Vob2xkZXJCeUlkKHBlcm1hbmVudEVsZW1lbnQuaWQpO1xuICAgICAgICBwbGFjZWhvbGRlciA9PT0gbnVsbCB8fCBwbGFjZWhvbGRlciA9PT0gdm9pZCAwID8gdm9pZCAwIDogcGxhY2Vob2xkZXIucmVwbGFjZVdpdGgocGVybWFuZW50RWxlbWVudCk7XG4gICAgfVxuICAgIGdldFBsYWNlaG9sZGVyQnlJZChpZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wbGFjZWhvbGRlcnMuZmluZChlbGVtZW50ID0+IGVsZW1lbnQuY29udGVudCA9PSBpZCk7XG4gICAgfVxuICAgIGdldCBwbGFjZWhvbGRlcnMoKSB7XG4gICAgICAgIHJldHVybiBbLi4uZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIm1ldGFbbmFtZT10dXJiby1wZXJtYW5lbnQtcGxhY2Vob2xkZXJdW2NvbnRlbnRdXCIpXTtcbiAgICB9XG59XG5mdW5jdGlvbiBjcmVhdGVQbGFjZWhvbGRlckZvclBlcm1hbmVudEVsZW1lbnQocGVybWFuZW50RWxlbWVudCkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibWV0YVwiKTtcbiAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShcIm5hbWVcIiwgXCJ0dXJiby1wZXJtYW5lbnQtcGxhY2Vob2xkZXJcIik7XG4gICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJjb250ZW50XCIsIHBlcm1hbmVudEVsZW1lbnQuaWQpO1xuICAgIHJldHVybiBlbGVtZW50O1xufVxuXG5jbGFzcyBSZW5kZXJlciB7XG4gICAgY29uc3RydWN0b3IoY3VycmVudFNuYXBzaG90LCBuZXdTbmFwc2hvdCwgaXNQcmV2aWV3KSB7XG4gICAgICAgIHRoaXMuY3VycmVudFNuYXBzaG90ID0gY3VycmVudFNuYXBzaG90O1xuICAgICAgICB0aGlzLm5ld1NuYXBzaG90ID0gbmV3U25hcHNob3Q7XG4gICAgICAgIHRoaXMuaXNQcmV2aWV3ID0gaXNQcmV2aWV3O1xuICAgICAgICB0aGlzLnByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB0aGlzLnJlc29sdmluZ0Z1bmN0aW9ucyA9IHsgcmVzb2x2ZSwgcmVqZWN0IH0pO1xuICAgIH1cbiAgICBnZXQgc2hvdWxkUmVuZGVyKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcHJlcGFyZVRvUmVuZGVyKCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGZpbmlzaFJlbmRlcmluZygpIHtcbiAgICAgICAgaWYgKHRoaXMucmVzb2x2aW5nRnVuY3Rpb25zKSB7XG4gICAgICAgICAgICB0aGlzLnJlc29sdmluZ0Z1bmN0aW9ucy5yZXNvbHZlKCk7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5yZXNvbHZpbmdGdW5jdGlvbnM7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY3JlYXRlU2NyaXB0RWxlbWVudChlbGVtZW50KSB7XG4gICAgICAgIGlmIChlbGVtZW50LmdldEF0dHJpYnV0ZShcImRhdGEtdHVyYm8tZXZhbFwiKSA9PSBcImZhbHNlXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBlbGVtZW50O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgY3JlYXRlZFNjcmlwdEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO1xuICAgICAgICAgICAgaWYgKHRoaXMuY3NwTm9uY2UpIHtcbiAgICAgICAgICAgICAgICBjcmVhdGVkU2NyaXB0RWxlbWVudC5ub25jZSA9IHRoaXMuY3NwTm9uY2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjcmVhdGVkU2NyaXB0RWxlbWVudC50ZXh0Q29udGVudCA9IGVsZW1lbnQudGV4dENvbnRlbnQ7XG4gICAgICAgICAgICBjcmVhdGVkU2NyaXB0RWxlbWVudC5hc3luYyA9IGZhbHNlO1xuICAgICAgICAgICAgY29weUVsZW1lbnRBdHRyaWJ1dGVzKGNyZWF0ZWRTY3JpcHRFbGVtZW50LCBlbGVtZW50KTtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVkU2NyaXB0RWxlbWVudDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwcmVzZXJ2aW5nUGVybWFuZW50RWxlbWVudHMoY2FsbGJhY2spIHtcbiAgICAgICAgQmFyZG8ucHJlc2VydmluZ1Blcm1hbmVudEVsZW1lbnRzKHRoaXMucGVybWFuZW50RWxlbWVudE1hcCwgY2FsbGJhY2spO1xuICAgIH1cbiAgICBmb2N1c0ZpcnN0QXV0b2ZvY3VzYWJsZUVsZW1lbnQoKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmNvbm5lY3RlZFNuYXBzaG90LmZpcnN0QXV0b2ZvY3VzYWJsZUVsZW1lbnQ7XG4gICAgICAgIGlmIChlbGVtZW50SXNGb2N1c2FibGUoZWxlbWVudCkpIHtcbiAgICAgICAgICAgIGVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgY29ubmVjdGVkU25hcHNob3QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5ld1NuYXBzaG90LmlzQ29ubmVjdGVkID8gdGhpcy5uZXdTbmFwc2hvdCA6IHRoaXMuY3VycmVudFNuYXBzaG90O1xuICAgIH1cbiAgICBnZXQgY3VycmVudEVsZW1lbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRTbmFwc2hvdC5lbGVtZW50O1xuICAgIH1cbiAgICBnZXQgbmV3RWxlbWVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmV3U25hcHNob3QuZWxlbWVudDtcbiAgICB9XG4gICAgZ2V0IHBlcm1hbmVudEVsZW1lbnRNYXAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRTbmFwc2hvdC5nZXRQZXJtYW5lbnRFbGVtZW50TWFwRm9yU25hcHNob3QodGhpcy5uZXdTbmFwc2hvdCk7XG4gICAgfVxuICAgIGdldCBjc3BOb25jZSgpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4gKF9hID0gZG9jdW1lbnQuaGVhZC5xdWVyeVNlbGVjdG9yKCdtZXRhW25hbWU9XCJjc3Atbm9uY2VcIl0nKSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmdldEF0dHJpYnV0ZShcImNvbnRlbnRcIik7XG4gICAgfVxufVxuZnVuY3Rpb24gY29weUVsZW1lbnRBdHRyaWJ1dGVzKGRlc3RpbmF0aW9uRWxlbWVudCwgc291cmNlRWxlbWVudCkge1xuICAgIGZvciAoY29uc3QgeyBuYW1lLCB2YWx1ZSB9IG9mIFsuLi5zb3VyY2VFbGVtZW50LmF0dHJpYnV0ZXNdKSB7XG4gICAgICAgIGRlc3RpbmF0aW9uRWxlbWVudC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGVsZW1lbnRJc0ZvY3VzYWJsZShlbGVtZW50KSB7XG4gICAgcmV0dXJuIGVsZW1lbnQgJiYgdHlwZW9mIGVsZW1lbnQuZm9jdXMgPT0gXCJmdW5jdGlvblwiO1xufVxuXG5jbGFzcyBGcmFtZVJlbmRlcmVyIGV4dGVuZHMgUmVuZGVyZXIge1xuICAgIGdldCBzaG91bGRSZW5kZXIoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBhc3luYyByZW5kZXIoKSB7XG4gICAgICAgIGF3YWl0IG5leHRBbmltYXRpb25GcmFtZSgpO1xuICAgICAgICB0aGlzLnByZXNlcnZpbmdQZXJtYW5lbnRFbGVtZW50cygoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmxvYWRGcmFtZUVsZW1lbnQoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc2Nyb2xsRnJhbWVJbnRvVmlldygpO1xuICAgICAgICBhd2FpdCBuZXh0QW5pbWF0aW9uRnJhbWUoKTtcbiAgICAgICAgdGhpcy5mb2N1c0ZpcnN0QXV0b2ZvY3VzYWJsZUVsZW1lbnQoKTtcbiAgICAgICAgYXdhaXQgbmV4dEFuaW1hdGlvbkZyYW1lKCk7XG4gICAgICAgIHRoaXMuYWN0aXZhdGVTY3JpcHRFbGVtZW50cygpO1xuICAgIH1cbiAgICBsb2FkRnJhbWVFbGVtZW50KCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IGRlc3RpbmF0aW9uUmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICAgICAgICBkZXN0aW5hdGlvblJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyh0aGlzLmN1cnJlbnRFbGVtZW50KTtcbiAgICAgICAgZGVzdGluYXRpb25SYW5nZS5kZWxldGVDb250ZW50cygpO1xuICAgICAgICBjb25zdCBmcmFtZUVsZW1lbnQgPSB0aGlzLm5ld0VsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHNvdXJjZVJhbmdlID0gKF9hID0gZnJhbWVFbGVtZW50Lm93bmVyRG9jdW1lbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jcmVhdGVSYW5nZSgpO1xuICAgICAgICBpZiAoc291cmNlUmFuZ2UpIHtcbiAgICAgICAgICAgIHNvdXJjZVJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhmcmFtZUVsZW1lbnQpO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50RWxlbWVudC5hcHBlbmRDaGlsZChzb3VyY2VSYW5nZS5leHRyYWN0Q29udGVudHMoKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2Nyb2xsRnJhbWVJbnRvVmlldygpIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudEVsZW1lbnQuYXV0b3Njcm9sbCB8fCB0aGlzLm5ld0VsZW1lbnQuYXV0b3Njcm9sbCkge1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuY3VycmVudEVsZW1lbnQuZmlyc3RFbGVtZW50Q2hpbGQ7XG4gICAgICAgICAgICBjb25zdCBibG9jayA9IHJlYWRTY3JvbGxMb2dpY2FsUG9zaXRpb24odGhpcy5jdXJyZW50RWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJkYXRhLWF1dG9zY3JvbGwtYmxvY2tcIiksIFwiZW5kXCIpO1xuICAgICAgICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50LnNjcm9sbEludG9WaWV3KHsgYmxvY2sgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBhY3RpdmF0ZVNjcmlwdEVsZW1lbnRzKCkge1xuICAgICAgICBmb3IgKGNvbnN0IGluZXJ0U2NyaXB0RWxlbWVudCBvZiB0aGlzLm5ld1NjcmlwdEVsZW1lbnRzKSB7XG4gICAgICAgICAgICBjb25zdCBhY3RpdmF0ZWRTY3JpcHRFbGVtZW50ID0gdGhpcy5jcmVhdGVTY3JpcHRFbGVtZW50KGluZXJ0U2NyaXB0RWxlbWVudCk7XG4gICAgICAgICAgICBpbmVydFNjcmlwdEVsZW1lbnQucmVwbGFjZVdpdGgoYWN0aXZhdGVkU2NyaXB0RWxlbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IG5ld1NjcmlwdEVsZW1lbnRzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50RWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFwic2NyaXB0XCIpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHJlYWRTY3JvbGxMb2dpY2FsUG9zaXRpb24odmFsdWUsIGRlZmF1bHRWYWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PSBcImVuZFwiIHx8IHZhbHVlID09IFwic3RhcnRcIiB8fCB2YWx1ZSA9PSBcImNlbnRlclwiIHx8IHZhbHVlID09IFwibmVhcmVzdFwiKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gICAgfVxufVxuXG5jbGFzcyBQcm9ncmVzc0JhciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuaGlkaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMudmFsdWUgPSAwO1xuICAgICAgICB0aGlzLnZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy50cmlja2xlID0gKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZSh0aGlzLnZhbHVlICsgTWF0aC5yYW5kb20oKSAvIDEwMCk7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuc3R5bGVzaGVldEVsZW1lbnQgPSB0aGlzLmNyZWF0ZVN0eWxlc2hlZXRFbGVtZW50KCk7XG4gICAgICAgIHRoaXMucHJvZ3Jlc3NFbGVtZW50ID0gdGhpcy5jcmVhdGVQcm9ncmVzc0VsZW1lbnQoKTtcbiAgICAgICAgdGhpcy5pbnN0YWxsU3R5bGVzaGVldEVsZW1lbnQoKTtcbiAgICAgICAgdGhpcy5zZXRWYWx1ZSgwKTtcbiAgICB9XG4gICAgc3RhdGljIGdldCBkZWZhdWx0Q1NTKCkge1xuICAgICAgICByZXR1cm4gdW5pbmRlbnQgYFxuICAgICAgLnR1cmJvLXByb2dyZXNzLWJhciB7XG4gICAgICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgaGVpZ2h0OiAzcHg7XG4gICAgICAgIGJhY2tncm91bmQ6ICMwMDc2ZmY7XG4gICAgICAgIHotaW5kZXg6IDk5OTk7XG4gICAgICAgIHRyYW5zaXRpb246XG4gICAgICAgICAgd2lkdGggJHtQcm9ncmVzc0Jhci5hbmltYXRpb25EdXJhdGlvbn1tcyBlYXNlLW91dCxcbiAgICAgICAgICBvcGFjaXR5ICR7UHJvZ3Jlc3NCYXIuYW5pbWF0aW9uRHVyYXRpb24gLyAyfW1zICR7UHJvZ3Jlc3NCYXIuYW5pbWF0aW9uRHVyYXRpb24gLyAyfW1zIGVhc2UtaW47XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7XG4gICAgICB9XG4gICAgYDtcbiAgICB9XG4gICAgc2hvdygpIHtcbiAgICAgICAgaWYgKCF0aGlzLnZpc2libGUpIHtcbiAgICAgICAgICAgIHRoaXMudmlzaWJsZSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmluc3RhbGxQcm9ncmVzc0VsZW1lbnQoKTtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRUcmlja2xpbmcoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBoaWRlKCkge1xuICAgICAgICBpZiAodGhpcy52aXNpYmxlICYmICF0aGlzLmhpZGluZykge1xuICAgICAgICAgICAgdGhpcy5oaWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5mYWRlUHJvZ3Jlc3NFbGVtZW50KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnVuaW5zdGFsbFByb2dyZXNzRWxlbWVudCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RvcFRyaWNrbGluZygpO1xuICAgICAgICAgICAgICAgIHRoaXMudmlzaWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuaGlkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzZXRWYWx1ZSh2YWx1ZSkge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgIH1cbiAgICBpbnN0YWxsU3R5bGVzaGVldEVsZW1lbnQoKSB7XG4gICAgICAgIGRvY3VtZW50LmhlYWQuaW5zZXJ0QmVmb3JlKHRoaXMuc3R5bGVzaGVldEVsZW1lbnQsIGRvY3VtZW50LmhlYWQuZmlyc3RDaGlsZCk7XG4gICAgfVxuICAgIGluc3RhbGxQcm9ncmVzc0VsZW1lbnQoKSB7XG4gICAgICAgIHRoaXMucHJvZ3Jlc3NFbGVtZW50LnN0eWxlLndpZHRoID0gXCIwXCI7XG4gICAgICAgIHRoaXMucHJvZ3Jlc3NFbGVtZW50LnN0eWxlLm9wYWNpdHkgPSBcIjFcIjtcbiAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lmluc2VydEJlZm9yZSh0aGlzLnByb2dyZXNzRWxlbWVudCwgZG9jdW1lbnQuYm9keSk7XG4gICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgIH1cbiAgICBmYWRlUHJvZ3Jlc3NFbGVtZW50KGNhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMucHJvZ3Jlc3NFbGVtZW50LnN0eWxlLm9wYWNpdHkgPSBcIjBcIjtcbiAgICAgICAgc2V0VGltZW91dChjYWxsYmFjaywgUHJvZ3Jlc3NCYXIuYW5pbWF0aW9uRHVyYXRpb24gKiAxLjUpO1xuICAgIH1cbiAgICB1bmluc3RhbGxQcm9ncmVzc0VsZW1lbnQoKSB7XG4gICAgICAgIGlmICh0aGlzLnByb2dyZXNzRWxlbWVudC5wYXJlbnROb2RlKSB7XG4gICAgICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5wcm9ncmVzc0VsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXJ0VHJpY2tsaW5nKCkge1xuICAgICAgICBpZiAoIXRoaXMudHJpY2tsZUludGVydmFsKSB7XG4gICAgICAgICAgICB0aGlzLnRyaWNrbGVJbnRlcnZhbCA9IHdpbmRvdy5zZXRJbnRlcnZhbCh0aGlzLnRyaWNrbGUsIFByb2dyZXNzQmFyLmFuaW1hdGlvbkR1cmF0aW9uKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdG9wVHJpY2tsaW5nKCkge1xuICAgICAgICB3aW5kb3cuY2xlYXJJbnRlcnZhbCh0aGlzLnRyaWNrbGVJbnRlcnZhbCk7XG4gICAgICAgIGRlbGV0ZSB0aGlzLnRyaWNrbGVJbnRlcnZhbDtcbiAgICB9XG4gICAgcmVmcmVzaCgpIHtcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucHJvZ3Jlc3NFbGVtZW50LnN0eWxlLndpZHRoID0gYCR7MTAgKyAodGhpcy52YWx1ZSAqIDkwKX0lYDtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNyZWF0ZVN0eWxlc2hlZXRFbGVtZW50KCkge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpO1xuICAgICAgICBlbGVtZW50LnR5cGUgPSBcInRleHQvY3NzXCI7XG4gICAgICAgIGVsZW1lbnQudGV4dENvbnRlbnQgPSBQcm9ncmVzc0Jhci5kZWZhdWx0Q1NTO1xuICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG4gICAgY3JlYXRlUHJvZ3Jlc3NFbGVtZW50KCkge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgZWxlbWVudC5jbGFzc05hbWUgPSBcInR1cmJvLXByb2dyZXNzLWJhclwiO1xuICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG59XG5Qcm9ncmVzc0Jhci5hbmltYXRpb25EdXJhdGlvbiA9IDMwMDtcblxuY2xhc3MgSGVhZFNuYXBzaG90IGV4dGVuZHMgU25hcHNob3Qge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLmRldGFpbHNCeU91dGVySFRNTCA9IHRoaXMuY2hpbGRyZW5cbiAgICAgICAgICAgIC5maWx0ZXIoKGVsZW1lbnQpID0+ICFlbGVtZW50SXNOb3NjcmlwdChlbGVtZW50KSlcbiAgICAgICAgICAgIC5yZWR1Y2UoKHJlc3VsdCwgZWxlbWVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBvdXRlckhUTUwgfSA9IGVsZW1lbnQ7XG4gICAgICAgICAgICBjb25zdCBkZXRhaWxzID0gb3V0ZXJIVE1MIGluIHJlc3VsdFxuICAgICAgICAgICAgICAgID8gcmVzdWx0W291dGVySFRNTF1cbiAgICAgICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogZWxlbWVudFR5cGUoZWxlbWVudCksXG4gICAgICAgICAgICAgICAgICAgIHRyYWNrZWQ6IGVsZW1lbnRJc1RyYWNrZWQoZWxlbWVudCksXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzOiBbXVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCByZXN1bHQpLCB7IFtvdXRlckhUTUxdOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGRldGFpbHMpLCB7IGVsZW1lbnRzOiBbLi4uZGV0YWlscy5lbGVtZW50cywgZWxlbWVudF0gfSkgfSk7XG4gICAgICAgIH0sIHt9KTtcbiAgICB9XG4gICAgZ2V0IHRyYWNrZWRFbGVtZW50U2lnbmF0dXJlKCkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5kZXRhaWxzQnlPdXRlckhUTUwpXG4gICAgICAgICAgICAuZmlsdGVyKG91dGVySFRNTCA9PiB0aGlzLmRldGFpbHNCeU91dGVySFRNTFtvdXRlckhUTUxdLnRyYWNrZWQpXG4gICAgICAgICAgICAuam9pbihcIlwiKTtcbiAgICB9XG4gICAgZ2V0U2NyaXB0RWxlbWVudHNOb3RJblNuYXBzaG90KHNuYXBzaG90KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEVsZW1lbnRzTWF0Y2hpbmdUeXBlTm90SW5TbmFwc2hvdChcInNjcmlwdFwiLCBzbmFwc2hvdCk7XG4gICAgfVxuICAgIGdldFN0eWxlc2hlZXRFbGVtZW50c05vdEluU25hcHNob3Qoc25hcHNob3QpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RWxlbWVudHNNYXRjaGluZ1R5cGVOb3RJblNuYXBzaG90KFwic3R5bGVzaGVldFwiLCBzbmFwc2hvdCk7XG4gICAgfVxuICAgIGdldEVsZW1lbnRzTWF0Y2hpbmdUeXBlTm90SW5TbmFwc2hvdChtYXRjaGVkVHlwZSwgc25hcHNob3QpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuZGV0YWlsc0J5T3V0ZXJIVE1MKVxuICAgICAgICAgICAgLmZpbHRlcihvdXRlckhUTUwgPT4gIShvdXRlckhUTUwgaW4gc25hcHNob3QuZGV0YWlsc0J5T3V0ZXJIVE1MKSlcbiAgICAgICAgICAgIC5tYXAob3V0ZXJIVE1MID0+IHRoaXMuZGV0YWlsc0J5T3V0ZXJIVE1MW291dGVySFRNTF0pXG4gICAgICAgICAgICAuZmlsdGVyKCh7IHR5cGUgfSkgPT4gdHlwZSA9PSBtYXRjaGVkVHlwZSlcbiAgICAgICAgICAgIC5tYXAoKHsgZWxlbWVudHM6IFtlbGVtZW50XSB9KSA9PiBlbGVtZW50KTtcbiAgICB9XG4gICAgZ2V0IHByb3Zpc2lvbmFsRWxlbWVudHMoKSB7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmRldGFpbHNCeU91dGVySFRNTCkucmVkdWNlKChyZXN1bHQsIG91dGVySFRNTCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyB0eXBlLCB0cmFja2VkLCBlbGVtZW50cyB9ID0gdGhpcy5kZXRhaWxzQnlPdXRlckhUTUxbb3V0ZXJIVE1MXTtcbiAgICAgICAgICAgIGlmICh0eXBlID09IG51bGwgJiYgIXRyYWNrZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gWy4uLnJlc3VsdCwgLi4uZWxlbWVudHNdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZWxlbWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBbLi4ucmVzdWx0LCAuLi5lbGVtZW50cy5zbGljZSgxKV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBbXSk7XG4gICAgfVxuICAgIGdldE1ldGFWYWx1ZShuYW1lKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmZpbmRNZXRhRWxlbWVudEJ5TmFtZShuYW1lKTtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnRcbiAgICAgICAgICAgID8gZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJjb250ZW50XCIpXG4gICAgICAgICAgICA6IG51bGw7XG4gICAgfVxuICAgIGZpbmRNZXRhRWxlbWVudEJ5TmFtZShuYW1lKSB7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmRldGFpbHNCeU91dGVySFRNTCkucmVkdWNlKChyZXN1bHQsIG91dGVySFRNTCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBlbGVtZW50czogW2VsZW1lbnRdIH0gPSB0aGlzLmRldGFpbHNCeU91dGVySFRNTFtvdXRlckhUTUxdO1xuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRJc01ldGFFbGVtZW50V2l0aE5hbWUoZWxlbWVudCwgbmFtZSkgPyBlbGVtZW50IDogcmVzdWx0O1xuICAgICAgICB9LCB1bmRlZmluZWQpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGVsZW1lbnRUeXBlKGVsZW1lbnQpIHtcbiAgICBpZiAoZWxlbWVudElzU2NyaXB0KGVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybiBcInNjcmlwdFwiO1xuICAgIH1cbiAgICBlbHNlIGlmIChlbGVtZW50SXNTdHlsZXNoZWV0KGVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybiBcInN0eWxlc2hlZXRcIjtcbiAgICB9XG59XG5mdW5jdGlvbiBlbGVtZW50SXNUcmFja2VkKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJkYXRhLXR1cmJvLXRyYWNrXCIpID09IFwicmVsb2FkXCI7XG59XG5mdW5jdGlvbiBlbGVtZW50SXNTY3JpcHQoZWxlbWVudCkge1xuICAgIGNvbnN0IHRhZ05hbWUgPSBlbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gdGFnTmFtZSA9PSBcInNjcmlwdFwiO1xufVxuZnVuY3Rpb24gZWxlbWVudElzTm9zY3JpcHQoZWxlbWVudCkge1xuICAgIGNvbnN0IHRhZ05hbWUgPSBlbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gdGFnTmFtZSA9PSBcIm5vc2NyaXB0XCI7XG59XG5mdW5jdGlvbiBlbGVtZW50SXNTdHlsZXNoZWV0KGVsZW1lbnQpIHtcbiAgICBjb25zdCB0YWdOYW1lID0gZWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgcmV0dXJuIHRhZ05hbWUgPT0gXCJzdHlsZVwiIHx8ICh0YWdOYW1lID09IFwibGlua1wiICYmIGVsZW1lbnQuZ2V0QXR0cmlidXRlKFwicmVsXCIpID09IFwic3R5bGVzaGVldFwiKTtcbn1cbmZ1bmN0aW9uIGVsZW1lbnRJc01ldGFFbGVtZW50V2l0aE5hbWUoZWxlbWVudCwgbmFtZSkge1xuICAgIGNvbnN0IHRhZ05hbWUgPSBlbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gdGFnTmFtZSA9PSBcIm1ldGFcIiAmJiBlbGVtZW50LmdldEF0dHJpYnV0ZShcIm5hbWVcIikgPT0gbmFtZTtcbn1cblxuY2xhc3MgUGFnZVNuYXBzaG90IGV4dGVuZHMgU25hcHNob3Qge1xuICAgIGNvbnN0cnVjdG9yKGVsZW1lbnQsIGhlYWRTbmFwc2hvdCkge1xuICAgICAgICBzdXBlcihlbGVtZW50KTtcbiAgICAgICAgdGhpcy5oZWFkU25hcHNob3QgPSBoZWFkU25hcHNob3Q7XG4gICAgfVxuICAgIHN0YXRpYyBmcm9tSFRNTFN0cmluZyhodG1sID0gXCJcIikge1xuICAgICAgICByZXR1cm4gdGhpcy5mcm9tRG9jdW1lbnQocGFyc2VIVE1MRG9jdW1lbnQoaHRtbCkpO1xuICAgIH1cbiAgICBzdGF0aWMgZnJvbUVsZW1lbnQoZWxlbWVudCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mcm9tRG9jdW1lbnQoZWxlbWVudC5vd25lckRvY3VtZW50KTtcbiAgICB9XG4gICAgc3RhdGljIGZyb21Eb2N1bWVudCh7IGhlYWQsIGJvZHkgfSkge1xuICAgICAgICByZXR1cm4gbmV3IHRoaXMoYm9keSwgbmV3IEhlYWRTbmFwc2hvdChoZWFkKSk7XG4gICAgfVxuICAgIGNsb25lKCkge1xuICAgICAgICByZXR1cm4gbmV3IFBhZ2VTbmFwc2hvdCh0aGlzLmVsZW1lbnQuY2xvbmVOb2RlKHRydWUpLCB0aGlzLmhlYWRTbmFwc2hvdCk7XG4gICAgfVxuICAgIGdldCBoZWFkRWxlbWVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGVhZFNuYXBzaG90LmVsZW1lbnQ7XG4gICAgfVxuICAgIGdldCByb290TG9jYXRpb24oKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3Qgcm9vdCA9IChfYSA9IHRoaXMuZ2V0U2V0dGluZyhcInJvb3RcIikpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFwiL1wiO1xuICAgICAgICByZXR1cm4gZXhwYW5kVVJMKHJvb3QpO1xuICAgIH1cbiAgICBnZXQgY2FjaGVDb250cm9sVmFsdWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFNldHRpbmcoXCJjYWNoZS1jb250cm9sXCIpO1xuICAgIH1cbiAgICBnZXQgaXNQcmV2aWV3YWJsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FjaGVDb250cm9sVmFsdWUgIT0gXCJuby1wcmV2aWV3XCI7XG4gICAgfVxuICAgIGdldCBpc0NhY2hlYWJsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FjaGVDb250cm9sVmFsdWUgIT0gXCJuby1jYWNoZVwiO1xuICAgIH1cbiAgICBnZXQgaXNWaXNpdGFibGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFNldHRpbmcoXCJ2aXNpdC1jb250cm9sXCIpICE9IFwicmVsb2FkXCI7XG4gICAgfVxuICAgIGdldFNldHRpbmcobmFtZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5oZWFkU25hcHNob3QuZ2V0TWV0YVZhbHVlKGB0dXJiby0ke25hbWV9YCk7XG4gICAgfVxufVxuXG52YXIgVGltaW5nTWV0cmljO1xuKGZ1bmN0aW9uIChUaW1pbmdNZXRyaWMpIHtcbiAgICBUaW1pbmdNZXRyaWNbXCJ2aXNpdFN0YXJ0XCJdID0gXCJ2aXNpdFN0YXJ0XCI7XG4gICAgVGltaW5nTWV0cmljW1wicmVxdWVzdFN0YXJ0XCJdID0gXCJyZXF1ZXN0U3RhcnRcIjtcbiAgICBUaW1pbmdNZXRyaWNbXCJyZXF1ZXN0RW5kXCJdID0gXCJyZXF1ZXN0RW5kXCI7XG4gICAgVGltaW5nTWV0cmljW1widmlzaXRFbmRcIl0gPSBcInZpc2l0RW5kXCI7XG59KShUaW1pbmdNZXRyaWMgfHwgKFRpbWluZ01ldHJpYyA9IHt9KSk7XG52YXIgVmlzaXRTdGF0ZTtcbihmdW5jdGlvbiAoVmlzaXRTdGF0ZSkge1xuICAgIFZpc2l0U3RhdGVbXCJpbml0aWFsaXplZFwiXSA9IFwiaW5pdGlhbGl6ZWRcIjtcbiAgICBWaXNpdFN0YXRlW1wic3RhcnRlZFwiXSA9IFwic3RhcnRlZFwiO1xuICAgIFZpc2l0U3RhdGVbXCJjYW5jZWxlZFwiXSA9IFwiY2FuY2VsZWRcIjtcbiAgICBWaXNpdFN0YXRlW1wiZmFpbGVkXCJdID0gXCJmYWlsZWRcIjtcbiAgICBWaXNpdFN0YXRlW1wiY29tcGxldGVkXCJdID0gXCJjb21wbGV0ZWRcIjtcbn0pKFZpc2l0U3RhdGUgfHwgKFZpc2l0U3RhdGUgPSB7fSkpO1xuY29uc3QgZGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgYWN0aW9uOiBcImFkdmFuY2VcIixcbiAgICBoaXN0b3J5Q2hhbmdlZDogZmFsc2Vcbn07XG52YXIgU3lzdGVtU3RhdHVzQ29kZTtcbihmdW5jdGlvbiAoU3lzdGVtU3RhdHVzQ29kZSkge1xuICAgIFN5c3RlbVN0YXR1c0NvZGVbU3lzdGVtU3RhdHVzQ29kZVtcIm5ldHdvcmtGYWlsdXJlXCJdID0gMF0gPSBcIm5ldHdvcmtGYWlsdXJlXCI7XG4gICAgU3lzdGVtU3RhdHVzQ29kZVtTeXN0ZW1TdGF0dXNDb2RlW1widGltZW91dEZhaWx1cmVcIl0gPSAtMV0gPSBcInRpbWVvdXRGYWlsdXJlXCI7XG4gICAgU3lzdGVtU3RhdHVzQ29kZVtTeXN0ZW1TdGF0dXNDb2RlW1wiY29udGVudFR5cGVNaXNtYXRjaFwiXSA9IC0yXSA9IFwiY29udGVudFR5cGVNaXNtYXRjaFwiO1xufSkoU3lzdGVtU3RhdHVzQ29kZSB8fCAoU3lzdGVtU3RhdHVzQ29kZSA9IHt9KSk7XG5jbGFzcyBWaXNpdCB7XG4gICAgY29uc3RydWN0b3IoZGVsZWdhdGUsIGxvY2F0aW9uLCByZXN0b3JhdGlvbklkZW50aWZpZXIsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICB0aGlzLmlkZW50aWZpZXIgPSB1dWlkKCk7XG4gICAgICAgIHRoaXMudGltaW5nTWV0cmljcyA9IHt9O1xuICAgICAgICB0aGlzLmZvbGxvd2VkUmVkaXJlY3QgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5oaXN0b3J5Q2hhbmdlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNjcm9sbGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc25hcHNob3RDYWNoZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFZpc2l0U3RhdGUuaW5pdGlhbGl6ZWQ7XG4gICAgICAgIHRoaXMuZGVsZWdhdGUgPSBkZWxlZ2F0ZTtcbiAgICAgICAgdGhpcy5sb2NhdGlvbiA9IGxvY2F0aW9uO1xuICAgICAgICB0aGlzLnJlc3RvcmF0aW9uSWRlbnRpZmllciA9IHJlc3RvcmF0aW9uSWRlbnRpZmllciB8fCB1dWlkKCk7XG4gICAgICAgIGNvbnN0IHsgYWN0aW9uLCBoaXN0b3J5Q2hhbmdlZCwgcmVmZXJyZXIsIHNuYXBzaG90SFRNTCwgcmVzcG9uc2UgfSA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdE9wdGlvbnMpLCBvcHRpb25zKTtcbiAgICAgICAgdGhpcy5hY3Rpb24gPSBhY3Rpb247XG4gICAgICAgIHRoaXMuaGlzdG9yeUNoYW5nZWQgPSBoaXN0b3J5Q2hhbmdlZDtcbiAgICAgICAgdGhpcy5yZWZlcnJlciA9IHJlZmVycmVyO1xuICAgICAgICB0aGlzLnNuYXBzaG90SFRNTCA9IHNuYXBzaG90SFRNTDtcbiAgICAgICAgdGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlO1xuICAgICAgICB0aGlzLmlzU2FtZVBhZ2UgPSB0aGlzLmRlbGVnYXRlLmxvY2F0aW9uV2l0aEFjdGlvbklzU2FtZVBhZ2UodGhpcy5sb2NhdGlvbiwgdGhpcy5hY3Rpb24pO1xuICAgIH1cbiAgICBnZXQgYWRhcHRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUuYWRhcHRlcjtcbiAgICB9XG4gICAgZ2V0IHZpZXcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLnZpZXc7XG4gICAgfVxuICAgIGdldCBoaXN0b3J5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS5oaXN0b3J5O1xuICAgIH1cbiAgICBnZXQgcmVzdG9yYXRpb25EYXRhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5oaXN0b3J5LmdldFJlc3RvcmF0aW9uRGF0YUZvcklkZW50aWZpZXIodGhpcy5yZXN0b3JhdGlvbklkZW50aWZpZXIpO1xuICAgIH1cbiAgICBnZXQgc2lsZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1NhbWVQYWdlO1xuICAgIH1cbiAgICBzdGFydCgpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUgPT0gVmlzaXRTdGF0ZS5pbml0aWFsaXplZCkge1xuICAgICAgICAgICAgdGhpcy5yZWNvcmRUaW1pbmdNZXRyaWMoVGltaW5nTWV0cmljLnZpc2l0U3RhcnQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFZpc2l0U3RhdGUuc3RhcnRlZDtcbiAgICAgICAgICAgIHRoaXMuYWRhcHRlci52aXNpdFN0YXJ0ZWQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmRlbGVnYXRlLnZpc2l0U3RhcnRlZCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjYW5jZWwoKSB7XG4gICAgICAgIGlmICh0aGlzLnN0YXRlID09IFZpc2l0U3RhdGUuc3RhcnRlZCkge1xuICAgICAgICAgICAgaWYgKHRoaXMucmVxdWVzdCkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVxdWVzdC5jYW5jZWwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY2FuY2VsUmVuZGVyKCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gVmlzaXRTdGF0ZS5jYW5jZWxlZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb21wbGV0ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUgPT0gVmlzaXRTdGF0ZS5zdGFydGVkKSB7XG4gICAgICAgICAgICB0aGlzLnJlY29yZFRpbWluZ01ldHJpYyhUaW1pbmdNZXRyaWMudmlzaXRFbmQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFZpc2l0U3RhdGUuY29tcGxldGVkO1xuICAgICAgICAgICAgdGhpcy5hZGFwdGVyLnZpc2l0Q29tcGxldGVkKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5kZWxlZ2F0ZS52aXNpdENvbXBsZXRlZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZm9sbG93UmVkaXJlY3QoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmYWlsKCkge1xuICAgICAgICBpZiAodGhpcy5zdGF0ZSA9PSBWaXNpdFN0YXRlLnN0YXJ0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBWaXNpdFN0YXRlLmZhaWxlZDtcbiAgICAgICAgICAgIHRoaXMuYWRhcHRlci52aXNpdEZhaWxlZCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjaGFuZ2VIaXN0b3J5KCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmICghdGhpcy5oaXN0b3J5Q2hhbmdlZCkge1xuICAgICAgICAgICAgY29uc3QgYWN0aW9uRm9ySGlzdG9yeSA9IHRoaXMubG9jYXRpb24uaHJlZiA9PT0gKChfYSA9IHRoaXMucmVmZXJyZXIpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5ocmVmKSA/IFwicmVwbGFjZVwiIDogdGhpcy5hY3Rpb247XG4gICAgICAgICAgICBjb25zdCBtZXRob2QgPSB0aGlzLmdldEhpc3RvcnlNZXRob2RGb3JBY3Rpb24oYWN0aW9uRm9ySGlzdG9yeSk7XG4gICAgICAgICAgICB0aGlzLmhpc3RvcnkudXBkYXRlKG1ldGhvZCwgdGhpcy5sb2NhdGlvbiwgdGhpcy5yZXN0b3JhdGlvbklkZW50aWZpZXIpO1xuICAgICAgICAgICAgdGhpcy5oaXN0b3J5Q2hhbmdlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaXNzdWVSZXF1ZXN0KCkge1xuICAgICAgICBpZiAodGhpcy5oYXNQcmVsb2FkZWRSZXNwb25zZSgpKSB7XG4gICAgICAgICAgICB0aGlzLnNpbXVsYXRlUmVxdWVzdCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuc2hvdWxkSXNzdWVSZXF1ZXN0KCkgJiYgIXRoaXMucmVxdWVzdCkge1xuICAgICAgICAgICAgdGhpcy5yZXF1ZXN0ID0gbmV3IEZldGNoUmVxdWVzdCh0aGlzLCBGZXRjaE1ldGhvZC5nZXQsIHRoaXMubG9jYXRpb24pO1xuICAgICAgICAgICAgdGhpcy5yZXF1ZXN0LnBlcmZvcm0oKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzaW11bGF0ZVJlcXVlc3QoKSB7XG4gICAgICAgIGlmICh0aGlzLnJlc3BvbnNlKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0UmVxdWVzdCgpO1xuICAgICAgICAgICAgdGhpcy5yZWNvcmRSZXNwb25zZSgpO1xuICAgICAgICAgICAgdGhpcy5maW5pc2hSZXF1ZXN0KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhcnRSZXF1ZXN0KCkge1xuICAgICAgICB0aGlzLnJlY29yZFRpbWluZ01ldHJpYyhUaW1pbmdNZXRyaWMucmVxdWVzdFN0YXJ0KTtcbiAgICAgICAgdGhpcy5hZGFwdGVyLnZpc2l0UmVxdWVzdFN0YXJ0ZWQodGhpcyk7XG4gICAgfVxuICAgIHJlY29yZFJlc3BvbnNlKHJlc3BvbnNlID0gdGhpcy5yZXNwb25zZSkge1xuICAgICAgICB0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2U7XG4gICAgICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgICAgICAgY29uc3QgeyBzdGF0dXNDb2RlIH0gPSByZXNwb25zZTtcbiAgICAgICAgICAgIGlmIChpc1N1Y2Nlc3NmdWwoc3RhdHVzQ29kZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkYXB0ZXIudmlzaXRSZXF1ZXN0Q29tcGxldGVkKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGFwdGVyLnZpc2l0UmVxdWVzdEZhaWxlZFdpdGhTdGF0dXNDb2RlKHRoaXMsIHN0YXR1c0NvZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGZpbmlzaFJlcXVlc3QoKSB7XG4gICAgICAgIHRoaXMucmVjb3JkVGltaW5nTWV0cmljKFRpbWluZ01ldHJpYy5yZXF1ZXN0RW5kKTtcbiAgICAgICAgdGhpcy5hZGFwdGVyLnZpc2l0UmVxdWVzdEZpbmlzaGVkKHRoaXMpO1xuICAgIH1cbiAgICBsb2FkUmVzcG9uc2UoKSB7XG4gICAgICAgIGlmICh0aGlzLnJlc3BvbnNlKSB7XG4gICAgICAgICAgICBjb25zdCB7IHN0YXR1c0NvZGUsIHJlc3BvbnNlSFRNTCB9ID0gdGhpcy5yZXNwb25zZTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhY2hlU25hcHNob3QoKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy52aWV3LnJlbmRlclByb21pc2UpXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMudmlldy5yZW5kZXJQcm9taXNlO1xuICAgICAgICAgICAgICAgIGlmIChpc1N1Y2Nlc3NmdWwoc3RhdHVzQ29kZSkgJiYgcmVzcG9uc2VIVE1MICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy52aWV3LnJlbmRlclBhZ2UoUGFnZVNuYXBzaG90LmZyb21IVE1MU3RyaW5nKHJlc3BvbnNlSFRNTCkpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkYXB0ZXIudmlzaXRSZW5kZXJlZCh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy52aWV3LnJlbmRlckVycm9yKFBhZ2VTbmFwc2hvdC5mcm9tSFRNTFN0cmluZyhyZXNwb25zZUhUTUwpKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGFwdGVyLnZpc2l0UmVuZGVyZWQodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmFpbCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldENhY2hlZFNuYXBzaG90KCkge1xuICAgICAgICBjb25zdCBzbmFwc2hvdCA9IHRoaXMudmlldy5nZXRDYWNoZWRTbmFwc2hvdEZvckxvY2F0aW9uKHRoaXMubG9jYXRpb24pIHx8IHRoaXMuZ2V0UHJlbG9hZGVkU25hcHNob3QoKTtcbiAgICAgICAgaWYgKHNuYXBzaG90ICYmICghZ2V0QW5jaG9yKHRoaXMubG9jYXRpb24pIHx8IHNuYXBzaG90Lmhhc0FuY2hvcihnZXRBbmNob3IodGhpcy5sb2NhdGlvbikpKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuYWN0aW9uID09IFwicmVzdG9yZVwiIHx8IHNuYXBzaG90LmlzUHJldmlld2FibGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc25hcHNob3Q7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0UHJlbG9hZGVkU25hcHNob3QoKSB7XG4gICAgICAgIGlmICh0aGlzLnNuYXBzaG90SFRNTCkge1xuICAgICAgICAgICAgcmV0dXJuIFBhZ2VTbmFwc2hvdC5mcm9tSFRNTFN0cmluZyh0aGlzLnNuYXBzaG90SFRNTCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaGFzQ2FjaGVkU25hcHNob3QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldENhY2hlZFNuYXBzaG90KCkgIT0gbnVsbDtcbiAgICB9XG4gICAgbG9hZENhY2hlZFNuYXBzaG90KCkge1xuICAgICAgICBjb25zdCBzbmFwc2hvdCA9IHRoaXMuZ2V0Q2FjaGVkU25hcHNob3QoKTtcbiAgICAgICAgaWYgKHNuYXBzaG90KSB7XG4gICAgICAgICAgICBjb25zdCBpc1ByZXZpZXcgPSB0aGlzLnNob3VsZElzc3VlUmVxdWVzdCgpO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXIoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVTbmFwc2hvdCgpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzU2FtZVBhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGFwdGVyLnZpc2l0UmVuZGVyZWQodGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy52aWV3LnJlbmRlclByb21pc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnZpZXcucmVuZGVyUHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy52aWV3LnJlbmRlclBhZ2Uoc25hcHNob3QsIGlzUHJldmlldyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRhcHRlci52aXNpdFJlbmRlcmVkKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzUHJldmlldykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZm9sbG93UmVkaXJlY3QoKSB7XG4gICAgICAgIGlmICh0aGlzLnJlZGlyZWN0ZWRUb0xvY2F0aW9uICYmICF0aGlzLmZvbGxvd2VkUmVkaXJlY3QpIHtcbiAgICAgICAgICAgIHRoaXMuYWRhcHRlci52aXNpdFByb3Bvc2VkVG9Mb2NhdGlvbih0aGlzLnJlZGlyZWN0ZWRUb0xvY2F0aW9uLCB7XG4gICAgICAgICAgICAgICAgYWN0aW9uOiAncmVwbGFjZScsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2U6IHRoaXMucmVzcG9uc2VcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5mb2xsb3dlZFJlZGlyZWN0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnb1RvU2FtZVBhZ2VBbmNob3IoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzU2FtZVBhZ2UpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhY2hlU25hcHNob3QoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFkYXB0ZXIudmlzaXRSZW5kZXJlZCh0aGlzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJlcXVlc3RTdGFydGVkKCkge1xuICAgICAgICB0aGlzLnN0YXJ0UmVxdWVzdCgpO1xuICAgIH1cbiAgICByZXF1ZXN0UHJldmVudGVkSGFuZGxpbmdSZXNwb25zZShyZXF1ZXN0LCByZXNwb25zZSkge1xuICAgIH1cbiAgICBhc3luYyByZXF1ZXN0U3VjY2VlZGVkV2l0aFJlc3BvbnNlKHJlcXVlc3QsIHJlc3BvbnNlKSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlSFRNTCA9IGF3YWl0IHJlc3BvbnNlLnJlc3BvbnNlSFRNTDtcbiAgICAgICAgaWYgKHJlc3BvbnNlSFRNTCA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMucmVjb3JkUmVzcG9uc2UoeyBzdGF0dXNDb2RlOiBTeXN0ZW1TdGF0dXNDb2RlLmNvbnRlbnRUeXBlTWlzbWF0Y2ggfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlZGlyZWN0ZWRUb0xvY2F0aW9uID0gcmVzcG9uc2UucmVkaXJlY3RlZCA/IHJlc3BvbnNlLmxvY2F0aW9uIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5yZWNvcmRSZXNwb25zZSh7IHN0YXR1c0NvZGU6IHJlc3BvbnNlLnN0YXR1c0NvZGUsIHJlc3BvbnNlSFRNTCB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyByZXF1ZXN0RmFpbGVkV2l0aFJlc3BvbnNlKHJlcXVlc3QsIHJlc3BvbnNlKSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlSFRNTCA9IGF3YWl0IHJlc3BvbnNlLnJlc3BvbnNlSFRNTDtcbiAgICAgICAgaWYgKHJlc3BvbnNlSFRNTCA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMucmVjb3JkUmVzcG9uc2UoeyBzdGF0dXNDb2RlOiBTeXN0ZW1TdGF0dXNDb2RlLmNvbnRlbnRUeXBlTWlzbWF0Y2ggfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlY29yZFJlc3BvbnNlKHsgc3RhdHVzQ29kZTogcmVzcG9uc2Uuc3RhdHVzQ29kZSwgcmVzcG9uc2VIVE1MIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJlcXVlc3RFcnJvcmVkKHJlcXVlc3QsIGVycm9yKSB7XG4gICAgICAgIHRoaXMucmVjb3JkUmVzcG9uc2UoeyBzdGF0dXNDb2RlOiBTeXN0ZW1TdGF0dXNDb2RlLm5ldHdvcmtGYWlsdXJlIH0pO1xuICAgIH1cbiAgICByZXF1ZXN0RmluaXNoZWQoKSB7XG4gICAgICAgIHRoaXMuZmluaXNoUmVxdWVzdCgpO1xuICAgIH1cbiAgICBwZXJmb3JtU2Nyb2xsKCkge1xuICAgICAgICBpZiAoIXRoaXMuc2Nyb2xsZWQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmFjdGlvbiA9PSBcInJlc3RvcmVcIikge1xuICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9SZXN0b3JlZFBvc2l0aW9uKCkgfHwgdGhpcy5zY3JvbGxUb0FuY2hvcigpIHx8IHRoaXMudmlldy5zY3JvbGxUb1RvcCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FuY2hvcigpIHx8IHRoaXMudmlldy5zY3JvbGxUb1RvcCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuaXNTYW1lUGFnZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVsZWdhdGUudmlzaXRTY3JvbGxlZFRvU2FtZVBhZ2VMb2NhdGlvbih0aGlzLnZpZXcubGFzdFJlbmRlcmVkTG9jYXRpb24sIHRoaXMubG9jYXRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zY3JvbGxlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2Nyb2xsVG9SZXN0b3JlZFBvc2l0aW9uKCkge1xuICAgICAgICBjb25zdCB7IHNjcm9sbFBvc2l0aW9uIH0gPSB0aGlzLnJlc3RvcmF0aW9uRGF0YTtcbiAgICAgICAgaWYgKHNjcm9sbFBvc2l0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnZpZXcuc2Nyb2xsVG9Qb3NpdGlvbihzY3JvbGxQb3NpdGlvbik7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzY3JvbGxUb0FuY2hvcigpIHtcbiAgICAgICAgY29uc3QgYW5jaG9yID0gZ2V0QW5jaG9yKHRoaXMubG9jYXRpb24pO1xuICAgICAgICBpZiAoYW5jaG9yICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMudmlldy5zY3JvbGxUb0FuY2hvcihhbmNob3IpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmVjb3JkVGltaW5nTWV0cmljKG1ldHJpYykge1xuICAgICAgICB0aGlzLnRpbWluZ01ldHJpY3NbbWV0cmljXSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgIH1cbiAgICBnZXRUaW1pbmdNZXRyaWNzKCkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy50aW1pbmdNZXRyaWNzKTtcbiAgICB9XG4gICAgZ2V0SGlzdG9yeU1ldGhvZEZvckFjdGlvbihhY3Rpb24pIHtcbiAgICAgICAgc3dpdGNoIChhY3Rpb24pIHtcbiAgICAgICAgICAgIGNhc2UgXCJyZXBsYWNlXCI6IHJldHVybiBoaXN0b3J5LnJlcGxhY2VTdGF0ZTtcbiAgICAgICAgICAgIGNhc2UgXCJhZHZhbmNlXCI6XG4gICAgICAgICAgICBjYXNlIFwicmVzdG9yZVwiOiByZXR1cm4gaGlzdG9yeS5wdXNoU3RhdGU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaGFzUHJlbG9hZGVkUmVzcG9uc2UoKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgdGhpcy5yZXNwb25zZSA9PSBcIm9iamVjdFwiO1xuICAgIH1cbiAgICBzaG91bGRJc3N1ZVJlcXVlc3QoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzU2FtZVBhZ2UpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmFjdGlvbiA9PSBcInJlc3RvcmVcIikge1xuICAgICAgICAgICAgcmV0dXJuICF0aGlzLmhhc0NhY2hlZFNuYXBzaG90KCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjYWNoZVNuYXBzaG90KCkge1xuICAgICAgICBpZiAoIXRoaXMuc25hcHNob3RDYWNoZWQpIHtcbiAgICAgICAgICAgIHRoaXMudmlldy5jYWNoZVNuYXBzaG90KCk7XG4gICAgICAgICAgICB0aGlzLnNuYXBzaG90Q2FjaGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyByZW5kZXIoY2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5jYW5jZWxSZW5kZXIoKTtcbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgICB0aGlzLmZyYW1lID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHJlc29sdmUoKSk7XG4gICAgICAgIH0pO1xuICAgICAgICBhd2FpdCBjYWxsYmFjaygpO1xuICAgICAgICBkZWxldGUgdGhpcy5mcmFtZTtcbiAgICAgICAgdGhpcy5wZXJmb3JtU2Nyb2xsKCk7XG4gICAgfVxuICAgIGNhbmNlbFJlbmRlcigpIHtcbiAgICAgICAgaWYgKHRoaXMuZnJhbWUpIHtcbiAgICAgICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuZnJhbWUpO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuZnJhbWU7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBpc1N1Y2Nlc3NmdWwoc3RhdHVzQ29kZSkge1xuICAgIHJldHVybiBzdGF0dXNDb2RlID49IDIwMCAmJiBzdGF0dXNDb2RlIDwgMzAwO1xufVxuXG5jbGFzcyBCcm93c2VyQWRhcHRlciB7XG4gICAgY29uc3RydWN0b3Ioc2Vzc2lvbikge1xuICAgICAgICB0aGlzLnByb2dyZXNzQmFyID0gbmV3IFByb2dyZXNzQmFyO1xuICAgICAgICB0aGlzLnNob3dQcm9ncmVzc0JhciA9ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucHJvZ3Jlc3NCYXIuc2hvdygpO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLnNlc3Npb24gPSBzZXNzaW9uO1xuICAgIH1cbiAgICB2aXNpdFByb3Bvc2VkVG9Mb2NhdGlvbihsb2NhdGlvbiwgb3B0aW9ucykge1xuICAgICAgICB0aGlzLm5hdmlnYXRvci5zdGFydFZpc2l0KGxvY2F0aW9uLCB1dWlkKCksIG9wdGlvbnMpO1xuICAgIH1cbiAgICB2aXNpdFN0YXJ0ZWQodmlzaXQpIHtcbiAgICAgICAgdmlzaXQuaXNzdWVSZXF1ZXN0KCk7XG4gICAgICAgIHZpc2l0LmNoYW5nZUhpc3RvcnkoKTtcbiAgICAgICAgdmlzaXQuZ29Ub1NhbWVQYWdlQW5jaG9yKCk7XG4gICAgICAgIHZpc2l0LmxvYWRDYWNoZWRTbmFwc2hvdCgpO1xuICAgIH1cbiAgICB2aXNpdFJlcXVlc3RTdGFydGVkKHZpc2l0KSB7XG4gICAgICAgIHRoaXMucHJvZ3Jlc3NCYXIuc2V0VmFsdWUoMCk7XG4gICAgICAgIGlmICh2aXNpdC5oYXNDYWNoZWRTbmFwc2hvdCgpIHx8IHZpc2l0LmFjdGlvbiAhPSBcInJlc3RvcmVcIikge1xuICAgICAgICAgICAgdGhpcy5zaG93VmlzaXRQcm9ncmVzc0JhckFmdGVyRGVsYXkoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd1Byb2dyZXNzQmFyKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmlzaXRSZXF1ZXN0Q29tcGxldGVkKHZpc2l0KSB7XG4gICAgICAgIHZpc2l0LmxvYWRSZXNwb25zZSgpO1xuICAgIH1cbiAgICB2aXNpdFJlcXVlc3RGYWlsZWRXaXRoU3RhdHVzQ29kZSh2aXNpdCwgc3RhdHVzQ29kZSkge1xuICAgICAgICBzd2l0Y2ggKHN0YXR1c0NvZGUpIHtcbiAgICAgICAgICAgIGNhc2UgU3lzdGVtU3RhdHVzQ29kZS5uZXR3b3JrRmFpbHVyZTpcbiAgICAgICAgICAgIGNhc2UgU3lzdGVtU3RhdHVzQ29kZS50aW1lb3V0RmFpbHVyZTpcbiAgICAgICAgICAgIGNhc2UgU3lzdGVtU3RhdHVzQ29kZS5jb250ZW50VHlwZU1pc21hdGNoOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbG9hZCgpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdmlzaXQubG9hZFJlc3BvbnNlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmlzaXRSZXF1ZXN0RmluaXNoZWQodmlzaXQpIHtcbiAgICAgICAgdGhpcy5wcm9ncmVzc0Jhci5zZXRWYWx1ZSgxKTtcbiAgICAgICAgdGhpcy5oaWRlVmlzaXRQcm9ncmVzc0JhcigpO1xuICAgIH1cbiAgICB2aXNpdENvbXBsZXRlZCh2aXNpdCkge1xuICAgIH1cbiAgICBwYWdlSW52YWxpZGF0ZWQoKSB7XG4gICAgICAgIHRoaXMucmVsb2FkKCk7XG4gICAgfVxuICAgIHZpc2l0RmFpbGVkKHZpc2l0KSB7XG4gICAgfVxuICAgIHZpc2l0UmVuZGVyZWQodmlzaXQpIHtcbiAgICB9XG4gICAgZm9ybVN1Ym1pc3Npb25TdGFydGVkKGZvcm1TdWJtaXNzaW9uKSB7XG4gICAgICAgIHRoaXMucHJvZ3Jlc3NCYXIuc2V0VmFsdWUoMCk7XG4gICAgICAgIHRoaXMuc2hvd0Zvcm1Qcm9ncmVzc0JhckFmdGVyRGVsYXkoKTtcbiAgICB9XG4gICAgZm9ybVN1Ym1pc3Npb25GaW5pc2hlZChmb3JtU3VibWlzc2lvbikge1xuICAgICAgICB0aGlzLnByb2dyZXNzQmFyLnNldFZhbHVlKDEpO1xuICAgICAgICB0aGlzLmhpZGVGb3JtUHJvZ3Jlc3NCYXIoKTtcbiAgICB9XG4gICAgc2hvd1Zpc2l0UHJvZ3Jlc3NCYXJBZnRlckRlbGF5KCkge1xuICAgICAgICB0aGlzLnZpc2l0UHJvZ3Jlc3NCYXJUaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQodGhpcy5zaG93UHJvZ3Jlc3NCYXIsIHRoaXMuc2Vzc2lvbi5wcm9ncmVzc0JhckRlbGF5KTtcbiAgICB9XG4gICAgaGlkZVZpc2l0UHJvZ3Jlc3NCYXIoKSB7XG4gICAgICAgIHRoaXMucHJvZ3Jlc3NCYXIuaGlkZSgpO1xuICAgICAgICBpZiAodGhpcy52aXNpdFByb2dyZXNzQmFyVGltZW91dCAhPSBudWxsKSB7XG4gICAgICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMudmlzaXRQcm9ncmVzc0JhclRpbWVvdXQpO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMudmlzaXRQcm9ncmVzc0JhclRpbWVvdXQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2hvd0Zvcm1Qcm9ncmVzc0JhckFmdGVyRGVsYXkoKSB7XG4gICAgICAgIGlmICh0aGlzLmZvcm1Qcm9ncmVzc0JhclRpbWVvdXQgPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5mb3JtUHJvZ3Jlc3NCYXJUaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQodGhpcy5zaG93UHJvZ3Jlc3NCYXIsIHRoaXMuc2Vzc2lvbi5wcm9ncmVzc0JhckRlbGF5KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBoaWRlRm9ybVByb2dyZXNzQmFyKCkge1xuICAgICAgICB0aGlzLnByb2dyZXNzQmFyLmhpZGUoKTtcbiAgICAgICAgaWYgKHRoaXMuZm9ybVByb2dyZXNzQmFyVGltZW91dCAhPSBudWxsKSB7XG4gICAgICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMuZm9ybVByb2dyZXNzQmFyVGltZW91dCk7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5mb3JtUHJvZ3Jlc3NCYXJUaW1lb3V0O1xuICAgICAgICB9XG4gICAgfVxuICAgIHJlbG9hZCgpIHtcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuICAgIH1cbiAgICBnZXQgbmF2aWdhdG9yKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXNzaW9uLm5hdmlnYXRvcjtcbiAgICB9XG59XG5cbmNsYXNzIENhY2hlT2JzZXJ2ZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnN0YXJ0ZWQgPSBmYWxzZTtcbiAgICB9XG4gICAgc3RhcnQoKSB7XG4gICAgICAgIGlmICghdGhpcy5zdGFydGVkKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgYWRkRXZlbnRMaXN0ZW5lcihcInR1cmJvOmJlZm9yZS1jYWNoZVwiLCB0aGlzLnJlbW92ZVN0YWxlRWxlbWVudHMsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdG9wKCkge1xuICAgICAgICBpZiAodGhpcy5zdGFydGVkKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0dXJibzpiZWZvcmUtY2FjaGVcIiwgdGhpcy5yZW1vdmVTdGFsZUVsZW1lbnRzLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmVtb3ZlU3RhbGVFbGVtZW50cygpIHtcbiAgICAgICAgY29uc3Qgc3RhbGVFbGVtZW50cyA9IFsuLi5kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS10dXJiby1jYWNoZT1cImZhbHNlXCJdJyldO1xuICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2Ygc3RhbGVFbGVtZW50cykge1xuICAgICAgICAgICAgZWxlbWVudC5yZW1vdmUoKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgRm9ybVN1Ym1pdE9ic2VydmVyIHtcbiAgICBjb25zdHJ1Y3RvcihkZWxlZ2F0ZSkge1xuICAgICAgICB0aGlzLnN0YXJ0ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdWJtaXRDYXB0dXJlZCA9ICgpID0+IHtcbiAgICAgICAgICAgIHJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzdWJtaXRcIiwgdGhpcy5zdWJtaXRCdWJibGVkLCBmYWxzZSk7XG4gICAgICAgICAgICBhZGRFdmVudExpc3RlbmVyKFwic3VibWl0XCIsIHRoaXMuc3VibWl0QnViYmxlZCwgZmFsc2UpO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLnN1Ym1pdEJ1YmJsZWQgPSAoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBpZiAoIWV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmb3JtID0gZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgSFRNTEZvcm1FbGVtZW50ID8gZXZlbnQudGFyZ2V0IDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGNvbnN0IHN1Ym1pdHRlciA9IGV2ZW50LnN1Ym1pdHRlciB8fCB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgaWYgKGZvcm0pIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWV0aG9kID0gKHN1Ym1pdHRlciA9PT0gbnVsbCB8fCBzdWJtaXR0ZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHN1Ym1pdHRlci5nZXRBdHRyaWJ1dGUoXCJmb3JtbWV0aG9kXCIpKSB8fCBmb3JtLm1ldGhvZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1ldGhvZCAhPSBcImRpYWxvZ1wiICYmIHRoaXMuZGVsZWdhdGUud2lsbFN1Ym1pdEZvcm0oZm9ybSwgc3VibWl0dGVyKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVsZWdhdGUuZm9ybVN1Ym1pdHRlZChmb3JtLCBzdWJtaXR0ZXIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5kZWxlZ2F0ZSA9IGRlbGVnYXRlO1xuICAgIH1cbiAgICBzdGFydCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnN0YXJ0ZWQpIHtcbiAgICAgICAgICAgIGFkZEV2ZW50TGlzdGVuZXIoXCJzdWJtaXRcIiwgdGhpcy5zdWJtaXRDYXB0dXJlZCwgdHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0b3AoKSB7XG4gICAgICAgIGlmICh0aGlzLnN0YXJ0ZWQpIHtcbiAgICAgICAgICAgIHJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzdWJtaXRcIiwgdGhpcy5zdWJtaXRDYXB0dXJlZCwgdHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0ZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgRnJhbWVSZWRpcmVjdG9yIHtcbiAgICBjb25zdHJ1Y3RvcihlbGVtZW50KSB7XG4gICAgICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgICAgIHRoaXMubGlua0ludGVyY2VwdG9yID0gbmV3IExpbmtJbnRlcmNlcHRvcih0aGlzLCBlbGVtZW50KTtcbiAgICAgICAgdGhpcy5mb3JtSW50ZXJjZXB0b3IgPSBuZXcgRm9ybUludGVyY2VwdG9yKHRoaXMsIGVsZW1lbnQpO1xuICAgIH1cbiAgICBzdGFydCgpIHtcbiAgICAgICAgdGhpcy5saW5rSW50ZXJjZXB0b3Iuc3RhcnQoKTtcbiAgICAgICAgdGhpcy5mb3JtSW50ZXJjZXB0b3Iuc3RhcnQoKTtcbiAgICB9XG4gICAgc3RvcCgpIHtcbiAgICAgICAgdGhpcy5saW5rSW50ZXJjZXB0b3Iuc3RvcCgpO1xuICAgICAgICB0aGlzLmZvcm1JbnRlcmNlcHRvci5zdG9wKCk7XG4gICAgfVxuICAgIHNob3VsZEludGVyY2VwdExpbmtDbGljayhlbGVtZW50LCB1cmwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2hvdWxkUmVkaXJlY3QoZWxlbWVudCk7XG4gICAgfVxuICAgIGxpbmtDbGlja0ludGVyY2VwdGVkKGVsZW1lbnQsIHVybCkge1xuICAgICAgICBjb25zdCBmcmFtZSA9IHRoaXMuZmluZEZyYW1lRWxlbWVudChlbGVtZW50KTtcbiAgICAgICAgaWYgKGZyYW1lKSB7XG4gICAgICAgICAgICBmcmFtZS5zZXRBdHRyaWJ1dGUoXCJyZWxvYWRhYmxlXCIsIFwiXCIpO1xuICAgICAgICAgICAgZnJhbWUuc3JjID0gdXJsO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNob3VsZEludGVyY2VwdEZvcm1TdWJtaXNzaW9uKGVsZW1lbnQsIHN1Ym1pdHRlcikge1xuICAgICAgICByZXR1cm4gdGhpcy5zaG91bGRSZWRpcmVjdChlbGVtZW50LCBzdWJtaXR0ZXIpO1xuICAgIH1cbiAgICBmb3JtU3VibWlzc2lvbkludGVyY2VwdGVkKGVsZW1lbnQsIHN1Ym1pdHRlcikge1xuICAgICAgICBjb25zdCBmcmFtZSA9IHRoaXMuZmluZEZyYW1lRWxlbWVudChlbGVtZW50KTtcbiAgICAgICAgaWYgKGZyYW1lKSB7XG4gICAgICAgICAgICBmcmFtZS5yZW1vdmVBdHRyaWJ1dGUoXCJyZWxvYWRhYmxlXCIpO1xuICAgICAgICAgICAgZnJhbWUuZGVsZWdhdGUuZm9ybVN1Ym1pc3Npb25JbnRlcmNlcHRlZChlbGVtZW50LCBzdWJtaXR0ZXIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNob3VsZFJlZGlyZWN0KGVsZW1lbnQsIHN1Ym1pdHRlcikge1xuICAgICAgICBjb25zdCBmcmFtZSA9IHRoaXMuZmluZEZyYW1lRWxlbWVudChlbGVtZW50KTtcbiAgICAgICAgcmV0dXJuIGZyYW1lID8gZnJhbWUgIT0gZWxlbWVudC5jbG9zZXN0KFwidHVyYm8tZnJhbWVcIikgOiBmYWxzZTtcbiAgICB9XG4gICAgZmluZEZyYW1lRWxlbWVudChlbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IGlkID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJkYXRhLXR1cmJvLWZyYW1lXCIpO1xuICAgICAgICBpZiAoaWQgJiYgaWQgIT0gXCJfdG9wXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IGZyYW1lID0gdGhpcy5lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoYCMke2lkfTpub3QoW2Rpc2FibGVkXSlgKTtcbiAgICAgICAgICAgIGlmIChmcmFtZSBpbnN0YW5jZW9mIEZyYW1lRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmcmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgSGlzdG9yeSB7XG4gICAgY29uc3RydWN0b3IoZGVsZWdhdGUpIHtcbiAgICAgICAgdGhpcy5yZXN0b3JhdGlvbklkZW50aWZpZXIgPSB1dWlkKCk7XG4gICAgICAgIHRoaXMucmVzdG9yYXRpb25EYXRhID0ge307XG4gICAgICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnBhZ2VMb2FkZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5vblBvcFN0YXRlID0gKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5zaG91bGRIYW5kbGVQb3BTdGF0ZSgpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyB0dXJibyB9ID0gZXZlbnQuc3RhdGUgfHwge307XG4gICAgICAgICAgICAgICAgaWYgKHR1cmJvKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9jYXRpb24gPSBuZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyByZXN0b3JhdGlvbklkZW50aWZpZXIgfSA9IHR1cmJvO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3RvcmF0aW9uSWRlbnRpZmllciA9IHJlc3RvcmF0aW9uSWRlbnRpZmllcjtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWxlZ2F0ZS5oaXN0b3J5UG9wcGVkVG9Mb2NhdGlvbldpdGhSZXN0b3JhdGlvbklkZW50aWZpZXIodGhpcy5sb2NhdGlvbiwgcmVzdG9yYXRpb25JZGVudGlmaWVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMub25QYWdlTG9hZCA9IGFzeW5jIChldmVudCkgPT4ge1xuICAgICAgICAgICAgYXdhaXQgbmV4dE1pY3JvdGFzaygpO1xuICAgICAgICAgICAgdGhpcy5wYWdlTG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5kZWxlZ2F0ZSA9IGRlbGVnYXRlO1xuICAgIH1cbiAgICBzdGFydCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnN0YXJ0ZWQpIHtcbiAgICAgICAgICAgIGFkZEV2ZW50TGlzdGVuZXIoXCJwb3BzdGF0ZVwiLCB0aGlzLm9uUG9wU3RhdGUsIGZhbHNlKTtcbiAgICAgICAgICAgIGFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsIHRoaXMub25QYWdlTG9hZCwgZmFsc2UpO1xuICAgICAgICAgICAgdGhpcy5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMucmVwbGFjZShuZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RvcCgpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RhcnRlZCkge1xuICAgICAgICAgICAgcmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvcHN0YXRlXCIsIHRoaXMub25Qb3BTdGF0ZSwgZmFsc2UpO1xuICAgICAgICAgICAgcmVtb3ZlRXZlbnRMaXN0ZW5lcihcImxvYWRcIiwgdGhpcy5vblBhZ2VMb2FkLCBmYWxzZSk7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0ZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwdXNoKGxvY2F0aW9uLCByZXN0b3JhdGlvbklkZW50aWZpZXIpIHtcbiAgICAgICAgdGhpcy51cGRhdGUoaGlzdG9yeS5wdXNoU3RhdGUsIGxvY2F0aW9uLCByZXN0b3JhdGlvbklkZW50aWZpZXIpO1xuICAgIH1cbiAgICByZXBsYWNlKGxvY2F0aW9uLCByZXN0b3JhdGlvbklkZW50aWZpZXIpIHtcbiAgICAgICAgdGhpcy51cGRhdGUoaGlzdG9yeS5yZXBsYWNlU3RhdGUsIGxvY2F0aW9uLCByZXN0b3JhdGlvbklkZW50aWZpZXIpO1xuICAgIH1cbiAgICB1cGRhdGUobWV0aG9kLCBsb2NhdGlvbiwgcmVzdG9yYXRpb25JZGVudGlmaWVyID0gdXVpZCgpKSB7XG4gICAgICAgIGNvbnN0IHN0YXRlID0geyB0dXJibzogeyByZXN0b3JhdGlvbklkZW50aWZpZXIgfSB9O1xuICAgICAgICBtZXRob2QuY2FsbChoaXN0b3J5LCBzdGF0ZSwgXCJcIiwgbG9jYXRpb24uaHJlZik7XG4gICAgICAgIHRoaXMubG9jYXRpb24gPSBsb2NhdGlvbjtcbiAgICAgICAgdGhpcy5yZXN0b3JhdGlvbklkZW50aWZpZXIgPSByZXN0b3JhdGlvbklkZW50aWZpZXI7XG4gICAgfVxuICAgIGdldFJlc3RvcmF0aW9uRGF0YUZvcklkZW50aWZpZXIocmVzdG9yYXRpb25JZGVudGlmaWVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlc3RvcmF0aW9uRGF0YVtyZXN0b3JhdGlvbklkZW50aWZpZXJdIHx8IHt9O1xuICAgIH1cbiAgICB1cGRhdGVSZXN0b3JhdGlvbkRhdGEoYWRkaXRpb25hbERhdGEpIHtcbiAgICAgICAgY29uc3QgeyByZXN0b3JhdGlvbklkZW50aWZpZXIgfSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IHJlc3RvcmF0aW9uRGF0YSA9IHRoaXMucmVzdG9yYXRpb25EYXRhW3Jlc3RvcmF0aW9uSWRlbnRpZmllcl07XG4gICAgICAgIHRoaXMucmVzdG9yYXRpb25EYXRhW3Jlc3RvcmF0aW9uSWRlbnRpZmllcl0gPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHJlc3RvcmF0aW9uRGF0YSksIGFkZGl0aW9uYWxEYXRhKTtcbiAgICB9XG4gICAgYXNzdW1lQ29udHJvbE9mU2Nyb2xsUmVzdG9yYXRpb24oKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKCF0aGlzLnByZXZpb3VzU2Nyb2xsUmVzdG9yYXRpb24pIHtcbiAgICAgICAgICAgIHRoaXMucHJldmlvdXNTY3JvbGxSZXN0b3JhdGlvbiA9IChfYSA9IGhpc3Rvcnkuc2Nyb2xsUmVzdG9yYXRpb24pICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFwiYXV0b1wiO1xuICAgICAgICAgICAgaGlzdG9yeS5zY3JvbGxSZXN0b3JhdGlvbiA9IFwibWFudWFsXCI7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmVsaW5xdWlzaENvbnRyb2xPZlNjcm9sbFJlc3RvcmF0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5wcmV2aW91c1Njcm9sbFJlc3RvcmF0aW9uKSB7XG4gICAgICAgICAgICBoaXN0b3J5LnNjcm9sbFJlc3RvcmF0aW9uID0gdGhpcy5wcmV2aW91c1Njcm9sbFJlc3RvcmF0aW9uO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMucHJldmlvdXNTY3JvbGxSZXN0b3JhdGlvbjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzaG91bGRIYW5kbGVQb3BTdGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFnZUlzTG9hZGVkKCk7XG4gICAgfVxuICAgIHBhZ2VJc0xvYWRlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFnZUxvYWRlZCB8fCBkb2N1bWVudC5yZWFkeVN0YXRlID09IFwiY29tcGxldGVcIjtcbiAgICB9XG59XG5cbmNsYXNzIExpbmtDbGlja09ic2VydmVyIHtcbiAgICBjb25zdHJ1Y3RvcihkZWxlZ2F0ZSkge1xuICAgICAgICB0aGlzLnN0YXJ0ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jbGlja0NhcHR1cmVkID0gKCkgPT4ge1xuICAgICAgICAgICAgcmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXMuY2xpY2tCdWJibGVkLCBmYWxzZSk7XG4gICAgICAgICAgICBhZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5jbGlja0J1YmJsZWQsIGZhbHNlKTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5jbGlja0J1YmJsZWQgPSAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNsaWNrRXZlbnRJc1NpZ25pZmljYW50KGV2ZW50KSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IChldmVudC5jb21wb3NlZFBhdGggJiYgZXZlbnQuY29tcG9zZWRQYXRoKClbMF0pIHx8IGV2ZW50LnRhcmdldDtcbiAgICAgICAgICAgICAgICBjb25zdCBsaW5rID0gdGhpcy5maW5kTGlua0Zyb21DbGlja1RhcmdldCh0YXJnZXQpO1xuICAgICAgICAgICAgICAgIGlmIChsaW5rKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxvY2F0aW9uID0gdGhpcy5nZXRMb2NhdGlvbkZvckxpbmsobGluayk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRlbGVnYXRlLndpbGxGb2xsb3dMaW5rVG9Mb2NhdGlvbihsaW5rLCBsb2NhdGlvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlbGVnYXRlLmZvbGxvd2VkTGlua1RvTG9jYXRpb24obGluaywgbG9jYXRpb24pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmRlbGVnYXRlID0gZGVsZWdhdGU7XG4gICAgfVxuICAgIHN0YXJ0KCkge1xuICAgICAgICBpZiAoIXRoaXMuc3RhcnRlZCkge1xuICAgICAgICAgICAgYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXMuY2xpY2tDYXB0dXJlZCwgdHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0b3AoKSB7XG4gICAgICAgIGlmICh0aGlzLnN0YXJ0ZWQpIHtcbiAgICAgICAgICAgIHJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzLmNsaWNrQ2FwdHVyZWQsIHRydWUpO1xuICAgICAgICAgICAgdGhpcy5zdGFydGVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2xpY2tFdmVudElzU2lnbmlmaWNhbnQoZXZlbnQpIHtcbiAgICAgICAgcmV0dXJuICEoKGV2ZW50LnRhcmdldCAmJiBldmVudC50YXJnZXQuaXNDb250ZW50RWRpdGFibGUpXG4gICAgICAgICAgICB8fCBldmVudC5kZWZhdWx0UHJldmVudGVkXG4gICAgICAgICAgICB8fCBldmVudC53aGljaCA+IDFcbiAgICAgICAgICAgIHx8IGV2ZW50LmFsdEtleVxuICAgICAgICAgICAgfHwgZXZlbnQuY3RybEtleVxuICAgICAgICAgICAgfHwgZXZlbnQubWV0YUtleVxuICAgICAgICAgICAgfHwgZXZlbnQuc2hpZnRLZXkpO1xuICAgIH1cbiAgICBmaW5kTGlua0Zyb21DbGlja1RhcmdldCh0YXJnZXQpIHtcbiAgICAgICAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIEVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiB0YXJnZXQuY2xvc2VzdChcImFbaHJlZl06bm90KFt0YXJnZXRePV9dKTpub3QoW2Rvd25sb2FkXSlcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0TG9jYXRpb25Gb3JMaW5rKGxpbmspIHtcbiAgICAgICAgcmV0dXJuIGV4cGFuZFVSTChsaW5rLmdldEF0dHJpYnV0ZShcImhyZWZcIikgfHwgXCJcIik7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBpc0FjdGlvbihhY3Rpb24pIHtcbiAgICByZXR1cm4gYWN0aW9uID09IFwiYWR2YW5jZVwiIHx8IGFjdGlvbiA9PSBcInJlcGxhY2VcIiB8fCBhY3Rpb24gPT0gXCJyZXN0b3JlXCI7XG59XG5cbmNsYXNzIE5hdmlnYXRvciB7XG4gICAgY29uc3RydWN0b3IoZGVsZWdhdGUpIHtcbiAgICAgICAgdGhpcy5kZWxlZ2F0ZSA9IGRlbGVnYXRlO1xuICAgIH1cbiAgICBwcm9wb3NlVmlzaXQobG9jYXRpb24sIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBpZiAodGhpcy5kZWxlZ2F0ZS5hbGxvd3NWaXNpdGluZ0xvY2F0aW9uV2l0aEFjdGlvbihsb2NhdGlvbiwgb3B0aW9ucy5hY3Rpb24pKSB7XG4gICAgICAgICAgICB0aGlzLmRlbGVnYXRlLnZpc2l0UHJvcG9zZWRUb0xvY2F0aW9uKGxvY2F0aW9uLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGFydFZpc2l0KGxvY2F0YWJsZSwgcmVzdG9yYXRpb25JZGVudGlmaWVyLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgdGhpcy5zdG9wKCk7XG4gICAgICAgIHRoaXMuY3VycmVudFZpc2l0ID0gbmV3IFZpc2l0KHRoaXMsIGV4cGFuZFVSTChsb2NhdGFibGUpLCByZXN0b3JhdGlvbklkZW50aWZpZXIsIE9iamVjdC5hc3NpZ24oeyByZWZlcnJlcjogdGhpcy5sb2NhdGlvbiB9LCBvcHRpb25zKSk7XG4gICAgICAgIHRoaXMuY3VycmVudFZpc2l0LnN0YXJ0KCk7XG4gICAgfVxuICAgIHN1Ym1pdEZvcm0oZm9ybSwgc3VibWl0dGVyKSB7XG4gICAgICAgIHRoaXMuc3RvcCgpO1xuICAgICAgICB0aGlzLmZvcm1TdWJtaXNzaW9uID0gbmV3IEZvcm1TdWJtaXNzaW9uKHRoaXMsIGZvcm0sIHN1Ym1pdHRlciwgdHJ1ZSk7XG4gICAgICAgIGlmICh0aGlzLmZvcm1TdWJtaXNzaW9uLmlzSWRlbXBvdGVudCkge1xuICAgICAgICAgICAgdGhpcy5wcm9wb3NlVmlzaXQodGhpcy5mb3JtU3VibWlzc2lvbi5mZXRjaFJlcXVlc3QudXJsLCB7IGFjdGlvbjogdGhpcy5nZXRBY3Rpb25Gb3JGb3JtU3VibWlzc2lvbih0aGlzLmZvcm1TdWJtaXNzaW9uKSB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybVN1Ym1pc3Npb24uc3RhcnQoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdG9wKCkge1xuICAgICAgICBpZiAodGhpcy5mb3JtU3VibWlzc2lvbikge1xuICAgICAgICAgICAgdGhpcy5mb3JtU3VibWlzc2lvbi5zdG9wKCk7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5mb3JtU3VibWlzc2lvbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jdXJyZW50VmlzaXQpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFZpc2l0LmNhbmNlbCgpO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuY3VycmVudFZpc2l0O1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBhZGFwdGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS5hZGFwdGVyO1xuICAgIH1cbiAgICBnZXQgdmlldygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUudmlldztcbiAgICB9XG4gICAgZ2V0IGhpc3RvcnkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLmhpc3Rvcnk7XG4gICAgfVxuICAgIGZvcm1TdWJtaXNzaW9uU3RhcnRlZChmb3JtU3VibWlzc2lvbikge1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYWRhcHRlci5mb3JtU3VibWlzc2lvblN0YXJ0ZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRoaXMuYWRhcHRlci5mb3JtU3VibWlzc2lvblN0YXJ0ZWQoZm9ybVN1Ym1pc3Npb24pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIGZvcm1TdWJtaXNzaW9uU3VjY2VlZGVkV2l0aFJlc3BvbnNlKGZvcm1TdWJtaXNzaW9uLCBmZXRjaFJlc3BvbnNlKSB7XG4gICAgICAgIGlmIChmb3JtU3VibWlzc2lvbiA9PSB0aGlzLmZvcm1TdWJtaXNzaW9uKSB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZUhUTUwgPSBhd2FpdCBmZXRjaFJlc3BvbnNlLnJlc3BvbnNlSFRNTDtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZUhUTUwpIHtcbiAgICAgICAgICAgICAgICBpZiAoZm9ybVN1Ym1pc3Npb24ubWV0aG9kICE9IEZldGNoTWV0aG9kLmdldCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXcuY2xlYXJTbmFwc2hvdENhY2hlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHsgc3RhdHVzQ29kZSB9ID0gZmV0Y2hSZXNwb25zZTtcbiAgICAgICAgICAgICAgICBjb25zdCB2aXNpdE9wdGlvbnMgPSB7IHJlc3BvbnNlOiB7IHN0YXR1c0NvZGUsIHJlc3BvbnNlSFRNTCB9IH07XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wb3NlVmlzaXQoZmV0Y2hSZXNwb25zZS5sb2NhdGlvbiwgdmlzaXRPcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBmb3JtU3VibWlzc2lvbkZhaWxlZFdpdGhSZXNwb25zZShmb3JtU3VibWlzc2lvbiwgZmV0Y2hSZXNwb25zZSkge1xuICAgICAgICBjb25zdCByZXNwb25zZUhUTUwgPSBhd2FpdCBmZXRjaFJlc3BvbnNlLnJlc3BvbnNlSFRNTDtcbiAgICAgICAgaWYgKHJlc3BvbnNlSFRNTCkge1xuICAgICAgICAgICAgY29uc3Qgc25hcHNob3QgPSBQYWdlU25hcHNob3QuZnJvbUhUTUxTdHJpbmcocmVzcG9uc2VIVE1MKTtcbiAgICAgICAgICAgIGlmIChmZXRjaFJlc3BvbnNlLnNlcnZlckVycm9yKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy52aWV3LnJlbmRlckVycm9yKHNuYXBzaG90KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMudmlldy5yZW5kZXJQYWdlKHNuYXBzaG90KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudmlldy5zY3JvbGxUb1RvcCgpO1xuICAgICAgICAgICAgdGhpcy52aWV3LmNsZWFyU25hcHNob3RDYWNoZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZvcm1TdWJtaXNzaW9uRXJyb3JlZChmb3JtU3VibWlzc2lvbiwgZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgfVxuICAgIGZvcm1TdWJtaXNzaW9uRmluaXNoZWQoZm9ybVN1Ym1pc3Npb24pIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFkYXB0ZXIuZm9ybVN1Ym1pc3Npb25GaW5pc2hlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhpcy5hZGFwdGVyLmZvcm1TdWJtaXNzaW9uRmluaXNoZWQoZm9ybVN1Ym1pc3Npb24pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZpc2l0U3RhcnRlZCh2aXNpdCkge1xuICAgICAgICB0aGlzLmRlbGVnYXRlLnZpc2l0U3RhcnRlZCh2aXNpdCk7XG4gICAgfVxuICAgIHZpc2l0Q29tcGxldGVkKHZpc2l0KSB7XG4gICAgICAgIHRoaXMuZGVsZWdhdGUudmlzaXRDb21wbGV0ZWQodmlzaXQpO1xuICAgIH1cbiAgICBsb2NhdGlvbldpdGhBY3Rpb25Jc1NhbWVQYWdlKGxvY2F0aW9uLCBhY3Rpb24pIHtcbiAgICAgICAgY29uc3QgYW5jaG9yID0gZ2V0QW5jaG9yKGxvY2F0aW9uKTtcbiAgICAgICAgY29uc3QgY3VycmVudEFuY2hvciA9IGdldEFuY2hvcih0aGlzLnZpZXcubGFzdFJlbmRlcmVkTG9jYXRpb24pO1xuICAgICAgICBjb25zdCBpc1Jlc3RvcmF0aW9uVG9Ub3AgPSBhY3Rpb24gPT09ICdyZXN0b3JlJyAmJiB0eXBlb2YgYW5jaG9yID09PSAndW5kZWZpbmVkJztcbiAgICAgICAgcmV0dXJuIGFjdGlvbiAhPT0gXCJyZXBsYWNlXCIgJiZcbiAgICAgICAgICAgIGdldFJlcXVlc3RVUkwobG9jYXRpb24pID09PSBnZXRSZXF1ZXN0VVJMKHRoaXMudmlldy5sYXN0UmVuZGVyZWRMb2NhdGlvbikgJiZcbiAgICAgICAgICAgIChpc1Jlc3RvcmF0aW9uVG9Ub3AgfHwgKGFuY2hvciAhPSBudWxsICYmIGFuY2hvciAhPT0gY3VycmVudEFuY2hvcikpO1xuICAgIH1cbiAgICB2aXNpdFNjcm9sbGVkVG9TYW1lUGFnZUxvY2F0aW9uKG9sZFVSTCwgbmV3VVJMKSB7XG4gICAgICAgIHRoaXMuZGVsZWdhdGUudmlzaXRTY3JvbGxlZFRvU2FtZVBhZ2VMb2NhdGlvbihvbGRVUkwsIG5ld1VSTCk7XG4gICAgfVxuICAgIGdldCBsb2NhdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGlzdG9yeS5sb2NhdGlvbjtcbiAgICB9XG4gICAgZ2V0IHJlc3RvcmF0aW9uSWRlbnRpZmllcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGlzdG9yeS5yZXN0b3JhdGlvbklkZW50aWZpZXI7XG4gICAgfVxuICAgIGdldEFjdGlvbkZvckZvcm1TdWJtaXNzaW9uKGZvcm1TdWJtaXNzaW9uKSB7XG4gICAgICAgIGNvbnN0IHsgZm9ybUVsZW1lbnQsIHN1Ym1pdHRlciB9ID0gZm9ybVN1Ym1pc3Npb247XG4gICAgICAgIGNvbnN0IGFjdGlvbiA9IChzdWJtaXR0ZXIgPT09IG51bGwgfHwgc3VibWl0dGVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzdWJtaXR0ZXIuZ2V0QXR0cmlidXRlKFwiZGF0YS10dXJiby1hY3Rpb25cIikpIHx8IGZvcm1FbGVtZW50LmdldEF0dHJpYnV0ZShcImRhdGEtdHVyYm8tYWN0aW9uXCIpO1xuICAgICAgICByZXR1cm4gaXNBY3Rpb24oYWN0aW9uKSA/IGFjdGlvbiA6IFwiYWR2YW5jZVwiO1xuICAgIH1cbn1cblxudmFyIFBhZ2VTdGFnZTtcbihmdW5jdGlvbiAoUGFnZVN0YWdlKSB7XG4gICAgUGFnZVN0YWdlW1BhZ2VTdGFnZVtcImluaXRpYWxcIl0gPSAwXSA9IFwiaW5pdGlhbFwiO1xuICAgIFBhZ2VTdGFnZVtQYWdlU3RhZ2VbXCJsb2FkaW5nXCJdID0gMV0gPSBcImxvYWRpbmdcIjtcbiAgICBQYWdlU3RhZ2VbUGFnZVN0YWdlW1wiaW50ZXJhY3RpdmVcIl0gPSAyXSA9IFwiaW50ZXJhY3RpdmVcIjtcbiAgICBQYWdlU3RhZ2VbUGFnZVN0YWdlW1wiY29tcGxldGVcIl0gPSAzXSA9IFwiY29tcGxldGVcIjtcbn0pKFBhZ2VTdGFnZSB8fCAoUGFnZVN0YWdlID0ge30pKTtcbmNsYXNzIFBhZ2VPYnNlcnZlciB7XG4gICAgY29uc3RydWN0b3IoZGVsZWdhdGUpIHtcbiAgICAgICAgdGhpcy5zdGFnZSA9IFBhZ2VTdGFnZS5pbml0aWFsO1xuICAgICAgICB0aGlzLnN0YXJ0ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pbnRlcnByZXRSZWFkeVN0YXRlID0gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyByZWFkeVN0YXRlIH0gPSB0aGlzO1xuICAgICAgICAgICAgaWYgKHJlYWR5U3RhdGUgPT0gXCJpbnRlcmFjdGl2ZVwiKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYWdlSXNJbnRlcmFjdGl2ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAocmVhZHlTdGF0ZSA9PSBcImNvbXBsZXRlXCIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBhZ2VJc0NvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMucGFnZVdpbGxVbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRlbGVnYXRlLnBhZ2VXaWxsVW5sb2FkKCk7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZGVsZWdhdGUgPSBkZWxlZ2F0ZTtcbiAgICB9XG4gICAgc3RhcnQoKSB7XG4gICAgICAgIGlmICghdGhpcy5zdGFydGVkKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zdGFnZSA9PSBQYWdlU3RhZ2UuaW5pdGlhbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhZ2UgPSBQYWdlU3RhZ2UubG9hZGluZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJyZWFkeXN0YXRlY2hhbmdlXCIsIHRoaXMuaW50ZXJwcmV0UmVhZHlTdGF0ZSwgZmFsc2UpO1xuICAgICAgICAgICAgYWRkRXZlbnRMaXN0ZW5lcihcInBhZ2VoaWRlXCIsIHRoaXMucGFnZVdpbGxVbmxvYWQsIGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RvcCgpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RhcnRlZCkge1xuICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlYWR5c3RhdGVjaGFuZ2VcIiwgdGhpcy5pbnRlcnByZXRSZWFkeVN0YXRlLCBmYWxzZSk7XG4gICAgICAgICAgICByZW1vdmVFdmVudExpc3RlbmVyKFwicGFnZWhpZGVcIiwgdGhpcy5wYWdlV2lsbFVubG9hZCwgZmFsc2UpO1xuICAgICAgICAgICAgdGhpcy5zdGFydGVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcGFnZUlzSW50ZXJhY3RpdmUoKSB7XG4gICAgICAgIGlmICh0aGlzLnN0YWdlID09IFBhZ2VTdGFnZS5sb2FkaW5nKSB7XG4gICAgICAgICAgICB0aGlzLnN0YWdlID0gUGFnZVN0YWdlLmludGVyYWN0aXZlO1xuICAgICAgICAgICAgdGhpcy5kZWxlZ2F0ZS5wYWdlQmVjYW1lSW50ZXJhY3RpdmUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwYWdlSXNDb21wbGV0ZSgpIHtcbiAgICAgICAgdGhpcy5wYWdlSXNJbnRlcmFjdGl2ZSgpO1xuICAgICAgICBpZiAodGhpcy5zdGFnZSA9PSBQYWdlU3RhZ2UuaW50ZXJhY3RpdmUpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhZ2UgPSBQYWdlU3RhZ2UuY29tcGxldGU7XG4gICAgICAgICAgICB0aGlzLmRlbGVnYXRlLnBhZ2VMb2FkZWQoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgcmVhZHlTdGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIGRvY3VtZW50LnJlYWR5U3RhdGU7XG4gICAgfVxufVxuXG5jbGFzcyBTY3JvbGxPYnNlcnZlciB7XG4gICAgY29uc3RydWN0b3IoZGVsZWdhdGUpIHtcbiAgICAgICAgdGhpcy5zdGFydGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMub25TY3JvbGwgPSAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVBvc2l0aW9uKHsgeDogd2luZG93LnBhZ2VYT2Zmc2V0LCB5OiB3aW5kb3cucGFnZVlPZmZzZXQgfSk7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZGVsZWdhdGUgPSBkZWxlZ2F0ZTtcbiAgICB9XG4gICAgc3RhcnQoKSB7XG4gICAgICAgIGlmICghdGhpcy5zdGFydGVkKSB7XG4gICAgICAgICAgICBhZGRFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIHRoaXMub25TY3JvbGwsIGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMub25TY3JvbGwoKTtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RvcCgpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RhcnRlZCkge1xuICAgICAgICAgICAgcmVtb3ZlRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCB0aGlzLm9uU2Nyb2xsLCBmYWxzZSk7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0ZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB1cGRhdGVQb3NpdGlvbihwb3NpdGlvbikge1xuICAgICAgICB0aGlzLmRlbGVnYXRlLnNjcm9sbFBvc2l0aW9uQ2hhbmdlZChwb3NpdGlvbik7XG4gICAgfVxufVxuXG5jbGFzcyBTdHJlYW1PYnNlcnZlciB7XG4gICAgY29uc3RydWN0b3IoZGVsZWdhdGUpIHtcbiAgICAgICAgdGhpcy5zb3VyY2VzID0gbmV3IFNldDtcbiAgICAgICAgdGhpcy5zdGFydGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaW5zcGVjdEZldGNoUmVzcG9uc2UgPSAoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGZldGNoUmVzcG9uc2VGcm9tRXZlbnQoZXZlbnQpO1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlICYmIGZldGNoUmVzcG9uc2VJc1N0cmVhbShyZXNwb25zZSkpIHtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVjZWl2ZU1lc3NhZ2VSZXNwb25zZShyZXNwb25zZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnJlY2VpdmVNZXNzYWdlRXZlbnQgPSAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnN0YXJ0ZWQgJiYgdHlwZW9mIGV2ZW50LmRhdGEgPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIHRoaXMucmVjZWl2ZU1lc3NhZ2VIVE1MKGV2ZW50LmRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmRlbGVnYXRlID0gZGVsZWdhdGU7XG4gICAgfVxuICAgIHN0YXJ0KCkge1xuICAgICAgICBpZiAoIXRoaXMuc3RhcnRlZCkge1xuICAgICAgICAgICAgdGhpcy5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGFkZEV2ZW50TGlzdGVuZXIoXCJ0dXJibzpiZWZvcmUtZmV0Y2gtcmVzcG9uc2VcIiwgdGhpcy5pbnNwZWN0RmV0Y2hSZXNwb25zZSwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0b3AoKSB7XG4gICAgICAgIGlmICh0aGlzLnN0YXJ0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgcmVtb3ZlRXZlbnRMaXN0ZW5lcihcInR1cmJvOmJlZm9yZS1mZXRjaC1yZXNwb25zZVwiLCB0aGlzLmluc3BlY3RGZXRjaFJlc3BvbnNlLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29ubmVjdFN0cmVhbVNvdXJjZShzb3VyY2UpIHtcbiAgICAgICAgaWYgKCF0aGlzLnN0cmVhbVNvdXJjZUlzQ29ubmVjdGVkKHNvdXJjZSkpIHtcbiAgICAgICAgICAgIHRoaXMuc291cmNlcy5hZGQoc291cmNlKTtcbiAgICAgICAgICAgIHNvdXJjZS5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLnJlY2VpdmVNZXNzYWdlRXZlbnQsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBkaXNjb25uZWN0U3RyZWFtU291cmNlKHNvdXJjZSkge1xuICAgICAgICBpZiAodGhpcy5zdHJlYW1Tb3VyY2VJc0Nvbm5lY3RlZChzb3VyY2UpKSB7XG4gICAgICAgICAgICB0aGlzLnNvdXJjZXMuZGVsZXRlKHNvdXJjZSk7XG4gICAgICAgICAgICBzb3VyY2UucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5yZWNlaXZlTWVzc2FnZUV2ZW50LCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RyZWFtU291cmNlSXNDb25uZWN0ZWQoc291cmNlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNvdXJjZXMuaGFzKHNvdXJjZSk7XG4gICAgfVxuICAgIGFzeW5jIHJlY2VpdmVNZXNzYWdlUmVzcG9uc2UocmVzcG9uc2UpIHtcbiAgICAgICAgY29uc3QgaHRtbCA9IGF3YWl0IHJlc3BvbnNlLnJlc3BvbnNlSFRNTDtcbiAgICAgICAgaWYgKGh0bWwpIHtcbiAgICAgICAgICAgIHRoaXMucmVjZWl2ZU1lc3NhZ2VIVE1MKGh0bWwpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJlY2VpdmVNZXNzYWdlSFRNTChodG1sKSB7XG4gICAgICAgIHRoaXMuZGVsZWdhdGUucmVjZWl2ZWRNZXNzYWdlRnJvbVN0cmVhbShuZXcgU3RyZWFtTWVzc2FnZShodG1sKSk7XG4gICAgfVxufVxuZnVuY3Rpb24gZmV0Y2hSZXNwb25zZUZyb21FdmVudChldmVudCkge1xuICAgIHZhciBfYTtcbiAgICBjb25zdCBmZXRjaFJlc3BvbnNlID0gKF9hID0gZXZlbnQuZGV0YWlsKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZmV0Y2hSZXNwb25zZTtcbiAgICBpZiAoZmV0Y2hSZXNwb25zZSBpbnN0YW5jZW9mIEZldGNoUmVzcG9uc2UpIHtcbiAgICAgICAgcmV0dXJuIGZldGNoUmVzcG9uc2U7XG4gICAgfVxufVxuZnVuY3Rpb24gZmV0Y2hSZXNwb25zZUlzU3RyZWFtKHJlc3BvbnNlKSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gKF9hID0gcmVzcG9uc2UuY29udGVudFR5cGUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFwiXCI7XG4gICAgcmV0dXJuIGNvbnRlbnRUeXBlLnN0YXJ0c1dpdGgoU3RyZWFtTWVzc2FnZS5jb250ZW50VHlwZSk7XG59XG5cbmNsYXNzIEVycm9yUmVuZGVyZXIgZXh0ZW5kcyBSZW5kZXJlciB7XG4gICAgYXN5bmMgcmVuZGVyKCkge1xuICAgICAgICB0aGlzLnJlcGxhY2VIZWFkQW5kQm9keSgpO1xuICAgICAgICB0aGlzLmFjdGl2YXRlU2NyaXB0RWxlbWVudHMoKTtcbiAgICB9XG4gICAgcmVwbGFjZUhlYWRBbmRCb2R5KCkge1xuICAgICAgICBjb25zdCB7IGRvY3VtZW50RWxlbWVudCwgaGVhZCwgYm9keSB9ID0gZG9jdW1lbnQ7XG4gICAgICAgIGRvY3VtZW50RWxlbWVudC5yZXBsYWNlQ2hpbGQodGhpcy5uZXdIZWFkLCBoZWFkKTtcbiAgICAgICAgZG9jdW1lbnRFbGVtZW50LnJlcGxhY2VDaGlsZCh0aGlzLm5ld0VsZW1lbnQsIGJvZHkpO1xuICAgIH1cbiAgICBhY3RpdmF0ZVNjcmlwdEVsZW1lbnRzKCkge1xuICAgICAgICBmb3IgKGNvbnN0IHJlcGxhY2VhYmxlRWxlbWVudCBvZiB0aGlzLnNjcmlwdEVsZW1lbnRzKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnROb2RlID0gcmVwbGFjZWFibGVFbGVtZW50LnBhcmVudE5vZGU7XG4gICAgICAgICAgICBpZiAocGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmNyZWF0ZVNjcmlwdEVsZW1lbnQocmVwbGFjZWFibGVFbGVtZW50KTtcbiAgICAgICAgICAgICAgICBwYXJlbnROb2RlLnJlcGxhY2VDaGlsZChlbGVtZW50LCByZXBsYWNlYWJsZUVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBuZXdIZWFkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5uZXdTbmFwc2hvdC5oZWFkU25hcHNob3QuZWxlbWVudDtcbiAgICB9XG4gICAgZ2V0IHNjcmlwdEVsZW1lbnRzKCkge1xuICAgICAgICByZXR1cm4gWy4uLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFwic2NyaXB0XCIpXTtcbiAgICB9XG59XG5cbmNsYXNzIFBhZ2VSZW5kZXJlciBleHRlbmRzIFJlbmRlcmVyIHtcbiAgICBnZXQgc2hvdWxkUmVuZGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5uZXdTbmFwc2hvdC5pc1Zpc2l0YWJsZSAmJiB0aGlzLnRyYWNrZWRFbGVtZW50c0FyZUlkZW50aWNhbDtcbiAgICB9XG4gICAgcHJlcGFyZVRvUmVuZGVyKCkge1xuICAgICAgICB0aGlzLm1lcmdlSGVhZCgpO1xuICAgIH1cbiAgICBhc3luYyByZW5kZXIoKSB7XG4gICAgICAgIHRoaXMucmVwbGFjZUJvZHkoKTtcbiAgICB9XG4gICAgZmluaXNoUmVuZGVyaW5nKCkge1xuICAgICAgICBzdXBlci5maW5pc2hSZW5kZXJpbmcoKTtcbiAgICAgICAgaWYgKCF0aGlzLmlzUHJldmlldykge1xuICAgICAgICAgICAgdGhpcy5mb2N1c0ZpcnN0QXV0b2ZvY3VzYWJsZUVsZW1lbnQoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgY3VycmVudEhlYWRTbmFwc2hvdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFNuYXBzaG90LmhlYWRTbmFwc2hvdDtcbiAgICB9XG4gICAgZ2V0IG5ld0hlYWRTbmFwc2hvdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmV3U25hcHNob3QuaGVhZFNuYXBzaG90O1xuICAgIH1cbiAgICBnZXQgbmV3RWxlbWVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmV3U25hcHNob3QuZWxlbWVudDtcbiAgICB9XG4gICAgbWVyZ2VIZWFkKCkge1xuICAgICAgICB0aGlzLmNvcHlOZXdIZWFkU3R5bGVzaGVldEVsZW1lbnRzKCk7XG4gICAgICAgIHRoaXMuY29weU5ld0hlYWRTY3JpcHRFbGVtZW50cygpO1xuICAgICAgICB0aGlzLnJlbW92ZUN1cnJlbnRIZWFkUHJvdmlzaW9uYWxFbGVtZW50cygpO1xuICAgICAgICB0aGlzLmNvcHlOZXdIZWFkUHJvdmlzaW9uYWxFbGVtZW50cygpO1xuICAgIH1cbiAgICByZXBsYWNlQm9keSgpIHtcbiAgICAgICAgdGhpcy5wcmVzZXJ2aW5nUGVybWFuZW50RWxlbWVudHMoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmF0ZU5ld0JvZHkoKTtcbiAgICAgICAgICAgIHRoaXMuYXNzaWduTmV3Qm9keSgpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZ2V0IHRyYWNrZWRFbGVtZW50c0FyZUlkZW50aWNhbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudEhlYWRTbmFwc2hvdC50cmFja2VkRWxlbWVudFNpZ25hdHVyZSA9PSB0aGlzLm5ld0hlYWRTbmFwc2hvdC50cmFja2VkRWxlbWVudFNpZ25hdHVyZTtcbiAgICB9XG4gICAgY29weU5ld0hlYWRTdHlsZXNoZWV0RWxlbWVudHMoKSB7XG4gICAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiB0aGlzLm5ld0hlYWRTdHlsZXNoZWV0RWxlbWVudHMpIHtcbiAgICAgICAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29weU5ld0hlYWRTY3JpcHRFbGVtZW50cygpIHtcbiAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIHRoaXMubmV3SGVhZFNjcmlwdEVsZW1lbnRzKSB7XG4gICAgICAgICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHRoaXMuY3JlYXRlU2NyaXB0RWxlbWVudChlbGVtZW50KSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmVtb3ZlQ3VycmVudEhlYWRQcm92aXNpb25hbEVsZW1lbnRzKCkge1xuICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgdGhpcy5jdXJyZW50SGVhZFByb3Zpc2lvbmFsRWxlbWVudHMpIHtcbiAgICAgICAgICAgIGRvY3VtZW50LmhlYWQucmVtb3ZlQ2hpbGQoZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29weU5ld0hlYWRQcm92aXNpb25hbEVsZW1lbnRzKCkge1xuICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgdGhpcy5uZXdIZWFkUHJvdmlzaW9uYWxFbGVtZW50cykge1xuICAgICAgICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChlbGVtZW50KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhY3RpdmF0ZU5ld0JvZHkoKSB7XG4gICAgICAgIGRvY3VtZW50LmFkb3B0Tm9kZSh0aGlzLm5ld0VsZW1lbnQpO1xuICAgICAgICB0aGlzLmFjdGl2YXRlTmV3Qm9keVNjcmlwdEVsZW1lbnRzKCk7XG4gICAgfVxuICAgIGFjdGl2YXRlTmV3Qm9keVNjcmlwdEVsZW1lbnRzKCkge1xuICAgICAgICBmb3IgKGNvbnN0IGluZXJ0U2NyaXB0RWxlbWVudCBvZiB0aGlzLm5ld0JvZHlTY3JpcHRFbGVtZW50cykge1xuICAgICAgICAgICAgY29uc3QgYWN0aXZhdGVkU2NyaXB0RWxlbWVudCA9IHRoaXMuY3JlYXRlU2NyaXB0RWxlbWVudChpbmVydFNjcmlwdEVsZW1lbnQpO1xuICAgICAgICAgICAgaW5lcnRTY3JpcHRFbGVtZW50LnJlcGxhY2VXaXRoKGFjdGl2YXRlZFNjcmlwdEVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzc2lnbk5ld0JvZHkoKSB7XG4gICAgICAgIGlmIChkb2N1bWVudC5ib2R5ICYmIHRoaXMubmV3RWxlbWVudCBpbnN0YW5jZW9mIEhUTUxCb2R5RWxlbWVudCkge1xuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5yZXBsYWNlV2l0aCh0aGlzLm5ld0VsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMubmV3RWxlbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IG5ld0hlYWRTdHlsZXNoZWV0RWxlbWVudHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5ld0hlYWRTbmFwc2hvdC5nZXRTdHlsZXNoZWV0RWxlbWVudHNOb3RJblNuYXBzaG90KHRoaXMuY3VycmVudEhlYWRTbmFwc2hvdCk7XG4gICAgfVxuICAgIGdldCBuZXdIZWFkU2NyaXB0RWxlbWVudHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5ld0hlYWRTbmFwc2hvdC5nZXRTY3JpcHRFbGVtZW50c05vdEluU25hcHNob3QodGhpcy5jdXJyZW50SGVhZFNuYXBzaG90KTtcbiAgICB9XG4gICAgZ2V0IGN1cnJlbnRIZWFkUHJvdmlzaW9uYWxFbGVtZW50cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudEhlYWRTbmFwc2hvdC5wcm92aXNpb25hbEVsZW1lbnRzO1xuICAgIH1cbiAgICBnZXQgbmV3SGVhZFByb3Zpc2lvbmFsRWxlbWVudHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5ld0hlYWRTbmFwc2hvdC5wcm92aXNpb25hbEVsZW1lbnRzO1xuICAgIH1cbiAgICBnZXQgbmV3Qm9keVNjcmlwdEVsZW1lbnRzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5uZXdFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJzY3JpcHRcIik7XG4gICAgfVxufVxuXG5jbGFzcyBTbmFwc2hvdENhY2hlIHtcbiAgICBjb25zdHJ1Y3RvcihzaXplKSB7XG4gICAgICAgIHRoaXMua2V5cyA9IFtdO1xuICAgICAgICB0aGlzLnNuYXBzaG90cyA9IHt9O1xuICAgICAgICB0aGlzLnNpemUgPSBzaXplO1xuICAgIH1cbiAgICBoYXMobG9jYXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRvQ2FjaGVLZXkobG9jYXRpb24pIGluIHRoaXMuc25hcHNob3RzO1xuICAgIH1cbiAgICBnZXQobG9jYXRpb24pIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzKGxvY2F0aW9uKSkge1xuICAgICAgICAgICAgY29uc3Qgc25hcHNob3QgPSB0aGlzLnJlYWQobG9jYXRpb24pO1xuICAgICAgICAgICAgdGhpcy50b3VjaChsb2NhdGlvbik7XG4gICAgICAgICAgICByZXR1cm4gc25hcHNob3Q7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHV0KGxvY2F0aW9uLCBzbmFwc2hvdCkge1xuICAgICAgICB0aGlzLndyaXRlKGxvY2F0aW9uLCBzbmFwc2hvdCk7XG4gICAgICAgIHRoaXMudG91Y2gobG9jYXRpb24pO1xuICAgICAgICByZXR1cm4gc25hcHNob3Q7XG4gICAgfVxuICAgIGNsZWFyKCkge1xuICAgICAgICB0aGlzLnNuYXBzaG90cyA9IHt9O1xuICAgIH1cbiAgICByZWFkKGxvY2F0aW9uKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNuYXBzaG90c1t0b0NhY2hlS2V5KGxvY2F0aW9uKV07XG4gICAgfVxuICAgIHdyaXRlKGxvY2F0aW9uLCBzbmFwc2hvdCkge1xuICAgICAgICB0aGlzLnNuYXBzaG90c1t0b0NhY2hlS2V5KGxvY2F0aW9uKV0gPSBzbmFwc2hvdDtcbiAgICB9XG4gICAgdG91Y2gobG9jYXRpb24pIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdG9DYWNoZUtleShsb2NhdGlvbik7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5rZXlzLmluZGV4T2Yoa2V5KTtcbiAgICAgICAgaWYgKGluZGV4ID4gLTEpXG4gICAgICAgICAgICB0aGlzLmtleXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgdGhpcy5rZXlzLnVuc2hpZnQoa2V5KTtcbiAgICAgICAgdGhpcy50cmltKCk7XG4gICAgfVxuICAgIHRyaW0oKSB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIHRoaXMua2V5cy5zcGxpY2UodGhpcy5zaXplKSkge1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuc25hcHNob3RzW2tleV07XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIFBhZ2VWaWV3IGV4dGVuZHMgVmlldyB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMuc25hcHNob3RDYWNoZSA9IG5ldyBTbmFwc2hvdENhY2hlKDEwKTtcbiAgICAgICAgdGhpcy5sYXN0UmVuZGVyZWRMb2NhdGlvbiA9IG5ldyBVUkwobG9jYXRpb24uaHJlZik7XG4gICAgfVxuICAgIHJlbmRlclBhZ2Uoc25hcHNob3QsIGlzUHJldmlldyA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IHJlbmRlcmVyID0gbmV3IFBhZ2VSZW5kZXJlcih0aGlzLnNuYXBzaG90LCBzbmFwc2hvdCwgaXNQcmV2aWV3KTtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyKHJlbmRlcmVyKTtcbiAgICB9XG4gICAgcmVuZGVyRXJyb3Ioc25hcHNob3QpIHtcbiAgICAgICAgY29uc3QgcmVuZGVyZXIgPSBuZXcgRXJyb3JSZW5kZXJlcih0aGlzLnNuYXBzaG90LCBzbmFwc2hvdCwgZmFsc2UpO1xuICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXIocmVuZGVyZXIpO1xuICAgIH1cbiAgICBjbGVhclNuYXBzaG90Q2FjaGUoKSB7XG4gICAgICAgIHRoaXMuc25hcHNob3RDYWNoZS5jbGVhcigpO1xuICAgIH1cbiAgICBhc3luYyBjYWNoZVNuYXBzaG90KCkge1xuICAgICAgICBpZiAodGhpcy5zaG91bGRDYWNoZVNuYXBzaG90KSB7XG4gICAgICAgICAgICB0aGlzLmRlbGVnYXRlLnZpZXdXaWxsQ2FjaGVTbmFwc2hvdCgpO1xuICAgICAgICAgICAgY29uc3QgeyBzbmFwc2hvdCwgbGFzdFJlbmRlcmVkTG9jYXRpb246IGxvY2F0aW9uIH0gPSB0aGlzO1xuICAgICAgICAgICAgYXdhaXQgbmV4dEV2ZW50TG9vcFRpY2soKTtcbiAgICAgICAgICAgIHRoaXMuc25hcHNob3RDYWNoZS5wdXQobG9jYXRpb24sIHNuYXBzaG90LmNsb25lKCkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldENhY2hlZFNuYXBzaG90Rm9yTG9jYXRpb24obG9jYXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc25hcHNob3RDYWNoZS5nZXQobG9jYXRpb24pO1xuICAgIH1cbiAgICBnZXQgc25hcHNob3QoKSB7XG4gICAgICAgIHJldHVybiBQYWdlU25hcHNob3QuZnJvbUVsZW1lbnQodGhpcy5lbGVtZW50KTtcbiAgICB9XG4gICAgZ2V0IHNob3VsZENhY2hlU25hcHNob3QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNuYXBzaG90LmlzQ2FjaGVhYmxlO1xuICAgIH1cbn1cblxuY2xhc3MgU2Vzc2lvbiB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMubmF2aWdhdG9yID0gbmV3IE5hdmlnYXRvcih0aGlzKTtcbiAgICAgICAgdGhpcy5oaXN0b3J5ID0gbmV3IEhpc3RvcnkodGhpcyk7XG4gICAgICAgIHRoaXMudmlldyA9IG5ldyBQYWdlVmlldyh0aGlzLCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpO1xuICAgICAgICB0aGlzLmFkYXB0ZXIgPSBuZXcgQnJvd3NlckFkYXB0ZXIodGhpcyk7XG4gICAgICAgIHRoaXMucGFnZU9ic2VydmVyID0gbmV3IFBhZ2VPYnNlcnZlcih0aGlzKTtcbiAgICAgICAgdGhpcy5jYWNoZU9ic2VydmVyID0gbmV3IENhY2hlT2JzZXJ2ZXIoKTtcbiAgICAgICAgdGhpcy5saW5rQ2xpY2tPYnNlcnZlciA9IG5ldyBMaW5rQ2xpY2tPYnNlcnZlcih0aGlzKTtcbiAgICAgICAgdGhpcy5mb3JtU3VibWl0T2JzZXJ2ZXIgPSBuZXcgRm9ybVN1Ym1pdE9ic2VydmVyKHRoaXMpO1xuICAgICAgICB0aGlzLnNjcm9sbE9ic2VydmVyID0gbmV3IFNjcm9sbE9ic2VydmVyKHRoaXMpO1xuICAgICAgICB0aGlzLnN0cmVhbU9ic2VydmVyID0gbmV3IFN0cmVhbU9ic2VydmVyKHRoaXMpO1xuICAgICAgICB0aGlzLmZyYW1lUmVkaXJlY3RvciA9IG5ldyBGcmFtZVJlZGlyZWN0b3IoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KTtcbiAgICAgICAgdGhpcy5kcml2ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IHRydWU7XG4gICAgICAgIHRoaXMucHJvZ3Jlc3NCYXJEZWxheSA9IDUwMDtcbiAgICAgICAgdGhpcy5zdGFydGVkID0gZmFsc2U7XG4gICAgfVxuICAgIHN0YXJ0KCkge1xuICAgICAgICBpZiAoIXRoaXMuc3RhcnRlZCkge1xuICAgICAgICAgICAgdGhpcy5wYWdlT2JzZXJ2ZXIuc3RhcnQoKTtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVPYnNlcnZlci5zdGFydCgpO1xuICAgICAgICAgICAgdGhpcy5saW5rQ2xpY2tPYnNlcnZlci5zdGFydCgpO1xuICAgICAgICAgICAgdGhpcy5mb3JtU3VibWl0T2JzZXJ2ZXIuc3RhcnQoKTtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsT2JzZXJ2ZXIuc3RhcnQoKTtcbiAgICAgICAgICAgIHRoaXMuc3RyZWFtT2JzZXJ2ZXIuc3RhcnQoKTtcbiAgICAgICAgICAgIHRoaXMuZnJhbWVSZWRpcmVjdG9yLnN0YXJ0KCk7XG4gICAgICAgICAgICB0aGlzLmhpc3Rvcnkuc3RhcnQoKTtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmVuYWJsZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGRpc2FibGUoKSB7XG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IGZhbHNlO1xuICAgIH1cbiAgICBzdG9wKCkge1xuICAgICAgICBpZiAodGhpcy5zdGFydGVkKSB7XG4gICAgICAgICAgICB0aGlzLnBhZ2VPYnNlcnZlci5zdG9wKCk7XG4gICAgICAgICAgICB0aGlzLmNhY2hlT2JzZXJ2ZXIuc3RvcCgpO1xuICAgICAgICAgICAgdGhpcy5saW5rQ2xpY2tPYnNlcnZlci5zdG9wKCk7XG4gICAgICAgICAgICB0aGlzLmZvcm1TdWJtaXRPYnNlcnZlci5zdG9wKCk7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbE9ic2VydmVyLnN0b3AoKTtcbiAgICAgICAgICAgIHRoaXMuc3RyZWFtT2JzZXJ2ZXIuc3RvcCgpO1xuICAgICAgICAgICAgdGhpcy5mcmFtZVJlZGlyZWN0b3Iuc3RvcCgpO1xuICAgICAgICAgICAgdGhpcy5oaXN0b3J5LnN0b3AoKTtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJlZ2lzdGVyQWRhcHRlcihhZGFwdGVyKSB7XG4gICAgICAgIHRoaXMuYWRhcHRlciA9IGFkYXB0ZXI7XG4gICAgfVxuICAgIHZpc2l0KGxvY2F0aW9uLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgdGhpcy5uYXZpZ2F0b3IucHJvcG9zZVZpc2l0KGV4cGFuZFVSTChsb2NhdGlvbiksIG9wdGlvbnMpO1xuICAgIH1cbiAgICBjb25uZWN0U3RyZWFtU291cmNlKHNvdXJjZSkge1xuICAgICAgICB0aGlzLnN0cmVhbU9ic2VydmVyLmNvbm5lY3RTdHJlYW1Tb3VyY2Uoc291cmNlKTtcbiAgICB9XG4gICAgZGlzY29ubmVjdFN0cmVhbVNvdXJjZShzb3VyY2UpIHtcbiAgICAgICAgdGhpcy5zdHJlYW1PYnNlcnZlci5kaXNjb25uZWN0U3RyZWFtU291cmNlKHNvdXJjZSk7XG4gICAgfVxuICAgIHJlbmRlclN0cmVhbU1lc3NhZ2UobWVzc2FnZSkge1xuICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoU3RyZWFtTWVzc2FnZS53cmFwKG1lc3NhZ2UpLmZyYWdtZW50KTtcbiAgICB9XG4gICAgY2xlYXJDYWNoZSgpIHtcbiAgICAgICAgdGhpcy52aWV3LmNsZWFyU25hcHNob3RDYWNoZSgpO1xuICAgIH1cbiAgICBzZXRQcm9ncmVzc0JhckRlbGF5KGRlbGF5KSB7XG4gICAgICAgIHRoaXMucHJvZ3Jlc3NCYXJEZWxheSA9IGRlbGF5O1xuICAgIH1cbiAgICBnZXQgbG9jYXRpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhpc3RvcnkubG9jYXRpb247XG4gICAgfVxuICAgIGdldCByZXN0b3JhdGlvbklkZW50aWZpZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhpc3RvcnkucmVzdG9yYXRpb25JZGVudGlmaWVyO1xuICAgIH1cbiAgICBoaXN0b3J5UG9wcGVkVG9Mb2NhdGlvbldpdGhSZXN0b3JhdGlvbklkZW50aWZpZXIobG9jYXRpb24sIHJlc3RvcmF0aW9uSWRlbnRpZmllcikge1xuICAgICAgICBpZiAodGhpcy5lbmFibGVkKSB7XG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRvci5zdGFydFZpc2l0KGxvY2F0aW9uLCByZXN0b3JhdGlvbklkZW50aWZpZXIsIHsgYWN0aW9uOiBcInJlc3RvcmVcIiwgaGlzdG9yeUNoYW5nZWQ6IHRydWUgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmFkYXB0ZXIucGFnZUludmFsaWRhdGVkKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2Nyb2xsUG9zaXRpb25DaGFuZ2VkKHBvc2l0aW9uKSB7XG4gICAgICAgIHRoaXMuaGlzdG9yeS51cGRhdGVSZXN0b3JhdGlvbkRhdGEoeyBzY3JvbGxQb3NpdGlvbjogcG9zaXRpb24gfSk7XG4gICAgfVxuICAgIHdpbGxGb2xsb3dMaW5rVG9Mb2NhdGlvbihsaW5rLCBsb2NhdGlvbikge1xuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50RHJpdmVFbmFibGVkKGxpbmspXG4gICAgICAgICAgICAmJiB0aGlzLmxvY2F0aW9uSXNWaXNpdGFibGUobG9jYXRpb24pXG4gICAgICAgICAgICAmJiB0aGlzLmFwcGxpY2F0aW9uQWxsb3dzRm9sbG93aW5nTGlua1RvTG9jYXRpb24obGluaywgbG9jYXRpb24pO1xuICAgIH1cbiAgICBmb2xsb3dlZExpbmtUb0xvY2F0aW9uKGxpbmssIGxvY2F0aW9uKSB7XG4gICAgICAgIGNvbnN0IGFjdGlvbiA9IHRoaXMuZ2V0QWN0aW9uRm9yTGluayhsaW5rKTtcbiAgICAgICAgdGhpcy5jb252ZXJ0TGlua1dpdGhNZXRob2RDbGlja1RvRm9ybVN1Ym1pc3Npb24obGluaykgfHwgdGhpcy52aXNpdChsb2NhdGlvbi5ocmVmLCB7IGFjdGlvbiB9KTtcbiAgICB9XG4gICAgY29udmVydExpbmtXaXRoTWV0aG9kQ2xpY2tUb0Zvcm1TdWJtaXNzaW9uKGxpbmspIHtcbiAgICAgICAgY29uc3QgbGlua01ldGhvZCA9IGxpbmsuZ2V0QXR0cmlidXRlKFwiZGF0YS10dXJiby1tZXRob2RcIik7XG4gICAgICAgIGlmIChsaW5rTWV0aG9kKSB7XG4gICAgICAgICAgICBjb25zdCBmb3JtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImZvcm1cIik7XG4gICAgICAgICAgICBmb3JtLm1ldGhvZCA9IGxpbmtNZXRob2Q7XG4gICAgICAgICAgICBmb3JtLmFjdGlvbiA9IGxpbmsuZ2V0QXR0cmlidXRlKFwiaHJlZlwiKSB8fCBcInVuZGVmaW5lZFwiO1xuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChmb3JtKTtcbiAgICAgICAgICAgIHJldHVybiBkaXNwYXRjaChcInN1Ym1pdFwiLCB7IGNhbmNlbGFibGU6IHRydWUsIHRhcmdldDogZm9ybSB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhbGxvd3NWaXNpdGluZ0xvY2F0aW9uV2l0aEFjdGlvbihsb2NhdGlvbiwgYWN0aW9uKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2F0aW9uV2l0aEFjdGlvbklzU2FtZVBhZ2UobG9jYXRpb24sIGFjdGlvbikgfHwgdGhpcy5hcHBsaWNhdGlvbkFsbG93c1Zpc2l0aW5nTG9jYXRpb24obG9jYXRpb24pO1xuICAgIH1cbiAgICB2aXNpdFByb3Bvc2VkVG9Mb2NhdGlvbihsb2NhdGlvbiwgb3B0aW9ucykge1xuICAgICAgICBleHRlbmRVUkxXaXRoRGVwcmVjYXRlZFByb3BlcnRpZXMobG9jYXRpb24pO1xuICAgICAgICB0aGlzLmFkYXB0ZXIudmlzaXRQcm9wb3NlZFRvTG9jYXRpb24obG9jYXRpb24sIG9wdGlvbnMpO1xuICAgIH1cbiAgICB2aXNpdFN0YXJ0ZWQodmlzaXQpIHtcbiAgICAgICAgZXh0ZW5kVVJMV2l0aERlcHJlY2F0ZWRQcm9wZXJ0aWVzKHZpc2l0LmxvY2F0aW9uKTtcbiAgICAgICAgaWYgKCF2aXNpdC5zaWxlbnQpIHtcbiAgICAgICAgICAgIHRoaXMubm90aWZ5QXBwbGljYXRpb25BZnRlclZpc2l0aW5nTG9jYXRpb24odmlzaXQubG9jYXRpb24sIHZpc2l0LmFjdGlvbik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmlzaXRDb21wbGV0ZWQodmlzaXQpIHtcbiAgICAgICAgdGhpcy5ub3RpZnlBcHBsaWNhdGlvbkFmdGVyUGFnZUxvYWQodmlzaXQuZ2V0VGltaW5nTWV0cmljcygpKTtcbiAgICB9XG4gICAgbG9jYXRpb25XaXRoQWN0aW9uSXNTYW1lUGFnZShsb2NhdGlvbiwgYWN0aW9uKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRvci5sb2NhdGlvbldpdGhBY3Rpb25Jc1NhbWVQYWdlKGxvY2F0aW9uLCBhY3Rpb24pO1xuICAgIH1cbiAgICB2aXNpdFNjcm9sbGVkVG9TYW1lUGFnZUxvY2F0aW9uKG9sZFVSTCwgbmV3VVJMKSB7XG4gICAgICAgIHRoaXMubm90aWZ5QXBwbGljYXRpb25BZnRlclZpc2l0aW5nU2FtZVBhZ2VMb2NhdGlvbihvbGRVUkwsIG5ld1VSTCk7XG4gICAgfVxuICAgIHdpbGxTdWJtaXRGb3JtKGZvcm0sIHN1Ym1pdHRlcikge1xuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50RHJpdmVFbmFibGVkKGZvcm0pICYmIHRoaXMuZWxlbWVudERyaXZlRW5hYmxlZChzdWJtaXR0ZXIpO1xuICAgIH1cbiAgICBmb3JtU3VibWl0dGVkKGZvcm0sIHN1Ym1pdHRlcikge1xuICAgICAgICB0aGlzLm5hdmlnYXRvci5zdWJtaXRGb3JtKGZvcm0sIHN1Ym1pdHRlcik7XG4gICAgfVxuICAgIHBhZ2VCZWNhbWVJbnRlcmFjdGl2ZSgpIHtcbiAgICAgICAgdGhpcy52aWV3Lmxhc3RSZW5kZXJlZExvY2F0aW9uID0gdGhpcy5sb2NhdGlvbjtcbiAgICAgICAgdGhpcy5ub3RpZnlBcHBsaWNhdGlvbkFmdGVyUGFnZUxvYWQoKTtcbiAgICB9XG4gICAgcGFnZUxvYWRlZCgpIHtcbiAgICAgICAgdGhpcy5oaXN0b3J5LmFzc3VtZUNvbnRyb2xPZlNjcm9sbFJlc3RvcmF0aW9uKCk7XG4gICAgfVxuICAgIHBhZ2VXaWxsVW5sb2FkKCkge1xuICAgICAgICB0aGlzLmhpc3RvcnkucmVsaW5xdWlzaENvbnRyb2xPZlNjcm9sbFJlc3RvcmF0aW9uKCk7XG4gICAgfVxuICAgIHJlY2VpdmVkTWVzc2FnZUZyb21TdHJlYW0obWVzc2FnZSkge1xuICAgICAgICB0aGlzLnJlbmRlclN0cmVhbU1lc3NhZ2UobWVzc2FnZSk7XG4gICAgfVxuICAgIHZpZXdXaWxsQ2FjaGVTbmFwc2hvdCgpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoISgoX2EgPSB0aGlzLm5hdmlnYXRvci5jdXJyZW50VmlzaXQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zaWxlbnQpKSB7XG4gICAgICAgICAgICB0aGlzLm5vdGlmeUFwcGxpY2F0aW9uQmVmb3JlQ2FjaGluZ1NuYXBzaG90KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYWxsb3dzSW1tZWRpYXRlUmVuZGVyKHsgZWxlbWVudCB9LCByZXN1bWUpIHtcbiAgICAgICAgY29uc3QgZXZlbnQgPSB0aGlzLm5vdGlmeUFwcGxpY2F0aW9uQmVmb3JlUmVuZGVyKGVsZW1lbnQsIHJlc3VtZSk7XG4gICAgICAgIHJldHVybiAhZXZlbnQuZGVmYXVsdFByZXZlbnRlZDtcbiAgICB9XG4gICAgdmlld1JlbmRlcmVkU25hcHNob3Qoc25hcHNob3QsIGlzUHJldmlldykge1xuICAgICAgICB0aGlzLnZpZXcubGFzdFJlbmRlcmVkTG9jYXRpb24gPSB0aGlzLmhpc3RvcnkubG9jYXRpb247XG4gICAgICAgIHRoaXMubm90aWZ5QXBwbGljYXRpb25BZnRlclJlbmRlcigpO1xuICAgIH1cbiAgICB2aWV3SW52YWxpZGF0ZWQoKSB7XG4gICAgICAgIHRoaXMuYWRhcHRlci5wYWdlSW52YWxpZGF0ZWQoKTtcbiAgICB9XG4gICAgZnJhbWVMb2FkZWQoZnJhbWUpIHtcbiAgICAgICAgdGhpcy5ub3RpZnlBcHBsaWNhdGlvbkFmdGVyRnJhbWVMb2FkKGZyYW1lKTtcbiAgICB9XG4gICAgZnJhbWVSZW5kZXJlZChmZXRjaFJlc3BvbnNlLCBmcmFtZSkge1xuICAgICAgICB0aGlzLm5vdGlmeUFwcGxpY2F0aW9uQWZ0ZXJGcmFtZVJlbmRlcihmZXRjaFJlc3BvbnNlLCBmcmFtZSk7XG4gICAgfVxuICAgIGFwcGxpY2F0aW9uQWxsb3dzRm9sbG93aW5nTGlua1RvTG9jYXRpb24obGluaywgbG9jYXRpb24pIHtcbiAgICAgICAgY29uc3QgZXZlbnQgPSB0aGlzLm5vdGlmeUFwcGxpY2F0aW9uQWZ0ZXJDbGlja2luZ0xpbmtUb0xvY2F0aW9uKGxpbmssIGxvY2F0aW9uKTtcbiAgICAgICAgcmV0dXJuICFldmVudC5kZWZhdWx0UHJldmVudGVkO1xuICAgIH1cbiAgICBhcHBsaWNhdGlvbkFsbG93c1Zpc2l0aW5nTG9jYXRpb24obG9jYXRpb24pIHtcbiAgICAgICAgY29uc3QgZXZlbnQgPSB0aGlzLm5vdGlmeUFwcGxpY2F0aW9uQmVmb3JlVmlzaXRpbmdMb2NhdGlvbihsb2NhdGlvbik7XG4gICAgICAgIHJldHVybiAhZXZlbnQuZGVmYXVsdFByZXZlbnRlZDtcbiAgICB9XG4gICAgbm90aWZ5QXBwbGljYXRpb25BZnRlckNsaWNraW5nTGlua1RvTG9jYXRpb24obGluaywgbG9jYXRpb24pIHtcbiAgICAgICAgcmV0dXJuIGRpc3BhdGNoKFwidHVyYm86Y2xpY2tcIiwgeyB0YXJnZXQ6IGxpbmssIGRldGFpbDogeyB1cmw6IGxvY2F0aW9uLmhyZWYgfSwgY2FuY2VsYWJsZTogdHJ1ZSB9KTtcbiAgICB9XG4gICAgbm90aWZ5QXBwbGljYXRpb25CZWZvcmVWaXNpdGluZ0xvY2F0aW9uKGxvY2F0aW9uKSB7XG4gICAgICAgIHJldHVybiBkaXNwYXRjaChcInR1cmJvOmJlZm9yZS12aXNpdFwiLCB7IGRldGFpbDogeyB1cmw6IGxvY2F0aW9uLmhyZWYgfSwgY2FuY2VsYWJsZTogdHJ1ZSB9KTtcbiAgICB9XG4gICAgbm90aWZ5QXBwbGljYXRpb25BZnRlclZpc2l0aW5nTG9jYXRpb24obG9jYXRpb24sIGFjdGlvbikge1xuICAgICAgICByZXR1cm4gZGlzcGF0Y2goXCJ0dXJibzp2aXNpdFwiLCB7IGRldGFpbDogeyB1cmw6IGxvY2F0aW9uLmhyZWYsIGFjdGlvbiB9IH0pO1xuICAgIH1cbiAgICBub3RpZnlBcHBsaWNhdGlvbkJlZm9yZUNhY2hpbmdTbmFwc2hvdCgpIHtcbiAgICAgICAgcmV0dXJuIGRpc3BhdGNoKFwidHVyYm86YmVmb3JlLWNhY2hlXCIpO1xuICAgIH1cbiAgICBub3RpZnlBcHBsaWNhdGlvbkJlZm9yZVJlbmRlcihuZXdCb2R5LCByZXN1bWUpIHtcbiAgICAgICAgcmV0dXJuIGRpc3BhdGNoKFwidHVyYm86YmVmb3JlLXJlbmRlclwiLCB7IGRldGFpbDogeyBuZXdCb2R5LCByZXN1bWUgfSwgY2FuY2VsYWJsZTogdHJ1ZSB9KTtcbiAgICB9XG4gICAgbm90aWZ5QXBwbGljYXRpb25BZnRlclJlbmRlcigpIHtcbiAgICAgICAgcmV0dXJuIGRpc3BhdGNoKFwidHVyYm86cmVuZGVyXCIpO1xuICAgIH1cbiAgICBub3RpZnlBcHBsaWNhdGlvbkFmdGVyUGFnZUxvYWQodGltaW5nID0ge30pIHtcbiAgICAgICAgcmV0dXJuIGRpc3BhdGNoKFwidHVyYm86bG9hZFwiLCB7IGRldGFpbDogeyB1cmw6IHRoaXMubG9jYXRpb24uaHJlZiwgdGltaW5nIH0gfSk7XG4gICAgfVxuICAgIG5vdGlmeUFwcGxpY2F0aW9uQWZ0ZXJWaXNpdGluZ1NhbWVQYWdlTG9jYXRpb24ob2xkVVJMLCBuZXdVUkwpIHtcbiAgICAgICAgZGlzcGF0Y2hFdmVudChuZXcgSGFzaENoYW5nZUV2ZW50KFwiaGFzaGNoYW5nZVwiLCB7IG9sZFVSTDogb2xkVVJMLnRvU3RyaW5nKCksIG5ld1VSTDogbmV3VVJMLnRvU3RyaW5nKCkgfSkpO1xuICAgIH1cbiAgICBub3RpZnlBcHBsaWNhdGlvbkFmdGVyRnJhbWVMb2FkKGZyYW1lKSB7XG4gICAgICAgIHJldHVybiBkaXNwYXRjaChcInR1cmJvOmZyYW1lLWxvYWRcIiwgeyB0YXJnZXQ6IGZyYW1lIH0pO1xuICAgIH1cbiAgICBub3RpZnlBcHBsaWNhdGlvbkFmdGVyRnJhbWVSZW5kZXIoZmV0Y2hSZXNwb25zZSwgZnJhbWUpIHtcbiAgICAgICAgcmV0dXJuIGRpc3BhdGNoKFwidHVyYm86ZnJhbWUtcmVuZGVyXCIsIHsgZGV0YWlsOiB7IGZldGNoUmVzcG9uc2UgfSwgdGFyZ2V0OiBmcmFtZSwgY2FuY2VsYWJsZTogdHJ1ZSB9KTtcbiAgICB9XG4gICAgZWxlbWVudERyaXZlRW5hYmxlZChlbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGVsZW1lbnQgPT09IG51bGwgfHwgZWxlbWVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogZWxlbWVudC5jbG9zZXN0KFwiW2RhdGEtdHVyYm9dXCIpO1xuICAgICAgICBpZiAodGhpcy5kcml2ZSkge1xuICAgICAgICAgICAgaWYgKGNvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb250YWluZXIuZ2V0QXR0cmlidXRlKFwiZGF0YS10dXJib1wiKSAhPSBcImZhbHNlXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChjb250YWluZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29udGFpbmVyLmdldEF0dHJpYnV0ZShcImRhdGEtdHVyYm9cIikgPT0gXCJ0cnVlXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0QWN0aW9uRm9yTGluayhsaW5rKSB7XG4gICAgICAgIGNvbnN0IGFjdGlvbiA9IGxpbmsuZ2V0QXR0cmlidXRlKFwiZGF0YS10dXJiby1hY3Rpb25cIik7XG4gICAgICAgIHJldHVybiBpc0FjdGlvbihhY3Rpb24pID8gYWN0aW9uIDogXCJhZHZhbmNlXCI7XG4gICAgfVxuICAgIGxvY2F0aW9uSXNWaXNpdGFibGUobG9jYXRpb24pIHtcbiAgICAgICAgcmV0dXJuIGlzUHJlZml4ZWRCeShsb2NhdGlvbiwgdGhpcy5zbmFwc2hvdC5yb290TG9jYXRpb24pICYmIGlzSFRNTChsb2NhdGlvbik7XG4gICAgfVxuICAgIGdldCBzbmFwc2hvdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlldy5zbmFwc2hvdDtcbiAgICB9XG59XG5mdW5jdGlvbiBleHRlbmRVUkxXaXRoRGVwcmVjYXRlZFByb3BlcnRpZXModXJsKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModXJsLCBkZXByZWNhdGVkTG9jYXRpb25Qcm9wZXJ0eURlc2NyaXB0b3JzKTtcbn1cbmNvbnN0IGRlcHJlY2F0ZWRMb2NhdGlvblByb3BlcnR5RGVzY3JpcHRvcnMgPSB7XG4gICAgYWJzb2x1dGVVUkw6IHtcbiAgICAgICAgZ2V0KCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbmNvbnN0IHNlc3Npb24gPSBuZXcgU2Vzc2lvbjtcbmNvbnN0IHsgbmF2aWdhdG9yIH0gPSBzZXNzaW9uO1xuZnVuY3Rpb24gc3RhcnQoKSB7XG4gICAgc2Vzc2lvbi5zdGFydCgpO1xufVxuZnVuY3Rpb24gcmVnaXN0ZXJBZGFwdGVyKGFkYXB0ZXIpIHtcbiAgICBzZXNzaW9uLnJlZ2lzdGVyQWRhcHRlcihhZGFwdGVyKTtcbn1cbmZ1bmN0aW9uIHZpc2l0KGxvY2F0aW9uLCBvcHRpb25zKSB7XG4gICAgc2Vzc2lvbi52aXNpdChsb2NhdGlvbiwgb3B0aW9ucyk7XG59XG5mdW5jdGlvbiBjb25uZWN0U3RyZWFtU291cmNlKHNvdXJjZSkge1xuICAgIHNlc3Npb24uY29ubmVjdFN0cmVhbVNvdXJjZShzb3VyY2UpO1xufVxuZnVuY3Rpb24gZGlzY29ubmVjdFN0cmVhbVNvdXJjZShzb3VyY2UpIHtcbiAgICBzZXNzaW9uLmRpc2Nvbm5lY3RTdHJlYW1Tb3VyY2Uoc291cmNlKTtcbn1cbmZ1bmN0aW9uIHJlbmRlclN0cmVhbU1lc3NhZ2UobWVzc2FnZSkge1xuICAgIHNlc3Npb24ucmVuZGVyU3RyZWFtTWVzc2FnZShtZXNzYWdlKTtcbn1cbmZ1bmN0aW9uIGNsZWFyQ2FjaGUoKSB7XG4gICAgc2Vzc2lvbi5jbGVhckNhY2hlKCk7XG59XG5mdW5jdGlvbiBzZXRQcm9ncmVzc0JhckRlbGF5KGRlbGF5KSB7XG4gICAgc2Vzc2lvbi5zZXRQcm9ncmVzc0JhckRlbGF5KGRlbGF5KTtcbn1cblxudmFyIFR1cmJvID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICBuYXZpZ2F0b3I6IG5hdmlnYXRvcixcbiAgICBzZXNzaW9uOiBzZXNzaW9uLFxuICAgIFBhZ2VSZW5kZXJlcjogUGFnZVJlbmRlcmVyLFxuICAgIFBhZ2VTbmFwc2hvdDogUGFnZVNuYXBzaG90LFxuICAgIHN0YXJ0OiBzdGFydCxcbiAgICByZWdpc3RlckFkYXB0ZXI6IHJlZ2lzdGVyQWRhcHRlcixcbiAgICB2aXNpdDogdmlzaXQsXG4gICAgY29ubmVjdFN0cmVhbVNvdXJjZTogY29ubmVjdFN0cmVhbVNvdXJjZSxcbiAgICBkaXNjb25uZWN0U3RyZWFtU291cmNlOiBkaXNjb25uZWN0U3RyZWFtU291cmNlLFxuICAgIHJlbmRlclN0cmVhbU1lc3NhZ2U6IHJlbmRlclN0cmVhbU1lc3NhZ2UsXG4gICAgY2xlYXJDYWNoZTogY2xlYXJDYWNoZSxcbiAgICBzZXRQcm9ncmVzc0JhckRlbGF5OiBzZXRQcm9ncmVzc0JhckRlbGF5XG59KTtcblxuY2xhc3MgRnJhbWVDb250cm9sbGVyIHtcbiAgICBjb25zdHJ1Y3RvcihlbGVtZW50KSB7XG4gICAgICAgIHRoaXMucmVzb2x2ZVZpc2l0UHJvbWlzZSA9ICgpID0+IHsgfTtcbiAgICAgICAgdGhpcy5jb25uZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5oYXNCZWVuTG9hZGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2V0dGluZ1NvdXJjZVVSTCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgICB0aGlzLnZpZXcgPSBuZXcgRnJhbWVWaWV3KHRoaXMsIHRoaXMuZWxlbWVudCk7XG4gICAgICAgIHRoaXMuYXBwZWFyYW5jZU9ic2VydmVyID0gbmV3IEFwcGVhcmFuY2VPYnNlcnZlcih0aGlzLCB0aGlzLmVsZW1lbnQpO1xuICAgICAgICB0aGlzLmxpbmtJbnRlcmNlcHRvciA9IG5ldyBMaW5rSW50ZXJjZXB0b3IodGhpcywgdGhpcy5lbGVtZW50KTtcbiAgICAgICAgdGhpcy5mb3JtSW50ZXJjZXB0b3IgPSBuZXcgRm9ybUludGVyY2VwdG9yKHRoaXMsIHRoaXMuZWxlbWVudCk7XG4gICAgfVxuICAgIGNvbm5lY3QoKSB7XG4gICAgICAgIGlmICghdGhpcy5jb25uZWN0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY29ubmVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMucmVsb2FkYWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKHRoaXMubG9hZGluZ1N0eWxlID09IEZyYW1lTG9hZGluZ1N0eWxlLmxhenkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGVhcmFuY2VPYnNlcnZlci5zdGFydCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5saW5rSW50ZXJjZXB0b3Iuc3RhcnQoKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybUludGVyY2VwdG9yLnN0YXJ0KCk7XG4gICAgICAgICAgICB0aGlzLnNvdXJjZVVSTENoYW5nZWQoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBkaXNjb25uZWN0KCkge1xuICAgICAgICBpZiAodGhpcy5jb25uZWN0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY29ubmVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmFwcGVhcmFuY2VPYnNlcnZlci5zdG9wKCk7XG4gICAgICAgICAgICB0aGlzLmxpbmtJbnRlcmNlcHRvci5zdG9wKCk7XG4gICAgICAgICAgICB0aGlzLmZvcm1JbnRlcmNlcHRvci5zdG9wKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZGlzYWJsZWRDaGFuZ2VkKCkge1xuICAgICAgICBpZiAodGhpcy5sb2FkaW5nU3R5bGUgPT0gRnJhbWVMb2FkaW5nU3R5bGUuZWFnZXIpIHtcbiAgICAgICAgICAgIHRoaXMubG9hZFNvdXJjZVVSTCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNvdXJjZVVSTENoYW5nZWQoKSB7XG4gICAgICAgIGlmICh0aGlzLmxvYWRpbmdTdHlsZSA9PSBGcmFtZUxvYWRpbmdTdHlsZS5lYWdlciB8fCB0aGlzLmhhc0JlZW5Mb2FkZWQpIHtcbiAgICAgICAgICAgIHRoaXMubG9hZFNvdXJjZVVSTCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGxvYWRpbmdTdHlsZUNoYW5nZWQoKSB7XG4gICAgICAgIGlmICh0aGlzLmxvYWRpbmdTdHlsZSA9PSBGcmFtZUxvYWRpbmdTdHlsZS5sYXp5KSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVhcmFuY2VPYnNlcnZlci5zdGFydCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hcHBlYXJhbmNlT2JzZXJ2ZXIuc3RvcCgpO1xuICAgICAgICAgICAgdGhpcy5sb2FkU291cmNlVVJMKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgbG9hZFNvdXJjZVVSTCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnNldHRpbmdTb3VyY2VVUkwgJiYgdGhpcy5lbmFibGVkICYmIHRoaXMuaXNBY3RpdmUgJiYgKHRoaXMucmVsb2FkYWJsZSB8fCB0aGlzLnNvdXJjZVVSTCAhPSB0aGlzLmN1cnJlbnRVUkwpKSB7XG4gICAgICAgICAgICBjb25zdCBwcmV2aW91c1VSTCA9IHRoaXMuY3VycmVudFVSTDtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFVSTCA9IHRoaXMuc291cmNlVVJMO1xuICAgICAgICAgICAgaWYgKHRoaXMuc291cmNlVVJMKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50LmxvYWRlZCA9IHRoaXMudmlzaXQodGhpcy5zb3VyY2VVUkwpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcGVhcmFuY2VPYnNlcnZlci5zdG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZWxlbWVudC5sb2FkZWQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGFzQmVlbkxvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHNlc3Npb24uZnJhbWVMb2FkZWQodGhpcy5lbGVtZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFVSTCA9IHByZXZpb3VzVVJMO1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgbG9hZFJlc3BvbnNlKGZldGNoUmVzcG9uc2UpIHtcbiAgICAgICAgaWYgKGZldGNoUmVzcG9uc2UucmVkaXJlY3RlZCkge1xuICAgICAgICAgICAgdGhpcy5zb3VyY2VVUkwgPSBmZXRjaFJlc3BvbnNlLnJlc3BvbnNlLnVybDtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgaHRtbCA9IGF3YWl0IGZldGNoUmVzcG9uc2UucmVzcG9uc2VIVE1MO1xuICAgICAgICAgICAgaWYgKGh0bWwpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGJvZHkgfSA9IHBhcnNlSFRNTERvY3VtZW50KGh0bWwpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNuYXBzaG90ID0gbmV3IFNuYXBzaG90KGF3YWl0IHRoaXMuZXh0cmFjdEZvcmVpZ25GcmFtZUVsZW1lbnQoYm9keSkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlbmRlcmVyID0gbmV3IEZyYW1lUmVuZGVyZXIodGhpcy52aWV3LnNuYXBzaG90LCBzbmFwc2hvdCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnZpZXcucmVuZGVyUHJvbWlzZSlcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy52aWV3LnJlbmRlclByb21pc2U7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy52aWV3LnJlbmRlcihyZW5kZXJlcik7XG4gICAgICAgICAgICAgICAgc2Vzc2lvbi5mcmFtZVJlbmRlcmVkKGZldGNoUmVzcG9uc2UsIHRoaXMuZWxlbWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIHRoaXMudmlldy5pbnZhbGlkYXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxlbWVudEFwcGVhcmVkSW5WaWV3cG9ydChlbGVtZW50KSB7XG4gICAgICAgIHRoaXMubG9hZFNvdXJjZVVSTCgpO1xuICAgIH1cbiAgICBzaG91bGRJbnRlcmNlcHRMaW5rQ2xpY2soZWxlbWVudCwgdXJsKSB7XG4gICAgICAgIGlmIChlbGVtZW50Lmhhc0F0dHJpYnV0ZShcImRhdGEtdHVyYm8tbWV0aG9kXCIpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zaG91bGRJbnRlcmNlcHROYXZpZ2F0aW9uKGVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGxpbmtDbGlja0ludGVyY2VwdGVkKGVsZW1lbnQsIHVybCkge1xuICAgICAgICB0aGlzLnJlbG9hZGFibGUgPSB0cnVlO1xuICAgICAgICB0aGlzLm5hdmlnYXRlRnJhbWUoZWxlbWVudCwgdXJsKTtcbiAgICB9XG4gICAgc2hvdWxkSW50ZXJjZXB0Rm9ybVN1Ym1pc3Npb24oZWxlbWVudCwgc3VibWl0dGVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNob3VsZEludGVyY2VwdE5hdmlnYXRpb24oZWxlbWVudCwgc3VibWl0dGVyKTtcbiAgICB9XG4gICAgZm9ybVN1Ym1pc3Npb25JbnRlcmNlcHRlZChlbGVtZW50LCBzdWJtaXR0ZXIpIHtcbiAgICAgICAgaWYgKHRoaXMuZm9ybVN1Ym1pc3Npb24pIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybVN1Ym1pc3Npb24uc3RvcCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVsb2FkYWJsZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmZvcm1TdWJtaXNzaW9uID0gbmV3IEZvcm1TdWJtaXNzaW9uKHRoaXMsIGVsZW1lbnQsIHN1Ym1pdHRlcik7XG4gICAgICAgIGlmICh0aGlzLmZvcm1TdWJtaXNzaW9uLmZldGNoUmVxdWVzdC5pc0lkZW1wb3RlbnQpIHtcbiAgICAgICAgICAgIHRoaXMubmF2aWdhdGVGcmFtZShlbGVtZW50LCB0aGlzLmZvcm1TdWJtaXNzaW9uLmZldGNoUmVxdWVzdC51cmwuaHJlZik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB7IGZldGNoUmVxdWVzdCB9ID0gdGhpcy5mb3JtU3VibWlzc2lvbjtcbiAgICAgICAgICAgIHRoaXMucHJlcGFyZUhlYWRlcnNGb3JSZXF1ZXN0KGZldGNoUmVxdWVzdC5oZWFkZXJzLCBmZXRjaFJlcXVlc3QpO1xuICAgICAgICAgICAgdGhpcy5mb3JtU3VibWlzc2lvbi5zdGFydCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHByZXBhcmVIZWFkZXJzRm9yUmVxdWVzdChoZWFkZXJzLCByZXF1ZXN0KSB7XG4gICAgICAgIGhlYWRlcnNbXCJUdXJiby1GcmFtZVwiXSA9IHRoaXMuaWQ7XG4gICAgfVxuICAgIHJlcXVlc3RTdGFydGVkKHJlcXVlc3QpIHtcbiAgICAgICAgdGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZShcImJ1c3lcIiwgXCJcIik7XG4gICAgfVxuICAgIHJlcXVlc3RQcmV2ZW50ZWRIYW5kbGluZ1Jlc3BvbnNlKHJlcXVlc3QsIHJlc3BvbnNlKSB7XG4gICAgICAgIHRoaXMucmVzb2x2ZVZpc2l0UHJvbWlzZSgpO1xuICAgIH1cbiAgICBhc3luYyByZXF1ZXN0U3VjY2VlZGVkV2l0aFJlc3BvbnNlKHJlcXVlc3QsIHJlc3BvbnNlKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZFJlc3BvbnNlKHJlc3BvbnNlKTtcbiAgICAgICAgdGhpcy5yZXNvbHZlVmlzaXRQcm9taXNlKCk7XG4gICAgfVxuICAgIHJlcXVlc3RGYWlsZWRXaXRoUmVzcG9uc2UocmVxdWVzdCwgcmVzcG9uc2UpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihyZXNwb25zZSk7XG4gICAgICAgIHRoaXMucmVzb2x2ZVZpc2l0UHJvbWlzZSgpO1xuICAgIH1cbiAgICByZXF1ZXN0RXJyb3JlZChyZXF1ZXN0LCBlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgdGhpcy5yZXNvbHZlVmlzaXRQcm9taXNlKCk7XG4gICAgfVxuICAgIHJlcXVlc3RGaW5pc2hlZChyZXF1ZXN0KSB7XG4gICAgICAgIHRoaXMuZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoXCJidXN5XCIpO1xuICAgIH1cbiAgICBmb3JtU3VibWlzc2lvblN0YXJ0ZWQoZm9ybVN1Ym1pc3Npb24pIHtcbiAgICAgICAgY29uc3QgZnJhbWUgPSB0aGlzLmZpbmRGcmFtZUVsZW1lbnQoZm9ybVN1Ym1pc3Npb24uZm9ybUVsZW1lbnQpO1xuICAgICAgICBmcmFtZS5zZXRBdHRyaWJ1dGUoXCJidXN5XCIsIFwiXCIpO1xuICAgIH1cbiAgICBmb3JtU3VibWlzc2lvblN1Y2NlZWRlZFdpdGhSZXNwb25zZShmb3JtU3VibWlzc2lvbiwgcmVzcG9uc2UpIHtcbiAgICAgICAgY29uc3QgZnJhbWUgPSB0aGlzLmZpbmRGcmFtZUVsZW1lbnQoZm9ybVN1Ym1pc3Npb24uZm9ybUVsZW1lbnQpO1xuICAgICAgICBmcmFtZS5kZWxlZ2F0ZS5sb2FkUmVzcG9uc2UocmVzcG9uc2UpO1xuICAgIH1cbiAgICBmb3JtU3VibWlzc2lvbkZhaWxlZFdpdGhSZXNwb25zZShmb3JtU3VibWlzc2lvbiwgZmV0Y2hSZXNwb25zZSkge1xuICAgICAgICB0aGlzLmVsZW1lbnQuZGVsZWdhdGUubG9hZFJlc3BvbnNlKGZldGNoUmVzcG9uc2UpO1xuICAgIH1cbiAgICBmb3JtU3VibWlzc2lvbkVycm9yZWQoZm9ybVN1Ym1pc3Npb24sIGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgIH1cbiAgICBmb3JtU3VibWlzc2lvbkZpbmlzaGVkKGZvcm1TdWJtaXNzaW9uKSB7XG4gICAgICAgIGNvbnN0IGZyYW1lID0gdGhpcy5maW5kRnJhbWVFbGVtZW50KGZvcm1TdWJtaXNzaW9uLmZvcm1FbGVtZW50KTtcbiAgICAgICAgZnJhbWUucmVtb3ZlQXR0cmlidXRlKFwiYnVzeVwiKTtcbiAgICB9XG4gICAgYWxsb3dzSW1tZWRpYXRlUmVuZGVyKHNuYXBzaG90LCByZXN1bWUpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHZpZXdSZW5kZXJlZFNuYXBzaG90KHNuYXBzaG90LCBpc1ByZXZpZXcpIHtcbiAgICB9XG4gICAgdmlld0ludmFsaWRhdGVkKCkge1xuICAgIH1cbiAgICBhc3luYyB2aXNpdCh1cmwpIHtcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9IG5ldyBGZXRjaFJlcXVlc3QodGhpcywgRmV0Y2hNZXRob2QuZ2V0LCBleHBhbmRVUkwodXJsKSk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVzb2x2ZVZpc2l0UHJvbWlzZSA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc29sdmVWaXNpdFByb21pc2UgPSAoKSA9PiB7IH07XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJlcXVlc3QucGVyZm9ybSgpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgbmF2aWdhdGVGcmFtZShlbGVtZW50LCB1cmwpIHtcbiAgICAgICAgY29uc3QgZnJhbWUgPSB0aGlzLmZpbmRGcmFtZUVsZW1lbnQoZWxlbWVudCk7XG4gICAgICAgIGZyYW1lLnNyYyA9IHVybDtcbiAgICB9XG4gICAgZmluZEZyYW1lRWxlbWVudChlbGVtZW50KSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3QgaWQgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShcImRhdGEtdHVyYm8tZnJhbWVcIikgfHwgdGhpcy5lbGVtZW50LmdldEF0dHJpYnV0ZShcInRhcmdldFwiKTtcbiAgICAgICAgcmV0dXJuIChfYSA9IGdldEZyYW1lRWxlbWVudEJ5SWQoaWQpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB0aGlzLmVsZW1lbnQ7XG4gICAgfVxuICAgIGFzeW5jIGV4dHJhY3RGb3JlaWduRnJhbWVFbGVtZW50KGNvbnRhaW5lcikge1xuICAgICAgICBsZXQgZWxlbWVudDtcbiAgICAgICAgY29uc3QgaWQgPSBDU1MuZXNjYXBlKHRoaXMuaWQpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKGVsZW1lbnQgPSBhY3RpdmF0ZUVsZW1lbnQoY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoYHR1cmJvLWZyYW1lIyR7aWR9YCksIHRoaXMuY3VycmVudFVSTCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlbGVtZW50ID0gYWN0aXZhdGVFbGVtZW50KGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKGB0dXJiby1mcmFtZVtzcmNdW3JlY3Vyc2V+PSR7aWR9XWApLCB0aGlzLmN1cnJlbnRVUkwpKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgZWxlbWVudC5sb2FkZWQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZXh0cmFjdEZvcmVpZ25GcmFtZUVsZW1lbnQoZWxlbWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGBSZXNwb25zZSBoYXMgbm8gbWF0Y2hpbmcgPHR1cmJvLWZyYW1lIGlkPVwiJHtpZH1cIj4gZWxlbWVudGApO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBGcmFtZUVsZW1lbnQoKTtcbiAgICB9XG4gICAgc2hvdWxkSW50ZXJjZXB0TmF2aWdhdGlvbihlbGVtZW50LCBzdWJtaXR0ZXIpIHtcbiAgICAgICAgY29uc3QgaWQgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShcImRhdGEtdHVyYm8tZnJhbWVcIikgfHwgdGhpcy5lbGVtZW50LmdldEF0dHJpYnV0ZShcInRhcmdldFwiKTtcbiAgICAgICAgaWYgKCF0aGlzLmVuYWJsZWQgfHwgaWQgPT0gXCJfdG9wXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGZyYW1lRWxlbWVudCA9IGdldEZyYW1lRWxlbWVudEJ5SWQoaWQpO1xuICAgICAgICAgICAgaWYgKGZyYW1lRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAhZnJhbWVFbGVtZW50LmRpc2FibGVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghc2Vzc2lvbi5lbGVtZW50RHJpdmVFbmFibGVkKGVsZW1lbnQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN1Ym1pdHRlciAmJiAhc2Vzc2lvbi5lbGVtZW50RHJpdmVFbmFibGVkKHN1Ym1pdHRlcikpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgZ2V0IGlkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50LmlkO1xuICAgIH1cbiAgICBnZXQgZW5hYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmVsZW1lbnQuZGlzYWJsZWQ7XG4gICAgfVxuICAgIGdldCBzb3VyY2VVUkwoKSB7XG4gICAgICAgIGlmICh0aGlzLmVsZW1lbnQuc3JjKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50LnNyYztcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgcmVsb2FkYWJsZSgpIHtcbiAgICAgICAgY29uc3QgZnJhbWUgPSB0aGlzLmZpbmRGcmFtZUVsZW1lbnQodGhpcy5lbGVtZW50KTtcbiAgICAgICAgcmV0dXJuIGZyYW1lLmhhc0F0dHJpYnV0ZShcInJlbG9hZGFibGVcIik7XG4gICAgfVxuICAgIHNldCByZWxvYWRhYmxlKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGZyYW1lID0gdGhpcy5maW5kRnJhbWVFbGVtZW50KHRoaXMuZWxlbWVudCk7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgZnJhbWUuc2V0QXR0cmlidXRlKFwicmVsb2FkYWJsZVwiLCBcIlwiKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGZyYW1lLnJlbW92ZUF0dHJpYnV0ZShcInJlbG9hZGFibGVcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2V0IHNvdXJjZVVSTChzb3VyY2VVUkwpIHtcbiAgICAgICAgdGhpcy5zZXR0aW5nU291cmNlVVJMID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5lbGVtZW50LnNyYyA9IHNvdXJjZVVSTCAhPT0gbnVsbCAmJiBzb3VyY2VVUkwgIT09IHZvaWQgMCA/IHNvdXJjZVVSTCA6IG51bGw7XG4gICAgICAgIHRoaXMuY3VycmVudFVSTCA9IHRoaXMuZWxlbWVudC5zcmM7XG4gICAgICAgIHRoaXMuc2V0dGluZ1NvdXJjZVVSTCA9IGZhbHNlO1xuICAgIH1cbiAgICBnZXQgbG9hZGluZ1N0eWxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50LmxvYWRpbmc7XG4gICAgfVxuICAgIGdldCBpc0xvYWRpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1TdWJtaXNzaW9uICE9PSB1bmRlZmluZWQgfHwgdGhpcy5yZXNvbHZlVmlzaXRQcm9taXNlKCkgIT09IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZ2V0IGlzQWN0aXZlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50LmlzQWN0aXZlICYmIHRoaXMuY29ubmVjdGVkO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGdldEZyYW1lRWxlbWVudEJ5SWQoaWQpIHtcbiAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICAgICAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEZyYW1lRWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBhY3RpdmF0ZUVsZW1lbnQoZWxlbWVudCwgY3VycmVudFVSTCkge1xuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IHNyYyA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKFwic3JjXCIpO1xuICAgICAgICBpZiAoc3JjICE9IG51bGwgJiYgY3VycmVudFVSTCAhPSBudWxsICYmIHVybHNBcmVFcXVhbChzcmMsIGN1cnJlbnRVUkwpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE1hdGNoaW5nIDx0dXJiby1mcmFtZSBpZD1cIiR7ZWxlbWVudC5pZH1cIj4gZWxlbWVudCBoYXMgYSBzb3VyY2UgVVJMIHdoaWNoIHJlZmVyZW5jZXMgaXRzZWxmYCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVsZW1lbnQub3duZXJEb2N1bWVudCAhPT0gZG9jdW1lbnQpIHtcbiAgICAgICAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC5pbXBvcnROb2RlKGVsZW1lbnQsIHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgRnJhbWVFbGVtZW50KSB7XG4gICAgICAgICAgICBlbGVtZW50LmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY29uc3QgU3RyZWFtQWN0aW9ucyA9IHtcbiAgICBhZnRlcigpIHtcbiAgICAgICAgdGhpcy50YXJnZXRFbGVtZW50cy5mb3JFYWNoKGUgPT4geyB2YXIgX2E7IHJldHVybiAoX2EgPSBlLnBhcmVudEVsZW1lbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5pbnNlcnRCZWZvcmUodGhpcy50ZW1wbGF0ZUNvbnRlbnQsIGUubmV4dFNpYmxpbmcpOyB9KTtcbiAgICB9LFxuICAgIGFwcGVuZCgpIHtcbiAgICAgICAgdGhpcy5yZW1vdmVEdXBsaWNhdGVUYXJnZXRDaGlsZHJlbigpO1xuICAgICAgICB0aGlzLnRhcmdldEVsZW1lbnRzLmZvckVhY2goZSA9PiBlLmFwcGVuZCh0aGlzLnRlbXBsYXRlQ29udGVudCkpO1xuICAgIH0sXG4gICAgYmVmb3JlKCkge1xuICAgICAgICB0aGlzLnRhcmdldEVsZW1lbnRzLmZvckVhY2goZSA9PiB7IHZhciBfYTsgcmV0dXJuIChfYSA9IGUucGFyZW50RWxlbWVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmluc2VydEJlZm9yZSh0aGlzLnRlbXBsYXRlQ29udGVudCwgZSk7IH0pO1xuICAgIH0sXG4gICAgcHJlcGVuZCgpIHtcbiAgICAgICAgdGhpcy5yZW1vdmVEdXBsaWNhdGVUYXJnZXRDaGlsZHJlbigpO1xuICAgICAgICB0aGlzLnRhcmdldEVsZW1lbnRzLmZvckVhY2goZSA9PiBlLnByZXBlbmQodGhpcy50ZW1wbGF0ZUNvbnRlbnQpKTtcbiAgICB9LFxuICAgIHJlbW92ZSgpIHtcbiAgICAgICAgdGhpcy50YXJnZXRFbGVtZW50cy5mb3JFYWNoKGUgPT4gZS5yZW1vdmUoKSk7XG4gICAgfSxcbiAgICByZXBsYWNlKCkge1xuICAgICAgICB0aGlzLnRhcmdldEVsZW1lbnRzLmZvckVhY2goZSA9PiBlLnJlcGxhY2VXaXRoKHRoaXMudGVtcGxhdGVDb250ZW50KSk7XG4gICAgfSxcbiAgICB1cGRhdGUoKSB7XG4gICAgICAgIHRoaXMudGFyZ2V0RWxlbWVudHMuZm9yRWFjaChlID0+IHtcbiAgICAgICAgICAgIGUuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgICAgIGUuYXBwZW5kKHRoaXMudGVtcGxhdGVDb250ZW50KTtcbiAgICAgICAgfSk7XG4gICAgfVxufTtcblxuY2xhc3MgU3RyZWFtRWxlbWVudCBleHRlbmRzIEhUTUxFbGVtZW50IHtcbiAgICBhc3luYyBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucmVuZGVyKCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMuZGlzY29ubmVjdCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIHJlbmRlcigpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4gKF9hID0gdGhpcy5yZW5kZXJQcm9taXNlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAodGhpcy5yZW5kZXJQcm9taXNlID0gKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRpc3BhdGNoRXZlbnQodGhpcy5iZWZvcmVSZW5kZXJFdmVudCkpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBuZXh0QW5pbWF0aW9uRnJhbWUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnBlcmZvcm1BY3Rpb24oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkoKSk7XG4gICAgfVxuICAgIGRpc2Nvbm5lY3QoKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChfYSkgeyB9XG4gICAgfVxuICAgIHJlbW92ZUR1cGxpY2F0ZVRhcmdldENoaWxkcmVuKCkge1xuICAgICAgICB0aGlzLmR1cGxpY2F0ZUNoaWxkcmVuLmZvckVhY2goYyA9PiBjLnJlbW92ZSgpKTtcbiAgICB9XG4gICAgZ2V0IGR1cGxpY2F0ZUNoaWxkcmVuKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nQ2hpbGRyZW4gPSB0aGlzLnRhcmdldEVsZW1lbnRzLmZsYXRNYXAoZSA9PiBbLi4uZS5jaGlsZHJlbl0pLmZpbHRlcihjID0+ICEhYy5pZCk7XG4gICAgICAgIGNvbnN0IG5ld0NoaWxkcmVuSWRzID0gWy4uLihfYSA9IHRoaXMudGVtcGxhdGVDb250ZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2hpbGRyZW5dLmZpbHRlcihjID0+ICEhYy5pZCkubWFwKGMgPT4gYy5pZCk7XG4gICAgICAgIHJldHVybiBleGlzdGluZ0NoaWxkcmVuLmZpbHRlcihjID0+IG5ld0NoaWxkcmVuSWRzLmluY2x1ZGVzKGMuaWQpKTtcbiAgICB9XG4gICAgZ2V0IHBlcmZvcm1BY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLmFjdGlvbikge1xuICAgICAgICAgICAgY29uc3QgYWN0aW9uRnVuY3Rpb24gPSBTdHJlYW1BY3Rpb25zW3RoaXMuYWN0aW9uXTtcbiAgICAgICAgICAgIGlmIChhY3Rpb25GdW5jdGlvbikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhY3Rpb25GdW5jdGlvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucmFpc2UoXCJ1bmtub3duIGFjdGlvblwiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJhaXNlKFwiYWN0aW9uIGF0dHJpYnV0ZSBpcyBtaXNzaW5nXCIpO1xuICAgIH1cbiAgICBnZXQgdGFyZ2V0RWxlbWVudHMoKSB7XG4gICAgICAgIGlmICh0aGlzLnRhcmdldCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGFyZ2V0RWxlbWVudHNCeUlkO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMudGFyZ2V0cykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGFyZ2V0RWxlbWVudHNCeVF1ZXJ5O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yYWlzZShcInRhcmdldCBvciB0YXJnZXRzIGF0dHJpYnV0ZSBpcyBtaXNzaW5nXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCB0ZW1wbGF0ZUNvbnRlbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRlbXBsYXRlRWxlbWVudC5jb250ZW50LmNsb25lTm9kZSh0cnVlKTtcbiAgICB9XG4gICAgZ2V0IHRlbXBsYXRlRWxlbWVudCgpIHtcbiAgICAgICAgaWYgKHRoaXMuZmlyc3RFbGVtZW50Q2hpbGQgaW5zdGFuY2VvZiBIVE1MVGVtcGxhdGVFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5maXJzdEVsZW1lbnRDaGlsZDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJhaXNlKFwiZmlyc3QgY2hpbGQgZWxlbWVudCBtdXN0IGJlIGEgPHRlbXBsYXRlPiBlbGVtZW50XCIpO1xuICAgIH1cbiAgICBnZXQgYWN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGUoXCJhY3Rpb25cIik7XG4gICAgfVxuICAgIGdldCB0YXJnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEF0dHJpYnV0ZShcInRhcmdldFwiKTtcbiAgICB9XG4gICAgZ2V0IHRhcmdldHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEF0dHJpYnV0ZShcInRhcmdldHNcIik7XG4gICAgfVxuICAgIHJhaXNlKG1lc3NhZ2UpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3RoaXMuZGVzY3JpcHRpb259OiAke21lc3NhZ2V9YCk7XG4gICAgfVxuICAgIGdldCBkZXNjcmlwdGlvbigpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgcmV0dXJuIChfYiA9ICgoX2EgPSB0aGlzLm91dGVySFRNTC5tYXRjaCgvPFtePl0rPi8pKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBbXSlbMF0pICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IFwiPHR1cmJvLXN0cmVhbT5cIjtcbiAgICB9XG4gICAgZ2V0IGJlZm9yZVJlbmRlckV2ZW50KCkge1xuICAgICAgICByZXR1cm4gbmV3IEN1c3RvbUV2ZW50KFwidHVyYm86YmVmb3JlLXN0cmVhbS1yZW5kZXJcIiwgeyBidWJibGVzOiB0cnVlLCBjYW5jZWxhYmxlOiB0cnVlIH0pO1xuICAgIH1cbiAgICBnZXQgdGFyZ2V0RWxlbWVudHNCeUlkKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSAoX2EgPSB0aGlzLm93bmVyRG9jdW1lbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5nZXRFbGVtZW50QnlJZCh0aGlzLnRhcmdldCk7XG4gICAgICAgIGlmIChlbGVtZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gW2VsZW1lbnRdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCB0YXJnZXRFbGVtZW50c0J5UXVlcnkoKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3QgZWxlbWVudHMgPSAoX2EgPSB0aGlzLm93bmVyRG9jdW1lbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5xdWVyeVNlbGVjdG9yQWxsKHRoaXMudGFyZ2V0cyk7XG4gICAgICAgIGlmIChlbGVtZW50cy5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlbGVtZW50cyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICB9XG59XG5cbkZyYW1lRWxlbWVudC5kZWxlZ2F0ZUNvbnN0cnVjdG9yID0gRnJhbWVDb250cm9sbGVyO1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidHVyYm8tZnJhbWVcIiwgRnJhbWVFbGVtZW50KTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInR1cmJvLXN0cmVhbVwiLCBTdHJlYW1FbGVtZW50KTtcblxuKCgpID0+IHtcbiAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LmN1cnJlbnRTY3JpcHQ7XG4gICAgaWYgKCFlbGVtZW50KVxuICAgICAgICByZXR1cm47XG4gICAgaWYgKGVsZW1lbnQuaGFzQXR0cmlidXRlKFwiZGF0YS10dXJiby1zdXBwcmVzcy13YXJuaW5nXCIpKVxuICAgICAgICByZXR1cm47XG4gICAgd2hpbGUgKGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudEVsZW1lbnQpIHtcbiAgICAgICAgaWYgKGVsZW1lbnQgPT0gZG9jdW1lbnQuYm9keSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnNvbGUud2Fybih1bmluZGVudCBgXG4gICAgICAgIFlvdSBhcmUgbG9hZGluZyBUdXJibyBmcm9tIGEgPHNjcmlwdD4gZWxlbWVudCBpbnNpZGUgdGhlIDxib2R5PiBlbGVtZW50LiBUaGlzIGlzIHByb2JhYmx5IG5vdCB3aGF0IHlvdSBtZWFudCB0byBkbyFcblxuICAgICAgICBMb2FkIHlvdXIgYXBwbGljYXRpb25cdTIwMTlzIEphdmFTY3JpcHQgYnVuZGxlIGluc2lkZSB0aGUgPGhlYWQ+IGVsZW1lbnQgaW5zdGVhZC4gPHNjcmlwdD4gZWxlbWVudHMgaW4gPGJvZHk+IGFyZSBldmFsdWF0ZWQgd2l0aCBlYWNoIHBhZ2UgY2hhbmdlLlxuXG4gICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWU6IGh0dHBzOi8vdHVyYm8uaG90d2lyZWQuZGV2L2hhbmRib29rL2J1aWxkaW5nI3dvcmtpbmctd2l0aC1zY3JpcHQtZWxlbWVudHNcblxuICAgICAgICBcdTIwMTRcdTIwMTRcbiAgICAgICAgU3VwcHJlc3MgdGhpcyB3YXJuaW5nIGJ5IGFkZGluZyBhIFwiZGF0YS10dXJiby1zdXBwcmVzcy13YXJuaW5nXCIgYXR0cmlidXRlIHRvOiAlc1xuICAgICAgYCwgZWxlbWVudC5vdXRlckhUTUwpO1xuICAgICAgICB9XG4gICAgfVxufSkoKTtcblxud2luZG93LlR1cmJvID0gVHVyYm87XG5zdGFydCgpO1xuXG5leHBvcnQgeyBQYWdlUmVuZGVyZXIsIFBhZ2VTbmFwc2hvdCwgY2xlYXJDYWNoZSwgY29ubmVjdFN0cmVhbVNvdXJjZSwgZGlzY29ubmVjdFN0cmVhbVNvdXJjZSwgbmF2aWdhdG9yLCByZWdpc3RlckFkYXB0ZXIsIHJlbmRlclN0cmVhbU1lc3NhZ2UsIHNlc3Npb24sIHNldFByb2dyZXNzQmFyRGVsYXksIHN0YXJ0LCB2aXNpdCB9O1xuIiwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgImV4cG9ydCBjb25zdCBkZWZpbml0aW9ucyA9IFtcbl07XG4iLCAiLy8gd3JhcHMgdmFsdWUgaW4gY2xvc3VyZSBvciByZXR1cm5zIGNsb3N1cmVcbmV4cG9ydCBsZXQgY2xvc3VyZSA9ICh2YWx1ZSkgPT4ge1xuICBpZih0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIil7XG4gICAgcmV0dXJuIHZhbHVlXG4gIH0gZWxzZSB7XG4gICAgbGV0IGNsb3N1cmUgPSBmdW5jdGlvbiAoKXsgcmV0dXJuIHZhbHVlIH1cbiAgICByZXR1cm4gY2xvc3VyZVxuICB9XG59XG4iLCAiZXhwb3J0IGNvbnN0IGdsb2JhbFNlbGYgPSB0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiA/IHNlbGYgOiBudWxsXG5leHBvcnQgY29uc3QgcGh4V2luZG93ID0gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvdyA6IG51bGxcbmV4cG9ydCBjb25zdCBnbG9iYWwgPSBnbG9iYWxTZWxmIHx8IHBoeFdpbmRvdyB8fCB0aGlzXG5leHBvcnQgY29uc3QgREVGQVVMVF9WU04gPSBcIjIuMC4wXCJcbmV4cG9ydCBjb25zdCBTT0NLRVRfU1RBVEVTID0ge2Nvbm5lY3Rpbmc6IDAsIG9wZW46IDEsIGNsb3Npbmc6IDIsIGNsb3NlZDogM31cbmV4cG9ydCBjb25zdCBERUZBVUxUX1RJTUVPVVQgPSAxMDAwMFxuZXhwb3J0IGNvbnN0IFdTX0NMT1NFX05PUk1BTCA9IDEwMDBcbmV4cG9ydCBjb25zdCBDSEFOTkVMX1NUQVRFUyA9IHtcbiAgY2xvc2VkOiBcImNsb3NlZFwiLFxuICBlcnJvcmVkOiBcImVycm9yZWRcIixcbiAgam9pbmVkOiBcImpvaW5lZFwiLFxuICBqb2luaW5nOiBcImpvaW5pbmdcIixcbiAgbGVhdmluZzogXCJsZWF2aW5nXCIsXG59XG5leHBvcnQgY29uc3QgQ0hBTk5FTF9FVkVOVFMgPSB7XG4gIGNsb3NlOiBcInBoeF9jbG9zZVwiLFxuICBlcnJvcjogXCJwaHhfZXJyb3JcIixcbiAgam9pbjogXCJwaHhfam9pblwiLFxuICByZXBseTogXCJwaHhfcmVwbHlcIixcbiAgbGVhdmU6IFwicGh4X2xlYXZlXCJcbn1cbmV4cG9ydCBjb25zdCBDSEFOTkVMX0xJRkVDWUNMRV9FVkVOVFMgPSBbXG4gIENIQU5ORUxfRVZFTlRTLmNsb3NlLFxuICBDSEFOTkVMX0VWRU5UUy5lcnJvcixcbiAgQ0hBTk5FTF9FVkVOVFMuam9pbixcbiAgQ0hBTk5FTF9FVkVOVFMucmVwbHksXG4gIENIQU5ORUxfRVZFTlRTLmxlYXZlXG5dXG5leHBvcnQgY29uc3QgVFJBTlNQT1JUUyA9IHtcbiAgbG9uZ3BvbGw6IFwibG9uZ3BvbGxcIixcbiAgd2Vic29ja2V0OiBcIndlYnNvY2tldFwiXG59XG4iLCAiLyoqXG4gKiBJbml0aWFsaXplcyB0aGUgUHVzaFxuICogQHBhcmFtIHtDaGFubmVsfSBjaGFubmVsIC0gVGhlIENoYW5uZWxcbiAqIEBwYXJhbSB7c3RyaW5nfSBldmVudCAtIFRoZSBldmVudCwgZm9yIGV4YW1wbGUgYFwicGh4X2pvaW5cImBcbiAqIEBwYXJhbSB7T2JqZWN0fSBwYXlsb2FkIC0gVGhlIHBheWxvYWQsIGZvciBleGFtcGxlIGB7dXNlcl9pZDogMTIzfWBcbiAqIEBwYXJhbSB7bnVtYmVyfSB0aW1lb3V0IC0gVGhlIHB1c2ggdGltZW91dCBpbiBtaWxsaXNlY29uZHNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHVzaCB7XG4gIGNvbnN0cnVjdG9yKGNoYW5uZWwsIGV2ZW50LCBwYXlsb2FkLCB0aW1lb3V0KXtcbiAgICB0aGlzLmNoYW5uZWwgPSBjaGFubmVsXG4gICAgdGhpcy5ldmVudCA9IGV2ZW50XG4gICAgdGhpcy5wYXlsb2FkID0gcGF5bG9hZCB8fCBmdW5jdGlvbiAoKXsgcmV0dXJuIHt9IH1cbiAgICB0aGlzLnJlY2VpdmVkUmVzcCA9IG51bGxcbiAgICB0aGlzLnRpbWVvdXQgPSB0aW1lb3V0XG4gICAgdGhpcy50aW1lb3V0VGltZXIgPSBudWxsXG4gICAgdGhpcy5yZWNIb29rcyA9IFtdXG4gICAgdGhpcy5zZW50ID0gZmFsc2VcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gdGltZW91dFxuICAgKi9cbiAgcmVzZW5kKHRpbWVvdXQpe1xuICAgIHRoaXMudGltZW91dCA9IHRpbWVvdXRcbiAgICB0aGlzLnJlc2V0KClcbiAgICB0aGlzLnNlbmQoKVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqL1xuICBzZW5kKCl7XG4gICAgaWYodGhpcy5oYXNSZWNlaXZlZChcInRpbWVvdXRcIikpeyByZXR1cm4gfVxuICAgIHRoaXMuc3RhcnRUaW1lb3V0KClcbiAgICB0aGlzLnNlbnQgPSB0cnVlXG4gICAgdGhpcy5jaGFubmVsLnNvY2tldC5wdXNoKHtcbiAgICAgIHRvcGljOiB0aGlzLmNoYW5uZWwudG9waWMsXG4gICAgICBldmVudDogdGhpcy5ldmVudCxcbiAgICAgIHBheWxvYWQ6IHRoaXMucGF5bG9hZCgpLFxuICAgICAgcmVmOiB0aGlzLnJlZixcbiAgICAgIGpvaW5fcmVmOiB0aGlzLmNoYW5uZWwuam9pblJlZigpXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0geyp9IHN0YXR1c1xuICAgKiBAcGFyYW0geyp9IGNhbGxiYWNrXG4gICAqL1xuICByZWNlaXZlKHN0YXR1cywgY2FsbGJhY2spe1xuICAgIGlmKHRoaXMuaGFzUmVjZWl2ZWQoc3RhdHVzKSl7XG4gICAgICBjYWxsYmFjayh0aGlzLnJlY2VpdmVkUmVzcC5yZXNwb25zZSlcbiAgICB9XG5cbiAgICB0aGlzLnJlY0hvb2tzLnB1c2goe3N0YXR1cywgY2FsbGJhY2t9KVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHJlc2V0KCl7XG4gICAgdGhpcy5jYW5jZWxSZWZFdmVudCgpXG4gICAgdGhpcy5yZWYgPSBudWxsXG4gICAgdGhpcy5yZWZFdmVudCA9IG51bGxcbiAgICB0aGlzLnJlY2VpdmVkUmVzcCA9IG51bGxcbiAgICB0aGlzLnNlbnQgPSBmYWxzZVxuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBtYXRjaFJlY2VpdmUoe3N0YXR1cywgcmVzcG9uc2UsIF9yZWZ9KXtcbiAgICB0aGlzLnJlY0hvb2tzLmZpbHRlcihoID0+IGguc3RhdHVzID09PSBzdGF0dXMpXG4gICAgICAuZm9yRWFjaChoID0+IGguY2FsbGJhY2socmVzcG9uc2UpKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjYW5jZWxSZWZFdmVudCgpe1xuICAgIGlmKCF0aGlzLnJlZkV2ZW50KXsgcmV0dXJuIH1cbiAgICB0aGlzLmNoYW5uZWwub2ZmKHRoaXMucmVmRXZlbnQpXG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGNhbmNlbFRpbWVvdXQoKXtcbiAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0VGltZXIpXG4gICAgdGhpcy50aW1lb3V0VGltZXIgPSBudWxsXG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHN0YXJ0VGltZW91dCgpe1xuICAgIGlmKHRoaXMudGltZW91dFRpbWVyKXsgdGhpcy5jYW5jZWxUaW1lb3V0KCkgfVxuICAgIHRoaXMucmVmID0gdGhpcy5jaGFubmVsLnNvY2tldC5tYWtlUmVmKClcbiAgICB0aGlzLnJlZkV2ZW50ID0gdGhpcy5jaGFubmVsLnJlcGx5RXZlbnROYW1lKHRoaXMucmVmKVxuXG4gICAgdGhpcy5jaGFubmVsLm9uKHRoaXMucmVmRXZlbnQsIHBheWxvYWQgPT4ge1xuICAgICAgdGhpcy5jYW5jZWxSZWZFdmVudCgpXG4gICAgICB0aGlzLmNhbmNlbFRpbWVvdXQoKVxuICAgICAgdGhpcy5yZWNlaXZlZFJlc3AgPSBwYXlsb2FkXG4gICAgICB0aGlzLm1hdGNoUmVjZWl2ZShwYXlsb2FkKVxuICAgIH0pXG5cbiAgICB0aGlzLnRpbWVvdXRUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy50cmlnZ2VyKFwidGltZW91dFwiLCB7fSlcbiAgICB9LCB0aGlzLnRpbWVvdXQpXG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGhhc1JlY2VpdmVkKHN0YXR1cyl7XG4gICAgcmV0dXJuIHRoaXMucmVjZWl2ZWRSZXNwICYmIHRoaXMucmVjZWl2ZWRSZXNwLnN0YXR1cyA9PT0gc3RhdHVzXG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHRyaWdnZXIoc3RhdHVzLCByZXNwb25zZSl7XG4gICAgdGhpcy5jaGFubmVsLnRyaWdnZXIodGhpcy5yZWZFdmVudCwge3N0YXR1cywgcmVzcG9uc2V9KVxuICB9XG59XG4iLCAiLyoqXG4gKlxuICogQ3JlYXRlcyBhIHRpbWVyIHRoYXQgYWNjZXB0cyBhIGB0aW1lckNhbGNgIGZ1bmN0aW9uIHRvIHBlcmZvcm1cbiAqIGNhbGN1bGF0ZWQgdGltZW91dCByZXRyaWVzLCBzdWNoIGFzIGV4cG9uZW50aWFsIGJhY2tvZmYuXG4gKlxuICogQGV4YW1wbGVcbiAqIGxldCByZWNvbm5lY3RUaW1lciA9IG5ldyBUaW1lcigoKSA9PiB0aGlzLmNvbm5lY3QoKSwgZnVuY3Rpb24odHJpZXMpe1xuICogICByZXR1cm4gWzEwMDAsIDUwMDAsIDEwMDAwXVt0cmllcyAtIDFdIHx8IDEwMDAwXG4gKiB9KVxuICogcmVjb25uZWN0VGltZXIuc2NoZWR1bGVUaW1lb3V0KCkgLy8gZmlyZXMgYWZ0ZXIgMTAwMFxuICogcmVjb25uZWN0VGltZXIuc2NoZWR1bGVUaW1lb3V0KCkgLy8gZmlyZXMgYWZ0ZXIgNTAwMFxuICogcmVjb25uZWN0VGltZXIucmVzZXQoKVxuICogcmVjb25uZWN0VGltZXIuc2NoZWR1bGVUaW1lb3V0KCkgLy8gZmlyZXMgYWZ0ZXIgMTAwMFxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB0aW1lckNhbGNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGltZXIge1xuICBjb25zdHJ1Y3RvcihjYWxsYmFjaywgdGltZXJDYWxjKXtcbiAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2tcbiAgICB0aGlzLnRpbWVyQ2FsYyA9IHRpbWVyQ2FsY1xuICAgIHRoaXMudGltZXIgPSBudWxsXG4gICAgdGhpcy50cmllcyA9IDBcbiAgfVxuXG4gIHJlc2V0KCl7XG4gICAgdGhpcy50cmllcyA9IDBcbiAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lcilcbiAgfVxuXG4gIC8qKlxuICAgKiBDYW5jZWxzIGFueSBwcmV2aW91cyBzY2hlZHVsZVRpbWVvdXQgYW5kIHNjaGVkdWxlcyBjYWxsYmFja1xuICAgKi9cbiAgc2NoZWR1bGVUaW1lb3V0KCl7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZXIpXG5cbiAgICB0aGlzLnRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnRyaWVzID0gdGhpcy50cmllcyArIDFcbiAgICAgIHRoaXMuY2FsbGJhY2soKVxuICAgIH0sIHRoaXMudGltZXJDYWxjKHRoaXMudHJpZXMgKyAxKSlcbiAgfVxufVxuIiwgImltcG9ydCB7Y2xvc3VyZX0gZnJvbSBcIi4vdXRpbHNcIlxuaW1wb3J0IHtcbiAgQ0hBTk5FTF9FVkVOVFMsXG4gIENIQU5ORUxfTElGRUNZQ0xFX0VWRU5UUyxcbiAgQ0hBTk5FTF9TVEFURVMsXG59IGZyb20gXCIuL2NvbnN0YW50c1wiXG5cbmltcG9ydCBQdXNoIGZyb20gXCIuL3B1c2hcIlxuaW1wb3J0IFRpbWVyIGZyb20gXCIuL3RpbWVyXCJcblxuLyoqXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRvcGljXG4gKiBAcGFyYW0geyhPYmplY3R8ZnVuY3Rpb24pfSBwYXJhbXNcbiAqIEBwYXJhbSB7U29ja2V0fSBzb2NrZXRcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hhbm5lbCB7XG4gIGNvbnN0cnVjdG9yKHRvcGljLCBwYXJhbXMsIHNvY2tldCl7XG4gICAgdGhpcy5zdGF0ZSA9IENIQU5ORUxfU1RBVEVTLmNsb3NlZFxuICAgIHRoaXMudG9waWMgPSB0b3BpY1xuICAgIHRoaXMucGFyYW1zID0gY2xvc3VyZShwYXJhbXMgfHwge30pXG4gICAgdGhpcy5zb2NrZXQgPSBzb2NrZXRcbiAgICB0aGlzLmJpbmRpbmdzID0gW11cbiAgICB0aGlzLmJpbmRpbmdSZWYgPSAwXG4gICAgdGhpcy50aW1lb3V0ID0gdGhpcy5zb2NrZXQudGltZW91dFxuICAgIHRoaXMuam9pbmVkT25jZSA9IGZhbHNlXG4gICAgdGhpcy5qb2luUHVzaCA9IG5ldyBQdXNoKHRoaXMsIENIQU5ORUxfRVZFTlRTLmpvaW4sIHRoaXMucGFyYW1zLCB0aGlzLnRpbWVvdXQpXG4gICAgdGhpcy5wdXNoQnVmZmVyID0gW11cbiAgICB0aGlzLnN0YXRlQ2hhbmdlUmVmcyA9IFtdXG5cbiAgICB0aGlzLnJlam9pblRpbWVyID0gbmV3IFRpbWVyKCgpID0+IHtcbiAgICAgIGlmKHRoaXMuc29ja2V0LmlzQ29ubmVjdGVkKCkpeyB0aGlzLnJlam9pbigpIH1cbiAgICB9LCB0aGlzLnNvY2tldC5yZWpvaW5BZnRlck1zKVxuICAgIHRoaXMuc3RhdGVDaGFuZ2VSZWZzLnB1c2godGhpcy5zb2NrZXQub25FcnJvcigoKSA9PiB0aGlzLnJlam9pblRpbWVyLnJlc2V0KCkpKVxuICAgIHRoaXMuc3RhdGVDaGFuZ2VSZWZzLnB1c2godGhpcy5zb2NrZXQub25PcGVuKCgpID0+IHtcbiAgICAgIHRoaXMucmVqb2luVGltZXIucmVzZXQoKVxuICAgICAgaWYodGhpcy5pc0Vycm9yZWQoKSl7IHRoaXMucmVqb2luKCkgfVxuICAgIH0pXG4gICAgKVxuICAgIHRoaXMuam9pblB1c2gucmVjZWl2ZShcIm9rXCIsICgpID0+IHtcbiAgICAgIHRoaXMuc3RhdGUgPSBDSEFOTkVMX1NUQVRFUy5qb2luZWRcbiAgICAgIHRoaXMucmVqb2luVGltZXIucmVzZXQoKVxuICAgICAgdGhpcy5wdXNoQnVmZmVyLmZvckVhY2gocHVzaEV2ZW50ID0+IHB1c2hFdmVudC5zZW5kKCkpXG4gICAgICB0aGlzLnB1c2hCdWZmZXIgPSBbXVxuICAgIH0pXG4gICAgdGhpcy5qb2luUHVzaC5yZWNlaXZlKFwiZXJyb3JcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5zdGF0ZSA9IENIQU5ORUxfU1RBVEVTLmVycm9yZWRcbiAgICAgIGlmKHRoaXMuc29ja2V0LmlzQ29ubmVjdGVkKCkpeyB0aGlzLnJlam9pblRpbWVyLnNjaGVkdWxlVGltZW91dCgpIH1cbiAgICB9KVxuICAgIHRoaXMub25DbG9zZSgoKSA9PiB7XG4gICAgICB0aGlzLnJlam9pblRpbWVyLnJlc2V0KClcbiAgICAgIGlmKHRoaXMuc29ja2V0Lmhhc0xvZ2dlcigpKSB0aGlzLnNvY2tldC5sb2coXCJjaGFubmVsXCIsIGBjbG9zZSAke3RoaXMudG9waWN9ICR7dGhpcy5qb2luUmVmKCl9YClcbiAgICAgIHRoaXMuc3RhdGUgPSBDSEFOTkVMX1NUQVRFUy5jbG9zZWRcbiAgICAgIHRoaXMuc29ja2V0LnJlbW92ZSh0aGlzKVxuICAgIH0pXG4gICAgdGhpcy5vbkVycm9yKHJlYXNvbiA9PiB7XG4gICAgICBpZih0aGlzLnNvY2tldC5oYXNMb2dnZXIoKSkgdGhpcy5zb2NrZXQubG9nKFwiY2hhbm5lbFwiLCBgZXJyb3IgJHt0aGlzLnRvcGljfWAsIHJlYXNvbilcbiAgICAgIGlmKHRoaXMuaXNKb2luaW5nKCkpeyB0aGlzLmpvaW5QdXNoLnJlc2V0KCkgfVxuICAgICAgdGhpcy5zdGF0ZSA9IENIQU5ORUxfU1RBVEVTLmVycm9yZWRcbiAgICAgIGlmKHRoaXMuc29ja2V0LmlzQ29ubmVjdGVkKCkpeyB0aGlzLnJlam9pblRpbWVyLnNjaGVkdWxlVGltZW91dCgpIH1cbiAgICB9KVxuICAgIHRoaXMuam9pblB1c2gucmVjZWl2ZShcInRpbWVvdXRcIiwgKCkgPT4ge1xuICAgICAgaWYodGhpcy5zb2NrZXQuaGFzTG9nZ2VyKCkpIHRoaXMuc29ja2V0LmxvZyhcImNoYW5uZWxcIiwgYHRpbWVvdXQgJHt0aGlzLnRvcGljfSAoJHt0aGlzLmpvaW5SZWYoKX0pYCwgdGhpcy5qb2luUHVzaC50aW1lb3V0KVxuICAgICAgbGV0IGxlYXZlUHVzaCA9IG5ldyBQdXNoKHRoaXMsIENIQU5ORUxfRVZFTlRTLmxlYXZlLCBjbG9zdXJlKHt9KSwgdGhpcy50aW1lb3V0KVxuICAgICAgbGVhdmVQdXNoLnNlbmQoKVxuICAgICAgdGhpcy5zdGF0ZSA9IENIQU5ORUxfU1RBVEVTLmVycm9yZWRcbiAgICAgIHRoaXMuam9pblB1c2gucmVzZXQoKVxuICAgICAgaWYodGhpcy5zb2NrZXQuaXNDb25uZWN0ZWQoKSl7IHRoaXMucmVqb2luVGltZXIuc2NoZWR1bGVUaW1lb3V0KCkgfVxuICAgIH0pXG4gICAgdGhpcy5vbihDSEFOTkVMX0VWRU5UUy5yZXBseSwgKHBheWxvYWQsIHJlZikgPT4ge1xuICAgICAgdGhpcy50cmlnZ2VyKHRoaXMucmVwbHlFdmVudE5hbWUocmVmKSwgcGF5bG9hZClcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEpvaW4gdGhlIGNoYW5uZWxcbiAgICogQHBhcmFtIHtpbnRlZ2VyfSB0aW1lb3V0XG4gICAqIEByZXR1cm5zIHtQdXNofVxuICAgKi9cbiAgam9pbih0aW1lb3V0ID0gdGhpcy50aW1lb3V0KXtcbiAgICBpZih0aGlzLmpvaW5lZE9uY2Upe1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwidHJpZWQgdG8gam9pbiBtdWx0aXBsZSB0aW1lcy4gJ2pvaW4nIGNhbiBvbmx5IGJlIGNhbGxlZCBhIHNpbmdsZSB0aW1lIHBlciBjaGFubmVsIGluc3RhbmNlXCIpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudGltZW91dCA9IHRpbWVvdXRcbiAgICAgIHRoaXMuam9pbmVkT25jZSA9IHRydWVcbiAgICAgIHRoaXMucmVqb2luKClcbiAgICAgIHJldHVybiB0aGlzLmpvaW5QdXNoXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhvb2sgaW50byBjaGFubmVsIGNsb3NlXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gICAqL1xuICBvbkNsb3NlKGNhbGxiYWNrKXtcbiAgICB0aGlzLm9uKENIQU5ORUxfRVZFTlRTLmNsb3NlLCBjYWxsYmFjaylcbiAgfVxuXG4gIC8qKlxuICAgKiBIb29rIGludG8gY2hhbm5lbCBlcnJvcnNcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAgICovXG4gIG9uRXJyb3IoY2FsbGJhY2spe1xuICAgIHJldHVybiB0aGlzLm9uKENIQU5ORUxfRVZFTlRTLmVycm9yLCByZWFzb24gPT4gY2FsbGJhY2socmVhc29uKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBTdWJzY3JpYmVzIG9uIGNoYW5uZWwgZXZlbnRzXG4gICAqXG4gICAqIFN1YnNjcmlwdGlvbiByZXR1cm5zIGEgcmVmIGNvdW50ZXIsIHdoaWNoIGNhbiBiZSB1c2VkIGxhdGVyIHRvXG4gICAqIHVuc3Vic2NyaWJlIHRoZSBleGFjdCBldmVudCBsaXN0ZW5lclxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBjb25zdCByZWYxID0gY2hhbm5lbC5vbihcImV2ZW50XCIsIGRvX3N0dWZmKVxuICAgKiBjb25zdCByZWYyID0gY2hhbm5lbC5vbihcImV2ZW50XCIsIGRvX290aGVyX3N0dWZmKVxuICAgKiBjaGFubmVsLm9mZihcImV2ZW50XCIsIHJlZjEpXG4gICAqIC8vIFNpbmNlIHVuc3Vic2NyaXB0aW9uLCBkb19zdHVmZiB3b24ndCBmaXJlLFxuICAgKiAvLyB3aGlsZSBkb19vdGhlcl9zdHVmZiB3aWxsIGtlZXAgZmlyaW5nIG9uIHRoZSBcImV2ZW50XCJcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50XG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gICAqIEByZXR1cm5zIHtpbnRlZ2VyfSByZWZcbiAgICovXG4gIG9uKGV2ZW50LCBjYWxsYmFjayl7XG4gICAgbGV0IHJlZiA9IHRoaXMuYmluZGluZ1JlZisrXG4gICAgdGhpcy5iaW5kaW5ncy5wdXNoKHtldmVudCwgcmVmLCBjYWxsYmFja30pXG4gICAgcmV0dXJuIHJlZlxuICB9XG5cbiAgLyoqXG4gICAqIFVuc3Vic2NyaWJlcyBvZmYgb2YgY2hhbm5lbCBldmVudHNcbiAgICpcbiAgICogVXNlIHRoZSByZWYgcmV0dXJuZWQgZnJvbSBhIGNoYW5uZWwub24oKSB0byB1bnN1YnNjcmliZSBvbmVcbiAgICogaGFuZGxlciwgb3IgcGFzcyBub3RoaW5nIGZvciB0aGUgcmVmIHRvIHVuc3Vic2NyaWJlIGFsbFxuICAgKiBoYW5kbGVycyBmb3IgdGhlIGdpdmVuIGV2ZW50LlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiAvLyBVbnN1YnNjcmliZSB0aGUgZG9fc3R1ZmYgaGFuZGxlclxuICAgKiBjb25zdCByZWYxID0gY2hhbm5lbC5vbihcImV2ZW50XCIsIGRvX3N0dWZmKVxuICAgKiBjaGFubmVsLm9mZihcImV2ZW50XCIsIHJlZjEpXG4gICAqXG4gICAqIC8vIFVuc3Vic2NyaWJlIGFsbCBoYW5kbGVycyBmcm9tIGV2ZW50XG4gICAqIGNoYW5uZWwub2ZmKFwiZXZlbnRcIilcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50XG4gICAqIEBwYXJhbSB7aW50ZWdlcn0gcmVmXG4gICAqL1xuICBvZmYoZXZlbnQsIHJlZil7XG4gICAgdGhpcy5iaW5kaW5ncyA9IHRoaXMuYmluZGluZ3MuZmlsdGVyKChiaW5kKSA9PiB7XG4gICAgICByZXR1cm4gIShiaW5kLmV2ZW50ID09PSBldmVudCAmJiAodHlwZW9mIHJlZiA9PT0gXCJ1bmRlZmluZWRcIiB8fCByZWYgPT09IGJpbmQucmVmKSlcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjYW5QdXNoKCl7IHJldHVybiB0aGlzLnNvY2tldC5pc0Nvbm5lY3RlZCgpICYmIHRoaXMuaXNKb2luZWQoKSB9XG5cbiAgLyoqXG4gICAqIFNlbmRzIGEgbWVzc2FnZSBgZXZlbnRgIHRvIHBob2VuaXggd2l0aCB0aGUgcGF5bG9hZCBgcGF5bG9hZGAuXG4gICAqIFBob2VuaXggcmVjZWl2ZXMgdGhpcyBpbiB0aGUgYGhhbmRsZV9pbihldmVudCwgcGF5bG9hZCwgc29ja2V0KWBcbiAgICogZnVuY3Rpb24uIGlmIHBob2VuaXggcmVwbGllcyBvciBpdCB0aW1lcyBvdXQgKGRlZmF1bHQgMTAwMDBtcyksXG4gICAqIHRoZW4gb3B0aW9uYWxseSB0aGUgcmVwbHkgY2FuIGJlIHJlY2VpdmVkLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBjaGFubmVsLnB1c2goXCJldmVudFwiKVxuICAgKiAgIC5yZWNlaXZlKFwib2tcIiwgcGF5bG9hZCA9PiBjb25zb2xlLmxvZyhcInBob2VuaXggcmVwbGllZDpcIiwgcGF5bG9hZCkpXG4gICAqICAgLnJlY2VpdmUoXCJlcnJvclwiLCBlcnIgPT4gY29uc29sZS5sb2coXCJwaG9lbml4IGVycm9yZWRcIiwgZXJyKSlcbiAgICogICAucmVjZWl2ZShcInRpbWVvdXRcIiwgKCkgPT4gY29uc29sZS5sb2coXCJ0aW1lZCBvdXQgcHVzaGluZ1wiKSlcbiAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwYXlsb2FkXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbdGltZW91dF1cbiAgICogQHJldHVybnMge1B1c2h9XG4gICAqL1xuICBwdXNoKGV2ZW50LCBwYXlsb2FkLCB0aW1lb3V0ID0gdGhpcy50aW1lb3V0KXtcbiAgICBwYXlsb2FkID0gcGF5bG9hZCB8fCB7fVxuICAgIGlmKCF0aGlzLmpvaW5lZE9uY2Upe1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGB0cmllZCB0byBwdXNoICcke2V2ZW50fScgdG8gJyR7dGhpcy50b3BpY30nIGJlZm9yZSBqb2luaW5nLiBVc2UgY2hhbm5lbC5qb2luKCkgYmVmb3JlIHB1c2hpbmcgZXZlbnRzYClcbiAgICB9XG4gICAgbGV0IHB1c2hFdmVudCA9IG5ldyBQdXNoKHRoaXMsIGV2ZW50LCBmdW5jdGlvbiAoKXsgcmV0dXJuIHBheWxvYWQgfSwgdGltZW91dClcbiAgICBpZih0aGlzLmNhblB1c2goKSl7XG4gICAgICBwdXNoRXZlbnQuc2VuZCgpXG4gICAgfSBlbHNlIHtcbiAgICAgIHB1c2hFdmVudC5zdGFydFRpbWVvdXQoKVxuICAgICAgdGhpcy5wdXNoQnVmZmVyLnB1c2gocHVzaEV2ZW50KVxuICAgIH1cblxuICAgIHJldHVybiBwdXNoRXZlbnRcbiAgfVxuXG4gIC8qKiBMZWF2ZXMgdGhlIGNoYW5uZWxcbiAgICpcbiAgICogVW5zdWJzY3JpYmVzIGZyb20gc2VydmVyIGV2ZW50cywgYW5kXG4gICAqIGluc3RydWN0cyBjaGFubmVsIHRvIHRlcm1pbmF0ZSBvbiBzZXJ2ZXJcbiAgICpcbiAgICogVHJpZ2dlcnMgb25DbG9zZSgpIGhvb2tzXG4gICAqXG4gICAqIFRvIHJlY2VpdmUgbGVhdmUgYWNrbm93bGVkZ2VtZW50cywgdXNlIHRoZSBgcmVjZWl2ZWBcbiAgICogaG9vayB0byBiaW5kIHRvIHRoZSBzZXJ2ZXIgYWNrLCBpZTpcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogY2hhbm5lbC5sZWF2ZSgpLnJlY2VpdmUoXCJva1wiLCAoKSA9PiBhbGVydChcImxlZnQhXCIpIClcbiAgICpcbiAgICogQHBhcmFtIHtpbnRlZ2VyfSB0aW1lb3V0XG4gICAqIEByZXR1cm5zIHtQdXNofVxuICAgKi9cbiAgbGVhdmUodGltZW91dCA9IHRoaXMudGltZW91dCl7XG4gICAgdGhpcy5yZWpvaW5UaW1lci5yZXNldCgpXG4gICAgdGhpcy5qb2luUHVzaC5jYW5jZWxUaW1lb3V0KClcblxuICAgIHRoaXMuc3RhdGUgPSBDSEFOTkVMX1NUQVRFUy5sZWF2aW5nXG4gICAgbGV0IG9uQ2xvc2UgPSAoKSA9PiB7XG4gICAgICBpZih0aGlzLnNvY2tldC5oYXNMb2dnZXIoKSkgdGhpcy5zb2NrZXQubG9nKFwiY2hhbm5lbFwiLCBgbGVhdmUgJHt0aGlzLnRvcGljfWApXG4gICAgICB0aGlzLnRyaWdnZXIoQ0hBTk5FTF9FVkVOVFMuY2xvc2UsIFwibGVhdmVcIilcbiAgICB9XG4gICAgbGV0IGxlYXZlUHVzaCA9IG5ldyBQdXNoKHRoaXMsIENIQU5ORUxfRVZFTlRTLmxlYXZlLCBjbG9zdXJlKHt9KSwgdGltZW91dClcbiAgICBsZWF2ZVB1c2gucmVjZWl2ZShcIm9rXCIsICgpID0+IG9uQ2xvc2UoKSlcbiAgICAgIC5yZWNlaXZlKFwidGltZW91dFwiLCAoKSA9PiBvbkNsb3NlKCkpXG4gICAgbGVhdmVQdXNoLnNlbmQoKVxuICAgIGlmKCF0aGlzLmNhblB1c2goKSl7IGxlYXZlUHVzaC50cmlnZ2VyKFwib2tcIiwge30pIH1cblxuICAgIHJldHVybiBsZWF2ZVB1c2hcbiAgfVxuXG4gIC8qKlxuICAgKiBPdmVycmlkYWJsZSBtZXNzYWdlIGhvb2tcbiAgICpcbiAgICogUmVjZWl2ZXMgYWxsIGV2ZW50cyBmb3Igc3BlY2lhbGl6ZWQgbWVzc2FnZSBoYW5kbGluZ1xuICAgKiBiZWZvcmUgZGlzcGF0Y2hpbmcgdG8gdGhlIGNoYW5uZWwgY2FsbGJhY2tzLlxuICAgKlxuICAgKiBNdXN0IHJldHVybiB0aGUgcGF5bG9hZCwgbW9kaWZpZWQgb3IgdW5tb2RpZmllZFxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnRcbiAgICogQHBhcmFtIHtPYmplY3R9IHBheWxvYWRcbiAgICogQHBhcmFtIHtpbnRlZ2VyfSByZWZcbiAgICogQHJldHVybnMge09iamVjdH1cbiAgICovXG4gIG9uTWVzc2FnZShfZXZlbnQsIHBheWxvYWQsIF9yZWYpeyByZXR1cm4gcGF5bG9hZCB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBpc0xpZmVjeWNsZUV2ZW50KGV2ZW50KXsgcmV0dXJuIENIQU5ORUxfTElGRUNZQ0xFX0VWRU5UUy5pbmRleE9mKGV2ZW50KSA+PSAwIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGlzTWVtYmVyKHRvcGljLCBldmVudCwgcGF5bG9hZCwgam9pblJlZil7XG4gICAgaWYodGhpcy50b3BpYyAhPT0gdG9waWMpeyByZXR1cm4gZmFsc2UgfVxuXG4gICAgaWYoam9pblJlZiAmJiBqb2luUmVmICE9PSB0aGlzLmpvaW5SZWYoKSAmJiB0aGlzLmlzTGlmZWN5Y2xlRXZlbnQoZXZlbnQpKXtcbiAgICAgIGlmKHRoaXMuc29ja2V0Lmhhc0xvZ2dlcigpKSB0aGlzLnNvY2tldC5sb2coXCJjaGFubmVsXCIsIFwiZHJvcHBpbmcgb3V0ZGF0ZWQgbWVzc2FnZVwiLCB7dG9waWMsIGV2ZW50LCBwYXlsb2FkLCBqb2luUmVmfSlcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgam9pblJlZigpeyByZXR1cm4gdGhpcy5qb2luUHVzaC5yZWYgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcmVqb2luKHRpbWVvdXQgPSB0aGlzLnRpbWVvdXQpe1xuICAgIGlmKHRoaXMuaXNMZWF2aW5nKCkpeyByZXR1cm4gfVxuICAgIHRoaXMuc29ja2V0LmxlYXZlT3BlblRvcGljKHRoaXMudG9waWMpXG4gICAgdGhpcy5zdGF0ZSA9IENIQU5ORUxfU1RBVEVTLmpvaW5pbmdcbiAgICB0aGlzLmpvaW5QdXNoLnJlc2VuZCh0aW1lb3V0KVxuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICB0cmlnZ2VyKGV2ZW50LCBwYXlsb2FkLCByZWYsIGpvaW5SZWYpe1xuICAgIGxldCBoYW5kbGVkUGF5bG9hZCA9IHRoaXMub25NZXNzYWdlKGV2ZW50LCBwYXlsb2FkLCByZWYsIGpvaW5SZWYpXG4gICAgaWYocGF5bG9hZCAmJiAhaGFuZGxlZFBheWxvYWQpeyB0aHJvdyBuZXcgRXJyb3IoXCJjaGFubmVsIG9uTWVzc2FnZSBjYWxsYmFja3MgbXVzdCByZXR1cm4gdGhlIHBheWxvYWQsIG1vZGlmaWVkIG9yIHVubW9kaWZpZWRcIikgfVxuXG4gICAgbGV0IGV2ZW50QmluZGluZ3MgPSB0aGlzLmJpbmRpbmdzLmZpbHRlcihiaW5kID0+IGJpbmQuZXZlbnQgPT09IGV2ZW50KVxuXG4gICAgZm9yKGxldCBpID0gMDsgaSA8IGV2ZW50QmluZGluZ3MubGVuZ3RoOyBpKyspe1xuICAgICAgbGV0IGJpbmQgPSBldmVudEJpbmRpbmdzW2ldXG4gICAgICBiaW5kLmNhbGxiYWNrKGhhbmRsZWRQYXlsb2FkLCByZWYsIGpvaW5SZWYgfHwgdGhpcy5qb2luUmVmKCkpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICByZXBseUV2ZW50TmFtZShyZWYpeyByZXR1cm4gYGNoYW5fcmVwbHlfJHtyZWZ9YCB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBpc0Nsb3NlZCgpeyByZXR1cm4gdGhpcy5zdGF0ZSA9PT0gQ0hBTk5FTF9TVEFURVMuY2xvc2VkIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGlzRXJyb3JlZCgpeyByZXR1cm4gdGhpcy5zdGF0ZSA9PT0gQ0hBTk5FTF9TVEFURVMuZXJyb3JlZCB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBpc0pvaW5lZCgpeyByZXR1cm4gdGhpcy5zdGF0ZSA9PT0gQ0hBTk5FTF9TVEFURVMuam9pbmVkIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGlzSm9pbmluZygpeyByZXR1cm4gdGhpcy5zdGF0ZSA9PT0gQ0hBTk5FTF9TVEFURVMuam9pbmluZyB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBpc0xlYXZpbmcoKXsgcmV0dXJuIHRoaXMuc3RhdGUgPT09IENIQU5ORUxfU1RBVEVTLmxlYXZpbmcgfVxufVxuIiwgImltcG9ydCB7XG4gIGdsb2JhbFxufSBmcm9tIFwiLi9jb25zdGFudHNcIlxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBamF4IHtcbiAgY29uc3RydWN0b3IoKXtcbiAgICB0aGlzLnN0YXRlcyA9IHtjb21wbGV0ZTogNH1cbiAgfVxuXG4gIHN0YXRpYyByZXF1ZXN0KG1ldGhvZCwgZW5kUG9pbnQsIGFjY2VwdCwgYm9keSwgdGltZW91dCwgb250aW1lb3V0LCBjYWxsYmFjayl7XG4gICAgaWYoZ2xvYmFsLlhEb21haW5SZXF1ZXN0KXtcbiAgICAgIGxldCByZXEgPSBuZXcgZ2xvYmFsLlhEb21haW5SZXF1ZXN0KCkgLy8gSUU4LCBJRTlcbiAgICAgIHRoaXMueGRvbWFpblJlcXVlc3QocmVxLCBtZXRob2QsIGVuZFBvaW50LCBib2R5LCB0aW1lb3V0LCBvbnRpbWVvdXQsIGNhbGxiYWNrKVxuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgcmVxID0gbmV3IGdsb2JhbC5YTUxIdHRwUmVxdWVzdCgpIC8vIElFNyssIEZpcmVmb3gsIENocm9tZSwgT3BlcmEsIFNhZmFyaVxuICAgICAgdGhpcy54aHJSZXF1ZXN0KHJlcSwgbWV0aG9kLCBlbmRQb2ludCwgYWNjZXB0LCBib2R5LCB0aW1lb3V0LCBvbnRpbWVvdXQsIGNhbGxiYWNrKVxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyB4ZG9tYWluUmVxdWVzdChyZXEsIG1ldGhvZCwgZW5kUG9pbnQsIGJvZHksIHRpbWVvdXQsIG9udGltZW91dCwgY2FsbGJhY2spe1xuICAgIHJlcS50aW1lb3V0ID0gdGltZW91dFxuICAgIHJlcS5vcGVuKG1ldGhvZCwgZW5kUG9pbnQpXG4gICAgcmVxLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgIGxldCByZXNwb25zZSA9IHRoaXMucGFyc2VKU09OKHJlcS5yZXNwb25zZVRleHQpXG4gICAgICBjYWxsYmFjayAmJiBjYWxsYmFjayhyZXNwb25zZSlcbiAgICB9XG4gICAgaWYob250aW1lb3V0KXsgcmVxLm9udGltZW91dCA9IG9udGltZW91dCB9XG5cbiAgICAvLyBXb3JrIGFyb3VuZCBidWcgaW4gSUU5IHRoYXQgcmVxdWlyZXMgYW4gYXR0YWNoZWQgb25wcm9ncmVzcyBoYW5kbGVyXG4gICAgcmVxLm9ucHJvZ3Jlc3MgPSAoKSA9PiB7IH1cblxuICAgIHJlcS5zZW5kKGJvZHkpXG4gIH1cblxuICBzdGF0aWMgeGhyUmVxdWVzdChyZXEsIG1ldGhvZCwgZW5kUG9pbnQsIGFjY2VwdCwgYm9keSwgdGltZW91dCwgb250aW1lb3V0LCBjYWxsYmFjayl7XG4gICAgcmVxLm9wZW4obWV0aG9kLCBlbmRQb2ludCwgdHJ1ZSlcbiAgICByZXEudGltZW91dCA9IHRpbWVvdXRcbiAgICByZXEuc2V0UmVxdWVzdEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBhY2NlcHQpXG4gICAgcmVxLm9uZXJyb3IgPSAoKSA9PiB7IGNhbGxiYWNrICYmIGNhbGxiYWNrKG51bGwpIH1cbiAgICByZXEub25yZWFkeXN0YXRlY2hhbmdlID0gKCkgPT4ge1xuICAgICAgaWYocmVxLnJlYWR5U3RhdGUgPT09IHRoaXMuc3RhdGVzLmNvbXBsZXRlICYmIGNhbGxiYWNrKXtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gdGhpcy5wYXJzZUpTT04ocmVxLnJlc3BvbnNlVGV4dClcbiAgICAgICAgY2FsbGJhY2socmVzcG9uc2UpXG4gICAgICB9XG4gICAgfVxuICAgIGlmKG9udGltZW91dCl7IHJlcS5vbnRpbWVvdXQgPSBvbnRpbWVvdXQgfVxuXG4gICAgcmVxLnNlbmQoYm9keSlcbiAgfVxuXG4gIHN0YXRpYyBwYXJzZUpTT04ocmVzcCl7XG4gICAgaWYoIXJlc3AgfHwgcmVzcCA9PT0gXCJcIil7IHJldHVybiBudWxsIH1cblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5wYXJzZShyZXNwKVxuICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgY29uc29sZSAmJiBjb25zb2xlLmxvZyhcImZhaWxlZCB0byBwYXJzZSBKU09OIHJlc3BvbnNlXCIsIHJlc3ApXG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBzZXJpYWxpemUob2JqLCBwYXJlbnRLZXkpe1xuICAgIGxldCBxdWVyeVN0ciA9IFtdXG4gICAgZm9yKHZhciBrZXkgaW4gb2JqKXtcbiAgICAgIGlmKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKXsgY29udGludWUgfVxuICAgICAgbGV0IHBhcmFtS2V5ID0gcGFyZW50S2V5ID8gYCR7cGFyZW50S2V5fVske2tleX1dYCA6IGtleVxuICAgICAgbGV0IHBhcmFtVmFsID0gb2JqW2tleV1cbiAgICAgIGlmKHR5cGVvZiBwYXJhbVZhbCA9PT0gXCJvYmplY3RcIil7XG4gICAgICAgIHF1ZXJ5U3RyLnB1c2godGhpcy5zZXJpYWxpemUocGFyYW1WYWwsIHBhcmFtS2V5KSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXJ5U3RyLnB1c2goZW5jb2RlVVJJQ29tcG9uZW50KHBhcmFtS2V5KSArIFwiPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KHBhcmFtVmFsKSlcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHF1ZXJ5U3RyLmpvaW4oXCImXCIpXG4gIH1cblxuICBzdGF0aWMgYXBwZW5kUGFyYW1zKHVybCwgcGFyYW1zKXtcbiAgICBpZihPYmplY3Qua2V5cyhwYXJhbXMpLmxlbmd0aCA9PT0gMCl7IHJldHVybiB1cmwgfVxuXG4gICAgbGV0IHByZWZpeCA9IHVybC5tYXRjaCgvXFw/LykgPyBcIiZcIiA6IFwiP1wiXG4gICAgcmV0dXJuIGAke3VybH0ke3ByZWZpeH0ke3RoaXMuc2VyaWFsaXplKHBhcmFtcyl9YFxuICB9XG59XG4iLCAiaW1wb3J0IHtcbiAgU09DS0VUX1NUQVRFUyxcbiAgVFJBTlNQT1JUU1xufSBmcm9tIFwiLi9jb25zdGFudHNcIlxuXG5pbXBvcnQgQWpheCBmcm9tIFwiLi9hamF4XCJcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9uZ1BvbGwge1xuXG4gIGNvbnN0cnVjdG9yKGVuZFBvaW50KXtcbiAgICB0aGlzLmVuZFBvaW50ID0gbnVsbFxuICAgIHRoaXMudG9rZW4gPSBudWxsXG4gICAgdGhpcy5za2lwSGVhcnRiZWF0ID0gdHJ1ZVxuICAgIHRoaXMub25vcGVuID0gZnVuY3Rpb24gKCl7IH0gLy8gbm9vcFxuICAgIHRoaXMub25lcnJvciA9IGZ1bmN0aW9uICgpeyB9IC8vIG5vb3BcbiAgICB0aGlzLm9ubWVzc2FnZSA9IGZ1bmN0aW9uICgpeyB9IC8vIG5vb3BcbiAgICB0aGlzLm9uY2xvc2UgPSBmdW5jdGlvbiAoKXsgfSAvLyBub29wXG4gICAgdGhpcy5wb2xsRW5kcG9pbnQgPSB0aGlzLm5vcm1hbGl6ZUVuZHBvaW50KGVuZFBvaW50KVxuICAgIHRoaXMucmVhZHlTdGF0ZSA9IFNPQ0tFVF9TVEFURVMuY29ubmVjdGluZ1xuXG4gICAgdGhpcy5wb2xsKClcbiAgfVxuXG4gIG5vcm1hbGl6ZUVuZHBvaW50KGVuZFBvaW50KXtcbiAgICByZXR1cm4gKGVuZFBvaW50XG4gICAgICAucmVwbGFjZShcIndzOi8vXCIsIFwiaHR0cDovL1wiKVxuICAgICAgLnJlcGxhY2UoXCJ3c3M6Ly9cIiwgXCJodHRwczovL1wiKVxuICAgICAgLnJlcGxhY2UobmV3IFJlZ0V4cChcIiguKilcXC9cIiArIFRSQU5TUE9SVFMud2Vic29ja2V0KSwgXCIkMS9cIiArIFRSQU5TUE9SVFMubG9uZ3BvbGwpKVxuICB9XG5cbiAgZW5kcG9pbnRVUkwoKXtcbiAgICByZXR1cm4gQWpheC5hcHBlbmRQYXJhbXModGhpcy5wb2xsRW5kcG9pbnQsIHt0b2tlbjogdGhpcy50b2tlbn0pXG4gIH1cblxuICBjbG9zZUFuZFJldHJ5KCl7XG4gICAgdGhpcy5jbG9zZSgpXG4gICAgdGhpcy5yZWFkeVN0YXRlID0gU09DS0VUX1NUQVRFUy5jb25uZWN0aW5nXG4gIH1cblxuICBvbnRpbWVvdXQoKXtcbiAgICB0aGlzLm9uZXJyb3IoXCJ0aW1lb3V0XCIpXG4gICAgdGhpcy5jbG9zZUFuZFJldHJ5KClcbiAgfVxuXG4gIHBvbGwoKXtcbiAgICBpZighKHRoaXMucmVhZHlTdGF0ZSA9PT0gU09DS0VUX1NUQVRFUy5vcGVuIHx8IHRoaXMucmVhZHlTdGF0ZSA9PT0gU09DS0VUX1NUQVRFUy5jb25uZWN0aW5nKSl7IHJldHVybiB9XG5cbiAgICBBamF4LnJlcXVlc3QoXCJHRVRcIiwgdGhpcy5lbmRwb2ludFVSTCgpLCBcImFwcGxpY2F0aW9uL2pzb25cIiwgbnVsbCwgdGhpcy50aW1lb3V0LCB0aGlzLm9udGltZW91dC5iaW5kKHRoaXMpLCAocmVzcCkgPT4ge1xuICAgICAgaWYocmVzcCl7XG4gICAgICAgIHZhciB7c3RhdHVzLCB0b2tlbiwgbWVzc2FnZXN9ID0gcmVzcFxuICAgICAgICB0aGlzLnRva2VuID0gdG9rZW5cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXR1cyA9IDBcbiAgICAgIH1cblxuICAgICAgc3dpdGNoKHN0YXR1cyl7XG4gICAgICAgIGNhc2UgMjAwOlxuICAgICAgICAgIG1lc3NhZ2VzLmZvckVhY2gobXNnID0+IHtcbiAgICAgICAgICAgIC8vIFRhc2tzIGFyZSB3aGF0IHRoaW5ncyBsaWtlIGV2ZW50IGhhbmRsZXJzLCBzZXRUaW1lb3V0IGNhbGxiYWNrcyxcbiAgICAgICAgICAgIC8vIHByb21pc2UgcmVzb2x2ZXMgYW5kIG1vcmUgYXJlIHJ1biB3aXRoaW4uXG4gICAgICAgICAgICAvLyBJbiBtb2Rlcm4gYnJvd3NlcnMsIHRoZXJlIGFyZSB0d28gZGlmZmVyZW50IGtpbmRzIG9mIHRhc2tzLFxuICAgICAgICAgICAgLy8gbWljcm90YXNrcyBhbmQgbWFjcm90YXNrcy5cbiAgICAgICAgICAgIC8vIE1pY3JvdGFza3MgYXJlIG1haW5seSB1c2VkIGZvciBQcm9taXNlcywgd2hpbGUgbWFjcm90YXNrcyBhcmVcbiAgICAgICAgICAgIC8vIHVzZWQgZm9yIGV2ZXJ5dGhpbmcgZWxzZS5cbiAgICAgICAgICAgIC8vIE1pY3JvdGFza3MgYWx3YXlzIGhhdmUgcHJpb3JpdHkgb3ZlciBtYWNyb3Rhc2tzLiBJZiB0aGUgSlMgZW5naW5lXG4gICAgICAgICAgICAvLyBpcyBsb29raW5nIGZvciBhIHRhc2sgdG8gcnVuLCBpdCB3aWxsIGFsd2F5cyB0cnkgdG8gZW1wdHkgdGhlXG4gICAgICAgICAgICAvLyBtaWNyb3Rhc2sgcXVldWUgYmVmb3JlIGF0dGVtcHRpbmcgdG8gcnVuIGFueXRoaW5nIGZyb20gdGhlXG4gICAgICAgICAgICAvLyBtYWNyb3Rhc2sgcXVldWUuXG4gICAgICAgICAgICAvL1xuICAgICAgICAgICAgLy8gRm9yIHRoZSBXZWJTb2NrZXQgdHJhbnNwb3J0LCBtZXNzYWdlcyBhbHdheXMgYXJyaXZlIGluIHRoZWlyIG93blxuICAgICAgICAgICAgLy8gZXZlbnQuIFRoaXMgbWVhbnMgdGhhdCBpZiBhbnkgcHJvbWlzZXMgYXJlIHJlc29sdmVkIGZyb20gd2l0aGluLFxuICAgICAgICAgICAgLy8gdGhlaXIgY2FsbGJhY2tzIHdpbGwgYWx3YXlzIGZpbmlzaCBleGVjdXRpb24gYnkgdGhlIHRpbWUgdGhlXG4gICAgICAgICAgICAvLyBuZXh0IG1lc3NhZ2UgZXZlbnQgaGFuZGxlciBpcyBydW4uXG4gICAgICAgICAgICAvL1xuICAgICAgICAgICAgLy8gSW4gb3JkZXIgdG8gZW11bGF0ZSB0aGlzIGJlaGF2aW91ciwgd2UgbmVlZCB0byBtYWtlIHN1cmUgZWFjaFxuICAgICAgICAgICAgLy8gb25tZXNzYWdlIGhhbmRsZXIgaXMgcnVuIHdpdGhpbiBpdCdzIG93biBtYWNyb3Rhc2suXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5vbm1lc3NhZ2Uoe2RhdGE6IG1zZ30pXG4gICAgICAgICAgICB9LCAwKVxuICAgICAgICAgIH0pXG4gICAgICAgICAgdGhpcy5wb2xsKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDIwNDpcbiAgICAgICAgICB0aGlzLnBvbGwoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDEwOlxuICAgICAgICAgIHRoaXMucmVhZHlTdGF0ZSA9IFNPQ0tFVF9TVEFURVMub3BlblxuICAgICAgICAgIHRoaXMub25vcGVuKClcbiAgICAgICAgICB0aGlzLnBvbGwoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDAzOlxuICAgICAgICAgIHRoaXMub25lcnJvcigpXG4gICAgICAgICAgdGhpcy5jbG9zZSgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICBjYXNlIDUwMDpcbiAgICAgICAgICB0aGlzLm9uZXJyb3IoKVxuICAgICAgICAgIHRoaXMuY2xvc2VBbmRSZXRyeSgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDogdGhyb3cgbmV3IEVycm9yKGB1bmhhbmRsZWQgcG9sbCBzdGF0dXMgJHtzdGF0dXN9YClcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgc2VuZChib2R5KXtcbiAgICBBamF4LnJlcXVlc3QoXCJQT1NUXCIsIHRoaXMuZW5kcG9pbnRVUkwoKSwgXCJhcHBsaWNhdGlvbi9qc29uXCIsIGJvZHksIHRoaXMudGltZW91dCwgdGhpcy5vbmVycm9yLmJpbmQodGhpcywgXCJ0aW1lb3V0XCIpLCAocmVzcCkgPT4ge1xuICAgICAgaWYoIXJlc3AgfHwgcmVzcC5zdGF0dXMgIT09IDIwMCl7XG4gICAgICAgIHRoaXMub25lcnJvcihyZXNwICYmIHJlc3Auc3RhdHVzKVxuICAgICAgICB0aGlzLmNsb3NlQW5kUmV0cnkoKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBjbG9zZShfY29kZSwgX3JlYXNvbil7XG4gICAgdGhpcy5yZWFkeVN0YXRlID0gU09DS0VUX1NUQVRFUy5jbG9zZWRcbiAgICB0aGlzLm9uY2xvc2UoKVxuICB9XG59XG4iLCAiLyoqXG4gKiBJbml0aWFsaXplcyB0aGUgUHJlc2VuY2VcbiAqIEBwYXJhbSB7Q2hhbm5lbH0gY2hhbm5lbCAtIFRoZSBDaGFubmVsXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIFRoZSBvcHRpb25zLFxuICogICAgICAgIGZvciBleGFtcGxlIGB7ZXZlbnRzOiB7c3RhdGU6IFwic3RhdGVcIiwgZGlmZjogXCJkaWZmXCJ9fWBcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHJlc2VuY2Uge1xuXG4gIGNvbnN0cnVjdG9yKGNoYW5uZWwsIG9wdHMgPSB7fSl7XG4gICAgbGV0IGV2ZW50cyA9IG9wdHMuZXZlbnRzIHx8IHtzdGF0ZTogXCJwcmVzZW5jZV9zdGF0ZVwiLCBkaWZmOiBcInByZXNlbmNlX2RpZmZcIn1cbiAgICB0aGlzLnN0YXRlID0ge31cbiAgICB0aGlzLnBlbmRpbmdEaWZmcyA9IFtdXG4gICAgdGhpcy5jaGFubmVsID0gY2hhbm5lbFxuICAgIHRoaXMuam9pblJlZiA9IG51bGxcbiAgICB0aGlzLmNhbGxlciA9IHtcbiAgICAgIG9uSm9pbjogZnVuY3Rpb24gKCl7IH0sXG4gICAgICBvbkxlYXZlOiBmdW5jdGlvbiAoKXsgfSxcbiAgICAgIG9uU3luYzogZnVuY3Rpb24gKCl7IH1cbiAgICB9XG5cbiAgICB0aGlzLmNoYW5uZWwub24oZXZlbnRzLnN0YXRlLCBuZXdTdGF0ZSA9PiB7XG4gICAgICBsZXQge29uSm9pbiwgb25MZWF2ZSwgb25TeW5jfSA9IHRoaXMuY2FsbGVyXG5cbiAgICAgIHRoaXMuam9pblJlZiA9IHRoaXMuY2hhbm5lbC5qb2luUmVmKClcbiAgICAgIHRoaXMuc3RhdGUgPSBQcmVzZW5jZS5zeW5jU3RhdGUodGhpcy5zdGF0ZSwgbmV3U3RhdGUsIG9uSm9pbiwgb25MZWF2ZSlcblxuICAgICAgdGhpcy5wZW5kaW5nRGlmZnMuZm9yRWFjaChkaWZmID0+IHtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFByZXNlbmNlLnN5bmNEaWZmKHRoaXMuc3RhdGUsIGRpZmYsIG9uSm9pbiwgb25MZWF2ZSlcbiAgICAgIH0pXG4gICAgICB0aGlzLnBlbmRpbmdEaWZmcyA9IFtdXG4gICAgICBvblN5bmMoKVxuICAgIH0pXG5cbiAgICB0aGlzLmNoYW5uZWwub24oZXZlbnRzLmRpZmYsIGRpZmYgPT4ge1xuICAgICAgbGV0IHtvbkpvaW4sIG9uTGVhdmUsIG9uU3luY30gPSB0aGlzLmNhbGxlclxuXG4gICAgICBpZih0aGlzLmluUGVuZGluZ1N5bmNTdGF0ZSgpKXtcbiAgICAgICAgdGhpcy5wZW5kaW5nRGlmZnMucHVzaChkaWZmKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFByZXNlbmNlLnN5bmNEaWZmKHRoaXMuc3RhdGUsIGRpZmYsIG9uSm9pbiwgb25MZWF2ZSlcbiAgICAgICAgb25TeW5jKClcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgb25Kb2luKGNhbGxiYWNrKXsgdGhpcy5jYWxsZXIub25Kb2luID0gY2FsbGJhY2sgfVxuXG4gIG9uTGVhdmUoY2FsbGJhY2speyB0aGlzLmNhbGxlci5vbkxlYXZlID0gY2FsbGJhY2sgfVxuXG4gIG9uU3luYyhjYWxsYmFjayl7IHRoaXMuY2FsbGVyLm9uU3luYyA9IGNhbGxiYWNrIH1cblxuICBsaXN0KGJ5KXsgcmV0dXJuIFByZXNlbmNlLmxpc3QodGhpcy5zdGF0ZSwgYnkpIH1cblxuICBpblBlbmRpbmdTeW5jU3RhdGUoKXtcbiAgICByZXR1cm4gIXRoaXMuam9pblJlZiB8fCAodGhpcy5qb2luUmVmICE9PSB0aGlzLmNoYW5uZWwuam9pblJlZigpKVxuICB9XG5cbiAgLy8gbG93ZXItbGV2ZWwgcHVibGljIHN0YXRpYyBBUElcblxuICAvKipcbiAgICogVXNlZCB0byBzeW5jIHRoZSBsaXN0IG9mIHByZXNlbmNlcyBvbiB0aGUgc2VydmVyXG4gICAqIHdpdGggdGhlIGNsaWVudCdzIHN0YXRlLiBBbiBvcHRpb25hbCBgb25Kb2luYCBhbmQgYG9uTGVhdmVgIGNhbGxiYWNrIGNhblxuICAgKiBiZSBwcm92aWRlZCB0byByZWFjdCB0byBjaGFuZ2VzIGluIHRoZSBjbGllbnQncyBsb2NhbCBwcmVzZW5jZXMgYWNyb3NzXG4gICAqIGRpc2Nvbm5lY3RzIGFuZCByZWNvbm5lY3RzIHdpdGggdGhlIHNlcnZlci5cbiAgICpcbiAgICogQHJldHVybnMge1ByZXNlbmNlfVxuICAgKi9cbiAgc3RhdGljIHN5bmNTdGF0ZShjdXJyZW50U3RhdGUsIG5ld1N0YXRlLCBvbkpvaW4sIG9uTGVhdmUpe1xuICAgIGxldCBzdGF0ZSA9IHRoaXMuY2xvbmUoY3VycmVudFN0YXRlKVxuICAgIGxldCBqb2lucyA9IHt9XG4gICAgbGV0IGxlYXZlcyA9IHt9XG5cbiAgICB0aGlzLm1hcChzdGF0ZSwgKGtleSwgcHJlc2VuY2UpID0+IHtcbiAgICAgIGlmKCFuZXdTdGF0ZVtrZXldKXtcbiAgICAgICAgbGVhdmVzW2tleV0gPSBwcmVzZW5jZVxuICAgICAgfVxuICAgIH0pXG4gICAgdGhpcy5tYXAobmV3U3RhdGUsIChrZXksIG5ld1ByZXNlbmNlKSA9PiB7XG4gICAgICBsZXQgY3VycmVudFByZXNlbmNlID0gc3RhdGVba2V5XVxuICAgICAgaWYoY3VycmVudFByZXNlbmNlKXtcbiAgICAgICAgbGV0IG5ld1JlZnMgPSBuZXdQcmVzZW5jZS5tZXRhcy5tYXAobSA9PiBtLnBoeF9yZWYpXG4gICAgICAgIGxldCBjdXJSZWZzID0gY3VycmVudFByZXNlbmNlLm1ldGFzLm1hcChtID0+IG0ucGh4X3JlZilcbiAgICAgICAgbGV0IGpvaW5lZE1ldGFzID0gbmV3UHJlc2VuY2UubWV0YXMuZmlsdGVyKG0gPT4gY3VyUmVmcy5pbmRleE9mKG0ucGh4X3JlZikgPCAwKVxuICAgICAgICBsZXQgbGVmdE1ldGFzID0gY3VycmVudFByZXNlbmNlLm1ldGFzLmZpbHRlcihtID0+IG5ld1JlZnMuaW5kZXhPZihtLnBoeF9yZWYpIDwgMClcbiAgICAgICAgaWYoam9pbmVkTWV0YXMubGVuZ3RoID4gMCl7XG4gICAgICAgICAgam9pbnNba2V5XSA9IG5ld1ByZXNlbmNlXG4gICAgICAgICAgam9pbnNba2V5XS5tZXRhcyA9IGpvaW5lZE1ldGFzXG4gICAgICAgIH1cbiAgICAgICAgaWYobGVmdE1ldGFzLmxlbmd0aCA+IDApe1xuICAgICAgICAgIGxlYXZlc1trZXldID0gdGhpcy5jbG9uZShjdXJyZW50UHJlc2VuY2UpXG4gICAgICAgICAgbGVhdmVzW2tleV0ubWV0YXMgPSBsZWZ0TWV0YXNcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgam9pbnNba2V5XSA9IG5ld1ByZXNlbmNlXG4gICAgICB9XG4gICAgfSlcbiAgICByZXR1cm4gdGhpcy5zeW5jRGlmZihzdGF0ZSwge2pvaW5zOiBqb2lucywgbGVhdmVzOiBsZWF2ZXN9LCBvbkpvaW4sIG9uTGVhdmUpXG4gIH1cblxuICAvKipcbiAgICpcbiAgICogVXNlZCB0byBzeW5jIGEgZGlmZiBvZiBwcmVzZW5jZSBqb2luIGFuZCBsZWF2ZVxuICAgKiBldmVudHMgZnJvbSB0aGUgc2VydmVyLCBhcyB0aGV5IGhhcHBlbi4gTGlrZSBgc3luY1N0YXRlYCwgYHN5bmNEaWZmYFxuICAgKiBhY2NlcHRzIG9wdGlvbmFsIGBvbkpvaW5gIGFuZCBgb25MZWF2ZWAgY2FsbGJhY2tzIHRvIHJlYWN0IHRvIGEgdXNlclxuICAgKiBqb2luaW5nIG9yIGxlYXZpbmcgZnJvbSBhIGRldmljZS5cbiAgICpcbiAgICogQHJldHVybnMge1ByZXNlbmNlfVxuICAgKi9cbiAgc3RhdGljIHN5bmNEaWZmKHN0YXRlLCBkaWZmLCBvbkpvaW4sIG9uTGVhdmUpe1xuICAgIGxldCB7am9pbnMsIGxlYXZlc30gPSB0aGlzLmNsb25lKGRpZmYpXG4gICAgaWYoIW9uSm9pbil7IG9uSm9pbiA9IGZ1bmN0aW9uICgpeyB9IH1cbiAgICBpZighb25MZWF2ZSl7IG9uTGVhdmUgPSBmdW5jdGlvbiAoKXsgfSB9XG5cbiAgICB0aGlzLm1hcChqb2lucywgKGtleSwgbmV3UHJlc2VuY2UpID0+IHtcbiAgICAgIGxldCBjdXJyZW50UHJlc2VuY2UgPSBzdGF0ZVtrZXldXG4gICAgICBzdGF0ZVtrZXldID0gdGhpcy5jbG9uZShuZXdQcmVzZW5jZSlcbiAgICAgIGlmKGN1cnJlbnRQcmVzZW5jZSl7XG4gICAgICAgIGxldCBqb2luZWRSZWZzID0gc3RhdGVba2V5XS5tZXRhcy5tYXAobSA9PiBtLnBoeF9yZWYpXG4gICAgICAgIGxldCBjdXJNZXRhcyA9IGN1cnJlbnRQcmVzZW5jZS5tZXRhcy5maWx0ZXIobSA9PiBqb2luZWRSZWZzLmluZGV4T2YobS5waHhfcmVmKSA8IDApXG4gICAgICAgIHN0YXRlW2tleV0ubWV0YXMudW5zaGlmdCguLi5jdXJNZXRhcylcbiAgICAgIH1cbiAgICAgIG9uSm9pbihrZXksIGN1cnJlbnRQcmVzZW5jZSwgbmV3UHJlc2VuY2UpXG4gICAgfSlcbiAgICB0aGlzLm1hcChsZWF2ZXMsIChrZXksIGxlZnRQcmVzZW5jZSkgPT4ge1xuICAgICAgbGV0IGN1cnJlbnRQcmVzZW5jZSA9IHN0YXRlW2tleV1cbiAgICAgIGlmKCFjdXJyZW50UHJlc2VuY2UpeyByZXR1cm4gfVxuICAgICAgbGV0IHJlZnNUb1JlbW92ZSA9IGxlZnRQcmVzZW5jZS5tZXRhcy5tYXAobSA9PiBtLnBoeF9yZWYpXG4gICAgICBjdXJyZW50UHJlc2VuY2UubWV0YXMgPSBjdXJyZW50UHJlc2VuY2UubWV0YXMuZmlsdGVyKHAgPT4ge1xuICAgICAgICByZXR1cm4gcmVmc1RvUmVtb3ZlLmluZGV4T2YocC5waHhfcmVmKSA8IDBcbiAgICAgIH0pXG4gICAgICBvbkxlYXZlKGtleSwgY3VycmVudFByZXNlbmNlLCBsZWZ0UHJlc2VuY2UpXG4gICAgICBpZihjdXJyZW50UHJlc2VuY2UubWV0YXMubGVuZ3RoID09PSAwKXtcbiAgICAgICAgZGVsZXRlIHN0YXRlW2tleV1cbiAgICAgIH1cbiAgICB9KVxuICAgIHJldHVybiBzdGF0ZVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFycmF5IG9mIHByZXNlbmNlcywgd2l0aCBzZWxlY3RlZCBtZXRhZGF0YS5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IHByZXNlbmNlc1xuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjaG9vc2VyXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcmVzZW5jZX1cbiAgICovXG4gIHN0YXRpYyBsaXN0KHByZXNlbmNlcywgY2hvb3Nlcil7XG4gICAgaWYoIWNob29zZXIpeyBjaG9vc2VyID0gZnVuY3Rpb24gKGtleSwgcHJlcyl7IHJldHVybiBwcmVzIH0gfVxuXG4gICAgcmV0dXJuIHRoaXMubWFwKHByZXNlbmNlcywgKGtleSwgcHJlc2VuY2UpID0+IHtcbiAgICAgIHJldHVybiBjaG9vc2VyKGtleSwgcHJlc2VuY2UpXG4gICAgfSlcbiAgfVxuXG4gIC8vIHByaXZhdGVcblxuICBzdGF0aWMgbWFwKG9iaiwgZnVuYyl7XG4gICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iaikubWFwKGtleSA9PiBmdW5jKGtleSwgb2JqW2tleV0pKVxuICB9XG5cbiAgc3RhdGljIGNsb25lKG9iail7IHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9iaikpIH1cbn1cbiIsICIvKiBUaGUgZGVmYXVsdCBzZXJpYWxpemVyIGZvciBlbmNvZGluZyBhbmQgZGVjb2RpbmcgbWVzc2FnZXMgKi9cbmltcG9ydCB7XG4gIENIQU5ORUxfRVZFTlRTXG59IGZyb20gXCIuL2NvbnN0YW50c1wiXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgSEVBREVSX0xFTkdUSDogMSxcbiAgTUVUQV9MRU5HVEg6IDQsXG4gIEtJTkRTOiB7cHVzaDogMCwgcmVwbHk6IDEsIGJyb2FkY2FzdDogMn0sXG5cbiAgZW5jb2RlKG1zZywgY2FsbGJhY2spe1xuICAgIGlmKG1zZy5wYXlsb2FkLmNvbnN0cnVjdG9yID09PSBBcnJheUJ1ZmZlcil7XG4gICAgICByZXR1cm4gY2FsbGJhY2sodGhpcy5iaW5hcnlFbmNvZGUobXNnKSlcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IHBheWxvYWQgPSBbbXNnLmpvaW5fcmVmLCBtc2cucmVmLCBtc2cudG9waWMsIG1zZy5ldmVudCwgbXNnLnBheWxvYWRdXG4gICAgICByZXR1cm4gY2FsbGJhY2soSlNPTi5zdHJpbmdpZnkocGF5bG9hZCkpXG4gICAgfVxuICB9LFxuXG4gIGRlY29kZShyYXdQYXlsb2FkLCBjYWxsYmFjayl7XG4gICAgaWYocmF3UGF5bG9hZC5jb25zdHJ1Y3RvciA9PT0gQXJyYXlCdWZmZXIpe1xuICAgICAgcmV0dXJuIGNhbGxiYWNrKHRoaXMuYmluYXJ5RGVjb2RlKHJhd1BheWxvYWQpKVxuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgW2pvaW5fcmVmLCByZWYsIHRvcGljLCBldmVudCwgcGF5bG9hZF0gPSBKU09OLnBhcnNlKHJhd1BheWxvYWQpXG4gICAgICByZXR1cm4gY2FsbGJhY2soe2pvaW5fcmVmLCByZWYsIHRvcGljLCBldmVudCwgcGF5bG9hZH0pXG4gICAgfVxuICB9LFxuXG4gIC8vIHByaXZhdGVcblxuICBiaW5hcnlFbmNvZGUobWVzc2FnZSl7XG4gICAgbGV0IHtqb2luX3JlZiwgcmVmLCBldmVudCwgdG9waWMsIHBheWxvYWR9ID0gbWVzc2FnZVxuICAgIGxldCBtZXRhTGVuZ3RoID0gdGhpcy5NRVRBX0xFTkdUSCArIGpvaW5fcmVmLmxlbmd0aCArIHJlZi5sZW5ndGggKyB0b3BpYy5sZW5ndGggKyBldmVudC5sZW5ndGhcbiAgICBsZXQgaGVhZGVyID0gbmV3IEFycmF5QnVmZmVyKHRoaXMuSEVBREVSX0xFTkdUSCArIG1ldGFMZW5ndGgpXG4gICAgbGV0IHZpZXcgPSBuZXcgRGF0YVZpZXcoaGVhZGVyKVxuICAgIGxldCBvZmZzZXQgPSAwXG5cbiAgICB2aWV3LnNldFVpbnQ4KG9mZnNldCsrLCB0aGlzLktJTkRTLnB1c2gpIC8vIGtpbmRcbiAgICB2aWV3LnNldFVpbnQ4KG9mZnNldCsrLCBqb2luX3JlZi5sZW5ndGgpXG4gICAgdmlldy5zZXRVaW50OChvZmZzZXQrKywgcmVmLmxlbmd0aClcbiAgICB2aWV3LnNldFVpbnQ4KG9mZnNldCsrLCB0b3BpYy5sZW5ndGgpXG4gICAgdmlldy5zZXRVaW50OChvZmZzZXQrKywgZXZlbnQubGVuZ3RoKVxuICAgIEFycmF5LmZyb20oam9pbl9yZWYsIGNoYXIgPT4gdmlldy5zZXRVaW50OChvZmZzZXQrKywgY2hhci5jaGFyQ29kZUF0KDApKSlcbiAgICBBcnJheS5mcm9tKHJlZiwgY2hhciA9PiB2aWV3LnNldFVpbnQ4KG9mZnNldCsrLCBjaGFyLmNoYXJDb2RlQXQoMCkpKVxuICAgIEFycmF5LmZyb20odG9waWMsIGNoYXIgPT4gdmlldy5zZXRVaW50OChvZmZzZXQrKywgY2hhci5jaGFyQ29kZUF0KDApKSlcbiAgICBBcnJheS5mcm9tKGV2ZW50LCBjaGFyID0+IHZpZXcuc2V0VWludDgob2Zmc2V0KyssIGNoYXIuY2hhckNvZGVBdCgwKSkpXG5cbiAgICB2YXIgY29tYmluZWQgPSBuZXcgVWludDhBcnJheShoZWFkZXIuYnl0ZUxlbmd0aCArIHBheWxvYWQuYnl0ZUxlbmd0aClcbiAgICBjb21iaW5lZC5zZXQobmV3IFVpbnQ4QXJyYXkoaGVhZGVyKSwgMClcbiAgICBjb21iaW5lZC5zZXQobmV3IFVpbnQ4QXJyYXkocGF5bG9hZCksIGhlYWRlci5ieXRlTGVuZ3RoKVxuXG4gICAgcmV0dXJuIGNvbWJpbmVkLmJ1ZmZlclxuICB9LFxuXG4gIGJpbmFyeURlY29kZShidWZmZXIpe1xuICAgIGxldCB2aWV3ID0gbmV3IERhdGFWaWV3KGJ1ZmZlcilcbiAgICBsZXQga2luZCA9IHZpZXcuZ2V0VWludDgoMClcbiAgICBsZXQgZGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigpXG4gICAgc3dpdGNoKGtpbmQpe1xuICAgICAgY2FzZSB0aGlzLktJTkRTLnB1c2g6IHJldHVybiB0aGlzLmRlY29kZVB1c2goYnVmZmVyLCB2aWV3LCBkZWNvZGVyKVxuICAgICAgY2FzZSB0aGlzLktJTkRTLnJlcGx5OiByZXR1cm4gdGhpcy5kZWNvZGVSZXBseShidWZmZXIsIHZpZXcsIGRlY29kZXIpXG4gICAgICBjYXNlIHRoaXMuS0lORFMuYnJvYWRjYXN0OiByZXR1cm4gdGhpcy5kZWNvZGVCcm9hZGNhc3QoYnVmZmVyLCB2aWV3LCBkZWNvZGVyKVxuICAgIH1cbiAgfSxcblxuICBkZWNvZGVQdXNoKGJ1ZmZlciwgdmlldywgZGVjb2Rlcil7XG4gICAgbGV0IGpvaW5SZWZTaXplID0gdmlldy5nZXRVaW50OCgxKVxuICAgIGxldCB0b3BpY1NpemUgPSB2aWV3LmdldFVpbnQ4KDIpXG4gICAgbGV0IGV2ZW50U2l6ZSA9IHZpZXcuZ2V0VWludDgoMylcbiAgICBsZXQgb2Zmc2V0ID0gdGhpcy5IRUFERVJfTEVOR1RIICsgdGhpcy5NRVRBX0xFTkdUSCAtIDEgLy8gcHVzaGVzIGhhdmUgbm8gcmVmXG4gICAgbGV0IGpvaW5SZWYgPSBkZWNvZGVyLmRlY29kZShidWZmZXIuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBqb2luUmVmU2l6ZSkpXG4gICAgb2Zmc2V0ID0gb2Zmc2V0ICsgam9pblJlZlNpemVcbiAgICBsZXQgdG9waWMgPSBkZWNvZGVyLmRlY29kZShidWZmZXIuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyB0b3BpY1NpemUpKVxuICAgIG9mZnNldCA9IG9mZnNldCArIHRvcGljU2l6ZVxuICAgIGxldCBldmVudCA9IGRlY29kZXIuZGVjb2RlKGJ1ZmZlci5zbGljZShvZmZzZXQsIG9mZnNldCArIGV2ZW50U2l6ZSkpXG4gICAgb2Zmc2V0ID0gb2Zmc2V0ICsgZXZlbnRTaXplXG4gICAgbGV0IGRhdGEgPSBidWZmZXIuc2xpY2Uob2Zmc2V0LCBidWZmZXIuYnl0ZUxlbmd0aClcbiAgICByZXR1cm4ge2pvaW5fcmVmOiBqb2luUmVmLCByZWY6IG51bGwsIHRvcGljOiB0b3BpYywgZXZlbnQ6IGV2ZW50LCBwYXlsb2FkOiBkYXRhfVxuICB9LFxuXG4gIGRlY29kZVJlcGx5KGJ1ZmZlciwgdmlldywgZGVjb2Rlcil7XG4gICAgbGV0IGpvaW5SZWZTaXplID0gdmlldy5nZXRVaW50OCgxKVxuICAgIGxldCByZWZTaXplID0gdmlldy5nZXRVaW50OCgyKVxuICAgIGxldCB0b3BpY1NpemUgPSB2aWV3LmdldFVpbnQ4KDMpXG4gICAgbGV0IGV2ZW50U2l6ZSA9IHZpZXcuZ2V0VWludDgoNClcbiAgICBsZXQgb2Zmc2V0ID0gdGhpcy5IRUFERVJfTEVOR1RIICsgdGhpcy5NRVRBX0xFTkdUSFxuICAgIGxldCBqb2luUmVmID0gZGVjb2Rlci5kZWNvZGUoYnVmZmVyLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgam9pblJlZlNpemUpKVxuICAgIG9mZnNldCA9IG9mZnNldCArIGpvaW5SZWZTaXplXG4gICAgbGV0IHJlZiA9IGRlY29kZXIuZGVjb2RlKGJ1ZmZlci5zbGljZShvZmZzZXQsIG9mZnNldCArIHJlZlNpemUpKVxuICAgIG9mZnNldCA9IG9mZnNldCArIHJlZlNpemVcbiAgICBsZXQgdG9waWMgPSBkZWNvZGVyLmRlY29kZShidWZmZXIuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyB0b3BpY1NpemUpKVxuICAgIG9mZnNldCA9IG9mZnNldCArIHRvcGljU2l6ZVxuICAgIGxldCBldmVudCA9IGRlY29kZXIuZGVjb2RlKGJ1ZmZlci5zbGljZShvZmZzZXQsIG9mZnNldCArIGV2ZW50U2l6ZSkpXG4gICAgb2Zmc2V0ID0gb2Zmc2V0ICsgZXZlbnRTaXplXG4gICAgbGV0IGRhdGEgPSBidWZmZXIuc2xpY2Uob2Zmc2V0LCBidWZmZXIuYnl0ZUxlbmd0aClcbiAgICBsZXQgcGF5bG9hZCA9IHtzdGF0dXM6IGV2ZW50LCByZXNwb25zZTogZGF0YX1cbiAgICByZXR1cm4ge2pvaW5fcmVmOiBqb2luUmVmLCByZWY6IHJlZiwgdG9waWM6IHRvcGljLCBldmVudDogQ0hBTk5FTF9FVkVOVFMucmVwbHksIHBheWxvYWQ6IHBheWxvYWR9XG4gIH0sXG5cbiAgZGVjb2RlQnJvYWRjYXN0KGJ1ZmZlciwgdmlldywgZGVjb2Rlcil7XG4gICAgbGV0IHRvcGljU2l6ZSA9IHZpZXcuZ2V0VWludDgoMSlcbiAgICBsZXQgZXZlbnRTaXplID0gdmlldy5nZXRVaW50OCgyKVxuICAgIGxldCBvZmZzZXQgPSB0aGlzLkhFQURFUl9MRU5HVEggKyAyXG4gICAgbGV0IHRvcGljID0gZGVjb2Rlci5kZWNvZGUoYnVmZmVyLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgdG9waWNTaXplKSlcbiAgICBvZmZzZXQgPSBvZmZzZXQgKyB0b3BpY1NpemVcbiAgICBsZXQgZXZlbnQgPSBkZWNvZGVyLmRlY29kZShidWZmZXIuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBldmVudFNpemUpKVxuICAgIG9mZnNldCA9IG9mZnNldCArIGV2ZW50U2l6ZVxuICAgIGxldCBkYXRhID0gYnVmZmVyLnNsaWNlKG9mZnNldCwgYnVmZmVyLmJ5dGVMZW5ndGgpXG5cbiAgICByZXR1cm4ge2pvaW5fcmVmOiBudWxsLCByZWY6IG51bGwsIHRvcGljOiB0b3BpYywgZXZlbnQ6IGV2ZW50LCBwYXlsb2FkOiBkYXRhfVxuICB9XG59XG4iLCAiLyoqIEluaXRpYWxpemVzIHRoZSBTb2NrZXQgKlxuICpcbiAqIEZvciBJRTggc3VwcG9ydCB1c2UgYW4gRVM1LXNoaW0gKGh0dHBzOi8vZ2l0aHViLmNvbS9lcy1zaGltcy9lczUtc2hpbSlcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZW5kUG9pbnQgLSBUaGUgc3RyaW5nIFdlYlNvY2tldCBlbmRwb2ludCwgaWUsIGBcIndzOi8vZXhhbXBsZS5jb20vc29ja2V0XCJgLFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBcIndzczovL2V4YW1wbGUuY29tXCJgXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYFwiL3NvY2tldFwiYCAoaW5oZXJpdGVkIGhvc3QgJiBwcm90b2NvbClcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c10gLSBPcHRpb25hbCBjb25maWd1cmF0aW9uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0cy50cmFuc3BvcnRdIC0gVGhlIFdlYnNvY2tldCBUcmFuc3BvcnQsIGZvciBleGFtcGxlIFdlYlNvY2tldCBvciBQaG9lbml4LkxvbmdQb2xsLlxuICpcbiAqIERlZmF1bHRzIHRvIFdlYlNvY2tldCB3aXRoIGF1dG9tYXRpYyBMb25nUG9sbCBmYWxsYmFjay5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRzLmVuY29kZV0gLSBUaGUgZnVuY3Rpb24gdG8gZW5jb2RlIG91dGdvaW5nIG1lc3NhZ2VzLlxuICpcbiAqIERlZmF1bHRzIHRvIEpTT04gZW5jb2Rlci5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0cy5kZWNvZGVdIC0gVGhlIGZ1bmN0aW9uIHRvIGRlY29kZSBpbmNvbWluZyBtZXNzYWdlcy5cbiAqXG4gKiBEZWZhdWx0cyB0byBKU09OOlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIChwYXlsb2FkLCBjYWxsYmFjaykgPT4gY2FsbGJhY2soSlNPTi5wYXJzZShwYXlsb2FkKSlcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy50aW1lb3V0XSAtIFRoZSBkZWZhdWx0IHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIHRvIHRyaWdnZXIgcHVzaCB0aW1lb3V0cy5cbiAqXG4gKiBEZWZhdWx0cyBgREVGQVVMVF9USU1FT1VUYFxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRzLmhlYXJ0YmVhdEludGVydmFsTXNdIC0gVGhlIG1pbGxpc2VjIGludGVydmFsIHRvIHNlbmQgYSBoZWFydGJlYXQgbWVzc2FnZVxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRzLnJlY29ubmVjdEFmdGVyTXNdIC0gVGhlIG9wdGlvbmFsIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgbWlsbHNlY1xuICogc29ja2V0IHJlY29ubmVjdCBpbnRlcnZhbC5cbiAqXG4gKiBEZWZhdWx0cyB0byBzdGVwcGVkIGJhY2tvZmYgb2Y6XG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogZnVuY3Rpb24odHJpZXMpe1xuICogICByZXR1cm4gWzEwLCA1MCwgMTAwLCAxNTAsIDIwMCwgMjUwLCA1MDAsIDEwMDAsIDIwMDBdW3RyaWVzIC0gMV0gfHwgNTAwMFxuICogfVxuICogYGBgYFxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5yZWpvaW5BZnRlck1zXSAtIFRoZSBvcHRpb25hbCBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIG1pbGxzZWNcbiAqIHJlam9pbiBpbnRlcnZhbCBmb3IgaW5kaXZpZHVhbCBjaGFubmVscy5cbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBmdW5jdGlvbih0cmllcyl7XG4gKiAgIHJldHVybiBbMTAwMCwgMjAwMCwgNTAwMF1bdHJpZXMgLSAxXSB8fCAxMDAwMFxuICogfVxuICogYGBgYFxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRzLmxvZ2dlcl0gLSBUaGUgb3B0aW9uYWwgZnVuY3Rpb24gZm9yIHNwZWNpYWxpemVkIGxvZ2dpbmcsIGllOlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIGZ1bmN0aW9uKGtpbmQsIG1zZywgZGF0YSkge1xuICogICBjb25zb2xlLmxvZyhgJHtraW5kfTogJHttc2d9YCwgZGF0YSlcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5sb25ncG9sbGVyVGltZW91dF0gLSBUaGUgbWF4aW11bSB0aW1lb3V0IG9mIGEgbG9uZyBwb2xsIEFKQVggcmVxdWVzdC5cbiAqXG4gKiBEZWZhdWx0cyB0byAyMHMgKGRvdWJsZSB0aGUgc2VydmVyIGxvbmcgcG9sbCB0aW1lcikuXG4gKlxuICogQHBhcmFtIHt7T2JqZWN0fGZ1bmN0aW9uKX0gW29wdHMucGFyYW1zXSAtIFRoZSBvcHRpb25hbCBwYXJhbXMgdG8gcGFzcyB3aGVuIGNvbm5lY3RpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5iaW5hcnlUeXBlXSAtIFRoZSBiaW5hcnkgdHlwZSB0byB1c2UgZm9yIGJpbmFyeSBXZWJTb2NrZXQgZnJhbWVzLlxuICpcbiAqIERlZmF1bHRzIHRvIFwiYXJyYXlidWZmZXJcIlxuICpcbiAqIEBwYXJhbSB7dnNufSBbb3B0cy52c25dIC0gVGhlIHNlcmlhbGl6ZXIncyBwcm90b2NvbCB2ZXJzaW9uIHRvIHNlbmQgb24gY29ubmVjdC5cbiAqXG4gKiBEZWZhdWx0cyB0byBERUZBVUxUX1ZTTi5cbiovXG5cbmltcG9ydCB7XG4gIGdsb2JhbCxcbiAgcGh4V2luZG93LFxuICBDSEFOTkVMX0VWRU5UUyxcbiAgREVGQVVMVF9USU1FT1VULFxuICBERUZBVUxUX1ZTTixcbiAgU09DS0VUX1NUQVRFUyxcbiAgVFJBTlNQT1JUUyxcbiAgV1NfQ0xPU0VfTk9STUFMXG59IGZyb20gXCIuL2NvbnN0YW50c1wiXG5cbmltcG9ydCB7XG4gIGNsb3N1cmVcbn0gZnJvbSBcIi4vdXRpbHNcIlxuXG5pbXBvcnQgQWpheCBmcm9tIFwiLi9hamF4XCJcbmltcG9ydCBDaGFubmVsIGZyb20gXCIuL2NoYW5uZWxcIlxuaW1wb3J0IExvbmdQb2xsIGZyb20gXCIuL2xvbmdwb2xsXCJcbmltcG9ydCBTZXJpYWxpemVyIGZyb20gXCIuL3NlcmlhbGl6ZXJcIlxuaW1wb3J0IFRpbWVyIGZyb20gXCIuL3RpbWVyXCJcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU29ja2V0IHtcbiAgY29uc3RydWN0b3IoZW5kUG9pbnQsIG9wdHMgPSB7fSl7XG4gICAgdGhpcy5zdGF0ZUNoYW5nZUNhbGxiYWNrcyA9IHtvcGVuOiBbXSwgY2xvc2U6IFtdLCBlcnJvcjogW10sIG1lc3NhZ2U6IFtdfVxuICAgIHRoaXMuY2hhbm5lbHMgPSBbXVxuICAgIHRoaXMuc2VuZEJ1ZmZlciA9IFtdXG4gICAgdGhpcy5yZWYgPSAwXG4gICAgdGhpcy50aW1lb3V0ID0gb3B0cy50aW1lb3V0IHx8IERFRkFVTFRfVElNRU9VVFxuICAgIHRoaXMudHJhbnNwb3J0ID0gb3B0cy50cmFuc3BvcnQgfHwgZ2xvYmFsLldlYlNvY2tldCB8fCBMb25nUG9sbFxuICAgIHRoaXMuZXN0YWJsaXNoZWRDb25uZWN0aW9ucyA9IDBcbiAgICB0aGlzLmRlZmF1bHRFbmNvZGVyID0gU2VyaWFsaXplci5lbmNvZGUuYmluZChTZXJpYWxpemVyKVxuICAgIHRoaXMuZGVmYXVsdERlY29kZXIgPSBTZXJpYWxpemVyLmRlY29kZS5iaW5kKFNlcmlhbGl6ZXIpXG4gICAgdGhpcy5jbG9zZVdhc0NsZWFuID0gZmFsc2VcbiAgICB0aGlzLmJpbmFyeVR5cGUgPSBvcHRzLmJpbmFyeVR5cGUgfHwgXCJhcnJheWJ1ZmZlclwiXG4gICAgdGhpcy5jb25uZWN0Q2xvY2sgPSAxXG4gICAgaWYodGhpcy50cmFuc3BvcnQgIT09IExvbmdQb2xsKXtcbiAgICAgIHRoaXMuZW5jb2RlID0gb3B0cy5lbmNvZGUgfHwgdGhpcy5kZWZhdWx0RW5jb2RlclxuICAgICAgdGhpcy5kZWNvZGUgPSBvcHRzLmRlY29kZSB8fCB0aGlzLmRlZmF1bHREZWNvZGVyXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZW5jb2RlID0gdGhpcy5kZWZhdWx0RW5jb2RlclxuICAgICAgdGhpcy5kZWNvZGUgPSB0aGlzLmRlZmF1bHREZWNvZGVyXG4gICAgfVxuICAgIGxldCBhd2FpdGluZ0Nvbm5lY3Rpb25PblBhZ2VTaG93ID0gbnVsbFxuICAgIGlmKHBoeFdpbmRvdyAmJiBwaHhXaW5kb3cuYWRkRXZlbnRMaXN0ZW5lcil7XG4gICAgICBwaHhXaW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInBhZ2VoaWRlXCIsIF9lID0+IHtcbiAgICAgICAgaWYodGhpcy5jb25uKXtcbiAgICAgICAgICB0aGlzLmRpc2Nvbm5lY3QoKVxuICAgICAgICAgIGF3YWl0aW5nQ29ubmVjdGlvbk9uUGFnZVNob3cgPSB0aGlzLmNvbm5lY3RDbG9ja1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgcGh4V2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJwYWdlc2hvd1wiLCBfZSA9PiB7XG4gICAgICAgIGlmKGF3YWl0aW5nQ29ubmVjdGlvbk9uUGFnZVNob3cgPT09IHRoaXMuY29ubmVjdENsb2NrKXtcbiAgICAgICAgICBhd2FpdGluZ0Nvbm5lY3Rpb25PblBhZ2VTaG93ID0gbnVsbFxuICAgICAgICAgIHRoaXMuY29ubmVjdCgpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICAgIHRoaXMuaGVhcnRiZWF0SW50ZXJ2YWxNcyA9IG9wdHMuaGVhcnRiZWF0SW50ZXJ2YWxNcyB8fCAzMDAwMFxuICAgIHRoaXMucmVqb2luQWZ0ZXJNcyA9ICh0cmllcykgPT4ge1xuICAgICAgaWYob3B0cy5yZWpvaW5BZnRlck1zKXtcbiAgICAgICAgcmV0dXJuIG9wdHMucmVqb2luQWZ0ZXJNcyh0cmllcylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBbMTAwMCwgMjAwMCwgNTAwMF1bdHJpZXMgLSAxXSB8fCAxMDAwMFxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnJlY29ubmVjdEFmdGVyTXMgPSAodHJpZXMpID0+IHtcbiAgICAgIGlmKG9wdHMucmVjb25uZWN0QWZ0ZXJNcyl7XG4gICAgICAgIHJldHVybiBvcHRzLnJlY29ubmVjdEFmdGVyTXModHJpZXMpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gWzEwLCA1MCwgMTAwLCAxNTAsIDIwMCwgMjUwLCA1MDAsIDEwMDAsIDIwMDBdW3RyaWVzIC0gMV0gfHwgNTAwMFxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmxvZ2dlciA9IG9wdHMubG9nZ2VyIHx8IG51bGxcbiAgICB0aGlzLmxvbmdwb2xsZXJUaW1lb3V0ID0gb3B0cy5sb25ncG9sbGVyVGltZW91dCB8fCAyMDAwMFxuICAgIHRoaXMucGFyYW1zID0gY2xvc3VyZShvcHRzLnBhcmFtcyB8fCB7fSlcbiAgICB0aGlzLmVuZFBvaW50ID0gYCR7ZW5kUG9pbnR9LyR7VFJBTlNQT1JUUy53ZWJzb2NrZXR9YFxuICAgIHRoaXMudnNuID0gb3B0cy52c24gfHwgREVGQVVMVF9WU05cbiAgICB0aGlzLmhlYXJ0YmVhdFRpbWVyID0gbnVsbFxuICAgIHRoaXMucGVuZGluZ0hlYXJ0YmVhdFJlZiA9IG51bGxcbiAgICB0aGlzLnJlY29ubmVjdFRpbWVyID0gbmV3IFRpbWVyKCgpID0+IHtcbiAgICAgIHRoaXMudGVhcmRvd24oKCkgPT4gdGhpcy5jb25uZWN0KCkpXG4gICAgfSwgdGhpcy5yZWNvbm5lY3RBZnRlck1zKVxuICB9XG5cbiAgLyoqXG4gICAqIERpc2Nvbm5lY3RzIGFuZCByZXBsYWNlcyB0aGUgYWN0aXZlIHRyYW5zcG9ydFxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBuZXdUcmFuc3BvcnQgLSBUaGUgbmV3IHRyYW5zcG9ydCBjbGFzcyB0byBpbnN0YW50aWF0ZVxuICAgKlxuICAgKi9cbiAgcmVwbGFjZVRyYW5zcG9ydChuZXdUcmFuc3BvcnQpe1xuICAgIHRoaXMuZGlzY29ubmVjdCgpXG4gICAgdGhpcy50cmFuc3BvcnQgPSBuZXdUcmFuc3BvcnRcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBzb2NrZXQgcHJvdG9jb2xcbiAgICpcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIHByb3RvY29sKCl7IHJldHVybiBsb2NhdGlvbi5wcm90b2NvbC5tYXRjaCgvXmh0dHBzLykgPyBcIndzc1wiIDogXCJ3c1wiIH1cblxuICAvKipcbiAgICogVGhlIGZ1bGx5IHF1YWxpZmVkIHNvY2tldCB1cmxcbiAgICpcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIGVuZFBvaW50VVJMKCl7XG4gICAgbGV0IHVyaSA9IEFqYXguYXBwZW5kUGFyYW1zKFxuICAgICAgQWpheC5hcHBlbmRQYXJhbXModGhpcy5lbmRQb2ludCwgdGhpcy5wYXJhbXMoKSksIHt2c246IHRoaXMudnNufSlcbiAgICBpZih1cmkuY2hhckF0KDApICE9PSBcIi9cIil7IHJldHVybiB1cmkgfVxuICAgIGlmKHVyaS5jaGFyQXQoMSkgPT09IFwiL1wiKXsgcmV0dXJuIGAke3RoaXMucHJvdG9jb2woKX06JHt1cml9YCB9XG5cbiAgICByZXR1cm4gYCR7dGhpcy5wcm90b2NvbCgpfTovLyR7bG9jYXRpb24uaG9zdH0ke3VyaX1gXG4gIH1cblxuICAvKipcbiAgICogRGlzY29ubmVjdHMgdGhlIHNvY2tldFxuICAgKlxuICAgKiBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0Nsb3NlRXZlbnQjU3RhdHVzX2NvZGVzIGZvciB2YWxpZCBzdGF0dXMgY29kZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIC0gT3B0aW9uYWwgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIGFmdGVyIHNvY2tldCBpcyBkaXNjb25uZWN0ZWQuXG4gICAqIEBwYXJhbSB7aW50ZWdlcn0gY29kZSAtIEEgc3RhdHVzIGNvZGUgZm9yIGRpc2Nvbm5lY3Rpb24gKE9wdGlvbmFsKS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlYXNvbiAtIEEgdGV4dHVhbCBkZXNjcmlwdGlvbiBvZiB0aGUgcmVhc29uIHRvIGRpc2Nvbm5lY3QuIChPcHRpb25hbClcbiAgICovXG4gIGRpc2Nvbm5lY3QoY2FsbGJhY2ssIGNvZGUsIHJlYXNvbil7XG4gICAgdGhpcy5jb25uZWN0Q2xvY2srK1xuICAgIHRoaXMuY2xvc2VXYXNDbGVhbiA9IHRydWVcbiAgICB0aGlzLnJlY29ubmVjdFRpbWVyLnJlc2V0KClcbiAgICB0aGlzLnRlYXJkb3duKGNhbGxiYWNrLCBjb2RlLCByZWFzb24pXG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IHBhcmFtcyAtIFRoZSBwYXJhbXMgdG8gc2VuZCB3aGVuIGNvbm5lY3RpbmcsIGZvciBleGFtcGxlIGB7dXNlcl9pZDogdXNlclRva2VufWBcbiAgICpcbiAgICogUGFzc2luZyBwYXJhbXMgdG8gY29ubmVjdCBpcyBkZXByZWNhdGVkOyBwYXNzIHRoZW0gaW4gdGhlIFNvY2tldCBjb25zdHJ1Y3RvciBpbnN0ZWFkOlxuICAgKiBgbmV3IFNvY2tldChcIi9zb2NrZXRcIiwge3BhcmFtczoge3VzZXJfaWQ6IHVzZXJUb2tlbn19KWAuXG4gICAqL1xuICBjb25uZWN0KHBhcmFtcyl7XG4gICAgdGhpcy5jb25uZWN0Q2xvY2srK1xuICAgIGlmKHBhcmFtcyl7XG4gICAgICBjb25zb2xlICYmIGNvbnNvbGUubG9nKFwicGFzc2luZyBwYXJhbXMgdG8gY29ubmVjdCBpcyBkZXByZWNhdGVkLiBJbnN0ZWFkIHBhc3MgOnBhcmFtcyB0byB0aGUgU29ja2V0IGNvbnN0cnVjdG9yXCIpXG4gICAgICB0aGlzLnBhcmFtcyA9IGNsb3N1cmUocGFyYW1zKVxuICAgIH1cbiAgICBpZih0aGlzLmNvbm4peyByZXR1cm4gfVxuICAgIHRoaXMuY2xvc2VXYXNDbGVhbiA9IGZhbHNlXG4gICAgdGhpcy5jb25uID0gbmV3IHRoaXMudHJhbnNwb3J0KHRoaXMuZW5kUG9pbnRVUkwoKSlcbiAgICB0aGlzLmNvbm4uYmluYXJ5VHlwZSA9IHRoaXMuYmluYXJ5VHlwZVxuICAgIHRoaXMuY29ubi50aW1lb3V0ID0gdGhpcy5sb25ncG9sbGVyVGltZW91dFxuICAgIHRoaXMuY29ubi5vbm9wZW4gPSAoKSA9PiB0aGlzLm9uQ29ubk9wZW4oKVxuICAgIHRoaXMuY29ubi5vbmVycm9yID0gZXJyb3IgPT4gdGhpcy5vbkNvbm5FcnJvcihlcnJvcilcbiAgICB0aGlzLmNvbm4ub25tZXNzYWdlID0gZXZlbnQgPT4gdGhpcy5vbkNvbm5NZXNzYWdlKGV2ZW50KVxuICAgIHRoaXMuY29ubi5vbmNsb3NlID0gZXZlbnQgPT4gdGhpcy5vbkNvbm5DbG9zZShldmVudClcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2dzIHRoZSBtZXNzYWdlLiBPdmVycmlkZSBgdGhpcy5sb2dnZXJgIGZvciBzcGVjaWFsaXplZCBsb2dnaW5nLiBub29wcyBieSBkZWZhdWx0XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBraW5kXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtc2dcbiAgICogQHBhcmFtIHtPYmplY3R9IGRhdGFcbiAgICovXG4gIGxvZyhraW5kLCBtc2csIGRhdGEpeyB0aGlzLmxvZ2dlcihraW5kLCBtc2csIGRhdGEpIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIGEgbG9nZ2VyIGhhcyBiZWVuIHNldCBvbiB0aGlzIHNvY2tldC5cbiAgICovXG4gIGhhc0xvZ2dlcigpeyByZXR1cm4gdGhpcy5sb2dnZXIgIT09IG51bGwgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgY2FsbGJhY2tzIGZvciBjb25uZWN0aW9uIG9wZW4gZXZlbnRzXG4gICAqXG4gICAqIEBleGFtcGxlIHNvY2tldC5vbk9wZW4oZnVuY3Rpb24oKXsgY29uc29sZS5pbmZvKFwidGhlIHNvY2tldCB3YXMgb3BlbmVkXCIpIH0pXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gICAqL1xuICBvbk9wZW4oY2FsbGJhY2spe1xuICAgIGxldCByZWYgPSB0aGlzLm1ha2VSZWYoKVxuICAgIHRoaXMuc3RhdGVDaGFuZ2VDYWxsYmFja3Mub3Blbi5wdXNoKFtyZWYsIGNhbGxiYWNrXSlcbiAgICByZXR1cm4gcmVmXG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIGNhbGxiYWNrcyBmb3IgY29ubmVjdGlvbiBjbG9zZSBldmVudHNcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAgICovXG4gIG9uQ2xvc2UoY2FsbGJhY2spe1xuICAgIGxldCByZWYgPSB0aGlzLm1ha2VSZWYoKVxuICAgIHRoaXMuc3RhdGVDaGFuZ2VDYWxsYmFja3MuY2xvc2UucHVzaChbcmVmLCBjYWxsYmFja10pXG4gICAgcmV0dXJuIHJlZlxuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBjYWxsYmFja3MgZm9yIGNvbm5lY3Rpb24gZXJyb3IgZXZlbnRzXG4gICAqXG4gICAqIEBleGFtcGxlIHNvY2tldC5vbkVycm9yKGZ1bmN0aW9uKGVycm9yKXsgYWxlcnQoXCJBbiBlcnJvciBvY2N1cnJlZFwiKSB9KVxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICAgKi9cbiAgb25FcnJvcihjYWxsYmFjayl7XG4gICAgbGV0IHJlZiA9IHRoaXMubWFrZVJlZigpXG4gICAgdGhpcy5zdGF0ZUNoYW5nZUNhbGxiYWNrcy5lcnJvci5wdXNoKFtyZWYsIGNhbGxiYWNrXSlcbiAgICByZXR1cm4gcmVmXG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIGNhbGxiYWNrcyBmb3IgY29ubmVjdGlvbiBtZXNzYWdlIGV2ZW50c1xuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICAgKi9cbiAgb25NZXNzYWdlKGNhbGxiYWNrKXtcbiAgICBsZXQgcmVmID0gdGhpcy5tYWtlUmVmKClcbiAgICB0aGlzLnN0YXRlQ2hhbmdlQ2FsbGJhY2tzLm1lc3NhZ2UucHVzaChbcmVmLCBjYWxsYmFja10pXG4gICAgcmV0dXJuIHJlZlxuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBvbkNvbm5PcGVuKCl7XG4gICAgaWYodGhpcy5oYXNMb2dnZXIoKSkgdGhpcy5sb2coXCJ0cmFuc3BvcnRcIiwgYGNvbm5lY3RlZCB0byAke3RoaXMuZW5kUG9pbnRVUkwoKX1gKVxuICAgIHRoaXMuY2xvc2VXYXNDbGVhbiA9IGZhbHNlXG4gICAgdGhpcy5lc3RhYmxpc2hlZENvbm5lY3Rpb25zKytcbiAgICB0aGlzLmZsdXNoU2VuZEJ1ZmZlcigpXG4gICAgdGhpcy5yZWNvbm5lY3RUaW1lci5yZXNldCgpXG4gICAgdGhpcy5yZXNldEhlYXJ0YmVhdCgpXG4gICAgdGhpcy5zdGF0ZUNoYW5nZUNhbGxiYWNrcy5vcGVuLmZvckVhY2goKFssIGNhbGxiYWNrXSkgPT4gY2FsbGJhY2soKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBoZWFydGJlYXRUaW1lb3V0KCl7XG4gICAgaWYodGhpcy5wZW5kaW5nSGVhcnRiZWF0UmVmKXtcbiAgICAgIHRoaXMucGVuZGluZ0hlYXJ0YmVhdFJlZiA9IG51bGxcbiAgICAgIGlmKHRoaXMuaGFzTG9nZ2VyKCkpeyB0aGlzLmxvZyhcInRyYW5zcG9ydFwiLCBcImhlYXJ0YmVhdCB0aW1lb3V0LiBBdHRlbXB0aW5nIHRvIHJlLWVzdGFibGlzaCBjb25uZWN0aW9uXCIpIH1cbiAgICAgIHRoaXMuYWJub3JtYWxDbG9zZShcImhlYXJ0YmVhdCB0aW1lb3V0XCIpXG4gICAgfVxuICB9XG5cbiAgcmVzZXRIZWFydGJlYXQoKXtcbiAgICBpZih0aGlzLmNvbm4gJiYgdGhpcy5jb25uLnNraXBIZWFydGJlYXQpeyByZXR1cm4gfVxuICAgIHRoaXMucGVuZGluZ0hlYXJ0YmVhdFJlZiA9IG51bGxcbiAgICBjbGVhclRpbWVvdXQodGhpcy5oZWFydGJlYXRUaW1lcilcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc2VuZEhlYXJ0YmVhdCgpLCB0aGlzLmhlYXJ0YmVhdEludGVydmFsTXMpXG4gIH1cblxuICB0ZWFyZG93bihjYWxsYmFjaywgY29kZSwgcmVhc29uKXtcbiAgICBpZighdGhpcy5jb25uKXtcbiAgICAgIHJldHVybiBjYWxsYmFjayAmJiBjYWxsYmFjaygpXG4gICAgfVxuXG4gICAgdGhpcy53YWl0Rm9yQnVmZmVyRG9uZSgoKSA9PiB7XG4gICAgICBpZih0aGlzLmNvbm4pe1xuICAgICAgICBpZihjb2RlKXsgdGhpcy5jb25uLmNsb3NlKGNvZGUsIHJlYXNvbiB8fCBcIlwiKSB9IGVsc2UgeyB0aGlzLmNvbm4uY2xvc2UoKSB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMud2FpdEZvclNvY2tldENsb3NlZCgoKSA9PiB7XG4gICAgICAgIGlmKHRoaXMuY29ubil7XG4gICAgICAgICAgdGhpcy5jb25uLm9uY2xvc2UgPSBmdW5jdGlvbiAoKXsgfSAvLyBub29wXG4gICAgICAgICAgdGhpcy5jb25uID0gbnVsbFxuICAgICAgICB9XG5cbiAgICAgICAgY2FsbGJhY2sgJiYgY2FsbGJhY2soKVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgd2FpdEZvckJ1ZmZlckRvbmUoY2FsbGJhY2ssIHRyaWVzID0gMSl7XG4gICAgaWYodHJpZXMgPT09IDUgfHwgIXRoaXMuY29ubiB8fCAhdGhpcy5jb25uLmJ1ZmZlcmVkQW1vdW50KXtcbiAgICAgIGNhbGxiYWNrKClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy53YWl0Rm9yQnVmZmVyRG9uZShjYWxsYmFjaywgdHJpZXMgKyAxKVxuICAgIH0sIDE1MCAqIHRyaWVzKVxuICB9XG5cbiAgd2FpdEZvclNvY2tldENsb3NlZChjYWxsYmFjaywgdHJpZXMgPSAxKXtcbiAgICBpZih0cmllcyA9PT0gNSB8fCAhdGhpcy5jb25uIHx8IHRoaXMuY29ubi5yZWFkeVN0YXRlID09PSBTT0NLRVRfU1RBVEVTLmNsb3NlZCl7XG4gICAgICBjYWxsYmFjaygpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMud2FpdEZvclNvY2tldENsb3NlZChjYWxsYmFjaywgdHJpZXMgKyAxKVxuICAgIH0sIDE1MCAqIHRyaWVzKVxuICB9XG5cbiAgb25Db25uQ2xvc2UoZXZlbnQpe1xuICAgIGlmKHRoaXMuaGFzTG9nZ2VyKCkpIHRoaXMubG9nKFwidHJhbnNwb3J0XCIsIFwiY2xvc2VcIiwgZXZlbnQpXG4gICAgdGhpcy50cmlnZ2VyQ2hhbkVycm9yKClcbiAgICBjbGVhclRpbWVvdXQodGhpcy5oZWFydGJlYXRUaW1lcilcbiAgICBpZighdGhpcy5jbG9zZVdhc0NsZWFuKXtcbiAgICAgIHRoaXMucmVjb25uZWN0VGltZXIuc2NoZWR1bGVUaW1lb3V0KClcbiAgICB9XG4gICAgdGhpcy5zdGF0ZUNoYW5nZUNhbGxiYWNrcy5jbG9zZS5mb3JFYWNoKChbLCBjYWxsYmFja10pID0+IGNhbGxiYWNrKGV2ZW50KSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgb25Db25uRXJyb3IoZXJyb3Ipe1xuICAgIGlmKHRoaXMuaGFzTG9nZ2VyKCkpIHRoaXMubG9nKFwidHJhbnNwb3J0XCIsIGVycm9yKVxuICAgIGxldCB0cmFuc3BvcnRCZWZvcmUgPSB0aGlzLnRyYW5zcG9ydFxuICAgIGxldCBlc3RhYmxpc2hlZEJlZm9yZSA9IHRoaXMuZXN0YWJsaXNoZWRDb25uZWN0aW9uc1xuICAgIHRoaXMuc3RhdGVDaGFuZ2VDYWxsYmFja3MuZXJyb3IuZm9yRWFjaCgoWywgY2FsbGJhY2tdKSA9PiB7XG4gICAgICBjYWxsYmFjayhlcnJvciwgdHJhbnNwb3J0QmVmb3JlLCBlc3RhYmxpc2hlZEJlZm9yZSlcbiAgICB9KVxuICAgIGlmKHRyYW5zcG9ydEJlZm9yZSA9PT0gdGhpcy50cmFuc3BvcnQgfHwgZXN0YWJsaXNoZWRCZWZvcmUgPiAwKXtcbiAgICAgIHRoaXMudHJpZ2dlckNoYW5FcnJvcigpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICB0cmlnZ2VyQ2hhbkVycm9yKCl7XG4gICAgdGhpcy5jaGFubmVscy5mb3JFYWNoKGNoYW5uZWwgPT4ge1xuICAgICAgaWYoIShjaGFubmVsLmlzRXJyb3JlZCgpIHx8IGNoYW5uZWwuaXNMZWF2aW5nKCkgfHwgY2hhbm5lbC5pc0Nsb3NlZCgpKSl7XG4gICAgICAgIGNoYW5uZWwudHJpZ2dlcihDSEFOTkVMX0VWRU5UUy5lcnJvcilcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICBjb25uZWN0aW9uU3RhdGUoKXtcbiAgICBzd2l0Y2godGhpcy5jb25uICYmIHRoaXMuY29ubi5yZWFkeVN0YXRlKXtcbiAgICAgIGNhc2UgU09DS0VUX1NUQVRFUy5jb25uZWN0aW5nOiByZXR1cm4gXCJjb25uZWN0aW5nXCJcbiAgICAgIGNhc2UgU09DS0VUX1NUQVRFUy5vcGVuOiByZXR1cm4gXCJvcGVuXCJcbiAgICAgIGNhc2UgU09DS0VUX1NUQVRFUy5jbG9zaW5nOiByZXR1cm4gXCJjbG9zaW5nXCJcbiAgICAgIGRlZmF1bHQ6IHJldHVybiBcImNsb3NlZFwiXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgaXNDb25uZWN0ZWQoKXsgcmV0dXJuIHRoaXMuY29ubmVjdGlvblN0YXRlKCkgPT09IFwib3BlblwiIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtIHtDaGFubmVsfVxuICAgKi9cbiAgcmVtb3ZlKGNoYW5uZWwpe1xuICAgIHRoaXMub2ZmKGNoYW5uZWwuc3RhdGVDaGFuZ2VSZWZzKVxuICAgIHRoaXMuY2hhbm5lbHMgPSB0aGlzLmNoYW5uZWxzLmZpbHRlcihjID0+IGMuam9pblJlZigpICE9PSBjaGFubmVsLmpvaW5SZWYoKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGBvbk9wZW5gLCBgb25DbG9zZWAsIGBvbkVycm9yLGAgYW5kIGBvbk1lc3NhZ2VgIHJlZ2lzdHJhdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7cmVmc30gLSBsaXN0IG9mIHJlZnMgcmV0dXJuZWQgYnkgY2FsbHMgdG9cbiAgICogICAgICAgICAgICAgICAgIGBvbk9wZW5gLCBgb25DbG9zZWAsIGBvbkVycm9yLGAgYW5kIGBvbk1lc3NhZ2VgXG4gICAqL1xuICBvZmYocmVmcyl7XG4gICAgZm9yKGxldCBrZXkgaW4gdGhpcy5zdGF0ZUNoYW5nZUNhbGxiYWNrcyl7XG4gICAgICB0aGlzLnN0YXRlQ2hhbmdlQ2FsbGJhY2tzW2tleV0gPSB0aGlzLnN0YXRlQ2hhbmdlQ2FsbGJhY2tzW2tleV0uZmlsdGVyKChbcmVmXSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVmcy5pbmRleE9mKHJlZikgPT09IC0xXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWF0ZXMgYSBuZXcgY2hhbm5lbCBmb3IgdGhlIGdpdmVuIHRvcGljXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0b3BpY1xuICAgKiBAcGFyYW0ge09iamVjdH0gY2hhblBhcmFtcyAtIFBhcmFtZXRlcnMgZm9yIHRoZSBjaGFubmVsXG4gICAqIEByZXR1cm5zIHtDaGFubmVsfVxuICAgKi9cbiAgY2hhbm5lbCh0b3BpYywgY2hhblBhcmFtcyA9IHt9KXtcbiAgICBsZXQgY2hhbiA9IG5ldyBDaGFubmVsKHRvcGljLCBjaGFuUGFyYW1zLCB0aGlzKVxuICAgIHRoaXMuY2hhbm5lbHMucHVzaChjaGFuKVxuICAgIHJldHVybiBjaGFuXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtPYmplY3R9IGRhdGFcbiAgICovXG4gIHB1c2goZGF0YSl7XG4gICAgaWYodGhpcy5oYXNMb2dnZXIoKSl7XG4gICAgICBsZXQge3RvcGljLCBldmVudCwgcGF5bG9hZCwgcmVmLCBqb2luX3JlZn0gPSBkYXRhXG4gICAgICB0aGlzLmxvZyhcInB1c2hcIiwgYCR7dG9waWN9ICR7ZXZlbnR9ICgke2pvaW5fcmVmfSwgJHtyZWZ9KWAsIHBheWxvYWQpXG4gICAgfVxuXG4gICAgaWYodGhpcy5pc0Nvbm5lY3RlZCgpKXtcbiAgICAgIHRoaXMuZW5jb2RlKGRhdGEsIHJlc3VsdCA9PiB0aGlzLmNvbm4uc2VuZChyZXN1bHQpKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbmRCdWZmZXIucHVzaCgoKSA9PiB0aGlzLmVuY29kZShkYXRhLCByZXN1bHQgPT4gdGhpcy5jb25uLnNlbmQocmVzdWx0KSkpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgbmV4dCBtZXNzYWdlIHJlZiwgYWNjb3VudGluZyBmb3Igb3ZlcmZsb3dzXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICBtYWtlUmVmKCl7XG4gICAgbGV0IG5ld1JlZiA9IHRoaXMucmVmICsgMVxuICAgIGlmKG5ld1JlZiA9PT0gdGhpcy5yZWYpeyB0aGlzLnJlZiA9IDAgfSBlbHNlIHsgdGhpcy5yZWYgPSBuZXdSZWYgfVxuXG4gICAgcmV0dXJuIHRoaXMucmVmLnRvU3RyaW5nKClcbiAgfVxuXG4gIHNlbmRIZWFydGJlYXQoKXtcbiAgICBpZih0aGlzLnBlbmRpbmdIZWFydGJlYXRSZWYgJiYgIXRoaXMuaXNDb25uZWN0ZWQoKSl7IHJldHVybiB9XG4gICAgdGhpcy5wZW5kaW5nSGVhcnRiZWF0UmVmID0gdGhpcy5tYWtlUmVmKClcbiAgICB0aGlzLnB1c2goe3RvcGljOiBcInBob2VuaXhcIiwgZXZlbnQ6IFwiaGVhcnRiZWF0XCIsIHBheWxvYWQ6IHt9LCByZWY6IHRoaXMucGVuZGluZ0hlYXJ0YmVhdFJlZn0pXG4gICAgdGhpcy5oZWFydGJlYXRUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5oZWFydGJlYXRUaW1lb3V0KCksIHRoaXMuaGVhcnRiZWF0SW50ZXJ2YWxNcylcbiAgfVxuXG4gIGFibm9ybWFsQ2xvc2UocmVhc29uKXtcbiAgICB0aGlzLmNsb3NlV2FzQ2xlYW4gPSBmYWxzZVxuICAgIGlmKHRoaXMuaXNDb25uZWN0ZWQoKSl7IHRoaXMuY29ubi5jbG9zZShXU19DTE9TRV9OT1JNQUwsIHJlYXNvbikgfVxuICB9XG5cbiAgZmx1c2hTZW5kQnVmZmVyKCl7XG4gICAgaWYodGhpcy5pc0Nvbm5lY3RlZCgpICYmIHRoaXMuc2VuZEJ1ZmZlci5sZW5ndGggPiAwKXtcbiAgICAgIHRoaXMuc2VuZEJ1ZmZlci5mb3JFYWNoKGNhbGxiYWNrID0+IGNhbGxiYWNrKCkpXG4gICAgICB0aGlzLnNlbmRCdWZmZXIgPSBbXVxuICAgIH1cbiAgfVxuXG4gIG9uQ29ubk1lc3NhZ2UocmF3TWVzc2FnZSl7XG4gICAgdGhpcy5kZWNvZGUocmF3TWVzc2FnZS5kYXRhLCBtc2cgPT4ge1xuICAgICAgbGV0IHt0b3BpYywgZXZlbnQsIHBheWxvYWQsIHJlZiwgam9pbl9yZWZ9ID0gbXNnXG4gICAgICBpZihyZWYgJiYgcmVmID09PSB0aGlzLnBlbmRpbmdIZWFydGJlYXRSZWYpe1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5oZWFydGJlYXRUaW1lcilcbiAgICAgICAgdGhpcy5wZW5kaW5nSGVhcnRiZWF0UmVmID0gbnVsbFxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc2VuZEhlYXJ0YmVhdCgpLCB0aGlzLmhlYXJ0YmVhdEludGVydmFsTXMpXG4gICAgICB9XG5cbiAgICAgIGlmKHRoaXMuaGFzTG9nZ2VyKCkpIHRoaXMubG9nKFwicmVjZWl2ZVwiLCBgJHtwYXlsb2FkLnN0YXR1cyB8fCBcIlwifSAke3RvcGljfSAke2V2ZW50fSAke3JlZiAmJiBcIihcIiArIHJlZiArIFwiKVwiIHx8IFwiXCJ9YCwgcGF5bG9hZClcblxuICAgICAgZm9yKGxldCBpID0gMDsgaSA8IHRoaXMuY2hhbm5lbHMubGVuZ3RoOyBpKyspe1xuICAgICAgICBjb25zdCBjaGFubmVsID0gdGhpcy5jaGFubmVsc1tpXVxuICAgICAgICBpZighY2hhbm5lbC5pc01lbWJlcih0b3BpYywgZXZlbnQsIHBheWxvYWQsIGpvaW5fcmVmKSl7IGNvbnRpbnVlIH1cbiAgICAgICAgY2hhbm5lbC50cmlnZ2VyKGV2ZW50LCBwYXlsb2FkLCByZWYsIGpvaW5fcmVmKVxuICAgICAgfVxuXG4gICAgICBmb3IobGV0IGkgPSAwOyBpIDwgdGhpcy5zdGF0ZUNoYW5nZUNhbGxiYWNrcy5tZXNzYWdlLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgbGV0IFssIGNhbGxiYWNrXSA9IHRoaXMuc3RhdGVDaGFuZ2VDYWxsYmFja3MubWVzc2FnZVtpXVxuICAgICAgICBjYWxsYmFjayhtc2cpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGxlYXZlT3BlblRvcGljKHRvcGljKXtcbiAgICBsZXQgZHVwQ2hhbm5lbCA9IHRoaXMuY2hhbm5lbHMuZmluZChjID0+IGMudG9waWMgPT09IHRvcGljICYmIChjLmlzSm9pbmVkKCkgfHwgYy5pc0pvaW5pbmcoKSkpXG4gICAgaWYoZHVwQ2hhbm5lbCl7XG4gICAgICBpZih0aGlzLmhhc0xvZ2dlcigpKSB0aGlzLmxvZyhcInRyYW5zcG9ydFwiLCBgbGVhdmluZyBkdXBsaWNhdGUgdG9waWMgXCIke3RvcGljfVwiYClcbiAgICAgIGR1cENoYW5uZWwubGVhdmUoKVxuICAgIH1cbiAgfVxufVxuIiwgIlxuZXhwb3J0IGNvbnN0IENPTlNFQ1VUSVZFX1JFTE9BRFMgPSBcImNvbnNlY3V0aXZlLXJlbG9hZHNcIlxuZXhwb3J0IGNvbnN0IE1BWF9SRUxPQURTID0gMTBcbmV4cG9ydCBjb25zdCBSRUxPQURfSklUVEVSID0gWzEwMDAsIDMwMDBdXG5leHBvcnQgY29uc3QgRkFJTFNBRkVfSklUVEVSID0gMzAwMDBcbmV4cG9ydCBjb25zdCBQSFhfRVZFTlRfQ0xBU1NFUyA9IFtcbiAgXCJwaHgtY2xpY2stbG9hZGluZ1wiLCBcInBoeC1jaGFuZ2UtbG9hZGluZ1wiLCBcInBoeC1zdWJtaXQtbG9hZGluZ1wiLFxuICBcInBoeC1rZXlkb3duLWxvYWRpbmdcIiwgXCJwaHgta2V5dXAtbG9hZGluZ1wiLCBcInBoeC1ibHVyLWxvYWRpbmdcIiwgXCJwaHgtZm9jdXMtbG9hZGluZ1wiXG5dXG5leHBvcnQgY29uc3QgUEhYX0NPTVBPTkVOVCA9IFwiZGF0YS1waHgtY29tcG9uZW50XCJcbmV4cG9ydCBjb25zdCBQSFhfTElWRV9MSU5LID0gXCJkYXRhLXBoeC1saW5rXCJcbmV4cG9ydCBjb25zdCBQSFhfVFJBQ0tfU1RBVElDID0gXCJ0cmFjay1zdGF0aWNcIlxuZXhwb3J0IGNvbnN0IFBIWF9MSU5LX1NUQVRFID0gXCJkYXRhLXBoeC1saW5rLXN0YXRlXCJcbmV4cG9ydCBjb25zdCBQSFhfUkVGID0gXCJkYXRhLXBoeC1yZWZcIlxuZXhwb3J0IGNvbnN0IFBIWF9UUkFDS19VUExPQURTID0gXCJ0cmFjay11cGxvYWRzXCJcbmV4cG9ydCBjb25zdCBQSFhfVVBMT0FEX1JFRiA9IFwiZGF0YS1waHgtdXBsb2FkLXJlZlwiXG5leHBvcnQgY29uc3QgUEhYX1BSRUZMSUdIVEVEX1JFRlMgPSBcImRhdGEtcGh4LXByZWZsaWdodGVkLXJlZnNcIlxuZXhwb3J0IGNvbnN0IFBIWF9ET05FX1JFRlMgPSBcImRhdGEtcGh4LWRvbmUtcmVmc1wiXG5leHBvcnQgY29uc3QgUEhYX0RST1BfVEFSR0VUID0gXCJkcm9wLXRhcmdldFwiXG5leHBvcnQgY29uc3QgUEhYX0FDVElWRV9FTlRSWV9SRUZTID0gXCJkYXRhLXBoeC1hY3RpdmUtcmVmc1wiXG5leHBvcnQgY29uc3QgUEhYX0xJVkVfRklMRV9VUERBVEVEID0gXCJwaHg6bGl2ZS1maWxlOnVwZGF0ZWRcIlxuZXhwb3J0IGNvbnN0IFBIWF9TS0lQID0gXCJkYXRhLXBoeC1za2lwXCJcbmV4cG9ydCBjb25zdCBQSFhfUkVNT1ZFID0gXCJkYXRhLXBoeC1yZW1vdmVcIlxuZXhwb3J0IGNvbnN0IFBIWF9QQUdFX0xPQURJTkcgPSBcInBhZ2UtbG9hZGluZ1wiXG5leHBvcnQgY29uc3QgUEhYX0NPTk5FQ1RFRF9DTEFTUyA9IFwicGh4LWNvbm5lY3RlZFwiXG5leHBvcnQgY29uc3QgUEhYX0RJU0NPTk5FQ1RFRF9DTEFTUyA9IFwicGh4LWRpc2Nvbm5lY3RlZFwiXG5leHBvcnQgY29uc3QgUEhYX05PX0ZFRURCQUNLX0NMQVNTID0gXCJwaHgtbm8tZmVlZGJhY2tcIlxuZXhwb3J0IGNvbnN0IFBIWF9FUlJPUl9DTEFTUyA9IFwicGh4LWVycm9yXCJcbmV4cG9ydCBjb25zdCBQSFhfUEFSRU5UX0lEID0gXCJkYXRhLXBoeC1wYXJlbnQtaWRcIlxuZXhwb3J0IGNvbnN0IFBIWF9NQUlOID0gXCJkYXRhLXBoeC1tYWluXCJcbmV4cG9ydCBjb25zdCBQSFhfUk9PVF9JRCA9IFwiZGF0YS1waHgtcm9vdC1pZFwiXG5leHBvcnQgY29uc3QgUEhYX1RSSUdHRVJfQUNUSU9OID0gXCJ0cmlnZ2VyLWFjdGlvblwiXG5leHBvcnQgY29uc3QgUEhYX0ZFRURCQUNLX0ZPUiA9IFwiZmVlZGJhY2stZm9yXCJcbmV4cG9ydCBjb25zdCBQSFhfSEFTX0ZPQ1VTRUQgPSBcInBoeC1oYXMtZm9jdXNlZFwiXG5leHBvcnQgY29uc3QgRk9DVVNBQkxFX0lOUFVUUyA9IFtcInRleHRcIiwgXCJ0ZXh0YXJlYVwiLCBcIm51bWJlclwiLCBcImVtYWlsXCIsIFwicGFzc3dvcmRcIiwgXCJzZWFyY2hcIiwgXCJ0ZWxcIiwgXCJ1cmxcIiwgXCJkYXRlXCIsIFwidGltZVwiXVxuZXhwb3J0IGNvbnN0IENIRUNLQUJMRV9JTlBVVFMgPSBbXCJjaGVja2JveFwiLCBcInJhZGlvXCJdXG5leHBvcnQgY29uc3QgUEhYX0hBU19TVUJNSVRURUQgPSBcInBoeC1oYXMtc3VibWl0dGVkXCJcbmV4cG9ydCBjb25zdCBQSFhfU0VTU0lPTiA9IFwiZGF0YS1waHgtc2Vzc2lvblwiXG5leHBvcnQgY29uc3QgUEhYX1ZJRVdfU0VMRUNUT1IgPSBgWyR7UEhYX1NFU1NJT059XWBcbmV4cG9ydCBjb25zdCBQSFhfU1RBVElDID0gXCJkYXRhLXBoeC1zdGF0aWNcIlxuZXhwb3J0IGNvbnN0IFBIWF9SRUFET05MWSA9IFwiZGF0YS1waHgtcmVhZG9ubHlcIlxuZXhwb3J0IGNvbnN0IFBIWF9ESVNBQkxFRCA9IFwiZGF0YS1waHgtZGlzYWJsZWRcIlxuZXhwb3J0IGNvbnN0IFBIWF9ESVNBQkxFX1dJVEggPSBcImRpc2FibGUtd2l0aFwiXG5leHBvcnQgY29uc3QgUEhYX0RJU0FCTEVfV0lUSF9SRVNUT1JFID0gXCJkYXRhLXBoeC1kaXNhYmxlLXdpdGgtcmVzdG9yZVwiXG5leHBvcnQgY29uc3QgUEhYX0hPT0sgPSBcImhvb2tcIlxuZXhwb3J0IGNvbnN0IFBIWF9ERUJPVU5DRSA9IFwiZGVib3VuY2VcIlxuZXhwb3J0IGNvbnN0IFBIWF9USFJPVFRMRSA9IFwidGhyb3R0bGVcIlxuZXhwb3J0IGNvbnN0IFBIWF9VUERBVEUgPSBcInVwZGF0ZVwiXG5leHBvcnQgY29uc3QgUEhYX0tFWSA9IFwia2V5XCJcbmV4cG9ydCBjb25zdCBQSFhfUFJJVkFURSA9IFwicGh4UHJpdmF0ZVwiXG5leHBvcnQgY29uc3QgUEhYX0FVVE9fUkVDT1ZFUiA9IFwiYXV0by1yZWNvdmVyXCJcbmV4cG9ydCBjb25zdCBQSFhfTFZfREVCVUcgPSBcInBoeDpsaXZlLXNvY2tldDpkZWJ1Z1wiXG5leHBvcnQgY29uc3QgUEhYX0xWX1BST0ZJTEUgPSBcInBoeDpsaXZlLXNvY2tldDpwcm9maWxpbmdcIlxuZXhwb3J0IGNvbnN0IFBIWF9MVl9MQVRFTkNZX1NJTSA9IFwicGh4OmxpdmUtc29ja2V0OmxhdGVuY3ktc2ltXCJcbmV4cG9ydCBjb25zdCBQSFhfUFJPR1JFU1MgPSBcInByb2dyZXNzXCJcbmV4cG9ydCBjb25zdCBMT0FERVJfVElNRU9VVCA9IDFcbmV4cG9ydCBjb25zdCBCRUZPUkVfVU5MT0FEX0xPQURFUl9USU1FT1VUID0gMjAwXG5leHBvcnQgY29uc3QgQklORElOR19QUkVGSVggPSBcInBoeC1cIlxuZXhwb3J0IGNvbnN0IFBVU0hfVElNRU9VVCA9IDMwMDAwXG5leHBvcnQgY29uc3QgTElOS19IRUFERVIgPSBcIngtcmVxdWVzdGVkLXdpdGhcIlxuZXhwb3J0IGNvbnN0IFJFU1BPTlNFX1VSTF9IRUFERVIgPSBcIngtcmVzcG9uc2UtdXJsXCJcbmV4cG9ydCBjb25zdCBERUJPVU5DRV9UUklHR0VSID0gXCJkZWJvdW5jZS10cmlnZ2VyXCJcbmV4cG9ydCBjb25zdCBUSFJPVFRMRUQgPSBcInRocm90dGxlZFwiXG5leHBvcnQgY29uc3QgREVCT1VOQ0VfUFJFVl9LRVkgPSBcImRlYm91bmNlLXByZXYta2V5XCJcbmV4cG9ydCBjb25zdCBERUZBVUxUUyA9IHtcbiAgZGVib3VuY2U6IDMwMCxcbiAgdGhyb3R0bGU6IDMwMFxufVxuXG4vLyBSZW5kZXJlZFxuZXhwb3J0IGNvbnN0IERZTkFNSUNTID0gXCJkXCJcbmV4cG9ydCBjb25zdCBTVEFUSUMgPSBcInNcIlxuZXhwb3J0IGNvbnN0IENPTVBPTkVOVFMgPSBcImNcIlxuZXhwb3J0IGNvbnN0IEVWRU5UUyA9IFwiZVwiXG5leHBvcnQgY29uc3QgUkVQTFkgPSBcInJcIlxuZXhwb3J0IGNvbnN0IFRJVExFID0gXCJ0XCJcbiIsICJpbXBvcnQge1xuICBsb2dFcnJvclxufSBmcm9tIFwiLi91dGlsc1wiXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVudHJ5VXBsb2FkZXIge1xuICBjb25zdHJ1Y3RvcihlbnRyeSwgY2h1bmtTaXplLCBsaXZlU29ja2V0KXtcbiAgICB0aGlzLmxpdmVTb2NrZXQgPSBsaXZlU29ja2V0XG4gICAgdGhpcy5lbnRyeSA9IGVudHJ5XG4gICAgdGhpcy5vZmZzZXQgPSAwXG4gICAgdGhpcy5jaHVua1NpemUgPSBjaHVua1NpemVcbiAgICB0aGlzLmNodW5rVGltZXIgPSBudWxsXG4gICAgdGhpcy51cGxvYWRDaGFubmVsID0gbGl2ZVNvY2tldC5jaGFubmVsKGBsdnU6JHtlbnRyeS5yZWZ9YCwge3Rva2VuOiBlbnRyeS5tZXRhZGF0YSgpfSlcbiAgfVxuXG4gIGVycm9yKHJlYXNvbil7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuY2h1bmtUaW1lcilcbiAgICB0aGlzLnVwbG9hZENoYW5uZWwubGVhdmUoKVxuICAgIHRoaXMuZW50cnkuZXJyb3IocmVhc29uKVxuICB9XG5cbiAgdXBsb2FkKCl7XG4gICAgdGhpcy51cGxvYWRDaGFubmVsLm9uRXJyb3IocmVhc29uID0+IHRoaXMuZXJyb3IocmVhc29uKSlcbiAgICB0aGlzLnVwbG9hZENoYW5uZWwuam9pbigpXG4gICAgICAucmVjZWl2ZShcIm9rXCIsIF9kYXRhID0+IHRoaXMucmVhZE5leHRDaHVuaygpKVxuICAgICAgLnJlY2VpdmUoXCJlcnJvclwiLCByZWFzb24gPT4gdGhpcy5lcnJvcihyZWFzb24pKVxuICB9XG5cbiAgaXNEb25lKCl7IHJldHVybiB0aGlzLm9mZnNldCA+PSB0aGlzLmVudHJ5LmZpbGUuc2l6ZSB9XG5cbiAgcmVhZE5leHRDaHVuaygpe1xuICAgIGxldCByZWFkZXIgPSBuZXcgd2luZG93LkZpbGVSZWFkZXIoKVxuICAgIGxldCBibG9iID0gdGhpcy5lbnRyeS5maWxlLnNsaWNlKHRoaXMub2Zmc2V0LCB0aGlzLmNodW5rU2l6ZSArIHRoaXMub2Zmc2V0KVxuICAgIHJlYWRlci5vbmxvYWQgPSAoZSkgPT4ge1xuICAgICAgaWYoZS50YXJnZXQuZXJyb3IgPT09IG51bGwpe1xuICAgICAgICB0aGlzLm9mZnNldCArPSBlLnRhcmdldC5yZXN1bHQuYnl0ZUxlbmd0aFxuICAgICAgICB0aGlzLnB1c2hDaHVuayhlLnRhcmdldC5yZXN1bHQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbG9nRXJyb3IoXCJSZWFkIGVycm9yOiBcIiArIGUudGFyZ2V0LmVycm9yKVxuICAgICAgfVxuICAgIH1cbiAgICByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoYmxvYilcbiAgfVxuXG4gIHB1c2hDaHVuayhjaHVuayl7XG4gICAgaWYoIXRoaXMudXBsb2FkQ2hhbm5lbC5pc0pvaW5lZCgpKXsgcmV0dXJuIH1cbiAgICB0aGlzLnVwbG9hZENoYW5uZWwucHVzaChcImNodW5rXCIsIGNodW5rKVxuICAgICAgLnJlY2VpdmUoXCJva1wiLCAoKSA9PiB7XG4gICAgICAgIHRoaXMuZW50cnkucHJvZ3Jlc3MoKHRoaXMub2Zmc2V0IC8gdGhpcy5lbnRyeS5maWxlLnNpemUpICogMTAwKVxuICAgICAgICBpZighdGhpcy5pc0RvbmUoKSl7XG4gICAgICAgICAgdGhpcy5jaHVua1RpbWVyID0gc2V0VGltZW91dCgoKSA9PiB0aGlzLnJlYWROZXh0Q2h1bmsoKSwgdGhpcy5saXZlU29ja2V0LmdldExhdGVuY3lTaW0oKSB8fCAwKVxuICAgICAgICB9XG4gICAgICB9KVxuICB9XG59XG4iLCAiaW1wb3J0IHtcbiAgUEhYX1ZJRVdfU0VMRUNUT1Jcbn0gZnJvbSBcIi4vY29uc3RhbnRzXCJcblxuaW1wb3J0IEVudHJ5VXBsb2FkZXIgZnJvbSBcIi4vZW50cnlfdXBsb2FkZXJcIlxuXG5leHBvcnQgbGV0IGxvZ0Vycm9yID0gKG1zZywgb2JqKSA9PiBjb25zb2xlLmVycm9yICYmIGNvbnNvbGUuZXJyb3IobXNnLCBvYmopXG5cbmV4cG9ydCBmdW5jdGlvbiBkZXRlY3REdXBsaWNhdGVJZHMoKXtcbiAgbGV0IGlkcyA9IG5ldyBTZXQoKVxuICBsZXQgZWxlbXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiKltpZF1cIilcbiAgZm9yKGxldCBpID0gMCwgbGVuID0gZWxlbXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspe1xuICAgIGlmKGlkcy5oYXMoZWxlbXNbaV0uaWQpKXtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYE11bHRpcGxlIElEcyBkZXRlY3RlZDogJHtlbGVtc1tpXS5pZH0uIEVuc3VyZSB1bmlxdWUgZWxlbWVudCBpZHMuYClcbiAgICB9IGVsc2Uge1xuICAgICAgaWRzLmFkZChlbGVtc1tpXS5pZClcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGxldCBkZWJ1ZyA9ICh2aWV3LCBraW5kLCBtc2csIG9iaikgPT4ge1xuICBpZih2aWV3LmxpdmVTb2NrZXQuaXNEZWJ1Z0VuYWJsZWQoKSl7XG4gICAgY29uc29sZS5sb2coYCR7dmlldy5pZH0gJHtraW5kfTogJHttc2d9IC0gYCwgb2JqKVxuICB9XG59XG5cbi8vIHdyYXBzIHZhbHVlIGluIGNsb3N1cmUgb3IgcmV0dXJucyBjbG9zdXJlXG5leHBvcnQgbGV0IGNsb3N1cmUgPSAodmFsKSA9PiB0eXBlb2YgdmFsID09PSBcImZ1bmN0aW9uXCIgPyB2YWwgOiBmdW5jdGlvbiAoKXsgcmV0dXJuIHZhbCB9XG5cbmV4cG9ydCBsZXQgY2xvbmUgPSAob2JqKSA9PiB7IHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9iaikpIH1cblxuZXhwb3J0IGxldCBjbG9zZXN0UGh4QmluZGluZyA9IChlbCwgYmluZGluZywgYm9yZGVyRWwpID0+IHtcbiAgZG8ge1xuICAgIGlmKGVsLm1hdGNoZXMoYFske2JpbmRpbmd9XWApKXsgcmV0dXJuIGVsIH1cbiAgICBlbCA9IGVsLnBhcmVudEVsZW1lbnQgfHwgZWwucGFyZW50Tm9kZVxuICB9IHdoaWxlKGVsICE9PSBudWxsICYmIGVsLm5vZGVUeXBlID09PSAxICYmICEoKGJvcmRlckVsICYmIGJvcmRlckVsLmlzU2FtZU5vZGUoZWwpKSB8fCBlbC5tYXRjaGVzKFBIWF9WSUVXX1NFTEVDVE9SKSkpXG4gIHJldHVybiBudWxsXG59XG5cbmV4cG9ydCBsZXQgaXNPYmplY3QgPSAob2JqKSA9PiB7XG4gIHJldHVybiBvYmogIT09IG51bGwgJiYgdHlwZW9mIG9iaiA9PT0gXCJvYmplY3RcIiAmJiAhKG9iaiBpbnN0YW5jZW9mIEFycmF5KVxufVxuXG5leHBvcnQgbGV0IGlzRXF1YWxPYmogPSAob2JqMSwgb2JqMikgPT4gSlNPTi5zdHJpbmdpZnkob2JqMSkgPT09IEpTT04uc3RyaW5naWZ5KG9iajIpXG5cbmV4cG9ydCBsZXQgaXNFbXB0eSA9IChvYmopID0+IHtcbiAgZm9yKGxldCB4IGluIG9iail7IHJldHVybiBmYWxzZSB9XG4gIHJldHVybiB0cnVlXG59XG5cbmV4cG9ydCBsZXQgbWF5YmUgPSAoZWwsIGNhbGxiYWNrKSA9PiBlbCAmJiBjYWxsYmFjayhlbClcblxuZXhwb3J0IGxldCBjaGFubmVsVXBsb2FkZXIgPSBmdW5jdGlvbiAoZW50cmllcywgb25FcnJvciwgcmVzcCwgbGl2ZVNvY2tldCl7XG4gIGVudHJpZXMuZm9yRWFjaChlbnRyeSA9PiB7XG4gICAgbGV0IGVudHJ5VXBsb2FkZXIgPSBuZXcgRW50cnlVcGxvYWRlcihlbnRyeSwgcmVzcC5jb25maWcuY2h1bmtfc2l6ZSwgbGl2ZVNvY2tldClcbiAgICBlbnRyeVVwbG9hZGVyLnVwbG9hZCgpXG4gIH0pXG59XG4iLCAibGV0IEJyb3dzZXIgPSB7XG4gIGNhblB1c2hTdGF0ZSgpeyByZXR1cm4gKHR5cGVvZiAoaGlzdG9yeS5wdXNoU3RhdGUpICE9PSBcInVuZGVmaW5lZFwiKSB9LFxuXG4gIGRyb3BMb2NhbChsb2NhbFN0b3JhZ2UsIG5hbWVzcGFjZSwgc3Via2V5KXtcbiAgICByZXR1cm4gbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5sb2NhbEtleShuYW1lc3BhY2UsIHN1YmtleSkpXG4gIH0sXG5cbiAgdXBkYXRlTG9jYWwobG9jYWxTdG9yYWdlLCBuYW1lc3BhY2UsIHN1YmtleSwgaW5pdGlhbCwgZnVuYyl7XG4gICAgbGV0IGN1cnJlbnQgPSB0aGlzLmdldExvY2FsKGxvY2FsU3RvcmFnZSwgbmFtZXNwYWNlLCBzdWJrZXkpXG4gICAgbGV0IGtleSA9IHRoaXMubG9jYWxLZXkobmFtZXNwYWNlLCBzdWJrZXkpXG4gICAgbGV0IG5ld1ZhbCA9IGN1cnJlbnQgPT09IG51bGwgPyBpbml0aWFsIDogZnVuYyhjdXJyZW50KVxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGtleSwgSlNPTi5zdHJpbmdpZnkobmV3VmFsKSlcbiAgICByZXR1cm4gbmV3VmFsXG4gIH0sXG5cbiAgZ2V0TG9jYWwobG9jYWxTdG9yYWdlLCBuYW1lc3BhY2UsIHN1YmtleSl7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5sb2NhbEtleShuYW1lc3BhY2UsIHN1YmtleSkpKVxuICB9LFxuXG4gIHVwZGF0ZUN1cnJlbnRTdGF0ZShjYWxsYmFjayl7XG4gICAgaWYoIXRoaXMuY2FuUHVzaFN0YXRlKCkpeyByZXR1cm4gfVxuICAgIGhpc3RvcnkucmVwbGFjZVN0YXRlKGNhbGxiYWNrKGhpc3Rvcnkuc3RhdGUgfHwge30pLCBcIlwiLCB3aW5kb3cubG9jYXRpb24uaHJlZilcbiAgfSxcblxuICBwdXNoU3RhdGUoa2luZCwgbWV0YSwgdG8pe1xuICAgIGlmKHRoaXMuY2FuUHVzaFN0YXRlKCkpe1xuICAgICAgaWYodG8gIT09IHdpbmRvdy5sb2NhdGlvbi5ocmVmKXtcbiAgICAgICAgaWYobWV0YS50eXBlID09IFwicmVkaXJlY3RcIiAmJiBtZXRhLnNjcm9sbCl7XG4gICAgICAgICAgLy8gSWYgd2UncmUgcmVkaXJlY3Rpbmcgc3RvcmUgdGhlIGN1cnJlbnQgc2Nyb2xsWSBmb3IgdGhlIGN1cnJlbnQgaGlzdG9yeSBzdGF0ZS5cbiAgICAgICAgICBsZXQgY3VycmVudFN0YXRlID0gaGlzdG9yeS5zdGF0ZSB8fCB7fVxuICAgICAgICAgIGN1cnJlbnRTdGF0ZS5zY3JvbGwgPSBtZXRhLnNjcm9sbFxuICAgICAgICAgIGhpc3RvcnkucmVwbGFjZVN0YXRlKGN1cnJlbnRTdGF0ZSwgXCJcIiwgd2luZG93LmxvY2F0aW9uLmhyZWYpXG4gICAgICAgIH1cblxuICAgICAgICBkZWxldGUgbWV0YS5zY3JvbGwgLy8gT25seSBzdG9yZSB0aGUgc2Nyb2xsIGluIHRoZSByZWRpcmVjdCBjYXNlLlxuICAgICAgICBoaXN0b3J5W2tpbmQgKyBcIlN0YXRlXCJdKG1ldGEsIFwiXCIsIHRvIHx8IG51bGwpIC8vIElFIHdpbGwgY29lcmNlIHVuZGVmaW5lZCB0byBzdHJpbmdcbiAgICAgICAgbGV0IGhhc2hFbCA9IHRoaXMuZ2V0SGFzaFRhcmdldEVsKHdpbmRvdy5sb2NhdGlvbi5oYXNoKVxuXG4gICAgICAgIGlmKGhhc2hFbCl7XG4gICAgICAgICAgaGFzaEVsLnNjcm9sbEludG9WaWV3KClcbiAgICAgICAgfSBlbHNlIGlmKG1ldGEudHlwZSA9PT0gXCJyZWRpcmVjdFwiKXtcbiAgICAgICAgICB3aW5kb3cuc2Nyb2xsKDAsIDApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZWRpcmVjdCh0bylcbiAgICB9XG4gIH0sXG5cbiAgc2V0Q29va2llKG5hbWUsIHZhbHVlKXtcbiAgICBkb2N1bWVudC5jb29raWUgPSBgJHtuYW1lfT0ke3ZhbHVlfWBcbiAgfSxcblxuICBnZXRDb29raWUobmFtZSl7XG4gICAgcmV0dXJuIGRvY3VtZW50LmNvb2tpZS5yZXBsYWNlKG5ldyBSZWdFeHAoYCg/Oig/Ol58Lio7XFxzKikke25hbWV9XFxzKlxcPVxccyooW147XSopLiokKXxeLiokYCksIFwiJDFcIilcbiAgfSxcblxuICByZWRpcmVjdCh0b1VSTCwgZmxhc2gpe1xuICAgIGlmKGZsYXNoKXsgQnJvd3Nlci5zZXRDb29raWUoXCJfX3Bob2VuaXhfZmxhc2hfX1wiLCBmbGFzaCArIFwiOyBtYXgtYWdlPTYwMDAwOyBwYXRoPS9cIikgfVxuICAgIHdpbmRvdy5sb2NhdGlvbiA9IHRvVVJMXG4gIH0sXG5cbiAgbG9jYWxLZXkobmFtZXNwYWNlLCBzdWJrZXkpeyByZXR1cm4gYCR7bmFtZXNwYWNlfS0ke3N1YmtleX1gIH0sXG5cbiAgZ2V0SGFzaFRhcmdldEVsKG1heWJlSGFzaCl7XG4gICAgbGV0IGhhc2ggPSBtYXliZUhhc2gudG9TdHJpbmcoKS5zdWJzdHJpbmcoMSlcbiAgICBpZihoYXNoID09PSBcIlwiKXsgcmV0dXJuIH1cbiAgICByZXR1cm4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaGFzaCkgfHwgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgYVtuYW1lPVwiJHtoYXNofVwiXWApXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQnJvd3NlclxuIiwgImltcG9ydCB7XG4gIENIRUNLQUJMRV9JTlBVVFMsXG4gIERFQk9VTkNFX1BSRVZfS0VZLFxuICBERUJPVU5DRV9UUklHR0VSLFxuICBGT0NVU0FCTEVfSU5QVVRTLFxuICBQSFhfQ09NUE9ORU5ULFxuICBQSFhfRVZFTlRfQ0xBU1NFUyxcbiAgUEhYX0hBU19GT0NVU0VELFxuICBQSFhfSEFTX1NVQk1JVFRFRCxcbiAgUEhYX01BSU4sXG4gIFBIWF9OT19GRUVEQkFDS19DTEFTUyxcbiAgUEhYX1BBUkVOVF9JRCxcbiAgUEhYX1BSSVZBVEUsXG4gIFBIWF9SRUYsXG4gIFBIWF9TRVNTSU9OLFxuICBQSFhfU1RBVElDLFxuICBQSFhfVVBMT0FEX1JFRixcbiAgUEhYX1ZJRVdfU0VMRUNUT1IsXG4gIFRIUk9UVExFRFxufSBmcm9tIFwiLi9jb25zdGFudHNcIlxuXG5pbXBvcnQge1xuICBjbG9uZSxcbiAgbG9nRXJyb3Jcbn0gZnJvbSBcIi4vdXRpbHNcIlxuXG5sZXQgRE9NID0ge1xuICBieUlkKGlkKXsgcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKSB8fCBsb2dFcnJvcihgbm8gaWQgZm91bmQgZm9yICR7aWR9YCkgfSxcblxuICByZW1vdmVDbGFzcyhlbCwgY2xhc3NOYW1lKXtcbiAgICBlbC5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzTmFtZSlcbiAgICBpZihlbC5jbGFzc0xpc3QubGVuZ3RoID09PSAwKXsgZWwucmVtb3ZlQXR0cmlidXRlKFwiY2xhc3NcIikgfVxuICB9LFxuXG4gIGFsbChub2RlLCBxdWVyeSwgY2FsbGJhY2spe1xuICAgIGlmKCFub2RlKXsgcmV0dXJuIFtdIH1cbiAgICBsZXQgYXJyYXkgPSBBcnJheS5mcm9tKG5vZGUucXVlcnlTZWxlY3RvckFsbChxdWVyeSkpXG4gICAgcmV0dXJuIGNhbGxiYWNrID8gYXJyYXkuZm9yRWFjaChjYWxsYmFjaykgOiBhcnJheVxuICB9LFxuXG4gIGNoaWxkTm9kZUxlbmd0aChodG1sKXtcbiAgICBsZXQgdGVtcGxhdGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidGVtcGxhdGVcIilcbiAgICB0ZW1wbGF0ZS5pbm5lckhUTUwgPSBodG1sXG4gICAgcmV0dXJuIHRlbXBsYXRlLmNvbnRlbnQuY2hpbGRFbGVtZW50Q291bnRcbiAgfSxcblxuICBpc1VwbG9hZElucHV0KGVsKXsgcmV0dXJuIGVsLnR5cGUgPT09IFwiZmlsZVwiICYmIGVsLmdldEF0dHJpYnV0ZShQSFhfVVBMT0FEX1JFRikgIT09IG51bGwgfSxcblxuICBmaW5kVXBsb2FkSW5wdXRzKG5vZGUpeyByZXR1cm4gdGhpcy5hbGwobm9kZSwgYGlucHV0W3R5cGU9XCJmaWxlXCJdWyR7UEhYX1VQTE9BRF9SRUZ9XWApIH0sXG5cbiAgZmluZENvbXBvbmVudE5vZGVMaXN0KG5vZGUsIGNpZCl7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyV2l0aGluU2FtZUxpdmVWaWV3KHRoaXMuYWxsKG5vZGUsIGBbJHtQSFhfQ09NUE9ORU5UfT1cIiR7Y2lkfVwiXWApLCBub2RlKVxuICB9LFxuXG4gIGlzUGh4RGVzdHJveWVkKG5vZGUpe1xuICAgIHJldHVybiBub2RlLmlkICYmIERPTS5wcml2YXRlKG5vZGUsIFwiZGVzdHJveWVkXCIpID8gdHJ1ZSA6IGZhbHNlXG4gIH0sXG5cbiAgbWFya1BoeENoaWxkRGVzdHJveWVkKGVsKXtcbiAgICBlbC5zZXRBdHRyaWJ1dGUoUEhYX1NFU1NJT04sIFwiXCIpXG4gICAgdGhpcy5wdXRQcml2YXRlKGVsLCBcImRlc3Ryb3llZFwiLCB0cnVlKVxuICB9LFxuXG4gIGZpbmRQaHhDaGlsZHJlbkluRnJhZ21lbnQoaHRtbCwgcGFyZW50SWQpe1xuICAgIGxldCB0ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKVxuICAgIHRlbXBsYXRlLmlubmVySFRNTCA9IGh0bWxcbiAgICByZXR1cm4gdGhpcy5maW5kUGh4Q2hpbGRyZW4odGVtcGxhdGUuY29udGVudCwgcGFyZW50SWQpXG4gIH0sXG5cbiAgaXNJZ25vcmVkKGVsLCBwaHhVcGRhdGUpe1xuICAgIHJldHVybiAoZWwuZ2V0QXR0cmlidXRlKHBoeFVwZGF0ZSkgfHwgZWwuZ2V0QXR0cmlidXRlKFwiZGF0YS1waHgtdXBkYXRlXCIpKSA9PT0gXCJpZ25vcmVcIlxuICB9LFxuXG4gIGlzUGh4VXBkYXRlKGVsLCBwaHhVcGRhdGUsIHVwZGF0ZVR5cGVzKXtcbiAgICByZXR1cm4gZWwuZ2V0QXR0cmlidXRlICYmIHVwZGF0ZVR5cGVzLmluZGV4T2YoZWwuZ2V0QXR0cmlidXRlKHBoeFVwZGF0ZSkpID49IDBcbiAgfSxcblxuICBmaW5kUGh4Q2hpbGRyZW4oZWwsIHBhcmVudElkKXtcbiAgICByZXR1cm4gdGhpcy5hbGwoZWwsIGAke1BIWF9WSUVXX1NFTEVDVE9SfVske1BIWF9QQVJFTlRfSUR9PVwiJHtwYXJlbnRJZH1cIl1gKVxuICB9LFxuXG4gIGZpbmRQYXJlbnRDSURzKG5vZGUsIGNpZHMpe1xuICAgIGxldCBpbml0aWFsID0gbmV3IFNldChjaWRzKVxuICAgIHJldHVybiBjaWRzLnJlZHVjZSgoYWNjLCBjaWQpID0+IHtcbiAgICAgIGxldCBzZWxlY3RvciA9IGBbJHtQSFhfQ09NUE9ORU5UfT1cIiR7Y2lkfVwiXSBbJHtQSFhfQ09NUE9ORU5UfV1gXG5cbiAgICAgIHRoaXMuZmlsdGVyV2l0aGluU2FtZUxpdmVWaWV3KHRoaXMuYWxsKG5vZGUsIHNlbGVjdG9yKSwgbm9kZSlcbiAgICAgICAgLm1hcChlbCA9PiBwYXJzZUludChlbC5nZXRBdHRyaWJ1dGUoUEhYX0NPTVBPTkVOVCkpKVxuICAgICAgICAuZm9yRWFjaChjaGlsZENJRCA9PiBhY2MuZGVsZXRlKGNoaWxkQ0lEKSlcblxuICAgICAgcmV0dXJuIGFjY1xuICAgIH0sIGluaXRpYWwpXG4gIH0sXG5cbiAgZmlsdGVyV2l0aGluU2FtZUxpdmVWaWV3KG5vZGVzLCBwYXJlbnQpe1xuICAgIGlmKHBhcmVudC5xdWVyeVNlbGVjdG9yKFBIWF9WSUVXX1NFTEVDVE9SKSl7XG4gICAgICByZXR1cm4gbm9kZXMuZmlsdGVyKGVsID0+IHRoaXMud2l0aGluU2FtZUxpdmVWaWV3KGVsLCBwYXJlbnQpKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbm9kZXNcbiAgICB9XG4gIH0sXG5cbiAgd2l0aGluU2FtZUxpdmVWaWV3KG5vZGUsIHBhcmVudCl7XG4gICAgd2hpbGUobm9kZSA9IG5vZGUucGFyZW50Tm9kZSl7XG4gICAgICBpZihub2RlLmlzU2FtZU5vZGUocGFyZW50KSl7IHJldHVybiB0cnVlIH1cbiAgICAgIGlmKG5vZGUuZ2V0QXR0cmlidXRlKFBIWF9TRVNTSU9OKSAhPT0gbnVsbCl7IHJldHVybiBmYWxzZSB9XG4gICAgfVxuICB9LFxuXG4gIHByaXZhdGUoZWwsIGtleSl7IHJldHVybiBlbFtQSFhfUFJJVkFURV0gJiYgZWxbUEhYX1BSSVZBVEVdW2tleV0gfSxcblxuICBkZWxldGVQcml2YXRlKGVsLCBrZXkpeyBlbFtQSFhfUFJJVkFURV0gJiYgZGVsZXRlIChlbFtQSFhfUFJJVkFURV1ba2V5XSkgfSxcblxuICBwdXRQcml2YXRlKGVsLCBrZXksIHZhbHVlKXtcbiAgICBpZighZWxbUEhYX1BSSVZBVEVdKXsgZWxbUEhYX1BSSVZBVEVdID0ge30gfVxuICAgIGVsW1BIWF9QUklWQVRFXVtrZXldID0gdmFsdWVcbiAgfSxcblxuICBjb3B5UHJpdmF0ZXModGFyZ2V0LCBzb3VyY2Upe1xuICAgIGlmKHNvdXJjZVtQSFhfUFJJVkFURV0pe1xuICAgICAgdGFyZ2V0W1BIWF9QUklWQVRFXSA9IGNsb25lKHNvdXJjZVtQSFhfUFJJVkFURV0pXG4gICAgfVxuICB9LFxuXG4gIHB1dFRpdGxlKHN0cil7XG4gICAgbGV0IHRpdGxlRWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwidGl0bGVcIilcbiAgICBsZXQge3ByZWZpeCwgc3VmZml4fSA9IHRpdGxlRWwuZGF0YXNldFxuICAgIGRvY3VtZW50LnRpdGxlID0gYCR7cHJlZml4IHx8IFwiXCJ9JHtzdHJ9JHtzdWZmaXggfHwgXCJcIn1gXG4gIH0sXG5cbiAgZGVib3VuY2UoZWwsIGV2ZW50LCBwaHhEZWJvdW5jZSwgZGVmYXVsdERlYm91bmNlLCBwaHhUaHJvdHRsZSwgZGVmYXVsdFRocm90dGxlLCBjYWxsYmFjayl7XG4gICAgbGV0IGRlYm91bmNlID0gZWwuZ2V0QXR0cmlidXRlKHBoeERlYm91bmNlKVxuICAgIGxldCB0aHJvdHRsZSA9IGVsLmdldEF0dHJpYnV0ZShwaHhUaHJvdHRsZSlcbiAgICBpZihkZWJvdW5jZSA9PT0gXCJcIil7IGRlYm91bmNlID0gZGVmYXVsdERlYm91bmNlIH1cbiAgICBpZih0aHJvdHRsZSA9PT0gXCJcIil7IHRocm90dGxlID0gZGVmYXVsdFRocm90dGxlIH1cbiAgICBsZXQgdmFsdWUgPSBkZWJvdW5jZSB8fCB0aHJvdHRsZVxuICAgIHN3aXRjaCh2YWx1ZSl7XG4gICAgICBjYXNlIG51bGw6IHJldHVybiBjYWxsYmFjaygpXG5cbiAgICAgIGNhc2UgXCJibHVyXCI6XG4gICAgICAgIGlmKHRoaXMub25jZShlbCwgXCJkZWJvdW5jZS1ibHVyXCIpKXtcbiAgICAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKFwiYmx1clwiLCAoKSA9PiBjYWxsYmFjaygpKVxuICAgICAgICB9XG4gICAgICAgIHJldHVyblxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBsZXQgdGltZW91dCA9IHBhcnNlSW50KHZhbHVlKVxuICAgICAgICBsZXQgdHJpZ2dlciA9ICgpID0+IHRocm90dGxlID8gdGhpcy5kZWxldGVQcml2YXRlKGVsLCBUSFJPVFRMRUQpIDogY2FsbGJhY2soKVxuICAgICAgICBsZXQgY3VycmVudEN5Y2xlID0gdGhpcy5pbmNDeWNsZShlbCwgREVCT1VOQ0VfVFJJR0dFUiwgdHJpZ2dlcilcbiAgICAgICAgaWYoaXNOYU4odGltZW91dCkpeyByZXR1cm4gbG9nRXJyb3IoYGludmFsaWQgdGhyb3R0bGUvZGVib3VuY2UgdmFsdWU6ICR7dmFsdWV9YCkgfVxuICAgICAgICBpZih0aHJvdHRsZSl7XG4gICAgICAgICAgbGV0IG5ld0tleURvd24gPSBmYWxzZVxuICAgICAgICAgIGlmKGV2ZW50LnR5cGUgPT09IFwia2V5ZG93blwiKXtcbiAgICAgICAgICAgIGxldCBwcmV2S2V5ID0gdGhpcy5wcml2YXRlKGVsLCBERUJPVU5DRV9QUkVWX0tFWSlcbiAgICAgICAgICAgIHRoaXMucHV0UHJpdmF0ZShlbCwgREVCT1VOQ0VfUFJFVl9LRVksIGV2ZW50LmtleSlcbiAgICAgICAgICAgIG5ld0tleURvd24gPSBwcmV2S2V5ICE9PSBldmVudC5rZXlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZighbmV3S2V5RG93biAmJiB0aGlzLnByaXZhdGUoZWwsIFRIUk9UVExFRCkpe1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKClcbiAgICAgICAgICAgIHRoaXMucHV0UHJpdmF0ZShlbCwgVEhST1RUTEVELCB0cnVlKVxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnRyaWdnZXJDeWNsZShlbCwgREVCT1VOQ0VfVFJJR0dFUiksIHRpbWVvdXQpXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy50cmlnZ2VyQ3ljbGUoZWwsIERFQk9VTkNFX1RSSUdHRVIsIGN1cnJlbnRDeWNsZSksIHRpbWVvdXQpXG4gICAgICAgIH1cblxuXG4gICAgICAgIGxldCBmb3JtID0gZWwuZm9ybVxuICAgICAgICBpZihmb3JtICYmIHRoaXMub25jZShmb3JtLCBcImJpbmQtZGVib3VuY2VcIikpe1xuICAgICAgICAgIGZvcm0uYWRkRXZlbnRMaXN0ZW5lcihcInN1Ym1pdFwiLCAoKSA9PiB7XG4gICAgICAgICAgICBBcnJheS5mcm9tKChuZXcgRm9ybURhdGEoZm9ybSkpLmVudHJpZXMoKSwgKFtuYW1lXSkgPT4ge1xuICAgICAgICAgICAgICBsZXQgaW5wdXQgPSBmb3JtLnF1ZXJ5U2VsZWN0b3IoYFtuYW1lPVwiJHtuYW1lfVwiXWApXG4gICAgICAgICAgICAgIHRoaXMuaW5jQ3ljbGUoaW5wdXQsIERFQk9VTkNFX1RSSUdHRVIpXG4gICAgICAgICAgICAgIHRoaXMuZGVsZXRlUHJpdmF0ZShpbnB1dCwgVEhST1RUTEVEKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICAgIGlmKHRoaXMub25jZShlbCwgXCJiaW5kLWRlYm91bmNlXCIpKXtcbiAgICAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKFwiYmx1clwiLCAoKSA9PiB0aGlzLnRyaWdnZXJDeWNsZShlbCwgREVCT1VOQ0VfVFJJR0dFUikpXG4gICAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgdHJpZ2dlckN5Y2xlKGVsLCBrZXksIGN1cnJlbnRDeWNsZSl7XG4gICAgbGV0IFtjeWNsZSwgdHJpZ2dlcl0gPSB0aGlzLnByaXZhdGUoZWwsIGtleSlcbiAgICBpZighY3VycmVudEN5Y2xlKXsgY3VycmVudEN5Y2xlID0gY3ljbGUgfVxuICAgIGlmKGN1cnJlbnRDeWNsZSA9PT0gY3ljbGUpe1xuICAgICAgdGhpcy5pbmNDeWNsZShlbCwga2V5KVxuICAgICAgdHJpZ2dlcigpXG4gICAgfVxuICB9LFxuXG4gIG9uY2UoZWwsIGtleSl7XG4gICAgaWYodGhpcy5wcml2YXRlKGVsLCBrZXkpID09PSB0cnVlKXsgcmV0dXJuIGZhbHNlIH1cbiAgICB0aGlzLnB1dFByaXZhdGUoZWwsIGtleSwgdHJ1ZSlcbiAgICByZXR1cm4gdHJ1ZVxuICB9LFxuXG4gIGluY0N5Y2xlKGVsLCBrZXksIHRyaWdnZXIgPSBmdW5jdGlvbiAoKXsgfSl7XG4gICAgbGV0IFtjdXJyZW50Q3ljbGVdID0gdGhpcy5wcml2YXRlKGVsLCBrZXkpIHx8IFswLCB0cmlnZ2VyXVxuICAgIGN1cnJlbnRDeWNsZSsrXG4gICAgdGhpcy5wdXRQcml2YXRlKGVsLCBrZXksIFtjdXJyZW50Q3ljbGUsIHRyaWdnZXJdKVxuICAgIHJldHVybiBjdXJyZW50Q3ljbGVcbiAgfSxcblxuICBkaXNjYXJkRXJyb3IoY29udGFpbmVyLCBlbCwgcGh4RmVlZGJhY2tGb3Ipe1xuICAgIGxldCBmaWVsZCA9IGVsLmdldEF0dHJpYnV0ZSAmJiBlbC5nZXRBdHRyaWJ1dGUocGh4RmVlZGJhY2tGb3IpXG4gICAgLy8gVE9ETzogUmVtb3ZlIGlkIGxvb2t1cCBhZnRlciB3ZSB1cGRhdGUgUGhvZW5peCB0byB1c2UgaW5wdXRfbmFtZSBpbnN0ZWFkIG9mIGlucHV0X2lkXG4gICAgbGV0IGlucHV0ID0gZmllbGQgJiYgY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoYFtpZD1cIiR7ZmllbGR9XCJdLCBbbmFtZT1cIiR7ZmllbGR9XCJdYClcbiAgICBpZighaW5wdXQpeyByZXR1cm4gfVxuXG4gICAgaWYoISh0aGlzLnByaXZhdGUoaW5wdXQsIFBIWF9IQVNfRk9DVVNFRCkgfHwgdGhpcy5wcml2YXRlKGlucHV0LmZvcm0sIFBIWF9IQVNfU1VCTUlUVEVEKSkpe1xuICAgICAgZWwuY2xhc3NMaXN0LmFkZChQSFhfTk9fRkVFREJBQ0tfQ0xBU1MpXG4gICAgfVxuICB9LFxuXG4gIHNob3dFcnJvcihpbnB1dEVsLCBwaHhGZWVkYmFja0Zvcil7XG4gICAgaWYoaW5wdXRFbC5pZCB8fCBpbnB1dEVsLm5hbWUpe1xuICAgICAgdGhpcy5hbGwoaW5wdXRFbC5mb3JtLCBgWyR7cGh4RmVlZGJhY2tGb3J9PVwiJHtpbnB1dEVsLmlkfVwiXSwgWyR7cGh4RmVlZGJhY2tGb3J9PVwiJHtpbnB1dEVsLm5hbWV9XCJdYCwgKGVsKSA9PiB7XG4gICAgICAgIHRoaXMucmVtb3ZlQ2xhc3MoZWwsIFBIWF9OT19GRUVEQkFDS19DTEFTUylcbiAgICAgIH0pXG4gICAgfVxuICB9LFxuXG4gIGlzUGh4Q2hpbGQobm9kZSl7XG4gICAgcmV0dXJuIG5vZGUuZ2V0QXR0cmlidXRlICYmIG5vZGUuZ2V0QXR0cmlidXRlKFBIWF9QQVJFTlRfSUQpXG4gIH0sXG5cbiAgZGlzcGF0Y2hFdmVudCh0YXJnZXQsIGV2ZW50U3RyaW5nLCBkZXRhaWwgPSB7fSl7XG4gICAgbGV0IGV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KGV2ZW50U3RyaW5nLCB7YnViYmxlczogdHJ1ZSwgY2FuY2VsYWJsZTogdHJ1ZSwgZGV0YWlsOiBkZXRhaWx9KVxuICAgIHRhcmdldC5kaXNwYXRjaEV2ZW50KGV2ZW50KVxuICB9LFxuXG4gIGNsb25lTm9kZShub2RlLCBodG1sKXtcbiAgICBpZih0eXBlb2YgKGh0bWwpID09PSBcInVuZGVmaW5lZFwiKXtcbiAgICAgIHJldHVybiBub2RlLmNsb25lTm9kZSh0cnVlKVxuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgY2xvbmVkID0gbm9kZS5jbG9uZU5vZGUoZmFsc2UpXG4gICAgICBjbG9uZWQuaW5uZXJIVE1MID0gaHRtbFxuICAgICAgcmV0dXJuIGNsb25lZFxuICAgIH1cbiAgfSxcblxuICBtZXJnZUF0dHJzKHRhcmdldCwgc291cmNlLCBvcHRzID0ge30pe1xuICAgIGxldCBleGNsdWRlID0gb3B0cy5leGNsdWRlIHx8IFtdXG4gICAgbGV0IGlzSWdub3JlZCA9IG9wdHMuaXNJZ25vcmVkXG4gICAgbGV0IHNvdXJjZUF0dHJzID0gc291cmNlLmF0dHJpYnV0ZXNcbiAgICBmb3IobGV0IGkgPSBzb3VyY2VBdHRycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSl7XG4gICAgICBsZXQgbmFtZSA9IHNvdXJjZUF0dHJzW2ldLm5hbWVcbiAgICAgIGlmKGV4Y2x1ZGUuaW5kZXhPZihuYW1lKSA8IDApeyB0YXJnZXQuc2V0QXR0cmlidXRlKG5hbWUsIHNvdXJjZS5nZXRBdHRyaWJ1dGUobmFtZSkpIH1cbiAgICB9XG5cbiAgICBsZXQgdGFyZ2V0QXR0cnMgPSB0YXJnZXQuYXR0cmlidXRlc1xuICAgIGZvcihsZXQgaSA9IHRhcmdldEF0dHJzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKXtcbiAgICAgIGxldCBuYW1lID0gdGFyZ2V0QXR0cnNbaV0ubmFtZVxuICAgICAgaWYoaXNJZ25vcmVkKXtcbiAgICAgICAgaWYobmFtZS5zdGFydHNXaXRoKFwiZGF0YS1cIikgJiYgIXNvdXJjZS5oYXNBdHRyaWJ1dGUobmFtZSkpeyB0YXJnZXQucmVtb3ZlQXR0cmlidXRlKG5hbWUpIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmKCFzb3VyY2UuaGFzQXR0cmlidXRlKG5hbWUpKXsgdGFyZ2V0LnJlbW92ZUF0dHJpYnV0ZShuYW1lKSB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1lcmdlRm9jdXNlZElucHV0KHRhcmdldCwgc291cmNlKXtcbiAgICAvLyBza2lwIHNlbGVjdHMgYmVjYXVzZSBGRiB3aWxsIHJlc2V0IGhpZ2hsaWdodGVkIGluZGV4IGZvciBhbnkgc2V0QXR0cmlidXRlXG4gICAgaWYoISh0YXJnZXQgaW5zdGFuY2VvZiBIVE1MU2VsZWN0RWxlbWVudCkpeyBET00ubWVyZ2VBdHRycyh0YXJnZXQsIHNvdXJjZSwge2V4Y2VwdDogW1widmFsdWVcIl19KSB9XG4gICAgaWYoc291cmNlLnJlYWRPbmx5KXtcbiAgICAgIHRhcmdldC5zZXRBdHRyaWJ1dGUoXCJyZWFkb25seVwiLCB0cnVlKVxuICAgIH0gZWxzZSB7XG4gICAgICB0YXJnZXQucmVtb3ZlQXR0cmlidXRlKFwicmVhZG9ubHlcIilcbiAgICB9XG4gIH0sXG5cbiAgaGFzU2VsZWN0aW9uUmFuZ2UoZWwpe1xuICAgIHJldHVybiBlbC5zZXRTZWxlY3Rpb25SYW5nZSAmJiAoZWwudHlwZSA9PT0gXCJ0ZXh0XCIgfHwgZWwudHlwZSA9PT0gXCJ0ZXh0YXJlYVwiKVxuICB9LFxuXG4gIHJlc3RvcmVGb2N1cyhmb2N1c2VkLCBzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kKXtcbiAgICBpZighRE9NLmlzVGV4dHVhbElucHV0KGZvY3VzZWQpKXsgcmV0dXJuIH1cbiAgICBsZXQgd2FzRm9jdXNlZCA9IGZvY3VzZWQubWF0Y2hlcyhcIjpmb2N1c1wiKVxuICAgIGlmKGZvY3VzZWQucmVhZE9ubHkpeyBmb2N1c2VkLmJsdXIoKSB9XG4gICAgaWYoIXdhc0ZvY3VzZWQpeyBmb2N1c2VkLmZvY3VzKCkgfVxuICAgIGlmKHRoaXMuaGFzU2VsZWN0aW9uUmFuZ2UoZm9jdXNlZCkpe1xuICAgICAgZm9jdXNlZC5zZXRTZWxlY3Rpb25SYW5nZShzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kKVxuICAgIH1cbiAgfSxcblxuICBpc0Zvcm1JbnB1dChlbCl7IHJldHVybiAvXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYSkkL2kudGVzdChlbC50YWdOYW1lKSAmJiBlbC50eXBlICE9PSBcImJ1dHRvblwiIH0sXG5cbiAgc3luY0F0dHJzVG9Qcm9wcyhlbCl7XG4gICAgaWYoZWwgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50ICYmIENIRUNLQUJMRV9JTlBVVFMuaW5kZXhPZihlbC50eXBlLnRvTG9jYWxlTG93ZXJDYXNlKCkpID49IDApe1xuICAgICAgZWwuY2hlY2tlZCA9IGVsLmdldEF0dHJpYnV0ZShcImNoZWNrZWRcIikgIT09IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgc3luY1Byb3BzVG9BdHRycyhlbCl7XG4gICAgaWYoZWwgaW5zdGFuY2VvZiBIVE1MU2VsZWN0RWxlbWVudCl7XG4gICAgICBsZXQgc2VsZWN0ZWRJdGVtID0gZWwub3B0aW9ucy5pdGVtKGVsLnNlbGVjdGVkSW5kZXgpXG4gICAgICBpZihzZWxlY3RlZEl0ZW0gJiYgc2VsZWN0ZWRJdGVtLmdldEF0dHJpYnV0ZShcInNlbGVjdGVkXCIpID09PSBudWxsKXtcbiAgICAgICAgc2VsZWN0ZWRJdGVtLnNldEF0dHJpYnV0ZShcInNlbGVjdGVkXCIsIFwiXCIpXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGlzVGV4dHVhbElucHV0KGVsKXsgcmV0dXJuIEZPQ1VTQUJMRV9JTlBVVFMuaW5kZXhPZihlbC50eXBlKSA+PSAwIH0sXG5cbiAgaXNOb3dUcmlnZ2VyRm9ybUV4dGVybmFsKGVsLCBwaHhUcmlnZ2VyRXh0ZXJuYWwpe1xuICAgIHJldHVybiBlbC5nZXRBdHRyaWJ1dGUgJiYgZWwuZ2V0QXR0cmlidXRlKHBoeFRyaWdnZXJFeHRlcm5hbCkgIT09IG51bGxcbiAgfSxcblxuICBzeW5jUGVuZGluZ1JlZihmcm9tRWwsIHRvRWwsIGRpc2FibGVXaXRoKXtcbiAgICBsZXQgcmVmID0gZnJvbUVsLmdldEF0dHJpYnV0ZShQSFhfUkVGKVxuICAgIGlmKHJlZiA9PT0gbnVsbCl7IHJldHVybiB0cnVlIH1cblxuICAgIGlmKERPTS5pc0Zvcm1JbnB1dChmcm9tRWwpIHx8IGZyb21FbC5nZXRBdHRyaWJ1dGUoZGlzYWJsZVdpdGgpICE9PSBudWxsKXtcbiAgICAgIGlmKERPTS5pc1VwbG9hZElucHV0KGZyb21FbCkpeyBET00ubWVyZ2VBdHRycyhmcm9tRWwsIHRvRWwsIHtpc0lnbm9yZWQ6IHRydWV9KSB9XG4gICAgICBET00ucHV0UHJpdmF0ZShmcm9tRWwsIFBIWF9SRUYsIHRvRWwpXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9IGVsc2Uge1xuICAgICAgUEhYX0VWRU5UX0NMQVNTRVMuZm9yRWFjaChjbGFzc05hbWUgPT4ge1xuICAgICAgICBmcm9tRWwuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZSkgJiYgdG9FbC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSlcbiAgICAgIH0pXG4gICAgICB0b0VsLnNldEF0dHJpYnV0ZShQSFhfUkVGLCByZWYpXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfSxcblxuICBjbGVhbkNoaWxkTm9kZXMoY29udGFpbmVyLCBwaHhVcGRhdGUpe1xuICAgIGlmKERPTS5pc1BoeFVwZGF0ZShjb250YWluZXIsIHBoeFVwZGF0ZSwgW1wiYXBwZW5kXCIsIFwicHJlcGVuZFwiXSkpe1xuICAgICAgbGV0IHRvUmVtb3ZlID0gW11cbiAgICAgIGNvbnRhaW5lci5jaGlsZE5vZGVzLmZvckVhY2goY2hpbGROb2RlID0+IHtcbiAgICAgICAgaWYoIWNoaWxkTm9kZS5pZCl7XG4gICAgICAgICAgLy8gU2tpcCB3YXJuaW5nIGlmIGl0J3MgYW4gZW1wdHkgdGV4dCBub2RlIChlLmcuIGEgbmV3LWxpbmUpXG4gICAgICAgICAgbGV0IGlzRW1wdHlUZXh0Tm9kZSA9IGNoaWxkTm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUgJiYgY2hpbGROb2RlLm5vZGVWYWx1ZS50cmltKCkgPT09IFwiXCJcbiAgICAgICAgICBpZighaXNFbXB0eVRleHROb2RlKXtcbiAgICAgICAgICAgIGxvZ0Vycm9yKFwib25seSBIVE1MIGVsZW1lbnQgdGFncyB3aXRoIGFuIGlkIGFyZSBhbGxvd2VkIGluc2lkZSBjb250YWluZXJzIHdpdGggcGh4LXVwZGF0ZS5cXG5cXG5cIiArXG4gICAgICAgICAgICAgIGByZW1vdmluZyBpbGxlZ2FsIG5vZGU6IFwiJHsoY2hpbGROb2RlLm91dGVySFRNTCB8fCBjaGlsZE5vZGUubm9kZVZhbHVlKS50cmltKCl9XCJcXG5cXG5gKVxuICAgICAgICAgIH1cbiAgICAgICAgICB0b1JlbW92ZS5wdXNoKGNoaWxkTm9kZSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIHRvUmVtb3ZlLmZvckVhY2goY2hpbGROb2RlID0+IGNoaWxkTm9kZS5yZW1vdmUoKSlcbiAgICB9XG4gIH0sXG5cbiAgcmVwbGFjZVJvb3RDb250YWluZXIoY29udGFpbmVyLCB0YWdOYW1lLCBhdHRycyl7XG4gICAgbGV0IHJldGFpbmVkQXR0cnMgPSBuZXcgU2V0KFtcImlkXCIsIFBIWF9TRVNTSU9OLCBQSFhfU1RBVElDLCBQSFhfTUFJTl0pXG4gICAgaWYoY29udGFpbmVyLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gdGFnTmFtZS50b0xvd2VyQ2FzZSgpKXtcbiAgICAgIEFycmF5LmZyb20oY29udGFpbmVyLmF0dHJpYnV0ZXMpXG4gICAgICAgIC5maWx0ZXIoYXR0ciA9PiAhcmV0YWluZWRBdHRycy5oYXMoYXR0ci5uYW1lLnRvTG93ZXJDYXNlKCkpKVxuICAgICAgICAuZm9yRWFjaChhdHRyID0+IGNvbnRhaW5lci5yZW1vdmVBdHRyaWJ1dGUoYXR0ci5uYW1lKSlcblxuICAgICAgT2JqZWN0LmtleXMoYXR0cnMpXG4gICAgICAgIC5maWx0ZXIobmFtZSA9PiAhcmV0YWluZWRBdHRycy5oYXMobmFtZS50b0xvd2VyQ2FzZSgpKSlcbiAgICAgICAgLmZvckVhY2goYXR0ciA9PiBjb250YWluZXIuc2V0QXR0cmlidXRlKGF0dHIsIGF0dHJzW2F0dHJdKSlcblxuICAgICAgcmV0dXJuIGNvbnRhaW5lclxuXG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBuZXdDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpXG4gICAgICBPYmplY3Qua2V5cyhhdHRycykuZm9yRWFjaChhdHRyID0+IG5ld0NvbnRhaW5lci5zZXRBdHRyaWJ1dGUoYXR0ciwgYXR0cnNbYXR0cl0pKVxuICAgICAgcmV0YWluZWRBdHRycy5mb3JFYWNoKGF0dHIgPT4gbmV3Q29udGFpbmVyLnNldEF0dHJpYnV0ZShhdHRyLCBjb250YWluZXIuZ2V0QXR0cmlidXRlKGF0dHIpKSlcbiAgICAgIG5ld0NvbnRhaW5lci5pbm5lckhUTUwgPSBjb250YWluZXIuaW5uZXJIVE1MXG4gICAgICBjb250YWluZXIucmVwbGFjZVdpdGgobmV3Q29udGFpbmVyKVxuICAgICAgcmV0dXJuIG5ld0NvbnRhaW5lclxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBET01cbiIsICJpbXBvcnQge1xuICBQSFhfQUNUSVZFX0VOVFJZX1JFRlMsXG4gIFBIWF9MSVZFX0ZJTEVfVVBEQVRFRCxcbiAgUEhYX1BSRUZMSUdIVEVEX1JFRlNcbn0gZnJvbSBcIi4vY29uc3RhbnRzXCJcblxuaW1wb3J0IHtcbiAgY2hhbm5lbFVwbG9hZGVyLFxuICBsb2dFcnJvclxufSBmcm9tIFwiLi91dGlsc1wiXG5cbmltcG9ydCBMaXZlVXBsb2FkZXIgZnJvbSBcIi4vbGl2ZV91cGxvYWRlclwiXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFVwbG9hZEVudHJ5IHtcbiAgc3RhdGljIGlzQWN0aXZlKGZpbGVFbCwgZmlsZSl7XG4gICAgbGV0IGlzTmV3ID0gZmlsZS5fcGh4UmVmID09PSB1bmRlZmluZWRcbiAgICBsZXQgYWN0aXZlUmVmcyA9IGZpbGVFbC5nZXRBdHRyaWJ1dGUoUEhYX0FDVElWRV9FTlRSWV9SRUZTKS5zcGxpdChcIixcIilcbiAgICBsZXQgaXNBY3RpdmUgPSBhY3RpdmVSZWZzLmluZGV4T2YoTGl2ZVVwbG9hZGVyLmdlbkZpbGVSZWYoZmlsZSkpID49IDBcbiAgICByZXR1cm4gZmlsZS5zaXplID4gMCAmJiAoaXNOZXcgfHwgaXNBY3RpdmUpXG4gIH1cblxuICBzdGF0aWMgaXNQcmVmbGlnaHRlZChmaWxlRWwsIGZpbGUpe1xuICAgIGxldCBwcmVmbGlnaHRlZFJlZnMgPSBmaWxlRWwuZ2V0QXR0cmlidXRlKFBIWF9QUkVGTElHSFRFRF9SRUZTKS5zcGxpdChcIixcIilcbiAgICBsZXQgaXNQcmVmbGlnaHRlZCA9IHByZWZsaWdodGVkUmVmcy5pbmRleE9mKExpdmVVcGxvYWRlci5nZW5GaWxlUmVmKGZpbGUpKSA+PSAwXG4gICAgcmV0dXJuIGlzUHJlZmxpZ2h0ZWQgJiYgdGhpcy5pc0FjdGl2ZShmaWxlRWwsIGZpbGUpXG4gIH1cblxuICBjb25zdHJ1Y3RvcihmaWxlRWwsIGZpbGUsIHZpZXcpe1xuICAgIHRoaXMucmVmID0gTGl2ZVVwbG9hZGVyLmdlbkZpbGVSZWYoZmlsZSlcbiAgICB0aGlzLmZpbGVFbCA9IGZpbGVFbFxuICAgIHRoaXMuZmlsZSA9IGZpbGVcbiAgICB0aGlzLnZpZXcgPSB2aWV3XG4gICAgdGhpcy5tZXRhID0gbnVsbFxuICAgIHRoaXMuX2lzQ2FuY2VsbGVkID0gZmFsc2VcbiAgICB0aGlzLl9pc0RvbmUgPSBmYWxzZVxuICAgIHRoaXMuX3Byb2dyZXNzID0gMFxuICAgIHRoaXMuX2xhc3RQcm9ncmVzc1NlbnQgPSAtMVxuICAgIHRoaXMuX29uRG9uZSA9IGZ1bmN0aW9uICgpeyB9XG4gICAgdGhpcy5fb25FbFVwZGF0ZWQgPSB0aGlzLm9uRWxVcGRhdGVkLmJpbmQodGhpcylcbiAgICB0aGlzLmZpbGVFbC5hZGRFdmVudExpc3RlbmVyKFBIWF9MSVZFX0ZJTEVfVVBEQVRFRCwgdGhpcy5fb25FbFVwZGF0ZWQpXG4gIH1cblxuICBtZXRhZGF0YSgpeyByZXR1cm4gdGhpcy5tZXRhIH1cblxuICBwcm9ncmVzcyhwcm9ncmVzcyl7XG4gICAgdGhpcy5fcHJvZ3Jlc3MgPSBNYXRoLmZsb29yKHByb2dyZXNzKVxuICAgIGlmKHRoaXMuX3Byb2dyZXNzID4gdGhpcy5fbGFzdFByb2dyZXNzU2VudCl7XG4gICAgICBpZih0aGlzLl9wcm9ncmVzcyA+PSAxMDApe1xuICAgICAgICB0aGlzLl9wcm9ncmVzcyA9IDEwMFxuICAgICAgICB0aGlzLl9sYXN0UHJvZ3Jlc3NTZW50ID0gMTAwXG4gICAgICAgIHRoaXMuX2lzRG9uZSA9IHRydWVcbiAgICAgICAgdGhpcy52aWV3LnB1c2hGaWxlUHJvZ3Jlc3ModGhpcy5maWxlRWwsIHRoaXMucmVmLCAxMDAsICgpID0+IHtcbiAgICAgICAgICBMaXZlVXBsb2FkZXIudW50cmFja0ZpbGUodGhpcy5maWxlRWwsIHRoaXMuZmlsZSlcbiAgICAgICAgICB0aGlzLl9vbkRvbmUoKVxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fbGFzdFByb2dyZXNzU2VudCA9IHRoaXMuX3Byb2dyZXNzXG4gICAgICAgIHRoaXMudmlldy5wdXNoRmlsZVByb2dyZXNzKHRoaXMuZmlsZUVsLCB0aGlzLnJlZiwgdGhpcy5fcHJvZ3Jlc3MpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2FuY2VsKCl7XG4gICAgdGhpcy5faXNDYW5jZWxsZWQgPSB0cnVlXG4gICAgdGhpcy5faXNEb25lID0gdHJ1ZVxuICAgIHRoaXMuX29uRG9uZSgpXG4gIH1cblxuICBpc0RvbmUoKXsgcmV0dXJuIHRoaXMuX2lzRG9uZSB9XG5cbiAgZXJyb3IocmVhc29uID0gXCJmYWlsZWRcIil7XG4gICAgdGhpcy52aWV3LnB1c2hGaWxlUHJvZ3Jlc3ModGhpcy5maWxlRWwsIHRoaXMucmVmLCB7ZXJyb3I6IHJlYXNvbn0pXG4gICAgTGl2ZVVwbG9hZGVyLmNsZWFyRmlsZXModGhpcy5maWxlRWwpXG4gIH1cblxuICAvL3ByaXZhdGVcblxuICBvbkRvbmUoY2FsbGJhY2spe1xuICAgIHRoaXMuX29uRG9uZSA9ICgpID0+IHtcbiAgICAgIHRoaXMuZmlsZUVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoUEhYX0xJVkVfRklMRV9VUERBVEVELCB0aGlzLl9vbkVsVXBkYXRlZClcbiAgICAgIGNhbGxiYWNrKClcbiAgICB9XG4gIH1cblxuICBvbkVsVXBkYXRlZCgpe1xuICAgIGxldCBhY3RpdmVSZWZzID0gdGhpcy5maWxlRWwuZ2V0QXR0cmlidXRlKFBIWF9BQ1RJVkVfRU5UUllfUkVGUykuc3BsaXQoXCIsXCIpXG4gICAgaWYoYWN0aXZlUmVmcy5pbmRleE9mKHRoaXMucmVmKSA9PT0gLTEpeyB0aGlzLmNhbmNlbCgpIH1cbiAgfVxuXG4gIHRvUHJlZmxpZ2h0UGF5bG9hZCgpe1xuICAgIHJldHVybiB7XG4gICAgICBsYXN0X21vZGlmaWVkOiB0aGlzLmZpbGUubGFzdE1vZGlmaWVkLFxuICAgICAgbmFtZTogdGhpcy5maWxlLm5hbWUsXG4gICAgICBzaXplOiB0aGlzLmZpbGUuc2l6ZSxcbiAgICAgIHR5cGU6IHRoaXMuZmlsZS50eXBlLFxuICAgICAgcmVmOiB0aGlzLnJlZlxuICAgIH1cbiAgfVxuXG4gIHVwbG9hZGVyKHVwbG9hZGVycyl7XG4gICAgaWYodGhpcy5tZXRhLnVwbG9hZGVyKXtcbiAgICAgIGxldCBjYWxsYmFjayA9IHVwbG9hZGVyc1t0aGlzLm1ldGEudXBsb2FkZXJdIHx8IGxvZ0Vycm9yKGBubyB1cGxvYWRlciBjb25maWd1cmVkIGZvciAke3RoaXMubWV0YS51cGxvYWRlcn1gKVxuICAgICAgcmV0dXJuIHtuYW1lOiB0aGlzLm1ldGEudXBsb2FkZXIsIGNhbGxiYWNrOiBjYWxsYmFja31cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHtuYW1lOiBcImNoYW5uZWxcIiwgY2FsbGJhY2s6IGNoYW5uZWxVcGxvYWRlcn1cbiAgICB9XG4gIH1cblxuICB6aXBQb3N0RmxpZ2h0KHJlc3Ape1xuICAgIHRoaXMubWV0YSA9IHJlc3AuZW50cmllc1t0aGlzLnJlZl1cbiAgICBpZighdGhpcy5tZXRhKXsgbG9nRXJyb3IoYG5vIHByZWZsaWdodCB1cGxvYWQgcmVzcG9uc2UgcmV0dXJuZWQgd2l0aCByZWYgJHt0aGlzLnJlZn1gLCB7aW5wdXQ6IHRoaXMuZmlsZUVsLCByZXNwb25zZTogcmVzcH0pIH1cbiAgfVxufVxuIiwgImltcG9ydCB7XG4gIFBIWF9ET05FX1JFRlMsXG4gIFBIWF9QUkVGTElHSFRFRF9SRUZTLFxuICBQSFhfVVBMT0FEX1JFRlxufSBmcm9tIFwiLi9jb25zdGFudHNcIlxuXG5pbXBvcnQge1xufSBmcm9tIFwiLi91dGlsc1wiXG5cbmltcG9ydCBET00gZnJvbSBcIi4vZG9tXCJcbmltcG9ydCBVcGxvYWRFbnRyeSBmcm9tIFwiLi91cGxvYWRfZW50cnlcIlxuXG5sZXQgbGl2ZVVwbG9hZGVyRmlsZVJlZiA9IDBcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGl2ZVVwbG9hZGVyIHtcbiAgc3RhdGljIGdlbkZpbGVSZWYoZmlsZSl7XG4gICAgbGV0IHJlZiA9IGZpbGUuX3BoeFJlZlxuICAgIGlmKHJlZiAhPT0gdW5kZWZpbmVkKXtcbiAgICAgIHJldHVybiByZWZcbiAgICB9IGVsc2Uge1xuICAgICAgZmlsZS5fcGh4UmVmID0gKGxpdmVVcGxvYWRlckZpbGVSZWYrKykudG9TdHJpbmcoKVxuICAgICAgcmV0dXJuIGZpbGUuX3BoeFJlZlxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBnZXRFbnRyeURhdGFVUkwoaW5wdXRFbCwgcmVmLCBjYWxsYmFjayl7XG4gICAgbGV0IGZpbGUgPSB0aGlzLmFjdGl2ZUZpbGVzKGlucHV0RWwpLmZpbmQoZmlsZSA9PiB0aGlzLmdlbkZpbGVSZWYoZmlsZSkgPT09IHJlZilcbiAgICBjYWxsYmFjayhVUkwuY3JlYXRlT2JqZWN0VVJMKGZpbGUpKVxuICB9XG5cbiAgc3RhdGljIGhhc1VwbG9hZHNJblByb2dyZXNzKGZvcm1FbCl7XG4gICAgbGV0IGFjdGl2ZSA9IDBcbiAgICBET00uZmluZFVwbG9hZElucHV0cyhmb3JtRWwpLmZvckVhY2goaW5wdXQgPT4ge1xuICAgICAgaWYoaW5wdXQuZ2V0QXR0cmlidXRlKFBIWF9QUkVGTElHSFRFRF9SRUZTKSAhPT0gaW5wdXQuZ2V0QXR0cmlidXRlKFBIWF9ET05FX1JFRlMpKXtcbiAgICAgICAgYWN0aXZlKytcbiAgICAgIH1cbiAgICB9KVxuICAgIHJldHVybiBhY3RpdmUgPiAwXG4gIH1cblxuICBzdGF0aWMgc2VyaWFsaXplVXBsb2FkcyhpbnB1dEVsKXtcbiAgICBsZXQgZmlsZXMgPSB0aGlzLmFjdGl2ZUZpbGVzKGlucHV0RWwpXG4gICAgbGV0IGZpbGVEYXRhID0ge31cbiAgICBmaWxlcy5mb3JFYWNoKGZpbGUgPT4ge1xuICAgICAgbGV0IGVudHJ5ID0ge3BhdGg6IGlucHV0RWwubmFtZX1cbiAgICAgIGxldCB1cGxvYWRSZWYgPSBpbnB1dEVsLmdldEF0dHJpYnV0ZShQSFhfVVBMT0FEX1JFRilcbiAgICAgIGZpbGVEYXRhW3VwbG9hZFJlZl0gPSBmaWxlRGF0YVt1cGxvYWRSZWZdIHx8IFtdXG4gICAgICBlbnRyeS5yZWYgPSB0aGlzLmdlbkZpbGVSZWYoZmlsZSlcbiAgICAgIGVudHJ5Lm5hbWUgPSBmaWxlLm5hbWUgfHwgZW50cnkucmVmXG4gICAgICBlbnRyeS50eXBlID0gZmlsZS50eXBlXG4gICAgICBlbnRyeS5zaXplID0gZmlsZS5zaXplXG4gICAgICBmaWxlRGF0YVt1cGxvYWRSZWZdLnB1c2goZW50cnkpXG4gICAgfSlcbiAgICByZXR1cm4gZmlsZURhdGFcbiAgfVxuXG4gIHN0YXRpYyBjbGVhckZpbGVzKGlucHV0RWwpe1xuICAgIGlucHV0RWwudmFsdWUgPSBudWxsXG4gICAgaW5wdXRFbC5yZW1vdmVBdHRyaWJ1dGUoUEhYX1VQTE9BRF9SRUYpXG4gICAgRE9NLnB1dFByaXZhdGUoaW5wdXRFbCwgXCJmaWxlc1wiLCBbXSlcbiAgfVxuXG4gIHN0YXRpYyB1bnRyYWNrRmlsZShpbnB1dEVsLCBmaWxlKXtcbiAgICBET00ucHV0UHJpdmF0ZShpbnB1dEVsLCBcImZpbGVzXCIsIERPTS5wcml2YXRlKGlucHV0RWwsIFwiZmlsZXNcIikuZmlsdGVyKGYgPT4gIU9iamVjdC5pcyhmLCBmaWxlKSkpXG4gIH1cblxuICBzdGF0aWMgdHJhY2tGaWxlcyhpbnB1dEVsLCBmaWxlcyl7XG4gICAgaWYoaW5wdXRFbC5nZXRBdHRyaWJ1dGUoXCJtdWx0aXBsZVwiKSAhPT0gbnVsbCl7XG4gICAgICBsZXQgbmV3RmlsZXMgPSBmaWxlcy5maWx0ZXIoZmlsZSA9PiAhdGhpcy5hY3RpdmVGaWxlcyhpbnB1dEVsKS5maW5kKGYgPT4gT2JqZWN0LmlzKGYsIGZpbGUpKSlcbiAgICAgIERPTS5wdXRQcml2YXRlKGlucHV0RWwsIFwiZmlsZXNcIiwgdGhpcy5hY3RpdmVGaWxlcyhpbnB1dEVsKS5jb25jYXQobmV3RmlsZXMpKVxuICAgICAgaW5wdXRFbC52YWx1ZSA9IG51bGxcbiAgICB9IGVsc2Uge1xuICAgICAgRE9NLnB1dFByaXZhdGUoaW5wdXRFbCwgXCJmaWxlc1wiLCBmaWxlcylcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgYWN0aXZlRmlsZUlucHV0cyhmb3JtRWwpe1xuICAgIGxldCBmaWxlSW5wdXRzID0gRE9NLmZpbmRVcGxvYWRJbnB1dHMoZm9ybUVsKVxuICAgIHJldHVybiBBcnJheS5mcm9tKGZpbGVJbnB1dHMpLmZpbHRlcihlbCA9PiBlbC5maWxlcyAmJiB0aGlzLmFjdGl2ZUZpbGVzKGVsKS5sZW5ndGggPiAwKVxuICB9XG5cbiAgc3RhdGljIGFjdGl2ZUZpbGVzKGlucHV0KXtcbiAgICByZXR1cm4gKERPTS5wcml2YXRlKGlucHV0LCBcImZpbGVzXCIpIHx8IFtdKS5maWx0ZXIoZiA9PiBVcGxvYWRFbnRyeS5pc0FjdGl2ZShpbnB1dCwgZikpXG4gIH1cblxuICBzdGF0aWMgaW5wdXRzQXdhaXRpbmdQcmVmbGlnaHQoZm9ybUVsKXtcbiAgICBsZXQgZmlsZUlucHV0cyA9IERPTS5maW5kVXBsb2FkSW5wdXRzKGZvcm1FbClcbiAgICByZXR1cm4gQXJyYXkuZnJvbShmaWxlSW5wdXRzKS5maWx0ZXIoaW5wdXQgPT4gdGhpcy5maWxlc0F3YWl0aW5nUHJlZmxpZ2h0KGlucHV0KS5sZW5ndGggPiAwKVxuICB9XG5cbiAgc3RhdGljIGZpbGVzQXdhaXRpbmdQcmVmbGlnaHQoaW5wdXQpe1xuICAgIHJldHVybiB0aGlzLmFjdGl2ZUZpbGVzKGlucHV0KS5maWx0ZXIoZiA9PiAhVXBsb2FkRW50cnkuaXNQcmVmbGlnaHRlZChpbnB1dCwgZikpXG4gIH1cblxuICBjb25zdHJ1Y3RvcihpbnB1dEVsLCB2aWV3LCBvbkNvbXBsZXRlKXtcbiAgICB0aGlzLnZpZXcgPSB2aWV3XG4gICAgdGhpcy5vbkNvbXBsZXRlID0gb25Db21wbGV0ZVxuICAgIHRoaXMuX2VudHJpZXMgPVxuICAgICAgQXJyYXkuZnJvbShMaXZlVXBsb2FkZXIuZmlsZXNBd2FpdGluZ1ByZWZsaWdodChpbnB1dEVsKSB8fCBbXSlcbiAgICAgICAgLm1hcChmaWxlID0+IG5ldyBVcGxvYWRFbnRyeShpbnB1dEVsLCBmaWxlLCB2aWV3KSlcblxuICAgIHRoaXMubnVtRW50cmllc0luUHJvZ3Jlc3MgPSB0aGlzLl9lbnRyaWVzLmxlbmd0aFxuICB9XG5cbiAgZW50cmllcygpeyByZXR1cm4gdGhpcy5fZW50cmllcyB9XG5cbiAgaW5pdEFkYXB0ZXJVcGxvYWQocmVzcCwgb25FcnJvciwgbGl2ZVNvY2tldCl7XG4gICAgdGhpcy5fZW50cmllcyA9XG4gICAgICB0aGlzLl9lbnRyaWVzLm1hcChlbnRyeSA9PiB7XG4gICAgICAgIGVudHJ5LnppcFBvc3RGbGlnaHQocmVzcClcbiAgICAgICAgZW50cnkub25Eb25lKCgpID0+IHtcbiAgICAgICAgICB0aGlzLm51bUVudHJpZXNJblByb2dyZXNzLS1cbiAgICAgICAgICBpZih0aGlzLm51bUVudHJpZXNJblByb2dyZXNzID09PSAwKXsgdGhpcy5vbkNvbXBsZXRlKCkgfVxuICAgICAgICB9KVxuICAgICAgICByZXR1cm4gZW50cnlcbiAgICAgIH0pXG5cbiAgICBsZXQgZ3JvdXBlZEVudHJpZXMgPSB0aGlzLl9lbnRyaWVzLnJlZHVjZSgoYWNjLCBlbnRyeSkgPT4ge1xuICAgICAgbGV0IHtuYW1lLCBjYWxsYmFja30gPSBlbnRyeS51cGxvYWRlcihsaXZlU29ja2V0LnVwbG9hZGVycylcbiAgICAgIGFjY1tuYW1lXSA9IGFjY1tuYW1lXSB8fCB7Y2FsbGJhY2s6IGNhbGxiYWNrLCBlbnRyaWVzOiBbXX1cbiAgICAgIGFjY1tuYW1lXS5lbnRyaWVzLnB1c2goZW50cnkpXG4gICAgICByZXR1cm4gYWNjXG4gICAgfSwge30pXG5cbiAgICBmb3IobGV0IG5hbWUgaW4gZ3JvdXBlZEVudHJpZXMpe1xuICAgICAgbGV0IHtjYWxsYmFjaywgZW50cmllc30gPSBncm91cGVkRW50cmllc1tuYW1lXVxuICAgICAgY2FsbGJhY2soZW50cmllcywgb25FcnJvciwgcmVzcCwgbGl2ZVNvY2tldClcbiAgICB9XG4gIH1cbn1cbiIsICJpbXBvcnQge1xuICBQSFhfQUNUSVZFX0VOVFJZX1JFRlMsXG4gIFBIWF9MSVZFX0ZJTEVfVVBEQVRFRCxcbiAgUEhYX1BSRUZMSUdIVEVEX1JFRlMsXG4gIFBIWF9VUExPQURfUkVGXG59IGZyb20gXCIuL2NvbnN0YW50c1wiXG5cbmltcG9ydCBMaXZlVXBsb2FkZXIgZnJvbSBcIi4vbGl2ZV91cGxvYWRlclwiXG5cbmxldCBIb29rcyA9IHtcbiAgTGl2ZUZpbGVVcGxvYWQ6IHtcbiAgICBhY3RpdmVSZWZzKCl7IHJldHVybiB0aGlzLmVsLmdldEF0dHJpYnV0ZShQSFhfQUNUSVZFX0VOVFJZX1JFRlMpIH0sXG5cbiAgICBwcmVmbGlnaHRlZFJlZnMoKXsgcmV0dXJuIHRoaXMuZWwuZ2V0QXR0cmlidXRlKFBIWF9QUkVGTElHSFRFRF9SRUZTKSB9LFxuXG4gICAgbW91bnRlZCgpeyB0aGlzLnByZWZsaWdodGVkV2FzID0gdGhpcy5wcmVmbGlnaHRlZFJlZnMoKSB9LFxuXG4gICAgdXBkYXRlZCgpe1xuICAgICAgbGV0IG5ld1ByZWZsaWdodHMgPSB0aGlzLnByZWZsaWdodGVkUmVmcygpXG4gICAgICBpZih0aGlzLnByZWZsaWdodGVkV2FzICE9PSBuZXdQcmVmbGlnaHRzKXtcbiAgICAgICAgdGhpcy5wcmVmbGlnaHRlZFdhcyA9IG5ld1ByZWZsaWdodHNcbiAgICAgICAgaWYobmV3UHJlZmxpZ2h0cyA9PT0gXCJcIil7XG4gICAgICAgICAgdGhpcy5fX3ZpZXcuY2FuY2VsU3VibWl0KHRoaXMuZWwuZm9ybSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZih0aGlzLmFjdGl2ZVJlZnMoKSA9PT0gXCJcIil7IHRoaXMuZWwudmFsdWUgPSBudWxsIH1cbiAgICAgIHRoaXMuZWwuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoUEhYX0xJVkVfRklMRV9VUERBVEVEKSlcbiAgICB9XG4gIH0sXG5cbiAgTGl2ZUltZ1ByZXZpZXc6IHtcbiAgICBtb3VudGVkKCl7XG4gICAgICB0aGlzLnJlZiA9IHRoaXMuZWwuZ2V0QXR0cmlidXRlKFwiZGF0YS1waHgtZW50cnktcmVmXCIpXG4gICAgICB0aGlzLmlucHV0RWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmVsLmdldEF0dHJpYnV0ZShQSFhfVVBMT0FEX1JFRikpXG4gICAgICBMaXZlVXBsb2FkZXIuZ2V0RW50cnlEYXRhVVJMKHRoaXMuaW5wdXRFbCwgdGhpcy5yZWYsIHVybCA9PiB7XG4gICAgICAgIHRoaXMudXJsID0gdXJsXG4gICAgICAgIHRoaXMuZWwuc3JjID0gdXJsXG4gICAgICB9KVxuICAgIH0sXG4gICAgZGVzdHJveWVkKCl7XG4gICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHRoaXMudXJsKVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBIb29rc1xuIiwgImltcG9ydCB7XG4gIG1heWJlXG59IGZyb20gXCIuL3V0aWxzXCJcblxuaW1wb3J0IERPTSBmcm9tIFwiLi9kb21cIlxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBET01Qb3N0TW9ycGhSZXN0b3JlciB7XG4gIGNvbnN0cnVjdG9yKGNvbnRhaW5lckJlZm9yZSwgY29udGFpbmVyQWZ0ZXIsIHVwZGF0ZVR5cGUpe1xuICAgIGxldCBpZHNCZWZvcmUgPSBuZXcgU2V0KClcbiAgICBsZXQgaWRzQWZ0ZXIgPSBuZXcgU2V0KFsuLi5jb250YWluZXJBZnRlci5jaGlsZHJlbl0ubWFwKGNoaWxkID0+IGNoaWxkLmlkKSlcblxuICAgIGxldCBlbGVtZW50c1RvTW9kaWZ5ID0gW11cblxuICAgIEFycmF5LmZyb20oY29udGFpbmVyQmVmb3JlLmNoaWxkcmVuKS5mb3JFYWNoKGNoaWxkID0+IHtcbiAgICAgIGlmKGNoaWxkLmlkKXsgLy8gYWxsIG9mIG91ciBjaGlsZHJlbiBzaG91bGQgYmUgZWxlbWVudHMgd2l0aCBpZHNcbiAgICAgICAgaWRzQmVmb3JlLmFkZChjaGlsZC5pZClcbiAgICAgICAgaWYoaWRzQWZ0ZXIuaGFzKGNoaWxkLmlkKSl7XG4gICAgICAgICAgbGV0IHByZXZpb3VzRWxlbWVudElkID0gY2hpbGQucHJldmlvdXNFbGVtZW50U2libGluZyAmJiBjaGlsZC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nLmlkXG4gICAgICAgICAgZWxlbWVudHNUb01vZGlmeS5wdXNoKHtlbGVtZW50SWQ6IGNoaWxkLmlkLCBwcmV2aW91c0VsZW1lbnRJZDogcHJldmlvdXNFbGVtZW50SWR9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcblxuICAgIHRoaXMuY29udGFpbmVySWQgPSBjb250YWluZXJBZnRlci5pZFxuICAgIHRoaXMudXBkYXRlVHlwZSA9IHVwZGF0ZVR5cGVcbiAgICB0aGlzLmVsZW1lbnRzVG9Nb2RpZnkgPSBlbGVtZW50c1RvTW9kaWZ5XG4gICAgdGhpcy5lbGVtZW50SWRzVG9BZGQgPSBbLi4uaWRzQWZ0ZXJdLmZpbHRlcihpZCA9PiAhaWRzQmVmb3JlLmhhcyhpZCkpXG4gIH1cblxuICAvLyBXZSBkbyB0aGUgZm9sbG93aW5nIHRvIG9wdGltaXplIGFwcGVuZC9wcmVwZW5kIG9wZXJhdGlvbnM6XG4gIC8vICAgMSkgVHJhY2sgaWRzIG9mIG1vZGlmaWVkIGVsZW1lbnRzICYgb2YgbmV3IGVsZW1lbnRzXG4gIC8vICAgMikgQWxsIHRoZSBtb2RpZmllZCBlbGVtZW50cyBhcmUgcHV0IGJhY2sgaW4gdGhlIGNvcnJlY3QgcG9zaXRpb24gaW4gdGhlIERPTSB0cmVlXG4gIC8vICAgICAgYnkgc3RvcmluZyB0aGUgaWQgb2YgdGhlaXIgcHJldmlvdXMgc2libGluZ1xuICAvLyAgIDMpIE5ldyBlbGVtZW50cyBhcmUgZ29pbmcgdG8gYmUgcHV0IGluIHRoZSByaWdodCBwbGFjZSBieSBtb3JwaGRvbSBkdXJpbmcgYXBwZW5kLlxuICAvLyAgICAgIEZvciBwcmVwZW5kLCB3ZSBtb3ZlIHRoZW0gdG8gdGhlIGZpcnN0IHBvc2l0aW9uIGluIHRoZSBjb250YWluZXJcbiAgcGVyZm9ybSgpe1xuICAgIGxldCBjb250YWluZXIgPSBET00uYnlJZCh0aGlzLmNvbnRhaW5lcklkKVxuICAgIHRoaXMuZWxlbWVudHNUb01vZGlmeS5mb3JFYWNoKGVsZW1lbnRUb01vZGlmeSA9PiB7XG4gICAgICBpZihlbGVtZW50VG9Nb2RpZnkucHJldmlvdXNFbGVtZW50SWQpe1xuICAgICAgICBtYXliZShkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlbGVtZW50VG9Nb2RpZnkucHJldmlvdXNFbGVtZW50SWQpLCBwcmV2aW91c0VsZW0gPT4ge1xuICAgICAgICAgIG1heWJlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsZW1lbnRUb01vZGlmeS5lbGVtZW50SWQpLCBlbGVtID0+IHtcbiAgICAgICAgICAgIGxldCBpc0luUmlnaHRQbGFjZSA9IGVsZW0ucHJldmlvdXNFbGVtZW50U2libGluZyAmJiBlbGVtLnByZXZpb3VzRWxlbWVudFNpYmxpbmcuaWQgPT0gcHJldmlvdXNFbGVtLmlkXG4gICAgICAgICAgICBpZighaXNJblJpZ2h0UGxhY2Upe1xuICAgICAgICAgICAgICBwcmV2aW91c0VsZW0uaW5zZXJ0QWRqYWNlbnRFbGVtZW50KFwiYWZ0ZXJlbmRcIiwgZWxlbSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVGhpcyBpcyB0aGUgZmlyc3QgZWxlbWVudCBpbiB0aGUgY29udGFpbmVyXG4gICAgICAgIG1heWJlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsZW1lbnRUb01vZGlmeS5lbGVtZW50SWQpLCBlbGVtID0+IHtcbiAgICAgICAgICBsZXQgaXNJblJpZ2h0UGxhY2UgPSBlbGVtLnByZXZpb3VzRWxlbWVudFNpYmxpbmcgPT0gbnVsbFxuICAgICAgICAgIGlmKCFpc0luUmlnaHRQbGFjZSl7XG4gICAgICAgICAgICBjb250YWluZXIuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KFwiYWZ0ZXJiZWdpblwiLCBlbGVtKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgaWYodGhpcy51cGRhdGVUeXBlID09IFwicHJlcGVuZFwiKXtcbiAgICAgIHRoaXMuZWxlbWVudElkc1RvQWRkLnJldmVyc2UoKS5mb3JFYWNoKGVsZW1JZCA9PiB7XG4gICAgICAgIG1heWJlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsZW1JZCksIGVsZW0gPT4gY29udGFpbmVyLmluc2VydEFkamFjZW50RWxlbWVudChcImFmdGVyYmVnaW5cIiwgZWxlbSkpXG4gICAgICB9KVxuICAgIH1cbiAgfVxufVxuIiwgInZhciBET0NVTUVOVF9GUkFHTUVOVF9OT0RFID0gMTE7XG5cbmZ1bmN0aW9uIG1vcnBoQXR0cnMoZnJvbU5vZGUsIHRvTm9kZSkge1xuICAgIHZhciB0b05vZGVBdHRycyA9IHRvTm9kZS5hdHRyaWJ1dGVzO1xuICAgIHZhciBhdHRyO1xuICAgIHZhciBhdHRyTmFtZTtcbiAgICB2YXIgYXR0ck5hbWVzcGFjZVVSSTtcbiAgICB2YXIgYXR0clZhbHVlO1xuICAgIHZhciBmcm9tVmFsdWU7XG5cbiAgICAvLyBkb2N1bWVudC1mcmFnbWVudHMgZG9udCBoYXZlIGF0dHJpYnV0ZXMgc28gbGV0cyBub3QgZG8gYW55dGhpbmdcbiAgICBpZiAodG9Ob2RlLm5vZGVUeXBlID09PSBET0NVTUVOVF9GUkFHTUVOVF9OT0RFIHx8IGZyb21Ob2RlLm5vZGVUeXBlID09PSBET0NVTUVOVF9GUkFHTUVOVF9OT0RFKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gdXBkYXRlIGF0dHJpYnV0ZXMgb24gb3JpZ2luYWwgRE9NIGVsZW1lbnRcbiAgICBmb3IgKHZhciBpID0gdG9Ob2RlQXR0cnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgYXR0ciA9IHRvTm9kZUF0dHJzW2ldO1xuICAgICAgICBhdHRyTmFtZSA9IGF0dHIubmFtZTtcbiAgICAgICAgYXR0ck5hbWVzcGFjZVVSSSA9IGF0dHIubmFtZXNwYWNlVVJJO1xuICAgICAgICBhdHRyVmFsdWUgPSBhdHRyLnZhbHVlO1xuXG4gICAgICAgIGlmIChhdHRyTmFtZXNwYWNlVVJJKSB7XG4gICAgICAgICAgICBhdHRyTmFtZSA9IGF0dHIubG9jYWxOYW1lIHx8IGF0dHJOYW1lO1xuICAgICAgICAgICAgZnJvbVZhbHVlID0gZnJvbU5vZGUuZ2V0QXR0cmlidXRlTlMoYXR0ck5hbWVzcGFjZVVSSSwgYXR0ck5hbWUpO1xuXG4gICAgICAgICAgICBpZiAoZnJvbVZhbHVlICE9PSBhdHRyVmFsdWUpIHtcbiAgICAgICAgICAgICAgICBpZiAoYXR0ci5wcmVmaXggPT09ICd4bWxucycpe1xuICAgICAgICAgICAgICAgICAgICBhdHRyTmFtZSA9IGF0dHIubmFtZTsgLy8gSXQncyBub3QgYWxsb3dlZCB0byBzZXQgYW4gYXR0cmlidXRlIHdpdGggdGhlIFhNTE5TIG5hbWVzcGFjZSB3aXRob3V0IHNwZWNpZnlpbmcgdGhlIGB4bWxuc2AgcHJlZml4XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZyb21Ob2RlLnNldEF0dHJpYnV0ZU5TKGF0dHJOYW1lc3BhY2VVUkksIGF0dHJOYW1lLCBhdHRyVmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZnJvbVZhbHVlID0gZnJvbU5vZGUuZ2V0QXR0cmlidXRlKGF0dHJOYW1lKTtcblxuICAgICAgICAgICAgaWYgKGZyb21WYWx1ZSAhPT0gYXR0clZhbHVlKSB7XG4gICAgICAgICAgICAgICAgZnJvbU5vZGUuc2V0QXR0cmlidXRlKGF0dHJOYW1lLCBhdHRyVmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmVtb3ZlIGFueSBleHRyYSBhdHRyaWJ1dGVzIGZvdW5kIG9uIHRoZSBvcmlnaW5hbCBET00gZWxlbWVudCB0aGF0XG4gICAgLy8gd2VyZW4ndCBmb3VuZCBvbiB0aGUgdGFyZ2V0IGVsZW1lbnQuXG4gICAgdmFyIGZyb21Ob2RlQXR0cnMgPSBmcm9tTm9kZS5hdHRyaWJ1dGVzO1xuXG4gICAgZm9yICh2YXIgZCA9IGZyb21Ob2RlQXR0cnMubGVuZ3RoIC0gMTsgZCA+PSAwOyBkLS0pIHtcbiAgICAgICAgYXR0ciA9IGZyb21Ob2RlQXR0cnNbZF07XG4gICAgICAgIGF0dHJOYW1lID0gYXR0ci5uYW1lO1xuICAgICAgICBhdHRyTmFtZXNwYWNlVVJJID0gYXR0ci5uYW1lc3BhY2VVUkk7XG5cbiAgICAgICAgaWYgKGF0dHJOYW1lc3BhY2VVUkkpIHtcbiAgICAgICAgICAgIGF0dHJOYW1lID0gYXR0ci5sb2NhbE5hbWUgfHwgYXR0ck5hbWU7XG5cbiAgICAgICAgICAgIGlmICghdG9Ob2RlLmhhc0F0dHJpYnV0ZU5TKGF0dHJOYW1lc3BhY2VVUkksIGF0dHJOYW1lKSkge1xuICAgICAgICAgICAgICAgIGZyb21Ob2RlLnJlbW92ZUF0dHJpYnV0ZU5TKGF0dHJOYW1lc3BhY2VVUkksIGF0dHJOYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghdG9Ob2RlLmhhc0F0dHJpYnV0ZShhdHRyTmFtZSkpIHtcbiAgICAgICAgICAgICAgICBmcm9tTm9kZS5yZW1vdmVBdHRyaWJ1dGUoYXR0ck5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG52YXIgcmFuZ2U7IC8vIENyZWF0ZSBhIHJhbmdlIG9iamVjdCBmb3IgZWZmaWNlbnRseSByZW5kZXJpbmcgc3RyaW5ncyB0byBlbGVtZW50cy5cbnZhciBOU19YSFRNTCA9ICdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sJztcblxudmFyIGRvYyA9IHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBkb2N1bWVudDtcbnZhciBIQVNfVEVNUExBVEVfU1VQUE9SVCA9ICEhZG9jICYmICdjb250ZW50JyBpbiBkb2MuY3JlYXRlRWxlbWVudCgndGVtcGxhdGUnKTtcbnZhciBIQVNfUkFOR0VfU1VQUE9SVCA9ICEhZG9jICYmIGRvYy5jcmVhdGVSYW5nZSAmJiAnY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50JyBpbiBkb2MuY3JlYXRlUmFuZ2UoKTtcblxuZnVuY3Rpb24gY3JlYXRlRnJhZ21lbnRGcm9tVGVtcGxhdGUoc3RyKSB7XG4gICAgdmFyIHRlbXBsYXRlID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ3RlbXBsYXRlJyk7XG4gICAgdGVtcGxhdGUuaW5uZXJIVE1MID0gc3RyO1xuICAgIHJldHVybiB0ZW1wbGF0ZS5jb250ZW50LmNoaWxkTm9kZXNbMF07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUZyYWdtZW50RnJvbVJhbmdlKHN0cikge1xuICAgIGlmICghcmFuZ2UpIHtcbiAgICAgICAgcmFuZ2UgPSBkb2MuY3JlYXRlUmFuZ2UoKTtcbiAgICAgICAgcmFuZ2Uuc2VsZWN0Tm9kZShkb2MuYm9keSk7XG4gICAgfVxuXG4gICAgdmFyIGZyYWdtZW50ID0gcmFuZ2UuY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KHN0cik7XG4gICAgcmV0dXJuIGZyYWdtZW50LmNoaWxkTm9kZXNbMF07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUZyYWdtZW50RnJvbVdyYXAoc3RyKSB7XG4gICAgdmFyIGZyYWdtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2JvZHknKTtcbiAgICBmcmFnbWVudC5pbm5lckhUTUwgPSBzdHI7XG4gICAgcmV0dXJuIGZyYWdtZW50LmNoaWxkTm9kZXNbMF07XG59XG5cbi8qKlxuICogVGhpcyBpcyBhYm91dCB0aGUgc2FtZVxuICogdmFyIGh0bWwgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKHN0ciwgJ3RleHQvaHRtbCcpO1xuICogcmV0dXJuIGh0bWwuYm9keS5maXJzdENoaWxkO1xuICpcbiAqIEBtZXRob2QgdG9FbGVtZW50XG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKi9cbmZ1bmN0aW9uIHRvRWxlbWVudChzdHIpIHtcbiAgICBzdHIgPSBzdHIudHJpbSgpO1xuICAgIGlmIChIQVNfVEVNUExBVEVfU1VQUE9SVCkge1xuICAgICAgLy8gYXZvaWQgcmVzdHJpY3Rpb25zIG9uIGNvbnRlbnQgZm9yIHRoaW5ncyBsaWtlIGA8dHI+PHRoPkhpPC90aD48L3RyPmAgd2hpY2hcbiAgICAgIC8vIGNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCBkb2Vzbid0IHN1cHBvcnRcbiAgICAgIC8vIDx0ZW1wbGF0ZT4gc3VwcG9ydCBub3QgYXZhaWxhYmxlIGluIElFXG4gICAgICByZXR1cm4gY3JlYXRlRnJhZ21lbnRGcm9tVGVtcGxhdGUoc3RyKTtcbiAgICB9IGVsc2UgaWYgKEhBU19SQU5HRV9TVVBQT1JUKSB7XG4gICAgICByZXR1cm4gY3JlYXRlRnJhZ21lbnRGcm9tUmFuZ2Uoc3RyKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY3JlYXRlRnJhZ21lbnRGcm9tV3JhcChzdHIpO1xufVxuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0d28gbm9kZSdzIG5hbWVzIGFyZSB0aGUgc2FtZS5cbiAqXG4gKiBOT1RFOiBXZSBkb24ndCBib3RoZXIgY2hlY2tpbmcgYG5hbWVzcGFjZVVSSWAgYmVjYXVzZSB5b3Ugd2lsbCBuZXZlciBmaW5kIHR3byBIVE1MIGVsZW1lbnRzIHdpdGggdGhlIHNhbWVcbiAqICAgICAgIG5vZGVOYW1lIGFuZCBkaWZmZXJlbnQgbmFtZXNwYWNlIFVSSXMuXG4gKlxuICogQHBhcmFtIHtFbGVtZW50fSBhXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGIgVGhlIHRhcmdldCBlbGVtZW50XG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBjb21wYXJlTm9kZU5hbWVzKGZyb21FbCwgdG9FbCkge1xuICAgIHZhciBmcm9tTm9kZU5hbWUgPSBmcm9tRWwubm9kZU5hbWU7XG4gICAgdmFyIHRvTm9kZU5hbWUgPSB0b0VsLm5vZGVOYW1lO1xuICAgIHZhciBmcm9tQ29kZVN0YXJ0LCB0b0NvZGVTdGFydDtcblxuICAgIGlmIChmcm9tTm9kZU5hbWUgPT09IHRvTm9kZU5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZnJvbUNvZGVTdGFydCA9IGZyb21Ob2RlTmFtZS5jaGFyQ29kZUF0KDApO1xuICAgIHRvQ29kZVN0YXJ0ID0gdG9Ob2RlTmFtZS5jaGFyQ29kZUF0KDApO1xuXG4gICAgLy8gSWYgdGhlIHRhcmdldCBlbGVtZW50IGlzIGEgdmlydHVhbCBET00gbm9kZSBvciBTVkcgbm9kZSB0aGVuIHdlIG1heVxuICAgIC8vIG5lZWQgdG8gbm9ybWFsaXplIHRoZSB0YWcgbmFtZSBiZWZvcmUgY29tcGFyaW5nLiBOb3JtYWwgSFRNTCBlbGVtZW50cyB0aGF0IGFyZVxuICAgIC8vIGluIHRoZSBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIlxuICAgIC8vIGFyZSBjb252ZXJ0ZWQgdG8gdXBwZXIgY2FzZVxuICAgIGlmIChmcm9tQ29kZVN0YXJ0IDw9IDkwICYmIHRvQ29kZVN0YXJ0ID49IDk3KSB7IC8vIGZyb20gaXMgdXBwZXIgYW5kIHRvIGlzIGxvd2VyXG4gICAgICAgIHJldHVybiBmcm9tTm9kZU5hbWUgPT09IHRvTm9kZU5hbWUudG9VcHBlckNhc2UoKTtcbiAgICB9IGVsc2UgaWYgKHRvQ29kZVN0YXJ0IDw9IDkwICYmIGZyb21Db2RlU3RhcnQgPj0gOTcpIHsgLy8gdG8gaXMgdXBwZXIgYW5kIGZyb20gaXMgbG93ZXJcbiAgICAgICAgcmV0dXJuIHRvTm9kZU5hbWUgPT09IGZyb21Ob2RlTmFtZS50b1VwcGVyQ2FzZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5cbi8qKlxuICogQ3JlYXRlIGFuIGVsZW1lbnQsIG9wdGlvbmFsbHkgd2l0aCBhIGtub3duIG5hbWVzcGFjZSBVUkkuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgdGhlIGVsZW1lbnQgbmFtZSwgZS5nLiAnZGl2JyBvciAnc3ZnJ1xuICogQHBhcmFtIHtzdHJpbmd9IFtuYW1lc3BhY2VVUkldIHRoZSBlbGVtZW50J3MgbmFtZXNwYWNlIFVSSSwgaS5lLiB0aGUgdmFsdWUgb2ZcbiAqIGl0cyBgeG1sbnNgIGF0dHJpYnV0ZSBvciBpdHMgaW5mZXJyZWQgbmFtZXNwYWNlLlxuICpcbiAqIEByZXR1cm4ge0VsZW1lbnR9XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnROUyhuYW1lLCBuYW1lc3BhY2VVUkkpIHtcbiAgICByZXR1cm4gIW5hbWVzcGFjZVVSSSB8fCBuYW1lc3BhY2VVUkkgPT09IE5TX1hIVE1MID9cbiAgICAgICAgZG9jLmNyZWF0ZUVsZW1lbnQobmFtZSkgOlxuICAgICAgICBkb2MuY3JlYXRlRWxlbWVudE5TKG5hbWVzcGFjZVVSSSwgbmFtZSk7XG59XG5cbi8qKlxuICogQ29waWVzIHRoZSBjaGlsZHJlbiBvZiBvbmUgRE9NIGVsZW1lbnQgdG8gYW5vdGhlciBET00gZWxlbWVudFxuICovXG5mdW5jdGlvbiBtb3ZlQ2hpbGRyZW4oZnJvbUVsLCB0b0VsKSB7XG4gICAgdmFyIGN1ckNoaWxkID0gZnJvbUVsLmZpcnN0Q2hpbGQ7XG4gICAgd2hpbGUgKGN1ckNoaWxkKSB7XG4gICAgICAgIHZhciBuZXh0Q2hpbGQgPSBjdXJDaGlsZC5uZXh0U2libGluZztcbiAgICAgICAgdG9FbC5hcHBlbmRDaGlsZChjdXJDaGlsZCk7XG4gICAgICAgIGN1ckNoaWxkID0gbmV4dENoaWxkO1xuICAgIH1cbiAgICByZXR1cm4gdG9FbDtcbn1cblxuZnVuY3Rpb24gc3luY0Jvb2xlYW5BdHRyUHJvcChmcm9tRWwsIHRvRWwsIG5hbWUpIHtcbiAgICBpZiAoZnJvbUVsW25hbWVdICE9PSB0b0VsW25hbWVdKSB7XG4gICAgICAgIGZyb21FbFtuYW1lXSA9IHRvRWxbbmFtZV07XG4gICAgICAgIGlmIChmcm9tRWxbbmFtZV0pIHtcbiAgICAgICAgICAgIGZyb21FbC5zZXRBdHRyaWJ1dGUobmFtZSwgJycpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZnJvbUVsLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxudmFyIHNwZWNpYWxFbEhhbmRsZXJzID0ge1xuICAgIE9QVElPTjogZnVuY3Rpb24oZnJvbUVsLCB0b0VsKSB7XG4gICAgICAgIHZhciBwYXJlbnROb2RlID0gZnJvbUVsLnBhcmVudE5vZGU7XG4gICAgICAgIGlmIChwYXJlbnROb2RlKSB7XG4gICAgICAgICAgICB2YXIgcGFyZW50TmFtZSA9IHBhcmVudE5vZGUubm9kZU5hbWUudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgIGlmIChwYXJlbnROYW1lID09PSAnT1BUR1JPVVAnKSB7XG4gICAgICAgICAgICAgICAgcGFyZW50Tm9kZSA9IHBhcmVudE5vZGUucGFyZW50Tm9kZTtcbiAgICAgICAgICAgICAgICBwYXJlbnROYW1lID0gcGFyZW50Tm9kZSAmJiBwYXJlbnROb2RlLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocGFyZW50TmFtZSA9PT0gJ1NFTEVDVCcgJiYgIXBhcmVudE5vZGUuaGFzQXR0cmlidXRlKCdtdWx0aXBsZScpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZyb21FbC5oYXNBdHRyaWJ1dGUoJ3NlbGVjdGVkJykgJiYgIXRvRWwuc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgTVMgRWRnZSBidWcgd2hlcmUgdGhlICdzZWxlY3RlZCcgYXR0cmlidXRlIGNhbiBvbmx5IGJlXG4gICAgICAgICAgICAgICAgICAgIC8vIHJlbW92ZWQgaWYgc2V0IHRvIGEgbm9uLWVtcHR5IHZhbHVlOlxuICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5taWNyb3NvZnQuY29tL2VuLXVzL21pY3Jvc29mdC1lZGdlL3BsYXRmb3JtL2lzc3Vlcy8xMjA4NzY3OS9cbiAgICAgICAgICAgICAgICAgICAgZnJvbUVsLnNldEF0dHJpYnV0ZSgnc2VsZWN0ZWQnLCAnc2VsZWN0ZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgZnJvbUVsLnJlbW92ZUF0dHJpYnV0ZSgnc2VsZWN0ZWQnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byByZXNldCBzZWxlY3QgZWxlbWVudCdzIHNlbGVjdGVkSW5kZXggdG8gLTEsIG90aGVyd2lzZSBzZXR0aW5nXG4gICAgICAgICAgICAgICAgLy8gZnJvbUVsLnNlbGVjdGVkIHVzaW5nIHRoZSBzeW5jQm9vbGVhbkF0dHJQcm9wIGJlbG93IGhhcyBubyBlZmZlY3QuXG4gICAgICAgICAgICAgICAgLy8gVGhlIGNvcnJlY3Qgc2VsZWN0ZWRJbmRleCB3aWxsIGJlIHNldCBpbiB0aGUgU0VMRUNUIHNwZWNpYWwgaGFuZGxlciBiZWxvdy5cbiAgICAgICAgICAgICAgICBwYXJlbnROb2RlLnNlbGVjdGVkSW5kZXggPSAtMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzeW5jQm9vbGVhbkF0dHJQcm9wKGZyb21FbCwgdG9FbCwgJ3NlbGVjdGVkJyk7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBUaGUgXCJ2YWx1ZVwiIGF0dHJpYnV0ZSBpcyBzcGVjaWFsIGZvciB0aGUgPGlucHV0PiBlbGVtZW50IHNpbmNlIGl0IHNldHNcbiAgICAgKiB0aGUgaW5pdGlhbCB2YWx1ZS4gQ2hhbmdpbmcgdGhlIFwidmFsdWVcIiBhdHRyaWJ1dGUgd2l0aG91dCBjaGFuZ2luZyB0aGVcbiAgICAgKiBcInZhbHVlXCIgcHJvcGVydHkgd2lsbCBoYXZlIG5vIGVmZmVjdCBzaW5jZSBpdCBpcyBvbmx5IHVzZWQgdG8gdGhlIHNldCB0aGVcbiAgICAgKiBpbml0aWFsIHZhbHVlLiAgU2ltaWxhciBmb3IgdGhlIFwiY2hlY2tlZFwiIGF0dHJpYnV0ZSwgYW5kIFwiZGlzYWJsZWRcIi5cbiAgICAgKi9cbiAgICBJTlBVVDogZnVuY3Rpb24oZnJvbUVsLCB0b0VsKSB7XG4gICAgICAgIHN5bmNCb29sZWFuQXR0clByb3AoZnJvbUVsLCB0b0VsLCAnY2hlY2tlZCcpO1xuICAgICAgICBzeW5jQm9vbGVhbkF0dHJQcm9wKGZyb21FbCwgdG9FbCwgJ2Rpc2FibGVkJyk7XG5cbiAgICAgICAgaWYgKGZyb21FbC52YWx1ZSAhPT0gdG9FbC52YWx1ZSkge1xuICAgICAgICAgICAgZnJvbUVsLnZhbHVlID0gdG9FbC52YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdG9FbC5oYXNBdHRyaWJ1dGUoJ3ZhbHVlJykpIHtcbiAgICAgICAgICAgIGZyb21FbC5yZW1vdmVBdHRyaWJ1dGUoJ3ZhbHVlJyk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgVEVYVEFSRUE6IGZ1bmN0aW9uKGZyb21FbCwgdG9FbCkge1xuICAgICAgICB2YXIgbmV3VmFsdWUgPSB0b0VsLnZhbHVlO1xuICAgICAgICBpZiAoZnJvbUVsLnZhbHVlICE9PSBuZXdWYWx1ZSkge1xuICAgICAgICAgICAgZnJvbUVsLnZhbHVlID0gbmV3VmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZmlyc3RDaGlsZCA9IGZyb21FbC5maXJzdENoaWxkO1xuICAgICAgICBpZiAoZmlyc3RDaGlsZCkge1xuICAgICAgICAgICAgLy8gTmVlZGVkIGZvciBJRS4gQXBwYXJlbnRseSBJRSBzZXRzIHRoZSBwbGFjZWhvbGRlciBhcyB0aGVcbiAgICAgICAgICAgIC8vIG5vZGUgdmFsdWUgYW5kIHZpc2UgdmVyc2EuIFRoaXMgaWdub3JlcyBhbiBlbXB0eSB1cGRhdGUuXG4gICAgICAgICAgICB2YXIgb2xkVmFsdWUgPSBmaXJzdENoaWxkLm5vZGVWYWx1ZTtcblxuICAgICAgICAgICAgaWYgKG9sZFZhbHVlID09IG5ld1ZhbHVlIHx8ICghbmV3VmFsdWUgJiYgb2xkVmFsdWUgPT0gZnJvbUVsLnBsYWNlaG9sZGVyKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZmlyc3RDaGlsZC5ub2RlVmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgU0VMRUNUOiBmdW5jdGlvbihmcm9tRWwsIHRvRWwpIHtcbiAgICAgICAgaWYgKCF0b0VsLmhhc0F0dHJpYnV0ZSgnbXVsdGlwbGUnKSkge1xuICAgICAgICAgICAgdmFyIHNlbGVjdGVkSW5kZXggPSAtMTtcbiAgICAgICAgICAgIHZhciBpID0gMDtcbiAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8gbG9vcCB0aHJvdWdoIGNoaWxkcmVuIG9mIGZyb21FbCwgbm90IHRvRWwgc2luY2Ugbm9kZXMgY2FuIGJlIG1vdmVkXG4gICAgICAgICAgICAvLyBmcm9tIHRvRWwgdG8gZnJvbUVsIGRpcmVjdGx5IHdoZW4gbW9ycGhpbmcuXG4gICAgICAgICAgICAvLyBBdCB0aGUgdGltZSB0aGlzIHNwZWNpYWwgaGFuZGxlciBpcyBpbnZva2VkLCBhbGwgY2hpbGRyZW4gaGF2ZSBhbHJlYWR5IGJlZW4gbW9ycGhlZFxuICAgICAgICAgICAgLy8gYW5kIGFwcGVuZGVkIHRvIC8gcmVtb3ZlZCBmcm9tIGZyb21FbCwgc28gdXNpbmcgZnJvbUVsIGhlcmUgaXMgc2FmZSBhbmQgY29ycmVjdC5cbiAgICAgICAgICAgIHZhciBjdXJDaGlsZCA9IGZyb21FbC5maXJzdENoaWxkO1xuICAgICAgICAgICAgdmFyIG9wdGdyb3VwO1xuICAgICAgICAgICAgdmFyIG5vZGVOYW1lO1xuICAgICAgICAgICAgd2hpbGUoY3VyQ2hpbGQpIHtcbiAgICAgICAgICAgICAgICBub2RlTmFtZSA9IGN1ckNoaWxkLm5vZGVOYW1lICYmIGN1ckNoaWxkLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGVOYW1lID09PSAnT1BUR1JPVVAnKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGdyb3VwID0gY3VyQ2hpbGQ7XG4gICAgICAgICAgICAgICAgICAgIGN1ckNoaWxkID0gb3B0Z3JvdXAuZmlyc3RDaGlsZDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAobm9kZU5hbWUgPT09ICdPUFRJT04nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VyQ2hpbGQuaGFzQXR0cmlidXRlKCdzZWxlY3RlZCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRJbmRleCA9IGk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY3VyQ2hpbGQgPSBjdXJDaGlsZC5uZXh0U2libGluZztcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjdXJDaGlsZCAmJiBvcHRncm91cCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VyQ2hpbGQgPSBvcHRncm91cC5uZXh0U2libGluZztcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGdyb3VwID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnJvbUVsLnNlbGVjdGVkSW5kZXggPSBzZWxlY3RlZEluZGV4O1xuICAgICAgICB9XG4gICAgfVxufTtcblxudmFyIEVMRU1FTlRfTk9ERSA9IDE7XG52YXIgRE9DVU1FTlRfRlJBR01FTlRfTk9ERSQxID0gMTE7XG52YXIgVEVYVF9OT0RFID0gMztcbnZhciBDT01NRU5UX05PREUgPSA4O1xuXG5mdW5jdGlvbiBub29wKCkge31cblxuZnVuY3Rpb24gZGVmYXVsdEdldE5vZGVLZXkobm9kZSkge1xuICBpZiAobm9kZSkge1xuICAgICAgcmV0dXJuIChub2RlLmdldEF0dHJpYnV0ZSAmJiBub2RlLmdldEF0dHJpYnV0ZSgnaWQnKSkgfHwgbm9kZS5pZDtcbiAgfVxufVxuXG5mdW5jdGlvbiBtb3JwaGRvbUZhY3RvcnkobW9ycGhBdHRycykge1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIG1vcnBoZG9tKGZyb21Ob2RlLCB0b05vZGUsIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICAgICAgICBvcHRpb25zID0ge307XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHRvTm9kZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGlmIChmcm9tTm9kZS5ub2RlTmFtZSA9PT0gJyNkb2N1bWVudCcgfHwgZnJvbU5vZGUubm9kZU5hbWUgPT09ICdIVE1MJyB8fCBmcm9tTm9kZS5ub2RlTmFtZSA9PT0gJ0JPRFknKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRvTm9kZUh0bWwgPSB0b05vZGU7XG4gICAgICAgICAgICAgICAgdG9Ob2RlID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2h0bWwnKTtcbiAgICAgICAgICAgICAgICB0b05vZGUuaW5uZXJIVE1MID0gdG9Ob2RlSHRtbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdG9Ob2RlID0gdG9FbGVtZW50KHRvTm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZ2V0Tm9kZUtleSA9IG9wdGlvbnMuZ2V0Tm9kZUtleSB8fCBkZWZhdWx0R2V0Tm9kZUtleTtcbiAgICAgICAgdmFyIG9uQmVmb3JlTm9kZUFkZGVkID0gb3B0aW9ucy5vbkJlZm9yZU5vZGVBZGRlZCB8fCBub29wO1xuICAgICAgICB2YXIgb25Ob2RlQWRkZWQgPSBvcHRpb25zLm9uTm9kZUFkZGVkIHx8IG5vb3A7XG4gICAgICAgIHZhciBvbkJlZm9yZUVsVXBkYXRlZCA9IG9wdGlvbnMub25CZWZvcmVFbFVwZGF0ZWQgfHwgbm9vcDtcbiAgICAgICAgdmFyIG9uRWxVcGRhdGVkID0gb3B0aW9ucy5vbkVsVXBkYXRlZCB8fCBub29wO1xuICAgICAgICB2YXIgb25CZWZvcmVOb2RlRGlzY2FyZGVkID0gb3B0aW9ucy5vbkJlZm9yZU5vZGVEaXNjYXJkZWQgfHwgbm9vcDtcbiAgICAgICAgdmFyIG9uTm9kZURpc2NhcmRlZCA9IG9wdGlvbnMub25Ob2RlRGlzY2FyZGVkIHx8IG5vb3A7XG4gICAgICAgIHZhciBvbkJlZm9yZUVsQ2hpbGRyZW5VcGRhdGVkID0gb3B0aW9ucy5vbkJlZm9yZUVsQ2hpbGRyZW5VcGRhdGVkIHx8IG5vb3A7XG4gICAgICAgIHZhciBjaGlsZHJlbk9ubHkgPSBvcHRpb25zLmNoaWxkcmVuT25seSA9PT0gdHJ1ZTtcblxuICAgICAgICAvLyBUaGlzIG9iamVjdCBpcyB1c2VkIGFzIGEgbG9va3VwIHRvIHF1aWNrbHkgZmluZCBhbGwga2V5ZWQgZWxlbWVudHMgaW4gdGhlIG9yaWdpbmFsIERPTSB0cmVlLlxuICAgICAgICB2YXIgZnJvbU5vZGVzTG9va3VwID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgdmFyIGtleWVkUmVtb3ZhbExpc3QgPSBbXTtcblxuICAgICAgICBmdW5jdGlvbiBhZGRLZXllZFJlbW92YWwoa2V5KSB7XG4gICAgICAgICAgICBrZXllZFJlbW92YWxMaXN0LnB1c2goa2V5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHdhbGtEaXNjYXJkZWRDaGlsZE5vZGVzKG5vZGUsIHNraXBLZXllZE5vZGVzKSB7XG4gICAgICAgICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFKSB7XG4gICAgICAgICAgICAgICAgdmFyIGN1ckNoaWxkID0gbm9kZS5maXJzdENoaWxkO1xuICAgICAgICAgICAgICAgIHdoaWxlIChjdXJDaGlsZCkge1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBrZXkgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHNraXBLZXllZE5vZGVzICYmIChrZXkgPSBnZXROb2RlS2V5KGN1ckNoaWxkKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIGFyZSBza2lwcGluZyBrZXllZCBub2RlcyB0aGVuIHdlIGFkZCB0aGUga2V5XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB0byBhIGxpc3Qgc28gdGhhdCBpdCBjYW4gYmUgaGFuZGxlZCBhdCB0aGUgdmVyeSBlbmQuXG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRLZXllZFJlbW92YWwoa2V5KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgcmVwb3J0IHRoZSBub2RlIGFzIGRpc2NhcmRlZCBpZiBpdCBpcyBub3Qga2V5ZWQuIFdlIGRvIHRoaXMgYmVjYXVzZVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXQgdGhlIGVuZCB3ZSBsb29wIHRocm91Z2ggYWxsIGtleWVkIGVsZW1lbnRzIHRoYXQgd2VyZSB1bm1hdGNoZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFuZCB0aGVuIGRpc2NhcmQgdGhlbSBpbiBvbmUgZmluYWwgcGFzcy5cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uTm9kZURpc2NhcmRlZChjdXJDaGlsZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VyQ2hpbGQuZmlyc3RDaGlsZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhbGtEaXNjYXJkZWRDaGlsZE5vZGVzKGN1ckNoaWxkLCBza2lwS2V5ZWROb2Rlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjdXJDaGlsZCA9IGN1ckNoaWxkLm5leHRTaWJsaW5nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZW1vdmVzIGEgRE9NIG5vZGUgb3V0IG9mIHRoZSBvcmlnaW5hbCBET01cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtICB7Tm9kZX0gbm9kZSBUaGUgbm9kZSB0byByZW1vdmVcbiAgICAgICAgICogQHBhcmFtICB7Tm9kZX0gcGFyZW50Tm9kZSBUaGUgbm9kZXMgcGFyZW50XG4gICAgICAgICAqIEBwYXJhbSAge0Jvb2xlYW59IHNraXBLZXllZE5vZGVzIElmIHRydWUgdGhlbiBlbGVtZW50cyB3aXRoIGtleXMgd2lsbCBiZSBza2lwcGVkIGFuZCBub3QgZGlzY2FyZGVkLlxuICAgICAgICAgKiBAcmV0dXJuIHt1bmRlZmluZWR9XG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiByZW1vdmVOb2RlKG5vZGUsIHBhcmVudE5vZGUsIHNraXBLZXllZE5vZGVzKSB7XG4gICAgICAgICAgICBpZiAob25CZWZvcmVOb2RlRGlzY2FyZGVkKG5vZGUpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgICAgICBwYXJlbnROb2RlLnJlbW92ZUNoaWxkKG5vZGUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBvbk5vZGVEaXNjYXJkZWQobm9kZSk7XG4gICAgICAgICAgICB3YWxrRGlzY2FyZGVkQ2hpbGROb2Rlcyhub2RlLCBza2lwS2V5ZWROb2Rlcyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAvLyBUcmVlV2Fsa2VyIGltcGxlbWVudGF0aW9uIGlzIG5vIGZhc3RlciwgYnV0IGtlZXBpbmcgdGhpcyBhcm91bmQgaW4gY2FzZSB0aGlzIGNoYW5nZXMgaW4gdGhlIGZ1dHVyZVxuICAgICAgICAvLyBmdW5jdGlvbiBpbmRleFRyZWUocm9vdCkge1xuICAgICAgICAvLyAgICAgdmFyIHRyZWVXYWxrZXIgPSBkb2N1bWVudC5jcmVhdGVUcmVlV2Fsa2VyKFxuICAgICAgICAvLyAgICAgICAgIHJvb3QsXG4gICAgICAgIC8vICAgICAgICAgTm9kZUZpbHRlci5TSE9XX0VMRU1FTlQpO1xuICAgICAgICAvL1xuICAgICAgICAvLyAgICAgdmFyIGVsO1xuICAgICAgICAvLyAgICAgd2hpbGUoKGVsID0gdHJlZVdhbGtlci5uZXh0Tm9kZSgpKSkge1xuICAgICAgICAvLyAgICAgICAgIHZhciBrZXkgPSBnZXROb2RlS2V5KGVsKTtcbiAgICAgICAgLy8gICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgIC8vICAgICAgICAgICAgIGZyb21Ob2Rlc0xvb2t1cFtrZXldID0gZWw7XG4gICAgICAgIC8vICAgICAgICAgfVxuICAgICAgICAvLyAgICAgfVxuICAgICAgICAvLyB9XG5cbiAgICAgICAgLy8gLy8gTm9kZUl0ZXJhdG9yIGltcGxlbWVudGF0aW9uIGlzIG5vIGZhc3RlciwgYnV0IGtlZXBpbmcgdGhpcyBhcm91bmQgaW4gY2FzZSB0aGlzIGNoYW5nZXMgaW4gdGhlIGZ1dHVyZVxuICAgICAgICAvL1xuICAgICAgICAvLyBmdW5jdGlvbiBpbmRleFRyZWUobm9kZSkge1xuICAgICAgICAvLyAgICAgdmFyIG5vZGVJdGVyYXRvciA9IGRvY3VtZW50LmNyZWF0ZU5vZGVJdGVyYXRvcihub2RlLCBOb2RlRmlsdGVyLlNIT1dfRUxFTUVOVCk7XG4gICAgICAgIC8vICAgICB2YXIgZWw7XG4gICAgICAgIC8vICAgICB3aGlsZSgoZWwgPSBub2RlSXRlcmF0b3IubmV4dE5vZGUoKSkpIHtcbiAgICAgICAgLy8gICAgICAgICB2YXIga2V5ID0gZ2V0Tm9kZUtleShlbCk7XG4gICAgICAgIC8vICAgICAgICAgaWYgKGtleSkge1xuICAgICAgICAvLyAgICAgICAgICAgICBmcm9tTm9kZXNMb29rdXBba2V5XSA9IGVsO1xuICAgICAgICAvLyAgICAgICAgIH1cbiAgICAgICAgLy8gICAgIH1cbiAgICAgICAgLy8gfVxuXG4gICAgICAgIGZ1bmN0aW9uIGluZGV4VHJlZShub2RlKSB7XG4gICAgICAgICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFIHx8IG5vZGUubm9kZVR5cGUgPT09IERPQ1VNRU5UX0ZSQUdNRU5UX05PREUkMSkge1xuICAgICAgICAgICAgICAgIHZhciBjdXJDaGlsZCA9IG5vZGUuZmlyc3RDaGlsZDtcbiAgICAgICAgICAgICAgICB3aGlsZSAoY3VyQ2hpbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGtleSA9IGdldE5vZGVLZXkoY3VyQ2hpbGQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmcm9tTm9kZXNMb29rdXBba2V5XSA9IGN1ckNoaWxkO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gV2FsayByZWN1cnNpdmVseVxuICAgICAgICAgICAgICAgICAgICBpbmRleFRyZWUoY3VyQ2hpbGQpO1xuXG4gICAgICAgICAgICAgICAgICAgIGN1ckNoaWxkID0gY3VyQ2hpbGQubmV4dFNpYmxpbmc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaW5kZXhUcmVlKGZyb21Ob2RlKTtcblxuICAgICAgICBmdW5jdGlvbiBoYW5kbGVOb2RlQWRkZWQoZWwpIHtcbiAgICAgICAgICAgIG9uTm9kZUFkZGVkKGVsKTtcblxuICAgICAgICAgICAgdmFyIGN1ckNoaWxkID0gZWwuZmlyc3RDaGlsZDtcbiAgICAgICAgICAgIHdoaWxlIChjdXJDaGlsZCkge1xuICAgICAgICAgICAgICAgIHZhciBuZXh0U2libGluZyA9IGN1ckNoaWxkLm5leHRTaWJsaW5nO1xuXG4gICAgICAgICAgICAgICAgdmFyIGtleSA9IGdldE5vZGVLZXkoY3VyQ2hpbGQpO1xuICAgICAgICAgICAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHVubWF0Y2hlZEZyb21FbCA9IGZyb21Ob2Rlc0xvb2t1cFtrZXldO1xuICAgICAgICAgICAgICAgICAgICAvLyBpZiB3ZSBmaW5kIGEgZHVwbGljYXRlICNpZCBub2RlIGluIGNhY2hlLCByZXBsYWNlIGBlbGAgd2l0aCBjYWNoZSB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICAvLyBhbmQgbW9ycGggaXQgdG8gdGhlIGNoaWxkIG5vZGUuXG4gICAgICAgICAgICAgICAgICAgIGlmICh1bm1hdGNoZWRGcm9tRWwgJiYgY29tcGFyZU5vZGVOYW1lcyhjdXJDaGlsZCwgdW5tYXRjaGVkRnJvbUVsKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VyQ2hpbGQucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQodW5tYXRjaGVkRnJvbUVsLCBjdXJDaGlsZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBtb3JwaEVsKHVubWF0Y2hlZEZyb21FbCwgY3VyQ2hpbGQpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZU5vZGVBZGRlZChjdXJDaGlsZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgLy8gcmVjdXJzaXZlbHkgY2FsbCBmb3IgY3VyQ2hpbGQgYW5kIGl0J3MgY2hpbGRyZW4gdG8gc2VlIGlmIHdlIGZpbmQgc29tZXRoaW5nIGluXG4gICAgICAgICAgICAgICAgICAvLyBmcm9tTm9kZXNMb29rdXBcbiAgICAgICAgICAgICAgICAgIGhhbmRsZU5vZGVBZGRlZChjdXJDaGlsZCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY3VyQ2hpbGQgPSBuZXh0U2libGluZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGNsZWFudXBGcm9tRWwoZnJvbUVsLCBjdXJGcm9tTm9kZUNoaWxkLCBjdXJGcm9tTm9kZUtleSkge1xuICAgICAgICAgICAgLy8gV2UgaGF2ZSBwcm9jZXNzZWQgYWxsIG9mIHRoZSBcInRvIG5vZGVzXCIuIElmIGN1ckZyb21Ob2RlQ2hpbGQgaXNcbiAgICAgICAgICAgIC8vIG5vbi1udWxsIHRoZW4gd2Ugc3RpbGwgaGF2ZSBzb21lIGZyb20gbm9kZXMgbGVmdCBvdmVyIHRoYXQgbmVlZFxuICAgICAgICAgICAgLy8gdG8gYmUgcmVtb3ZlZFxuICAgICAgICAgICAgd2hpbGUgKGN1ckZyb21Ob2RlQ2hpbGQpIHtcbiAgICAgICAgICAgICAgICB2YXIgZnJvbU5leHRTaWJsaW5nID0gY3VyRnJvbU5vZGVDaGlsZC5uZXh0U2libGluZztcbiAgICAgICAgICAgICAgICBpZiAoKGN1ckZyb21Ob2RlS2V5ID0gZ2V0Tm9kZUtleShjdXJGcm9tTm9kZUNoaWxkKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gU2luY2UgdGhlIG5vZGUgaXMga2V5ZWQgaXQgbWlnaHQgYmUgbWF0Y2hlZCB1cCBsYXRlciBzbyB3ZSBkZWZlclxuICAgICAgICAgICAgICAgICAgICAvLyB0aGUgYWN0dWFsIHJlbW92YWwgdG8gbGF0ZXJcbiAgICAgICAgICAgICAgICAgICAgYWRkS2V5ZWRSZW1vdmFsKGN1ckZyb21Ob2RlS2V5KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBOT1RFOiB3ZSBza2lwIG5lc3RlZCBrZXllZCBub2RlcyBmcm9tIGJlaW5nIHJlbW92ZWQgc2luY2UgdGhlcmUgaXNcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgc3RpbGwgYSBjaGFuY2UgdGhleSB3aWxsIGJlIG1hdGNoZWQgdXAgbGF0ZXJcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTm9kZShjdXJGcm9tTm9kZUNoaWxkLCBmcm9tRWwsIHRydWUgLyogc2tpcCBrZXllZCBub2RlcyAqLyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGN1ckZyb21Ob2RlQ2hpbGQgPSBmcm9tTmV4dFNpYmxpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBtb3JwaEVsKGZyb21FbCwgdG9FbCwgY2hpbGRyZW5Pbmx5KSB7XG4gICAgICAgICAgICB2YXIgdG9FbEtleSA9IGdldE5vZGVLZXkodG9FbCk7XG5cbiAgICAgICAgICAgIGlmICh0b0VsS2V5KSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgYW4gZWxlbWVudCB3aXRoIGFuIElEIGlzIGJlaW5nIG1vcnBoZWQgdGhlbiBpdCB3aWxsIGJlIGluIHRoZSBmaW5hbFxuICAgICAgICAgICAgICAgIC8vIERPTSBzbyBjbGVhciBpdCBvdXQgb2YgdGhlIHNhdmVkIGVsZW1lbnRzIGNvbGxlY3Rpb25cbiAgICAgICAgICAgICAgICBkZWxldGUgZnJvbU5vZGVzTG9va3VwW3RvRWxLZXldO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIWNoaWxkcmVuT25seSkge1xuICAgICAgICAgICAgICAgIC8vIG9wdGlvbmFsXG4gICAgICAgICAgICAgICAgaWYgKG9uQmVmb3JlRWxVcGRhdGVkKGZyb21FbCwgdG9FbCkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyB1cGRhdGUgYXR0cmlidXRlcyBvbiBvcmlnaW5hbCBET00gZWxlbWVudCBmaXJzdFxuICAgICAgICAgICAgICAgIG1vcnBoQXR0cnMoZnJvbUVsLCB0b0VsKTtcbiAgICAgICAgICAgICAgICAvLyBvcHRpb25hbFxuICAgICAgICAgICAgICAgIG9uRWxVcGRhdGVkKGZyb21FbCk7XG5cbiAgICAgICAgICAgICAgICBpZiAob25CZWZvcmVFbENoaWxkcmVuVXBkYXRlZChmcm9tRWwsIHRvRWwpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZnJvbUVsLm5vZGVOYW1lICE9PSAnVEVYVEFSRUEnKSB7XG4gICAgICAgICAgICAgIG1vcnBoQ2hpbGRyZW4oZnJvbUVsLCB0b0VsKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHNwZWNpYWxFbEhhbmRsZXJzLlRFWFRBUkVBKGZyb21FbCwgdG9FbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBtb3JwaENoaWxkcmVuKGZyb21FbCwgdG9FbCkge1xuICAgICAgICAgICAgdmFyIGN1clRvTm9kZUNoaWxkID0gdG9FbC5maXJzdENoaWxkO1xuICAgICAgICAgICAgdmFyIGN1ckZyb21Ob2RlQ2hpbGQgPSBmcm9tRWwuZmlyc3RDaGlsZDtcbiAgICAgICAgICAgIHZhciBjdXJUb05vZGVLZXk7XG4gICAgICAgICAgICB2YXIgY3VyRnJvbU5vZGVLZXk7XG5cbiAgICAgICAgICAgIHZhciBmcm9tTmV4dFNpYmxpbmc7XG4gICAgICAgICAgICB2YXIgdG9OZXh0U2libGluZztcbiAgICAgICAgICAgIHZhciBtYXRjaGluZ0Zyb21FbDtcblxuICAgICAgICAgICAgLy8gd2FsayB0aGUgY2hpbGRyZW5cbiAgICAgICAgICAgIG91dGVyOiB3aGlsZSAoY3VyVG9Ob2RlQ2hpbGQpIHtcbiAgICAgICAgICAgICAgICB0b05leHRTaWJsaW5nID0gY3VyVG9Ob2RlQ2hpbGQubmV4dFNpYmxpbmc7XG4gICAgICAgICAgICAgICAgY3VyVG9Ob2RlS2V5ID0gZ2V0Tm9kZUtleShjdXJUb05vZGVDaGlsZCk7XG5cbiAgICAgICAgICAgICAgICAvLyB3YWxrIHRoZSBmcm9tTm9kZSBjaGlsZHJlbiBhbGwgdGhlIHdheSB0aHJvdWdoXG4gICAgICAgICAgICAgICAgd2hpbGUgKGN1ckZyb21Ob2RlQ2hpbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgZnJvbU5leHRTaWJsaW5nID0gY3VyRnJvbU5vZGVDaGlsZC5uZXh0U2libGluZztcblxuICAgICAgICAgICAgICAgICAgICBpZiAoY3VyVG9Ob2RlQ2hpbGQuaXNTYW1lTm9kZSAmJiBjdXJUb05vZGVDaGlsZC5pc1NhbWVOb2RlKGN1ckZyb21Ob2RlQ2hpbGQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJUb05vZGVDaGlsZCA9IHRvTmV4dFNpYmxpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJGcm9tTm9kZUNoaWxkID0gZnJvbU5leHRTaWJsaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUgb3V0ZXI7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjdXJGcm9tTm9kZUtleSA9IGdldE5vZGVLZXkoY3VyRnJvbU5vZGVDaGlsZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIGN1ckZyb21Ob2RlVHlwZSA9IGN1ckZyb21Ob2RlQ2hpbGQubm9kZVR5cGU7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyBtZWFucyBpZiB0aGUgY3VyRnJvbU5vZGVDaGlsZCBkb2VzbnQgaGF2ZSBhIG1hdGNoIHdpdGggdGhlIGN1clRvTm9kZUNoaWxkXG4gICAgICAgICAgICAgICAgICAgIHZhciBpc0NvbXBhdGlibGUgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGN1ckZyb21Ob2RlVHlwZSA9PT0gY3VyVG9Ob2RlQ2hpbGQubm9kZVR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJGcm9tTm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJvdGggbm9kZXMgYmVpbmcgY29tcGFyZWQgYXJlIEVsZW1lbnQgbm9kZXNcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJUb05vZGVLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHRhcmdldCBub2RlIGhhcyBhIGtleSBzbyB3ZSB3YW50IHRvIG1hdGNoIGl0IHVwIHdpdGggdGhlIGNvcnJlY3QgZWxlbWVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbiB0aGUgb3JpZ2luYWwgRE9NIHRyZWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1clRvTm9kZUtleSAhPT0gY3VyRnJvbU5vZGVLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBjdXJyZW50IGVsZW1lbnQgaW4gdGhlIG9yaWdpbmFsIERPTSB0cmVlIGRvZXMgbm90IGhhdmUgYSBtYXRjaGluZyBrZXkgc29cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxldCdzIGNoZWNrIG91ciBsb29rdXAgdG8gc2VlIGlmIHRoZXJlIGlzIGEgbWF0Y2hpbmcgZWxlbWVudCBpbiB0aGUgb3JpZ2luYWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERPTSB0cmVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKG1hdGNoaW5nRnJvbUVsID0gZnJvbU5vZGVzTG9va3VwW2N1clRvTm9kZUtleV0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZyb21OZXh0U2libGluZyA9PT0gbWF0Y2hpbmdGcm9tRWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3BlY2lhbCBjYXNlIGZvciBzaW5nbGUgZWxlbWVudCByZW1vdmFscy4gVG8gYXZvaWQgcmVtb3ZpbmcgdGhlIG9yaWdpbmFsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERPTSBub2RlIG91dCBvZiB0aGUgdHJlZSAoc2luY2UgdGhhdCBjYW4gYnJlYWsgQ1NTIHRyYW5zaXRpb25zLCBldGMuKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2Ugd2lsbCBpbnN0ZWFkIGRpc2NhcmQgdGhlIGN1cnJlbnQgbm9kZSBhbmQgd2FpdCB1bnRpbCB0aGUgbmV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpdGVyYXRpb24gdG8gcHJvcGVybHkgbWF0Y2ggdXAgdGhlIGtleWVkIHRhcmdldCBlbGVtZW50IHdpdGggaXRzIG1hdGNoaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVsZW1lbnQgaW4gdGhlIG9yaWdpbmFsIHRyZWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNDb21wYXRpYmxlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgZm91bmQgYSBtYXRjaGluZyBrZXllZCBlbGVtZW50IHNvbWV3aGVyZSBpbiB0aGUgb3JpZ2luYWwgRE9NIHRyZWUuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIExldCdzIG1vdmUgdGhlIG9yaWdpbmFsIERPTSBub2RlIGludG8gdGhlIGN1cnJlbnQgcG9zaXRpb24gYW5kIG1vcnBoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGl0LlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5PVEU6IFdlIHVzZSBpbnNlcnRCZWZvcmUgaW5zdGVhZCBvZiByZXBsYWNlQ2hpbGQgYmVjYXVzZSB3ZSB3YW50IHRvIGdvIHRocm91Z2hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGByZW1vdmVOb2RlKClgIGZ1bmN0aW9uIGZvciB0aGUgbm9kZSB0aGF0IGlzIGJlaW5nIGRpc2NhcmRlZCBzbyB0aGF0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFsbCBsaWZlY3ljbGUgaG9va3MgYXJlIGNvcnJlY3RseSBpbnZva2VkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb21FbC5pbnNlcnRCZWZvcmUobWF0Y2hpbmdGcm9tRWwsIGN1ckZyb21Ob2RlQ2hpbGQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZyb21OZXh0U2libGluZyA9IGN1ckZyb21Ob2RlQ2hpbGQubmV4dFNpYmxpbmc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1ckZyb21Ob2RlS2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTaW5jZSB0aGUgbm9kZSBpcyBrZXllZCBpdCBtaWdodCBiZSBtYXRjaGVkIHVwIGxhdGVyIHNvIHdlIGRlZmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgYWN0dWFsIHJlbW92YWwgdG8gbGF0ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEtleWVkUmVtb3ZhbChjdXJGcm9tTm9kZUtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOT1RFOiB3ZSBza2lwIG5lc3RlZCBrZXllZCBub2RlcyBmcm9tIGJlaW5nIHJlbW92ZWQgc2luY2UgdGhlcmUgaXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgIHN0aWxsIGEgY2hhbmNlIHRoZXkgd2lsbCBiZSBtYXRjaGVkIHVwIGxhdGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVOb2RlKGN1ckZyb21Ob2RlQ2hpbGQsIGZyb21FbCwgdHJ1ZSAvKiBza2lwIGtleWVkIG5vZGVzICovKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1ckZyb21Ob2RlQ2hpbGQgPSBtYXRjaGluZ0Zyb21FbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBub2RlcyBhcmUgbm90IGNvbXBhdGlibGUgc2luY2UgdGhlIFwidG9cIiBub2RlIGhhcyBhIGtleSBhbmQgdGhlcmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpcyBubyBtYXRjaGluZyBrZXllZCBub2RlIGluIHRoZSBzb3VyY2UgdHJlZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQ29tcGF0aWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjdXJGcm9tTm9kZUtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgb3JpZ2luYWwgaGFzIGEga2V5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQ29tcGF0aWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQ29tcGF0aWJsZSA9IGlzQ29tcGF0aWJsZSAhPT0gZmFsc2UgJiYgY29tcGFyZU5vZGVOYW1lcyhjdXJGcm9tTm9kZUNoaWxkLCBjdXJUb05vZGVDaGlsZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzQ29tcGF0aWJsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBmb3VuZCBjb21wYXRpYmxlIERPTSBlbGVtZW50cyBzbyB0cmFuc2Zvcm1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGN1cnJlbnQgXCJmcm9tXCIgbm9kZSB0byBtYXRjaCB0aGUgY3VycmVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0YXJnZXQgRE9NIG5vZGUuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1PUlBIXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vcnBoRWwoY3VyRnJvbU5vZGVDaGlsZCwgY3VyVG9Ob2RlQ2hpbGQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjdXJGcm9tTm9kZVR5cGUgPT09IFRFWFRfTk9ERSB8fCBjdXJGcm9tTm9kZVR5cGUgPT0gQ09NTUVOVF9OT0RFKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQm90aCBub2RlcyBiZWluZyBjb21wYXJlZCBhcmUgVGV4dCBvciBDb21tZW50IG5vZGVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNDb21wYXRpYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTaW1wbHkgdXBkYXRlIG5vZGVWYWx1ZSBvbiB0aGUgb3JpZ2luYWwgbm9kZSB0b1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoYW5nZSB0aGUgdGV4dCB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJGcm9tTm9kZUNoaWxkLm5vZGVWYWx1ZSAhPT0gY3VyVG9Ob2RlQ2hpbGQubm9kZVZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1ckZyb21Ob2RlQ2hpbGQubm9kZVZhbHVlID0gY3VyVG9Ob2RlQ2hpbGQubm9kZVZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzQ29tcGF0aWJsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWR2YW5jZSBib3RoIHRoZSBcInRvXCIgY2hpbGQgYW5kIHRoZSBcImZyb21cIiBjaGlsZCBzaW5jZSB3ZSBmb3VuZCBhIG1hdGNoXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3RoaW5nIGVsc2UgdG8gZG8gYXMgd2UgYWxyZWFkeSByZWN1cnNpdmVseSBjYWxsZWQgbW9ycGhDaGlsZHJlbiBhYm92ZVxuICAgICAgICAgICAgICAgICAgICAgICAgY3VyVG9Ob2RlQ2hpbGQgPSB0b05leHRTaWJsaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VyRnJvbU5vZGVDaGlsZCA9IGZyb21OZXh0U2libGluZztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIG91dGVyO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gTm8gY29tcGF0aWJsZSBtYXRjaCBzbyByZW1vdmUgdGhlIG9sZCBub2RlIGZyb20gdGhlIERPTSBhbmQgY29udGludWUgdHJ5aW5nIHRvIGZpbmQgYVxuICAgICAgICAgICAgICAgICAgICAvLyBtYXRjaCBpbiB0aGUgb3JpZ2luYWwgRE9NLiBIb3dldmVyLCB3ZSBvbmx5IGRvIHRoaXMgaWYgdGhlIGZyb20gbm9kZSBpcyBub3Qga2V5ZWRcbiAgICAgICAgICAgICAgICAgICAgLy8gc2luY2UgaXQgaXMgcG9zc2libGUgdGhhdCBhIGtleWVkIG5vZGUgbWlnaHQgbWF0Y2ggdXAgd2l0aCBhIG5vZGUgc29tZXdoZXJlIGVsc2UgaW4gdGhlXG4gICAgICAgICAgICAgICAgICAgIC8vIHRhcmdldCB0cmVlIGFuZCB3ZSBkb24ndCB3YW50IHRvIGRpc2NhcmQgaXQganVzdCB5ZXQgc2luY2UgaXQgc3RpbGwgbWlnaHQgZmluZCBhXG4gICAgICAgICAgICAgICAgICAgIC8vIGhvbWUgaW4gdGhlIGZpbmFsIERPTSB0cmVlLiBBZnRlciBldmVyeXRoaW5nIGlzIGRvbmUgd2Ugd2lsbCByZW1vdmUgYW55IGtleWVkIG5vZGVzXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoYXQgZGlkbid0IGZpbmQgYSBob21lXG4gICAgICAgICAgICAgICAgICAgIGlmIChjdXJGcm9tTm9kZUtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2luY2UgdGhlIG5vZGUgaXMga2V5ZWQgaXQgbWlnaHQgYmUgbWF0Y2hlZCB1cCBsYXRlciBzbyB3ZSBkZWZlclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGFjdHVhbCByZW1vdmFsIHRvIGxhdGVyXG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRLZXllZFJlbW92YWwoY3VyRnJvbU5vZGVLZXkpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gTk9URTogd2Ugc2tpcCBuZXN0ZWQga2V5ZWQgbm9kZXMgZnJvbSBiZWluZyByZW1vdmVkIHNpbmNlIHRoZXJlIGlzXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICBzdGlsbCBhIGNoYW5jZSB0aGV5IHdpbGwgYmUgbWF0Y2hlZCB1cCBsYXRlclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTm9kZShjdXJGcm9tTm9kZUNoaWxkLCBmcm9tRWwsIHRydWUgLyogc2tpcCBrZXllZCBub2RlcyAqLyk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjdXJGcm9tTm9kZUNoaWxkID0gZnJvbU5leHRTaWJsaW5nO1xuICAgICAgICAgICAgICAgIH0gLy8gRU5EOiB3aGlsZShjdXJGcm9tTm9kZUNoaWxkKSB7fVxuXG4gICAgICAgICAgICAgICAgLy8gSWYgd2UgZ290IHRoaXMgZmFyIHRoZW4gd2UgZGlkIG5vdCBmaW5kIGEgY2FuZGlkYXRlIG1hdGNoIGZvclxuICAgICAgICAgICAgICAgIC8vIG91ciBcInRvIG5vZGVcIiBhbmQgd2UgZXhoYXVzdGVkIGFsbCBvZiB0aGUgY2hpbGRyZW4gXCJmcm9tXCJcbiAgICAgICAgICAgICAgICAvLyBub2Rlcy4gVGhlcmVmb3JlLCB3ZSB3aWxsIGp1c3QgYXBwZW5kIHRoZSBjdXJyZW50IFwidG9cIiBub2RlXG4gICAgICAgICAgICAgICAgLy8gdG8gdGhlIGVuZFxuICAgICAgICAgICAgICAgIGlmIChjdXJUb05vZGVLZXkgJiYgKG1hdGNoaW5nRnJvbUVsID0gZnJvbU5vZGVzTG9va3VwW2N1clRvTm9kZUtleV0pICYmIGNvbXBhcmVOb2RlTmFtZXMobWF0Y2hpbmdGcm9tRWwsIGN1clRvTm9kZUNoaWxkKSkge1xuICAgICAgICAgICAgICAgICAgICBmcm9tRWwuYXBwZW5kQ2hpbGQobWF0Y2hpbmdGcm9tRWwpO1xuICAgICAgICAgICAgICAgICAgICAvLyBNT1JQSFxuICAgICAgICAgICAgICAgICAgICBtb3JwaEVsKG1hdGNoaW5nRnJvbUVsLCBjdXJUb05vZGVDaGlsZCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG9uQmVmb3JlTm9kZUFkZGVkUmVzdWx0ID0gb25CZWZvcmVOb2RlQWRkZWQoY3VyVG9Ob2RlQ2hpbGQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAob25CZWZvcmVOb2RlQWRkZWRSZXN1bHQgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob25CZWZvcmVOb2RlQWRkZWRSZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJUb05vZGVDaGlsZCA9IG9uQmVmb3JlTm9kZUFkZGVkUmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VyVG9Ob2RlQ2hpbGQuYWN0dWFsaXplKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyVG9Ob2RlQ2hpbGQgPSBjdXJUb05vZGVDaGlsZC5hY3R1YWxpemUoZnJvbUVsLm93bmVyRG9jdW1lbnQgfHwgZG9jKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGZyb21FbC5hcHBlbmRDaGlsZChjdXJUb05vZGVDaGlsZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVOb2RlQWRkZWQoY3VyVG9Ob2RlQ2hpbGQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY3VyVG9Ob2RlQ2hpbGQgPSB0b05leHRTaWJsaW5nO1xuICAgICAgICAgICAgICAgIGN1ckZyb21Ob2RlQ2hpbGQgPSBmcm9tTmV4dFNpYmxpbmc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNsZWFudXBGcm9tRWwoZnJvbUVsLCBjdXJGcm9tTm9kZUNoaWxkLCBjdXJGcm9tTm9kZUtleSk7XG5cbiAgICAgICAgICAgIHZhciBzcGVjaWFsRWxIYW5kbGVyID0gc3BlY2lhbEVsSGFuZGxlcnNbZnJvbUVsLm5vZGVOYW1lXTtcbiAgICAgICAgICAgIGlmIChzcGVjaWFsRWxIYW5kbGVyKSB7XG4gICAgICAgICAgICAgICAgc3BlY2lhbEVsSGFuZGxlcihmcm9tRWwsIHRvRWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IC8vIEVORDogbW9ycGhDaGlsZHJlbiguLi4pXG5cbiAgICAgICAgdmFyIG1vcnBoZWROb2RlID0gZnJvbU5vZGU7XG4gICAgICAgIHZhciBtb3JwaGVkTm9kZVR5cGUgPSBtb3JwaGVkTm9kZS5ub2RlVHlwZTtcbiAgICAgICAgdmFyIHRvTm9kZVR5cGUgPSB0b05vZGUubm9kZVR5cGU7XG5cbiAgICAgICAgaWYgKCFjaGlsZHJlbk9ubHkpIHtcbiAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB3ZSBhcmUgZ2l2ZW4gdHdvIERPTSBub2RlcyB0aGF0IGFyZSBub3RcbiAgICAgICAgICAgIC8vIGNvbXBhdGlibGUgKGUuZy4gPGRpdj4gLS0+IDxzcGFuPiBvciA8ZGl2PiAtLT4gVEVYVClcbiAgICAgICAgICAgIGlmIChtb3JwaGVkTm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSkge1xuICAgICAgICAgICAgICAgIGlmICh0b05vZGVUeXBlID09PSBFTEVNRU5UX05PREUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjb21wYXJlTm9kZU5hbWVzKGZyb21Ob2RlLCB0b05vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvbk5vZGVEaXNjYXJkZWQoZnJvbU5vZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbW9ycGhlZE5vZGUgPSBtb3ZlQ2hpbGRyZW4oZnJvbU5vZGUsIGNyZWF0ZUVsZW1lbnROUyh0b05vZGUubm9kZU5hbWUsIHRvTm9kZS5uYW1lc3BhY2VVUkkpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEdvaW5nIGZyb20gYW4gZWxlbWVudCBub2RlIHRvIGEgdGV4dCBub2RlXG4gICAgICAgICAgICAgICAgICAgIG1vcnBoZWROb2RlID0gdG9Ob2RlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAobW9ycGhlZE5vZGVUeXBlID09PSBURVhUX05PREUgfHwgbW9ycGhlZE5vZGVUeXBlID09PSBDT01NRU5UX05PREUpIHsgLy8gVGV4dCBvciBjb21tZW50IG5vZGVcbiAgICAgICAgICAgICAgICBpZiAodG9Ob2RlVHlwZSA9PT0gbW9ycGhlZE5vZGVUeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtb3JwaGVkTm9kZS5ub2RlVmFsdWUgIT09IHRvTm9kZS5ub2RlVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vcnBoZWROb2RlLm5vZGVWYWx1ZSA9IHRvTm9kZS5ub2RlVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9ycGhlZE5vZGU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVGV4dCBub2RlIHRvIHNvbWV0aGluZyBlbHNlXG4gICAgICAgICAgICAgICAgICAgIG1vcnBoZWROb2RlID0gdG9Ob2RlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtb3JwaGVkTm9kZSA9PT0gdG9Ob2RlKSB7XG4gICAgICAgICAgICAvLyBUaGUgXCJ0byBub2RlXCIgd2FzIG5vdCBjb21wYXRpYmxlIHdpdGggdGhlIFwiZnJvbSBub2RlXCIgc28gd2UgaGFkIHRvXG4gICAgICAgICAgICAvLyB0b3NzIG91dCB0aGUgXCJmcm9tIG5vZGVcIiBhbmQgdXNlIHRoZSBcInRvIG5vZGVcIlxuICAgICAgICAgICAgb25Ob2RlRGlzY2FyZGVkKGZyb21Ob2RlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0b05vZGUuaXNTYW1lTm9kZSAmJiB0b05vZGUuaXNTYW1lTm9kZShtb3JwaGVkTm9kZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG1vcnBoRWwobW9ycGhlZE5vZGUsIHRvTm9kZSwgY2hpbGRyZW5Pbmx5KTtcblxuICAgICAgICAgICAgLy8gV2Ugbm93IG5lZWQgdG8gbG9vcCBvdmVyIGFueSBrZXllZCBub2RlcyB0aGF0IG1pZ2h0IG5lZWQgdG8gYmVcbiAgICAgICAgICAgIC8vIHJlbW92ZWQuIFdlIG9ubHkgZG8gdGhlIHJlbW92YWwgaWYgd2Uga25vdyB0aGF0IHRoZSBrZXllZCBub2RlXG4gICAgICAgICAgICAvLyBuZXZlciBmb3VuZCBhIG1hdGNoLiBXaGVuIGEga2V5ZWQgbm9kZSBpcyBtYXRjaGVkIHVwIHdlIHJlbW92ZVxuICAgICAgICAgICAgLy8gaXQgb3V0IG9mIGZyb21Ob2Rlc0xvb2t1cCBhbmQgd2UgdXNlIGZyb21Ob2Rlc0xvb2t1cCB0byBkZXRlcm1pbmVcbiAgICAgICAgICAgIC8vIGlmIGEga2V5ZWQgbm9kZSBoYXMgYmVlbiBtYXRjaGVkIHVwIG9yIG5vdFxuICAgICAgICAgICAgaWYgKGtleWVkUmVtb3ZhbExpc3QpIHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpPTAsIGxlbj1rZXllZFJlbW92YWxMaXN0Lmxlbmd0aDsgaTxsZW47IGkrKykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZWxUb1JlbW92ZSA9IGZyb21Ob2Rlc0xvb2t1cFtrZXllZFJlbW92YWxMaXN0W2ldXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVsVG9SZW1vdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZU5vZGUoZWxUb1JlbW92ZSwgZWxUb1JlbW92ZS5wYXJlbnROb2RlLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNoaWxkcmVuT25seSAmJiBtb3JwaGVkTm9kZSAhPT0gZnJvbU5vZGUgJiYgZnJvbU5vZGUucGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgaWYgKG1vcnBoZWROb2RlLmFjdHVhbGl6ZSkge1xuICAgICAgICAgICAgICAgIG1vcnBoZWROb2RlID0gbW9ycGhlZE5vZGUuYWN0dWFsaXplKGZyb21Ob2RlLm93bmVyRG9jdW1lbnQgfHwgZG9jKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIElmIHdlIGhhZCB0byBzd2FwIG91dCB0aGUgZnJvbSBub2RlIHdpdGggYSBuZXcgbm9kZSBiZWNhdXNlIHRoZSBvbGRcbiAgICAgICAgICAgIC8vIG5vZGUgd2FzIG5vdCBjb21wYXRpYmxlIHdpdGggdGhlIHRhcmdldCBub2RlIHRoZW4gd2UgbmVlZCB0b1xuICAgICAgICAgICAgLy8gcmVwbGFjZSB0aGUgb2xkIERPTSBub2RlIGluIHRoZSBvcmlnaW5hbCBET00gdHJlZS4gVGhpcyBpcyBvbmx5XG4gICAgICAgICAgICAvLyBwb3NzaWJsZSBpZiB0aGUgb3JpZ2luYWwgRE9NIG5vZGUgd2FzIHBhcnQgb2YgYSBET00gdHJlZSB3aGljaFxuICAgICAgICAgICAgLy8gd2Uga25vdyBpcyB0aGUgY2FzZSBpZiBpdCBoYXMgYSBwYXJlbnQgbm9kZS5cbiAgICAgICAgICAgIGZyb21Ob2RlLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKG1vcnBoZWROb2RlLCBmcm9tTm9kZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbW9ycGhlZE5vZGU7XG4gICAgfTtcbn1cblxudmFyIG1vcnBoZG9tID0gbW9ycGhkb21GYWN0b3J5KG1vcnBoQXR0cnMpO1xuXG5leHBvcnQgZGVmYXVsdCBtb3JwaGRvbTtcbiIsICJpbXBvcnQge1xuICBQSFhfQ09NUE9ORU5ULFxuICBQSFhfRElTQUJMRV9XSVRILFxuICBQSFhfRkVFREJBQ0tfRk9SLFxuICBQSFhfUkVNT1ZFLFxuICBQSFhfUk9PVF9JRCxcbiAgUEhYX1NFU1NJT04sXG4gIFBIWF9TS0lQLFxuICBQSFhfU1RBVElDLFxuICBQSFhfVFJJR0dFUl9BQ1RJT04sXG4gIFBIWF9VUERBVEVcbn0gZnJvbSBcIi4vY29uc3RhbnRzXCJcblxuaW1wb3J0IHtcbiAgZGV0ZWN0RHVwbGljYXRlSWRzXG59IGZyb20gXCIuL3V0aWxzXCJcblxuaW1wb3J0IERPTSBmcm9tIFwiLi9kb21cIlxuaW1wb3J0IERPTVBvc3RNb3JwaFJlc3RvcmVyIGZyb20gXCIuL2RvbV9wb3N0X21vcnBoX3Jlc3RvcmVyXCJcbmltcG9ydCBtb3JwaGRvbSBmcm9tIFwibW9ycGhkb21cIlxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBET01QYXRjaCB7XG4gIHN0YXRpYyBwYXRjaEVsKGZyb21FbCwgdG9FbCwgYWN0aXZlRWxlbWVudCl7XG4gICAgbW9ycGhkb20oZnJvbUVsLCB0b0VsLCB7XG4gICAgICBjaGlsZHJlbk9ubHk6IGZhbHNlLFxuICAgICAgb25CZWZvcmVFbFVwZGF0ZWQ6IChmcm9tRWwsIHRvRWwpID0+IHtcbiAgICAgICAgaWYoYWN0aXZlRWxlbWVudCAmJiBhY3RpdmVFbGVtZW50LmlzU2FtZU5vZGUoZnJvbUVsKSAmJiBET00uaXNGb3JtSW5wdXQoZnJvbUVsKSl7XG4gICAgICAgICAgRE9NLm1lcmdlRm9jdXNlZElucHV0KGZyb21FbCwgdG9FbClcbiAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBjb25zdHJ1Y3Rvcih2aWV3LCBjb250YWluZXIsIGlkLCBodG1sLCB0YXJnZXRDSUQpe1xuICAgIHRoaXMudmlldyA9IHZpZXdcbiAgICB0aGlzLmxpdmVTb2NrZXQgPSB2aWV3LmxpdmVTb2NrZXRcbiAgICB0aGlzLmNvbnRhaW5lciA9IGNvbnRhaW5lclxuICAgIHRoaXMuaWQgPSBpZFxuICAgIHRoaXMucm9vdElEID0gdmlldy5yb290LmlkXG4gICAgdGhpcy5odG1sID0gaHRtbFxuICAgIHRoaXMudGFyZ2V0Q0lEID0gdGFyZ2V0Q0lEXG4gICAgdGhpcy5jaWRQYXRjaCA9IHR5cGVvZiAodGhpcy50YXJnZXRDSUQpID09PSBcIm51bWJlclwiXG4gICAgdGhpcy5jYWxsYmFja3MgPSB7XG4gICAgICBiZWZvcmVhZGRlZDogW10sIGJlZm9yZXVwZGF0ZWQ6IFtdLCBiZWZvcmVwaHhDaGlsZEFkZGVkOiBbXSxcbiAgICAgIGFmdGVyYWRkZWQ6IFtdLCBhZnRlcnVwZGF0ZWQ6IFtdLCBhZnRlcmRpc2NhcmRlZDogW10sIGFmdGVycGh4Q2hpbGRBZGRlZDogW11cbiAgICB9XG4gIH1cblxuICBiZWZvcmUoa2luZCwgY2FsbGJhY2speyB0aGlzLmNhbGxiYWNrc1tgYmVmb3JlJHtraW5kfWBdLnB1c2goY2FsbGJhY2spIH1cbiAgYWZ0ZXIoa2luZCwgY2FsbGJhY2speyB0aGlzLmNhbGxiYWNrc1tgYWZ0ZXIke2tpbmR9YF0ucHVzaChjYWxsYmFjaykgfVxuXG4gIHRyYWNrQmVmb3JlKGtpbmQsIC4uLmFyZ3Mpe1xuICAgIHRoaXMuY2FsbGJhY2tzW2BiZWZvcmUke2tpbmR9YF0uZm9yRWFjaChjYWxsYmFjayA9PiBjYWxsYmFjayguLi5hcmdzKSlcbiAgfVxuXG4gIHRyYWNrQWZ0ZXIoa2luZCwgLi4uYXJncyl7XG4gICAgdGhpcy5jYWxsYmFja3NbYGFmdGVyJHtraW5kfWBdLmZvckVhY2goY2FsbGJhY2sgPT4gY2FsbGJhY2soLi4uYXJncykpXG4gIH1cblxuICBtYXJrUHJ1bmFibGVDb250ZW50Rm9yUmVtb3ZhbCgpe1xuICAgIERPTS5hbGwodGhpcy5jb250YWluZXIsIFwiW3BoeC11cGRhdGU9YXBwZW5kXSA+ICosIFtwaHgtdXBkYXRlPXByZXBlbmRdID4gKlwiLCBlbCA9PiB7XG4gICAgICBlbC5zZXRBdHRyaWJ1dGUoUEhYX1JFTU9WRSwgXCJcIilcbiAgICB9KVxuICB9XG5cbiAgcGVyZm9ybSgpe1xuICAgIGxldCB7dmlldywgbGl2ZVNvY2tldCwgY29udGFpbmVyLCBodG1sfSA9IHRoaXNcbiAgICBsZXQgdGFyZ2V0Q29udGFpbmVyID0gdGhpcy5pc0NJRFBhdGNoKCkgPyB0aGlzLnRhcmdldENJRENvbnRhaW5lcihodG1sKSA6IGNvbnRhaW5lclxuICAgIGlmKHRoaXMuaXNDSURQYXRjaCgpICYmICF0YXJnZXRDb250YWluZXIpeyByZXR1cm4gfVxuXG4gICAgbGV0IGZvY3VzZWQgPSBsaXZlU29ja2V0LmdldEFjdGl2ZUVsZW1lbnQoKVxuICAgIGxldCB7c2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZH0gPSBmb2N1c2VkICYmIERPTS5oYXNTZWxlY3Rpb25SYW5nZShmb2N1c2VkKSA/IGZvY3VzZWQgOiB7fVxuICAgIGxldCBwaHhVcGRhdGUgPSBsaXZlU29ja2V0LmJpbmRpbmcoUEhYX1VQREFURSlcbiAgICBsZXQgcGh4RmVlZGJhY2tGb3IgPSBsaXZlU29ja2V0LmJpbmRpbmcoUEhYX0ZFRURCQUNLX0ZPUilcbiAgICBsZXQgZGlzYWJsZVdpdGggPSBsaXZlU29ja2V0LmJpbmRpbmcoUEhYX0RJU0FCTEVfV0lUSClcbiAgICBsZXQgcGh4VHJpZ2dlckV4dGVybmFsID0gbGl2ZVNvY2tldC5iaW5kaW5nKFBIWF9UUklHR0VSX0FDVElPTilcbiAgICBsZXQgYWRkZWQgPSBbXVxuICAgIGxldCB1cGRhdGVzID0gW11cbiAgICBsZXQgYXBwZW5kUHJlcGVuZFVwZGF0ZXMgPSBbXVxuICAgIGxldCBleHRlcm5hbEZvcm1UcmlnZ2VyZWQgPSBudWxsXG5cbiAgICBsZXQgZGlmZkhUTUwgPSBsaXZlU29ja2V0LnRpbWUoXCJwcmVtb3JwaCBjb250YWluZXIgcHJlcFwiLCAoKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5idWlsZERpZmZIVE1MKGNvbnRhaW5lciwgaHRtbCwgcGh4VXBkYXRlLCB0YXJnZXRDb250YWluZXIpXG4gICAgfSlcblxuICAgIHRoaXMudHJhY2tCZWZvcmUoXCJhZGRlZFwiLCBjb250YWluZXIpXG4gICAgdGhpcy50cmFja0JlZm9yZShcInVwZGF0ZWRcIiwgY29udGFpbmVyLCBjb250YWluZXIpXG5cbiAgICBsaXZlU29ja2V0LnRpbWUoXCJtb3JwaGRvbVwiLCAoKSA9PiB7XG4gICAgICBtb3JwaGRvbSh0YXJnZXRDb250YWluZXIsIGRpZmZIVE1MLCB7XG4gICAgICAgIGNoaWxkcmVuT25seTogdGFyZ2V0Q29udGFpbmVyLmdldEF0dHJpYnV0ZShQSFhfQ09NUE9ORU5UKSA9PT0gbnVsbCxcbiAgICAgICAgZ2V0Tm9kZUtleTogKG5vZGUpID0+IHtcbiAgICAgICAgICByZXR1cm4gRE9NLmlzUGh4RGVzdHJveWVkKG5vZGUpID8gbnVsbCA6IG5vZGUuaWRcbiAgICAgICAgfSxcbiAgICAgICAgb25CZWZvcmVOb2RlQWRkZWQ6IChlbCkgPT4ge1xuICAgICAgICAgIHRoaXMudHJhY2tCZWZvcmUoXCJhZGRlZFwiLCBlbClcbiAgICAgICAgICByZXR1cm4gZWxcbiAgICAgICAgfSxcbiAgICAgICAgb25Ob2RlQWRkZWQ6IChlbCkgPT4ge1xuICAgICAgICAgIGlmKERPTS5pc05vd1RyaWdnZXJGb3JtRXh0ZXJuYWwoZWwsIHBoeFRyaWdnZXJFeHRlcm5hbCkpe1xuICAgICAgICAgICAgZXh0ZXJuYWxGb3JtVHJpZ2dlcmVkID0gZWxcbiAgICAgICAgICB9XG4gICAgICAgICAgLy9pbnB1dCBoYW5kbGluZ1xuICAgICAgICAgIERPTS5kaXNjYXJkRXJyb3IodGFyZ2V0Q29udGFpbmVyLCBlbCwgcGh4RmVlZGJhY2tGb3IpXG4gICAgICAgICAgLy8gbmVzdGVkIHZpZXcgaGFuZGxpbmdcbiAgICAgICAgICBpZihET00uaXNQaHhDaGlsZChlbCkgJiYgdmlldy5vd25zRWxlbWVudChlbCkpe1xuICAgICAgICAgICAgdGhpcy50cmFja0FmdGVyKFwicGh4Q2hpbGRBZGRlZFwiLCBlbClcbiAgICAgICAgICB9XG4gICAgICAgICAgYWRkZWQucHVzaChlbClcbiAgICAgICAgfSxcbiAgICAgICAgb25Ob2RlRGlzY2FyZGVkOiAoZWwpID0+IHtcbiAgICAgICAgICAvLyBuZXN0ZWQgdmlldyBoYW5kbGluZ1xuICAgICAgICAgIGlmKERPTS5pc1BoeENoaWxkKGVsKSl7IGxpdmVTb2NrZXQuZGVzdHJveVZpZXdCeUVsKGVsKSB9XG4gICAgICAgICAgdGhpcy50cmFja0FmdGVyKFwiZGlzY2FyZGVkXCIsIGVsKVxuICAgICAgICB9LFxuICAgICAgICBvbkJlZm9yZU5vZGVEaXNjYXJkZWQ6IChlbCkgPT4ge1xuICAgICAgICAgIGlmKGVsLmdldEF0dHJpYnV0ZSAmJiBlbC5nZXRBdHRyaWJ1dGUoUEhYX1JFTU9WRSkgIT09IG51bGwpeyByZXR1cm4gdHJ1ZSB9XG4gICAgICAgICAgaWYoZWwucGFyZW50Tm9kZSAhPT0gbnVsbCAmJiBET00uaXNQaHhVcGRhdGUoZWwucGFyZW50Tm9kZSwgcGh4VXBkYXRlLCBbXCJhcHBlbmRcIiwgXCJwcmVwZW5kXCJdKSAmJiBlbC5pZCl7IHJldHVybiBmYWxzZSB9XG4gICAgICAgICAgaWYodGhpcy5za2lwQ0lEU2libGluZyhlbCkpeyByZXR1cm4gZmFsc2UgfVxuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIG9uRWxVcGRhdGVkOiAoZWwpID0+IHtcbiAgICAgICAgICBpZihET00uaXNOb3dUcmlnZ2VyRm9ybUV4dGVybmFsKGVsLCBwaHhUcmlnZ2VyRXh0ZXJuYWwpKXtcbiAgICAgICAgICAgIGV4dGVybmFsRm9ybVRyaWdnZXJlZCA9IGVsXG4gICAgICAgICAgfVxuICAgICAgICAgIHVwZGF0ZXMucHVzaChlbClcbiAgICAgICAgfSxcbiAgICAgICAgb25CZWZvcmVFbFVwZGF0ZWQ6IChmcm9tRWwsIHRvRWwpID0+IHtcbiAgICAgICAgICBET00uY2xlYW5DaGlsZE5vZGVzKHRvRWwsIHBoeFVwZGF0ZSlcbiAgICAgICAgICBpZih0aGlzLnNraXBDSURTaWJsaW5nKHRvRWwpKXsgcmV0dXJuIGZhbHNlIH1cbiAgICAgICAgICBpZihET00uaXNJZ25vcmVkKGZyb21FbCwgcGh4VXBkYXRlKSl7XG4gICAgICAgICAgICB0aGlzLnRyYWNrQmVmb3JlKFwidXBkYXRlZFwiLCBmcm9tRWwsIHRvRWwpXG4gICAgICAgICAgICBET00ubWVyZ2VBdHRycyhmcm9tRWwsIHRvRWwsIHtpc0lnbm9yZWQ6IHRydWV9KVxuICAgICAgICAgICAgdXBkYXRlcy5wdXNoKGZyb21FbClcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZihmcm9tRWwudHlwZSA9PT0gXCJudW1iZXJcIiAmJiAoZnJvbUVsLnZhbGlkaXR5ICYmIGZyb21FbC52YWxpZGl0eS5iYWRJbnB1dCkpeyByZXR1cm4gZmFsc2UgfVxuICAgICAgICAgIGlmKCFET00uc3luY1BlbmRpbmdSZWYoZnJvbUVsLCB0b0VsLCBkaXNhYmxlV2l0aCkpe1xuICAgICAgICAgICAgaWYoRE9NLmlzVXBsb2FkSW5wdXQoZnJvbUVsKSl7XG4gICAgICAgICAgICAgIHRoaXMudHJhY2tCZWZvcmUoXCJ1cGRhdGVkXCIsIGZyb21FbCwgdG9FbClcbiAgICAgICAgICAgICAgdXBkYXRlcy5wdXNoKGZyb21FbClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIG5lc3RlZCB2aWV3IGhhbmRsaW5nXG4gICAgICAgICAgaWYoRE9NLmlzUGh4Q2hpbGQodG9FbCkpe1xuICAgICAgICAgICAgbGV0IHByZXZTZXNzaW9uID0gZnJvbUVsLmdldEF0dHJpYnV0ZShQSFhfU0VTU0lPTilcbiAgICAgICAgICAgIERPTS5tZXJnZUF0dHJzKGZyb21FbCwgdG9FbCwge2V4Y2x1ZGU6IFtQSFhfU1RBVElDXX0pXG4gICAgICAgICAgICBpZihwcmV2U2Vzc2lvbiAhPT0gXCJcIil7IGZyb21FbC5zZXRBdHRyaWJ1dGUoUEhYX1NFU1NJT04sIHByZXZTZXNzaW9uKSB9XG4gICAgICAgICAgICBmcm9tRWwuc2V0QXR0cmlidXRlKFBIWF9ST09UX0lELCB0aGlzLnJvb3RJRClcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIGlucHV0IGhhbmRsaW5nXG4gICAgICAgICAgRE9NLmNvcHlQcml2YXRlcyh0b0VsLCBmcm9tRWwpXG4gICAgICAgICAgRE9NLmRpc2NhcmRFcnJvcih0YXJnZXRDb250YWluZXIsIHRvRWwsIHBoeEZlZWRiYWNrRm9yKVxuICAgICAgICAgIERPTS5zeW5jUHJvcHNUb0F0dHJzKHRvRWwpXG5cbiAgICAgICAgICBsZXQgaXNGb2N1c2VkRm9ybUVsID0gZm9jdXNlZCAmJiBmcm9tRWwuaXNTYW1lTm9kZShmb2N1c2VkKSAmJiBET00uaXNGb3JtSW5wdXQoZnJvbUVsKVxuICAgICAgICAgIGlmKGlzRm9jdXNlZEZvcm1FbCAmJiAhdGhpcy5mb3JjZUZvY3VzZWRTZWxlY3RVcGRhdGUoZnJvbUVsLCB0b0VsKSl7XG4gICAgICAgICAgICB0aGlzLnRyYWNrQmVmb3JlKFwidXBkYXRlZFwiLCBmcm9tRWwsIHRvRWwpXG4gICAgICAgICAgICBET00ubWVyZ2VGb2N1c2VkSW5wdXQoZnJvbUVsLCB0b0VsKVxuICAgICAgICAgICAgRE9NLnN5bmNBdHRyc1RvUHJvcHMoZnJvbUVsKVxuICAgICAgICAgICAgdXBkYXRlcy5wdXNoKGZyb21FbClcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZihET00uaXNQaHhVcGRhdGUodG9FbCwgcGh4VXBkYXRlLCBbXCJhcHBlbmRcIiwgXCJwcmVwZW5kXCJdKSl7XG4gICAgICAgICAgICAgIGFwcGVuZFByZXBlbmRVcGRhdGVzLnB1c2gobmV3IERPTVBvc3RNb3JwaFJlc3RvcmVyKGZyb21FbCwgdG9FbCwgdG9FbC5nZXRBdHRyaWJ1dGUocGh4VXBkYXRlKSkpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBET00uc3luY0F0dHJzVG9Qcm9wcyh0b0VsKVxuICAgICAgICAgICAgdGhpcy50cmFja0JlZm9yZShcInVwZGF0ZWRcIiwgZnJvbUVsLCB0b0VsKVxuICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSlcblxuICAgIGlmKGxpdmVTb2NrZXQuaXNEZWJ1Z0VuYWJsZWQoKSl7IGRldGVjdER1cGxpY2F0ZUlkcygpIH1cblxuICAgIGlmKGFwcGVuZFByZXBlbmRVcGRhdGVzLmxlbmd0aCA+IDApe1xuICAgICAgbGl2ZVNvY2tldC50aW1lKFwicG9zdC1tb3JwaCBhcHBlbmQvcHJlcGVuZCByZXN0b3JhdGlvblwiLCAoKSA9PiB7XG4gICAgICAgIGFwcGVuZFByZXBlbmRVcGRhdGVzLmZvckVhY2godXBkYXRlID0+IHVwZGF0ZS5wZXJmb3JtKCkpXG4gICAgICB9KVxuICAgIH1cblxuICAgIGxpdmVTb2NrZXQuc2lsZW5jZUV2ZW50cygoKSA9PiBET00ucmVzdG9yZUZvY3VzKGZvY3VzZWQsIHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQpKVxuICAgIERPTS5kaXNwYXRjaEV2ZW50KGRvY3VtZW50LCBcInBoeDp1cGRhdGVcIilcbiAgICBhZGRlZC5mb3JFYWNoKGVsID0+IHRoaXMudHJhY2tBZnRlcihcImFkZGVkXCIsIGVsKSlcbiAgICB1cGRhdGVzLmZvckVhY2goZWwgPT4gdGhpcy50cmFja0FmdGVyKFwidXBkYXRlZFwiLCBlbCkpXG5cbiAgICBpZihleHRlcm5hbEZvcm1UcmlnZ2VyZWQpe1xuICAgICAgbGl2ZVNvY2tldC5kaXNjb25uZWN0KClcbiAgICAgIGV4dGVybmFsRm9ybVRyaWdnZXJlZC5zdWJtaXQoKVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgZm9yY2VGb2N1c2VkU2VsZWN0VXBkYXRlKGZyb21FbCwgdG9FbCl7XG4gICAgbGV0IGlzU2VsZWN0ID0gW1wic2VsZWN0XCIsIFwic2VsZWN0LW9uZVwiLCBcInNlbGVjdC1tdWx0aXBsZVwiXS5maW5kKCh0KSA9PiB0ID09PSBmcm9tRWwudHlwZSlcbiAgICByZXR1cm4gZnJvbUVsLm11bHRpcGxlID09PSB0cnVlIHx8IChpc1NlbGVjdCAmJiBmcm9tRWwuaW5uZXJIVE1MICE9IHRvRWwuaW5uZXJIVE1MKVxuICB9XG5cbiAgaXNDSURQYXRjaCgpeyByZXR1cm4gdGhpcy5jaWRQYXRjaCB9XG5cbiAgc2tpcENJRFNpYmxpbmcoZWwpe1xuICAgIHJldHVybiBlbC5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiYgZWwuZ2V0QXR0cmlidXRlKFBIWF9TS0lQKSAhPT0gbnVsbFxuICB9XG5cbiAgdGFyZ2V0Q0lEQ29udGFpbmVyKGh0bWwpe1xuICAgIGlmKCF0aGlzLmlzQ0lEUGF0Y2goKSl7IHJldHVybiB9XG4gICAgbGV0IFtmaXJzdCwgLi4ucmVzdF0gPSBET00uZmluZENvbXBvbmVudE5vZGVMaXN0KHRoaXMuY29udGFpbmVyLCB0aGlzLnRhcmdldENJRClcbiAgICBpZihyZXN0Lmxlbmd0aCA9PT0gMCAmJiBET00uY2hpbGROb2RlTGVuZ3RoKGh0bWwpID09PSAxKXtcbiAgICAgIHJldHVybiBmaXJzdFxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmlyc3QgJiYgZmlyc3QucGFyZW50Tm9kZVxuICAgIH1cbiAgfVxuXG4gIC8vIGJ1aWxkcyBIVE1MIGZvciBtb3JwaGRvbSBwYXRjaFxuICAvLyAtIGZvciBmdWxsIHBhdGNoZXMgb2YgTGl2ZVZpZXcgb3IgYSBjb21wb25lbnQgd2l0aCBhIHNpbmdsZVxuICAvLyAgIHJvb3Qgbm9kZSwgc2ltcGx5IHJldHVybnMgdGhlIEhUTUxcbiAgLy8gLSBmb3IgcGF0Y2hlcyBvZiBhIGNvbXBvbmVudCB3aXRoIG11bHRpcGxlIHJvb3Qgbm9kZXMsIHRoZVxuICAvLyAgIHBhcmVudCBub2RlIGJlY29tZXMgdGhlIHRhcmdldCBjb250YWluZXIgYW5kIG5vbi1jb21wb25lbnRcbiAgLy8gICBzaWJsaW5ncyBhcmUgbWFya2VkIGFzIHNraXAuXG4gIGJ1aWxkRGlmZkhUTUwoY29udGFpbmVyLCBodG1sLCBwaHhVcGRhdGUsIHRhcmdldENvbnRhaW5lcil7XG4gICAgbGV0IGlzQ0lEUGF0Y2ggPSB0aGlzLmlzQ0lEUGF0Y2goKVxuICAgIGxldCBpc0NJRFdpdGhTaW5nbGVSb290ID0gaXNDSURQYXRjaCAmJiB0YXJnZXRDb250YWluZXIuZ2V0QXR0cmlidXRlKFBIWF9DT01QT05FTlQpID09PSB0aGlzLnRhcmdldENJRC50b1N0cmluZygpXG4gICAgaWYoIWlzQ0lEUGF0Y2ggfHwgaXNDSURXaXRoU2luZ2xlUm9vdCl7XG4gICAgICByZXR1cm4gaHRtbFxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBjb21wb25lbnQgcGF0Y2ggd2l0aCBtdWx0aXBsZSBDSUQgcm9vdHNcbiAgICAgIGxldCBkaWZmQ29udGFpbmVyID0gbnVsbFxuICAgICAgbGV0IHRlbXBsYXRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRlbXBsYXRlXCIpXG4gICAgICBkaWZmQ29udGFpbmVyID0gRE9NLmNsb25lTm9kZSh0YXJnZXRDb250YWluZXIpXG4gICAgICBsZXQgW2ZpcnN0Q29tcG9uZW50LCAuLi5yZXN0XSA9IERPTS5maW5kQ29tcG9uZW50Tm9kZUxpc3QoZGlmZkNvbnRhaW5lciwgdGhpcy50YXJnZXRDSUQpXG4gICAgICB0ZW1wbGF0ZS5pbm5lckhUTUwgPSBodG1sXG4gICAgICByZXN0LmZvckVhY2goZWwgPT4gZWwucmVtb3ZlKCkpXG4gICAgICBBcnJheS5mcm9tKGRpZmZDb250YWluZXIuY2hpbGROb2RlcykuZm9yRWFjaChjaGlsZCA9PiB7XG4gICAgICAgIC8vIHdlIGNhbiBvbmx5IHNraXAgdHJhY2thYmxlIG5vZGVzIHdpdGggYW4gSURcbiAgICAgICAgaWYoY2hpbGQuaWQgJiYgY2hpbGQubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFICYmIGNoaWxkLmdldEF0dHJpYnV0ZShQSFhfQ09NUE9ORU5UKSAhPT0gdGhpcy50YXJnZXRDSUQudG9TdHJpbmcoKSl7XG4gICAgICAgICAgY2hpbGQuc2V0QXR0cmlidXRlKFBIWF9TS0lQLCBcIlwiKVxuICAgICAgICAgIGNoaWxkLmlubmVySFRNTCA9IFwiXCJcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIEFycmF5LmZyb20odGVtcGxhdGUuY29udGVudC5jaGlsZE5vZGVzKS5mb3JFYWNoKGVsID0+IGRpZmZDb250YWluZXIuaW5zZXJ0QmVmb3JlKGVsLCBmaXJzdENvbXBvbmVudCkpXG4gICAgICBmaXJzdENvbXBvbmVudC5yZW1vdmUoKVxuICAgICAgcmV0dXJuIGRpZmZDb250YWluZXIub3V0ZXJIVE1MXG4gICAgfVxuICB9XG59XG4iLCAiaW1wb3J0IHtcbiAgQ09NUE9ORU5UUyxcbiAgRFlOQU1JQ1MsXG4gIEVWRU5UUyxcbiAgUEhYX0NPTVBPTkVOVCxcbiAgUEhYX1NLSVAsXG4gIFJFUExZLFxuICBTVEFUSUMsXG4gIFRJVExFXG59IGZyb20gXCIuL2NvbnN0YW50c1wiXG5cbmltcG9ydCB7XG4gIGlzT2JqZWN0LFxuICBsb2dFcnJvclxufSBmcm9tIFwiLi91dGlsc1wiXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlbmRlcmVkIHtcbiAgc3RhdGljIGV4dHJhY3QoZGlmZil7XG4gICAgbGV0IHtbUkVQTFldOiByZXBseSwgW0VWRU5UU106IGV2ZW50cywgW1RJVExFXTogdGl0bGV9ID0gZGlmZlxuICAgIGRlbGV0ZSBkaWZmW1JFUExZXVxuICAgIGRlbGV0ZSBkaWZmW0VWRU5UU11cbiAgICBkZWxldGUgZGlmZltUSVRMRV1cbiAgICByZXR1cm4ge2RpZmYsIHRpdGxlLCByZXBseTogcmVwbHkgfHwgbnVsbCwgZXZlbnRzOiBldmVudHMgfHwgW119XG4gIH1cblxuICBjb25zdHJ1Y3Rvcih2aWV3SWQsIHJlbmRlcmVkKXtcbiAgICB0aGlzLnZpZXdJZCA9IHZpZXdJZFxuICAgIHRoaXMucmVuZGVyZWQgPSB7fVxuICAgIHRoaXMubWVyZ2VEaWZmKHJlbmRlcmVkKVxuICB9XG5cbiAgcGFyZW50Vmlld0lkKCl7IHJldHVybiB0aGlzLnZpZXdJZCB9XG5cbiAgdG9TdHJpbmcob25seUNpZHMpe1xuICAgIHJldHVybiB0aGlzLnJlY3Vyc2l2ZVRvU3RyaW5nKHRoaXMucmVuZGVyZWQsIHRoaXMucmVuZGVyZWRbQ09NUE9ORU5UU10sIG9ubHlDaWRzKVxuICB9XG5cbiAgcmVjdXJzaXZlVG9TdHJpbmcocmVuZGVyZWQsIGNvbXBvbmVudHMgPSByZW5kZXJlZFtDT01QT05FTlRTXSwgb25seUNpZHMpe1xuICAgIG9ubHlDaWRzID0gb25seUNpZHMgPyBuZXcgU2V0KG9ubHlDaWRzKSA6IG51bGxcbiAgICBsZXQgb3V0cHV0ID0ge2J1ZmZlcjogXCJcIiwgY29tcG9uZW50czogY29tcG9uZW50cywgb25seUNpZHM6IG9ubHlDaWRzfVxuICAgIHRoaXMudG9PdXRwdXRCdWZmZXIocmVuZGVyZWQsIG91dHB1dClcbiAgICByZXR1cm4gb3V0cHV0LmJ1ZmZlclxuICB9XG5cbiAgY29tcG9uZW50Q0lEcyhkaWZmKXsgcmV0dXJuIE9iamVjdC5rZXlzKGRpZmZbQ09NUE9ORU5UU10gfHwge30pLm1hcChpID0+IHBhcnNlSW50KGkpKSB9XG5cbiAgaXNDb21wb25lbnRPbmx5RGlmZihkaWZmKXtcbiAgICBpZighZGlmZltDT01QT05FTlRTXSl7IHJldHVybiBmYWxzZSB9XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGRpZmYpLmxlbmd0aCA9PT0gMVxuICB9XG5cbiAgZ2V0Q29tcG9uZW50KGRpZmYsIGNpZCl7IHJldHVybiBkaWZmW0NPTVBPTkVOVFNdW2NpZF0gfVxuXG4gIG1lcmdlRGlmZihkaWZmKXtcbiAgICBsZXQgbmV3YyA9IGRpZmZbQ09NUE9ORU5UU11cbiAgICBsZXQgY2FjaGUgPSB7fVxuICAgIGRlbGV0ZSBkaWZmW0NPTVBPTkVOVFNdXG4gICAgdGhpcy5yZW5kZXJlZCA9IHRoaXMubXV0YWJsZU1lcmdlKHRoaXMucmVuZGVyZWQsIGRpZmYpXG4gICAgdGhpcy5yZW5kZXJlZFtDT01QT05FTlRTXSA9IHRoaXMucmVuZGVyZWRbQ09NUE9ORU5UU10gfHwge31cblxuICAgIGlmKG5ld2Mpe1xuICAgICAgbGV0IG9sZGMgPSB0aGlzLnJlbmRlcmVkW0NPTVBPTkVOVFNdXG5cbiAgICAgIGZvcihsZXQgY2lkIGluIG5ld2Mpe1xuICAgICAgICBuZXdjW2NpZF0gPSB0aGlzLmNhY2hlZEZpbmRDb21wb25lbnQoY2lkLCBuZXdjW2NpZF0sIG9sZGMsIG5ld2MsIGNhY2hlKVxuICAgICAgfVxuXG4gICAgICBmb3IodmFyIGtleSBpbiBuZXdjKXsgb2xkY1trZXldID0gbmV3Y1trZXldIH1cbiAgICAgIGRpZmZbQ09NUE9ORU5UU10gPSBuZXdjXG4gICAgfVxuICB9XG5cbiAgY2FjaGVkRmluZENvbXBvbmVudChjaWQsIGNkaWZmLCBvbGRjLCBuZXdjLCBjYWNoZSl7XG4gICAgaWYoY2FjaGVbY2lkXSl7XG4gICAgICByZXR1cm4gY2FjaGVbY2lkXVxuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgbmRpZmYsIHN0YXQsIHNjaWQgPSBjZGlmZltTVEFUSUNdXG5cbiAgICAgIGlmKHR5cGVvZiAoc2NpZCkgPT09IFwibnVtYmVyXCIpe1xuICAgICAgICBsZXQgdGRpZmZcblxuICAgICAgICBpZihzY2lkID4gMCl7XG4gICAgICAgICAgdGRpZmYgPSB0aGlzLmNhY2hlZEZpbmRDb21wb25lbnQoc2NpZCwgbmV3Y1tzY2lkXSwgb2xkYywgbmV3YywgY2FjaGUpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGRpZmYgPSBvbGRjWy1zY2lkXVxuICAgICAgICB9XG5cbiAgICAgICAgc3RhdCA9IHRkaWZmW1NUQVRJQ11cbiAgICAgICAgbmRpZmYgPSB0aGlzLmNsb25lTWVyZ2UodGRpZmYsIGNkaWZmKVxuICAgICAgICBuZGlmZltTVEFUSUNdID0gc3RhdFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmRpZmYgPSBjZGlmZltTVEFUSUNdICE9PSB1bmRlZmluZWQgPyBjZGlmZiA6IHRoaXMuY2xvbmVNZXJnZShvbGRjW2NpZF0gfHwge30sIGNkaWZmKVxuICAgICAgfVxuXG4gICAgICBjYWNoZVtjaWRdID0gbmRpZmZcbiAgICAgIHJldHVybiBuZGlmZlxuICAgIH1cbiAgfVxuXG4gIG11dGFibGVNZXJnZSh0YXJnZXQsIHNvdXJjZSl7XG4gICAgaWYoc291cmNlW1NUQVRJQ10gIT09IHVuZGVmaW5lZCl7XG4gICAgICByZXR1cm4gc291cmNlXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZG9NdXRhYmxlTWVyZ2UodGFyZ2V0LCBzb3VyY2UpXG4gICAgICByZXR1cm4gdGFyZ2V0XG4gICAgfVxuICB9XG5cbiAgZG9NdXRhYmxlTWVyZ2UodGFyZ2V0LCBzb3VyY2Upe1xuICAgIGZvcihsZXQga2V5IGluIHNvdXJjZSl7XG4gICAgICBsZXQgdmFsID0gc291cmNlW2tleV1cbiAgICAgIGxldCB0YXJnZXRWYWwgPSB0YXJnZXRba2V5XVxuICAgICAgaWYoaXNPYmplY3QodmFsKSAmJiB2YWxbU1RBVElDXSA9PT0gdW5kZWZpbmVkICYmIGlzT2JqZWN0KHRhcmdldFZhbCkpe1xuICAgICAgICB0aGlzLmRvTXV0YWJsZU1lcmdlKHRhcmdldFZhbCwgdmFsKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFyZ2V0W2tleV0gPSB2YWxcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjbG9uZU1lcmdlKHRhcmdldCwgc291cmNlKXtcbiAgICBsZXQgbWVyZ2VkID0gey4uLnRhcmdldCwgLi4uc291cmNlfVxuICAgIGZvcihsZXQga2V5IGluIG1lcmdlZCl7XG4gICAgICBsZXQgdmFsID0gc291cmNlW2tleV1cbiAgICAgIGxldCB0YXJnZXRWYWwgPSB0YXJnZXRba2V5XVxuICAgICAgaWYoaXNPYmplY3QodmFsKSAmJiB2YWxbU1RBVElDXSA9PT0gdW5kZWZpbmVkICYmIGlzT2JqZWN0KHRhcmdldFZhbCkpe1xuICAgICAgICBtZXJnZWRba2V5XSA9IHRoaXMuY2xvbmVNZXJnZSh0YXJnZXRWYWwsIHZhbClcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lcmdlZFxuICB9XG5cbiAgY29tcG9uZW50VG9TdHJpbmcoY2lkKXsgcmV0dXJuIHRoaXMucmVjdXJzaXZlQ0lEVG9TdHJpbmcodGhpcy5yZW5kZXJlZFtDT01QT05FTlRTXSwgY2lkKSB9XG5cbiAgcHJ1bmVDSURzKGNpZHMpe1xuICAgIGNpZHMuZm9yRWFjaChjaWQgPT4gZGVsZXRlIHRoaXMucmVuZGVyZWRbQ09NUE9ORU5UU11bY2lkXSlcbiAgfVxuXG4gIC8vIHByaXZhdGVcblxuICBnZXQoKXsgcmV0dXJuIHRoaXMucmVuZGVyZWQgfVxuXG4gIGlzTmV3RmluZ2VycHJpbnQoZGlmZiA9IHt9KXsgcmV0dXJuICEhZGlmZltTVEFUSUNdIH1cblxuICB0b091dHB1dEJ1ZmZlcihyZW5kZXJlZCwgb3V0cHV0KXtcbiAgICBpZihyZW5kZXJlZFtEWU5BTUlDU10peyByZXR1cm4gdGhpcy5jb21wcmVoZW5zaW9uVG9CdWZmZXIocmVuZGVyZWQsIG91dHB1dCkgfVxuICAgIGxldCB7W1NUQVRJQ106IHN0YXRpY3N9ID0gcmVuZGVyZWRcblxuICAgIG91dHB1dC5idWZmZXIgKz0gc3RhdGljc1swXVxuICAgIGZvcihsZXQgaSA9IDE7IGkgPCBzdGF0aWNzLmxlbmd0aDsgaSsrKXtcbiAgICAgIHRoaXMuZHluYW1pY1RvQnVmZmVyKHJlbmRlcmVkW2kgLSAxXSwgb3V0cHV0KVxuICAgICAgb3V0cHV0LmJ1ZmZlciArPSBzdGF0aWNzW2ldXG4gICAgfVxuICB9XG5cbiAgY29tcHJlaGVuc2lvblRvQnVmZmVyKHJlbmRlcmVkLCBvdXRwdXQpe1xuICAgIGxldCB7W0RZTkFNSUNTXTogZHluYW1pY3MsIFtTVEFUSUNdOiBzdGF0aWNzfSA9IHJlbmRlcmVkXG5cbiAgICBmb3IobGV0IGQgPSAwOyBkIDwgZHluYW1pY3MubGVuZ3RoOyBkKyspe1xuICAgICAgbGV0IGR5bmFtaWMgPSBkeW5hbWljc1tkXVxuICAgICAgb3V0cHV0LmJ1ZmZlciArPSBzdGF0aWNzWzBdXG4gICAgICBmb3IobGV0IGkgPSAxOyBpIDwgc3RhdGljcy5sZW5ndGg7IGkrKyl7XG4gICAgICAgIHRoaXMuZHluYW1pY1RvQnVmZmVyKGR5bmFtaWNbaSAtIDFdLCBvdXRwdXQpXG4gICAgICAgIG91dHB1dC5idWZmZXIgKz0gc3RhdGljc1tpXVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGR5bmFtaWNUb0J1ZmZlcihyZW5kZXJlZCwgb3V0cHV0KXtcbiAgICBpZih0eXBlb2YgKHJlbmRlcmVkKSA9PT0gXCJudW1iZXJcIil7XG4gICAgICBvdXRwdXQuYnVmZmVyICs9IHRoaXMucmVjdXJzaXZlQ0lEVG9TdHJpbmcob3V0cHV0LmNvbXBvbmVudHMsIHJlbmRlcmVkLCBvdXRwdXQub25seUNpZHMpXG4gICAgfSBlbHNlIGlmKGlzT2JqZWN0KHJlbmRlcmVkKSl7XG4gICAgICB0aGlzLnRvT3V0cHV0QnVmZmVyKHJlbmRlcmVkLCBvdXRwdXQpXG4gICAgfSBlbHNlIHtcbiAgICAgIG91dHB1dC5idWZmZXIgKz0gcmVuZGVyZWRcbiAgICB9XG4gIH1cblxuICByZWN1cnNpdmVDSURUb1N0cmluZyhjb21wb25lbnRzLCBjaWQsIG9ubHlDaWRzKXtcbiAgICBsZXQgY29tcG9uZW50ID0gY29tcG9uZW50c1tjaWRdIHx8IGxvZ0Vycm9yKGBubyBjb21wb25lbnQgZm9yIENJRCAke2NpZH1gLCBjb21wb25lbnRzKVxuICAgIGxldCB0ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKVxuICAgIHRlbXBsYXRlLmlubmVySFRNTCA9IHRoaXMucmVjdXJzaXZlVG9TdHJpbmcoY29tcG9uZW50LCBjb21wb25lbnRzLCBvbmx5Q2lkcylcbiAgICBsZXQgY29udGFpbmVyID0gdGVtcGxhdGUuY29udGVudFxuICAgIGxldCBza2lwID0gb25seUNpZHMgJiYgIW9ubHlDaWRzLmhhcyhjaWQpXG5cbiAgICBsZXQgW2hhc0NoaWxkTm9kZXMsIGhhc0NoaWxkQ29tcG9uZW50c10gPVxuICAgICAgQXJyYXkuZnJvbShjb250YWluZXIuY2hpbGROb2RlcykucmVkdWNlKChbaGFzTm9kZXMsIGhhc0NvbXBvbmVudHNdLCBjaGlsZCwgaSkgPT4ge1xuICAgICAgICBpZihjaGlsZC5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpe1xuICAgICAgICAgIGlmKGNoaWxkLmdldEF0dHJpYnV0ZShQSFhfQ09NUE9ORU5UKSl7XG4gICAgICAgICAgICByZXR1cm4gW2hhc05vZGVzLCB0cnVlXVxuICAgICAgICAgIH1cbiAgICAgICAgICBjaGlsZC5zZXRBdHRyaWJ1dGUoUEhYX0NPTVBPTkVOVCwgY2lkKVxuICAgICAgICAgIGlmKCFjaGlsZC5pZCl7IGNoaWxkLmlkID0gYCR7dGhpcy5wYXJlbnRWaWV3SWQoKX0tJHtjaWR9LSR7aX1gIH1cbiAgICAgICAgICBpZihza2lwKXtcbiAgICAgICAgICAgIGNoaWxkLnNldEF0dHJpYnV0ZShQSFhfU0tJUCwgXCJcIilcbiAgICAgICAgICAgIGNoaWxkLmlubmVySFRNTCA9IFwiXCJcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFt0cnVlLCBoYXNDb21wb25lbnRzXVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmKGNoaWxkLm5vZGVWYWx1ZS50cmltKCkgIT09IFwiXCIpe1xuICAgICAgICAgICAgbG9nRXJyb3IoXCJvbmx5IEhUTUwgZWxlbWVudCB0YWdzIGFyZSBhbGxvd2VkIGF0IHRoZSByb290IG9mIGNvbXBvbmVudHMuXFxuXFxuXCIgK1xuICAgICAgICAgICAgICBgZ290OiBcIiR7Y2hpbGQubm9kZVZhbHVlLnRyaW0oKX1cIlxcblxcbmAgK1xuICAgICAgICAgICAgICBcIndpdGhpbjpcXG5cIiwgdGVtcGxhdGUuaW5uZXJIVE1MLnRyaW0oKSlcbiAgICAgICAgICAgIGNoaWxkLnJlcGxhY2VXaXRoKHRoaXMuY3JlYXRlU3BhbihjaGlsZC5ub2RlVmFsdWUsIGNpZCkpXG4gICAgICAgICAgICByZXR1cm4gW3RydWUsIGhhc0NvbXBvbmVudHNdXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNoaWxkLnJlbW92ZSgpXG4gICAgICAgICAgICByZXR1cm4gW2hhc05vZGVzLCBoYXNDb21wb25lbnRzXVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSwgW2ZhbHNlLCBmYWxzZV0pXG5cbiAgICBpZighaGFzQ2hpbGROb2RlcyAmJiAhaGFzQ2hpbGRDb21wb25lbnRzKXtcbiAgICAgIGxvZ0Vycm9yKFwiZXhwZWN0ZWQgYXQgbGVhc3Qgb25lIEhUTUwgZWxlbWVudCB0YWcgaW5zaWRlIGEgY29tcG9uZW50LCBidXQgdGhlIGNvbXBvbmVudCBpcyBlbXB0eTpcXG5cIixcbiAgICAgICAgdGVtcGxhdGUuaW5uZXJIVE1MLnRyaW0oKSlcbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVNwYW4oXCJcIiwgY2lkKS5vdXRlckhUTUxcbiAgICB9IGVsc2UgaWYoIWhhc0NoaWxkTm9kZXMgJiYgaGFzQ2hpbGRDb21wb25lbnRzKXtcbiAgICAgIGxvZ0Vycm9yKFwiZXhwZWN0ZWQgYXQgbGVhc3Qgb25lIEhUTUwgZWxlbWVudCB0YWcgZGlyZWN0bHkgaW5zaWRlIGEgY29tcG9uZW50LCBidXQgb25seSBzdWJjb21wb25lbnRzIHdlcmUgZm91bmQuIEEgY29tcG9uZW50IG11c3QgcmVuZGVyIGF0IGxlYXN0IG9uZSBIVE1MIHRhZyBkaXJlY3RseSBpbnNpZGUgaXRzZWxmLlwiLFxuICAgICAgICB0ZW1wbGF0ZS5pbm5lckhUTUwudHJpbSgpKVxuICAgICAgcmV0dXJuIHRlbXBsYXRlLmlubmVySFRNTFxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGVtcGxhdGUuaW5uZXJIVE1MXG4gICAgfVxuICB9XG5cbiAgY3JlYXRlU3Bhbih0ZXh0LCBjaWQpe1xuICAgIGxldCBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIilcbiAgICBzcGFuLmlubmVyVGV4dCA9IHRleHRcbiAgICBzcGFuLnNldEF0dHJpYnV0ZShQSFhfQ09NUE9ORU5ULCBjaWQpXG4gICAgcmV0dXJuIHNwYW5cbiAgfVxufVxuIiwgImxldCB2aWV3SG9va0lEID0gMVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmlld0hvb2sge1xuICBzdGF0aWMgbWFrZUlEKCl7IHJldHVybiB2aWV3SG9va0lEKysgfVxuICBzdGF0aWMgZWxlbWVudElEKGVsKXsgcmV0dXJuIGVsLnBoeEhvb2tJZCB9XG5cbiAgY29uc3RydWN0b3IodmlldywgZWwsIGNhbGxiYWNrcyl7XG4gICAgdGhpcy5fX3ZpZXcgPSB2aWV3XG4gICAgdGhpcy5fX2xpdmVTb2NrZXQgPSB2aWV3LmxpdmVTb2NrZXRcbiAgICB0aGlzLl9fY2FsbGJhY2tzID0gY2FsbGJhY2tzXG4gICAgdGhpcy5fX2xpc3RlbmVycyA9IG5ldyBTZXQoKVxuICAgIHRoaXMuX19pc0Rpc2Nvbm5lY3RlZCA9IGZhbHNlXG4gICAgdGhpcy5lbCA9IGVsXG4gICAgdGhpcy5lbC5waHhIb29rSWQgPSB0aGlzLmNvbnN0cnVjdG9yLm1ha2VJRCgpXG4gICAgZm9yKGxldCBrZXkgaW4gdGhpcy5fX2NhbGxiYWNrcyl7IHRoaXNba2V5XSA9IHRoaXMuX19jYWxsYmFja3Nba2V5XSB9XG4gIH1cblxuICBfX21vdW50ZWQoKXsgdGhpcy5tb3VudGVkICYmIHRoaXMubW91bnRlZCgpIH1cbiAgX191cGRhdGVkKCl7IHRoaXMudXBkYXRlZCAmJiB0aGlzLnVwZGF0ZWQoKSB9XG4gIF9fYmVmb3JlVXBkYXRlKCl7IHRoaXMuYmVmb3JlVXBkYXRlICYmIHRoaXMuYmVmb3JlVXBkYXRlKCkgfVxuICBfX2Rlc3Ryb3llZCgpeyB0aGlzLmRlc3Ryb3llZCAmJiB0aGlzLmRlc3Ryb3llZCgpIH1cbiAgX19yZWNvbm5lY3RlZCgpe1xuICAgIGlmKHRoaXMuX19pc0Rpc2Nvbm5lY3RlZCl7XG4gICAgICB0aGlzLl9faXNEaXNjb25uZWN0ZWQgPSBmYWxzZVxuICAgICAgdGhpcy5yZWNvbm5lY3RlZCAmJiB0aGlzLnJlY29ubmVjdGVkKClcbiAgICB9XG4gIH1cbiAgX19kaXNjb25uZWN0ZWQoKXtcbiAgICB0aGlzLl9faXNEaXNjb25uZWN0ZWQgPSB0cnVlXG4gICAgdGhpcy5kaXNjb25uZWN0ZWQgJiYgdGhpcy5kaXNjb25uZWN0ZWQoKVxuICB9XG5cbiAgcHVzaEV2ZW50KGV2ZW50LCBwYXlsb2FkID0ge30sIG9uUmVwbHkgPSBmdW5jdGlvbiAoKXsgfSl7XG4gICAgcmV0dXJuIHRoaXMuX192aWV3LnB1c2hIb29rRXZlbnQobnVsbCwgZXZlbnQsIHBheWxvYWQsIG9uUmVwbHkpXG4gIH1cblxuICBwdXNoRXZlbnRUbyhwaHhUYXJnZXQsIGV2ZW50LCBwYXlsb2FkID0ge30sIG9uUmVwbHkgPSBmdW5jdGlvbiAoKXsgfSl7XG4gICAgcmV0dXJuIHRoaXMuX192aWV3LndpdGhpblRhcmdldHMocGh4VGFyZ2V0LCAodmlldywgdGFyZ2V0Q3R4KSA9PiB7XG4gICAgICByZXR1cm4gdmlldy5wdXNoSG9va0V2ZW50KHRhcmdldEN0eCwgZXZlbnQsIHBheWxvYWQsIG9uUmVwbHkpXG4gICAgfSlcbiAgfVxuXG4gIGhhbmRsZUV2ZW50KGV2ZW50LCBjYWxsYmFjayl7XG4gICAgbGV0IGNhbGxiYWNrUmVmID0gKGN1c3RvbUV2ZW50LCBieXBhc3MpID0+IGJ5cGFzcyA/IGV2ZW50IDogY2FsbGJhY2soY3VzdG9tRXZlbnQuZGV0YWlsKVxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKGBwaHg6aG9vazoke2V2ZW50fWAsIGNhbGxiYWNrUmVmKVxuICAgIHRoaXMuX19saXN0ZW5lcnMuYWRkKGNhbGxiYWNrUmVmKVxuICAgIHJldHVybiBjYWxsYmFja1JlZlxuICB9XG5cbiAgcmVtb3ZlSGFuZGxlRXZlbnQoY2FsbGJhY2tSZWYpe1xuICAgIGxldCBldmVudCA9IGNhbGxiYWNrUmVmKG51bGwsIHRydWUpXG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoYHBoeDpob29rOiR7ZXZlbnR9YCwgY2FsbGJhY2tSZWYpXG4gICAgdGhpcy5fX2xpc3RlbmVycy5kZWxldGUoY2FsbGJhY2tSZWYpXG4gIH1cblxuICB1cGxvYWQobmFtZSwgZmlsZXMpe1xuICAgIHJldHVybiB0aGlzLl9fdmlldy5kaXNwYXRjaFVwbG9hZHMobmFtZSwgZmlsZXMpXG4gIH1cblxuICB1cGxvYWRUbyhwaHhUYXJnZXQsIG5hbWUsIGZpbGVzKXtcbiAgICByZXR1cm4gdGhpcy5fX3ZpZXcud2l0aGluVGFyZ2V0cyhwaHhUYXJnZXQsIHZpZXcgPT4gdmlldy5kaXNwYXRjaFVwbG9hZHMobmFtZSwgZmlsZXMpKVxuICB9XG5cbiAgX19jbGVhbnVwX18oKXtcbiAgICB0aGlzLl9fbGlzdGVuZXJzLmZvckVhY2goY2FsbGJhY2tSZWYgPT4gdGhpcy5yZW1vdmVIYW5kbGVFdmVudChjYWxsYmFja1JlZikpXG4gIH1cbn1cbiIsICJpbXBvcnQge1xuICBCRUZPUkVfVU5MT0FEX0xPQURFUl9USU1FT1VULFxuICBDSEVDS0FCTEVfSU5QVVRTLFxuICBDT05TRUNVVElWRV9SRUxPQURTLFxuICBQSFhfQVVUT19SRUNPVkVSLFxuICBQSFhfQ09NUE9ORU5ULFxuICBQSFhfQ09OTkVDVEVEX0NMQVNTLFxuICBQSFhfRElTQUJMRV9XSVRILFxuICBQSFhfRElTQUJMRV9XSVRIX1JFU1RPUkUsXG4gIFBIWF9ESVNBQkxFRCxcbiAgUEhYX0RJU0NPTk5FQ1RFRF9DTEFTUyxcbiAgUEhYX0VWRU5UX0NMQVNTRVMsXG4gIFBIWF9FUlJPUl9DTEFTUyxcbiAgUEhYX0ZFRURCQUNLX0ZPUixcbiAgUEhYX0hBU19TVUJNSVRURUQsXG4gIFBIWF9IT09LLFxuICBQSFhfUEFHRV9MT0FESU5HLFxuICBQSFhfUEFSRU5UX0lELFxuICBQSFhfUFJPR1JFU1MsXG4gIFBIWF9SRUFET05MWSxcbiAgUEhYX1JFRixcbiAgUEhYX1JPT1RfSUQsXG4gIFBIWF9TRVNTSU9OLFxuICBQSFhfU1RBVElDLFxuICBQSFhfVFJBQ0tfU1RBVElDLFxuICBQSFhfVFJBQ0tfVVBMT0FEUyxcbiAgUEhYX1VQREFURSxcbiAgUEhYX1VQTE9BRF9SRUYsXG4gIFBIWF9WSUVXX1NFTEVDVE9SLFxuICBQVVNIX1RJTUVPVVQsXG59IGZyb20gXCIuL2NvbnN0YW50c1wiXG5cbmltcG9ydCB7XG4gIGNsb25lLFxuICBjbG9zZXN0UGh4QmluZGluZyxcbiAgaXNFbXB0eSxcbiAgaXNFcXVhbE9iaixcbiAgbG9nRXJyb3IsXG4gIG1heWJlXG59IGZyb20gXCIuL3V0aWxzXCJcblxuaW1wb3J0IEJyb3dzZXIgZnJvbSBcIi4vYnJvd3NlclwiXG5pbXBvcnQgRE9NIGZyb20gXCIuL2RvbVwiXG5pbXBvcnQgRE9NUGF0Y2ggZnJvbSBcIi4vZG9tX3BhdGNoXCJcbmltcG9ydCBMaXZlVXBsb2FkZXIgZnJvbSBcIi4vbGl2ZV91cGxvYWRlclwiXG5pbXBvcnQgUmVuZGVyZWQgZnJvbSBcIi4vcmVuZGVyZWRcIlxuaW1wb3J0IFZpZXdIb29rIGZyb20gXCIuL3ZpZXdfaG9va1wiXG5cbmxldCBzZXJpYWxpemVGb3JtID0gKGZvcm0sIG1ldGEgPSB7fSkgPT4ge1xuICBsZXQgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoZm9ybSlcbiAgbGV0IHRvUmVtb3ZlID0gW11cblxuICBmb3JtRGF0YS5mb3JFYWNoKCh2YWwsIGtleSwgX2luZGV4KSA9PiB7XG4gICAgaWYodmFsIGluc3RhbmNlb2YgRmlsZSl7IHRvUmVtb3ZlLnB1c2goa2V5KSB9XG4gIH0pXG5cbiAgLy8gQ2xlYW51cCBhZnRlciBidWlsZGluZyBmaWxlRGF0YVxuICB0b1JlbW92ZS5mb3JFYWNoKGtleSA9PiBmb3JtRGF0YS5kZWxldGUoa2V5KSlcblxuICBsZXQgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpXG4gIGZvcihsZXQgW2tleSwgdmFsXSBvZiBmb3JtRGF0YS5lbnRyaWVzKCkpeyBwYXJhbXMuYXBwZW5kKGtleSwgdmFsKSB9XG4gIGZvcihsZXQgbWV0YUtleSBpbiBtZXRhKXsgcGFyYW1zLmFwcGVuZChtZXRhS2V5LCBtZXRhW21ldGFLZXldKSB9XG5cbiAgcmV0dXJuIHBhcmFtcy50b1N0cmluZygpXG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZpZXcge1xuICBjb25zdHJ1Y3RvcihlbCwgbGl2ZVNvY2tldCwgcGFyZW50VmlldywgZmxhc2gpe1xuICAgIHRoaXMubGl2ZVNvY2tldCA9IGxpdmVTb2NrZXRcbiAgICB0aGlzLmZsYXNoID0gZmxhc2hcbiAgICB0aGlzLnBhcmVudCA9IHBhcmVudFZpZXdcbiAgICB0aGlzLnJvb3QgPSBwYXJlbnRWaWV3ID8gcGFyZW50Vmlldy5yb290IDogdGhpc1xuICAgIHRoaXMuZWwgPSBlbFxuICAgIHRoaXMuaWQgPSB0aGlzLmVsLmlkXG4gICAgdGhpcy5yZWYgPSAwXG4gICAgdGhpcy5jaGlsZEpvaW5zID0gMFxuICAgIHRoaXMubG9hZGVyVGltZXIgPSBudWxsXG4gICAgdGhpcy5wZW5kaW5nRGlmZnMgPSBbXVxuICAgIHRoaXMucHJ1bmluZ0NJRHMgPSBbXVxuICAgIHRoaXMucmVkaXJlY3QgPSBmYWxzZVxuICAgIHRoaXMuaHJlZiA9IG51bGxcbiAgICB0aGlzLmpvaW5Db3VudCA9IHRoaXMucGFyZW50ID8gdGhpcy5wYXJlbnQuam9pbkNvdW50IC0gMSA6IDBcbiAgICB0aGlzLmpvaW5QZW5kaW5nID0gdHJ1ZVxuICAgIHRoaXMuZGVzdHJveWVkID0gZmFsc2VcbiAgICB0aGlzLmpvaW5DYWxsYmFjayA9IGZ1bmN0aW9uICgpeyB9XG4gICAgdGhpcy5zdG9wQ2FsbGJhY2sgPSBmdW5jdGlvbiAoKXsgfVxuICAgIHRoaXMucGVuZGluZ0pvaW5PcHMgPSB0aGlzLnBhcmVudCA/IG51bGwgOiBbXVxuICAgIHRoaXMudmlld0hvb2tzID0ge31cbiAgICB0aGlzLnVwbG9hZGVycyA9IHt9XG4gICAgdGhpcy5mb3JtU3VibWl0cyA9IFtdXG4gICAgdGhpcy5jaGlsZHJlbiA9IHRoaXMucGFyZW50ID8gbnVsbCA6IHt9XG4gICAgdGhpcy5yb290LmNoaWxkcmVuW3RoaXMuaWRdID0ge31cbiAgICB0aGlzLmNoYW5uZWwgPSB0aGlzLmxpdmVTb2NrZXQuY2hhbm5lbChgbHY6JHt0aGlzLmlkfWAsICgpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlZGlyZWN0OiB0aGlzLnJlZGlyZWN0ID8gdGhpcy5ocmVmIDogdW5kZWZpbmVkLFxuICAgICAgICB1cmw6IHRoaXMucmVkaXJlY3QgPyB1bmRlZmluZWQgOiB0aGlzLmhyZWYgfHwgdW5kZWZpbmVkLFxuICAgICAgICBwYXJhbXM6IHRoaXMuY29ubmVjdFBhcmFtcygpLFxuICAgICAgICBzZXNzaW9uOiB0aGlzLmdldFNlc3Npb24oKSxcbiAgICAgICAgc3RhdGljOiB0aGlzLmdldFN0YXRpYygpLFxuICAgICAgICBmbGFzaDogdGhpcy5mbGFzaFxuICAgICAgfVxuICAgIH0pXG4gICAgdGhpcy5zaG93TG9hZGVyKHRoaXMubGl2ZVNvY2tldC5sb2FkZXJUaW1lb3V0KVxuICAgIHRoaXMuYmluZENoYW5uZWwoKVxuICB9XG5cbiAgc2V0SHJlZihocmVmKXsgdGhpcy5ocmVmID0gaHJlZiB9XG5cbiAgc2V0UmVkaXJlY3QoaHJlZil7XG4gICAgdGhpcy5yZWRpcmVjdCA9IHRydWVcbiAgICB0aGlzLmhyZWYgPSBocmVmXG4gIH1cblxuICBpc01haW4oKXsgcmV0dXJuIHRoaXMubGl2ZVNvY2tldC5tYWluID09PSB0aGlzIH1cblxuICBjb25uZWN0UGFyYW1zKCl7XG4gICAgbGV0IHBhcmFtcyA9IHRoaXMubGl2ZVNvY2tldC5wYXJhbXModGhpcy5lbClcbiAgICBsZXQgbWFuaWZlc3QgPVxuICAgICAgRE9NLmFsbChkb2N1bWVudCwgYFske3RoaXMuYmluZGluZyhQSFhfVFJBQ0tfU1RBVElDKX1dYClcbiAgICAgICAgLm1hcChub2RlID0+IG5vZGUuc3JjIHx8IG5vZGUuaHJlZikuZmlsdGVyKHVybCA9PiB0eXBlb2YgKHVybCkgPT09IFwic3RyaW5nXCIpXG5cbiAgICBpZihtYW5pZmVzdC5sZW5ndGggPiAwKXsgcGFyYW1zW1wiX3RyYWNrX3N0YXRpY1wiXSA9IG1hbmlmZXN0IH1cbiAgICBwYXJhbXNbXCJfbW91bnRzXCJdID0gdGhpcy5qb2luQ291bnRcblxuICAgIHJldHVybiBwYXJhbXNcbiAgfVxuXG4gIGlzQ29ubmVjdGVkKCl7IHJldHVybiB0aGlzLmNoYW5uZWwuY2FuUHVzaCgpIH1cblxuICBnZXRTZXNzaW9uKCl7IHJldHVybiB0aGlzLmVsLmdldEF0dHJpYnV0ZShQSFhfU0VTU0lPTikgfVxuXG4gIGdldFN0YXRpYygpe1xuICAgIGxldCB2YWwgPSB0aGlzLmVsLmdldEF0dHJpYnV0ZShQSFhfU1RBVElDKVxuICAgIHJldHVybiB2YWwgPT09IFwiXCIgPyBudWxsIDogdmFsXG4gIH1cblxuICBkZXN0cm95KGNhbGxiYWNrID0gZnVuY3Rpb24gKCl7IH0pe1xuICAgIHRoaXMuZGVzdHJveUFsbENoaWxkcmVuKClcbiAgICB0aGlzLmRlc3Ryb3llZCA9IHRydWVcbiAgICBkZWxldGUgdGhpcy5yb290LmNoaWxkcmVuW3RoaXMuaWRdXG4gICAgaWYodGhpcy5wYXJlbnQpeyBkZWxldGUgdGhpcy5yb290LmNoaWxkcmVuW3RoaXMucGFyZW50LmlkXVt0aGlzLmlkXSB9XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMubG9hZGVyVGltZXIpXG4gICAgbGV0IG9uRmluaXNoZWQgPSAoKSA9PiB7XG4gICAgICBjYWxsYmFjaygpXG4gICAgICBmb3IobGV0IGlkIGluIHRoaXMudmlld0hvb2tzKXtcbiAgICAgICAgdGhpcy5kZXN0cm95SG9vayh0aGlzLnZpZXdIb29rc1tpZF0pXG4gICAgICB9XG4gICAgfVxuXG4gICAgRE9NLm1hcmtQaHhDaGlsZERlc3Ryb3llZCh0aGlzLmVsKVxuXG4gICAgdGhpcy5sb2coXCJkZXN0cm95ZWRcIiwgKCkgPT4gW1widGhlIGNoaWxkIGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgcGFyZW50XCJdKVxuICAgIHRoaXMuY2hhbm5lbC5sZWF2ZSgpXG4gICAgICAucmVjZWl2ZShcIm9rXCIsIG9uRmluaXNoZWQpXG4gICAgICAucmVjZWl2ZShcImVycm9yXCIsIG9uRmluaXNoZWQpXG4gICAgICAucmVjZWl2ZShcInRpbWVvdXRcIiwgb25GaW5pc2hlZClcbiAgfVxuXG4gIHNldENvbnRhaW5lckNsYXNzZXMoLi4uY2xhc3Nlcyl7XG4gICAgdGhpcy5lbC5jbGFzc0xpc3QucmVtb3ZlKFxuICAgICAgUEhYX0NPTk5FQ1RFRF9DTEFTUyxcbiAgICAgIFBIWF9ESVNDT05ORUNURURfQ0xBU1MsXG4gICAgICBQSFhfRVJST1JfQ0xBU1NcbiAgICApXG4gICAgdGhpcy5lbC5jbGFzc0xpc3QuYWRkKC4uLmNsYXNzZXMpXG4gIH1cblxuICBpc0xvYWRpbmcoKXsgcmV0dXJuIHRoaXMuZWwuY2xhc3NMaXN0LmNvbnRhaW5zKFBIWF9ESVNDT05ORUNURURfQ0xBU1MpIH1cblxuICBzaG93TG9hZGVyKHRpbWVvdXQpe1xuICAgIGNsZWFyVGltZW91dCh0aGlzLmxvYWRlclRpbWVyKVxuICAgIGlmKHRpbWVvdXQpe1xuICAgICAgdGhpcy5sb2FkZXJUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zaG93TG9hZGVyKCksIHRpbWVvdXQpXG4gICAgfSBlbHNlIHtcbiAgICAgIGZvcihsZXQgaWQgaW4gdGhpcy52aWV3SG9va3MpeyB0aGlzLnZpZXdIb29rc1tpZF0uX19kaXNjb25uZWN0ZWQoKSB9XG4gICAgICB0aGlzLnNldENvbnRhaW5lckNsYXNzZXMoUEhYX0RJU0NPTk5FQ1RFRF9DTEFTUylcbiAgICB9XG4gIH1cblxuICBoaWRlTG9hZGVyKCl7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMubG9hZGVyVGltZXIpXG4gICAgdGhpcy5zZXRDb250YWluZXJDbGFzc2VzKFBIWF9DT05ORUNURURfQ0xBU1MpXG4gIH1cblxuICB0cmlnZ2VyUmVjb25uZWN0ZWQoKXtcbiAgICBmb3IobGV0IGlkIGluIHRoaXMudmlld0hvb2tzKXsgdGhpcy52aWV3SG9va3NbaWRdLl9fcmVjb25uZWN0ZWQoKSB9XG4gIH1cblxuICBsb2coa2luZCwgbXNnQ2FsbGJhY2spe1xuICAgIHRoaXMubGl2ZVNvY2tldC5sb2codGhpcywga2luZCwgbXNnQ2FsbGJhY2spXG4gIH1cblxuICB3aXRoaW5UYXJnZXRzKHBoeFRhcmdldCwgY2FsbGJhY2spe1xuICAgIGlmKHBoeFRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KXtcbiAgICAgIHJldHVybiB0aGlzLmxpdmVTb2NrZXQub3duZXIocGh4VGFyZ2V0LCB2aWV3ID0+IGNhbGxiYWNrKHZpZXcsIHBoeFRhcmdldCkpXG4gICAgfVxuXG4gICAgaWYoL14oMHxbMS05XVxcZCopJC8udGVzdChwaHhUYXJnZXQpKXtcbiAgICAgIGxldCB0YXJnZXRzID0gRE9NLmZpbmRDb21wb25lbnROb2RlTGlzdCh0aGlzLmVsLCBwaHhUYXJnZXQpXG4gICAgICBpZih0YXJnZXRzLmxlbmd0aCA9PT0gMCl7XG4gICAgICAgIGxvZ0Vycm9yKGBubyBjb21wb25lbnQgZm91bmQgbWF0Y2hpbmcgcGh4LXRhcmdldCBvZiAke3BoeFRhcmdldH1gKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FsbGJhY2sodGhpcywgdGFyZ2V0c1swXSlcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IHRhcmdldHMgPSBBcnJheS5mcm9tKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwocGh4VGFyZ2V0KSlcbiAgICAgIGlmKHRhcmdldHMubGVuZ3RoID09PSAwKXsgbG9nRXJyb3IoYG5vdGhpbmcgZm91bmQgbWF0Y2hpbmcgdGhlIHBoeC10YXJnZXQgc2VsZWN0b3IgXCIke3BoeFRhcmdldH1cImApIH1cbiAgICAgIHRhcmdldHMuZm9yRWFjaCh0YXJnZXQgPT4gdGhpcy5saXZlU29ja2V0Lm93bmVyKHRhcmdldCwgdmlldyA9PiBjYWxsYmFjayh2aWV3LCB0YXJnZXQpKSlcbiAgICB9XG4gIH1cblxuICBhcHBseURpZmYodHlwZSwgcmF3RGlmZiwgY2FsbGJhY2spe1xuICAgIHRoaXMubG9nKHR5cGUsICgpID0+IFtcIlwiLCBjbG9uZShyYXdEaWZmKV0pXG4gICAgbGV0IHtkaWZmLCByZXBseSwgZXZlbnRzLCB0aXRsZX0gPSBSZW5kZXJlZC5leHRyYWN0KHJhd0RpZmYpXG4gICAgaWYodGl0bGUpeyBET00ucHV0VGl0bGUodGl0bGUpIH1cblxuICAgIGNhbGxiYWNrKHtkaWZmLCByZXBseSwgZXZlbnRzfSlcbiAgICByZXR1cm4gcmVwbHlcbiAgfVxuXG4gIG9uSm9pbihyZXNwKXtcbiAgICBsZXQge3JlbmRlcmVkLCBjb250YWluZXJ9ID0gcmVzcFxuICAgIGlmKGNvbnRhaW5lcil7XG4gICAgICBsZXQgW3RhZywgYXR0cnNdID0gY29udGFpbmVyXG4gICAgICB0aGlzLmVsID0gRE9NLnJlcGxhY2VSb290Q29udGFpbmVyKHRoaXMuZWwsIHRhZywgYXR0cnMpXG4gICAgfVxuICAgIHRoaXMuY2hpbGRKb2lucyA9IDBcbiAgICB0aGlzLmpvaW5QZW5kaW5nID0gdHJ1ZVxuICAgIHRoaXMuZmxhc2ggPSBudWxsXG5cbiAgICBCcm93c2VyLmRyb3BMb2NhbCh0aGlzLmxpdmVTb2NrZXQubG9jYWxTdG9yYWdlLCB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUsIENPTlNFQ1VUSVZFX1JFTE9BRFMpXG4gICAgdGhpcy5hcHBseURpZmYoXCJtb3VudFwiLCByZW5kZXJlZCwgKHtkaWZmLCBldmVudHN9KSA9PiB7XG4gICAgICB0aGlzLnJlbmRlcmVkID0gbmV3IFJlbmRlcmVkKHRoaXMuaWQsIGRpZmYpXG4gICAgICBsZXQgaHRtbCA9IHRoaXMucmVuZGVyQ29udGFpbmVyKG51bGwsIFwiam9pblwiKVxuICAgICAgdGhpcy5kcm9wUGVuZGluZ1JlZnMoKVxuICAgICAgbGV0IGZvcm1zID0gdGhpcy5mb3Jtc0ZvclJlY292ZXJ5KGh0bWwpXG4gICAgICB0aGlzLmpvaW5Db3VudCsrXG5cbiAgICAgIGlmKGZvcm1zLmxlbmd0aCA+IDApe1xuICAgICAgICBmb3Jtcy5mb3JFYWNoKChmb3JtLCBpKSA9PiB7XG4gICAgICAgICAgdGhpcy5wdXNoRm9ybVJlY292ZXJ5KGZvcm0sIHJlc3AgPT4ge1xuICAgICAgICAgICAgaWYoaSA9PT0gZm9ybXMubGVuZ3RoIC0gMSl7XG4gICAgICAgICAgICAgIHRoaXMub25Kb2luQ29tcGxldGUocmVzcCwgaHRtbCwgZXZlbnRzKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm9uSm9pbkNvbXBsZXRlKHJlc3AsIGh0bWwsIGV2ZW50cylcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgZHJvcFBlbmRpbmdSZWZzKCl7IERPTS5hbGwodGhpcy5lbCwgYFske1BIWF9SRUZ9XWAsIGVsID0+IGVsLnJlbW92ZUF0dHJpYnV0ZShQSFhfUkVGKSkgfVxuXG4gIG9uSm9pbkNvbXBsZXRlKHtsaXZlX3BhdGNofSwgaHRtbCwgZXZlbnRzKXtcbiAgICAvLyBJbiBvcmRlciB0byBwcm92aWRlIGEgYmV0dGVyIGV4cGVyaWVuY2UsIHdlIHdhbnQgdG8gam9pblxuICAgIC8vIGFsbCBMaXZlVmlld3MgZmlyc3QgYW5kIG9ubHkgdGhlbiBhcHBseSB0aGVpciBwYXRjaGVzLlxuICAgIGlmKHRoaXMuam9pbkNvdW50ID4gMSB8fCAodGhpcy5wYXJlbnQgJiYgIXRoaXMucGFyZW50LmlzSm9pblBlbmRpbmcoKSkpe1xuICAgICAgcmV0dXJuIHRoaXMuYXBwbHlKb2luUGF0Y2gobGl2ZV9wYXRjaCwgaHRtbCwgZXZlbnRzKVxuICAgIH1cblxuICAgIC8vIE9uZSBkb3duc2lkZSBvZiB0aGlzIGFwcHJvYWNoIGlzIHRoYXQgd2UgbmVlZCB0byBmaW5kIHBoeENoaWxkcmVuXG4gICAgLy8gaW4gdGhlIGh0bWwgZnJhZ21lbnQsIGluc3RlYWQgb2YgZGlyZWN0bHkgb24gdGhlIERPTS4gVGhlIGZyYWdtZW50XG4gICAgLy8gYWxzbyBkb2VzIG5vdCBpbmNsdWRlIFBIWF9TVEFUSUMsIHNvIHdlIG5lZWQgdG8gY29weSBpdCBvdmVyIGZyb21cbiAgICAvLyB0aGUgRE9NLlxuICAgIGxldCBuZXdDaGlsZHJlbiA9IERPTS5maW5kUGh4Q2hpbGRyZW5JbkZyYWdtZW50KGh0bWwsIHRoaXMuaWQpLmZpbHRlcih0b0VsID0+IHtcbiAgICAgIGxldCBmcm9tRWwgPSB0b0VsLmlkICYmIHRoaXMuZWwucXVlcnlTZWxlY3RvcihgW2lkPVwiJHt0b0VsLmlkfVwiXWApXG4gICAgICBsZXQgcGh4U3RhdGljID0gZnJvbUVsICYmIGZyb21FbC5nZXRBdHRyaWJ1dGUoUEhYX1NUQVRJQylcbiAgICAgIGlmKHBoeFN0YXRpYyl7IHRvRWwuc2V0QXR0cmlidXRlKFBIWF9TVEFUSUMsIHBoeFN0YXRpYykgfVxuICAgICAgcmV0dXJuIHRoaXMuam9pbkNoaWxkKHRvRWwpXG4gICAgfSlcblxuICAgIGlmKG5ld0NoaWxkcmVuLmxlbmd0aCA9PT0gMCl7XG4gICAgICBpZih0aGlzLnBhcmVudCl7XG4gICAgICAgIHRoaXMucm9vdC5wZW5kaW5nSm9pbk9wcy5wdXNoKFt0aGlzLCAoKSA9PiB0aGlzLmFwcGx5Sm9pblBhdGNoKGxpdmVfcGF0Y2gsIGh0bWwsIGV2ZW50cyldKVxuICAgICAgICB0aGlzLnBhcmVudC5hY2tKb2luKHRoaXMpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm9uQWxsQ2hpbGRKb2luc0NvbXBsZXRlKClcbiAgICAgICAgdGhpcy5hcHBseUpvaW5QYXRjaChsaXZlX3BhdGNoLCBodG1sLCBldmVudHMpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucm9vdC5wZW5kaW5nSm9pbk9wcy5wdXNoKFt0aGlzLCAoKSA9PiB0aGlzLmFwcGx5Sm9pblBhdGNoKGxpdmVfcGF0Y2gsIGh0bWwsIGV2ZW50cyldKVxuICAgIH1cbiAgfVxuXG4gIGF0dGFjaFRydWVEb2NFbCgpe1xuICAgIHRoaXMuZWwgPSBET00uYnlJZCh0aGlzLmlkKVxuICAgIHRoaXMuZWwuc2V0QXR0cmlidXRlKFBIWF9ST09UX0lELCB0aGlzLnJvb3QuaWQpXG4gIH1cblxuICBkaXNwYXRjaEV2ZW50cyhldmVudHMpe1xuICAgIGV2ZW50cy5mb3JFYWNoKChbZXZlbnQsIHBheWxvYWRdKSA9PiB7XG4gICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoYHBoeDpob29rOiR7ZXZlbnR9YCwge2RldGFpbDogcGF5bG9hZH0pKVxuICAgIH0pXG4gIH1cblxuICBhcHBseUpvaW5QYXRjaChsaXZlX3BhdGNoLCBodG1sLCBldmVudHMpe1xuICAgIHRoaXMuYXR0YWNoVHJ1ZURvY0VsKClcbiAgICBsZXQgcGF0Y2ggPSBuZXcgRE9NUGF0Y2godGhpcywgdGhpcy5lbCwgdGhpcy5pZCwgaHRtbCwgbnVsbClcbiAgICBwYXRjaC5tYXJrUHJ1bmFibGVDb250ZW50Rm9yUmVtb3ZhbCgpXG4gICAgdGhpcy5wZXJmb3JtUGF0Y2gocGF0Y2gsIGZhbHNlKVxuICAgIHRoaXMuam9pbk5ld0NoaWxkcmVuKClcbiAgICBET00uYWxsKHRoaXMuZWwsIGBbJHt0aGlzLmJpbmRpbmcoUEhYX0hPT0spfV0sIFtkYXRhLXBoeC0ke1BIWF9IT09LfV1gLCBob29rRWwgPT4ge1xuICAgICAgbGV0IGhvb2sgPSB0aGlzLmFkZEhvb2soaG9va0VsKVxuICAgICAgaWYoaG9vayl7IGhvb2suX19tb3VudGVkKCkgfVxuICAgIH0pXG5cbiAgICB0aGlzLmpvaW5QZW5kaW5nID0gZmFsc2VcbiAgICB0aGlzLmRpc3BhdGNoRXZlbnRzKGV2ZW50cylcbiAgICB0aGlzLmFwcGx5UGVuZGluZ1VwZGF0ZXMoKVxuXG4gICAgaWYobGl2ZV9wYXRjaCl7XG4gICAgICBsZXQge2tpbmQsIHRvfSA9IGxpdmVfcGF0Y2hcbiAgICAgIHRoaXMubGl2ZVNvY2tldC5oaXN0b3J5UGF0Y2godG8sIGtpbmQpXG4gICAgfVxuICAgIHRoaXMuaGlkZUxvYWRlcigpXG4gICAgaWYodGhpcy5qb2luQ291bnQgPiAxKXsgdGhpcy50cmlnZ2VyUmVjb25uZWN0ZWQoKSB9XG4gICAgdGhpcy5zdG9wQ2FsbGJhY2soKVxuICB9XG5cbiAgdHJpZ2dlckJlZm9yZVVwZGF0ZUhvb2soZnJvbUVsLCB0b0VsKXtcbiAgICB0aGlzLmxpdmVTb2NrZXQudHJpZ2dlckRPTShcIm9uQmVmb3JlRWxVcGRhdGVkXCIsIFtmcm9tRWwsIHRvRWxdKVxuICAgIGxldCBob29rID0gdGhpcy5nZXRIb29rKGZyb21FbClcbiAgICBsZXQgaXNJZ25vcmVkID0gaG9vayAmJiBET00uaXNJZ25vcmVkKGZyb21FbCwgdGhpcy5iaW5kaW5nKFBIWF9VUERBVEUpKVxuICAgIGlmKGhvb2sgJiYgIWZyb21FbC5pc0VxdWFsTm9kZSh0b0VsKSAmJiAhKGlzSWdub3JlZCAmJiBpc0VxdWFsT2JqKGZyb21FbC5kYXRhc2V0LCB0b0VsLmRhdGFzZXQpKSl7XG4gICAgICBob29rLl9fYmVmb3JlVXBkYXRlKClcbiAgICAgIHJldHVybiBob29rXG4gICAgfVxuICB9XG5cbiAgcGVyZm9ybVBhdGNoKHBhdGNoLCBwcnVuZUNpZHMpe1xuICAgIGxldCBkZXN0cm95ZWRDSURzID0gW11cbiAgICBsZXQgcGh4Q2hpbGRyZW5BZGRlZCA9IGZhbHNlXG4gICAgbGV0IHVwZGF0ZWRIb29rSWRzID0gbmV3IFNldCgpXG5cbiAgICBwYXRjaC5hZnRlcihcImFkZGVkXCIsIGVsID0+IHtcbiAgICAgIHRoaXMubGl2ZVNvY2tldC50cmlnZ2VyRE9NKFwib25Ob2RlQWRkZWRcIiwgW2VsXSlcblxuICAgICAgbGV0IG5ld0hvb2sgPSB0aGlzLmFkZEhvb2soZWwpXG4gICAgICBpZihuZXdIb29rKXsgbmV3SG9vay5fX21vdW50ZWQoKSB9XG4gICAgfSlcblxuICAgIHBhdGNoLmFmdGVyKFwicGh4Q2hpbGRBZGRlZFwiLCBfZWwgPT4gcGh4Q2hpbGRyZW5BZGRlZCA9IHRydWUpXG5cbiAgICBwYXRjaC5iZWZvcmUoXCJ1cGRhdGVkXCIsIChmcm9tRWwsIHRvRWwpID0+IHtcbiAgICAgIGxldCBob29rID0gdGhpcy50cmlnZ2VyQmVmb3JlVXBkYXRlSG9vayhmcm9tRWwsIHRvRWwpXG4gICAgICBpZihob29rKXsgdXBkYXRlZEhvb2tJZHMuYWRkKGZyb21FbC5pZCkgfVxuICAgIH0pXG5cbiAgICBwYXRjaC5hZnRlcihcInVwZGF0ZWRcIiwgZWwgPT4ge1xuICAgICAgaWYodXBkYXRlZEhvb2tJZHMuaGFzKGVsLmlkKSl7IHRoaXMuZ2V0SG9vayhlbCkuX191cGRhdGVkKCkgfVxuICAgIH0pXG5cbiAgICBwYXRjaC5hZnRlcihcImRpc2NhcmRlZFwiLCAoZWwpID0+IHtcbiAgICAgIGxldCBjaWQgPSB0aGlzLmNvbXBvbmVudElEKGVsKVxuICAgICAgaWYodHlwZW9mIChjaWQpID09PSBcIm51bWJlclwiICYmIGRlc3Ryb3llZENJRHMuaW5kZXhPZihjaWQpID09PSAtMSl7IGRlc3Ryb3llZENJRHMucHVzaChjaWQpIH1cbiAgICAgIGxldCBob29rID0gdGhpcy5nZXRIb29rKGVsKVxuICAgICAgaG9vayAmJiB0aGlzLmRlc3Ryb3lIb29rKGhvb2spXG4gICAgfSlcblxuICAgIHBhdGNoLnBlcmZvcm0oKVxuXG4gICAgLy8gV2Ugc2hvdWxkIG5vdCBwcnVuZUNpZHMgb24gam9pbnMuIE90aGVyd2lzZSwgaW4gY2FzZSBvZlxuICAgIC8vIHJlam9pbnMsIHdlIG1heSBub3RpZnkgY2lkcyB0aGF0IG5vIGxvbmdlciBiZWxvbmcgdG8gdGhlXG4gICAgLy8gY3VycmVudCBMaXZlVmlldyB0byBiZSByZW1vdmVkLlxuICAgIGlmKHBydW5lQ2lkcyl7XG4gICAgICB0aGlzLm1heWJlUHVzaENvbXBvbmVudHNEZXN0cm95ZWQoZGVzdHJveWVkQ0lEcylcbiAgICB9XG5cbiAgICByZXR1cm4gcGh4Q2hpbGRyZW5BZGRlZFxuICB9XG5cbiAgam9pbk5ld0NoaWxkcmVuKCl7XG4gICAgRE9NLmZpbmRQaHhDaGlsZHJlbih0aGlzLmVsLCB0aGlzLmlkKS5mb3JFYWNoKGVsID0+IHRoaXMuam9pbkNoaWxkKGVsKSlcbiAgfVxuXG4gIGdldENoaWxkQnlJZChpZCl7IHJldHVybiB0aGlzLnJvb3QuY2hpbGRyZW5bdGhpcy5pZF1baWRdIH1cblxuICBnZXREZXNjZW5kZW50QnlFbChlbCl7XG4gICAgaWYoZWwuaWQgPT09IHRoaXMuaWQpe1xuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW5bZWwuZ2V0QXR0cmlidXRlKFBIWF9QQVJFTlRfSUQpXVtlbC5pZF1cbiAgICB9XG4gIH1cblxuICBkZXN0cm95RGVzY2VuZGVudChpZCl7XG4gICAgZm9yKGxldCBwYXJlbnRJZCBpbiB0aGlzLnJvb3QuY2hpbGRyZW4pe1xuICAgICAgZm9yKGxldCBjaGlsZElkIGluIHRoaXMucm9vdC5jaGlsZHJlbltwYXJlbnRJZF0pe1xuICAgICAgICBpZihjaGlsZElkID09PSBpZCl7IHJldHVybiB0aGlzLnJvb3QuY2hpbGRyZW5bcGFyZW50SWRdW2NoaWxkSWRdLmRlc3Ryb3koKSB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgam9pbkNoaWxkKGVsKXtcbiAgICBsZXQgY2hpbGQgPSB0aGlzLmdldENoaWxkQnlJZChlbC5pZClcbiAgICBpZighY2hpbGQpe1xuICAgICAgbGV0IHZpZXcgPSBuZXcgVmlldyhlbCwgdGhpcy5saXZlU29ja2V0LCB0aGlzKVxuICAgICAgdGhpcy5yb290LmNoaWxkcmVuW3RoaXMuaWRdW3ZpZXcuaWRdID0gdmlld1xuICAgICAgdmlldy5qb2luKClcbiAgICAgIHRoaXMuY2hpbGRKb2lucysrXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfVxuXG4gIGlzSm9pblBlbmRpbmcoKXsgcmV0dXJuIHRoaXMuam9pblBlbmRpbmcgfVxuXG4gIGFja0pvaW4oX2NoaWxkKXtcbiAgICB0aGlzLmNoaWxkSm9pbnMtLVxuXG4gICAgaWYodGhpcy5jaGlsZEpvaW5zID09PSAwKXtcbiAgICAgIGlmKHRoaXMucGFyZW50KXtcbiAgICAgICAgdGhpcy5wYXJlbnQuYWNrSm9pbih0aGlzKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vbkFsbENoaWxkSm9pbnNDb21wbGV0ZSgpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25BbGxDaGlsZEpvaW5zQ29tcGxldGUoKXtcbiAgICB0aGlzLmpvaW5DYWxsYmFjaygpXG4gICAgdGhpcy5wZW5kaW5nSm9pbk9wcy5mb3JFYWNoKChbdmlldywgb3BdKSA9PiB7XG4gICAgICBpZighdmlldy5pc0Rlc3Ryb3llZCgpKXsgb3AoKSB9XG4gICAgfSlcbiAgICB0aGlzLnBlbmRpbmdKb2luT3BzID0gW11cbiAgfVxuXG4gIHVwZGF0ZShkaWZmLCBldmVudHMpe1xuICAgIGlmKHRoaXMuaXNKb2luUGVuZGluZygpIHx8IHRoaXMubGl2ZVNvY2tldC5oYXNQZW5kaW5nTGluaygpKXtcbiAgICAgIHJldHVybiB0aGlzLnBlbmRpbmdEaWZmcy5wdXNoKHtkaWZmLCBldmVudHN9KVxuICAgIH1cblxuICAgIHRoaXMucmVuZGVyZWQubWVyZ2VEaWZmKGRpZmYpXG4gICAgbGV0IHBoeENoaWxkcmVuQWRkZWQgPSBmYWxzZVxuXG4gICAgLy8gV2hlbiB0aGUgZGlmZiBvbmx5IGNvbnRhaW5zIGNvbXBvbmVudCBkaWZmcywgdGhlbiB3YWxrIGNvbXBvbmVudHNcbiAgICAvLyBhbmQgcGF0Y2ggb25seSB0aGUgcGFyZW50IGNvbXBvbmVudCBjb250YWluZXJzIGZvdW5kIGluIHRoZSBkaWZmLlxuICAgIC8vIE90aGVyd2lzZSwgcGF0Y2ggZW50aXJlIExWIGNvbnRhaW5lci5cbiAgICBpZih0aGlzLnJlbmRlcmVkLmlzQ29tcG9uZW50T25seURpZmYoZGlmZikpe1xuICAgICAgdGhpcy5saXZlU29ja2V0LnRpbWUoXCJjb21wb25lbnQgcGF0Y2ggY29tcGxldGVcIiwgKCkgPT4ge1xuICAgICAgICBsZXQgcGFyZW50Q2lkcyA9IERPTS5maW5kUGFyZW50Q0lEcyh0aGlzLmVsLCB0aGlzLnJlbmRlcmVkLmNvbXBvbmVudENJRHMoZGlmZikpXG4gICAgICAgIHBhcmVudENpZHMuZm9yRWFjaChwYXJlbnRDSUQgPT4ge1xuICAgICAgICAgIGlmKHRoaXMuY29tcG9uZW50UGF0Y2godGhpcy5yZW5kZXJlZC5nZXRDb21wb25lbnQoZGlmZiwgcGFyZW50Q0lEKSwgcGFyZW50Q0lEKSl7IHBoeENoaWxkcmVuQWRkZWQgPSB0cnVlIH1cbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfSBlbHNlIGlmKCFpc0VtcHR5KGRpZmYpKXtcbiAgICAgIHRoaXMubGl2ZVNvY2tldC50aW1lKFwiZnVsbCBwYXRjaCBjb21wbGV0ZVwiLCAoKSA9PiB7XG4gICAgICAgIGxldCBodG1sID0gdGhpcy5yZW5kZXJDb250YWluZXIoZGlmZiwgXCJ1cGRhdGVcIilcbiAgICAgICAgbGV0IHBhdGNoID0gbmV3IERPTVBhdGNoKHRoaXMsIHRoaXMuZWwsIHRoaXMuaWQsIGh0bWwsIG51bGwpXG4gICAgICAgIHBoeENoaWxkcmVuQWRkZWQgPSB0aGlzLnBlcmZvcm1QYXRjaChwYXRjaCwgdHJ1ZSlcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50cyhldmVudHMpXG4gICAgaWYocGh4Q2hpbGRyZW5BZGRlZCl7IHRoaXMuam9pbk5ld0NoaWxkcmVuKCkgfVxuICB9XG5cbiAgcmVuZGVyQ29udGFpbmVyKGRpZmYsIGtpbmQpe1xuICAgIHJldHVybiB0aGlzLmxpdmVTb2NrZXQudGltZShgdG9TdHJpbmcgZGlmZiAoJHtraW5kfSlgLCAoKSA9PiB7XG4gICAgICBsZXQgdGFnID0gdGhpcy5lbC50YWdOYW1lXG4gICAgICAvLyBEb24ndCBza2lwIGFueSBjb21wb25lbnQgaW4gdGhlIGRpZmYgbm9yIGFueSBtYXJrZWQgYXMgcHJ1bmVkXG4gICAgICAvLyAoYXMgdGhleSBtYXkgaGF2ZSBiZWVuIGFkZGVkIGJhY2spXG4gICAgICBsZXQgY2lkcyA9IGRpZmYgPyB0aGlzLnJlbmRlcmVkLmNvbXBvbmVudENJRHMoZGlmZikuY29uY2F0KHRoaXMucHJ1bmluZ0NJRHMpIDogbnVsbFxuICAgICAgbGV0IGh0bWwgPSB0aGlzLnJlbmRlcmVkLnRvU3RyaW5nKGNpZHMpXG4gICAgICByZXR1cm4gYDwke3RhZ30+JHtodG1sfTwvJHt0YWd9PmBcbiAgICB9KVxuICB9XG5cbiAgY29tcG9uZW50UGF0Y2goZGlmZiwgY2lkKXtcbiAgICBpZihpc0VtcHR5KGRpZmYpKSByZXR1cm4gZmFsc2VcbiAgICBsZXQgaHRtbCA9IHRoaXMucmVuZGVyZWQuY29tcG9uZW50VG9TdHJpbmcoY2lkKVxuICAgIGxldCBwYXRjaCA9IG5ldyBET01QYXRjaCh0aGlzLCB0aGlzLmVsLCB0aGlzLmlkLCBodG1sLCBjaWQpXG4gICAgbGV0IGNoaWxkcmVuQWRkZWQgPSB0aGlzLnBlcmZvcm1QYXRjaChwYXRjaCwgdHJ1ZSlcbiAgICByZXR1cm4gY2hpbGRyZW5BZGRlZFxuICB9XG5cbiAgZ2V0SG9vayhlbCl7IHJldHVybiB0aGlzLnZpZXdIb29rc1tWaWV3SG9vay5lbGVtZW50SUQoZWwpXSB9XG5cbiAgYWRkSG9vayhlbCl7XG4gICAgaWYoVmlld0hvb2suZWxlbWVudElEKGVsKSB8fCAhZWwuZ2V0QXR0cmlidXRlKXsgcmV0dXJuIH1cbiAgICBsZXQgaG9va05hbWUgPSBlbC5nZXRBdHRyaWJ1dGUoYGRhdGEtcGh4LSR7UEhYX0hPT0t9YCkgfHwgZWwuZ2V0QXR0cmlidXRlKHRoaXMuYmluZGluZyhQSFhfSE9PSykpXG4gICAgaWYoaG9va05hbWUgJiYgIXRoaXMub3duc0VsZW1lbnQoZWwpKXsgcmV0dXJuIH1cbiAgICBsZXQgY2FsbGJhY2tzID0gdGhpcy5saXZlU29ja2V0LmdldEhvb2tDYWxsYmFja3MoaG9va05hbWUpXG5cbiAgICBpZihjYWxsYmFja3Mpe1xuICAgICAgaWYoIWVsLmlkKXsgbG9nRXJyb3IoYG5vIERPTSBJRCBmb3IgaG9vayBcIiR7aG9va05hbWV9XCIuIEhvb2tzIHJlcXVpcmUgYSB1bmlxdWUgSUQgb24gZWFjaCBlbGVtZW50LmAsIGVsKSB9XG4gICAgICBsZXQgaG9vayA9IG5ldyBWaWV3SG9vayh0aGlzLCBlbCwgY2FsbGJhY2tzKVxuICAgICAgdGhpcy52aWV3SG9va3NbVmlld0hvb2suZWxlbWVudElEKGhvb2suZWwpXSA9IGhvb2tcbiAgICAgIHJldHVybiBob29rXG4gICAgfSBlbHNlIGlmKGhvb2tOYW1lICE9PSBudWxsKXtcbiAgICAgIGxvZ0Vycm9yKGB1bmtub3duIGhvb2sgZm91bmQgZm9yIFwiJHtob29rTmFtZX1cImAsIGVsKVxuICAgIH1cbiAgfVxuXG4gIGRlc3Ryb3lIb29rKGhvb2spe1xuICAgIGhvb2suX19kZXN0cm95ZWQoKVxuICAgIGhvb2suX19jbGVhbnVwX18oKVxuICAgIGRlbGV0ZSB0aGlzLnZpZXdIb29rc1tWaWV3SG9vay5lbGVtZW50SUQoaG9vay5lbCldXG4gIH1cblxuICBhcHBseVBlbmRpbmdVcGRhdGVzKCl7XG4gICAgdGhpcy5wZW5kaW5nRGlmZnMuZm9yRWFjaCgoe2RpZmYsIGV2ZW50c30pID0+IHRoaXMudXBkYXRlKGRpZmYsIGV2ZW50cykpXG4gICAgdGhpcy5wZW5kaW5nRGlmZnMgPSBbXVxuICB9XG5cbiAgb25DaGFubmVsKGV2ZW50LCBjYil7XG4gICAgdGhpcy5saXZlU29ja2V0Lm9uQ2hhbm5lbCh0aGlzLmNoYW5uZWwsIGV2ZW50LCByZXNwID0+IHtcbiAgICAgIGlmKHRoaXMuaXNKb2luUGVuZGluZygpKXtcbiAgICAgICAgdGhpcy5yb290LnBlbmRpbmdKb2luT3BzLnB1c2goW3RoaXMsICgpID0+IGNiKHJlc3ApXSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNiKHJlc3ApXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGJpbmRDaGFubmVsKCl7XG4gICAgLy8gVGhlIGRpZmYgZXZlbnQgc2hvdWxkIGJlIGhhbmRsZWQgYnkgdGhlIHJlZ3VsYXIgdXBkYXRlIG9wZXJhdGlvbnMuXG4gICAgLy8gQWxsIG90aGVyIG9wZXJhdGlvbnMgYXJlIHF1ZXVlZCB0byBiZSBhcHBsaWVkIG9ubHkgYWZ0ZXIgam9pbi5cbiAgICB0aGlzLmxpdmVTb2NrZXQub25DaGFubmVsKHRoaXMuY2hhbm5lbCwgXCJkaWZmXCIsIChyYXdEaWZmKSA9PiB7XG4gICAgICB0aGlzLmFwcGx5RGlmZihcInVwZGF0ZVwiLCByYXdEaWZmLCAoe2RpZmYsIGV2ZW50c30pID0+IHRoaXMudXBkYXRlKGRpZmYsIGV2ZW50cykpXG4gICAgfSlcbiAgICB0aGlzLm9uQ2hhbm5lbChcInJlZGlyZWN0XCIsICh7dG8sIGZsYXNofSkgPT4gdGhpcy5vblJlZGlyZWN0KHt0bywgZmxhc2h9KSlcbiAgICB0aGlzLm9uQ2hhbm5lbChcImxpdmVfcGF0Y2hcIiwgKHJlZGlyKSA9PiB0aGlzLm9uTGl2ZVBhdGNoKHJlZGlyKSlcbiAgICB0aGlzLm9uQ2hhbm5lbChcImxpdmVfcmVkaXJlY3RcIiwgKHJlZGlyKSA9PiB0aGlzLm9uTGl2ZVJlZGlyZWN0KHJlZGlyKSlcbiAgICB0aGlzLmNoYW5uZWwub25FcnJvcihyZWFzb24gPT4gdGhpcy5vbkVycm9yKHJlYXNvbikpXG4gICAgdGhpcy5jaGFubmVsLm9uQ2xvc2UocmVhc29uID0+IHRoaXMub25DbG9zZShyZWFzb24pKVxuICB9XG5cbiAgZGVzdHJveUFsbENoaWxkcmVuKCl7XG4gICAgZm9yKGxldCBpZCBpbiB0aGlzLnJvb3QuY2hpbGRyZW5bdGhpcy5pZF0pe1xuICAgICAgdGhpcy5nZXRDaGlsZEJ5SWQoaWQpLmRlc3Ryb3koKVxuICAgIH1cbiAgfVxuXG4gIG9uTGl2ZVJlZGlyZWN0KHJlZGlyKXtcbiAgICBsZXQge3RvLCBraW5kLCBmbGFzaH0gPSByZWRpclxuICAgIGxldCB1cmwgPSB0aGlzLmV4cGFuZFVSTCh0bylcbiAgICB0aGlzLmxpdmVTb2NrZXQuaGlzdG9yeVJlZGlyZWN0KHVybCwga2luZCwgZmxhc2gpXG4gIH1cblxuICBvbkxpdmVQYXRjaChyZWRpcil7XG4gICAgbGV0IHt0bywga2luZH0gPSByZWRpclxuICAgIHRoaXMuaHJlZiA9IHRoaXMuZXhwYW5kVVJMKHRvKVxuICAgIHRoaXMubGl2ZVNvY2tldC5oaXN0b3J5UGF0Y2godG8sIGtpbmQpXG4gIH1cblxuICBleHBhbmRVUkwodG8pe1xuICAgIHJldHVybiB0by5zdGFydHNXaXRoKFwiL1wiKSA/IGAke3dpbmRvdy5sb2NhdGlvbi5wcm90b2NvbH0vLyR7d2luZG93LmxvY2F0aW9uLmhvc3R9JHt0b31gIDogdG9cbiAgfVxuXG4gIG9uUmVkaXJlY3Qoe3RvLCBmbGFzaH0peyB0aGlzLmxpdmVTb2NrZXQucmVkaXJlY3QodG8sIGZsYXNoKSB9XG5cbiAgaXNEZXN0cm95ZWQoKXsgcmV0dXJuIHRoaXMuZGVzdHJveWVkIH1cblxuICBqb2luKGNhbGxiYWNrKXtcbiAgICBpZighdGhpcy5wYXJlbnQpe1xuICAgICAgdGhpcy5zdG9wQ2FsbGJhY2sgPSB0aGlzLmxpdmVTb2NrZXQud2l0aFBhZ2VMb2FkaW5nKHt0bzogdGhpcy5ocmVmLCBraW5kOiBcImluaXRpYWxcIn0pXG4gICAgfVxuICAgIHRoaXMuam9pbkNhbGxiYWNrID0gKCkgPT4gY2FsbGJhY2sgJiYgY2FsbGJhY2sodGhpcy5qb2luQ291bnQpXG4gICAgdGhpcy5saXZlU29ja2V0LndyYXBQdXNoKHRoaXMsIHt0aW1lb3V0OiBmYWxzZX0sICgpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmNoYW5uZWwuam9pbigpXG4gICAgICAgIC5yZWNlaXZlKFwib2tcIiwgZGF0YSA9PiAhdGhpcy5pc0Rlc3Ryb3llZCgpICYmIHRoaXMub25Kb2luKGRhdGEpKVxuICAgICAgICAucmVjZWl2ZShcImVycm9yXCIsIHJlc3AgPT4gIXRoaXMuaXNEZXN0cm95ZWQoKSAmJiB0aGlzLm9uSm9pbkVycm9yKHJlc3ApKVxuICAgICAgICAucmVjZWl2ZShcInRpbWVvdXRcIiwgKCkgPT4gIXRoaXMuaXNEZXN0cm95ZWQoKSAmJiB0aGlzLm9uSm9pbkVycm9yKHtyZWFzb246IFwidGltZW91dFwifSkpXG4gICAgfSlcbiAgfVxuXG4gIG9uSm9pbkVycm9yKHJlc3Ape1xuICAgIGlmKHJlc3AucmVhc29uID09PSBcInVuYXV0aG9yaXplZFwiIHx8IHJlc3AucmVhc29uID09PSBcInN0YWxlXCIpe1xuICAgICAgdGhpcy5sb2coXCJlcnJvclwiLCAoKSA9PiBbXCJ1bmF1dGhvcml6ZWQgbGl2ZV9yZWRpcmVjdC4gRmFsbGluZyBiYWNrIHRvIHBhZ2UgcmVxdWVzdFwiLCByZXNwXSlcbiAgICAgIHJldHVybiB0aGlzLm9uUmVkaXJlY3Qoe3RvOiB0aGlzLmhyZWZ9KVxuICAgIH1cbiAgICBpZihyZXNwLnJlZGlyZWN0IHx8IHJlc3AubGl2ZV9yZWRpcmVjdCl7XG4gICAgICB0aGlzLmpvaW5QZW5kaW5nID0gZmFsc2VcbiAgICAgIHRoaXMuY2hhbm5lbC5sZWF2ZSgpXG4gICAgfVxuICAgIGlmKHJlc3AucmVkaXJlY3QpeyByZXR1cm4gdGhpcy5vblJlZGlyZWN0KHJlc3AucmVkaXJlY3QpIH1cbiAgICBpZihyZXNwLmxpdmVfcmVkaXJlY3QpeyByZXR1cm4gdGhpcy5vbkxpdmVSZWRpcmVjdChyZXNwLmxpdmVfcmVkaXJlY3QpIH1cbiAgICB0aGlzLmxvZyhcImVycm9yXCIsICgpID0+IFtcInVuYWJsZSB0byBqb2luXCIsIHJlc3BdKVxuICAgIHJldHVybiB0aGlzLmxpdmVTb2NrZXQucmVsb2FkV2l0aEppdHRlcih0aGlzKVxuICB9XG5cbiAgb25DbG9zZShyZWFzb24pe1xuICAgIGlmKHRoaXMuaXNEZXN0cm95ZWQoKSl7IHJldHVybiB9XG4gICAgaWYoKHRoaXMuaXNKb2luUGVuZGluZygpICYmIGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSAhPT0gXCJoaWRkZW5cIikgfHxcbiAgICAgICh0aGlzLmxpdmVTb2NrZXQuaGFzUGVuZGluZ0xpbmsoKSAmJiByZWFzb24gIT09IFwibGVhdmVcIikpe1xuXG4gICAgICByZXR1cm4gdGhpcy5saXZlU29ja2V0LnJlbG9hZFdpdGhKaXR0ZXIodGhpcylcbiAgICB9XG4gICAgdGhpcy5kZXN0cm95QWxsQ2hpbGRyZW4oKVxuICAgIHRoaXMubGl2ZVNvY2tldC5kcm9wQWN0aXZlRWxlbWVudCh0aGlzKVxuICAgIC8vIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgY2FuIGJlIG51bGwgaW4gSW50ZXJuZXQgRXhwbG9yZXIgMTFcbiAgICBpZihkb2N1bWVudC5hY3RpdmVFbGVtZW50KXsgZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5ibHVyKCkgfVxuICAgIGlmKHRoaXMubGl2ZVNvY2tldC5pc1VubG9hZGVkKCkpe1xuICAgICAgdGhpcy5zaG93TG9hZGVyKEJFRk9SRV9VTkxPQURfTE9BREVSX1RJTUVPVVQpXG4gICAgfVxuICB9XG5cbiAgb25FcnJvcihyZWFzb24pe1xuICAgIHRoaXMub25DbG9zZShyZWFzb24pXG4gICAgdGhpcy5sb2coXCJlcnJvclwiLCAoKSA9PiBbXCJ2aWV3IGNyYXNoZWRcIiwgcmVhc29uXSlcbiAgICBpZighdGhpcy5saXZlU29ja2V0LmlzVW5sb2FkZWQoKSl7IHRoaXMuZGlzcGxheUVycm9yKCkgfVxuICB9XG5cbiAgZGlzcGxheUVycm9yKCl7XG4gICAgaWYodGhpcy5pc01haW4oKSl7IERPTS5kaXNwYXRjaEV2ZW50KHdpbmRvdywgXCJwaHg6cGFnZS1sb2FkaW5nLXN0YXJ0XCIsIHt0bzogdGhpcy5ocmVmLCBraW5kOiBcImVycm9yXCJ9KSB9XG4gICAgdGhpcy5zaG93TG9hZGVyKClcbiAgICB0aGlzLnNldENvbnRhaW5lckNsYXNzZXMoUEhYX0RJU0NPTk5FQ1RFRF9DTEFTUywgUEhYX0VSUk9SX0NMQVNTKVxuICB9XG5cbiAgcHVzaFdpdGhSZXBseShyZWZHZW5lcmF0b3IsIGV2ZW50LCBwYXlsb2FkLCBvblJlcGx5ID0gZnVuY3Rpb24gKCl7IH0pe1xuICAgIGlmKCF0aGlzLmlzQ29ubmVjdGVkKCkpeyByZXR1cm4gfVxuXG4gICAgbGV0IFtyZWYsIFtlbF1dID0gcmVmR2VuZXJhdG9yID8gcmVmR2VuZXJhdG9yKCkgOiBbbnVsbCwgW11dXG4gICAgbGV0IG9uTG9hZGluZ0RvbmUgPSBmdW5jdGlvbiAoKXsgfVxuICAgIGlmKGVsICYmIChlbC5nZXRBdHRyaWJ1dGUodGhpcy5iaW5kaW5nKFBIWF9QQUdFX0xPQURJTkcpKSAhPT0gbnVsbCkpe1xuICAgICAgb25Mb2FkaW5nRG9uZSA9IHRoaXMubGl2ZVNvY2tldC53aXRoUGFnZUxvYWRpbmcoe2tpbmQ6IFwiZWxlbWVudFwiLCB0YXJnZXQ6IGVsfSlcbiAgICB9XG5cbiAgICBpZih0eXBlb2YgKHBheWxvYWQuY2lkKSAhPT0gXCJudW1iZXJcIil7IGRlbGV0ZSBwYXlsb2FkLmNpZCB9XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMubGl2ZVNvY2tldC53cmFwUHVzaCh0aGlzLCB7dGltZW91dDogdHJ1ZX0sICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hhbm5lbC5wdXNoKGV2ZW50LCBwYXlsb2FkLCBQVVNIX1RJTUVPVVQpLnJlY2VpdmUoXCJva1wiLCByZXNwID0+IHtcbiAgICAgICAgICBsZXQgaG9va1JlcGx5ID0gbnVsbFxuICAgICAgICAgIGlmKHJlZiAhPT0gbnVsbCl7IHRoaXMudW5kb1JlZnMocmVmKSB9XG4gICAgICAgICAgaWYocmVzcC5kaWZmKXtcbiAgICAgICAgICAgIGhvb2tSZXBseSA9IHRoaXMuYXBwbHlEaWZmKFwidXBkYXRlXCIsIHJlc3AuZGlmZiwgKHtkaWZmLCBldmVudHN9KSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMudXBkYXRlKGRpZmYsIGV2ZW50cylcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmKHJlc3AucmVkaXJlY3QpeyB0aGlzLm9uUmVkaXJlY3QocmVzcC5yZWRpcmVjdCkgfVxuICAgICAgICAgIGlmKHJlc3AubGl2ZV9wYXRjaCl7IHRoaXMub25MaXZlUGF0Y2gocmVzcC5saXZlX3BhdGNoKSB9XG4gICAgICAgICAgaWYocmVzcC5saXZlX3JlZGlyZWN0KXsgdGhpcy5vbkxpdmVSZWRpcmVjdChyZXNwLmxpdmVfcmVkaXJlY3QpIH1cbiAgICAgICAgICBvbkxvYWRpbmdEb25lKClcbiAgICAgICAgICBvblJlcGx5KHJlc3AsIGhvb2tSZXBseSlcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgKVxuICB9XG5cbiAgdW5kb1JlZnMocmVmKXtcbiAgICBET00uYWxsKHRoaXMuZWwsIGBbJHtQSFhfUkVGfT1cIiR7cmVmfVwiXWAsIGVsID0+IHtcbiAgICAgIGxldCBkaXNhYmxlZFZhbCA9IGVsLmdldEF0dHJpYnV0ZShQSFhfRElTQUJMRUQpXG4gICAgICAvLyByZW1vdmUgcmVmc1xuICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKFBIWF9SRUYpXG4gICAgICAvLyByZXN0b3JlIGlucHV0c1xuICAgICAgaWYoZWwuZ2V0QXR0cmlidXRlKFBIWF9SRUFET05MWSkgIT09IG51bGwpe1xuICAgICAgICBlbC5yZWFkT25seSA9IGZhbHNlXG4gICAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZShQSFhfUkVBRE9OTFkpXG4gICAgICB9XG4gICAgICBpZihkaXNhYmxlZFZhbCAhPT0gbnVsbCl7XG4gICAgICAgIGVsLmRpc2FibGVkID0gZGlzYWJsZWRWYWwgPT09IFwidHJ1ZVwiID8gdHJ1ZSA6IGZhbHNlXG4gICAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZShQSFhfRElTQUJMRUQpXG4gICAgICB9XG4gICAgICAvLyByZW1vdmUgY2xhc3Nlc1xuICAgICAgUEhYX0VWRU5UX0NMQVNTRVMuZm9yRWFjaChjbGFzc05hbWUgPT4gRE9NLnJlbW92ZUNsYXNzKGVsLCBjbGFzc05hbWUpKVxuICAgICAgLy8gcmVzdG9yZSBkaXNhYmxlc1xuICAgICAgbGV0IGRpc2FibGVSZXN0b3JlID0gZWwuZ2V0QXR0cmlidXRlKFBIWF9ESVNBQkxFX1dJVEhfUkVTVE9SRSlcbiAgICAgIGlmKGRpc2FibGVSZXN0b3JlICE9PSBudWxsKXtcbiAgICAgICAgZWwuaW5uZXJUZXh0ID0gZGlzYWJsZVJlc3RvcmVcbiAgICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKFBIWF9ESVNBQkxFX1dJVEhfUkVTVE9SRSlcbiAgICAgIH1cbiAgICAgIGxldCB0b0VsID0gRE9NLnByaXZhdGUoZWwsIFBIWF9SRUYpXG4gICAgICBpZih0b0VsKXtcbiAgICAgICAgbGV0IGhvb2sgPSB0aGlzLnRyaWdnZXJCZWZvcmVVcGRhdGVIb29rKGVsLCB0b0VsKVxuICAgICAgICBET01QYXRjaC5wYXRjaEVsKGVsLCB0b0VsLCB0aGlzLmxpdmVTb2NrZXQuZ2V0QWN0aXZlRWxlbWVudCgpKVxuICAgICAgICBpZihob29rKXsgaG9vay5fX3VwZGF0ZWQoKSB9XG4gICAgICAgIERPTS5kZWxldGVQcml2YXRlKGVsLCBQSFhfUkVGKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBwdXRSZWYoZWxlbWVudHMsIGV2ZW50KXtcbiAgICBsZXQgbmV3UmVmID0gdGhpcy5yZWYrK1xuICAgIGxldCBkaXNhYmxlV2l0aCA9IHRoaXMuYmluZGluZyhQSFhfRElTQUJMRV9XSVRIKVxuXG4gICAgZWxlbWVudHMuZm9yRWFjaChlbCA9PiB7XG4gICAgICBlbC5jbGFzc0xpc3QuYWRkKGBwaHgtJHtldmVudH0tbG9hZGluZ2ApXG4gICAgICBlbC5zZXRBdHRyaWJ1dGUoUEhYX1JFRiwgbmV3UmVmKVxuICAgICAgbGV0IGRpc2FibGVUZXh0ID0gZWwuZ2V0QXR0cmlidXRlKGRpc2FibGVXaXRoKVxuICAgICAgaWYoZGlzYWJsZVRleHQgIT09IG51bGwpe1xuICAgICAgICBpZighZWwuZ2V0QXR0cmlidXRlKFBIWF9ESVNBQkxFX1dJVEhfUkVTVE9SRSkpe1xuICAgICAgICAgIGVsLnNldEF0dHJpYnV0ZShQSFhfRElTQUJMRV9XSVRIX1JFU1RPUkUsIGVsLmlubmVyVGV4dClcbiAgICAgICAgfVxuICAgICAgICBlbC5pbm5lclRleHQgPSBkaXNhYmxlVGV4dFxuICAgICAgfVxuICAgIH0pXG4gICAgcmV0dXJuIFtuZXdSZWYsIGVsZW1lbnRzXVxuICB9XG5cbiAgY29tcG9uZW50SUQoZWwpe1xuICAgIGxldCBjaWQgPSBlbC5nZXRBdHRyaWJ1dGUgJiYgZWwuZ2V0QXR0cmlidXRlKFBIWF9DT01QT05FTlQpXG4gICAgcmV0dXJuIGNpZCA/IHBhcnNlSW50KGNpZCkgOiBudWxsXG4gIH1cblxuICB0YXJnZXRDb21wb25lbnRJRCh0YXJnZXQsIHRhcmdldEN0eCl7XG4gICAgaWYodGFyZ2V0LmdldEF0dHJpYnV0ZSh0aGlzLmJpbmRpbmcoXCJ0YXJnZXRcIikpKXtcbiAgICAgIHJldHVybiB0aGlzLmNsb3Nlc3RDb21wb25lbnRJRCh0YXJnZXRDdHgpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICB9XG5cbiAgY2xvc2VzdENvbXBvbmVudElEKHRhcmdldEN0eCl7XG4gICAgaWYodGFyZ2V0Q3R4KXtcbiAgICAgIHJldHVybiBtYXliZSh0YXJnZXRDdHguY2xvc2VzdChgWyR7UEhYX0NPTVBPTkVOVH1dYCksIGVsID0+IHRoaXMub3duc0VsZW1lbnQoZWwpICYmIHRoaXMuY29tcG9uZW50SUQoZWwpKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cbiAgfVxuXG4gIHB1c2hIb29rRXZlbnQodGFyZ2V0Q3R4LCBldmVudCwgcGF5bG9hZCwgb25SZXBseSl7XG4gICAgaWYoIXRoaXMuaXNDb25uZWN0ZWQoKSl7XG4gICAgICB0aGlzLmxvZyhcImhvb2tcIiwgKCkgPT4gW1widW5hYmxlIHRvIHB1c2ggaG9vayBldmVudC4gTGl2ZVZpZXcgbm90IGNvbm5lY3RlZFwiLCBldmVudCwgcGF5bG9hZF0pXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgbGV0IFtyZWYsIGVsc10gPSB0aGlzLnB1dFJlZihbXSwgXCJob29rXCIpXG4gICAgdGhpcy5wdXNoV2l0aFJlcGx5KCgpID0+IFtyZWYsIGVsc10sIFwiZXZlbnRcIiwge1xuICAgICAgdHlwZTogXCJob29rXCIsXG4gICAgICBldmVudDogZXZlbnQsXG4gICAgICB2YWx1ZTogcGF5bG9hZCxcbiAgICAgIGNpZDogdGhpcy5jbG9zZXN0Q29tcG9uZW50SUQodGFyZ2V0Q3R4KVxuICAgIH0sIChyZXNwLCByZXBseSkgPT4gb25SZXBseShyZXBseSwgcmVmKSlcblxuICAgIHJldHVybiByZWZcbiAgfVxuXG4gIGV4dHJhY3RNZXRhKGVsLCBtZXRhKXtcbiAgICBsZXQgcHJlZml4ID0gdGhpcy5iaW5kaW5nKFwidmFsdWUtXCIpXG4gICAgZm9yKGxldCBpID0gMDsgaSA8IGVsLmF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspe1xuICAgICAgbGV0IG5hbWUgPSBlbC5hdHRyaWJ1dGVzW2ldLm5hbWVcbiAgICAgIGlmKG5hbWUuc3RhcnRzV2l0aChwcmVmaXgpKXsgbWV0YVtuYW1lLnJlcGxhY2UocHJlZml4LCBcIlwiKV0gPSBlbC5nZXRBdHRyaWJ1dGUobmFtZSkgfVxuICAgIH1cbiAgICBpZihlbC52YWx1ZSAhPT0gdW5kZWZpbmVkKXtcbiAgICAgIG1ldGEudmFsdWUgPSBlbC52YWx1ZVxuXG4gICAgICBpZihlbC50YWdOYW1lID09PSBcIklOUFVUXCIgJiYgQ0hFQ0tBQkxFX0lOUFVUUy5pbmRleE9mKGVsLnR5cGUpID49IDAgJiYgIWVsLmNoZWNrZWQpe1xuICAgICAgICBkZWxldGUgbWV0YS52YWx1ZVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWV0YVxuICB9XG5cbiAgcHVzaEV2ZW50KHR5cGUsIGVsLCB0YXJnZXRDdHgsIHBoeEV2ZW50LCBtZXRhKXtcbiAgICB0aGlzLnB1c2hXaXRoUmVwbHkoKCkgPT4gdGhpcy5wdXRSZWYoW2VsXSwgdHlwZSksIFwiZXZlbnRcIiwge1xuICAgICAgdHlwZTogdHlwZSxcbiAgICAgIGV2ZW50OiBwaHhFdmVudCxcbiAgICAgIHZhbHVlOiB0aGlzLmV4dHJhY3RNZXRhKGVsLCBtZXRhKSxcbiAgICAgIGNpZDogdGhpcy50YXJnZXRDb21wb25lbnRJRChlbCwgdGFyZ2V0Q3R4KVxuICAgIH0pXG4gIH1cblxuICBwdXNoS2V5KGtleUVsZW1lbnQsIHRhcmdldEN0eCwga2luZCwgcGh4RXZlbnQsIG1ldGEpe1xuICAgIHRoaXMucHVzaFdpdGhSZXBseSgoKSA9PiB0aGlzLnB1dFJlZihba2V5RWxlbWVudF0sIGtpbmQpLCBcImV2ZW50XCIsIHtcbiAgICAgIHR5cGU6IGtpbmQsXG4gICAgICBldmVudDogcGh4RXZlbnQsXG4gICAgICB2YWx1ZTogdGhpcy5leHRyYWN0TWV0YShrZXlFbGVtZW50LCBtZXRhKSxcbiAgICAgIGNpZDogdGhpcy50YXJnZXRDb21wb25lbnRJRChrZXlFbGVtZW50LCB0YXJnZXRDdHgpXG4gICAgfSlcbiAgfVxuXG4gIHB1c2hGaWxlUHJvZ3Jlc3MoZmlsZUVsLCBlbnRyeVJlZiwgcHJvZ3Jlc3MsIG9uUmVwbHkgPSBmdW5jdGlvbiAoKXsgfSl7XG4gICAgdGhpcy5saXZlU29ja2V0LndpdGhpbk93bmVycyhmaWxlRWwuZm9ybSwgKHZpZXcsIHRhcmdldEN0eCkgPT4ge1xuICAgICAgdmlldy5wdXNoV2l0aFJlcGx5KG51bGwsIFwicHJvZ3Jlc3NcIiwge1xuICAgICAgICBldmVudDogZmlsZUVsLmdldEF0dHJpYnV0ZSh2aWV3LmJpbmRpbmcoUEhYX1BST0dSRVNTKSksXG4gICAgICAgIHJlZjogZmlsZUVsLmdldEF0dHJpYnV0ZShQSFhfVVBMT0FEX1JFRiksXG4gICAgICAgIGVudHJ5X3JlZjogZW50cnlSZWYsXG4gICAgICAgIHByb2dyZXNzOiBwcm9ncmVzcyxcbiAgICAgICAgY2lkOiB2aWV3LnRhcmdldENvbXBvbmVudElEKGZpbGVFbC5mb3JtLCB0YXJnZXRDdHgpXG4gICAgICB9LCBvblJlcGx5KVxuICAgIH0pXG4gIH1cblxuICBwdXNoSW5wdXQoaW5wdXRFbCwgdGFyZ2V0Q3R4LCBwaHhFdmVudCwgZXZlbnRUYXJnZXQsIGNhbGxiYWNrKXtcbiAgICBsZXQgdXBsb2Fkc1xuICAgIGxldCBjaWQgPSB0aGlzLnRhcmdldENvbXBvbmVudElEKGlucHV0RWwuZm9ybSwgdGFyZ2V0Q3R4KVxuICAgIGxldCByZWZHZW5lcmF0b3IgPSAoKSA9PiB0aGlzLnB1dFJlZihbaW5wdXRFbCwgaW5wdXRFbC5mb3JtXSwgXCJjaGFuZ2VcIilcbiAgICBsZXQgZm9ybURhdGEgPSBzZXJpYWxpemVGb3JtKGlucHV0RWwuZm9ybSwge190YXJnZXQ6IGV2ZW50VGFyZ2V0Lm5hbWV9KVxuICAgIGlmKGlucHV0RWwuZmlsZXMgJiYgaW5wdXRFbC5maWxlcy5sZW5ndGggPiAwKXtcbiAgICAgIExpdmVVcGxvYWRlci50cmFja0ZpbGVzKGlucHV0RWwsIEFycmF5LmZyb20oaW5wdXRFbC5maWxlcykpXG4gICAgfVxuICAgIHVwbG9hZHMgPSBMaXZlVXBsb2FkZXIuc2VyaWFsaXplVXBsb2FkcyhpbnB1dEVsKVxuICAgIGxldCBldmVudCA9IHtcbiAgICAgIHR5cGU6IFwiZm9ybVwiLFxuICAgICAgZXZlbnQ6IHBoeEV2ZW50LFxuICAgICAgdmFsdWU6IGZvcm1EYXRhLFxuICAgICAgdXBsb2FkczogdXBsb2FkcyxcbiAgICAgIGNpZDogY2lkXG4gICAgfVxuICAgIHRoaXMucHVzaFdpdGhSZXBseShyZWZHZW5lcmF0b3IsIFwiZXZlbnRcIiwgZXZlbnQsIHJlc3AgPT4ge1xuICAgICAgRE9NLnNob3dFcnJvcihpbnB1dEVsLCB0aGlzLmxpdmVTb2NrZXQuYmluZGluZyhQSFhfRkVFREJBQ0tfRk9SKSlcbiAgICAgIGlmKERPTS5pc1VwbG9hZElucHV0KGlucHV0RWwpICYmIGlucHV0RWwuZ2V0QXR0cmlidXRlKFwiZGF0YS1waHgtYXV0by11cGxvYWRcIikgIT09IG51bGwpe1xuICAgICAgICBpZihMaXZlVXBsb2FkZXIuZmlsZXNBd2FpdGluZ1ByZWZsaWdodChpbnB1dEVsKS5sZW5ndGggPiAwKXtcbiAgICAgICAgICBsZXQgW3JlZiwgX2Vsc10gPSByZWZHZW5lcmF0b3IoKVxuICAgICAgICAgIHRoaXMudXBsb2FkRmlsZXMoaW5wdXRFbC5mb3JtLCB0YXJnZXRDdHgsIHJlZiwgY2lkLCAoX3VwbG9hZHMpID0+IHtcbiAgICAgICAgICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKHJlc3ApXG4gICAgICAgICAgICB0aGlzLnRyaWdnZXJBd2FpdGluZ1N1Ym1pdChpbnB1dEVsLmZvcm0pXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FsbGJhY2sgJiYgY2FsbGJhY2socmVzcClcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgdHJpZ2dlckF3YWl0aW5nU3VibWl0KGZvcm1FbCl7XG4gICAgbGV0IGF3YWl0aW5nU3VibWl0ID0gdGhpcy5nZXRTY2hlZHVsZWRTdWJtaXQoZm9ybUVsKVxuICAgIGlmKGF3YWl0aW5nU3VibWl0KXtcbiAgICAgIGxldCBbX2VsLCBfcmVmLCBjYWxsYmFja10gPSBhd2FpdGluZ1N1Ym1pdFxuICAgICAgdGhpcy5jYW5jZWxTdWJtaXQoZm9ybUVsKVxuICAgICAgY2FsbGJhY2soKVxuICAgIH1cbiAgfVxuXG4gIGdldFNjaGVkdWxlZFN1Ym1pdChmb3JtRWwpe1xuICAgIHJldHVybiB0aGlzLmZvcm1TdWJtaXRzLmZpbmQoKFtlbCwgX2NhbGxiYWNrXSkgPT4gZWwuaXNTYW1lTm9kZShmb3JtRWwpKVxuICB9XG5cbiAgc2NoZWR1bGVTdWJtaXQoZm9ybUVsLCByZWYsIGNhbGxiYWNrKXtcbiAgICBpZih0aGlzLmdldFNjaGVkdWxlZFN1Ym1pdChmb3JtRWwpKXsgcmV0dXJuIHRydWUgfVxuICAgIHRoaXMuZm9ybVN1Ym1pdHMucHVzaChbZm9ybUVsLCByZWYsIGNhbGxiYWNrXSlcbiAgfVxuXG4gIGNhbmNlbFN1Ym1pdChmb3JtRWwpe1xuICAgIHRoaXMuZm9ybVN1Ym1pdHMgPSB0aGlzLmZvcm1TdWJtaXRzLmZpbHRlcigoW2VsLCByZWYsIF9jYWxsYmFja10pID0+IHtcbiAgICAgIGlmKGVsLmlzU2FtZU5vZGUoZm9ybUVsKSl7XG4gICAgICAgIHRoaXMudW5kb1JlZnMocmVmKVxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIHB1c2hGb3JtU3VibWl0KGZvcm1FbCwgdGFyZ2V0Q3R4LCBwaHhFdmVudCwgb25SZXBseSl7XG4gICAgbGV0IGZpbHRlcklnbm9yZWQgPSBlbCA9PiB7XG4gICAgICBsZXQgdXNlcklnbm9yZWQgPSBjbG9zZXN0UGh4QmluZGluZyhlbCwgYCR7dGhpcy5iaW5kaW5nKFBIWF9VUERBVEUpfT1pZ25vcmVgLCBlbC5mb3JtKVxuICAgICAgcmV0dXJuICEodXNlcklnbm9yZWQgfHwgY2xvc2VzdFBoeEJpbmRpbmcoZWwsIFwiZGF0YS1waHgtdXBkYXRlPWlnbm9yZVwiLCBlbC5mb3JtKSlcbiAgICB9XG4gICAgbGV0IGZpbHRlckRpc2FibGVzID0gZWwgPT4ge1xuICAgICAgcmV0dXJuIGVsLmhhc0F0dHJpYnV0ZSh0aGlzLmJpbmRpbmcoUEhYX0RJU0FCTEVfV0lUSCkpXG4gICAgfVxuICAgIGxldCBmaWx0ZXJCdXR0b24gPSBlbCA9PiBlbC50YWdOYW1lID09IFwiQlVUVE9OXCJcblxuICAgIGxldCBmaWx0ZXJJbnB1dCA9IGVsID0+IFtcIklOUFVUXCIsIFwiVEVYVEFSRUFcIiwgXCJTRUxFQ1RcIl0uaW5jbHVkZXMoZWwudGFnTmFtZSlcblxuICAgIGxldCByZWZHZW5lcmF0b3IgPSAoKSA9PiB7XG4gICAgICBsZXQgZm9ybUVsZW1lbnRzID0gQXJyYXkuZnJvbShmb3JtRWwuZWxlbWVudHMpXG4gICAgICBsZXQgZGlzYWJsZXMgPSBmb3JtRWxlbWVudHMuZmlsdGVyKGZpbHRlckRpc2FibGVzKVxuICAgICAgbGV0IGJ1dHRvbnMgPSBmb3JtRWxlbWVudHMuZmlsdGVyKGZpbHRlckJ1dHRvbikuZmlsdGVyKGZpbHRlcklnbm9yZWQpXG4gICAgICBsZXQgaW5wdXRzID0gZm9ybUVsZW1lbnRzLmZpbHRlcihmaWx0ZXJJbnB1dCkuZmlsdGVyKGZpbHRlcklnbm9yZWQpXG5cbiAgICAgIGJ1dHRvbnMuZm9yRWFjaChidXR0b24gPT4ge1xuICAgICAgICBidXR0b24uc2V0QXR0cmlidXRlKFBIWF9ESVNBQkxFRCwgYnV0dG9uLmRpc2FibGVkKVxuICAgICAgICBidXR0b24uZGlzYWJsZWQgPSB0cnVlXG4gICAgICB9KVxuICAgICAgaW5wdXRzLmZvckVhY2goaW5wdXQgPT4ge1xuICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoUEhYX1JFQURPTkxZLCBpbnB1dC5yZWFkT25seSlcbiAgICAgICAgaW5wdXQucmVhZE9ubHkgPSB0cnVlXG4gICAgICAgIGlmKGlucHV0LmZpbGVzKXtcbiAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoUEhYX0RJU0FCTEVELCBpbnB1dC5kaXNhYmxlZClcbiAgICAgICAgICBpbnB1dC5kaXNhYmxlZCA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIGZvcm1FbC5zZXRBdHRyaWJ1dGUodGhpcy5iaW5kaW5nKFBIWF9QQUdFX0xPQURJTkcpLCBcIlwiKVxuICAgICAgcmV0dXJuIHRoaXMucHV0UmVmKFtmb3JtRWxdLmNvbmNhdChkaXNhYmxlcykuY29uY2F0KGJ1dHRvbnMpLmNvbmNhdChpbnB1dHMpLCBcInN1Ym1pdFwiKVxuICAgIH1cblxuICAgIGxldCBjaWQgPSB0aGlzLnRhcmdldENvbXBvbmVudElEKGZvcm1FbCwgdGFyZ2V0Q3R4KVxuICAgIGlmKExpdmVVcGxvYWRlci5oYXNVcGxvYWRzSW5Qcm9ncmVzcyhmb3JtRWwpKXtcbiAgICAgIGxldCBbcmVmLCBfZWxzXSA9IHJlZkdlbmVyYXRvcigpXG4gICAgICByZXR1cm4gdGhpcy5zY2hlZHVsZVN1Ym1pdChmb3JtRWwsIHJlZiwgKCkgPT4gdGhpcy5wdXNoRm9ybVN1Ym1pdChmb3JtRWwsIHRhcmdldEN0eCwgcGh4RXZlbnQsIG9uUmVwbHkpKVxuICAgIH0gZWxzZSBpZihMaXZlVXBsb2FkZXIuaW5wdXRzQXdhaXRpbmdQcmVmbGlnaHQoZm9ybUVsKS5sZW5ndGggPiAwKXtcbiAgICAgIGxldCBbcmVmLCBlbHNdID0gcmVmR2VuZXJhdG9yKClcbiAgICAgIGxldCBwcm94eVJlZkdlbiA9ICgpID0+IFtyZWYsIGVsc11cbiAgICAgIHRoaXMudXBsb2FkRmlsZXMoZm9ybUVsLCB0YXJnZXRDdHgsIHJlZiwgY2lkLCAoX3VwbG9hZHMpID0+IHtcbiAgICAgICAgbGV0IGZvcm1EYXRhID0gc2VyaWFsaXplRm9ybShmb3JtRWwsIHt9KVxuICAgICAgICB0aGlzLnB1c2hXaXRoUmVwbHkocHJveHlSZWZHZW4sIFwiZXZlbnRcIiwge1xuICAgICAgICAgIHR5cGU6IFwiZm9ybVwiLFxuICAgICAgICAgIGV2ZW50OiBwaHhFdmVudCxcbiAgICAgICAgICB2YWx1ZTogZm9ybURhdGEsXG4gICAgICAgICAgY2lkOiBjaWRcbiAgICAgICAgfSwgb25SZXBseSlcbiAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBmb3JtRGF0YSA9IHNlcmlhbGl6ZUZvcm0oZm9ybUVsKVxuICAgICAgdGhpcy5wdXNoV2l0aFJlcGx5KHJlZkdlbmVyYXRvciwgXCJldmVudFwiLCB7XG4gICAgICAgIHR5cGU6IFwiZm9ybVwiLFxuICAgICAgICBldmVudDogcGh4RXZlbnQsXG4gICAgICAgIHZhbHVlOiBmb3JtRGF0YSxcbiAgICAgICAgY2lkOiBjaWRcbiAgICAgIH0sIG9uUmVwbHkpXG4gICAgfVxuICB9XG5cbiAgdXBsb2FkRmlsZXMoZm9ybUVsLCB0YXJnZXRDdHgsIHJlZiwgY2lkLCBvbkNvbXBsZXRlKXtcbiAgICBsZXQgam9pbkNvdW50QXRVcGxvYWQgPSB0aGlzLmpvaW5Db3VudFxuICAgIGxldCBpbnB1dEVscyA9IExpdmVVcGxvYWRlci5hY3RpdmVGaWxlSW5wdXRzKGZvcm1FbClcbiAgICBsZXQgbnVtRmlsZUlucHV0c0luUHJvZ3Jlc3MgPSBpbnB1dEVscy5sZW5ndGhcblxuICAgIC8vIGdldCBlYWNoIGZpbGUgaW5wdXRcbiAgICBpbnB1dEVscy5mb3JFYWNoKGlucHV0RWwgPT4ge1xuICAgICAgbGV0IHVwbG9hZGVyID0gbmV3IExpdmVVcGxvYWRlcihpbnB1dEVsLCB0aGlzLCAoKSA9PiB7XG4gICAgICAgIG51bUZpbGVJbnB1dHNJblByb2dyZXNzLS1cbiAgICAgICAgaWYobnVtRmlsZUlucHV0c0luUHJvZ3Jlc3MgPT09IDApeyBvbkNvbXBsZXRlKCkgfVxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMudXBsb2FkZXJzW2lucHV0RWxdID0gdXBsb2FkZXJcbiAgICAgIGxldCBlbnRyaWVzID0gdXBsb2FkZXIuZW50cmllcygpLm1hcChlbnRyeSA9PiBlbnRyeS50b1ByZWZsaWdodFBheWxvYWQoKSlcblxuICAgICAgbGV0IHBheWxvYWQgPSB7XG4gICAgICAgIHJlZjogaW5wdXRFbC5nZXRBdHRyaWJ1dGUoUEhYX1VQTE9BRF9SRUYpLFxuICAgICAgICBlbnRyaWVzOiBlbnRyaWVzLFxuICAgICAgICBjaWQ6IHRoaXMudGFyZ2V0Q29tcG9uZW50SUQoaW5wdXRFbC5mb3JtLCB0YXJnZXRDdHgpXG4gICAgICB9XG5cbiAgICAgIHRoaXMubG9nKFwidXBsb2FkXCIsICgpID0+IFtcInNlbmRpbmcgcHJlZmxpZ2h0IHJlcXVlc3RcIiwgcGF5bG9hZF0pXG5cbiAgICAgIHRoaXMucHVzaFdpdGhSZXBseShudWxsLCBcImFsbG93X3VwbG9hZFwiLCBwYXlsb2FkLCByZXNwID0+IHtcbiAgICAgICAgdGhpcy5sb2coXCJ1cGxvYWRcIiwgKCkgPT4gW1wiZ290IHByZWZsaWdodCByZXNwb25zZVwiLCByZXNwXSlcbiAgICAgICAgaWYocmVzcC5lcnJvcil7XG4gICAgICAgICAgdGhpcy51bmRvUmVmcyhyZWYpXG4gICAgICAgICAgbGV0IFtlbnRyeV9yZWYsIHJlYXNvbl0gPSByZXNwLmVycm9yXG4gICAgICAgICAgdGhpcy5sb2coXCJ1cGxvYWRcIiwgKCkgPT4gW2BlcnJvciBmb3IgZW50cnkgJHtlbnRyeV9yZWZ9YCwgcmVhc29uXSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsZXQgb25FcnJvciA9IChjYWxsYmFjaykgPT4ge1xuICAgICAgICAgICAgdGhpcy5jaGFubmVsLm9uRXJyb3IoKCkgPT4ge1xuICAgICAgICAgICAgICBpZih0aGlzLmpvaW5Db3VudCA9PT0gam9pbkNvdW50QXRVcGxvYWQpeyBjYWxsYmFjaygpIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICAgIHVwbG9hZGVyLmluaXRBZGFwdGVyVXBsb2FkKHJlc3AsIG9uRXJyb3IsIHRoaXMubGl2ZVNvY2tldClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgZGlzcGF0Y2hVcGxvYWRzKG5hbWUsIGZpbGVzT3JCbG9icyl7XG4gICAgbGV0IGlucHV0cyA9IERPTS5maW5kVXBsb2FkSW5wdXRzKHRoaXMuZWwpLmZpbHRlcihlbCA9PiBlbC5uYW1lID09PSBuYW1lKVxuICAgIGlmKGlucHV0cy5sZW5ndGggPT09IDApeyBsb2dFcnJvcihgbm8gbGl2ZSBmaWxlIGlucHV0cyBmb3VuZCBtYXRjaGluZyB0aGUgbmFtZSBcIiR7bmFtZX1cImApIH1cbiAgICBlbHNlIGlmKGlucHV0cy5sZW5ndGggPiAxKXsgbG9nRXJyb3IoYGR1cGxpY2F0ZSBsaXZlIGZpbGUgaW5wdXRzIGZvdW5kIG1hdGNoaW5nIHRoZSBuYW1lIFwiJHtuYW1lfVwiYCkgfVxuICAgIGVsc2UgeyBET00uZGlzcGF0Y2hFdmVudChpbnB1dHNbMF0sIFBIWF9UUkFDS19VUExPQURTLCB7ZmlsZXM6IGZpbGVzT3JCbG9ic30pIH1cbiAgfVxuXG4gIHB1c2hGb3JtUmVjb3ZlcnkoZm9ybSwgY2FsbGJhY2spe1xuICAgIHRoaXMubGl2ZVNvY2tldC53aXRoaW5Pd25lcnMoZm9ybSwgKHZpZXcsIHRhcmdldEN0eCkgPT4ge1xuICAgICAgbGV0IGlucHV0ID0gZm9ybS5lbGVtZW50c1swXVxuICAgICAgbGV0IHBoeEV2ZW50ID0gZm9ybS5nZXRBdHRyaWJ1dGUodGhpcy5iaW5kaW5nKFBIWF9BVVRPX1JFQ09WRVIpKSB8fCBmb3JtLmdldEF0dHJpYnV0ZSh0aGlzLmJpbmRpbmcoXCJjaGFuZ2VcIikpXG4gICAgICB2aWV3LnB1c2hJbnB1dChpbnB1dCwgdGFyZ2V0Q3R4LCBwaHhFdmVudCwgaW5wdXQsIGNhbGxiYWNrKVxuICAgIH0pXG4gIH1cblxuICBwdXNoTGlua1BhdGNoKGhyZWYsIHRhcmdldEVsLCBjYWxsYmFjayl7XG4gICAgbGV0IGxpbmtSZWYgPSB0aGlzLmxpdmVTb2NrZXQuc2V0UGVuZGluZ0xpbmsoaHJlZilcbiAgICBsZXQgcmVmR2VuID0gdGFyZ2V0RWwgPyAoKSA9PiB0aGlzLnB1dFJlZihbdGFyZ2V0RWxdLCBcImNsaWNrXCIpIDogbnVsbFxuXG4gICAgdGhpcy5wdXNoV2l0aFJlcGx5KHJlZkdlbiwgXCJsaXZlX3BhdGNoXCIsIHt1cmw6IGhyZWZ9LCByZXNwID0+IHtcbiAgICAgIGlmKHJlc3AubGlua19yZWRpcmVjdCl7XG4gICAgICAgIHRoaXMubGl2ZVNvY2tldC5yZXBsYWNlTWFpbihocmVmLCBudWxsLCBjYWxsYmFjaywgbGlua1JlZilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmKHRoaXMubGl2ZVNvY2tldC5jb21taXRQZW5kaW5nTGluayhsaW5rUmVmKSl7XG4gICAgICAgICAgdGhpcy5ocmVmID0gaHJlZlxuICAgICAgICB9XG4gICAgICAgIHRoaXMuYXBwbHlQZW5kaW5nVXBkYXRlcygpXG4gICAgICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKGxpbmtSZWYpXG4gICAgICB9XG4gICAgfSkucmVjZWl2ZShcInRpbWVvdXRcIiwgKCkgPT4gdGhpcy5saXZlU29ja2V0LnJlZGlyZWN0KHdpbmRvdy5sb2NhdGlvbi5ocmVmKSlcbiAgfVxuXG4gIGZvcm1zRm9yUmVjb3ZlcnkoaHRtbCl7XG4gICAgaWYodGhpcy5qb2luQ291bnQgPT09IDApeyByZXR1cm4gW10gfVxuXG4gICAgbGV0IHBoeENoYW5nZSA9IHRoaXMuYmluZGluZyhcImNoYW5nZVwiKVxuICAgIGxldCB0ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKVxuICAgIHRlbXBsYXRlLmlubmVySFRNTCA9IGh0bWxcblxuICAgIHJldHVybiAoXG4gICAgICBET00uYWxsKHRoaXMuZWwsIGBmb3JtWyR7cGh4Q2hhbmdlfV1gKVxuICAgICAgICAuZmlsdGVyKGZvcm0gPT4gdGhpcy5vd25zRWxlbWVudChmb3JtKSlcbiAgICAgICAgLmZpbHRlcihmb3JtID0+IGZvcm0uZWxlbWVudHMubGVuZ3RoID4gMClcbiAgICAgICAgLmZpbHRlcihmb3JtID0+IGZvcm0uZ2V0QXR0cmlidXRlKHRoaXMuYmluZGluZyhQSFhfQVVUT19SRUNPVkVSKSkgIT09IFwiaWdub3JlXCIpXG4gICAgICAgIC5maWx0ZXIoZm9ybSA9PiB0ZW1wbGF0ZS5jb250ZW50LnF1ZXJ5U2VsZWN0b3IoYGZvcm1bJHtwaHhDaGFuZ2V9PVwiJHtmb3JtLmdldEF0dHJpYnV0ZShwaHhDaGFuZ2UpfVwiXWApKVxuICAgIClcbiAgfVxuXG4gIG1heWJlUHVzaENvbXBvbmVudHNEZXN0cm95ZWQoZGVzdHJveWVkQ0lEcyl7XG4gICAgbGV0IHdpbGxEZXN0cm95Q0lEcyA9IGRlc3Ryb3llZENJRHMuZmlsdGVyKGNpZCA9PiB7XG4gICAgICByZXR1cm4gRE9NLmZpbmRDb21wb25lbnROb2RlTGlzdCh0aGlzLmVsLCBjaWQpLmxlbmd0aCA9PT0gMFxuICAgIH0pXG4gICAgaWYod2lsbERlc3Ryb3lDSURzLmxlbmd0aCA+IDApe1xuICAgICAgdGhpcy5wcnVuaW5nQ0lEcy5wdXNoKC4uLndpbGxEZXN0cm95Q0lEcylcblxuICAgICAgdGhpcy5wdXNoV2l0aFJlcGx5KG51bGwsIFwiY2lkc193aWxsX2Rlc3Ryb3lcIiwge2NpZHM6IHdpbGxEZXN0cm95Q0lEc30sICgpID0+IHtcbiAgICAgICAgLy8gVGhlIGNpZHMgYXJlIGVpdGhlciBiYWNrIG9uIHRoZSBwYWdlIG9yIHRoZXkgd2lsbCBiZSBmdWxseSByZW1vdmVkLFxuICAgICAgICAvLyBzbyB3ZSBjYW4gcmVtb3ZlIHRoZW0gZnJvbSB0aGUgcHJ1bmluZ0NJRHMuXG4gICAgICAgIHRoaXMucHJ1bmluZ0NJRHMgPSB0aGlzLnBydW5pbmdDSURzLmZpbHRlcihjaWQgPT4gd2lsbERlc3Ryb3lDSURzLmluZGV4T2YoY2lkKSAhPT0gLTEpXG5cbiAgICAgICAgLy8gU2VlIGlmIGFueSBvZiB0aGUgY2lkcyB3ZSB3YW50ZWQgdG8gZGVzdHJveSB3ZXJlIGFkZGVkIGJhY2ssXG4gICAgICAgIC8vIGlmIHRoZXkgd2VyZSBhZGRlZCBiYWNrLCB3ZSBkb24ndCBhY3R1YWxseSBkZXN0cm95IHRoZW0uXG4gICAgICAgIGxldCBjb21wbGV0ZWx5RGVzdHJveUNJRHMgPSB3aWxsRGVzdHJveUNJRHMuZmlsdGVyKGNpZCA9PiB7XG4gICAgICAgICAgcmV0dXJuIERPTS5maW5kQ29tcG9uZW50Tm9kZUxpc3QodGhpcy5lbCwgY2lkKS5sZW5ndGggPT09IDBcbiAgICAgICAgfSlcblxuICAgICAgICBpZihjb21wbGV0ZWx5RGVzdHJveUNJRHMubGVuZ3RoID4gMCl7XG4gICAgICAgICAgdGhpcy5wdXNoV2l0aFJlcGx5KG51bGwsIFwiY2lkc19kZXN0cm95ZWRcIiwge2NpZHM6IGNvbXBsZXRlbHlEZXN0cm95Q0lEc30sIChyZXNwKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVkLnBydW5lQ0lEcyhyZXNwLmNpZHMpXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBvd25zRWxlbWVudChlbCl7XG4gICAgcmV0dXJuIGVsLmdldEF0dHJpYnV0ZShQSFhfUEFSRU5UX0lEKSA9PT0gdGhpcy5pZCB8fFxuICAgICAgbWF5YmUoZWwuY2xvc2VzdChQSFhfVklFV19TRUxFQ1RPUiksIG5vZGUgPT4gbm9kZS5pZCkgPT09IHRoaXMuaWRcbiAgfVxuXG4gIHN1Ym1pdEZvcm0oZm9ybSwgdGFyZ2V0Q3R4LCBwaHhFdmVudCl7XG4gICAgRE9NLnB1dFByaXZhdGUoZm9ybSwgUEhYX0hBU19TVUJNSVRURUQsIHRydWUpXG4gICAgdGhpcy5saXZlU29ja2V0LmJsdXJBY3RpdmVFbGVtZW50KHRoaXMpXG4gICAgdGhpcy5wdXNoRm9ybVN1Ym1pdChmb3JtLCB0YXJnZXRDdHgsIHBoeEV2ZW50LCAoKSA9PiB7XG4gICAgICB0aGlzLmxpdmVTb2NrZXQucmVzdG9yZVByZXZpb3VzbHlBY3RpdmVGb2N1cygpXG4gICAgfSlcbiAgfVxuXG4gIGJpbmRpbmcoa2luZCl7IHJldHVybiB0aGlzLmxpdmVTb2NrZXQuYmluZGluZyhraW5kKSB9XG59XG4iLCAiLyoqIEluaXRpYWxpemVzIHRoZSBMaXZlU29ja2V0XG4gKlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBlbmRQb2ludCAtIFRoZSBzdHJpbmcgV2ViU29ja2V0IGVuZHBvaW50LCBpZSwgYFwid3NzOi8vZXhhbXBsZS5jb20vbGl2ZVwiYCxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgXCIvbGl2ZVwiYCAoaW5oZXJpdGVkIGhvc3QgJiBwcm90b2NvbClcbiAqIEBwYXJhbSB7UGhvZW5peC5Tb2NrZXR9IHNvY2tldCAtIHRoZSByZXF1aXJlZCBQaG9lbml4IFNvY2tldCBjbGFzcyBpbXBvcnRlZCBmcm9tIFwicGhvZW5peFwiLiBGb3IgZXhhbXBsZTpcbiAqXG4gKiAgICAgaW1wb3J0IHtTb2NrZXR9IGZyb20gXCJwaG9lbml4XCJcbiAqICAgICBpbXBvcnQge0xpdmVTb2NrZXR9IGZyb20gXCJwaG9lbml4X2xpdmVfdmlld1wiXG4gKiAgICAgbGV0IGxpdmVTb2NrZXQgPSBuZXcgTGl2ZVNvY2tldChcIi9saXZlXCIsIFNvY2tldCwgey4uLn0pXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRzXSAtIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24uIE91dHNpZGUgb2Yga2V5cyBsaXN0ZWQgYmVsb3csIGFsbFxuICogY29uZmlndXJhdGlvbiBpcyBwYXNzZWQgZGlyZWN0bHkgdG8gdGhlIFBob2VuaXggU29ja2V0IGNvbnN0cnVjdG9yLlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRzLmRlZmF1bHRzXSAtIFRoZSBvcHRpb25hbCBkZWZhdWx0cyB0byB1c2UgZm9yIHZhcmlvdXMgYmluZGluZ3MsXG4gKiBzdWNoIGFzIGBwaHgtZGVib3VuY2VgLiBTdXBwb3J0cyB0aGUgZm9sbG93aW5nIGtleXM6XG4gKlxuICogICAtIGRlYm91bmNlIC0gdGhlIG1pbGxpc2Vjb25kIHBoeC1kZWJvdW5jZSB0aW1lLiBEZWZhdWx0cyAzMDBcbiAqICAgLSB0aHJvdHRsZSAtIHRoZSBtaWxsaXNlY29uZCBwaHgtdGhyb3R0bGUgdGltZS4gRGVmYXVsdHMgMzAwXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMucGFyYW1zXSAtIFRoZSBvcHRpb25hbCBmdW5jdGlvbiBmb3IgcGFzc2luZyBjb25uZWN0IHBhcmFtcy5cbiAqIFRoZSBmdW5jdGlvbiByZWNlaXZlcyB0aGUgZWxlbWVudCBhc3NvY2lhdGVkIHdpdGggYSBnaXZlbiBMaXZlVmlldy4gRm9yIGV4YW1wbGU6XG4gKlxuICogICAgIChlbCkgPT4ge3ZpZXc6IGVsLmdldEF0dHJpYnV0ZShcImRhdGEtbXktdmlldy1uYW1lXCIsIHRva2VuOiB3aW5kb3cubXlUb2tlbn1cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdHMuYmluZGluZ1ByZWZpeF0gLSBUaGUgb3B0aW9uYWwgcHJlZml4IHRvIHVzZSBmb3IgYWxsIHBoeCBET00gYW5ub3RhdGlvbnMuXG4gKiBEZWZhdWx0cyB0byBcInBoeC1cIi5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0cy5ob29rc10gLSBUaGUgb3B0aW9uYWwgb2JqZWN0IGZvciByZWZlcmVuY2luZyBMaXZlVmlldyBob29rIGNhbGxiYWNrcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0cy51cGxvYWRlcnNdIC0gVGhlIG9wdGlvbmFsIG9iamVjdCBmb3IgcmVmZXJlbmNpbmcgTGl2ZVZpZXcgdXBsb2FkZXIgY2FsbGJhY2tzLlxuICogQHBhcmFtIHtpbnRlZ2VyfSBbb3B0cy5sb2FkZXJUaW1lb3V0XSAtIFRoZSBvcHRpb25hbCBkZWxheSBpbiBtaWxsaXNlY29uZHMgdG8gd2FpdCBiZWZvcmUgYXBwbHlcbiAqIGxvYWRpbmcgc3RhdGVzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMudmlld0xvZ2dlcl0gLSBUaGUgb3B0aW9uYWwgZnVuY3Rpb24gdG8gbG9nIGRlYnVnIGluZm9ybWF0aW9uLiBGb3IgZXhhbXBsZTpcbiAqXG4gKiAgICAgKHZpZXcsIGtpbmQsIG1zZywgb2JqKSA9PiBjb25zb2xlLmxvZyhgJHt2aWV3LmlkfSAke2tpbmR9OiAke21zZ30gLSBgLCBvYmopXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRzLm1ldGFkYXRhXSAtIFRoZSBvcHRpb25hbCBvYmplY3QgbWFwcGluZyBldmVudCBuYW1lcyB0byBmdW5jdGlvbnMgZm9yXG4gKiBwb3B1bGF0aW5nIGV2ZW50IG1ldGFkYXRhLiBGb3IgZXhhbXBsZTpcbiAqXG4gKiAgICAgbWV0YWRhdGE6IHtcbiAqICAgICAgIGNsaWNrOiAoZSwgZWwpID0+IHtcbiAqICAgICAgICAgcmV0dXJuIHtcbiAqICAgICAgICAgICBjdHJsS2V5OiBlLmN0cmxLZXksXG4gKiAgICAgICAgICAgbWV0YUtleTogZS5tZXRhS2V5LFxuICogICAgICAgICAgIGRldGFpbDogZS5kZXRhaWwgfHwgMSxcbiAqICAgICAgICAgfVxuICogICAgICAgfSxcbiAqICAgICAgIGtleWRvd246IChlLCBlbCkgPT4ge1xuICogICAgICAgICByZXR1cm4ge1xuICogICAgICAgICAgIGtleTogZS5rZXksXG4gKiAgICAgICAgICAgY3RybEtleTogZS5jdHJsS2V5LFxuICogICAgICAgICAgIG1ldGFLZXk6IGUubWV0YUtleSxcbiAqICAgICAgICAgICBzaGlmdEtleTogZS5zaGlmdEtleVxuICogICAgICAgICB9XG4gKiAgICAgICB9XG4gKiAgICAgfVxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRzLnNlc3Npb25TdG9yYWdlXSAtIEFuIG9wdGlvbmFsIFN0b3JhZ2UgY29tcGF0aWJsZSBvYmplY3RcbiAqIFVzZWZ1bCB3aGVuIExpdmVWaWV3IHdvbid0IGhhdmUgYWNjZXNzIHRvIGBzZXNzaW9uU3RvcmFnZWAuICBGb3IgZXhhbXBsZSwgVGhpcyBjb3VsZFxuICogaGFwcGVuIGlmIGEgc2l0ZSBsb2FkcyBhIGNyb3NzLWRvbWFpbiBMaXZlVmlldyBpbiBhbiBpZnJhbWUuICBFeGFtcGxlIHVzYWdlOlxuICpcbiAqICAgICBjbGFzcyBJbk1lbW9yeVN0b3JhZ2Uge1xuICogICAgICAgY29uc3RydWN0b3IoKSB7IHRoaXMuc3RvcmFnZSA9IHt9IH1cbiAqICAgICAgIGdldEl0ZW0oa2V5TmFtZSkgeyByZXR1cm4gdGhpcy5zdG9yYWdlW2tleU5hbWVdIH1cbiAqICAgICAgIHJlbW92ZUl0ZW0oa2V5TmFtZSkgeyBkZWxldGUgdGhpcy5zdG9yYWdlW2tleU5hbWVdIH1cbiAqICAgICAgIHNldEl0ZW0oa2V5TmFtZSwga2V5VmFsdWUpIHsgdGhpcy5zdG9yYWdlW2tleU5hbWVdID0ga2V5VmFsdWUgfVxuICogICAgIH1cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdHMubG9jYWxTdG9yYWdlXSAtIEFuIG9wdGlvbmFsIFN0b3JhZ2UgY29tcGF0aWJsZSBvYmplY3RcbiAqIFVzZWZ1bCBmb3Igd2hlbiBMaXZlVmlldyB3b24ndCBoYXZlIGFjY2VzcyB0byBgbG9jYWxTdG9yYWdlYC5cbiAqIFNlZSBgb3B0cy5zZXNzaW9uU3RvcmFnZWAgZm9yIGV4YW1wbGVzLlxuKi9cblxuaW1wb3J0IHtcbiAgQklORElOR19QUkVGSVgsXG4gIENPTlNFQ1VUSVZFX1JFTE9BRFMsXG4gIERFRkFVTFRTLFxuICBGQUlMU0FGRV9KSVRURVIsXG4gIExPQURFUl9USU1FT1VULFxuICBNQVhfUkVMT0FEUyxcbiAgUEhYX0RFQk9VTkNFLFxuICBQSFhfRFJPUF9UQVJHRVQsXG4gIFBIWF9IQVNfRk9DVVNFRCxcbiAgUEhYX0tFWSxcbiAgUEhYX0xJTktfU1RBVEUsXG4gIFBIWF9MSVZFX0xJTkssXG4gIFBIWF9MVl9ERUJVRyxcbiAgUEhYX0xWX0xBVEVOQ1lfU0lNLFxuICBQSFhfTFZfUFJPRklMRSxcbiAgUEhYX01BSU4sXG4gIFBIWF9QQVJFTlRfSUQsXG4gIFBIWF9WSUVXX1NFTEVDVE9SLFxuICBQSFhfUk9PVF9JRCxcbiAgUEhYX1RIUk9UVExFLFxuICBQSFhfVFJBQ0tfVVBMT0FEUyxcbiAgUkVMT0FEX0pJVFRFUlxuXG59IGZyb20gXCIuL2NvbnN0YW50c1wiXG5cbmltcG9ydCB7XG4gIGNsb25lLFxuICBjbG9zZXN0UGh4QmluZGluZyxcbiAgY2xvc3VyZSxcbiAgZGVidWcsXG4gIG1heWJlXG59IGZyb20gXCIuL3V0aWxzXCJcblxuaW1wb3J0IEJyb3dzZXIgZnJvbSBcIi4vYnJvd3NlclwiXG5pbXBvcnQgRE9NIGZyb20gXCIuL2RvbVwiXG5pbXBvcnQgSG9va3MgZnJvbSBcIi4vaG9va3NcIlxuaW1wb3J0IExpdmVVcGxvYWRlciBmcm9tIFwiLi9saXZlX3VwbG9hZGVyXCJcbmltcG9ydCBWaWV3IGZyb20gXCIuL3ZpZXdcIlxuaW1wb3J0IHtQSFhfU0VTU0lPTn0gZnJvbSBcIi4vY29uc3RhbnRzXCJcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGl2ZVNvY2tldCB7XG4gIGNvbnN0cnVjdG9yKHVybCwgcGh4U29ja2V0LCBvcHRzID0ge30pe1xuICAgIHRoaXMudW5sb2FkZWQgPSBmYWxzZVxuICAgIGlmKCFwaHhTb2NrZXQgfHwgcGh4U29ja2V0LmNvbnN0cnVjdG9yLm5hbWUgPT09IFwiT2JqZWN0XCIpe1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBcbiAgICAgIGEgcGhvZW5peCBTb2NrZXQgbXVzdCBiZSBwcm92aWRlZCBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIHRoZSBMaXZlU29ja2V0IGNvbnN0cnVjdG9yLiBGb3IgZXhhbXBsZTpcblxuICAgICAgICAgIGltcG9ydCB7U29ja2V0fSBmcm9tIFwicGhvZW5peFwiXG4gICAgICAgICAgaW1wb3J0IExpdmVTb2NrZXQgZnJvbSBcInBob2VuaXhfbGl2ZV92aWV3XCJcbiAgICAgICAgICBsZXQgbGl2ZVNvY2tldCA9IG5ldyBMaXZlU29ja2V0KFwiL2xpdmVcIiwgU29ja2V0LCB7Li4ufSlcbiAgICAgIGApXG4gICAgfVxuICAgIHRoaXMuc29ja2V0ID0gbmV3IHBoeFNvY2tldCh1cmwsIG9wdHMpXG4gICAgdGhpcy5iaW5kaW5nUHJlZml4ID0gb3B0cy5iaW5kaW5nUHJlZml4IHx8IEJJTkRJTkdfUFJFRklYXG4gICAgdGhpcy5vcHRzID0gb3B0c1xuICAgIHRoaXMucGFyYW1zID0gY2xvc3VyZShvcHRzLnBhcmFtcyB8fCB7fSlcbiAgICB0aGlzLnZpZXdMb2dnZXIgPSBvcHRzLnZpZXdMb2dnZXJcbiAgICB0aGlzLm1ldGFkYXRhQ2FsbGJhY2tzID0gb3B0cy5tZXRhZGF0YSB8fCB7fVxuICAgIHRoaXMuZGVmYXVsdHMgPSBPYmplY3QuYXNzaWduKGNsb25lKERFRkFVTFRTKSwgb3B0cy5kZWZhdWx0cyB8fCB7fSlcbiAgICB0aGlzLmFjdGl2ZUVsZW1lbnQgPSBudWxsXG4gICAgdGhpcy5wcmV2QWN0aXZlID0gbnVsbFxuICAgIHRoaXMuc2lsZW5jZWQgPSBmYWxzZVxuICAgIHRoaXMubWFpbiA9IG51bGxcbiAgICB0aGlzLmxpbmtSZWYgPSAxXG4gICAgdGhpcy5yb290cyA9IHt9XG4gICAgdGhpcy5ocmVmID0gd2luZG93LmxvY2F0aW9uLmhyZWZcbiAgICB0aGlzLnBlbmRpbmdMaW5rID0gbnVsbFxuICAgIHRoaXMuY3VycmVudExvY2F0aW9uID0gY2xvbmUod2luZG93LmxvY2F0aW9uKVxuICAgIHRoaXMuaG9va3MgPSBvcHRzLmhvb2tzIHx8IHt9XG4gICAgdGhpcy51cGxvYWRlcnMgPSBvcHRzLnVwbG9hZGVycyB8fCB7fVxuICAgIHRoaXMubG9hZGVyVGltZW91dCA9IG9wdHMubG9hZGVyVGltZW91dCB8fCBMT0FERVJfVElNRU9VVFxuICAgIHRoaXMubG9jYWxTdG9yYWdlID0gb3B0cy5sb2NhbFN0b3JhZ2UgfHwgd2luZG93LmxvY2FsU3RvcmFnZVxuICAgIHRoaXMuc2Vzc2lvblN0b3JhZ2UgPSBvcHRzLnNlc3Npb25TdG9yYWdlIHx8IHdpbmRvdy5zZXNzaW9uU3RvcmFnZVxuICAgIHRoaXMuYm91bmRUb3BMZXZlbEV2ZW50cyA9IGZhbHNlXG4gICAgdGhpcy5kb21DYWxsYmFja3MgPSBPYmplY3QuYXNzaWduKHtvbk5vZGVBZGRlZDogY2xvc3VyZSgpLCBvbkJlZm9yZUVsVXBkYXRlZDogY2xvc3VyZSgpfSwgb3B0cy5kb20gfHwge30pXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJwYWdlaGlkZVwiLCBfZSA9PiB7XG4gICAgICB0aGlzLnVubG9hZGVkID0gdHJ1ZVxuICAgIH0pXG4gICAgdGhpcy5zb2NrZXQub25PcGVuKCgpID0+IHtcbiAgICAgIGlmKHRoaXMuaXNVbmxvYWRlZCgpKXtcbiAgICAgICAgLy8gcmVsb2FkIHBhZ2UgaWYgYmVpbmcgcmVzdG9yZWQgZnJvbSBiYWNrL2ZvcndhcmQgY2FjaGUgYW5kIGJyb3dzZXIgZG9lcyBub3QgZW1pdCBcInBhZ2VzaG93XCJcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIC8vIHB1YmxpY1xuXG4gIGlzUHJvZmlsZUVuYWJsZWQoKXsgcmV0dXJuIHRoaXMuc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShQSFhfTFZfUFJPRklMRSkgPT09IFwidHJ1ZVwiIH1cblxuICBpc0RlYnVnRW5hYmxlZCgpeyByZXR1cm4gdGhpcy5zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFBIWF9MVl9ERUJVRykgPT09IFwidHJ1ZVwiIH1cblxuICBlbmFibGVEZWJ1ZygpeyB0aGlzLnNlc3Npb25TdG9yYWdlLnNldEl0ZW0oUEhYX0xWX0RFQlVHLCBcInRydWVcIikgfVxuXG4gIGVuYWJsZVByb2ZpbGluZygpeyB0aGlzLnNlc3Npb25TdG9yYWdlLnNldEl0ZW0oUEhYX0xWX1BST0ZJTEUsIFwidHJ1ZVwiKSB9XG5cbiAgZGlzYWJsZURlYnVnKCl7IHRoaXMuc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbShQSFhfTFZfREVCVUcpIH1cblxuICBkaXNhYmxlUHJvZmlsaW5nKCl7IHRoaXMuc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbShQSFhfTFZfUFJPRklMRSkgfVxuXG4gIGVuYWJsZUxhdGVuY3lTaW0odXBwZXJCb3VuZE1zKXtcbiAgICB0aGlzLmVuYWJsZURlYnVnKClcbiAgICBjb25zb2xlLmxvZyhcImxhdGVuY3kgc2ltdWxhdG9yIGVuYWJsZWQgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGlzIGJyb3dzZXIgc2Vzc2lvbi4gQ2FsbCBkaXNhYmxlTGF0ZW5jeVNpbSgpIHRvIGRpc2FibGVcIilcbiAgICB0aGlzLnNlc3Npb25TdG9yYWdlLnNldEl0ZW0oUEhYX0xWX0xBVEVOQ1lfU0lNLCB1cHBlckJvdW5kTXMpXG4gIH1cblxuICBkaXNhYmxlTGF0ZW5jeVNpbSgpeyB0aGlzLnNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oUEhYX0xWX0xBVEVOQ1lfU0lNKSB9XG5cbiAgZ2V0TGF0ZW5jeVNpbSgpe1xuICAgIGxldCBzdHIgPSB0aGlzLnNlc3Npb25TdG9yYWdlLmdldEl0ZW0oUEhYX0xWX0xBVEVOQ1lfU0lNKVxuICAgIHJldHVybiBzdHIgPyBwYXJzZUludChzdHIpIDogbnVsbFxuICB9XG5cbiAgZ2V0U29ja2V0KCl7IHJldHVybiB0aGlzLnNvY2tldCB9XG5cbiAgY29ubmVjdCgpe1xuICAgIGxldCBkb0Nvbm5lY3QgPSAoKSA9PiB7XG4gICAgICBpZih0aGlzLmpvaW5Sb290Vmlld3MoKSl7XG4gICAgICAgIHRoaXMuYmluZFRvcExldmVsRXZlbnRzKClcbiAgICAgICAgdGhpcy5zb2NrZXQuY29ubmVjdCgpXG4gICAgICB9XG4gICAgfVxuICAgIGlmKFtcImNvbXBsZXRlXCIsIFwibG9hZGVkXCIsIFwiaW50ZXJhY3RpdmVcIl0uaW5kZXhPZihkb2N1bWVudC5yZWFkeVN0YXRlKSA+PSAwKXtcbiAgICAgIGRvQ29ubmVjdCgpXG4gICAgfSBlbHNlIHtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJET01Db250ZW50TG9hZGVkXCIsICgpID0+IGRvQ29ubmVjdCgpKVxuICAgIH1cbiAgfVxuXG4gIGRpc2Nvbm5lY3QoY2FsbGJhY2speyB0aGlzLnNvY2tldC5kaXNjb25uZWN0KGNhbGxiYWNrKSB9XG5cbiAgLy8gcHJpdmF0ZVxuXG4gIHRyaWdnZXJET00oa2luZCwgYXJncyl7IHRoaXMuZG9tQ2FsbGJhY2tzW2tpbmRdKC4uLmFyZ3MpIH1cblxuICB0aW1lKG5hbWUsIGZ1bmMpe1xuICAgIGlmKCF0aGlzLmlzUHJvZmlsZUVuYWJsZWQoKSB8fCAhY29uc29sZS50aW1lKXsgcmV0dXJuIGZ1bmMoKSB9XG4gICAgY29uc29sZS50aW1lKG5hbWUpXG4gICAgbGV0IHJlc3VsdCA9IGZ1bmMoKVxuICAgIGNvbnNvbGUudGltZUVuZChuYW1lKVxuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIGxvZyh2aWV3LCBraW5kLCBtc2dDYWxsYmFjayl7XG4gICAgaWYodGhpcy52aWV3TG9nZ2VyKXtcbiAgICAgIGxldCBbbXNnLCBvYmpdID0gbXNnQ2FsbGJhY2soKVxuICAgICAgdGhpcy52aWV3TG9nZ2VyKHZpZXcsIGtpbmQsIG1zZywgb2JqKVxuICAgIH0gZWxzZSBpZih0aGlzLmlzRGVidWdFbmFibGVkKCkpe1xuICAgICAgbGV0IFttc2csIG9ial0gPSBtc2dDYWxsYmFjaygpXG4gICAgICBkZWJ1Zyh2aWV3LCBraW5kLCBtc2csIG9iailcbiAgICB9XG4gIH1cblxuICBvbkNoYW5uZWwoY2hhbm5lbCwgZXZlbnQsIGNiKXtcbiAgICBjaGFubmVsLm9uKGV2ZW50LCBkYXRhID0+IHtcbiAgICAgIGxldCBsYXRlbmN5ID0gdGhpcy5nZXRMYXRlbmN5U2ltKClcbiAgICAgIGlmKCFsYXRlbmN5KXtcbiAgICAgICAgY2IoZGF0YSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBzaW11bGF0aW5nICR7bGF0ZW5jeX1tcyBvZiBsYXRlbmN5IGZyb20gc2VydmVyIHRvIGNsaWVudGApXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gY2IoZGF0YSksIGxhdGVuY3kpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIHdyYXBQdXNoKHZpZXcsIG9wdHMsIHB1c2gpe1xuICAgIGxldCBsYXRlbmN5ID0gdGhpcy5nZXRMYXRlbmN5U2ltKClcbiAgICBsZXQgb2xkSm9pbkNvdW50ID0gdmlldy5qb2luQ291bnRcbiAgICBpZighbGF0ZW5jeSl7XG4gICAgICBpZihvcHRzLnRpbWVvdXQpe1xuICAgICAgICByZXR1cm4gcHVzaCgpLnJlY2VpdmUoXCJ0aW1lb3V0XCIsICgpID0+IHtcbiAgICAgICAgICBpZih2aWV3LmpvaW5Db3VudCA9PT0gb2xkSm9pbkNvdW50ICYmICF2aWV3LmlzRGVzdHJveWVkKCkpe1xuICAgICAgICAgICAgdGhpcy5yZWxvYWRXaXRoSml0dGVyKHZpZXcsICgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5sb2codmlldywgXCJ0aW1lb3V0XCIsICgpID0+IFtcInJlY2VpdmVkIHRpbWVvdXQgd2hpbGUgY29tbXVuaWNhdGluZyB3aXRoIHNlcnZlci4gRmFsbGluZyBiYWNrIHRvIGhhcmQgcmVmcmVzaCBmb3IgcmVjb3ZlcnlcIl0pXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBwdXNoKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZyhgc2ltdWxhdGluZyAke2xhdGVuY3l9bXMgb2YgbGF0ZW5jeSBmcm9tIGNsaWVudCB0byBzZXJ2ZXJgKVxuICAgIGxldCBmYWtlUHVzaCA9IHtcbiAgICAgIHJlY2VpdmVzOiBbXSxcbiAgICAgIHJlY2VpdmUoa2luZCwgY2IpeyB0aGlzLnJlY2VpdmVzLnB1c2goW2tpbmQsIGNiXSkgfVxuICAgIH1cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmKHZpZXcuaXNEZXN0cm95ZWQoKSl7IHJldHVybiB9XG4gICAgICBmYWtlUHVzaC5yZWNlaXZlcy5yZWR1Y2UoKGFjYywgW2tpbmQsIGNiXSkgPT4gYWNjLnJlY2VpdmUoa2luZCwgY2IpLCBwdXNoKCkpXG4gICAgfSwgbGF0ZW5jeSlcbiAgICByZXR1cm4gZmFrZVB1c2hcbiAgfVxuXG4gIHJlbG9hZFdpdGhKaXR0ZXIodmlldywgbG9nKXtcbiAgICB2aWV3LmRlc3Ryb3koKVxuICAgIHRoaXMuZGlzY29ubmVjdCgpXG4gICAgbGV0IFttaW5NcywgbWF4TXNdID0gUkVMT0FEX0pJVFRFUlxuICAgIGxldCBhZnRlck1zID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heE1zIC0gbWluTXMgKyAxKSkgKyBtaW5Nc1xuICAgIGxldCB0cmllcyA9IEJyb3dzZXIudXBkYXRlTG9jYWwodGhpcy5sb2NhbFN0b3JhZ2UsIHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSwgQ09OU0VDVVRJVkVfUkVMT0FEUywgMCwgY291bnQgPT4gY291bnQgKyAxKVxuICAgIGxvZyA/IGxvZygpIDogdGhpcy5sb2codmlldywgXCJqb2luXCIsICgpID0+IFtgZW5jb3VudGVyZWQgJHt0cmllc30gY29uc2VjdXRpdmUgcmVsb2Fkc2BdKVxuICAgIGlmKHRyaWVzID4gTUFYX1JFTE9BRFMpe1xuICAgICAgdGhpcy5sb2codmlldywgXCJqb2luXCIsICgpID0+IFtgZXhjZWVkZWQgJHtNQVhfUkVMT0FEU30gY29uc2VjdXRpdmUgcmVsb2Fkcy4gRW50ZXJpbmcgZmFpbHNhZmUgbW9kZWBdKVxuICAgICAgYWZ0ZXJNcyA9IEZBSUxTQUZFX0pJVFRFUlxuICAgIH1cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmKHRoaXMuaGFzUGVuZGluZ0xpbmsoKSl7XG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbiA9IHRoaXMucGVuZGluZ0xpbmtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKVxuICAgICAgfVxuICAgIH0sIGFmdGVyTXMpXG4gIH1cblxuICBnZXRIb29rQ2FsbGJhY2tzKG5hbWUpe1xuICAgIHJldHVybiBuYW1lICYmIG5hbWUuc3RhcnRzV2l0aChcIlBob2VuaXguXCIpID8gSG9va3NbbmFtZS5zcGxpdChcIi5cIilbMV1dIDogdGhpcy5ob29rc1tuYW1lXVxuICB9XG5cbiAgaXNVbmxvYWRlZCgpeyByZXR1cm4gdGhpcy51bmxvYWRlZCB9XG5cbiAgaXNDb25uZWN0ZWQoKXsgcmV0dXJuIHRoaXMuc29ja2V0LmlzQ29ubmVjdGVkKCkgfVxuXG4gIGdldEJpbmRpbmdQcmVmaXgoKXsgcmV0dXJuIHRoaXMuYmluZGluZ1ByZWZpeCB9XG5cbiAgYmluZGluZyhraW5kKXsgcmV0dXJuIGAke3RoaXMuZ2V0QmluZGluZ1ByZWZpeCgpfSR7a2luZH1gIH1cblxuICBjaGFubmVsKHRvcGljLCBwYXJhbXMpeyByZXR1cm4gdGhpcy5zb2NrZXQuY2hhbm5lbCh0b3BpYywgcGFyYW1zKSB9XG5cbiAgam9pblJvb3RWaWV3cygpe1xuICAgIGxldCByb290c0ZvdW5kID0gZmFsc2VcbiAgICBET00uYWxsKGRvY3VtZW50LCBgJHtQSFhfVklFV19TRUxFQ1RPUn06bm90KFske1BIWF9QQVJFTlRfSUR9XSlgLCByb290RWwgPT4ge1xuICAgICAgaWYoIXRoaXMuZ2V0Um9vdEJ5SWQocm9vdEVsLmlkKSl7XG4gICAgICAgIGxldCB2aWV3ID0gdGhpcy5uZXdSb290Vmlldyhyb290RWwpXG4gICAgICAgIHZpZXcuc2V0SHJlZih0aGlzLmdldEhyZWYoKSlcbiAgICAgICAgdmlldy5qb2luKClcbiAgICAgICAgaWYocm9vdEVsLmdldEF0dHJpYnV0ZShQSFhfTUFJTikpeyB0aGlzLm1haW4gPSB2aWV3IH1cbiAgICAgIH1cbiAgICAgIHJvb3RzRm91bmQgPSB0cnVlXG4gICAgfSlcbiAgICByZXR1cm4gcm9vdHNGb3VuZFxuICB9XG5cbiAgcmVkaXJlY3QodG8sIGZsYXNoKXtcbiAgICB0aGlzLmRpc2Nvbm5lY3QoKVxuICAgIEJyb3dzZXIucmVkaXJlY3QodG8sIGZsYXNoKVxuICB9XG5cbiAgcmVwbGFjZU1haW4oaHJlZiwgZmxhc2gsIGNhbGxiYWNrID0gbnVsbCwgbGlua1JlZiA9IHRoaXMuc2V0UGVuZGluZ0xpbmsoaHJlZikpe1xuICAgIGxldCBvbGRNYWluRWwgPSB0aGlzLm1haW4uZWxcbiAgICBsZXQgbmV3TWFpbkVsID0gRE9NLmNsb25lTm9kZShvbGRNYWluRWwsIFwiXCIpXG4gICAgdGhpcy5tYWluLnNob3dMb2FkZXIodGhpcy5sb2FkZXJUaW1lb3V0KVxuICAgIHRoaXMubWFpbi5kZXN0cm95KClcblxuICAgIHRoaXMubWFpbiA9IHRoaXMubmV3Um9vdFZpZXcobmV3TWFpbkVsLCBmbGFzaClcbiAgICB0aGlzLm1haW4uc2V0UmVkaXJlY3QoaHJlZilcbiAgICB0aGlzLm1haW4uam9pbihqb2luQ291bnQgPT4ge1xuICAgICAgaWYoam9pbkNvdW50ID09PSAxICYmIHRoaXMuY29tbWl0UGVuZGluZ0xpbmsobGlua1JlZikpe1xuICAgICAgICBvbGRNYWluRWwucmVwbGFjZVdpdGgobmV3TWFpbkVsKVxuICAgICAgICBjYWxsYmFjayAmJiBjYWxsYmFjaygpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGlzUGh4VmlldyhlbCl7IHJldHVybiBlbC5nZXRBdHRyaWJ1dGUgJiYgZWwuZ2V0QXR0cmlidXRlKFBIWF9TRVNTSU9OKSAhPT0gbnVsbCB9XG5cbiAgbmV3Um9vdFZpZXcoZWwsIGZsYXNoKXtcbiAgICBsZXQgdmlldyA9IG5ldyBWaWV3KGVsLCB0aGlzLCBudWxsLCBmbGFzaClcbiAgICB0aGlzLnJvb3RzW3ZpZXcuaWRdID0gdmlld1xuICAgIHJldHVybiB2aWV3XG4gIH1cblxuICBvd25lcihjaGlsZEVsLCBjYWxsYmFjayl7XG4gICAgbGV0IHZpZXcgPSBtYXliZShjaGlsZEVsLmNsb3Nlc3QoUEhYX1ZJRVdfU0VMRUNUT1IpLCBlbCA9PiB0aGlzLmdldFZpZXdCeUVsKGVsKSlcbiAgICBpZih2aWV3KXsgY2FsbGJhY2sodmlldykgfVxuICB9XG5cbiAgd2l0aGluT3duZXJzKGNoaWxkRWwsIGNhbGxiYWNrKXtcbiAgICB0aGlzLm93bmVyKGNoaWxkRWwsIHZpZXcgPT4ge1xuICAgICAgbGV0IHBoeFRhcmdldCA9IGNoaWxkRWwuZ2V0QXR0cmlidXRlKHRoaXMuYmluZGluZyhcInRhcmdldFwiKSlcbiAgICAgIGlmKHBoeFRhcmdldCA9PT0gbnVsbCl7XG4gICAgICAgIGNhbGxiYWNrKHZpZXcsIGNoaWxkRWwpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2aWV3LndpdGhpblRhcmdldHMocGh4VGFyZ2V0LCBjYWxsYmFjaylcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgZ2V0Vmlld0J5RWwoZWwpe1xuICAgIGxldCByb290SWQgPSBlbC5nZXRBdHRyaWJ1dGUoUEhYX1JPT1RfSUQpXG4gICAgcmV0dXJuIG1heWJlKHRoaXMuZ2V0Um9vdEJ5SWQocm9vdElkKSwgcm9vdCA9PiByb290LmdldERlc2NlbmRlbnRCeUVsKGVsKSlcbiAgfVxuXG4gIGdldFJvb3RCeUlkKGlkKXsgcmV0dXJuIHRoaXMucm9vdHNbaWRdIH1cblxuICBkZXN0cm95QWxsVmlld3MoKXtcbiAgICBmb3IobGV0IGlkIGluIHRoaXMucm9vdHMpe1xuICAgICAgdGhpcy5yb290c1tpZF0uZGVzdHJveSgpXG4gICAgICBkZWxldGUgdGhpcy5yb290c1tpZF1cbiAgICB9XG4gIH1cblxuICBkZXN0cm95Vmlld0J5RWwoZWwpe1xuICAgIGxldCByb290ID0gdGhpcy5nZXRSb290QnlJZChlbC5nZXRBdHRyaWJ1dGUoUEhYX1JPT1RfSUQpKVxuICAgIGlmKHJvb3QpeyByb290LmRlc3Ryb3lEZXNjZW5kZW50KGVsLmlkKSB9XG4gIH1cblxuICBzZXRBY3RpdmVFbGVtZW50KHRhcmdldCl7XG4gICAgaWYodGhpcy5hY3RpdmVFbGVtZW50ID09PSB0YXJnZXQpeyByZXR1cm4gfVxuICAgIHRoaXMuYWN0aXZlRWxlbWVudCA9IHRhcmdldFxuICAgIGxldCBjYW5jZWwgPSAoKSA9PiB7XG4gICAgICBpZih0YXJnZXQgPT09IHRoaXMuYWN0aXZlRWxlbWVudCl7IHRoaXMuYWN0aXZlRWxlbWVudCA9IG51bGwgfVxuICAgICAgdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsIHRoaXMpXG4gICAgICB0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInRvdWNoZW5kXCIsIHRoaXMpXG4gICAgfVxuICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLCBjYW5jZWwpXG4gICAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaGVuZFwiLCBjYW5jZWwpXG4gIH1cblxuICBnZXRBY3RpdmVFbGVtZW50KCl7XG4gICAgaWYoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gZG9jdW1lbnQuYm9keSl7XG4gICAgICByZXR1cm4gdGhpcy5hY3RpdmVFbGVtZW50IHx8IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnRcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCBjYW4gYmUgbnVsbCBpbiBJbnRlcm5ldCBFeHBsb3JlciAxMVxuICAgICAgcmV0dXJuIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgfHwgZG9jdW1lbnQuYm9keVxuICAgIH1cbiAgfVxuXG4gIGRyb3BBY3RpdmVFbGVtZW50KHZpZXcpe1xuICAgIGlmKHRoaXMucHJldkFjdGl2ZSAmJiB2aWV3Lm93bnNFbGVtZW50KHRoaXMucHJldkFjdGl2ZSkpe1xuICAgICAgdGhpcy5wcmV2QWN0aXZlID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIHJlc3RvcmVQcmV2aW91c2x5QWN0aXZlRm9jdXMoKXtcbiAgICBpZih0aGlzLnByZXZBY3RpdmUgJiYgdGhpcy5wcmV2QWN0aXZlICE9PSBkb2N1bWVudC5ib2R5KXtcbiAgICAgIHRoaXMucHJldkFjdGl2ZS5mb2N1cygpXG4gICAgfVxuICB9XG5cbiAgYmx1ckFjdGl2ZUVsZW1lbnQoKXtcbiAgICB0aGlzLnByZXZBY3RpdmUgPSB0aGlzLmdldEFjdGl2ZUVsZW1lbnQoKVxuICAgIGlmKHRoaXMucHJldkFjdGl2ZSAhPT0gZG9jdW1lbnQuYm9keSl7IHRoaXMucHJldkFjdGl2ZS5ibHVyKCkgfVxuICB9XG5cbiAgYmluZFRvcExldmVsRXZlbnRzKCl7XG4gICAgaWYodGhpcy5ib3VuZFRvcExldmVsRXZlbnRzKXsgcmV0dXJuIH1cblxuICAgIHRoaXMuYm91bmRUb3BMZXZlbEV2ZW50cyA9IHRydWVcbiAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBmdW5jdGlvbiAoKXsgfSkgLy8gZW5zdXJlIGFsbCBjbGljayBldmVudHMgYnViYmxlIGZvciBtb2JpbGUgU2FmYXJpXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJwYWdlc2hvd1wiLCBlID0+IHtcbiAgICAgIGlmKGUucGVyc2lzdGVkKXsgLy8gcmVsb2FkIHBhZ2UgaWYgYmVpbmcgcmVzdG9yZWQgZnJvbSBiYWNrL2ZvcndhcmQgY2FjaGVcbiAgICAgICAgdGhpcy5nZXRTb2NrZXQoKS5kaXNjb25uZWN0KClcbiAgICAgICAgdGhpcy53aXRoUGFnZUxvYWRpbmcoe3RvOiB3aW5kb3cubG9jYXRpb24uaHJlZiwga2luZDogXCJyZWRpcmVjdFwifSlcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpXG4gICAgICB9XG4gICAgfSwgdHJ1ZSlcbiAgICB0aGlzLmJpbmROYXYoKVxuICAgIHRoaXMuYmluZENsaWNrcygpXG4gICAgdGhpcy5iaW5kRm9ybXMoKVxuICAgIHRoaXMuYmluZCh7a2V5dXA6IFwia2V5dXBcIiwga2V5ZG93bjogXCJrZXlkb3duXCJ9LCAoZSwgdHlwZSwgdmlldywgdGFyZ2V0LCB0YXJnZXRDdHgsIHBoeEV2ZW50LCBfcGh4VGFyZ2V0KSA9PiB7XG4gICAgICBsZXQgbWF0Y2hLZXkgPSB0YXJnZXQuZ2V0QXR0cmlidXRlKHRoaXMuYmluZGluZyhQSFhfS0VZKSlcbiAgICAgIGxldCBwcmVzc2VkS2V5ID0gZS5rZXkgJiYgZS5rZXkudG9Mb3dlckNhc2UoKSAvLyBjaHJvbWUgY2xpY2tlZCBhdXRvY29tcGxldGVzIHNlbmQgYSBrZXlkb3duIHdpdGhvdXQga2V5XG4gICAgICBpZihtYXRjaEtleSAmJiBtYXRjaEtleS50b0xvd2VyQ2FzZSgpICE9PSBwcmVzc2VkS2V5KXsgcmV0dXJuIH1cblxuICAgICAgdmlldy5wdXNoS2V5KHRhcmdldCwgdGFyZ2V0Q3R4LCB0eXBlLCBwaHhFdmVudCwge2tleTogZS5rZXksIC4uLnRoaXMuZXZlbnRNZXRhKHR5cGUsIGUsIHRhcmdldCl9KVxuICAgIH0pXG4gICAgdGhpcy5iaW5kKHtibHVyOiBcImZvY3Vzb3V0XCIsIGZvY3VzOiBcImZvY3VzaW5cIn0sIChlLCB0eXBlLCB2aWV3LCB0YXJnZXRFbCwgdGFyZ2V0Q3R4LCBwaHhFdmVudCwgcGh4VGFyZ2V0KSA9PiB7XG4gICAgICBpZighcGh4VGFyZ2V0KXtcbiAgICAgICAgdmlldy5wdXNoRXZlbnQodHlwZSwgdGFyZ2V0RWwsIHRhcmdldEN0eCwgcGh4RXZlbnQsIHRoaXMuZXZlbnRNZXRhKHR5cGUsIGUsIHRhcmdldEVsKSlcbiAgICAgIH1cbiAgICB9KVxuICAgIHRoaXMuYmluZCh7Ymx1cjogXCJibHVyXCIsIGZvY3VzOiBcImZvY3VzXCJ9LCAoZSwgdHlwZSwgdmlldywgdGFyZ2V0RWwsIHRhcmdldEN0eCwgcGh4RXZlbnQsIHBoeFRhcmdldCkgPT4ge1xuICAgICAgLy8gYmx1ciBhbmQgZm9jdXMgYXJlIHRyaWdnZXJlZCBvbiBkb2N1bWVudCBhbmQgd2luZG93LiBEaXNjYXJkIG9uZSB0byBhdm9pZCBkdXBzXG4gICAgICBpZihwaHhUYXJnZXQgJiYgIXBoeFRhcmdldCAhPT0gXCJ3aW5kb3dcIil7XG4gICAgICAgIHZpZXcucHVzaEV2ZW50KHR5cGUsIHRhcmdldEVsLCB0YXJnZXRDdHgsIHBoeEV2ZW50LCB0aGlzLmV2ZW50TWV0YSh0eXBlLCBlLCB0YXJnZXRFbCkpXG4gICAgICB9XG4gICAgfSlcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImRyYWdvdmVyXCIsIGUgPT4gZS5wcmV2ZW50RGVmYXVsdCgpKVxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiZHJvcFwiLCBlID0+IHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgICAgbGV0IGRyb3BUYXJnZXRJZCA9IG1heWJlKGNsb3Nlc3RQaHhCaW5kaW5nKGUudGFyZ2V0LCB0aGlzLmJpbmRpbmcoUEhYX0RST1BfVEFSR0VUKSksIHRydWVUYXJnZXQgPT4ge1xuICAgICAgICByZXR1cm4gdHJ1ZVRhcmdldC5nZXRBdHRyaWJ1dGUodGhpcy5iaW5kaW5nKFBIWF9EUk9QX1RBUkdFVCkpXG4gICAgICB9KVxuICAgICAgbGV0IGRyb3BUYXJnZXQgPSBkcm9wVGFyZ2V0SWQgJiYgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZHJvcFRhcmdldElkKVxuICAgICAgbGV0IGZpbGVzID0gQXJyYXkuZnJvbShlLmRhdGFUcmFuc2Zlci5maWxlcyB8fCBbXSlcbiAgICAgIGlmKCFkcm9wVGFyZ2V0IHx8IGRyb3BUYXJnZXQuZGlzYWJsZWQgfHwgZmlsZXMubGVuZ3RoID09PSAwIHx8ICEoZHJvcFRhcmdldC5maWxlcyBpbnN0YW5jZW9mIEZpbGVMaXN0KSl7IHJldHVybiB9XG5cbiAgICAgIExpdmVVcGxvYWRlci50cmFja0ZpbGVzKGRyb3BUYXJnZXQsIGZpbGVzKVxuICAgICAgZHJvcFRhcmdldC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChcImlucHV0XCIsIHtidWJibGVzOiB0cnVlfSkpXG4gICAgfSlcbiAgICB0aGlzLm9uKFBIWF9UUkFDS19VUExPQURTLCBlID0+IHtcbiAgICAgIGxldCB1cGxvYWRUYXJnZXQgPSBlLnRhcmdldFxuICAgICAgaWYoIURPTS5pc1VwbG9hZElucHV0KHVwbG9hZFRhcmdldCkpeyByZXR1cm4gfVxuICAgICAgbGV0IGZpbGVzID0gQXJyYXkuZnJvbShlLmRldGFpbC5maWxlcyB8fCBbXSkuZmlsdGVyKGYgPT4gZiBpbnN0YW5jZW9mIEZpbGUgfHwgZiBpbnN0YW5jZW9mIEJsb2IpXG4gICAgICBMaXZlVXBsb2FkZXIudHJhY2tGaWxlcyh1cGxvYWRUYXJnZXQsIGZpbGVzKVxuICAgICAgdXBsb2FkVGFyZ2V0LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwiaW5wdXRcIiwge2J1YmJsZXM6IHRydWV9KSlcbiAgICB9KVxuICB9XG5cbiAgZXZlbnRNZXRhKGV2ZW50TmFtZSwgZSwgdGFyZ2V0RWwpe1xuICAgIGxldCBjYWxsYmFjayA9IHRoaXMubWV0YWRhdGFDYWxsYmFja3NbZXZlbnROYW1lXVxuICAgIHJldHVybiBjYWxsYmFjayA/IGNhbGxiYWNrKGUsIHRhcmdldEVsKSA6IHt9XG4gIH1cblxuICBzZXRQZW5kaW5nTGluayhocmVmKXtcbiAgICB0aGlzLmxpbmtSZWYrK1xuICAgIHRoaXMucGVuZGluZ0xpbmsgPSBocmVmXG4gICAgcmV0dXJuIHRoaXMubGlua1JlZlxuICB9XG5cbiAgY29tbWl0UGVuZGluZ0xpbmsobGlua1JlZil7XG4gICAgaWYodGhpcy5saW5rUmVmICE9PSBsaW5rUmVmKXtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhyZWYgPSB0aGlzLnBlbmRpbmdMaW5rXG4gICAgICB0aGlzLnBlbmRpbmdMaW5rID0gbnVsbFxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gIH1cblxuICBnZXRIcmVmKCl7IHJldHVybiB0aGlzLmhyZWYgfVxuXG4gIGhhc1BlbmRpbmdMaW5rKCl7IHJldHVybiAhIXRoaXMucGVuZGluZ0xpbmsgfVxuXG4gIGJpbmQoZXZlbnRzLCBjYWxsYmFjayl7XG4gICAgZm9yKGxldCBldmVudCBpbiBldmVudHMpe1xuICAgICAgbGV0IGJyb3dzZXJFdmVudE5hbWUgPSBldmVudHNbZXZlbnRdXG5cbiAgICAgIHRoaXMub24oYnJvd3NlckV2ZW50TmFtZSwgZSA9PiB7XG4gICAgICAgIGxldCBiaW5kaW5nID0gdGhpcy5iaW5kaW5nKGV2ZW50KVxuICAgICAgICBsZXQgd2luZG93QmluZGluZyA9IHRoaXMuYmluZGluZyhgd2luZG93LSR7ZXZlbnR9YClcbiAgICAgICAgbGV0IHRhcmdldFBoeEV2ZW50ID0gZS50YXJnZXQuZ2V0QXR0cmlidXRlICYmIGUudGFyZ2V0LmdldEF0dHJpYnV0ZShiaW5kaW5nKVxuICAgICAgICBpZih0YXJnZXRQaHhFdmVudCl7XG4gICAgICAgICAgdGhpcy5kZWJvdW5jZShlLnRhcmdldCwgZSwgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy53aXRoaW5Pd25lcnMoZS50YXJnZXQsICh2aWV3LCB0YXJnZXRDdHgpID0+IHtcbiAgICAgICAgICAgICAgY2FsbGJhY2soZSwgZXZlbnQsIHZpZXcsIGUudGFyZ2V0LCB0YXJnZXRDdHgsIHRhcmdldFBoeEV2ZW50LCBudWxsKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIERPTS5hbGwoZG9jdW1lbnQsIGBbJHt3aW5kb3dCaW5kaW5nfV1gLCBlbCA9PiB7XG4gICAgICAgICAgICBsZXQgcGh4RXZlbnQgPSBlbC5nZXRBdHRyaWJ1dGUod2luZG93QmluZGluZylcbiAgICAgICAgICAgIHRoaXMuZGVib3VuY2UoZWwsIGUsICgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy53aXRoaW5Pd25lcnMoZWwsICh2aWV3LCB0YXJnZXRDdHgpID0+IHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlLCBldmVudCwgdmlldywgZWwsIHRhcmdldEN0eCwgcGh4RXZlbnQsIFwid2luZG93XCIpXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgYmluZENsaWNrcygpe1xuICAgIHRoaXMuYmluZENsaWNrKFwiY2xpY2tcIiwgXCJjbGlja1wiLCBmYWxzZSlcbiAgICB0aGlzLmJpbmRDbGljayhcIm1vdXNlZG93blwiLCBcImNhcHR1cmUtY2xpY2tcIiwgdHJ1ZSlcbiAgfVxuXG4gIGJpbmRDbGljayhldmVudE5hbWUsIGJpbmRpbmdOYW1lLCBjYXB0dXJlKXtcbiAgICBsZXQgY2xpY2sgPSB0aGlzLmJpbmRpbmcoYmluZGluZ05hbWUpXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBlID0+IHtcbiAgICAgIGlmKCF0aGlzLmlzQ29ubmVjdGVkKCkpeyByZXR1cm4gfVxuICAgICAgbGV0IHRhcmdldCA9IG51bGxcbiAgICAgIGlmKGNhcHR1cmUpe1xuICAgICAgICB0YXJnZXQgPSBlLnRhcmdldC5tYXRjaGVzKGBbJHtjbGlja31dYCkgPyBlLnRhcmdldCA6IGUudGFyZ2V0LnF1ZXJ5U2VsZWN0b3IoYFske2NsaWNrfV1gKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFyZ2V0ID0gY2xvc2VzdFBoeEJpbmRpbmcoZS50YXJnZXQsIGNsaWNrKVxuICAgICAgfVxuICAgICAgbGV0IHBoeEV2ZW50ID0gdGFyZ2V0ICYmIHRhcmdldC5nZXRBdHRyaWJ1dGUoY2xpY2spXG4gICAgICBpZighcGh4RXZlbnQpeyByZXR1cm4gfVxuICAgICAgaWYodGFyZ2V0LmdldEF0dHJpYnV0ZShcImhyZWZcIikgPT09IFwiI1wiKXsgZS5wcmV2ZW50RGVmYXVsdCgpIH1cblxuICAgICAgdGhpcy5kZWJvdW5jZSh0YXJnZXQsIGUsICgpID0+IHtcbiAgICAgICAgdGhpcy53aXRoaW5Pd25lcnModGFyZ2V0LCAodmlldywgdGFyZ2V0Q3R4KSA9PiB7XG4gICAgICAgICAgdmlldy5wdXNoRXZlbnQoXCJjbGlja1wiLCB0YXJnZXQsIHRhcmdldEN0eCwgcGh4RXZlbnQsIHRoaXMuZXZlbnRNZXRhKFwiY2xpY2tcIiwgZSwgdGFyZ2V0KSlcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfSwgY2FwdHVyZSlcbiAgfVxuXG4gIGJpbmROYXYoKXtcbiAgICBpZighQnJvd3Nlci5jYW5QdXNoU3RhdGUoKSl7IHJldHVybiB9XG4gICAgaWYoaGlzdG9yeS5zY3JvbGxSZXN0b3JhdGlvbil7IGhpc3Rvcnkuc2Nyb2xsUmVzdG9yYXRpb24gPSBcIm1hbnVhbFwiIH1cbiAgICBsZXQgc2Nyb2xsVGltZXIgPSBudWxsXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgX2UgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KHNjcm9sbFRpbWVyKVxuICAgICAgc2Nyb2xsVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgQnJvd3Nlci51cGRhdGVDdXJyZW50U3RhdGUoc3RhdGUgPT4gT2JqZWN0LmFzc2lnbihzdGF0ZSwge3Njcm9sbDogd2luZG93LnNjcm9sbFl9KSlcbiAgICAgIH0sIDEwMClcbiAgICB9KVxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicG9wc3RhdGVcIiwgZXZlbnQgPT4ge1xuICAgICAgaWYoIXRoaXMucmVnaXN0ZXJOZXdMb2NhdGlvbih3aW5kb3cubG9jYXRpb24pKXsgcmV0dXJuIH1cbiAgICAgIGxldCB7dHlwZSwgaWQsIHJvb3QsIHNjcm9sbH0gPSBldmVudC5zdGF0ZSB8fCB7fVxuICAgICAgbGV0IGhyZWYgPSB3aW5kb3cubG9jYXRpb24uaHJlZlxuXG4gICAgICBpZih0aGlzLm1haW4uaXNDb25uZWN0ZWQoKSAmJiAodHlwZSA9PT0gXCJwYXRjaFwiICYmIGlkID09PSB0aGlzLm1haW4uaWQpKXtcbiAgICAgICAgdGhpcy5tYWluLnB1c2hMaW5rUGF0Y2goaHJlZiwgbnVsbClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucmVwbGFjZU1haW4oaHJlZiwgbnVsbCwgKCkgPT4ge1xuICAgICAgICAgIGlmKHJvb3QpeyB0aGlzLnJlcGxhY2VSb290SGlzdG9yeSgpIH1cbiAgICAgICAgICBpZih0eXBlb2YgKHNjcm9sbCkgPT09IFwibnVtYmVyXCIpe1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIHdpbmRvdy5zY3JvbGxUbygwLCBzY3JvbGwpXG4gICAgICAgICAgICB9LCAwKSAvLyB0aGUgYm9keSBuZWVkcyB0byByZW5kZXIgYmVmb3JlIHdlIHNjcm9sbC5cbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSwgZmFsc2UpXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBlID0+IHtcbiAgICAgIGxldCB0YXJnZXQgPSBjbG9zZXN0UGh4QmluZGluZyhlLnRhcmdldCwgUEhYX0xJVkVfTElOSylcbiAgICAgIGxldCB0eXBlID0gdGFyZ2V0ICYmIHRhcmdldC5nZXRBdHRyaWJ1dGUoUEhYX0xJVkVfTElOSylcbiAgICAgIGxldCB3YW50c05ld1RhYiA9IGUubWV0YUtleSB8fCBlLmN0cmxLZXkgfHwgZS5idXR0b24gPT09IDFcbiAgICAgIGlmKCF0eXBlIHx8ICF0aGlzLmlzQ29ubmVjdGVkKCkgfHwgIXRoaXMubWFpbiB8fCB3YW50c05ld1RhYil7IHJldHVybiB9XG4gICAgICBsZXQgaHJlZiA9IHRhcmdldC5ocmVmXG4gICAgICBsZXQgbGlua1N0YXRlID0gdGFyZ2V0LmdldEF0dHJpYnV0ZShQSFhfTElOS19TVEFURSlcbiAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgICAgaWYodGhpcy5wZW5kaW5nTGluayA9PT0gaHJlZil7IHJldHVybiB9XG5cbiAgICAgIGlmKHR5cGUgPT09IFwicGF0Y2hcIil7XG4gICAgICAgIHRoaXMucHVzaEhpc3RvcnlQYXRjaChocmVmLCBsaW5rU3RhdGUsIHRhcmdldClcbiAgICAgIH0gZWxzZSBpZih0eXBlID09PSBcInJlZGlyZWN0XCIpe1xuICAgICAgICB0aGlzLmhpc3RvcnlSZWRpcmVjdChocmVmLCBsaW5rU3RhdGUpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGV4cGVjdGVkICR7UEhYX0xJVkVfTElOS30gdG8gYmUgXCJwYXRjaFwiIG9yIFwicmVkaXJlY3RcIiwgZ290OiAke3R5cGV9YClcbiAgICAgIH1cbiAgICB9LCBmYWxzZSlcbiAgfVxuXG4gIHdpdGhQYWdlTG9hZGluZyhpbmZvLCBjYWxsYmFjayl7XG4gICAgRE9NLmRpc3BhdGNoRXZlbnQod2luZG93LCBcInBoeDpwYWdlLWxvYWRpbmctc3RhcnRcIiwgaW5mbylcbiAgICBsZXQgZG9uZSA9ICgpID0+IERPTS5kaXNwYXRjaEV2ZW50KHdpbmRvdywgXCJwaHg6cGFnZS1sb2FkaW5nLXN0b3BcIiwgaW5mbylcbiAgICByZXR1cm4gY2FsbGJhY2sgPyBjYWxsYmFjayhkb25lKSA6IGRvbmVcbiAgfVxuXG4gIHB1c2hIaXN0b3J5UGF0Y2goaHJlZiwgbGlua1N0YXRlLCB0YXJnZXRFbCl7XG4gICAgdGhpcy53aXRoUGFnZUxvYWRpbmcoe3RvOiBocmVmLCBraW5kOiBcInBhdGNoXCJ9LCBkb25lID0+IHtcbiAgICAgIHRoaXMubWFpbi5wdXNoTGlua1BhdGNoKGhyZWYsIHRhcmdldEVsLCBsaW5rUmVmID0+IHtcbiAgICAgICAgdGhpcy5oaXN0b3J5UGF0Y2goaHJlZiwgbGlua1N0YXRlLCBsaW5rUmVmKVxuICAgICAgICBkb25lKClcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIGhpc3RvcnlQYXRjaChocmVmLCBsaW5rU3RhdGUsIGxpbmtSZWYgPSB0aGlzLnNldFBlbmRpbmdMaW5rKGhyZWYpKXtcbiAgICBpZighdGhpcy5jb21taXRQZW5kaW5nTGluayhsaW5rUmVmKSl7IHJldHVybiB9XG5cbiAgICBCcm93c2VyLnB1c2hTdGF0ZShsaW5rU3RhdGUsIHt0eXBlOiBcInBhdGNoXCIsIGlkOiB0aGlzLm1haW4uaWR9LCBocmVmKVxuICAgIHRoaXMucmVnaXN0ZXJOZXdMb2NhdGlvbih3aW5kb3cubG9jYXRpb24pXG4gIH1cblxuICBoaXN0b3J5UmVkaXJlY3QoaHJlZiwgbGlua1N0YXRlLCBmbGFzaCl7XG4gICAgbGV0IHNjcm9sbCA9IHdpbmRvdy5zY3JvbGxZXG4gICAgdGhpcy53aXRoUGFnZUxvYWRpbmcoe3RvOiBocmVmLCBraW5kOiBcInJlZGlyZWN0XCJ9LCBkb25lID0+IHtcbiAgICAgIHRoaXMucmVwbGFjZU1haW4oaHJlZiwgZmxhc2gsICgpID0+IHtcbiAgICAgICAgQnJvd3Nlci5wdXNoU3RhdGUobGlua1N0YXRlLCB7dHlwZTogXCJyZWRpcmVjdFwiLCBpZDogdGhpcy5tYWluLmlkLCBzY3JvbGw6IHNjcm9sbH0sIGhyZWYpXG4gICAgICAgIHRoaXMucmVnaXN0ZXJOZXdMb2NhdGlvbih3aW5kb3cubG9jYXRpb24pXG4gICAgICAgIGRvbmUoKVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgcmVwbGFjZVJvb3RIaXN0b3J5KCl7XG4gICAgQnJvd3Nlci5wdXNoU3RhdGUoXCJyZXBsYWNlXCIsIHtyb290OiB0cnVlLCB0eXBlOiBcInBhdGNoXCIsIGlkOiB0aGlzLm1haW4uaWR9KVxuICB9XG5cbiAgcmVnaXN0ZXJOZXdMb2NhdGlvbihuZXdMb2NhdGlvbil7XG4gICAgbGV0IHtwYXRobmFtZSwgc2VhcmNofSA9IHRoaXMuY3VycmVudExvY2F0aW9uXG4gICAgaWYocGF0aG5hbWUgKyBzZWFyY2ggPT09IG5ld0xvY2F0aW9uLnBhdGhuYW1lICsgbmV3TG9jYXRpb24uc2VhcmNoKXtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmN1cnJlbnRMb2NhdGlvbiA9IGNsb25lKG5ld0xvY2F0aW9uKVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gIH1cblxuICBiaW5kRm9ybXMoKXtcbiAgICBsZXQgaXRlcmF0aW9ucyA9IDBcbiAgICB0aGlzLm9uKFwic3VibWl0XCIsIGUgPT4ge1xuICAgICAgbGV0IHBoeEV2ZW50ID0gZS50YXJnZXQuZ2V0QXR0cmlidXRlKHRoaXMuYmluZGluZyhcInN1Ym1pdFwiKSlcbiAgICAgIGlmKCFwaHhFdmVudCl7IHJldHVybiB9XG4gICAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICAgIGUudGFyZ2V0LmRpc2FibGVkID0gdHJ1ZVxuICAgICAgdGhpcy53aXRoaW5Pd25lcnMoZS50YXJnZXQsICh2aWV3LCB0YXJnZXRDdHgpID0+IHZpZXcuc3VibWl0Rm9ybShlLnRhcmdldCwgdGFyZ2V0Q3R4LCBwaHhFdmVudCkpXG4gICAgfSwgZmFsc2UpXG5cbiAgICBmb3IobGV0IHR5cGUgb2YgW1wiY2hhbmdlXCIsIFwiaW5wdXRcIl0pe1xuICAgICAgdGhpcy5vbih0eXBlLCBlID0+IHtcbiAgICAgICAgbGV0IGlucHV0ID0gZS50YXJnZXRcbiAgICAgICAgbGV0IHBoeEV2ZW50ID0gaW5wdXQuZm9ybSAmJiBpbnB1dC5mb3JtLmdldEF0dHJpYnV0ZSh0aGlzLmJpbmRpbmcoXCJjaGFuZ2VcIikpXG4gICAgICAgIGlmKCFwaHhFdmVudCl7IHJldHVybiB9XG4gICAgICAgIGlmKGlucHV0LnR5cGUgPT09IFwibnVtYmVyXCIgJiYgaW5wdXQudmFsaWRpdHkgJiYgaW5wdXQudmFsaWRpdHkuYmFkSW5wdXQpeyByZXR1cm4gfVxuICAgICAgICBsZXQgY3VycmVudEl0ZXJhdGlvbnMgPSBpdGVyYXRpb25zXG4gICAgICAgIGl0ZXJhdGlvbnMrK1xuICAgICAgICBsZXQge2F0OiBhdCwgdHlwZTogbGFzdFR5cGV9ID0gRE9NLnByaXZhdGUoaW5wdXQsIFwicHJldi1pdGVyYXRpb25cIikgfHwge31cbiAgICAgICAgLy8gZGV0ZWN0IGR1cCBiZWNhdXNlIHNvbWUgYnJvd3NlcnMgZGlzcGF0Y2ggYm90aCBcImlucHV0XCIgYW5kIFwiY2hhbmdlXCJcbiAgICAgICAgaWYoYXQgPT09IGN1cnJlbnRJdGVyYXRpb25zIC0gMSAmJiB0eXBlICE9PSBsYXN0VHlwZSl7IHJldHVybiB9XG5cbiAgICAgICAgRE9NLnB1dFByaXZhdGUoaW5wdXQsIFwicHJldi1pdGVyYXRpb25cIiwge2F0OiBjdXJyZW50SXRlcmF0aW9ucywgdHlwZTogdHlwZX0pXG5cbiAgICAgICAgdGhpcy5kZWJvdW5jZShpbnB1dCwgZSwgKCkgPT4ge1xuICAgICAgICAgIHRoaXMud2l0aGluT3duZXJzKGlucHV0LmZvcm0sICh2aWV3LCB0YXJnZXRDdHgpID0+IHtcbiAgICAgICAgICAgIERPTS5wdXRQcml2YXRlKGlucHV0LCBQSFhfSEFTX0ZPQ1VTRUQsIHRydWUpXG4gICAgICAgICAgICBpZighRE9NLmlzVGV4dHVhbElucHV0KGlucHV0KSl7XG4gICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlRWxlbWVudChpbnB1dClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZpZXcucHVzaElucHV0KGlucHV0LCB0YXJnZXRDdHgsIHBoeEV2ZW50LCBlLnRhcmdldClcbiAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgICAgfSwgZmFsc2UpXG4gICAgfVxuICB9XG5cbiAgZGVib3VuY2UoZWwsIGV2ZW50LCBjYWxsYmFjayl7XG4gICAgbGV0IHBoeERlYm91bmNlID0gdGhpcy5iaW5kaW5nKFBIWF9ERUJPVU5DRSlcbiAgICBsZXQgcGh4VGhyb3R0bGUgPSB0aGlzLmJpbmRpbmcoUEhYX1RIUk9UVExFKVxuICAgIGxldCBkZWZhdWx0RGVib3VuY2UgPSB0aGlzLmRlZmF1bHRzLmRlYm91bmNlLnRvU3RyaW5nKClcbiAgICBsZXQgZGVmYXVsdFRocm90dGxlID0gdGhpcy5kZWZhdWx0cy50aHJvdHRsZS50b1N0cmluZygpXG4gICAgRE9NLmRlYm91bmNlKGVsLCBldmVudCwgcGh4RGVib3VuY2UsIGRlZmF1bHREZWJvdW5jZSwgcGh4VGhyb3R0bGUsIGRlZmF1bHRUaHJvdHRsZSwgY2FsbGJhY2spXG4gIH1cblxuICBzaWxlbmNlRXZlbnRzKGNhbGxiYWNrKXtcbiAgICB0aGlzLnNpbGVuY2VkID0gdHJ1ZVxuICAgIGNhbGxiYWNrKClcbiAgICB0aGlzLnNpbGVuY2VkID0gZmFsc2VcbiAgfVxuXG4gIG9uKGV2ZW50LCBjYWxsYmFjayl7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIGUgPT4ge1xuICAgICAgaWYoIXRoaXMuc2lsZW5jZWQpeyBjYWxsYmFjayhlKSB9XG4gICAgfSlcbiAgfVxufVxuIiwgImltcG9ydCAqIGFzIFR1cmJvIGZyb20gXCJAaG90d2lyZWQvdHVyYm9cIlxuaW1wb3J0IHsgQXBwbGljYXRpb24gfSBmcm9tIFwic3RpbXVsdXNcIlxuaW1wb3J0IHsgZGVmaW5pdGlvbnMgfSBmcm9tICdzdGltdWx1czouL2NvbnRyb2xsZXJzJztcbmltcG9ydCB7U29ja2V0fSBmcm9tIFwicGhvZW5peFwiXG5pbXBvcnQge0xpdmVTb2NrZXR9IGZyb20gXCJwaG9lbml4X2xpdmVfdmlld1wiXG5cbmNvbnN0IGFwcCA9IEFwcGxpY2F0aW9uLnN0YXJ0KCk7XG5hcHAubG9hZChkZWZpbml0aW9ucyk7XG5cbmxldCBjc3JmVG9rZW4gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwibWV0YVtuYW1lPSdjc3JmLXRva2VuJ11cIikuZ2V0QXR0cmlidXRlKFwiY29udGVudFwiKVxubGV0IGxpdmVTb2NrZXQgPSBuZXcgTGl2ZVNvY2tldChcIi9saXZlXCIsIFNvY2tldCwge3BhcmFtczoge19jc3JmX3Rva2VuOiBjc3JmVG9rZW59fSlcblxuLy8gQ29ubmVjdCBpZiB0aGVyZSBhcmUgYW55IExpdmVWaWV3cyBvbiB0aGUgcGFnZVxubGl2ZVNvY2tldC5jb25uZWN0KClcblxuIl0sCiAgIm1hcHBpbmdzIjogIk1BSUEsQUFBQyxXQUFZLENBQ1QsR0FBSSxPQUFPLFVBQVksUUFBYSxPQUFPLGlCQUFtQixRQUMxRCxPQUFPLGVBQWUsMEJBQ3RCLE9BRUosR0FBTSxHQUFxQixZQUNyQixFQUFvQixDQUN0QixZQUFlLFVBQXVCLENBQ2xDLE1BQU8sU0FBUSxVQUFVLEVBQW9CLEdBQUksS0FBSyxlQUc5RCxPQUFPLFlBQ0gsRUFBa0IsWUFDdEIsWUFBWSxVQUFZLEVBQW1CLFVBQzNDLFlBQVksVUFBVSxZQUFjLFlBQ3BDLE9BQU8sZUFBZSxZQUFhLE9BR3ZDLEdBQU0sSUFBbUIsR0FBSSxTQUM3QixZQUFzQyxFQUFRLENBQzFDLEdBQU0sR0FBVSxZQUFrQixTQUFVLEVBQVMsWUFBa0IsTUFBTyxFQUFPLGNBQWdCLEtBQy9GLEVBQVksRUFBVSxFQUFRLFFBQVEsaUJBQW1CLEtBQy9ELE1BQVEsSUFBYyxLQUErQixPQUFTLEVBQVUsT0FBUyxTQUFXLEVBQVksS0FFNUcsWUFBdUIsRUFBTyxDQUMxQixHQUFNLEdBQVksR0FBNkIsRUFBTSxRQUNyRCxBQUFJLEdBQWEsRUFBVSxNQUN2QixHQUFpQixJQUFJLEVBQVUsS0FBTSxHQUc3QyxBQUFDLFdBQVksQ0FDVCxBQUFJLGVBQWlCLFNBRXJCLGtCQUFpQixRQUFTLEdBQWUsSUFDekMsT0FBTyxlQUFlLE1BQU0sVUFBVyxZQUFhLENBQ2hELEtBQU0sQ0FDRixHQUFJLEtBQUssTUFBUSxVQUFZLEtBQUssaUJBQWtCLGlCQUNoRCxNQUFPLElBQWlCLElBQUksS0FBSyxnQkFNakQsR0FBSSxHQUNKLEFBQUMsVUFBVSxFQUFtQixDQUMxQixFQUFrQixNQUFXLFFBQzdCLEVBQWtCLEtBQVUsU0FDN0IsR0FBc0IsR0FBb0IsS0FDN0MsbUJBQTJC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 diff --git a/assets/controllers/time_controller.js b/assets/controllers/time_controller.js new file mode 100644 index 0000000..f09bd1a --- /dev/null +++ b/assets/controllers/time_controller.js @@ -0,0 +1,19 @@ +import { Controller } from "stimulus"; +import { DateTime } from "luxon"; + +export default class extends Controller { + static values = { format: String }; + + connect() { + var browserTz = Intl.DateTimeFormat().resolvedOptions().timeZone; + var browserLocale = Intl.DateTimeFormat().resolvedOptions().locale; + var locale = document.body.dataset.locale || browserLocale || "en"; + var tz = document.body.dataset.tz || browserTz || "UTC"; + var style = DateTime[this.formatValue]; + console.log(locale,tz,style); + this.date = DateTime.fromISO(this.element.dateTime).setZone(tz).setLocale(locale); + this.element.innerText = this.date.toLocaleString(style); + } + +} + diff --git a/assets/css/chat.css b/assets/css/chat.css new file mode 100644 index 0000000..2e2cf53 --- /dev/null +++ b/assets/css/chat.css @@ -0,0 +1,45 @@ +.phx-disconnected > .chat { + .disconnected { + @display block; + } +} +.phx-error > .chat { + .phx-errored { + @display block; + } +} + +.chat { + @apply h-screen max-h-screen; + + .disconnected, .phx-errored { @apply hidden; } + + .body { + @apply grid h-3/4 grid-cols-10; + + .log { + @apply h-full max-w-full col-span-9 h-96 gap-4; + + .time-component { + @apply inline-block font-mono text-sm flex-none cursor-default; + } + + li.event { + .time-component { @apply text-gray-700 dark:text-gray-300; }; + .nick { @apply text-gray-700 dark:text-gray-700; } + } + + } + + aside { + @apply px-4 pt-4 bg-gray-100 text-sm; + .user.dropdown { + .content { + @apply z-40 origin-top-right absolute right-full mr-4 -mt-4 bg-gray-50 w-80 py-4 px-4 rounded-md shadow-xl ring-1 ring-black ring-opacity-5 focus:outline-none; + } + } + } + + } + +} diff --git a/assets/css/dropdown.css b/assets/css/dropdown.css new file mode 100644 index 0000000..57adb3b --- /dev/null +++ b/assets/css/dropdown.css @@ -0,0 +1,26 @@ +/* + * == DROPDOWN + */ + +.dropdown { + position: relative; + summary { + list-style: none; + cursor: pointer; + &::-webkit-details-marker { + display: none; + } + .content { + position: absolute; + } + details[open] summary::before { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + content: ""; + cursor: default; + } + } +} diff --git a/assets/package-lock.json b/assets/package-lock.json index 4104e1e..d49bbf5 100644 --- a/assets/package-lock.json +++ b/assets/package-lock.json @@ -11,6 +11,10 @@ "@fortawesome/fontawesome-free": "^5.15.4", "@hotwired/turbo": "^7.0.0-rc.1", "@tailwindcss/typography": "^0.4.1", + "luxon": "^2.0.2", + "phoenix": "file:../deps/phoenix", + "phoenix_html": "file:../deps/phoenix_html", + "phoenix_live_view": "file:../deps/phoenix_live_view", "stimulus": "^2.0.0" }, "devDependencies": { @@ -27,6 +31,17 @@ "yarn": "^1.22.11" } }, + "../deps/phoenix": { + "version": "1.6.0-rc.0", + "license": "MIT" + }, + "../deps/phoenix_html": { + "version": "3.0.2" + }, + "../deps/phoenix_live_view": { + "version": "0.16.1", + "license": "MIT" + }, "node_modules/@babel/code-frame": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", @@ -1312,6 +1327,14 @@ "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" }, + "node_modules/luxon": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-2.0.2.tgz", + "integrity": "sha512-ZRioYLCgRHrtTORaZX1mx+jtxKtKuI5ZDvHNAmqpUzGqSrR+tL4FVLn/CUGMA3h0+AKD1MAxGI5GnCqR5txNqg==", + "engines": { + "node": "*" + } + }, "node_modules/mdn-data": { "version": "2.0.14", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", @@ -1506,6 +1529,18 @@ "node": ">=8" } }, + "node_modules/phoenix": { + "resolved": "../deps/phoenix", + "link": true + }, + "node_modules/phoenix_html": { + "resolved": "../deps/phoenix_html", + "link": true + }, + "node_modules/phoenix_live_view": { + "resolved": "../deps/phoenix_live_view", + "link": true + }, "node_modules/picomatch": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", @@ -3618,6 +3653,11 @@ "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" }, + "luxon": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-2.0.2.tgz", + "integrity": "sha512-ZRioYLCgRHrtTORaZX1mx+jtxKtKuI5ZDvHNAmqpUzGqSrR+tL4FVLn/CUGMA3h0+AKD1MAxGI5GnCqR5txNqg==" + }, "mdn-data": { "version": "2.0.14", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", @@ -3758,6 +3798,15 @@ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" }, + "phoenix": { + "version": "file:../deps/phoenix" + }, + "phoenix_html": { + "version": "file:../deps/phoenix_html" + }, + "phoenix_live_view": { + "version": "file:../deps/phoenix_live_view" + }, "picomatch": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", diff --git a/assets/package.json b/assets/package.json index e674292..a9cb891 100644 --- a/assets/package.json +++ b/assets/package.json @@ -19,6 +19,10 @@ "@fortawesome/fontawesome-free": "^5.15.4", "@hotwired/turbo": "^7.0.0-rc.1", "@tailwindcss/typography": "^0.4.1", + "luxon": "^2.0.2", + "phoenix": "file:../deps/phoenix", + "phoenix_html": "file:../deps/phoenix_html", + "phoenix_live_view": "file:../deps/phoenix_live_view", "stimulus": "^2.0.0" } } diff --git a/assets/script/watch.site.js b/assets/script/watch.site.js index c7a3a3a..9e6af5d 100644 --- a/assets/script/watch.site.js +++ b/assets/script/watch.site.js @@ -5,7 +5,7 @@ const { stimulusPlugin } = require('esbuild-plugin-stimulus'); esbuild.build({ entryPoints: ['site.js'], bundle: true, - outfile: 'assets/site.js', + outfile: '../priv/static/assets/site.js', minify: true, sourcemap: "inline", watch: true, diff --git a/assets/site.css b/assets/site.css index 76fcadc..c77af7c 100644 --- a/assets/site.css +++ b/assets/site.css @@ -1,3 +1,6 @@ @import "tailwindcss/base"; @import "tailwindcss/components"; @import "tailwindcss/utilities"; + +@import "css/dropdown.css"; +@import "css/chat.css"; diff --git a/assets/site.js b/assets/site.js index 2a1bdd6..9fc1a44 100644 --- a/assets/site.js +++ b/assets/site.js @@ -1,6 +1,36 @@ import * as Turbo from "@hotwired/turbo" import { Application } from "stimulus" import { definitions } from 'stimulus:./controllers'; +import {Socket} from "phoenix" +import {LiveSocket} from "phoenix_live_view" +import { DateTime } from "luxon"; const app = Application.start(); app.load(definitions); + +let Hooks = {} + +Hooks.AutoFocus = { + mounted() { + this.el.focus(); + } +} + +Hooks.NaiveDateTimeUTC = { + mounted() { + var intl = Intl.DateTimeFormat().resolvedOptions(); + var tz = document.body.dataset.tz || intl.timeZone || "UTC"; + var locale = document.body.dataset.locale || intl.locale || "en"; + + var style = DateTime[this.el.dataset.timeFormat]; + var date = DateTime.fromISO(this.el.dateTime, { zone: 'utc' }).setZone(tz).setLocale(locale); + this.el.innerText = date.toLocaleString(style); + } +} + +let csrfToken = document.querySelector("meta[name='csrf-token']").getAttribute("content") +let liveSocket = new LiveSocket("/live", Socket, {hooks: Hooks, params: {_csrf_token: csrfToken}}) + +// Connect if there are any LiveViews on the page +liveSocket.connect() + diff --git a/assets/tailwind.config.js b/assets/tailwind.config.js index e51919e..2436ecb 100644 --- a/assets/tailwind.config.js +++ b/assets/tailwind.config.js @@ -2,10 +2,10 @@ const colors = require('tailwindcss/colors'); const defaultTheme = require('tailwindcss/defaultTheme'); module.exports = { - mode: "jit", +// mode: "jit", purge: [ './**/*.js', - '../lib/*_web/**/*.*ex' + '../lib/*_web/**/*.*ex' ], darkMode: 'media', theme: { diff --git a/priv/static/assets/alcoolog.js.gz b/priv/static/assets/alcoolog.js.gz Binary files differindex 0cd1b70..95c3f94 100644 --- a/priv/static/assets/alcoolog.js.gz +++ b/priv/static/assets/alcoolog.js.gz diff --git a/priv/static/assets/site.css b/priv/static/assets/site.css index 6d25d3f..4753c8b 100644 --- a/priv/static/assets/site.css +++ b/priv/static/assets/site.css @@ -1 +1 @@ -/*! tailwindcss v2.2.9 | MIT License | https://tailwindcss.com*//*! modern-normalize v1.1.0 | MIT License | https://github.com/sindresorhus/modern-normalize */html{-webkit-text-size-adjust:100%;line-height:1.15;-moz-tab-size:4;-o-tab-size:4;tab-size:4}body{font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji;margin:0}hr{color:inherit;height:0}abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,select{text-transform:none}[type=button],button{-webkit-appearance:button}legend{padding:0}progress{vertical-align:baseline}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}button{background-color:transparent;background-image:none}fieldset,ol,ul{margin:0;padding:0}ol,ul{list-style:none}html{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}body{font-family:inherit;line-height:inherit}*,:after,:before{border:0 solid;box-sizing:border-box}hr{border-top-width:1px}img{border-style:solid}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{color:#a8a29e;opacity:1}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#a8a29e;opacity:1}input::placeholder,textarea::placeholder{color:#a8a29e;opacity:1}[role=button],button{cursor:pointer}table{border-collapse:collapse}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}button,input,optgroup,select,textarea{color:inherit;line-height:inherit;padding:0}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[hidden]{display:none}*,:after,:before{--tw-border-opacity:1;border-color:rgba(231,229,228,var(--tw-border-opacity))}.prose{color:#44403c;max-width:65ch}.prose [class~=lead]{color:#57534e;font-size:1.25em;line-height:1.6;margin-bottom:1.2em;margin-top:1.2em}.prose a{color:#1c1917;font-weight:500;text-decoration:underline}.prose strong{color:#1c1917;font-weight:600}.prose ol[type=A]{--list-counter-style:upper-alpha}.prose ol[type=a]{--list-counter-style:lower-alpha}.prose ol[type=A s]{--list-counter-style:upper-alpha}.prose ol[type=a s]{--list-counter-style:lower-alpha}.prose ol[type=i],.prose ol[type=i s]{--list-counter-style:lower-roman}.prose ol[type="1"]{--list-counter-style:decimal}.prose ol>li{padding-left:1.75em;position:relative}.prose ol>li:before{color:#78716c;content:counter(list-item,var(--list-counter-style,decimal)) ".";font-weight:400;left:0;position:absolute}.prose ul>li{padding-left:1.75em;position:relative}.prose ul>li:before{background-color:#d6d3d1;border-radius:50%;content:"";height:.375em;left:.25em;position:absolute;top:.6875em;width:.375em}.prose hr{border-color:#e7e5e4;border-top-width:1px;margin-bottom:3em;margin-top:3em}.prose blockquote{border-left-color:#e7e5e4;border-left-width:.25rem;color:#1c1917;font-style:italic;font-weight:500;margin-bottom:1.6em;margin-top:1.6em;padding-left:1em;quotes:"\201C""\201D""\2018""\2019"}.prose blockquote p:first-of-type:before{content:open-quote}.prose blockquote p:last-of-type:after{content:close-quote}.prose h1{color:#1c1917;font-size:2.25em;font-weight:800;line-height:1.1111111;margin-bottom:.8888889em;margin-top:0}.prose h2{color:#1c1917;font-size:1.5em;font-weight:700;line-height:1.3333333;margin-bottom:1em;margin-top:2em}.prose h3{color:#1c1917;font-size:1.25em;font-weight:600;line-height:1.6;margin-bottom:.6em;margin-top:1.6em}.prose h4{color:#1c1917;font-weight:600;line-height:1.5;margin-bottom:.5em;margin-top:1.5em}.prose figure figcaption{color:#78716c;font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose code{color:#1c1917;font-size:.875em;font-weight:600}.prose code:after,.prose code:before{content:"`"}.prose a code{color:#1c1917}.prose pre{background-color:#292524;border-radius:.375rem;color:#e7e5e4;font-size:.875em;line-height:1.7142857;margin-bottom:1.7142857em;margin-top:1.7142857em;overflow-x:auto;padding:.8571429em 1.1428571em}.prose pre code{background-color:transparent;border-radius:0;border-width:0;color:inherit;font-family:inherit;font-size:inherit;font-weight:400;line-height:inherit;padding:0}.prose pre code:after,.prose pre code:before{content:none}.prose table{font-size:.875em;line-height:1.7142857;margin-bottom:2em;margin-top:2em;table-layout:auto;text-align:left;width:100%}.prose thead{border-bottom-color:#d6d3d1;border-bottom-width:1px;color:#1c1917;font-weight:600}.prose thead th{padding-bottom:.5714286em;padding-left:.5714286em;padding-right:.5714286em;vertical-align:bottom}.prose tbody tr{border-bottom-color:#e7e5e4;border-bottom-width:1px}.prose tbody tr:last-child{border-bottom-width:0}.prose tbody td{padding:.5714286em;vertical-align:top}.prose{font-size:1rem;line-height:1.75}.prose p{margin-bottom:1.25em;margin-top:1.25em}.prose figure,.prose img,.prose video{margin-bottom:2em;margin-top:2em}.prose figure>*{margin-bottom:0;margin-top:0}.prose h2 code{font-size:.875em}.prose h3 code{font-size:.9em}.prose ol,.prose ul{margin-bottom:1.25em;margin-top:1.25em}.prose li{margin-bottom:.5em;margin-top:.5em}.prose>ul>li p{margin-bottom:.75em;margin-top:.75em}.prose>ul>li>:first-child{margin-top:1.25em}.prose>ul>li>:last-child{margin-bottom:1.25em}.prose>ol>li>:first-child{margin-top:1.25em}.prose>ol>li>:last-child{margin-bottom:1.25em}.prose ol ol,.prose ol ul,.prose ul ol,.prose ul ul{margin-bottom:.75em;margin-top:.75em}.prose h2+*,.prose h3+*,.prose h4+*,.prose hr+*{margin-top:0}.prose thead th:first-child{padding-left:0}.prose thead th:last-child{padding-right:0}.prose tbody td:first-child{padding-left:0}.prose tbody td:last-child{padding-right:0}.prose>:first-child{margin-top:0}.prose>:last-child{margin-bottom:0}.prose-lg{font-size:1.125rem;line-height:1.7777778}.prose-lg p{margin-bottom:1.3333333em;margin-top:1.3333333em}.prose-lg [class~=lead]{font-size:1.2222222em;line-height:1.4545455;margin-bottom:1.0909091em;margin-top:1.0909091em}.prose-lg blockquote{margin-bottom:1.6666667em;margin-top:1.6666667em;padding-left:1em}.prose-lg h1{font-size:2.6666667em;line-height:1;margin-bottom:.8333333em;margin-top:0}.prose-lg h2{font-size:1.6666667em;line-height:1.3333333;margin-bottom:1.0666667em;margin-top:1.8666667em}.prose-lg h3{font-size:1.3333333em;line-height:1.5;margin-bottom:.6666667em;margin-top:1.6666667em}.prose-lg h4{line-height:1.5555556;margin-bottom:.4444444em;margin-top:1.7777778em}.prose-lg figure,.prose-lg img,.prose-lg video{margin-bottom:1.7777778em;margin-top:1.7777778em}.prose-lg figure>*{margin-bottom:0;margin-top:0}.prose-lg figure figcaption{font-size:.8888889em;line-height:1.5;margin-top:1em}.prose-lg code{font-size:.8888889em}.prose-lg h2 code{font-size:.8666667em}.prose-lg h3 code{font-size:.875em}.prose-lg pre{border-radius:.375rem;font-size:.8888889em;line-height:1.75;margin-bottom:2em;margin-top:2em;padding:1em 1.5em}.prose-lg ol,.prose-lg ul{margin-bottom:1.3333333em;margin-top:1.3333333em}.prose-lg li{margin-bottom:.6666667em;margin-top:.6666667em}.prose-lg ol>li{padding-left:1.6666667em}.prose-lg ol>li:before{left:0}.prose-lg ul>li{padding-left:1.6666667em}.prose-lg ul>li:before{height:.3333333em;left:.2222222em;top:.72222em;width:.3333333em}.prose-lg>ul>li p{margin-bottom:.8888889em;margin-top:.8888889em}.prose-lg>ul>li>:first-child{margin-top:1.3333333em}.prose-lg>ul>li>:last-child{margin-bottom:1.3333333em}.prose-lg>ol>li>:first-child{margin-top:1.3333333em}.prose-lg>ol>li>:last-child{margin-bottom:1.3333333em}.prose-lg ol ol,.prose-lg ol ul,.prose-lg ul ol,.prose-lg ul ul{margin-bottom:.8888889em;margin-top:.8888889em}.prose-lg hr{margin-bottom:3.1111111em;margin-top:3.1111111em}.prose-lg h2+*,.prose-lg h3+*,.prose-lg h4+*,.prose-lg hr+*{margin-top:0}.prose-lg table{font-size:.8888889em;line-height:1.5}.prose-lg thead th{padding-bottom:.75em;padding-left:.75em;padding-right:.75em}.prose-lg thead th:first-child{padding-left:0}.prose-lg thead th:last-child{padding-right:0}.prose-lg tbody td{padding:.75em}.prose-lg tbody td:first-child{padding-left:0}.prose-lg tbody td:last-child{padding-right:0}.prose-lg>:first-child{margin-top:0}.prose-lg>:last-child{margin-bottom:0}.static{position:static}.absolute{position:absolute}.relative{position:relative}.right-0{right:0}.col-span-1{grid-column:span 1/span 1}.m-4{margin:1rem}.mx-auto{margin-left:auto;margin-right:auto}.-my-2{margin-bottom:-.5rem;margin-top:-.5rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-12{margin-top:3rem}.mt-24{margin-top:6rem}.-mt-32{margin-top:-8rem}.-mr-2{margin-right:-.5rem}.ml-3{margin-left:.75rem}.ml-4{margin-left:1rem}.ml-10{margin-left:2.5rem}.block{display:block}.inline-block{display:inline-block}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.contents{display:contents}.hidden{display:none}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-8{height:2rem}.h-10{height:2.5rem}.h-16{height:4rem}.w-1{width:.25rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-8{width:2rem}.w-10{width:2.5rem}.w-48{width:12rem}.w-auto{width:auto}.w-full{width:100%}.min-w-full{min-width:100%}.max-w-xs{max-width:20rem}.max-w-7xl{max-width:80rem}.max-w-full{max-width:100%}.flex-1{flex:1 1 0%}.flex-shrink-0{flex-shrink:0}.origin-top-right{transform-origin:top right}.transform{--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;transform:translateX(var(--tw-translate-x)) translateY(var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-95{--tw-scale-x:.95;--tw-scale-y:.95}.scale-100{--tw-scale-x:1;--tw-scale-y:1}@-webkit-keyframes spin{to{transform:rotate(1turn)}}@keyframes spin{to{transform:rotate(1turn)}}@-webkit-keyframes ping{75%,to{opacity:0;transform:scale(2)}}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}@-webkit-keyframes pulse{50%{opacity:.5}}@keyframes pulse{50%{opacity:.5}}@-webkit-keyframes bounce{0%,to{-webkit-animation-timing-function:cubic-bezier(.8,0,1,1);animation-timing-function:cubic-bezier(.8,0,1,1);transform:translateY(-25%)}50%{-webkit-animation-timing-function:cubic-bezier(0,0,.2,1);animation-timing-function:cubic-bezier(0,0,.2,1);transform:none}}@keyframes bounce{0%,to{-webkit-animation-timing-function:cubic-bezier(.8,0,1,1);animation-timing-function:cubic-bezier(.8,0,1,1);transform:translateY(-25%)}50%{-webkit-animation-timing-function:cubic-bezier(0,0,.2,1);animation-timing-function:cubic-bezier(0,0,.2,1);transform:none}}.list-outside{list-style-position:outside}.list-decimal{list-style-type:decimal}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.content-center{align-content:center}.items-center{align-items:center}.items-baseline{align-items:baseline}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-5{gap:1.25rem}.gap-6{gap:1.5rem}.space-x-3>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.75rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.75rem*var(--tw-space-x-reverse))}.space-x-6>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(1.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(1.5rem*var(--tw-space-x-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.75rem*var(--tw-space-y-reverse));margin-top:calc(.75rem*(1 - var(--tw-space-y-reverse)))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1.5rem*var(--tw-space-y-reverse));margin-top:calc(1.5rem*(1 - var(--tw-space-y-reverse)))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-bottom-width:calc(1px*var(--tw-divide-y-reverse));border-top-width:calc(1px*(1 - var(--tw-divide-y-reverse)))}.divide-gray-200>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgba(231,229,228,var(--tw-divide-opacity))}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rounded-md{border-radius:.375rem}.rounded-lg{border-radius:.5rem}.rounded-full{border-radius:9999px}.border-2{border-width:2px}.border-t{border-top-width:1px}.border-r{border-right-width:1px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.border-transparent{border-color:transparent}.border-gray-200{--tw-border-opacity:1;border-color:rgba(231,229,228,var(--tw-border-opacity))}.border-gray-700{--tw-border-opacity:1;border-color:rgba(68,64,60,var(--tw-border-opacity))}.bg-white{--tw-bg-opacity:1;background-color:rgba(255,255,255,var(--tw-bg-opacity))}.bg-gray-50{--tw-bg-opacity:1;background-color:rgba(250,250,249,var(--tw-bg-opacity))}.bg-gray-800{--tw-bg-opacity:1;background-color:rgba(41,37,36,var(--tw-bg-opacity))}.bg-gray-900{--tw-bg-opacity:1;background-color:rgba(28,25,23,var(--tw-bg-opacity))}.bg-red-50{--tw-bg-opacity:1;background-color:rgba(255,241,242,var(--tw-bg-opacity))}.hover\:bg-gray-100:hover{--tw-bg-opacity:1;background-color:rgba(245,245,244,var(--tw-bg-opacity))}.focus\:bg-gray-700:focus,.hover\:bg-gray-700:hover{--tw-bg-opacity:1;background-color:rgba(68,64,60,var(--tw-bg-opacity))}.focus\:bg-indigo-50:focus{--tw-bg-opacity:1;background-color:rgba(238,242,255,var(--tw-bg-opacity))}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-0{padding-bottom:0;padding-top:0}.py-1{padding-bottom:.25rem;padding-top:.25rem}.py-2{padding-bottom:.5rem;padding-top:.5rem}.py-3{padding-bottom:.75rem;padding-top:.75rem}.py-4{padding-bottom:1rem;padding-top:1rem}.py-6{padding-bottom:1.5rem;padding-top:1.5rem}.py-10{padding-bottom:2.5rem;padding-top:2.5rem}.py-0\.5{padding-bottom:.125rem;padding-top:.125rem}.pt-4{padding-top:1rem}.pb-3{padding-bottom:.75rem}.pb-12{padding-bottom:3rem}.pb-32{padding-bottom:8rem}.text-left{text-align:left}.text-center{text-align:center}.align-middle{vertical-align:middle}.text-xs{font-size:.75rem;line-height:1rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.font-thin{font-weight:100}.font-medium{font-weight:500}.font-semibold{font-weight:600}.font-bold{font-weight:700}.uppercase{text-transform:uppercase}.leading-4{line-height:1rem}.leading-5{line-height:1.25rem}.leading-8{line-height:2rem}.leading-9{line-height:2.25rem}.leading-none{line-height:1}.leading-loose{line-height:2}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.text-white{--tw-text-opacity:1;color:rgba(255,255,255,var(--tw-text-opacity))}.text-gray-300{--tw-text-opacity:1;color:rgba(214,211,209,var(--tw-text-opacity))}.text-gray-400{--tw-text-opacity:1;color:rgba(168,162,158,var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity:1;color:rgba(120,113,108,var(--tw-text-opacity))}.text-gray-600{--tw-text-opacity:1;color:rgba(87,83,78,var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity:1;color:rgba(68,64,60,var(--tw-text-opacity))}.text-gray-900{--tw-text-opacity:1;color:rgba(28,25,23,var(--tw-text-opacity))}.text-red-400{--tw-text-opacity:1;color:rgba(251,113,133,var(--tw-text-opacity))}.text-red-800{--tw-text-opacity:1;color:rgba(159,18,57,var(--tw-text-opacity))}.hover\:text-white:hover{--tw-text-opacity:1;color:rgba(255,255,255,var(--tw-text-opacity))}.hover\:text-gray-600:hover{--tw-text-opacity:1;color:rgba(87,83,78,var(--tw-text-opacity))}.hover\:text-gray-700:hover{--tw-text-opacity:1;color:rgba(68,64,60,var(--tw-text-opacity))}.focus\:text-white:focus{--tw-text-opacity:1;color:rgba(255,255,255,var(--tw-text-opacity))}.focus\:text-indigo-600:focus{--tw-text-opacity:1;color:rgba(79,70,229,var(--tw-text-opacity))}.opacity-0{opacity:0}.opacity-100{opacity:1}*,:after,:before{--tw-shadow:0 0 #0000}.shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,0.05)}.shadow,.shadow-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,0.1),0 1px 2px 0 rgba(0,0,0,0.06)}.shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,0.1),0 4px 6px -2px rgba(0,0,0,0.05);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}*,:after,:before{--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,0.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000}.filter{--tw-blur:var(--tw-empty,/*!*/ /*!*/);--tw-brightness:var(--tw-empty,/*!*/ /*!*/);--tw-contrast:var(--tw-empty,/*!*/ /*!*/);--tw-grayscale:var(--tw-empty,/*!*/ /*!*/);--tw-hue-rotate:var(--tw-empty,/*!*/ /*!*/);--tw-invert:var(--tw-empty,/*!*/ /*!*/);--tw-saturate:var(--tw-empty,/*!*/ /*!*/);--tw-sepia:var(--tw-empty,/*!*/ /*!*/);--tw-drop-shadow:var(--tw-empty,/*!*/ /*!*/);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-duration:.15s;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-75{transition-duration:75ms}.duration-100{transition-duration:.1s}.duration-150{transition-duration:.15s}.ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}@media (min-width:640px){.sm\:-mx-6{margin-left:-1.5rem;margin-right:-1.5rem}.sm\:block{display:block}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.sm\:gap-6{gap:1.5rem}.sm\:rounded-lg{border-radius:.5rem}.sm\:px-0{padding-left:0;padding-right:0}.sm\:px-3{padding-left:.75rem;padding-right:.75rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}}@media (min-width:768px){.md\:ml-6{margin-left:1.5rem}.md\:block{display:block}.md\:hidden{display:none}}@media (min-width:1024px){.lg\:-mx-8{margin-left:-2rem;margin-right:-2rem}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.lg\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.lg\:px-8{padding-left:2rem;padding-right:2rem}}
\ No newline at end of file +/*! tailwindcss v2.2.9 | MIT License | https://tailwindcss.com*//*! modern-normalize v1.1.0 | MIT License | https://github.com/sindresorhus/modern-normalize */html{-webkit-text-size-adjust:100%;line-height:1.15;-moz-tab-size:4;-o-tab-size:4;tab-size:4}body{font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji;margin:0}hr{color:inherit;height:0}abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}legend{padding:0}progress{vertical-align:baseline}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}button{background-color:transparent;background-image:none}fieldset,ol,ul{margin:0;padding:0}ol,ul{list-style:none}html{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}body{font-family:inherit;line-height:inherit}*,:after,:before{border:0 solid;box-sizing:border-box}hr{border-top-width:1px}img{border-style:solid}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{color:#a8a29e;opacity:1}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#a8a29e;opacity:1}input::placeholder,textarea::placeholder{color:#a8a29e;opacity:1}[role=button],button{cursor:pointer}table{border-collapse:collapse}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}button,input,optgroup,select,textarea{color:inherit;line-height:inherit;padding:0}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[hidden]{display:none}*,:after,:before{--tw-border-opacity:1;border-color:rgba(231,229,228,var(--tw-border-opacity))}.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.prose{color:#44403c;max-width:65ch}.prose [class~=lead]{color:#57534e;font-size:1.25em;line-height:1.6;margin-bottom:1.2em;margin-top:1.2em}.prose a{color:#1c1917;font-weight:500;text-decoration:underline}.prose strong{color:#1c1917;font-weight:600}.prose ol[type=A]{--list-counter-style:upper-alpha}.prose ol[type=a]{--list-counter-style:lower-alpha}.prose ol[type=A s]{--list-counter-style:upper-alpha}.prose ol[type=a s]{--list-counter-style:lower-alpha}.prose ol[type=I]{--list-counter-style:upper-roman}.prose ol[type=i]{--list-counter-style:lower-roman}.prose ol[type=I s]{--list-counter-style:upper-roman}.prose ol[type=i s]{--list-counter-style:lower-roman}.prose ol[type="1"]{--list-counter-style:decimal}.prose ol>li{padding-left:1.75em;position:relative}.prose ol>li:before{color:#78716c;content:counter(list-item,var(--list-counter-style,decimal)) ".";font-weight:400;left:0;position:absolute}.prose ul>li{padding-left:1.75em;position:relative}.prose ul>li:before{background-color:#d6d3d1;border-radius:50%;content:"";height:.375em;left:.25em;position:absolute;top:.6875em;width:.375em}.prose hr{border-color:#e7e5e4;border-top-width:1px;margin-bottom:3em;margin-top:3em}.prose blockquote{border-left-color:#e7e5e4;border-left-width:.25rem;color:#1c1917;font-style:italic;font-weight:500;margin-bottom:1.6em;margin-top:1.6em;padding-left:1em;quotes:"\201C""\201D""\2018""\2019"}.prose blockquote p:first-of-type:before{content:open-quote}.prose blockquote p:last-of-type:after{content:close-quote}.prose h1{color:#1c1917;font-size:2.25em;font-weight:800;line-height:1.1111111;margin-bottom:.8888889em;margin-top:0}.prose h2{color:#1c1917;font-size:1.5em;font-weight:700;line-height:1.3333333;margin-bottom:1em;margin-top:2em}.prose h3{color:#1c1917;font-size:1.25em;font-weight:600;line-height:1.6;margin-bottom:.6em;margin-top:1.6em}.prose h4{color:#1c1917;font-weight:600;line-height:1.5;margin-bottom:.5em;margin-top:1.5em}.prose figure figcaption{color:#78716c;font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose code{color:#1c1917;font-size:.875em;font-weight:600}.prose code:after,.prose code:before{content:"`"}.prose a code{color:#1c1917}.prose pre{background-color:#292524;border-radius:.375rem;color:#e7e5e4;font-size:.875em;line-height:1.7142857;margin-bottom:1.7142857em;margin-top:1.7142857em;overflow-x:auto;padding:.8571429em 1.1428571em}.prose pre code{background-color:transparent;border-radius:0;border-width:0;color:inherit;font-family:inherit;font-size:inherit;font-weight:400;line-height:inherit;padding:0}.prose pre code:after,.prose pre code:before{content:none}.prose table{font-size:.875em;line-height:1.7142857;margin-bottom:2em;margin-top:2em;table-layout:auto;text-align:left;width:100%}.prose thead{border-bottom-color:#d6d3d1;border-bottom-width:1px;color:#1c1917;font-weight:600}.prose thead th{padding-bottom:.5714286em;padding-left:.5714286em;padding-right:.5714286em;vertical-align:bottom}.prose tbody tr{border-bottom-color:#e7e5e4;border-bottom-width:1px}.prose tbody tr:last-child{border-bottom-width:0}.prose tbody td{padding:.5714286em;vertical-align:top}.prose{font-size:1rem;line-height:1.75}.prose p{margin-bottom:1.25em;margin-top:1.25em}.prose figure,.prose img,.prose video{margin-bottom:2em;margin-top:2em}.prose figure>*{margin-bottom:0;margin-top:0}.prose h2 code{font-size:.875em}.prose h3 code{font-size:.9em}.prose ol,.prose ul{margin-bottom:1.25em;margin-top:1.25em}.prose li{margin-bottom:.5em;margin-top:.5em}.prose>ul>li p{margin-bottom:.75em;margin-top:.75em}.prose>ul>li>:first-child{margin-top:1.25em}.prose>ul>li>:last-child{margin-bottom:1.25em}.prose>ol>li>:first-child{margin-top:1.25em}.prose>ol>li>:last-child{margin-bottom:1.25em}.prose ol ol,.prose ol ul,.prose ul ol,.prose ul ul{margin-bottom:.75em;margin-top:.75em}.prose h2+*,.prose h3+*,.prose h4+*,.prose hr+*{margin-top:0}.prose thead th:first-child{padding-left:0}.prose thead th:last-child{padding-right:0}.prose tbody td:first-child{padding-left:0}.prose tbody td:last-child{padding-right:0}.prose>:first-child{margin-top:0}.prose>:last-child{margin-bottom:0}.prose-sm{font-size:.875rem;line-height:1.7142857}.prose-sm p{margin-bottom:1.1428571em;margin-top:1.1428571em}.prose-sm [class~=lead]{font-size:1.2857143em;line-height:1.5555556;margin-bottom:.8888889em;margin-top:.8888889em}.prose-sm blockquote{margin-bottom:1.3333333em;margin-top:1.3333333em;padding-left:1.1111111em}.prose-sm h1{font-size:2.1428571em;line-height:1.2;margin-bottom:.8em;margin-top:0}.prose-sm h2{font-size:1.4285714em;line-height:1.4;margin-bottom:.8em;margin-top:1.6em}.prose-sm h3{font-size:1.2857143em;line-height:1.5555556;margin-bottom:.4444444em;margin-top:1.5555556em}.prose-sm h4{line-height:1.4285714;margin-bottom:.5714286em;margin-top:1.4285714em}.prose-sm figure,.prose-sm img,.prose-sm video{margin-bottom:1.7142857em;margin-top:1.7142857em}.prose-sm figure>*{margin-bottom:0;margin-top:0}.prose-sm figure figcaption{font-size:.8571429em;line-height:1.3333333;margin-top:.6666667em}.prose-sm code{font-size:.8571429em}.prose-sm h2 code{font-size:.9em}.prose-sm h3 code{font-size:.8888889em}.prose-sm pre{border-radius:.25rem;font-size:.8571429em;line-height:1.6666667;margin-bottom:1.6666667em;margin-top:1.6666667em;padding:.6666667em 1em}.prose-sm ol,.prose-sm ul{margin-bottom:1.1428571em;margin-top:1.1428571em}.prose-sm li{margin-bottom:.2857143em;margin-top:.2857143em}.prose-sm ol>li{padding-left:1.5714286em}.prose-sm ol>li:before{left:0}.prose-sm ul>li{padding-left:1.5714286em}.prose-sm ul>li:before{height:.3571429em;left:.2142857em;top:.67857em;width:.3571429em}.prose-sm>ul>li p{margin-bottom:.5714286em;margin-top:.5714286em}.prose-sm>ul>li>:first-child{margin-top:1.1428571em}.prose-sm>ul>li>:last-child{margin-bottom:1.1428571em}.prose-sm>ol>li>:first-child{margin-top:1.1428571em}.prose-sm>ol>li>:last-child{margin-bottom:1.1428571em}.prose-sm ol ol,.prose-sm ol ul,.prose-sm ul ol,.prose-sm ul ul{margin-bottom:.5714286em;margin-top:.5714286em}.prose-sm hr{margin-bottom:2.8571429em;margin-top:2.8571429em}.prose-sm h2+*,.prose-sm h3+*,.prose-sm h4+*,.prose-sm hr+*{margin-top:0}.prose-sm table{font-size:.8571429em;line-height:1.5}.prose-sm thead th{padding-bottom:.6666667em;padding-left:1em;padding-right:1em}.prose-sm thead th:first-child{padding-left:0}.prose-sm thead th:last-child{padding-right:0}.prose-sm tbody td{padding:.6666667em 1em}.prose-sm tbody td:first-child{padding-left:0}.prose-sm tbody td:last-child{padding-right:0}.prose-sm>:first-child{margin-top:0}.prose-sm>:last-child{margin-bottom:0}.prose-lg{font-size:1.125rem;line-height:1.7777778}.prose-lg p{margin-bottom:1.3333333em;margin-top:1.3333333em}.prose-lg [class~=lead]{font-size:1.2222222em;line-height:1.4545455;margin-bottom:1.0909091em;margin-top:1.0909091em}.prose-lg blockquote{margin-bottom:1.6666667em;margin-top:1.6666667em;padding-left:1em}.prose-lg h1{font-size:2.6666667em;line-height:1;margin-bottom:.8333333em;margin-top:0}.prose-lg h2{font-size:1.6666667em;line-height:1.3333333;margin-bottom:1.0666667em;margin-top:1.8666667em}.prose-lg h3{font-size:1.3333333em;line-height:1.5;margin-bottom:.6666667em;margin-top:1.6666667em}.prose-lg h4{line-height:1.5555556;margin-bottom:.4444444em;margin-top:1.7777778em}.prose-lg figure,.prose-lg img,.prose-lg video{margin-bottom:1.7777778em;margin-top:1.7777778em}.prose-lg figure>*{margin-bottom:0;margin-top:0}.prose-lg figure figcaption{font-size:.8888889em;line-height:1.5;margin-top:1em}.prose-lg code{font-size:.8888889em}.prose-lg h2 code{font-size:.8666667em}.prose-lg h3 code{font-size:.875em}.prose-lg pre{border-radius:.375rem;font-size:.8888889em;line-height:1.75;margin-bottom:2em;margin-top:2em;padding:1em 1.5em}.prose-lg ol,.prose-lg ul{margin-bottom:1.3333333em;margin-top:1.3333333em}.prose-lg li{margin-bottom:.6666667em;margin-top:.6666667em}.prose-lg ol>li{padding-left:1.6666667em}.prose-lg ol>li:before{left:0}.prose-lg ul>li{padding-left:1.6666667em}.prose-lg ul>li:before{height:.3333333em;left:.2222222em;top:.72222em;width:.3333333em}.prose-lg>ul>li p{margin-bottom:.8888889em;margin-top:.8888889em}.prose-lg>ul>li>:first-child{margin-top:1.3333333em}.prose-lg>ul>li>:last-child{margin-bottom:1.3333333em}.prose-lg>ol>li>:first-child{margin-top:1.3333333em}.prose-lg>ol>li>:last-child{margin-bottom:1.3333333em}.prose-lg ol ol,.prose-lg ol ul,.prose-lg ul ol,.prose-lg ul ul{margin-bottom:.8888889em;margin-top:.8888889em}.prose-lg hr{margin-bottom:3.1111111em;margin-top:3.1111111em}.prose-lg h2+*,.prose-lg h3+*,.prose-lg h4+*,.prose-lg hr+*{margin-top:0}.prose-lg table{font-size:.8888889em;line-height:1.5}.prose-lg thead th{padding-bottom:.75em;padding-left:.75em;padding-right:.75em}.prose-lg thead th:first-child{padding-left:0}.prose-lg thead th:last-child{padding-right:0}.prose-lg tbody td{padding:.75em}.prose-lg tbody td:first-child{padding-left:0}.prose-lg tbody td:last-child{padding-right:0}.prose-lg>:first-child{margin-top:0}.prose-lg>:last-child{margin-bottom:0}.prose-xl{font-size:1.25rem;line-height:1.8}.prose-xl p{margin-bottom:1.2em;margin-top:1.2em}.prose-xl [class~=lead]{font-size:1.2em;line-height:1.5;margin-bottom:1em;margin-top:1em}.prose-xl blockquote{margin-bottom:1.6em;margin-top:1.6em;padding-left:1.0666667em}.prose-xl h1{font-size:2.8em;line-height:1;margin-bottom:.8571429em;margin-top:0}.prose-xl h2{font-size:1.8em;line-height:1.1111111;margin-bottom:.8888889em;margin-top:1.5555556em}.prose-xl h3{font-size:1.5em;line-height:1.3333333;margin-bottom:.6666667em;margin-top:1.6em}.prose-xl h4{line-height:1.6;margin-bottom:.6em;margin-top:1.8em}.prose-xl figure,.prose-xl img,.prose-xl video{margin-bottom:2em;margin-top:2em}.prose-xl figure>*{margin-bottom:0;margin-top:0}.prose-xl figure figcaption{font-size:.9em;line-height:1.5555556;margin-top:1em}.prose-xl code{font-size:.9em}.prose-xl h2 code{font-size:.8611111em}.prose-xl h3 code{font-size:.9em}.prose-xl pre{border-radius:.5rem;font-size:.9em;line-height:1.7777778;margin-bottom:2em;margin-top:2em;padding:1.1111111em 1.3333333em}.prose-xl ol,.prose-xl ul{margin-bottom:1.2em;margin-top:1.2em}.prose-xl li{margin-bottom:.6em;margin-top:.6em}.prose-xl ol>li{padding-left:1.8em}.prose-xl ol>li:before{left:0}.prose-xl ul>li{padding-left:1.8em}.prose-xl ul>li:before{height:.35em;left:.25em;top:.725em;width:.35em}.prose-xl>ul>li p{margin-bottom:.8em;margin-top:.8em}.prose-xl>ul>li>:first-child{margin-top:1.2em}.prose-xl>ul>li>:last-child{margin-bottom:1.2em}.prose-xl>ol>li>:first-child{margin-top:1.2em}.prose-xl>ol>li>:last-child{margin-bottom:1.2em}.prose-xl ol ol,.prose-xl ol ul,.prose-xl ul ol,.prose-xl ul ul{margin-bottom:.8em;margin-top:.8em}.prose-xl hr{margin-bottom:2.8em;margin-top:2.8em}.prose-xl h2+*,.prose-xl h3+*,.prose-xl h4+*,.prose-xl hr+*{margin-top:0}.prose-xl table{font-size:.9em;line-height:1.5555556}.prose-xl thead th{padding-bottom:.8888889em;padding-left:.6666667em;padding-right:.6666667em}.prose-xl thead th:first-child{padding-left:0}.prose-xl thead th:last-child{padding-right:0}.prose-xl tbody td{padding:.8888889em .6666667em}.prose-xl tbody td:first-child{padding-left:0}.prose-xl tbody td:last-child{padding-right:0}.prose-xl>:first-child{margin-top:0}.prose-xl>:last-child{margin-bottom:0}.prose-2xl{font-size:1.5rem;line-height:1.6666667}.prose-2xl p{margin-bottom:1.3333333em;margin-top:1.3333333em}.prose-2xl [class~=lead]{font-size:1.25em;line-height:1.4666667;margin-bottom:1.0666667em;margin-top:1.0666667em}.prose-2xl blockquote{margin-bottom:1.7777778em;margin-top:1.7777778em;padding-left:1.1111111em}.prose-2xl h1{font-size:2.6666667em;line-height:1;margin-bottom:.875em;margin-top:0}.prose-2xl h2{font-size:2em;line-height:1.0833333;margin-bottom:.8333333em;margin-top:1.5em}.prose-2xl h3{font-size:1.5em;line-height:1.2222222;margin-bottom:.6666667em;margin-top:1.5555556em}.prose-2xl h4{line-height:1.5;margin-bottom:.6666667em;margin-top:1.6666667em}.prose-2xl figure,.prose-2xl img,.prose-2xl video{margin-bottom:2em;margin-top:2em}.prose-2xl figure>*{margin-bottom:0;margin-top:0}.prose-2xl figure figcaption{font-size:.8333333em;line-height:1.6;margin-top:1em}.prose-2xl code{font-size:.8333333em}.prose-2xl h2 code{font-size:.875em}.prose-2xl h3 code{font-size:.8888889em}.prose-2xl pre{border-radius:.5rem;font-size:.8333333em;line-height:1.8;margin-bottom:2em;margin-top:2em;padding:1.2em 1.6em}.prose-2xl ol,.prose-2xl ul{margin-bottom:1.3333333em;margin-top:1.3333333em}.prose-2xl li{margin-bottom:.5em;margin-top:.5em}.prose-2xl ol>li{padding-left:1.6666667em}.prose-2xl ol>li:before{left:0}.prose-2xl ul>li{padding-left:1.6666667em}.prose-2xl ul>li:before{height:.3333333em;left:.25em;top:.66667em;width:.3333333em}.prose-2xl>ul>li p{margin-bottom:.8333333em;margin-top:.8333333em}.prose-2xl>ul>li>:first-child{margin-top:1.3333333em}.prose-2xl>ul>li>:last-child{margin-bottom:1.3333333em}.prose-2xl>ol>li>:first-child{margin-top:1.3333333em}.prose-2xl>ol>li>:last-child{margin-bottom:1.3333333em}.prose-2xl ol ol,.prose-2xl ol ul,.prose-2xl ul ol,.prose-2xl ul ul{margin-bottom:.6666667em;margin-top:.6666667em}.prose-2xl hr{margin-bottom:3em;margin-top:3em}.prose-2xl h2+*,.prose-2xl h3+*,.prose-2xl h4+*,.prose-2xl hr+*{margin-top:0}.prose-2xl table{font-size:.8333333em;line-height:1.4}.prose-2xl thead th{padding-bottom:.8em;padding-left:.6em;padding-right:.6em}.prose-2xl thead th:first-child{padding-left:0}.prose-2xl thead th:last-child{padding-right:0}.prose-2xl tbody td{padding:.8em .6em}.prose-2xl tbody td:first-child{padding-left:0}.prose-2xl tbody td:last-child{padding-right:0}.prose-2xl>:first-child{margin-top:0}.prose-2xl>:last-child{margin-bottom:0}.prose-indigo a,.prose-indigo a code{color:#4f46e5}.prose-red a,.prose-red a code{color:#e11d48}.prose-yellow a,.prose-yellow a code{color:#d97706}.prose-blue a,.prose-blue a code{color:#2563eb}.prose-purple a,.prose-purple a code{color:#9333ea}.aspect-none{padding-bottom:0;position:static}.aspect-none>*{bottom:auto;height:auto;left:auto;position:static;right:auto;top:auto;width:auto}.sr-only{clip:rect(0,0,0,0);border-width:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.not-sr-only{clip:auto;height:auto;margin:0;overflow:visible;padding:0;position:static;white-space:normal;width:auto}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.visible{visibility:visible}.invisible{visibility:hidden}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.right-0{right:0}.isolate{isolation:isolate}.isolation-auto{isolation:auto}.col-span-1{grid-column:span 1/span 1}.float-right{float:right}.float-left{float:left}.float-none{float:none}.clear-left{clear:left}.clear-right{clear:right}.clear-both{clear:both}.clear-none{clear:none}.m-3{margin:.75rem}.m-4{margin:1rem}.m-8{margin:2rem}.m-14{margin:3.5rem}.m-16{margin:4rem}.mx-auto{margin-left:auto;margin-right:auto}.my-24{margin-bottom:6rem;margin-top:6rem}.-my-2{margin-bottom:-.5rem;margin-top:-.5rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-12{margin-top:3rem}.mt-24{margin-top:6rem}.-mt-32{margin-top:-8rem}.-mr-2{margin-right:-.5rem}.ml-3{margin-left:.75rem}.ml-4{margin-left:1rem}.ml-10{margin-left:2.5rem}.-ml-px{margin-left:-1px}.box-border{box-sizing:border-box}.box-content{box-sizing:content-box}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.inline-table{display:inline-table}.table-caption{display:table-caption}.table-cell{display:table-cell}.table-column{display:table-column}.table-column-group{display:table-column-group}.table-footer-group{display:table-footer-group}.table-header-group{display:table-header-group}.table-row-group{display:table-row-group}.table-row{display:table-row}.flow-root{display:flow-root}.grid{display:grid}.inline-grid{display:inline-grid}.contents{display:contents}.list-item{display:list-item}.hidden{display:none}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-8{height:2rem}.h-10{height:2.5rem}.h-16{height:4rem}.h-full{height:100%}.w-1{width:.25rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-8{width:2rem}.w-10{width:2.5rem}.w-48{width:12rem}.w-auto{width:auto}.w-1\/2{width:50%}.w-full{width:100%}.min-w-full{min-width:100%}.max-w-xs{max-width:20rem}.max-w-7xl{max-width:80rem}.max-w-full{max-width:100%}.flex-1{flex:1 1 0%}.flex-none{flex:none}.flex-shrink-0{flex-shrink:0}.flex-shrink{flex-shrink:1}.flex-grow{flex-grow:1}.table-auto{table-layout:auto}.table-fixed{table-layout:fixed}.border-collapse{border-collapse:collapse}.border-separate{border-collapse:separate}.origin-top-right{transform-origin:top right}.transform{transform:translateX(var(--tw-translate-x)) translateY(var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform,.transform-gpu{--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1}.transform-gpu{transform:translate3d(var(--tw-translate-x),var(--tw-translate-y),0) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform-none{transform:none}.rotate-90{--tw-rotate:90deg}.rotate-180{--tw-rotate:180deg}.scale-95{--tw-scale-x:.95;--tw-scale-y:.95}.scale-100{--tw-scale-x:1;--tw-scale-y:1}@-webkit-keyframes spin{to{transform:rotate(1turn)}}@keyframes spin{to{transform:rotate(1turn)}}@-webkit-keyframes ping{75%,to{opacity:0;transform:scale(2)}}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}@-webkit-keyframes pulse{50%{opacity:.5}}@keyframes pulse{50%{opacity:.5}}@-webkit-keyframes bounce{0%,to{-webkit-animation-timing-function:cubic-bezier(.8,0,1,1);animation-timing-function:cubic-bezier(.8,0,1,1);transform:translateY(-25%)}50%{-webkit-animation-timing-function:cubic-bezier(0,0,.2,1);animation-timing-function:cubic-bezier(0,0,.2,1);transform:none}}@keyframes bounce{0%,to{-webkit-animation-timing-function:cubic-bezier(.8,0,1,1);animation-timing-function:cubic-bezier(.8,0,1,1);transform:translateY(-25%)}50%{-webkit-animation-timing-function:cubic-bezier(0,0,.2,1);animation-timing-function:cubic-bezier(0,0,.2,1);transform:none}}.cursor-default{cursor:default}.select-none{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.select-text{-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.select-all{-webkit-user-select:all;-moz-user-select:all;user-select:all}.select-auto{-webkit-user-select:auto;-moz-user-select:auto;-ms-user-select:auto;user-select:auto}.resize-none{resize:none}.resize-y{resize:vertical}.resize-x{resize:horizontal}.resize{resize:both}.list-inside{list-style-position:inside}.list-outside{list-style-position:outside}.list-decimal{list-style-type:decimal}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-flow-row{grid-auto-flow:row}.grid-flow-col{grid-auto-flow:column}.grid-flow-row-dense{grid-auto-flow:row dense}.grid-flow-col-dense{grid-auto-flow:column dense}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-row{flex-direction:row}.flex-row-reverse{flex-direction:row-reverse}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.flex-wrap-reverse{flex-wrap:wrap-reverse}.flex-nowrap{flex-wrap:nowrap}.place-content-center{place-content:center}.place-content-start{place-content:start}.place-content-end{place-content:end}.place-content-between{place-content:space-between}.place-content-around{place-content:space-around}.place-content-evenly{place-content:space-evenly}.place-content-stretch{place-content:stretch}.place-items-start{place-items:start}.place-items-end{place-items:end}.place-items-center{place-items:center}.place-items-stretch{place-items:stretch}.content-center{align-content:center}.content-start{align-content:flex-start}.content-end{align-content:flex-end}.content-between{align-content:space-between}.content-around{align-content:space-around}.content-evenly{align-content:space-evenly}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.items-baseline{align-items:baseline}.items-stretch{align-items:stretch}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-around{justify-content:space-around}.justify-evenly{justify-content:space-evenly}.justify-items-start{justify-items:start}.justify-items-end{justify-items:end}.justify-items-center{justify-items:center}.justify-items-stretch{justify-items:stretch}.gap-2{gap:.5rem}.gap-5{gap:1.25rem}.gap-6{gap:1.5rem}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.5rem*var(--tw-space-x-reverse))}.space-x-3>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.75rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.75rem*var(--tw-space-x-reverse))}.space-x-6>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(1.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(1.5rem*var(--tw-space-x-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.5rem*var(--tw-space-y-reverse));margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.75rem*var(--tw-space-y-reverse));margin-top:calc(.75rem*(1 - var(--tw-space-y-reverse)))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1.5rem*var(--tw-space-y-reverse));margin-top:calc(1.5rem*(1 - var(--tw-space-y-reverse)))}.space-y-reverse>:not([hidden])~:not([hidden]){--tw-space-y-reverse:1}.space-x-reverse>:not([hidden])~:not([hidden]){--tw-space-x-reverse:1}.divide-x>:not([hidden])~:not([hidden]){--tw-divide-x-reverse:0;border-left-width:calc(1px*(1 - var(--tw-divide-x-reverse)));border-right-width:calc(1px*var(--tw-divide-x-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-bottom-width:calc(1px*var(--tw-divide-y-reverse));border-top-width:calc(1px*(1 - var(--tw-divide-y-reverse)))}.divide-y-reverse>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:1}.divide-x-reverse>:not([hidden])~:not([hidden]){--tw-divide-x-reverse:1}.divide-solid>:not([hidden])~:not([hidden]){border-style:solid}.divide-dashed>:not([hidden])~:not([hidden]){border-style:dashed}.divide-dotted>:not([hidden])~:not([hidden]){border-style:dotted}.divide-double>:not([hidden])~:not([hidden]){border-style:double}.divide-none>:not([hidden])~:not([hidden]){border-style:none}.divide-gray-200>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgba(231,229,228,var(--tw-divide-opacity))}.place-self-auto{place-self:auto}.place-self-start{place-self:start}.place-self-end{place-self:end}.place-self-center{place-self:center}.place-self-stretch{place-self:stretch}.self-auto{align-self:auto}.self-start{align-self:flex-start}.self-end{align-self:flex-end}.self-center{align-self:center}.self-stretch{align-self:stretch}.self-baseline{align-self:baseline}.justify-self-auto{justify-self:auto}.justify-self-start{justify-self:start}.justify-self-end{justify-self:end}.justify-self-center{justify-self:center}.justify-self-stretch{justify-self:stretch}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-scroll{overflow:scroll}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-hidden{overflow-y:hidden}.overflow-x-visible{overflow-x:visible}.overflow-y-visible{overflow-y:visible}.overflow-x-scroll{overflow-x:scroll}.overflow-y-scroll{overflow-y:scroll}.overscroll-auto{-ms-scroll-chaining:chained;overscroll-behavior:auto}.overscroll-contain{-ms-scroll-chaining:none;overscroll-behavior:contain}.overscroll-none{-ms-scroll-chaining:none;overscroll-behavior:none}.overscroll-y-auto{overscroll-behavior-y:auto}.overscroll-y-contain{overscroll-behavior-y:contain}.overscroll-y-none{overscroll-behavior-y:none}.overscroll-x-auto{overscroll-behavior-x:auto}.overscroll-x-contain{overscroll-behavior-x:contain}.overscroll-x-none{overscroll-behavior-x:none}.truncate{overflow:hidden;white-space:nowrap}.overflow-ellipsis,.truncate{text-overflow:ellipsis}.overflow-clip{text-overflow:clip}.whitespace-normal{white-space:normal}.whitespace-nowrap{white-space:nowrap}.whitespace-pre{white-space:pre}.whitespace-pre-line{white-space:pre-line}.whitespace-pre-wrap{white-space:pre-wrap}.break-normal{overflow-wrap:normal;word-break:normal}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.rounded{border-radius:.25rem}.rounded-md{border-radius:.375rem}.rounded-lg{border-radius:.5rem}.rounded-full{border-radius:9999px}.rounded-t{border-top-left-radius:.25rem}.rounded-r,.rounded-t{border-top-right-radius:.25rem}.rounded-r{border-bottom-right-radius:.25rem}.rounded-r-md{border-bottom-right-radius:.375rem;border-top-right-radius:.375rem}.rounded-b{border-bottom-right-radius:.25rem}.rounded-b,.rounded-l{border-bottom-left-radius:.25rem}.rounded-l,.rounded-tl{border-top-left-radius:.25rem}.rounded-tr{border-top-right-radius:.25rem}.rounded-br{border-bottom-right-radius:.25rem}.rounded-bl{border-bottom-left-radius:.25rem}.border-2{border-width:2px}.border{border-width:1px}.border-t{border-top-width:1px}.border-r{border-right-width:1px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.border-solid{border-style:solid}.border-dashed{border-style:dashed}.border-dotted{border-style:dotted}.border-double{border-style:double}.border-none{border-style:none}.border-transparent{border-color:transparent}.border-gray-200{--tw-border-opacity:1;border-color:rgba(231,229,228,var(--tw-border-opacity))}.border-gray-300{--tw-border-opacity:1;border-color:rgba(214,211,209,var(--tw-border-opacity))}.border-gray-700{--tw-border-opacity:1;border-color:rgba(68,64,60,var(--tw-border-opacity))}.focus\:border-indigo-500:focus{--tw-border-opacity:1;border-color:rgba(99,102,241,var(--tw-border-opacity))}.bg-white{--tw-bg-opacity:1;background-color:rgba(255,255,255,var(--tw-bg-opacity))}.bg-gray-50{--tw-bg-opacity:1;background-color:rgba(250,250,249,var(--tw-bg-opacity))}.bg-gray-800{--tw-bg-opacity:1;background-color:rgba(41,37,36,var(--tw-bg-opacity))}.bg-gray-900{--tw-bg-opacity:1;background-color:rgba(28,25,23,var(--tw-bg-opacity))}.bg-red-50{--tw-bg-opacity:1;background-color:rgba(255,241,242,var(--tw-bg-opacity))}.hover\:bg-gray-100:hover{--tw-bg-opacity:1;background-color:rgba(245,245,244,var(--tw-bg-opacity))}.focus\:bg-gray-700:focus,.hover\:bg-gray-700:hover{--tw-bg-opacity:1;background-color:rgba(68,64,60,var(--tw-bg-opacity))}.focus\:bg-indigo-50:focus{--tw-bg-opacity:1;background-color:rgba(238,242,255,var(--tw-bg-opacity))}.bg-gradient-to-b{background-image:linear-gradient(to bottom,var(--tw-gradient-stops))}.from-black{--tw-gradient-from:#000;--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to,transparent)}.to-gray-900{--tw-gradient-to:#1c1917}.decoration-slice{-webkit-box-decoration-break:slice;box-decoration-break:slice}.decoration-clone{-webkit-box-decoration-break:clone;box-decoration-break:clone}.bg-fixed{background-attachment:fixed}.bg-local{background-attachment:local}.bg-scroll{background-attachment:scroll}.bg-clip-border{background-clip:border-box}.bg-clip-padding{background-clip:padding-box}.bg-clip-content{background-clip:content-box}.bg-clip-text{-webkit-background-clip:text;background-clip:text}.bg-repeat{background-repeat:repeat}.bg-no-repeat{background-repeat:no-repeat}.bg-repeat-x{background-repeat:repeat-x}.bg-repeat-y{background-repeat:repeat-y}.bg-repeat-round{background-repeat:round}.bg-repeat-space{background-repeat:space}.bg-origin-border{background-origin:border-box}.bg-origin-padding{background-origin:padding-box}.bg-origin-content{background-origin:content-box}.object-contain{-o-object-fit:contain;object-fit:contain}.object-cover{-o-object-fit:cover;object-fit:cover}.object-fill{-o-object-fit:fill;object-fit:fill}.object-none{-o-object-fit:none;object-fit:none}.object-scale-down{-o-object-fit:scale-down;object-fit:scale-down}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.py-0{padding-bottom:0;padding-top:0}.py-1{padding-bottom:.25rem;padding-top:.25rem}.py-2{padding-bottom:.5rem;padding-top:.5rem}.py-3{padding-bottom:.75rem;padding-top:.75rem}.py-4{padding-bottom:1rem;padding-top:1rem}.py-6{padding-bottom:1.5rem;padding-top:1.5rem}.py-10{padding-bottom:2.5rem;padding-top:2.5rem}.py-0\.5{padding-bottom:.125rem;padding-top:.125rem}.pt-4{padding-top:1rem}.pb-3{padding-bottom:.75rem}.pb-12{padding-bottom:3rem}.pb-32{padding-bottom:8rem}.pl-4{padding-left:1rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.text-justify{text-align:justify}.align-baseline{vertical-align:baseline}.align-top{vertical-align:top}.align-middle{vertical-align:middle}.align-bottom{vertical-align:bottom}.align-text-top{vertical-align:text-top}.align-text-bottom{vertical-align:text-bottom}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-xs{font-size:.75rem;line-height:1rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-6xl{font-size:3.75rem;line-height:1}.font-thin{font-weight:100}.font-medium{font-weight:500}.font-semibold{font-weight:600}.font-bold{font-weight:700}.font-extrabold{font-weight:800}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.capitalize{text-transform:capitalize}.normal-case{text-transform:none}.italic{font-style:italic}.not-italic{font-style:normal}.diagonal-fractions,.lining-nums,.oldstyle-nums,.ordinal,.proportional-nums,.slashed-zero,.stacked-fractions,.tabular-nums{--tw-ordinal:var(--tw-empty,/*!*/ /*!*/);--tw-slashed-zero:var(--tw-empty,/*!*/ /*!*/);--tw-numeric-figure:var(--tw-empty,/*!*/ /*!*/);--tw-numeric-spacing:var(--tw-empty,/*!*/ /*!*/);--tw-numeric-fraction:var(--tw-empty,/*!*/ /*!*/);font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.normal-nums{font-variant-numeric:normal}.ordinal{--tw-ordinal:ordinal}.slashed-zero{--tw-slashed-zero:slashed-zero}.lining-nums{--tw-numeric-figure:lining-nums}.oldstyle-nums{--tw-numeric-figure:oldstyle-nums}.proportional-nums{--tw-numeric-spacing:proportional-nums}.tabular-nums{--tw-numeric-spacing:tabular-nums}.diagonal-fractions{--tw-numeric-fraction:diagonal-fractions}.stacked-fractions{--tw-numeric-fraction:stacked-fractions}.leading-4{line-height:1rem}.leading-5{line-height:1.25rem}.leading-8{line-height:2rem}.leading-9{line-height:2.25rem}.leading-none{line-height:1}.leading-loose{line-height:2}.tracking-tight{letter-spacing:-.025em}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.text-white{--tw-text-opacity:1;color:rgba(255,255,255,var(--tw-text-opacity))}.text-gray-50{--tw-text-opacity:1;color:rgba(250,250,249,var(--tw-text-opacity))}.text-gray-300{--tw-text-opacity:1;color:rgba(214,211,209,var(--tw-text-opacity))}.text-gray-400{--tw-text-opacity:1;color:rgba(168,162,158,var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity:1;color:rgba(120,113,108,var(--tw-text-opacity))}.text-gray-600{--tw-text-opacity:1;color:rgba(87,83,78,var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity:1;color:rgba(68,64,60,var(--tw-text-opacity))}.text-gray-900{--tw-text-opacity:1;color:rgba(28,25,23,var(--tw-text-opacity))}.text-red-400{--tw-text-opacity:1;color:rgba(251,113,133,var(--tw-text-opacity))}.text-red-800{--tw-text-opacity:1;color:rgba(159,18,57,var(--tw-text-opacity))}.hover\:text-white:hover{--tw-text-opacity:1;color:rgba(255,255,255,var(--tw-text-opacity))}.hover\:text-gray-600:hover{--tw-text-opacity:1;color:rgba(87,83,78,var(--tw-text-opacity))}.hover\:text-gray-700:hover{--tw-text-opacity:1;color:rgba(68,64,60,var(--tw-text-opacity))}.focus\:text-white:focus{--tw-text-opacity:1;color:rgba(255,255,255,var(--tw-text-opacity))}.focus\:text-indigo-600:focus{--tw-text-opacity:1;color:rgba(79,70,229,var(--tw-text-opacity))}.underline{text-decoration:underline}.line-through{text-decoration:line-through}.no-underline{text-decoration:none}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.subpixel-antialiased{-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}.opacity-0{opacity:0}.opacity-100{opacity:1}.bg-blend-normal{background-blend-mode:normal}.bg-blend-multiply{background-blend-mode:multiply}.bg-blend-screen{background-blend-mode:screen}.bg-blend-overlay{background-blend-mode:overlay}.bg-blend-darken{background-blend-mode:darken}.bg-blend-lighten{background-blend-mode:lighten}.bg-blend-color-dodge{background-blend-mode:color-dodge}.bg-blend-color-burn{background-blend-mode:color-burn}.bg-blend-hard-light{background-blend-mode:hard-light}.bg-blend-soft-light{background-blend-mode:soft-light}.bg-blend-difference{background-blend-mode:difference}.bg-blend-exclusion{background-blend-mode:exclusion}.bg-blend-hue{background-blend-mode:hue}.bg-blend-saturation{background-blend-mode:saturation}.bg-blend-color{background-blend-mode:color}.bg-blend-luminosity{background-blend-mode:luminosity}.mix-blend-normal{mix-blend-mode:normal}.mix-blend-multiply{mix-blend-mode:multiply}.mix-blend-screen{mix-blend-mode:screen}.mix-blend-overlay{mix-blend-mode:overlay}.mix-blend-darken{mix-blend-mode:darken}.mix-blend-lighten{mix-blend-mode:lighten}.mix-blend-color-dodge{mix-blend-mode:color-dodge}.mix-blend-color-burn{mix-blend-mode:color-burn}.mix-blend-hard-light{mix-blend-mode:hard-light}.mix-blend-soft-light{mix-blend-mode:soft-light}.mix-blend-difference{mix-blend-mode:difference}.mix-blend-exclusion{mix-blend-mode:exclusion}.mix-blend-hue{mix-blend-mode:hue}.mix-blend-saturation{mix-blend-mode:saturation}.mix-blend-color{mix-blend-mode:color}.mix-blend-luminosity{mix-blend-mode:luminosity}*,:after,:before{--tw-shadow:0 0 #0000}.shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,0.05)}.shadow,.shadow-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,0.1),0 1px 2px 0 rgba(0,0,0,0.06)}.shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,0.1),0 4px 6px -2px rgba(0,0,0,0.05);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}*,:after,:before{--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,0.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000}.ring{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:ring-1:focus,.ring{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:ring-1:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-inset{--tw-ring-inset:inset}.focus\:ring-indigo-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgba(99,102,241,var(--tw-ring-opacity))}.filter{--tw-blur:var(--tw-empty,/*!*/ /*!*/);--tw-brightness:var(--tw-empty,/*!*/ /*!*/);--tw-contrast:var(--tw-empty,/*!*/ /*!*/);--tw-grayscale:var(--tw-empty,/*!*/ /*!*/);--tw-hue-rotate:var(--tw-empty,/*!*/ /*!*/);--tw-invert:var(--tw-empty,/*!*/ /*!*/);--tw-saturate:var(--tw-empty,/*!*/ /*!*/);--tw-sepia:var(--tw-empty,/*!*/ /*!*/);--tw-drop-shadow:var(--tw-empty,/*!*/ /*!*/);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.filter-none{filter:none}.blur{--tw-blur:blur(8px)}.drop-shadow{--tw-drop-shadow:drop-shadow(0 1px 2px rgba(0,0,0,0.1)) drop-shadow(0 1px 1px rgba(0,0,0,0.06))}.grayscale{--tw-grayscale:grayscale(100%)}.invert{--tw-invert:invert(100%)}.sepia{--tw-sepia:sepia(100%)}.backdrop-filter{--tw-backdrop-blur:var(--tw-empty,/*!*/ /*!*/);--tw-backdrop-brightness:var(--tw-empty,/*!*/ /*!*/);--tw-backdrop-contrast:var(--tw-empty,/*!*/ /*!*/);--tw-backdrop-grayscale:var(--tw-empty,/*!*/ /*!*/);--tw-backdrop-hue-rotate:var(--tw-empty,/*!*/ /*!*/);--tw-backdrop-invert:var(--tw-empty,/*!*/ /*!*/);--tw-backdrop-opacity:var(--tw-empty,/*!*/ /*!*/);--tw-backdrop-saturate:var(--tw-empty,/*!*/ /*!*/);--tw-backdrop-sepia:var(--tw-empty,/*!*/ /*!*/);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-filter-none{-webkit-backdrop-filter:none;backdrop-filter:none}.backdrop-blur{--tw-backdrop-blur:blur(8px)}.backdrop-grayscale{--tw-backdrop-grayscale:grayscale(100%)}.backdrop-invert{--tw-backdrop-invert:invert(100%)}.backdrop-sepia{--tw-backdrop-sepia:sepia(100%)}.transition{transition-duration:.15s;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-75{transition-duration:75ms}.duration-100{transition-duration:.1s}.duration-150{transition-duration:.15s}.ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.dropdown{position:relative}.dropdown summary{cursor:pointer;list-style:none}.dropdown summary::-webkit-details-marker{display:none}.dropdown summary .content{position:absolute}.dropdown summary details[open] summary:before{bottom:0;content:"";cursor:default;left:0;position:fixed;right:0;top:0}.phx-disconnected>.chat .disconnected,.phx-error>.chat .phx-errored{@display block}.chat{height:100vh;max-height:100vh}.chat .disconnected,.chat .phx-errored{display:none}.chat .body{display:grid;grid-template-columns:repeat(10,minmax(0,1fr));height:75%}.chat .body .log{gap:1rem;grid-column:span 9/span 9;height:24rem;height:100%;max-width:100%}.chat .body .log .time-component{cursor:default;display:inline-block;flex:none;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:.875rem;line-height:1.25rem}.chat .body .log li.event .time-component{--tw-text-opacity:1;color:rgba(68,64,60,var(--tw-text-opacity))};@media (prefers-color-scheme:dark){.chat .body .log li.event .time-component{--tw-text-opacity:1;color:rgba(214,211,209,var(--tw-text-opacity))}}.chat .body .log li.event .nick{--tw-text-opacity:1;color:rgba(68,64,60,var(--tw-text-opacity))}@media (prefers-color-scheme:dark){.chat .body .log li.event .nick{--tw-text-opacity:1;color:rgba(68,64,60,var(--tw-text-opacity))}}.chat .body aside{--tw-bg-opacity:1;background-color:rgba(245,245,244,var(--tw-bg-opacity));font-size:.875rem;line-height:1.25rem;padding-left:1rem;padding-right:1rem;padding-top:1rem}.chat .body aside .user.dropdown .content{--tw-bg-opacity:1;--tw-shadow:0 20px 25px -5px rgba(0,0,0,0.1),0 10px 10px -5px rgba(0,0,0,0.04);background-color:rgba(250,250,249,var(--tw-bg-opacity));border-radius:.375rem;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);margin-right:1rem;margin-top:-1rem;padding:1rem;position:absolute;right:100%;transform-origin:top right;width:20rem;z-index:40}.chat .body aside .user.dropdown .content:focus{outline:2px solid transparent;outline-offset:2px}.chat .body aside .user.dropdown .content{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgba(0,0,0,var(--tw-ring-opacity));--tw-ring-opacity:0.05;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}@media (min-width:640px){.sm\:-mx-6{margin-left:-1.5rem;margin-right:-1.5rem}.sm\:block{display:block}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.sm\:gap-6{gap:1.5rem}.sm\:rounded-lg{border-radius:.5rem}.sm\:px-0{padding-left:0;padding-right:0}.sm\:px-3{padding-left:.75rem;padding-right:.75rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:text-sm{font-size:.875rem;line-height:1.25rem}}@media (min-width:768px){.md\:ml-6{margin-left:1.5rem}.md\:block{display:block}.md\:hidden{display:none}}@media (min-width:1024px){.lg\:-mx-8{margin-left:-2rem;margin-right:-2rem}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.lg\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.lg\:px-8{padding-left:2rem;padding-right:2rem}}
\ No newline at end of file diff --git a/priv/static/assets/site.css.br b/priv/static/assets/site.css.br Binary files differindex fee2dc3..ef02918 100644 --- a/priv/static/assets/site.css.br +++ b/priv/static/assets/site.css.br diff --git a/priv/static/assets/site.css.gz b/priv/static/assets/site.css.gz Binary files differindex 9ae5119..f9dd920 100644 --- a/priv/static/assets/site.css.gz +++ b/priv/static/assets/site.css.gz diff --git a/priv/static/assets/site.js b/priv/static/assets/site.js index 971f9fa..e0bdc79 100644 --- a/priv/static/assets/site.js +++ b/priv/static/assets/site.js @@ -1,6 +1,7 @@ -(()=>{(function(){if(window.Reflect===void 0||window.customElements===void 0||window.customElements.polyfillWrapFlushCallback)return;let r=HTMLElement,e={HTMLElement:function(){return Reflect.construct(r,[],this.constructor)}};window.HTMLElement=e.HTMLElement,HTMLElement.prototype=r.prototype,HTMLElement.prototype.constructor=HTMLElement,Object.setPrototypeOf(HTMLElement,r)})();var Z=new WeakMap;function dt(r){let e=r instanceof Element?r:r instanceof Node?r.parentElement:null,t=e?e.closest("input, button"):null;return(t==null?void 0:t.type)=="submit"?t:null}function ft(r){let e=dt(r.target);e&&e.form&&Z.set(e.form,e)}(function(){"SubmitEvent"in window||(addEventListener("click",ft,!0),Object.defineProperty(Event.prototype,"submitter",{get(){if(this.type=="submit"&&this.target instanceof HTMLFormElement)return Z.get(this.target)}}))})();var w;(function(r){r.eager="eager",r.lazy="lazy"})(w||(w={}));var v=class extends HTMLElement{constructor(){super();this.loaded=Promise.resolve(),this.delegate=new v.delegateConstructor(this)}static get observedAttributes(){return["disabled","loading","src"]}connectedCallback(){this.delegate.connect()}disconnectedCallback(){this.delegate.disconnect()}reload(){let{src:e}=this;this.src=null,this.src=e}attributeChangedCallback(e){e=="loading"?this.delegate.loadingStyleChanged():e=="src"?this.delegate.sourceURLChanged():this.delegate.disabledChanged()}get src(){return this.getAttribute("src")}set src(e){e?this.setAttribute("src",e):this.removeAttribute("src")}get loading(){return pt(this.getAttribute("loading")||"")}set loading(e){e?this.setAttribute("loading",e):this.removeAttribute("loading")}get disabled(){return this.hasAttribute("disabled")}set disabled(e){e?this.setAttribute("disabled",""):this.removeAttribute("disabled")}get autoscroll(){return this.hasAttribute("autoscroll")}set autoscroll(e){e?this.setAttribute("autoscroll",""):this.removeAttribute("autoscroll")}get complete(){return!this.delegate.isLoading}get isActive(){return this.ownerDocument===document&&!this.isPreview}get isPreview(){var e,t;return(t=(e=this.ownerDocument)===null||e===void 0?void 0:e.documentElement)===null||t===void 0?void 0:t.hasAttribute("data-turbo-preview")}};function pt(r){switch(r.toLowerCase()){case"lazy":return w.lazy;default:return w.eager}}function m(r){return new URL(r.toString(),document.baseURI)}function P(r){let e;if(r.hash)return r.hash.slice(1);if(e=r.href.match(/#(.*)$/))return e[1]}function mt(r){return(wt(r).match(/\.[^.]*$/)||[])[0]||""}function gt(r){return!!mt(r).match(/^(?:|\.(?:htm|html|xhtml))$/)}function vt(r,e){let t=Et(e);return r.href===m(t).href||r.href.startsWith(t)}function _(r){let e=P(r);return e!=null?r.href.slice(0,-(e.length+1)):r.href}function F(r){return _(r)}function bt(r,e){return m(r).href==m(e).href}function yt(r){return r.pathname.split("/").slice(1)}function wt(r){return yt(r).slice(-1)[0]}function Et(r){return St(r.origin+r.pathname)}function St(r){return r.endsWith("/")?r:r+"/"}var W=class{constructor(e){this.response=e}get succeeded(){return this.response.ok}get failed(){return!this.succeeded}get clientError(){return this.statusCode>=400&&this.statusCode<=499}get serverError(){return this.statusCode>=500&&this.statusCode<=599}get redirected(){return this.response.redirected}get location(){return m(this.response.url)}get isHTML(){return this.contentType&&this.contentType.match(/^(?:text\/([^\s;,]+\b)?html|application\/xhtml\+xml)\b/)}get statusCode(){return this.response.status}get contentType(){return this.header("Content-Type")}get responseText(){return this.response.text()}get responseHTML(){return this.isHTML?this.response.text():Promise.resolve(void 0)}header(e){return this.response.headers.get(e)}};function u(r,{target:e,cancelable:t,detail:n}={}){let i=new CustomEvent(r,{cancelable:t,bubbles:!0,detail:n});return(e||document.documentElement).dispatchEvent(i),i}function B(){return new Promise(r=>requestAnimationFrame(()=>r()))}function At(){return new Promise(r=>setTimeout(()=>r(),0))}function Pt(){return Promise.resolve()}function ee(r=""){return new DOMParser().parseFromString(r,"text/html")}function te(r,...e){let t=Lt(r,e).replace(/^\n/,"").split(` -`),n=t[0].match(/^\s+/),i=n?n[0].length:0;return t.map(s=>s.slice(i)).join(` -`)}function Lt(r,e){return r.reduce((t,n,i)=>{let s=e[i]==null?"":e[i];return t+n+s},"")}function k(){return Array.apply(null,{length:36}).map((r,e)=>e==8||e==13||e==18||e==23?"-":e==14?"4":e==19?(Math.floor(Math.random()*4)+8).toString(16):Math.floor(Math.random()*15).toString(16)).join("")}var h;(function(r){r[r.get=0]="get",r[r.post=1]="post",r[r.put=2]="put",r[r.patch=3]="patch",r[r.delete=4]="delete"})(h||(h={}));function Tt(r){switch(r.toLowerCase()){case"get":return h.get;case"post":return h.post;case"put":return h.put;case"patch":return h.patch;case"delete":return h.delete}}var I=class{constructor(e,t,n,i=new URLSearchParams){this.abortController=new AbortController,this.resolveRequestPromise=s=>{},this.delegate=e,this.method=t,this.headers=this.defaultHeaders,this.isIdempotent?this.url=Ct(n,[...i.entries()]):(this.body=i,this.url=n)}get location(){return this.url}get params(){return this.url.searchParams}get entries(){return this.body?Array.from(this.body.entries()):[]}cancel(){this.abortController.abort()}async perform(){var e,t;let{fetchOptions:n}=this;(t=(e=this.delegate).prepareHeadersForRequest)===null||t===void 0||t.call(e,this.headers,this),await this.allowRequestToBeIntercepted(n);try{this.delegate.requestStarted(this);let i=await fetch(this.url.href,n);return await this.receive(i)}catch(i){if(i.name!=="AbortError")throw this.delegate.requestErrored(this,i),i}finally{this.delegate.requestFinished(this)}}async receive(e){let t=new W(e);return u("turbo:before-fetch-response",{cancelable:!0,detail:{fetchResponse:t}}).defaultPrevented?this.delegate.requestPreventedHandlingResponse(this,t):t.succeeded?this.delegate.requestSucceededWithResponse(this,t):this.delegate.requestFailedWithResponse(this,t),t}get fetchOptions(){var e;return{method:h[this.method].toUpperCase(),credentials:"same-origin",headers:this.headers,redirect:"follow",body:this.body,signal:this.abortSignal,referrer:(e=this.delegate.referrer)===null||e===void 0?void 0:e.href}}get defaultHeaders(){return{Accept:"text/html, application/xhtml+xml"}}get isIdempotent(){return this.method==h.get}get abortSignal(){return this.abortController.signal}async allowRequestToBeIntercepted(e){let t=new Promise(i=>this.resolveRequestPromise=i);u("turbo:before-fetch-request",{cancelable:!0,detail:{fetchOptions:e,url:this.url.href,resume:this.resolveRequestPromise}}).defaultPrevented&&await t}};function Ct(r,e){let t=new URLSearchParams(r.search);for(let[n,i]of e)i instanceof File||(t.has(n)?(t.delete(n),r.searchParams.set(n,i)):r.searchParams.append(n,i));return r}var re=class{constructor(e,t){this.started=!1,this.intersect=n=>{let i=n.slice(-1)[0];(i==null?void 0:i.isIntersecting)&&this.delegate.elementAppearedInViewport(this.element)},this.delegate=e,this.element=t,this.intersectionObserver=new IntersectionObserver(this.intersect)}start(){this.started||(this.started=!0,this.intersectionObserver.observe(this.element))}stop(){this.started&&(this.started=!1,this.intersectionObserver.unobserve(this.element))}},L=class{constructor(e){this.templateElement=document.createElement("template"),this.templateElement.innerHTML=e}static wrap(e){return typeof e=="string"?new this(e):e}get fragment(){let e=document.createDocumentFragment();for(let t of this.foreignElements)e.appendChild(document.importNode(t,!0));return e}get foreignElements(){return this.templateChildren.reduce((e,t)=>t.tagName.toLowerCase()=="turbo-stream"?[...e,t]:e,[])}get templateChildren(){return Array.from(this.templateElement.content.children)}};L.contentType="text/vnd.turbo-stream.html";var E;(function(r){r[r.initialized=0]="initialized",r[r.requesting=1]="requesting",r[r.waiting=2]="waiting",r[r.receiving=3]="receiving",r[r.stopping=4]="stopping",r[r.stopped=5]="stopped"})(E||(E={}));var S;(function(r){r.urlEncoded="application/x-www-form-urlencoded",r.multipart="multipart/form-data",r.plain="text/plain"})(S||(S={}));function Ot(r){switch(r.toLowerCase()){case S.multipart:return S.multipart;case S.plain:return S.plain;default:return S.urlEncoded}}var U=class{constructor(e,t,n,i=!1){this.state=E.initialized,this.delegate=e,this.formElement=t,this.submitter=n,this.formData=Rt(t,n),this.fetchRequest=new I(this,this.method,this.location,this.body),this.mustRedirect=i}get method(){var e;let t=((e=this.submitter)===null||e===void 0?void 0:e.getAttribute("formmethod"))||this.formElement.getAttribute("method")||"";return Tt(t.toLowerCase())||h.get}get action(){var e;let t=typeof this.formElement.action=="string"?this.formElement.action:null;return((e=this.submitter)===null||e===void 0?void 0:e.getAttribute("formaction"))||this.formElement.getAttribute("action")||t||""}get location(){return m(this.action)}get body(){return this.enctype==S.urlEncoded||this.method==h.get?new URLSearchParams(this.stringFormData):this.formData}get enctype(){var e;return Ot(((e=this.submitter)===null||e===void 0?void 0:e.getAttribute("formenctype"))||this.formElement.enctype)}get isIdempotent(){return this.fetchRequest.isIdempotent}get stringFormData(){return[...this.formData].reduce((e,[t,n])=>e.concat(typeof n=="string"?[[t,n]]:[]),[])}async start(){let{initialized:e,requesting:t}=E;if(this.state==e)return this.state=t,this.fetchRequest.perform()}stop(){let{stopping:e,stopped:t}=E;if(this.state!=e&&this.state!=t)return this.state=e,this.fetchRequest.cancel(),!0}prepareHeadersForRequest(e,t){if(!t.isIdempotent){let n=kt(ne("csrf-param"))||ne("csrf-token");n&&(e["X-CSRF-Token"]=n),e.Accept=[L.contentType,e.Accept].join(", ")}}requestStarted(e){this.state=E.waiting,u("turbo:submit-start",{target:this.formElement,detail:{formSubmission:this}}),this.delegate.formSubmissionStarted(this)}requestPreventedHandlingResponse(e,t){this.result={success:t.succeeded,fetchResponse:t}}requestSucceededWithResponse(e,t){if(t.clientError||t.serverError)this.delegate.formSubmissionFailedWithResponse(this,t);else if(this.requestMustRedirect(e)&&Mt(t)){let n=new Error("Form responses must redirect to another location");this.delegate.formSubmissionErrored(this,n)}else this.state=E.receiving,this.result={success:!0,fetchResponse:t},this.delegate.formSubmissionSucceededWithResponse(this,t)}requestFailedWithResponse(e,t){this.result={success:!1,fetchResponse:t},this.delegate.formSubmissionFailedWithResponse(this,t)}requestErrored(e,t){this.result={success:!1,error:t},this.delegate.formSubmissionErrored(this,t)}requestFinished(e){this.state=E.stopped,u("turbo:submit-end",{target:this.formElement,detail:Object.assign({formSubmission:this},this.result)}),this.delegate.formSubmissionFinished(this)}requestMustRedirect(e){return!e.isIdempotent&&this.mustRedirect}};function Rt(r,e){let t=new FormData(r),n=e==null?void 0:e.getAttribute("name"),i=e==null?void 0:e.getAttribute("value");return n&&i!=null&&t.get(n)!=i&&t.append(n,i),t}function kt(r){if(r!=null){let t=(document.cookie?document.cookie.split("; "):[]).find(n=>n.startsWith(r));if(t){let n=t.split("=").slice(1).join("=");return n?decodeURIComponent(n):void 0}}}function ne(r){let e=document.querySelector(`meta[name="${r}"]`);return e&&e.content}function Mt(r){return r.statusCode==200&&!r.redirected}var M=class{constructor(e){this.element=e}get children(){return[...this.element.children]}hasAnchor(e){return this.getElementForAnchor(e)!=null}getElementForAnchor(e){return e?this.element.querySelector(`[id='${e}'], a[name='${e}']`):null}get isConnected(){return this.element.isConnected}get firstAutofocusableElement(){return this.element.querySelector("[autofocus]")}get permanentElements(){return[...this.element.querySelectorAll("[id][data-turbo-permanent]")]}getPermanentElementById(e){return this.element.querySelector(`#${e}[data-turbo-permanent]`)}getPermanentElementMapForSnapshot(e){let t={};for(let n of this.permanentElements){let{id:i}=n,s=e.getPermanentElementById(i);s&&(t[i]=[n,s])}return t}},K=class{constructor(e,t){this.submitBubbled=n=>{if(n.target instanceof HTMLFormElement){let i=n.target,s=n.submitter||void 0;this.delegate.shouldInterceptFormSubmission(i,s)&&(n.preventDefault(),n.stopImmediatePropagation(),this.delegate.formSubmissionIntercepted(i,s))}},this.delegate=e,this.element=t}start(){this.element.addEventListener("submit",this.submitBubbled)}stop(){this.element.removeEventListener("submit",this.submitBubbled)}},z=class{constructor(e,t){this.resolveRenderPromise=n=>{},this.resolveInterceptionPromise=n=>{},this.delegate=e,this.element=t}scrollToAnchor(e){let t=this.snapshot.getElementForAnchor(e);t?(this.scrollToElement(t),this.focusElement(t)):this.scrollToPosition({x:0,y:0})}scrollToAnchorFromLocation(e){this.scrollToAnchor(P(e))}scrollToElement(e){e.scrollIntoView()}focusElement(e){e instanceof HTMLElement&&(e.hasAttribute("tabindex")?e.focus():(e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")))}scrollToPosition({x:e,y:t}){this.scrollRoot.scrollTo(e,t)}scrollToTop(){this.scrollToPosition({x:0,y:0})}get scrollRoot(){return window}async render(e){let{isPreview:t,shouldRender:n,newSnapshot:i}=e;if(n)try{this.renderPromise=new Promise(c=>this.resolveRenderPromise=c),this.renderer=e,this.prepareToRenderSnapshot(e);let s=new Promise(c=>this.resolveInterceptionPromise=c);this.delegate.allowsImmediateRender(i,this.resolveInterceptionPromise)||await s,await this.renderSnapshot(e),this.delegate.viewRenderedSnapshot(i,t),this.finishRenderingSnapshot(e)}finally{delete this.renderer,this.resolveRenderPromise(void 0),delete this.renderPromise}else this.invalidate()}invalidate(){this.delegate.viewInvalidated()}prepareToRenderSnapshot(e){this.markAsPreview(e.isPreview),e.prepareToRender()}markAsPreview(e){e?this.element.setAttribute("data-turbo-preview",""):this.element.removeAttribute("data-turbo-preview")}async renderSnapshot(e){await e.render()}finishRenderingSnapshot(e){e.finishRendering()}},ie=class extends z{invalidate(){this.element.innerHTML=""}get snapshot(){return new M(this.element)}},$=class{constructor(e,t){this.clickBubbled=n=>{this.respondsToEventTarget(n.target)?this.clickEvent=n:delete this.clickEvent},this.linkClicked=n=>{this.clickEvent&&this.respondsToEventTarget(n.target)&&n.target instanceof Element&&this.delegate.shouldInterceptLinkClick(n.target,n.detail.url)&&(this.clickEvent.preventDefault(),n.preventDefault(),this.delegate.linkClickIntercepted(n.target,n.detail.url)),delete this.clickEvent},this.willVisit=()=>{delete this.clickEvent},this.delegate=e,this.element=t}start(){this.element.addEventListener("click",this.clickBubbled),document.addEventListener("turbo:click",this.linkClicked),document.addEventListener("turbo:before-visit",this.willVisit)}stop(){this.element.removeEventListener("click",this.clickBubbled),document.removeEventListener("turbo:click",this.linkClicked),document.removeEventListener("turbo:before-visit",this.willVisit)}respondsToEventTarget(e){let t=e instanceof Element?e:e instanceof Node?e.parentElement:null;return t&&t.closest("turbo-frame, html")==this.element}},se=class{constructor(e){this.permanentElementMap=e}static preservingPermanentElements(e,t){let n=new this(e);n.enter(),t(),n.leave()}enter(){for(let e in this.permanentElementMap){let[,t]=this.permanentElementMap[e];this.replaceNewPermanentElementWithPlaceholder(t)}}leave(){for(let e in this.permanentElementMap){let[t]=this.permanentElementMap[e];this.replaceCurrentPermanentElementWithClone(t),this.replacePlaceholderWithPermanentElement(t)}}replaceNewPermanentElementWithPlaceholder(e){let t=xt(e);e.replaceWith(t)}replaceCurrentPermanentElementWithClone(e){let t=e.cloneNode(!0);e.replaceWith(t)}replacePlaceholderWithPermanentElement(e){let t=this.getPlaceholderById(e.id);t==null||t.replaceWith(e)}getPlaceholderById(e){return this.placeholders.find(t=>t.content==e)}get placeholders(){return[...document.querySelectorAll("meta[name=turbo-permanent-placeholder][content]")]}};function xt(r){let e=document.createElement("meta");return e.setAttribute("name","turbo-permanent-placeholder"),e.setAttribute("content",r.id),e}var N=class{constructor(e,t,n){this.currentSnapshot=e,this.newSnapshot=t,this.isPreview=n,this.promise=new Promise((i,s)=>this.resolvingFunctions={resolve:i,reject:s})}get shouldRender(){return!0}prepareToRender(){}finishRendering(){this.resolvingFunctions&&(this.resolvingFunctions.resolve(),delete this.resolvingFunctions)}createScriptElement(e){if(e.getAttribute("data-turbo-eval")=="false")return e;{let t=document.createElement("script");return this.cspNonce&&(t.nonce=this.cspNonce),t.textContent=e.textContent,t.async=!1,Ft(t,e),t}}preservingPermanentElements(e){se.preservingPermanentElements(this.permanentElementMap,e)}focusFirstAutofocusableElement(){let e=this.connectedSnapshot.firstAutofocusableElement;Bt(e)&&e.focus()}get connectedSnapshot(){return this.newSnapshot.isConnected?this.newSnapshot:this.currentSnapshot}get currentElement(){return this.currentSnapshot.element}get newElement(){return this.newSnapshot.element}get permanentElementMap(){return this.currentSnapshot.getPermanentElementMapForSnapshot(this.newSnapshot)}get cspNonce(){var e;return(e=document.head.querySelector('meta[name="csp-nonce"]'))===null||e===void 0?void 0:e.getAttribute("content")}};function Ft(r,e){for(let{name:t,value:n}of[...e.attributes])r.setAttribute(t,n)}function Bt(r){return r&&typeof r.focus=="function"}var oe=class extends N{get shouldRender(){return!0}async render(){await B(),this.preservingPermanentElements(()=>{this.loadFrameElement()}),this.scrollFrameIntoView(),await B(),this.focusFirstAutofocusableElement(),await B(),this.activateScriptElements()}loadFrameElement(){var e;let t=document.createRange();t.selectNodeContents(this.currentElement),t.deleteContents();let n=this.newElement,i=(e=n.ownerDocument)===null||e===void 0?void 0:e.createRange();i&&(i.selectNodeContents(n),this.currentElement.appendChild(i.extractContents()))}scrollFrameIntoView(){if(this.currentElement.autoscroll||this.newElement.autoscroll){let e=this.currentElement.firstElementChild,t=It(this.currentElement.getAttribute("data-autoscroll-block"),"end");if(e)return e.scrollIntoView({block:t}),!0}return!1}activateScriptElements(){for(let e of this.newScriptElements){let t=this.createScriptElement(e);e.replaceWith(t)}}get newScriptElements(){return this.currentElement.querySelectorAll("script")}};function It(r,e){return r=="end"||r=="start"||r=="center"||r=="nearest"?r:e}var g=class{constructor(){this.hiding=!1,this.value=0,this.visible=!1,this.trickle=()=>{this.setValue(this.value+Math.random()/100)},this.stylesheetElement=this.createStylesheetElement(),this.progressElement=this.createProgressElement(),this.installStylesheetElement(),this.setValue(0)}static get defaultCSS(){return te` +(()=>{var zo=Object.create;var Ht=Object.defineProperty;var Zo=Object.getOwnPropertyDescriptor;var Jo=Object.getOwnPropertyNames;var Ko=Object.getPrototypeOf,Go=Object.prototype.hasOwnProperty;var Yo=(t,e,r)=>e in t?Ht(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r;var Xo=t=>Ht(t,"__esModule",{value:!0});var Qo=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var ea=(t,e,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Jo(e))!Go.call(t,i)&&i!=="default"&&Ht(t,i,{get:()=>e[i],enumerable:!(r=Zo(e,i))||r.enumerable});return t},ki=t=>ea(Xo(Ht(t!=null?zo(Ko(t)):{},"default",t&&t.__esModule&&"default"in t?{get:()=>t.default,enumerable:!0}:{value:t,enumerable:!0})),t);var Ai=(t,e,r)=>(Yo(t,typeof e!="symbol"?e+"":e,r),r);var ii=Qo(U=>{"use strict";Object.defineProperty(U,"__esModule",{value:!0});function Vn(t,e){for(var r=0;r<e.length;r++){var i=e[r];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}function oe(t,e,r){return e&&Vn(t.prototype,e),r&&Vn(t,r),t}function k(){return k=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var r=arguments[e];for(var i in r)Object.prototype.hasOwnProperty.call(r,i)&&(t[i]=r[i])}return t},k.apply(this,arguments)}function W(t,e){t.prototype=Object.create(e.prototype),t.prototype.constructor=t,mt(t,e)}function xr(t){return xr=Object.setPrototypeOf?Object.getPrototypeOf:function(r){return r.__proto__||Object.getPrototypeOf(r)},xr(t)}function mt(t,e){return mt=Object.setPrototypeOf||function(i,n){return i.__proto__=n,i},mt(t,e)}function kl(){if(typeof Reflect=="undefined"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(t){return!1}}function Zt(t,e,r){return kl()?Zt=Reflect.construct:Zt=function(n,s,o){var a=[null];a.push.apply(a,s);var l=Function.bind.apply(n,a),u=new l;return o&&mt(u,o.prototype),u},Zt.apply(null,arguments)}function Al(t){return Function.toString.call(t).indexOf("[native code]")!==-1}function Nr(t){var e=typeof Map=="function"?new Map:void 0;return Nr=function(i){if(i===null||!Al(i))return i;if(typeof i!="function")throw new TypeError("Super expression must either be null or a function");if(typeof e!="undefined"){if(e.has(i))return e.get(i);e.set(i,n)}function n(){return Zt(i,arguments,xr(this).constructor)}return n.prototype=Object.create(i.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),mt(n,i)},Nr(t)}function Ol(t,e){if(t==null)return{};var r={},i=Object.keys(t),n,s;for(s=0;s<i.length;s++)n=i[s],!(e.indexOf(n)>=0)&&(r[n]=t[n]);return r}function Cl(t,e){if(!!t){if(typeof t=="string")return Bn(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);if(r==="Object"&&t.constructor&&(r=t.constructor.name),r==="Map"||r==="Set")return Array.from(t);if(r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return Bn(t,e)}}function Bn(t,e){(e==null||e>t.length)&&(e=t.length);for(var r=0,i=new Array(e);r<e;r++)i[r]=t[r];return i}function Ce(t,e){var r=typeof Symbol!="undefined"&&t[Symbol.iterator]||t["@@iterator"];if(r)return(r=r.call(t)).next.bind(r);if(Array.isArray(t)||(r=Cl(t))||e&&t&&typeof t.length=="number"){r&&(t=r);var i=0;return function(){return i>=t.length?{done:!0}:{done:!1,value:t[i++]}}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var Ne=function(t){W(e,t);function e(){return t.apply(this,arguments)||this}return e}(Nr(Error)),Ll=function(t){W(e,t);function e(r){return t.call(this,"Invalid DateTime: "+r.toMessage())||this}return e}(Ne),Il=function(t){W(e,t);function e(r){return t.call(this,"Invalid Interval: "+r.toMessage())||this}return e}(Ne),Pl=function(t){W(e,t);function e(r){return t.call(this,"Invalid Duration: "+r.toMessage())||this}return e}(Ne),pt=function(t){W(e,t);function e(){return t.apply(this,arguments)||this}return e}(Ne),jn=function(t){W(e,t);function e(r){return t.call(this,"Invalid unit "+r)||this}return e}(Ne),z=function(t){W(e,t);function e(){return t.apply(this,arguments)||this}return e}(Ne),Le=function(t){W(e,t);function e(){return t.call(this,"Zone is an abstract class")||this}return e}(Ne),v="numeric",Q="short",j="long",_r={year:v,month:v,day:v},Un={year:v,month:Q,day:v},Ml={year:v,month:Q,day:v,weekday:Q},qn={year:v,month:j,day:v},$n={year:v,month:j,day:v,weekday:j},Wn={hour:v,minute:v},zn={hour:v,minute:v,second:v},Zn={hour:v,minute:v,second:v,timeZoneName:Q},Jn={hour:v,minute:v,second:v,timeZoneName:j},Kn={hour:v,minute:v,hourCycle:"h23"},Gn={hour:v,minute:v,second:v,hourCycle:"h23"},Yn={hour:v,minute:v,second:v,hourCycle:"h23",timeZoneName:Q},Xn={hour:v,minute:v,second:v,hourCycle:"h23",timeZoneName:j},Qn={year:v,month:v,day:v,hour:v,minute:v},es={year:v,month:v,day:v,hour:v,minute:v,second:v},ts={year:v,month:Q,day:v,hour:v,minute:v},rs={year:v,month:Q,day:v,hour:v,minute:v,second:v},Rl={year:v,month:Q,day:v,weekday:Q,hour:v,minute:v},is={year:v,month:j,day:v,hour:v,minute:v,timeZoneName:Q},ns={year:v,month:j,day:v,hour:v,minute:v,second:v,timeZoneName:Q},ss={year:v,month:j,day:v,weekday:j,hour:v,minute:v,timeZoneName:j},os={year:v,month:j,day:v,weekday:j,hour:v,minute:v,second:v,timeZoneName:j};function A(t){return typeof t=="undefined"}function _e(t){return typeof t=="number"}function Jt(t){return typeof t=="number"&&t%1==0}function Dl(t){return typeof t=="string"}function xl(t){return Object.prototype.toString.call(t)==="[object Date]"}function as(){try{return typeof Intl!="undefined"&&!!Intl.RelativeTimeFormat}catch(t){return!1}}function Nl(t){return Array.isArray(t)?t:[t]}function ls(t,e,r){if(t.length!==0)return t.reduce(function(i,n){var s=[e(n),n];return i&&r(i[0],s[0])===i[0]?i:s},null)[1]}function _l(t,e){return e.reduce(function(r,i){return r[i]=t[i],r},{})}function Xe(t,e){return Object.prototype.hasOwnProperty.call(t,e)}function ge(t,e,r){return Jt(t)&&t>=e&&t<=r}function Fl(t,e){return t-e*Math.floor(t/e)}function Qe(t,e){e===void 0&&(e=2);var r=t<0?"-":"",i=r?t*-1:t,n;return i.toString().length<e?n=("0".repeat(e)+i).slice(-e):n=i.toString(),""+r+n}function x(t){if(!(A(t)||t===null||t===""))return parseInt(t,10)}function Fr(t){if(!(A(t)||t===null||t==="")){var e=parseFloat("0."+t)*1e3;return Math.floor(e)}}function Hr(t,e,r){r===void 0&&(r=!1);var i=Math.pow(10,e),n=r?Math.trunc:Math.round;return n(t*i)/i}function gt(t){return t%4==0&&(t%100!=0||t%400==0)}function vt(t){return gt(t)?366:365}function Kt(t,e){var r=Fl(e-1,12)+1,i=t+(e-r)/12;return r===2?gt(i)?29:28:[31,null,31,30,31,30,31,31,30,31,30,31][r-1]}function Vr(t){var e=Date.UTC(t.year,t.month-1,t.day,t.hour,t.minute,t.second,t.millisecond);return t.year<100&&t.year>=0&&(e=new Date(e),e.setUTCFullYear(e.getUTCFullYear()-1900)),+e}function Gt(t){var e=(t+Math.floor(t/4)-Math.floor(t/100)+Math.floor(t/400))%7,r=t-1,i=(r+Math.floor(r/4)-Math.floor(r/100)+Math.floor(r/400))%7;return e===4||i===3?53:52}function Br(t){return t>99?t:t>60?1900+t:2e3+t}function us(t,e,r,i){i===void 0&&(i=null);var n=new Date(t),s={hourCycle:"h23",year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"};i&&(s.timeZone=i);var o=k({timeZoneName:e},s),a=new Intl.DateTimeFormat(r,o).formatToParts(n).find(function(l){return l.type.toLowerCase()==="timezonename"});return a?a.value:null}function Yt(t,e){var r=parseInt(t,10);Number.isNaN(r)&&(r=0);var i=parseInt(e,10)||0,n=r<0||Object.is(r,-0)?-i:i;return r*60+n}function cs(t){var e=Number(t);if(typeof t=="boolean"||t===""||Number.isNaN(e))throw new z("Invalid unit value "+t);return e}function Xt(t,e){var r={};for(var i in t)if(Xe(t,i)){var n=t[i];if(n==null)continue;r[e(i)]=cs(n)}return r}function Qt(t,e){var r=Math.trunc(Math.abs(t/60)),i=Math.trunc(Math.abs(t%60)),n=t>=0?"+":"-";switch(e){case"short":return""+n+Qe(r,2)+":"+Qe(i,2);case"narrow":return""+n+r+(i>0?":"+i:"");case"techie":return""+n+Qe(r,2)+Qe(i,2);default:throw new RangeError("Value format "+e+" is out of range for property format")}}function er(t){return _l(t,["hour","minute","second","millisecond"])}var hs=/[A-Za-z_+-]{1,256}(:?\/[A-Za-z_+-]{1,256}(\/[A-Za-z_+-]{1,256})?)?/,Hl=["January","February","March","April","May","June","July","August","September","October","November","December"],ds=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],Vl=["J","F","M","A","M","J","J","A","S","O","N","D"];function fs(t){switch(t){case"narrow":return[].concat(Vl);case"short":return[].concat(ds);case"long":return[].concat(Hl);case"numeric":return["1","2","3","4","5","6","7","8","9","10","11","12"];case"2-digit":return["01","02","03","04","05","06","07","08","09","10","11","12"];default:return null}}var ms=["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],ps=["Mon","Tue","Wed","Thu","Fri","Sat","Sun"],Bl=["M","T","W","T","F","S","S"];function gs(t){switch(t){case"narrow":return[].concat(Bl);case"short":return[].concat(ps);case"long":return[].concat(ms);case"numeric":return["1","2","3","4","5","6","7"];default:return null}}var vs=["AM","PM"],jl=["Before Christ","Anno Domini"],Ul=["BC","AD"],ql=["B","A"];function ys(t){switch(t){case"narrow":return[].concat(ql);case"short":return[].concat(Ul);case"long":return[].concat(jl);default:return null}}function $l(t){return vs[t.hour<12?0:1]}function Wl(t,e){return gs(e)[t.weekday-1]}function zl(t,e){return fs(e)[t.month-1]}function Zl(t,e){return ys(e)[t.year<0?0:1]}function Jl(t,e,r,i){r===void 0&&(r="always"),i===void 0&&(i=!1);var n={years:["year","yr."],quarters:["quarter","qtr."],months:["month","mo."],weeks:["week","wk."],days:["day","day","days"],hours:["hour","hr."],minutes:["minute","min."],seconds:["second","sec."]},s=["hours","minutes","seconds"].indexOf(t)===-1;if(r==="auto"&&s){var o=t==="days";switch(e){case 1:return o?"tomorrow":"next "+n[t][0];case-1:return o?"yesterday":"last "+n[t][0];case 0:return o?"today":"this "+n[t][0]}}var a=Object.is(e,-0)||e<0,l=Math.abs(e),u=l===1,c=n[t],h=i?u?c[1]:c[2]||c[1]:u?n[t][0]:t;return a?l+" "+h+" ago":"in "+l+" "+h}function bs(t,e){for(var r="",i=Ce(t),n;!(n=i()).done;){var s=n.value;s.literal?r+=s.val:r+=e(s.val)}return r}var Kl={D:_r,DD:Un,DDD:qn,DDDD:$n,t:Wn,tt:zn,ttt:Zn,tttt:Jn,T:Kn,TT:Gn,TTT:Yn,TTTT:Xn,f:Qn,ff:ts,fff:is,ffff:ss,F:es,FF:rs,FFF:ns,FFFF:os},ve=function(){t.create=function(i,n){return n===void 0&&(n={}),new t(i,n)},t.parseFormat=function(i){for(var n=null,s="",o=!1,a=[],l=0;l<i.length;l++){var u=i.charAt(l);u==="'"?(s.length>0&&a.push({literal:o,val:s}),n=null,s="",o=!o):o||u===n?s+=u:(s.length>0&&a.push({literal:!1,val:s}),s=u,n=u)}return s.length>0&&a.push({literal:o,val:s}),a},t.macroTokenToFormatOpts=function(i){return Kl[i]};function t(r,i){this.opts=i,this.loc=r,this.systemLoc=null}var e=t.prototype;return e.formatWithSystemDefault=function(i,n){this.systemLoc===null&&(this.systemLoc=this.loc.redefaultToSystem());var s=this.systemLoc.dtFormatter(i,k({},this.opts,n));return s.format()},e.formatDateTime=function(i,n){n===void 0&&(n={});var s=this.loc.dtFormatter(i,k({},this.opts,n));return s.format()},e.formatDateTimeParts=function(i,n){n===void 0&&(n={});var s=this.loc.dtFormatter(i,k({},this.opts,n));return s.formatToParts()},e.resolvedOptions=function(i,n){n===void 0&&(n={});var s=this.loc.dtFormatter(i,k({},this.opts,n));return s.resolvedOptions()},e.num=function(i,n){if(n===void 0&&(n=0),this.opts.forceSimple)return Qe(i,n);var s=k({},this.opts);return n>0&&(s.padTo=n),this.loc.numberFormatter(s).format(i)},e.formatDateTimeFromString=function(i,n){var s=this,o=this.loc.listingMode()==="en",a=this.loc.outputCalendar&&this.loc.outputCalendar!=="gregory",l=function(f,S){return s.loc.extract(i,f,S)},u=function(f){return i.isOffsetFixed&&i.offset===0&&f.allowZ?"Z":i.isValid?i.zone.formatOffset(i.ts,f.format):""},c=function(){return o?$l(i):l({hour:"numeric",hourCycle:"h12"},"dayperiod")},h=function(f,S){return o?zl(i,f):l(S?{month:f}:{month:f,day:"numeric"},"month")},d=function(f,S){return o?Wl(i,f):l(S?{weekday:f}:{weekday:f,month:"long",day:"numeric"},"weekday")},m=function(f){var S=t.macroTokenToFormatOpts(f);return S?s.formatWithSystemDefault(i,S):f},p=function(f){return o?Zl(i,f):l({era:f},"era")},y=function(f){switch(f){case"S":return s.num(i.millisecond);case"u":case"SSS":return s.num(i.millisecond,3);case"s":return s.num(i.second);case"ss":return s.num(i.second,2);case"m":return s.num(i.minute);case"mm":return s.num(i.minute,2);case"h":return s.num(i.hour%12==0?12:i.hour%12);case"hh":return s.num(i.hour%12==0?12:i.hour%12,2);case"H":return s.num(i.hour);case"HH":return s.num(i.hour,2);case"Z":return u({format:"narrow",allowZ:s.opts.allowZ});case"ZZ":return u({format:"short",allowZ:s.opts.allowZ});case"ZZZ":return u({format:"techie",allowZ:s.opts.allowZ});case"ZZZZ":return i.zone.offsetName(i.ts,{format:"short",locale:s.loc.locale});case"ZZZZZ":return i.zone.offsetName(i.ts,{format:"long",locale:s.loc.locale});case"z":return i.zoneName;case"a":return c();case"d":return a?l({day:"numeric"},"day"):s.num(i.day);case"dd":return a?l({day:"2-digit"},"day"):s.num(i.day,2);case"c":return s.num(i.weekday);case"ccc":return d("short",!0);case"cccc":return d("long",!0);case"ccccc":return d("narrow",!0);case"E":return s.num(i.weekday);case"EEE":return d("short",!1);case"EEEE":return d("long",!1);case"EEEEE":return d("narrow",!1);case"L":return a?l({month:"numeric",day:"numeric"},"month"):s.num(i.month);case"LL":return a?l({month:"2-digit",day:"numeric"},"month"):s.num(i.month,2);case"LLL":return h("short",!0);case"LLLL":return h("long",!0);case"LLLLL":return h("narrow",!0);case"M":return a?l({month:"numeric"},"month"):s.num(i.month);case"MM":return a?l({month:"2-digit"},"month"):s.num(i.month,2);case"MMM":return h("short",!1);case"MMMM":return h("long",!1);case"MMMMM":return h("narrow",!1);case"y":return a?l({year:"numeric"},"year"):s.num(i.year);case"yy":return a?l({year:"2-digit"},"year"):s.num(i.year.toString().slice(-2),2);case"yyyy":return a?l({year:"numeric"},"year"):s.num(i.year,4);case"yyyyyy":return a?l({year:"numeric"},"year"):s.num(i.year,6);case"G":return p("short");case"GG":return p("long");case"GGGGG":return p("narrow");case"kk":return s.num(i.weekYear.toString().slice(-2),2);case"kkkk":return s.num(i.weekYear,4);case"W":return s.num(i.weekNumber);case"WW":return s.num(i.weekNumber,2);case"o":return s.num(i.ordinal);case"ooo":return s.num(i.ordinal,3);case"q":return s.num(i.quarter);case"qq":return s.num(i.quarter,2);case"X":return s.num(Math.floor(i.ts/1e3));case"x":return s.num(i.ts);default:return m(f)}};return bs(t.parseFormat(n),y)},e.formatDurationFromString=function(i,n){var s=this,o=function(d){switch(d[0]){case"S":return"millisecond";case"s":return"second";case"m":return"minute";case"h":return"hour";case"d":return"day";case"M":return"month";case"y":return"year";default:return null}},a=function(d){return function(m){var p=o(m);return p?s.num(d.get(p),m.length):m}},l=t.parseFormat(n),u=l.reduce(function(h,d){var m=d.literal,p=d.val;return m?h:h.concat(p)},[]),c=i.shiftTo.apply(i,u.map(o).filter(function(h){return h}));return bs(l,a(c))},t}(),ee=function(){function t(r,i){this.reason=r,this.explanation=i}var e=t.prototype;return e.toMessage=function(){return this.explanation?this.reason+": "+this.explanation:this.reason},t}(),et=function(){function t(){}var e=t.prototype;return e.offsetName=function(i,n){throw new Le},e.formatOffset=function(i,n){throw new Le},e.offset=function(i){throw new Le},e.equals=function(i){throw new Le},oe(t,[{key:"type",get:function(){throw new Le}},{key:"name",get:function(){throw new Le}},{key:"isUniversal",get:function(){throw new Le}},{key:"isValid",get:function(){throw new Le}}]),t}(),jr=null,ws=function(t){W(e,t);function e(){return t.apply(this,arguments)||this}var r=e.prototype;return r.offsetName=function(n,s){var o=s.format,a=s.locale;return us(n,o,a)},r.formatOffset=function(n,s){return Qt(this.offset(n),s)},r.offset=function(n){return-new Date(n).getTimezoneOffset()},r.equals=function(n){return n.type==="system"},oe(e,[{key:"type",get:function(){return"system"}},{key:"name",get:function(){return new Intl.DateTimeFormat().resolvedOptions().timeZone}},{key:"isUniversal",get:function(){return!1}},{key:"isValid",get:function(){return!0}}],[{key:"instance",get:function(){return jr===null&&(jr=new e),jr}}]),e}(et),Gl=RegExp("^"+hs.source+"$"),tr={};function Yl(t){return tr[t]||(tr[t]=new Intl.DateTimeFormat("en-US",{hourCycle:"h23",timeZone:t,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"})),tr[t]}var Xl={year:0,month:1,day:2,hour:3,minute:4,second:5};function Ql(t,e){var r=t.format(e).replace(/\u200E/g,""),i=/(\d+)\/(\d+)\/(\d+),? (\d+):(\d+):(\d+)/.exec(r),n=i[1],s=i[2],o=i[3],a=i[4],l=i[5],u=i[6];return[o,n,s,a,l,u]}function eu(t,e){for(var r=t.formatToParts(e),i=[],n=0;n<r.length;n++){var s=r[n],o=s.type,a=s.value,l=Xl[o];A(l)||(i[l]=parseInt(a,10))}return i}var rr={},ae=function(t){W(e,t),e.create=function(n){return rr[n]||(rr[n]=new e(n)),rr[n]},e.resetCache=function(){rr={},tr={}},e.isValidSpecifier=function(n){return!!(n&&n.match(Gl))},e.isValidZone=function(n){try{return new Intl.DateTimeFormat("en-US",{timeZone:n}).format(),!0}catch(s){return!1}},e.parseGMTOffset=function(n){if(n){var s=n.match(/^Etc\/GMT(0|[+-]\d{1,2})$/i);if(s)return-60*parseInt(s[1])}return null};function e(i){var n;return n=t.call(this)||this,n.zoneName=i,n.valid=e.isValidZone(i),n}var r=e.prototype;return r.offsetName=function(n,s){var o=s.format,a=s.locale;return us(n,o,a,this.name)},r.formatOffset=function(n,s){return Qt(this.offset(n),s)},r.offset=function(n){var s=new Date(n);if(isNaN(s))return NaN;var o=Yl(this.name),a=o.formatToParts?eu(o,s):Ql(o,s),l=a[0],u=a[1],c=a[2],h=a[3],d=a[4],m=a[5],p=Vr({year:l,month:u,day:c,hour:h,minute:d,second:m,millisecond:0}),y=+s,b=y%1e3;return y-=b>=0?b:1e3+b,(p-y)/(60*1e3)},r.equals=function(n){return n.type==="iana"&&n.name===this.name},oe(e,[{key:"type",get:function(){return"iana"}},{key:"name",get:function(){return this.zoneName}},{key:"isUniversal",get:function(){return!1}},{key:"isValid",get:function(){return this.valid}}]),e}(et),Ur=null,Z=function(t){W(e,t),e.instance=function(n){return n===0?e.utcInstance:new e(n)},e.parseSpecifier=function(n){if(n){var s=n.match(/^utc(?:([+-]\d{1,2})(?::(\d{2}))?)?$/i);if(s)return new e(Yt(s[1],s[2]))}return null};function e(i){var n;return n=t.call(this)||this,n.fixed=i,n}var r=e.prototype;return r.offsetName=function(){return this.name},r.formatOffset=function(n,s){return Qt(this.fixed,s)},r.offset=function(){return this.fixed},r.equals=function(n){return n.type==="fixed"&&n.fixed===this.fixed},oe(e,[{key:"type",get:function(){return"fixed"}},{key:"name",get:function(){return this.fixed===0?"UTC":"UTC"+Qt(this.fixed,"narrow")}},{key:"isUniversal",get:function(){return!0}},{key:"isValid",get:function(){return!0}}],[{key:"utcInstance",get:function(){return Ur===null&&(Ur=new e(0)),Ur}}]),e}(et),qr=function(t){W(e,t);function e(i){var n;return n=t.call(this)||this,n.zoneName=i,n}var r=e.prototype;return r.offsetName=function(){return null},r.formatOffset=function(){return""},r.offset=function(){return NaN},r.equals=function(){return!1},oe(e,[{key:"type",get:function(){return"invalid"}},{key:"name",get:function(){return this.zoneName}},{key:"isUniversal",get:function(){return!1}},{key:"isValid",get:function(){return!1}}]),e}(et);function Ie(t,e){var r;if(A(t)||t===null)return e;if(t instanceof et)return t;if(Dl(t)){var i=t.toLowerCase();return i==="local"||i==="system"?e:i==="utc"||i==="gmt"?Z.utcInstance:(r=ae.parseGMTOffset(t))!=null?Z.instance(r):ae.isValidSpecifier(i)?ae.create(t):Z.parseSpecifier(i)||new qr(t)}else return _e(t)?Z.instance(t):typeof t=="object"&&t.offset&&typeof t.offset=="number"?t:new qr(t)}var Ss=function(){return Date.now()},Es="system",Ts=null,ks=null,As=null,Os,L=function(){function t(){}return t.resetCaches=function(){M.resetCache(),ae.resetCache()},oe(t,null,[{key:"now",get:function(){return Ss},set:function(r){Ss=r}},{key:"defaultZone",get:function(){return Ie(Es,ws.instance)},set:function(r){Es=r}},{key:"defaultLocale",get:function(){return Ts},set:function(r){Ts=r}},{key:"defaultNumberingSystem",get:function(){return ks},set:function(r){ks=r}},{key:"defaultOutputCalendar",get:function(){return As},set:function(r){As=r}},{key:"throwOnInvalid",get:function(){return Os},set:function(r){Os=r}}]),t}(),tu=["base"],$r={};function Wr(t,e){e===void 0&&(e={});var r=JSON.stringify([t,e]),i=$r[r];return i||(i=new Intl.DateTimeFormat(t,e),$r[r]=i),i}var zr={};function ru(t,e){e===void 0&&(e={});var r=JSON.stringify([t,e]),i=zr[r];return i||(i=new Intl.NumberFormat(t,e),zr[r]=i),i}var Zr={};function iu(t,e){e===void 0&&(e={});var r=e;r.base;var i=Ol(r,tu),n=JSON.stringify([t,i]),s=Zr[n];return s||(s=new Intl.RelativeTimeFormat(t,e),Zr[n]=s),s}var yt=null;function nu(){return yt||(yt=new Intl.DateTimeFormat().resolvedOptions().locale,yt)}function su(t){var e=t.indexOf("-u-");if(e===-1)return[t];var r,i=t.substring(0,e);try{r=Wr(t).resolvedOptions()}catch(a){r=Wr(i).resolvedOptions()}var n=r,s=n.numberingSystem,o=n.calendar;return[i,s,o]}function ou(t,e,r){return(r||e)&&(t+="-u",r&&(t+="-ca-"+r),e&&(t+="-nu-"+e)),t}function au(t){for(var e=[],r=1;r<=12;r++){var i=I.utc(2016,r,1);e.push(t(i))}return e}function lu(t){for(var e=[],r=1;r<=7;r++){var i=I.utc(2016,11,13+r);e.push(t(i))}return e}function ir(t,e,r,i,n){var s=t.listingMode(r);return s==="error"?null:s==="en"?i(e):n(e)}function uu(t){return t.numberingSystem&&t.numberingSystem!=="latn"?!1:t.numberingSystem==="latn"||!t.locale||t.locale.startsWith("en")||new Intl.DateTimeFormat(t.intl).resolvedOptions().numberingSystem==="latn"}var cu=function(){function t(r,i,n){if(this.padTo=n.padTo||0,this.floor=n.floor||!1,!i){var s={useGrouping:!1};n.padTo>0&&(s.minimumIntegerDigits=n.padTo),this.inf=ru(r,s)}}var e=t.prototype;return e.format=function(i){if(this.inf){var n=this.floor?Math.floor(i):i;return this.inf.format(n)}else{var s=this.floor?Math.floor(i):Hr(i,3);return Qe(s,this.padTo)}},t}(),hu=function(){function t(r,i,n){this.opts=n;var s;if(r.zone.isUniversal){var o=-1*(r.offset/60),a=o>=0?"Etc/GMT+"+o:"Etc/GMT"+o,l=ae.isValidZone(a);r.offset!==0&&l?(s=a,this.dt=r):(s="UTC",n.timeZoneName?this.dt=r:this.dt=r.offset===0?r:I.fromMillis(r.ts+r.offset*60*1e3))}else r.zone.type==="system"?this.dt=r:(this.dt=r,s=r.zone.name);var u=k({},this.opts);s&&(u.timeZone=s),this.dtf=Wr(i,u)}var e=t.prototype;return e.format=function(){return this.dtf.format(this.dt.toJSDate())},e.formatToParts=function(){return this.dtf.formatToParts(this.dt.toJSDate())},e.resolvedOptions=function(){return this.dtf.resolvedOptions()},t}(),du=function(){function t(r,i,n){this.opts=k({style:"long"},n),!i&&as()&&(this.rtf=iu(r,n))}var e=t.prototype;return e.format=function(i,n){return this.rtf?this.rtf.format(i,n):Jl(n,i,this.opts.numeric,this.opts.style!=="long")},e.formatToParts=function(i,n){return this.rtf?this.rtf.formatToParts(i,n):[]},t}(),M=function(){t.fromOpts=function(i){return t.create(i.locale,i.numberingSystem,i.outputCalendar,i.defaultToEN)},t.create=function(i,n,s,o){o===void 0&&(o=!1);var a=i||L.defaultLocale,l=a||(o?"en-US":nu()),u=n||L.defaultNumberingSystem,c=s||L.defaultOutputCalendar;return new t(l,u,c,a)},t.resetCache=function(){yt=null,$r={},zr={},Zr={}},t.fromObject=function(i){var n=i===void 0?{}:i,s=n.locale,o=n.numberingSystem,a=n.outputCalendar;return t.create(s,o,a)};function t(r,i,n,s){var o=su(r),a=o[0],l=o[1],u=o[2];this.locale=a,this.numberingSystem=i||l||null,this.outputCalendar=n||u||null,this.intl=ou(this.locale,this.numberingSystem,this.outputCalendar),this.weekdaysCache={format:{},standalone:{}},this.monthsCache={format:{},standalone:{}},this.meridiemCache=null,this.eraCache={},this.specifiedLocale=s,this.fastNumbersCached=null}var e=t.prototype;return e.listingMode=function(i){var n=this.isEnglish(),s=(this.numberingSystem===null||this.numberingSystem==="latn")&&(this.outputCalendar===null||this.outputCalendar==="gregory");return n&&s?"en":"intl"},e.clone=function(i){return!i||Object.getOwnPropertyNames(i).length===0?this:t.create(i.locale||this.specifiedLocale,i.numberingSystem||this.numberingSystem,i.outputCalendar||this.outputCalendar,i.defaultToEN||!1)},e.redefaultToEN=function(i){return i===void 0&&(i={}),this.clone(k({},i,{defaultToEN:!0}))},e.redefaultToSystem=function(i){return i===void 0&&(i={}),this.clone(k({},i,{defaultToEN:!1}))},e.months=function(i,n,s){var o=this;return n===void 0&&(n=!1),s===void 0&&(s=!0),ir(this,i,s,fs,function(){var a=n?{month:i,day:"numeric"}:{month:i},l=n?"format":"standalone";return o.monthsCache[l][i]||(o.monthsCache[l][i]=au(function(u){return o.extract(u,a,"month")})),o.monthsCache[l][i]})},e.weekdays=function(i,n,s){var o=this;return n===void 0&&(n=!1),s===void 0&&(s=!0),ir(this,i,s,gs,function(){var a=n?{weekday:i,year:"numeric",month:"long",day:"numeric"}:{weekday:i},l=n?"format":"standalone";return o.weekdaysCache[l][i]||(o.weekdaysCache[l][i]=lu(function(u){return o.extract(u,a,"weekday")})),o.weekdaysCache[l][i]})},e.meridiems=function(i){var n=this;return i===void 0&&(i=!0),ir(this,void 0,i,function(){return vs},function(){if(!n.meridiemCache){var s={hour:"numeric",hourCycle:"h12"};n.meridiemCache=[I.utc(2016,11,13,9),I.utc(2016,11,13,19)].map(function(o){return n.extract(o,s,"dayperiod")})}return n.meridiemCache})},e.eras=function(i,n){var s=this;return n===void 0&&(n=!0),ir(this,i,n,ys,function(){var o={era:i};return s.eraCache[i]||(s.eraCache[i]=[I.utc(-40,1,1),I.utc(2017,1,1)].map(function(a){return s.extract(a,o,"era")})),s.eraCache[i]})},e.extract=function(i,n,s){var o=this.dtFormatter(i,n),a=o.formatToParts(),l=a.find(function(u){return u.type.toLowerCase()===s});return l?l.value:null},e.numberFormatter=function(i){return i===void 0&&(i={}),new cu(this.intl,i.forceSimple||this.fastNumbers,i)},e.dtFormatter=function(i,n){return n===void 0&&(n={}),new hu(i,this.intl,n)},e.relFormatter=function(i){return i===void 0&&(i={}),new du(this.intl,this.isEnglish(),i)},e.isEnglish=function(){return this.locale==="en"||this.locale.toLowerCase()==="en-us"||new Intl.DateTimeFormat(this.intl).resolvedOptions().locale.startsWith("en-us")},e.equals=function(i){return this.locale===i.locale&&this.numberingSystem===i.numberingSystem&&this.outputCalendar===i.outputCalendar},oe(t,[{key:"fastNumbers",get:function(){return this.fastNumbersCached==null&&(this.fastNumbersCached=uu(this)),this.fastNumbersCached}}]),t}();function tt(){for(var t=arguments.length,e=new Array(t),r=0;r<t;r++)e[r]=arguments[r];var i=e.reduce(function(n,s){return n+s.source},"");return RegExp("^"+i+"$")}function Fe(){for(var t=arguments.length,e=new Array(t),r=0;r<t;r++)e[r]=arguments[r];return function(i){return e.reduce(function(n,s){var o=n[0],a=n[1],l=n[2],u=s(i,l),c=u[0],h=u[1],d=u[2];return[k({},o,c),a||h,d]},[{},null,1]).slice(0,2)}}function rt(t){if(t==null)return[null,null];for(var e=arguments.length,r=new Array(e>1?e-1:0),i=1;i<e;i++)r[i-1]=arguments[i];for(var n=0,s=r;n<s.length;n++){var o=s[n],a=o[0],l=o[1],u=a.exec(t);if(u)return l(u)}return[null,null]}function Cs(){for(var t=arguments.length,e=new Array(t),r=0;r<t;r++)e[r]=arguments[r];return function(i,n){var s={},o;for(o=0;o<e.length;o++)s[e[o]]=x(i[n+o]);return[s,null,n+o]}}var Ls=/(?:(Z)|([+-]\d\d)(?::?(\d\d))?)/,Jr=/(\d\d)(?::?(\d\d)(?::?(\d\d)(?:[.,](\d{1,30}))?)?)?/,Is=RegExp(""+Jr.source+Ls.source+"?"),Kr=RegExp("(?:T"+Is.source+")?"),fu=/([+-]\d{6}|\d{4})(?:-?(\d\d)(?:-?(\d\d))?)?/,mu=/(\d{4})-?W(\d\d)(?:-?(\d))?/,pu=/(\d{4})-?(\d{3})/,gu=Cs("weekYear","weekNumber","weekDay"),vu=Cs("year","ordinal"),yu=/(\d{4})-(\d\d)-(\d\d)/,Ps=RegExp(Jr.source+" ?(?:"+Ls.source+"|("+hs.source+"))?"),bu=RegExp("(?: "+Ps.source+")?");function it(t,e,r){var i=t[e];return A(i)?r:x(i)}function Ms(t,e){var r={year:it(t,e),month:it(t,e+1,1),day:it(t,e+2,1)};return[r,null,e+3]}function He(t,e){var r={hours:it(t,e,0),minutes:it(t,e+1,0),seconds:it(t,e+2,0),milliseconds:Fr(t[e+3])};return[r,null,e+4]}function nt(t,e){var r=!t[e]&&!t[e+1],i=Yt(t[e+1],t[e+2]),n=r?null:Z.instance(i);return[{},n,e+3]}function Rs(t,e){var r=t[e]?ae.create(t[e]):null;return[{},r,e+1]}var wu=RegExp("^T?"+Jr.source+"$"),Su=/^-?P(?:(?:(-?\d{1,9})Y)?(?:(-?\d{1,9})M)?(?:(-?\d{1,9})W)?(?:(-?\d{1,9})D)?(?:T(?:(-?\d{1,9})H)?(?:(-?\d{1,9})M)?(?:(-?\d{1,20})(?:[.,](-?\d{1,9}))?S)?)?)$/;function Eu(t){var e=t[0],r=t[1],i=t[2],n=t[3],s=t[4],o=t[5],a=t[6],l=t[7],u=t[8],c=e[0]==="-",h=l&&l[0]==="-",d=function(p,y){return y===void 0&&(y=!1),p!==void 0&&(y||p&&c)?-p:p};return[{years:d(x(r)),months:d(x(i)),weeks:d(x(n)),days:d(x(s)),hours:d(x(o)),minutes:d(x(a)),seconds:d(x(l),l==="-0"),milliseconds:d(Fr(u),h)}]}var Tu={GMT:0,EDT:-4*60,EST:-5*60,CDT:-5*60,CST:-6*60,MDT:-6*60,MST:-7*60,PDT:-7*60,PST:-8*60};function Gr(t,e,r,i,n,s,o){var a={year:e.length===2?Br(x(e)):x(e),month:ds.indexOf(r)+1,day:x(i),hour:x(n),minute:x(s)};return o&&(a.second=x(o)),t&&(a.weekday=t.length>3?ms.indexOf(t)+1:ps.indexOf(t)+1),a}var ku=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|(?:([+-]\d\d)(\d\d)))$/;function Au(t){var e=t[1],r=t[2],i=t[3],n=t[4],s=t[5],o=t[6],a=t[7],l=t[8],u=t[9],c=t[10],h=t[11],d=Gr(e,n,i,r,s,o,a),m;return l?m=Tu[l]:u?m=0:m=Yt(c,h),[d,new Z(m)]}function Ou(t){return t.replace(/\([^)]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").trim()}var Cu=/^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\d\d) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\d{4}) (\d\d):(\d\d):(\d\d) GMT$/,Lu=/^(Monday|Tuesday|Wedsday|Thursday|Friday|Saturday|Sunday), (\d\d)-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\d\d) (\d\d):(\d\d):(\d\d) GMT$/,Iu=/^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ( \d|\d\d) (\d\d):(\d\d):(\d\d) (\d{4})$/;function Ds(t){var e=t[1],r=t[2],i=t[3],n=t[4],s=t[5],o=t[6],a=t[7],l=Gr(e,n,i,r,s,o,a);return[l,Z.utcInstance]}function Pu(t){var e=t[1],r=t[2],i=t[3],n=t[4],s=t[5],o=t[6],a=t[7],l=Gr(e,a,r,i,n,s,o);return[l,Z.utcInstance]}var Mu=tt(fu,Kr),Ru=tt(mu,Kr),Du=tt(pu,Kr),xu=tt(Is),Nu=Fe(Ms,He,nt),_u=Fe(gu,He,nt),Fu=Fe(vu,He,nt),Hu=Fe(He,nt);function Vu(t){return rt(t,[Mu,Nu],[Ru,_u],[Du,Fu],[xu,Hu])}function Bu(t){return rt(Ou(t),[ku,Au])}function ju(t){return rt(t,[Cu,Ds],[Lu,Ds],[Iu,Pu])}function Uu(t){return rt(t,[Su,Eu])}var qu=Fe(He);function $u(t){return rt(t,[wu,qu])}var Wu=tt(yu,bu),zu=tt(Ps),Zu=Fe(Ms,He,nt,Rs),Ju=Fe(He,nt,Rs);function Ku(t){return rt(t,[Wu,Zu],[zu,Ju])}var Gu="Invalid Duration",xs={weeks:{days:7,hours:7*24,minutes:7*24*60,seconds:7*24*60*60,milliseconds:7*24*60*60*1e3},days:{hours:24,minutes:24*60,seconds:24*60*60,milliseconds:24*60*60*1e3},hours:{minutes:60,seconds:60*60,milliseconds:60*60*1e3},minutes:{seconds:60,milliseconds:60*1e3},seconds:{milliseconds:1e3}},Yu=k({years:{quarters:4,months:12,weeks:52,days:365,hours:365*24,minutes:365*24*60,seconds:365*24*60*60,milliseconds:365*24*60*60*1e3},quarters:{months:3,weeks:13,days:91,hours:91*24,minutes:91*24*60,seconds:91*24*60*60,milliseconds:91*24*60*60*1e3},months:{weeks:4,days:30,hours:30*24,minutes:30*24*60,seconds:30*24*60*60,milliseconds:30*24*60*60*1e3}},xs),J=146097/400,st=146097/4800,Xu=k({years:{quarters:4,months:12,weeks:J/7,days:J,hours:J*24,minutes:J*24*60,seconds:J*24*60*60,milliseconds:J*24*60*60*1e3},quarters:{months:3,weeks:J/28,days:J/4,hours:J*24/4,minutes:J*24*60/4,seconds:J*24*60*60/4,milliseconds:J*24*60*60*1e3/4},months:{weeks:st/7,days:st,hours:st*24,minutes:st*24*60,seconds:st*24*60*60,milliseconds:st*24*60*60*1e3}},xs),ot=["years","quarters","months","weeks","days","hours","minutes","seconds","milliseconds"],Qu=ot.slice(0).reverse();function Ve(t,e,r){r===void 0&&(r=!1);var i={values:r?e.values:k({},t.values,e.values||{}),loc:t.loc.clone(e.loc),conversionAccuracy:e.conversionAccuracy||t.conversionAccuracy};return new N(i)}function ec(t){return t<0?Math.floor(t):Math.ceil(t)}function Ns(t,e,r,i,n){var s=t[n][r],o=e[r]/s,a=Math.sign(o)===Math.sign(i[n]),l=!a&&i[n]!==0&&Math.abs(o)<=1?ec(o):Math.trunc(o);i[n]+=l,e[r]-=l*s}function tc(t,e){Qu.reduce(function(r,i){return A(e[i])?r:(r&&Ns(t,e,r,e,i),i)},null)}var N=function(){function t(r){var i=r.conversionAccuracy==="longterm"||!1;this.values=r.values,this.loc=r.loc||M.create(),this.conversionAccuracy=i?"longterm":"casual",this.invalid=r.invalid||null,this.matrix=i?Xu:Yu,this.isLuxonDuration=!0}t.fromMillis=function(i,n){return t.fromObject({milliseconds:i},n)},t.fromObject=function(i,n){if(n===void 0&&(n={}),i==null||typeof i!="object")throw new z("Duration.fromObject: argument expected to be an object, got "+(i===null?"null":typeof i));return new t({values:Xt(i,t.normalizeUnit),loc:M.fromObject(n),conversionAccuracy:n.conversionAccuracy})},t.fromISO=function(i,n){var s=Uu(i),o=s[0];return o?t.fromObject(o,n):t.invalid("unparsable",'the input "'+i+`" can't be parsed as ISO 8601`)},t.fromISOTime=function(i,n){var s=$u(i),o=s[0];return o?t.fromObject(o,n):t.invalid("unparsable",'the input "'+i+`" can't be parsed as ISO 8601`)},t.invalid=function(i,n){if(n===void 0&&(n=null),!i)throw new z("need to specify a reason the Duration is invalid");var s=i instanceof ee?i:new ee(i,n);if(L.throwOnInvalid)throw new Pl(s);return new t({invalid:s})},t.normalizeUnit=function(i){var n={year:"years",years:"years",quarter:"quarters",quarters:"quarters",month:"months",months:"months",week:"weeks",weeks:"weeks",day:"days",days:"days",hour:"hours",hours:"hours",minute:"minutes",minutes:"minutes",second:"seconds",seconds:"seconds",millisecond:"milliseconds",milliseconds:"milliseconds"}[i&&i.toLowerCase()];if(!n)throw new jn(i);return n},t.isDuration=function(i){return i&&i.isLuxonDuration||!1};var e=t.prototype;return e.toFormat=function(i,n){n===void 0&&(n={});var s=k({},n,{floor:n.round!==!1&&n.floor!==!1});return this.isValid?ve.create(this.loc,s).formatDurationFromString(this,i):Gu},e.toObject=function(){return this.isValid?k({},this.values):{}},e.toISO=function(){if(!this.isValid)return null;var i="P";return this.years!==0&&(i+=this.years+"Y"),(this.months!==0||this.quarters!==0)&&(i+=this.months+this.quarters*3+"M"),this.weeks!==0&&(i+=this.weeks+"W"),this.days!==0&&(i+=this.days+"D"),(this.hours!==0||this.minutes!==0||this.seconds!==0||this.milliseconds!==0)&&(i+="T"),this.hours!==0&&(i+=this.hours+"H"),this.minutes!==0&&(i+=this.minutes+"M"),(this.seconds!==0||this.milliseconds!==0)&&(i+=Hr(this.seconds+this.milliseconds/1e3,3)+"S"),i==="P"&&(i+="T0S"),i},e.toISOTime=function(i){if(i===void 0&&(i={}),!this.isValid)return null;var n=this.toMillis();if(n<0||n>=864e5)return null;i=k({suppressMilliseconds:!1,suppressSeconds:!1,includePrefix:!1,format:"extended"},i);var s=this.shiftTo("hours","minutes","seconds","milliseconds"),o=i.format==="basic"?"hhmm":"hh:mm";(!i.suppressSeconds||s.seconds!==0||s.milliseconds!==0)&&(o+=i.format==="basic"?"ss":":ss",(!i.suppressMilliseconds||s.milliseconds!==0)&&(o+=".SSS"));var a=s.toFormat(o);return i.includePrefix&&(a="T"+a),a},e.toJSON=function(){return this.toISO()},e.toString=function(){return this.toISO()},e.toMillis=function(){return this.as("milliseconds")},e.valueOf=function(){return this.toMillis()},e.plus=function(i){if(!this.isValid)return this;for(var n=Be(i),s={},o=Ce(ot),a;!(a=o()).done;){var l=a.value;(Xe(n.values,l)||Xe(this.values,l))&&(s[l]=n.get(l)+this.get(l))}return Ve(this,{values:s},!0)},e.minus=function(i){if(!this.isValid)return this;var n=Be(i);return this.plus(n.negate())},e.mapUnits=function(i){if(!this.isValid)return this;for(var n={},s=0,o=Object.keys(this.values);s<o.length;s++){var a=o[s];n[a]=cs(i(this.values[a],a))}return Ve(this,{values:n},!0)},e.get=function(i){return this[t.normalizeUnit(i)]},e.set=function(i){if(!this.isValid)return this;var n=k({},this.values,Xt(i,t.normalizeUnit));return Ve(this,{values:n})},e.reconfigure=function(i){var n=i===void 0?{}:i,s=n.locale,o=n.numberingSystem,a=n.conversionAccuracy,l=this.loc.clone({locale:s,numberingSystem:o}),u={loc:l};return a&&(u.conversionAccuracy=a),Ve(this,u)},e.as=function(i){return this.isValid?this.shiftTo(i).get(i):NaN},e.normalize=function(){if(!this.isValid)return this;var i=this.toObject();return tc(this.matrix,i),Ve(this,{values:i},!0)},e.shiftTo=function(){for(var i=arguments.length,n=new Array(i),s=0;s<i;s++)n[s]=arguments[s];if(!this.isValid)return this;if(n.length===0)return this;n=n.map(function(S){return t.normalizeUnit(S)});for(var o={},a={},l=this.toObject(),u,c=Ce(ot),h;!(h=c()).done;){var d=h.value;if(n.indexOf(d)>=0){u=d;var m=0;for(var p in a)m+=this.matrix[p][d]*a[p],a[p]=0;_e(l[d])&&(m+=l[d]);var y=Math.trunc(m);o[d]=y,a[d]=m-y;for(var b in l)ot.indexOf(b)>ot.indexOf(d)&&Ns(this.matrix,l,b,o,d)}else _e(l[d])&&(a[d]=l[d])}for(var f in a)a[f]!==0&&(o[u]+=f===u?a[f]:a[f]/this.matrix[u][f]);return Ve(this,{values:o},!0).normalize()},e.negate=function(){if(!this.isValid)return this;for(var i={},n=0,s=Object.keys(this.values);n<s.length;n++){var o=s[n];i[o]=-this.values[o]}return Ve(this,{values:i},!0)},e.equals=function(i){if(!this.isValid||!i.isValid||!this.loc.equals(i.loc))return!1;function n(l,u){return l===void 0||l===0?u===void 0||u===0:l===u}for(var s=Ce(ot),o;!(o=s()).done;){var a=o.value;if(!n(this.values[a],i.values[a]))return!1}return!0},oe(t,[{key:"locale",get:function(){return this.isValid?this.loc.locale:null}},{key:"numberingSystem",get:function(){return this.isValid?this.loc.numberingSystem:null}},{key:"years",get:function(){return this.isValid?this.values.years||0:NaN}},{key:"quarters",get:function(){return this.isValid?this.values.quarters||0:NaN}},{key:"months",get:function(){return this.isValid?this.values.months||0:NaN}},{key:"weeks",get:function(){return this.isValid?this.values.weeks||0:NaN}},{key:"days",get:function(){return this.isValid?this.values.days||0:NaN}},{key:"hours",get:function(){return this.isValid?this.values.hours||0:NaN}},{key:"minutes",get:function(){return this.isValid?this.values.minutes||0:NaN}},{key:"seconds",get:function(){return this.isValid?this.values.seconds||0:NaN}},{key:"milliseconds",get:function(){return this.isValid?this.values.milliseconds||0:NaN}},{key:"isValid",get:function(){return this.invalid===null}},{key:"invalidReason",get:function(){return this.invalid?this.invalid.reason:null}},{key:"invalidExplanation",get:function(){return this.invalid?this.invalid.explanation:null}}]),t}();function Be(t){if(_e(t))return N.fromMillis(t);if(N.isDuration(t))return t;if(typeof t=="object")return N.fromObject(t);throw new z("Unknown duration argument "+t+" of type "+typeof t)}var bt="Invalid Interval";function rc(t,e){return!t||!t.isValid?wt.invalid("missing or invalid start"):!e||!e.isValid?wt.invalid("missing or invalid end"):e<t?wt.invalid("end before start","The end of an interval must be after its start, but you had start="+t.toISO()+" and end="+e.toISO()):null}var wt=function(){function t(r){this.s=r.start,this.e=r.end,this.invalid=r.invalid||null,this.isLuxonInterval=!0}t.invalid=function(i,n){if(n===void 0&&(n=null),!i)throw new z("need to specify a reason the Interval is invalid");var s=i instanceof ee?i:new ee(i,n);if(L.throwOnInvalid)throw new Il(s);return new t({invalid:s})},t.fromDateTimes=function(i,n){var s=kt(i),o=kt(n),a=rc(s,o);return a??new t({start:s,end:o})},t.after=function(i,n){var s=Be(n),o=kt(i);return t.fromDateTimes(o,o.plus(s))},t.before=function(i,n){var s=Be(n),o=kt(i);return t.fromDateTimes(o.minus(s),o)},t.fromISO=function(i,n){var s=(i||"").split("/",2),o=s[0],a=s[1];if(o&&a){var l,u;try{l=I.fromISO(o,n),u=l.isValid}catch(p){u=!1}var c,h;try{c=I.fromISO(a,n),h=c.isValid}catch(p){h=!1}if(u&&h)return t.fromDateTimes(l,c);if(u){var d=N.fromISO(a,n);if(d.isValid)return t.after(l,d)}else if(h){var m=N.fromISO(o,n);if(m.isValid)return t.before(c,m)}}return t.invalid("unparsable",'the input "'+i+`" can't be parsed as ISO 8601`)},t.isInterval=function(i){return i&&i.isLuxonInterval||!1};var e=t.prototype;return e.length=function(i){return i===void 0&&(i="milliseconds"),this.isValid?this.toDuration.apply(this,[i]).get(i):NaN},e.count=function(i){if(i===void 0&&(i="milliseconds"),!this.isValid)return NaN;var n=this.start.startOf(i),s=this.end.startOf(i);return Math.floor(s.diff(n,i).get(i))+1},e.hasSame=function(i){return this.isValid?this.isEmpty()||this.e.minus(1).hasSame(this.s,i):!1},e.isEmpty=function(){return this.s.valueOf()===this.e.valueOf()},e.isAfter=function(i){return this.isValid?this.s>i:!1},e.isBefore=function(i){return this.isValid?this.e<=i:!1},e.contains=function(i){return this.isValid?this.s<=i&&this.e>i:!1},e.set=function(i){var n=i===void 0?{}:i,s=n.start,o=n.end;return this.isValid?t.fromDateTimes(s||this.s,o||this.e):this},e.splitAt=function(){var i=this;if(!this.isValid)return[];for(var n=arguments.length,s=new Array(n),o=0;o<n;o++)s[o]=arguments[o];for(var a=s.map(kt).filter(function(m){return i.contains(m)}).sort(),l=[],u=this.s,c=0;u<this.e;){var h=a[c]||this.e,d=+h>+this.e?this.e:h;l.push(t.fromDateTimes(u,d)),u=d,c+=1}return l},e.splitBy=function(i){var n=Be(i);if(!this.isValid||!n.isValid||n.as("milliseconds")===0)return[];for(var s=this.s,o=1,a,l=[];s<this.e;){var u=this.start.plus(n.mapUnits(function(c){return c*o}));a=+u>+this.e?this.e:u,l.push(t.fromDateTimes(s,a)),s=a,o+=1}return l},e.divideEqually=function(i){return this.isValid?this.splitBy(this.length()/i).slice(0,i):[]},e.overlaps=function(i){return this.e>i.s&&this.s<i.e},e.abutsStart=function(i){return this.isValid?+this.e==+i.s:!1},e.abutsEnd=function(i){return this.isValid?+i.e==+this.s:!1},e.engulfs=function(i){return this.isValid?this.s<=i.s&&this.e>=i.e:!1},e.equals=function(i){return!this.isValid||!i.isValid?!1:this.s.equals(i.s)&&this.e.equals(i.e)},e.intersection=function(i){if(!this.isValid)return this;var n=this.s>i.s?this.s:i.s,s=this.e<i.e?this.e:i.e;return n>=s?null:t.fromDateTimes(n,s)},e.union=function(i){if(!this.isValid)return this;var n=this.s<i.s?this.s:i.s,s=this.e>i.e?this.e:i.e;return t.fromDateTimes(n,s)},t.merge=function(i){var n=i.sort(function(a,l){return a.s-l.s}).reduce(function(a,l){var u=a[0],c=a[1];return c?c.overlaps(l)||c.abutsStart(l)?[u,c.union(l)]:[u.concat([c]),l]:[u,l]},[[],null]),s=n[0],o=n[1];return o&&s.push(o),s},t.xor=function(i){for(var n,s=null,o=0,a=[],l=i.map(function(p){return[{time:p.s,type:"s"},{time:p.e,type:"e"}]}),u=(n=Array.prototype).concat.apply(n,l),c=u.sort(function(p,y){return p.time-y.time}),h=Ce(c),d;!(d=h()).done;){var m=d.value;o+=m.type==="s"?1:-1,o===1?s=m.time:(s&&+s!=+m.time&&a.push(t.fromDateTimes(s,m.time)),s=null)}return t.merge(a)},e.difference=function(){for(var i=this,n=arguments.length,s=new Array(n),o=0;o<n;o++)s[o]=arguments[o];return t.xor([this].concat(s)).map(function(a){return i.intersection(a)}).filter(function(a){return a&&!a.isEmpty()})},e.toString=function(){return this.isValid?"["+this.s.toISO()+" \u2013 "+this.e.toISO()+")":bt},e.toISO=function(i){return this.isValid?this.s.toISO(i)+"/"+this.e.toISO(i):bt},e.toISODate=function(){return this.isValid?this.s.toISODate()+"/"+this.e.toISODate():bt},e.toISOTime=function(i){return this.isValid?this.s.toISOTime(i)+"/"+this.e.toISOTime(i):bt},e.toFormat=function(i,n){var s=n===void 0?{}:n,o=s.separator,a=o===void 0?" \u2013 ":o;return this.isValid?""+this.s.toFormat(i)+a+this.e.toFormat(i):bt},e.toDuration=function(i,n){return this.isValid?this.e.diff(this.s,i,n):N.invalid(this.invalidReason)},e.mapEndpoints=function(i){return t.fromDateTimes(i(this.s),i(this.e))},oe(t,[{key:"start",get:function(){return this.isValid?this.s:null}},{key:"end",get:function(){return this.isValid?this.e:null}},{key:"isValid",get:function(){return this.invalidReason===null}},{key:"invalidReason",get:function(){return this.invalid?this.invalid.reason:null}},{key:"invalidExplanation",get:function(){return this.invalid?this.invalid.explanation:null}}]),t}(),St=function(){function t(){}return t.hasDST=function(r){r===void 0&&(r=L.defaultZone);var i=I.now().setZone(r).set({month:12});return!r.isUniversal&&i.offset!==i.set({month:6}).offset},t.isValidIANAZone=function(r){return ae.isValidSpecifier(r)&&ae.isValidZone(r)},t.normalizeZone=function(r){return Ie(r,L.defaultZone)},t.months=function(r,i){r===void 0&&(r="long");var n=i===void 0?{}:i,s=n.locale,o=s===void 0?null:s,a=n.numberingSystem,l=a===void 0?null:a,u=n.locObj,c=u===void 0?null:u,h=n.outputCalendar,d=h===void 0?"gregory":h;return(c||M.create(o,l,d)).months(r)},t.monthsFormat=function(r,i){r===void 0&&(r="long");var n=i===void 0?{}:i,s=n.locale,o=s===void 0?null:s,a=n.numberingSystem,l=a===void 0?null:a,u=n.locObj,c=u===void 0?null:u,h=n.outputCalendar,d=h===void 0?"gregory":h;return(c||M.create(o,l,d)).months(r,!0)},t.weekdays=function(r,i){r===void 0&&(r="long");var n=i===void 0?{}:i,s=n.locale,o=s===void 0?null:s,a=n.numberingSystem,l=a===void 0?null:a,u=n.locObj,c=u===void 0?null:u;return(c||M.create(o,l,null)).weekdays(r)},t.weekdaysFormat=function(r,i){r===void 0&&(r="long");var n=i===void 0?{}:i,s=n.locale,o=s===void 0?null:s,a=n.numberingSystem,l=a===void 0?null:a,u=n.locObj,c=u===void 0?null:u;return(c||M.create(o,l,null)).weekdays(r,!0)},t.meridiems=function(r){var i=r===void 0?{}:r,n=i.locale,s=n===void 0?null:n;return M.create(s).meridiems()},t.eras=function(r,i){r===void 0&&(r="short");var n=i===void 0?{}:i,s=n.locale,o=s===void 0?null:s;return M.create(o,null,"gregory").eras(r)},t.features=function(){return{relative:as()}},t}();function _s(t,e){var r=function(s){return s.toUTC(0,{keepLocalTime:!0}).startOf("day").valueOf()},i=r(e)-r(t);return Math.floor(N.fromMillis(i).as("days"))}function ic(t,e,r){for(var i=[["years",function(y,b){return b.year-y.year}],["quarters",function(y,b){return b.quarter-y.quarter}],["months",function(y,b){return b.month-y.month+(b.year-y.year)*12}],["weeks",function(y,b){var f=_s(y,b);return(f-f%7)/7}],["days",_s]],n={},s,o,a=0,l=i;a<l.length;a++){var u=l[a],c=u[0],h=u[1];if(r.indexOf(c)>=0){var d;s=c;var m=h(t,e);if(o=t.plus((d={},d[c]=m,d)),o>e){var p;t=t.plus((p={},p[c]=m-1,p)),m-=1}else t=o;n[c]=m}}return[t,n,o,s]}function nc(t,e,r,i){var n=ic(t,e,r),s=n[0],o=n[1],a=n[2],l=n[3],u=e-s,c=r.filter(function(p){return["hours","minutes","seconds","milliseconds"].indexOf(p)>=0});if(c.length===0){if(a<e){var h;a=s.plus((h={},h[l]=1,h))}a!==s&&(o[l]=(o[l]||0)+u/(a-s))}var d=N.fromObject(o,i);if(c.length>0){var m;return(m=N.fromMillis(u,i)).shiftTo.apply(m,c).plus(d)}else return d}var Yr={arab:"[\u0660-\u0669]",arabext:"[\u06F0-\u06F9]",bali:"[\u1B50-\u1B59]",beng:"[\u09E6-\u09EF]",deva:"[\u0966-\u096F]",fullwide:"[\uFF10-\uFF19]",gujr:"[\u0AE6-\u0AEF]",hanidec:"[\u3007|\u4E00|\u4E8C|\u4E09|\u56DB|\u4E94|\u516D|\u4E03|\u516B|\u4E5D]",khmr:"[\u17E0-\u17E9]",knda:"[\u0CE6-\u0CEF]",laoo:"[\u0ED0-\u0ED9]",limb:"[\u1946-\u194F]",mlym:"[\u0D66-\u0D6F]",mong:"[\u1810-\u1819]",mymr:"[\u1040-\u1049]",orya:"[\u0B66-\u0B6F]",tamldec:"[\u0BE6-\u0BEF]",telu:"[\u0C66-\u0C6F]",thai:"[\u0E50-\u0E59]",tibt:"[\u0F20-\u0F29]",latn:"\\d"},Fs={arab:[1632,1641],arabext:[1776,1785],bali:[6992,7001],beng:[2534,2543],deva:[2406,2415],fullwide:[65296,65303],gujr:[2790,2799],khmr:[6112,6121],knda:[3302,3311],laoo:[3792,3801],limb:[6470,6479],mlym:[3430,3439],mong:[6160,6169],mymr:[4160,4169],orya:[2918,2927],tamldec:[3046,3055],telu:[3174,3183],thai:[3664,3673],tibt:[3872,3881]},sc=Yr.hanidec.replace(/[\[|\]]/g,"").split("");function oc(t){var e=parseInt(t,10);if(isNaN(e)){e="";for(var r=0;r<t.length;r++){var i=t.charCodeAt(r);if(t[r].search(Yr.hanidec)!==-1)e+=sc.indexOf(t[r]);else for(var n in Fs){var s=Fs[n],o=s[0],a=s[1];i>=o&&i<=a&&(e+=i-o)}}return parseInt(e,10)}else return e}function te(t,e){var r=t.numberingSystem;return e===void 0&&(e=""),new RegExp(""+Yr[r||"latn"]+e)}var ac="missing Intl.DateTimeFormat.formatToParts support";function O(t,e){return e===void 0&&(e=function(i){return i}),{regex:t,deser:function(i){var n=i[0];return e(oc(n))}}}var lc=String.fromCharCode(160),Hs="( |"+lc+")",Vs=new RegExp(Hs,"g");function uc(t){return t.replace(/\./g,"\\.?").replace(Vs,Hs)}function Bs(t){return t.replace(/\./g,"").replace(Vs," ").toLowerCase()}function re(t,e){return t===null?null:{regex:RegExp(t.map(uc).join("|")),deser:function(i){var n=i[0];return t.findIndex(function(s){return Bs(n)===Bs(s)})+e}}}function js(t,e){return{regex:t,deser:function(i){var n=i[1],s=i[2];return Yt(n,s)},groups:e}}function Us(t){return{regex:t,deser:function(r){var i=r[0];return i}}}function cc(t){return t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")}function hc(t,e){var r=te(e),i=te(e,"{2}"),n=te(e,"{3}"),s=te(e,"{4}"),o=te(e,"{6}"),a=te(e,"{1,2}"),l=te(e,"{1,3}"),u=te(e,"{1,6}"),c=te(e,"{1,9}"),h=te(e,"{2,4}"),d=te(e,"{4,6}"),m=function(f){return{regex:RegExp(cc(f.val)),deser:function(ie){var de=ie[0];return de},literal:!0}},p=function(f){if(t.literal)return m(f);switch(f.val){case"G":return re(e.eras("short",!1),0);case"GG":return re(e.eras("long",!1),0);case"y":return O(u);case"yy":return O(h,Br);case"yyyy":return O(s);case"yyyyy":return O(d);case"yyyyyy":return O(o);case"M":return O(a);case"MM":return O(i);case"MMM":return re(e.months("short",!0,!1),1);case"MMMM":return re(e.months("long",!0,!1),1);case"L":return O(a);case"LL":return O(i);case"LLL":return re(e.months("short",!1,!1),1);case"LLLL":return re(e.months("long",!1,!1),1);case"d":return O(a);case"dd":return O(i);case"o":return O(l);case"ooo":return O(n);case"HH":return O(i);case"H":return O(a);case"hh":return O(i);case"h":return O(a);case"mm":return O(i);case"m":return O(a);case"q":return O(a);case"qq":return O(i);case"s":return O(a);case"ss":return O(i);case"S":return O(l);case"SSS":return O(n);case"u":return Us(c);case"a":return re(e.meridiems(),0);case"kkkk":return O(s);case"kk":return O(h,Br);case"W":return O(a);case"WW":return O(i);case"E":case"c":return O(r);case"EEE":return re(e.weekdays("short",!1,!1),1);case"EEEE":return re(e.weekdays("long",!1,!1),1);case"ccc":return re(e.weekdays("short",!0,!1),1);case"cccc":return re(e.weekdays("long",!0,!1),1);case"Z":case"ZZ":return js(new RegExp("([+-]"+a.source+")(?::("+i.source+"))?"),2);case"ZZZ":return js(new RegExp("([+-]"+a.source+")("+i.source+")?"),2);case"z":return Us(/[a-z_+-/]{1,256}?/i);default:return m(f)}},y=p(t)||{invalidReason:ac};return y.token=t,y}var dc={year:{"2-digit":"yy",numeric:"yyyyy"},month:{numeric:"M","2-digit":"MM",short:"MMM",long:"MMMM"},day:{numeric:"d","2-digit":"dd"},weekday:{short:"EEE",long:"EEEE"},dayperiod:"a",dayPeriod:"a",hour:{numeric:"h","2-digit":"hh"},minute:{numeric:"m","2-digit":"mm"},second:{numeric:"s","2-digit":"ss"}};function fc(t,e,r){var i=t.type,n=t.value;if(i==="literal")return{literal:!0,val:n};var s=r[i],o=dc[i];if(typeof o=="object"&&(o=o[s]),o)return{literal:!1,val:o}}function mc(t){var e=t.map(function(r){return r.regex}).reduce(function(r,i){return r+"("+i.source+")"},"");return["^"+e+"$",t]}function pc(t,e,r){var i=t.match(e);if(i){var n={},s=1;for(var o in r)if(Xe(r,o)){var a=r[o],l=a.groups?a.groups+1:1;!a.literal&&a.token&&(n[a.token.val[0]]=a.deser(i.slice(s,s+l))),s+=l}return[i,n]}else return[i,{}]}function gc(t){var e=function(s){switch(s){case"S":return"millisecond";case"s":return"second";case"m":return"minute";case"h":case"H":return"hour";case"d":return"day";case"o":return"ordinal";case"L":case"M":return"month";case"y":return"year";case"E":case"c":return"weekday";case"W":return"weekNumber";case"k":return"weekYear";case"q":return"quarter";default:return null}},r;A(t.Z)?A(t.z)?r=null:r=ae.create(t.z):r=new Z(t.Z),A(t.q)||(t.M=(t.q-1)*3+1),A(t.h)||(t.h<12&&t.a===1?t.h+=12:t.h===12&&t.a===0&&(t.h=0)),t.G===0&&t.y&&(t.y=-t.y),A(t.u)||(t.S=Fr(t.u));var i=Object.keys(t).reduce(function(n,s){var o=e(s);return o&&(n[o]=t[s]),n},{});return[i,r]}var Xr=null;function vc(){return Xr||(Xr=I.fromMillis(1555555555555)),Xr}function yc(t,e){if(t.literal)return t;var r=ve.macroTokenToFormatOpts(t.val);if(!r)return t;var i=ve.create(e,r),n=i.formatDateTimeParts(vc()),s=n.map(function(o){return fc(o,e,r)});return s.includes(void 0)?t:s}function bc(t,e){var r;return(r=Array.prototype).concat.apply(r,t.map(function(i){return yc(i,e)}))}function qs(t,e,r){var i=bc(ve.parseFormat(r),t),n=i.map(function(b){return hc(b,t)}),s=n.find(function(b){return b.invalidReason});if(s)return{input:e,tokens:i,invalidReason:s.invalidReason};var o=mc(n),a=o[0],l=o[1],u=RegExp(a,"i"),c=pc(e,u,l),h=c[0],d=c[1],m=d?gc(d):[null,null],p=m[0],y=m[1];if(Xe(d,"a")&&Xe(d,"H"))throw new pt("Can't include meridiem when specifying 24-hour format");return{input:e,tokens:i,regex:u,rawMatches:h,matches:d,result:p,zone:y}}function wc(t,e,r){var i=qs(t,e,r),n=i.result,s=i.zone,o=i.invalidReason;return[n,s,o]}var $s=[0,31,59,90,120,151,181,212,243,273,304,334],Ws=[0,31,60,91,121,152,182,213,244,274,305,335];function K(t,e){return new ee("unit out of range","you specified "+e+" (of type "+typeof e+") as a "+t+", which is invalid")}function zs(t,e,r){var i=new Date(Date.UTC(t,e-1,r)).getUTCDay();return i===0?7:i}function Zs(t,e,r){return r+(gt(t)?Ws:$s)[e-1]}function Js(t,e){var r=gt(t)?Ws:$s,i=r.findIndex(function(s){return s<e}),n=e-r[i];return{month:i+1,day:n}}function Qr(t){var e=t.year,r=t.month,i=t.day,n=Zs(e,r,i),s=zs(e,r,i),o=Math.floor((n-s+10)/7),a;return o<1?(a=e-1,o=Gt(a)):o>Gt(e)?(a=e+1,o=1):a=e,k({weekYear:a,weekNumber:o,weekday:s},er(t))}function Ks(t){var e=t.weekYear,r=t.weekNumber,i=t.weekday,n=zs(e,1,4),s=vt(e),o=r*7+i-n-3,a;o<1?(a=e-1,o+=vt(a)):o>s?(a=e+1,o-=vt(e)):a=e;var l=Js(a,o),u=l.month,c=l.day;return k({year:a,month:u,day:c},er(t))}function ei(t){var e=t.year,r=t.month,i=t.day,n=Zs(e,r,i);return k({year:e,ordinal:n},er(t))}function Gs(t){var e=t.year,r=t.ordinal,i=Js(e,r),n=i.month,s=i.day;return k({year:e,month:n,day:s},er(t))}function Sc(t){var e=Jt(t.weekYear),r=ge(t.weekNumber,1,Gt(t.weekYear)),i=ge(t.weekday,1,7);return e?r?i?!1:K("weekday",t.weekday):K("week",t.week):K("weekYear",t.weekYear)}function Ec(t){var e=Jt(t.year),r=ge(t.ordinal,1,vt(t.year));return e?r?!1:K("ordinal",t.ordinal):K("year",t.year)}function Ys(t){var e=Jt(t.year),r=ge(t.month,1,12),i=ge(t.day,1,Kt(t.year,t.month));return e?r?i?!1:K("day",t.day):K("month",t.month):K("year",t.year)}function Xs(t){var e=t.hour,r=t.minute,i=t.second,n=t.millisecond,s=ge(e,0,23)||e===24&&r===0&&i===0&&n===0,o=ge(r,0,59),a=ge(i,0,59),l=ge(n,0,999);return s?o?a?l?!1:K("millisecond",n):K("second",i):K("minute",r):K("hour",e)}var ti="Invalid DateTime",Qs=864e13;function nr(t){return new ee("unsupported zone",'the zone "'+t.name+'" is not supported')}function ri(t){return t.weekData===null&&(t.weekData=Qr(t.c)),t.weekData}function Et(t,e){var r={ts:t.ts,zone:t.zone,c:t.c,o:t.o,loc:t.loc,invalid:t.invalid};return new I(k({},r,e,{old:r}))}function eo(t,e,r){var i=t-e*60*1e3,n=r.offset(i);if(e===n)return[i,e];i-=(n-e)*60*1e3;var s=r.offset(i);return n===s?[i,n]:[t-Math.min(n,s)*60*1e3,Math.max(n,s)]}function to(t,e){t+=e*60*1e3;var r=new Date(t);return{year:r.getUTCFullYear(),month:r.getUTCMonth()+1,day:r.getUTCDate(),hour:r.getUTCHours(),minute:r.getUTCMinutes(),second:r.getUTCSeconds(),millisecond:r.getUTCMilliseconds()}}function sr(t,e,r){return eo(Vr(t),e,r)}function ro(t,e){var r=t.o,i=t.c.year+Math.trunc(e.years),n=t.c.month+Math.trunc(e.months)+Math.trunc(e.quarters)*3,s=k({},t.c,{year:i,month:n,day:Math.min(t.c.day,Kt(i,n))+Math.trunc(e.days)+Math.trunc(e.weeks)*7}),o=N.fromObject({years:e.years-Math.trunc(e.years),quarters:e.quarters-Math.trunc(e.quarters),months:e.months-Math.trunc(e.months),weeks:e.weeks-Math.trunc(e.weeks),days:e.days-Math.trunc(e.days),hours:e.hours,minutes:e.minutes,seconds:e.seconds,milliseconds:e.milliseconds}).as("milliseconds"),a=Vr(s),l=eo(a,r,t.zone),u=l[0],c=l[1];return o!==0&&(u+=o,c=t.zone.offset(u)),{ts:u,o:c}}function Tt(t,e,r,i,n){var s=r.setZone,o=r.zone;if(t&&Object.keys(t).length!==0){var a=e||o,l=I.fromObject(t,k({},r,{zone:a}));return s?l:l.setZone(o)}else return I.invalid(new ee("unparsable",'the input "'+n+`" can't be parsed as `+i))}function at(t,e,r){return r===void 0&&(r=!0),t.isValid?ve.create(M.create("en-US"),{allowZ:r,forceSimple:!0}).formatDateTimeFromString(t,e):null}function io(t,e){var r=e.suppressSeconds,i=r===void 0?!1:r,n=e.suppressMilliseconds,s=n===void 0?!1:n,o=e.includeOffset,a=e.includePrefix,l=a===void 0?!1:a,u=e.includeZone,c=u===void 0?!1:u,h=e.spaceZone,d=h===void 0?!1:h,m=e.format,p=m===void 0?"extended":m,y=p==="basic"?"HHmm":"HH:mm";(!i||t.second!==0||t.millisecond!==0)&&(y+=p==="basic"?"ss":":ss",(!s||t.millisecond!==0)&&(y+=".SSS")),(c||o)&&d&&(y+=" "),c?y+="z":o&&(y+=p==="basic"?"ZZZ":"ZZ");var b=at(t,y);return l&&(b="T"+b),b}var no={month:1,day:1,hour:0,minute:0,second:0,millisecond:0},Tc={weekNumber:1,weekday:1,hour:0,minute:0,second:0,millisecond:0},kc={ordinal:1,hour:0,minute:0,second:0,millisecond:0},so=["year","month","day","hour","minute","second","millisecond"],Ac=["weekYear","weekNumber","weekday","hour","minute","second","millisecond"],Oc=["year","ordinal","hour","minute","second","millisecond"];function oo(t){var e={year:"year",years:"year",month:"month",months:"month",day:"day",days:"day",hour:"hour",hours:"hour",minute:"minute",minutes:"minute",quarter:"quarter",quarters:"quarter",second:"second",seconds:"second",millisecond:"millisecond",milliseconds:"millisecond",weekday:"weekday",weekdays:"weekday",weeknumber:"weekNumber",weeksnumber:"weekNumber",weeknumbers:"weekNumber",weekyear:"weekYear",weekyears:"weekYear",ordinal:"ordinal"}[t.toLowerCase()];if(!e)throw new jn(t);return e}function ao(t,e){var r=Ie(e.zone,L.defaultZone),i=M.fromObject(e),n=L.now(),s,o;if(A(t.year))s=n;else{for(var a=Ce(so),l;!(l=a()).done;){var u=l.value;A(t[u])&&(t[u]=no[u])}var c=Ys(t)||Xs(t);if(c)return I.invalid(c);var h=r.offset(n),d=sr(t,h,r);s=d[0],o=d[1]}return new I({ts:s,zone:r,loc:i,o})}function lo(t,e,r){var i=A(r.round)?!0:r.round,n=function(h,d){h=Hr(h,i||r.calendary?0:2,!0);var m=e.loc.clone(r).relFormatter(r);return m.format(h,d)},s=function(h){return r.calendary?e.hasSame(t,h)?0:e.startOf(h).diff(t.startOf(h),h).get(h):e.diff(t,h).get(h)};if(r.unit)return n(s(r.unit),r.unit);for(var o=Ce(r.units),a;!(a=o()).done;){var l=a.value,u=s(l);if(Math.abs(u)>=1)return n(u,l)}return n(t>e?-0:0,r.units[r.units.length-1])}function uo(t){var e={},r;return t.length>0&&typeof t[t.length-1]=="object"?(e=t[t.length-1],r=Array.from(t).slice(0,t.length-1)):r=Array.from(t),[e,r]}var I=function(){function t(r){var i=r.zone||L.defaultZone,n=r.invalid||(Number.isNaN(r.ts)?new ee("invalid input"):null)||(i.isValid?null:nr(i));this.ts=A(r.ts)?L.now():r.ts;var s=null,o=null;if(!n){var a=r.old&&r.old.ts===this.ts&&r.old.zone.equals(i);if(a){var l=[r.old.c,r.old.o];s=l[0],o=l[1]}else{var u=i.offset(this.ts);s=to(this.ts,u),n=Number.isNaN(s.year)?new ee("invalid input"):null,s=n?null:s,o=n?null:u}}this._zone=i,this.loc=r.loc||M.create(),this.invalid=n,this.weekData=null,this.c=s,this.o=o,this.isLuxonDateTime=!0}t.now=function(){return new t({})},t.local=function(){var i=uo(arguments),n=i[0],s=i[1],o=s[0],a=s[1],l=s[2],u=s[3],c=s[4],h=s[5],d=s[6];return ao({year:o,month:a,day:l,hour:u,minute:c,second:h,millisecond:d},n)},t.utc=function(){var i=uo(arguments),n=i[0],s=i[1],o=s[0],a=s[1],l=s[2],u=s[3],c=s[4],h=s[5],d=s[6];return n.zone=Z.utcInstance,ao({year:o,month:a,day:l,hour:u,minute:c,second:h,millisecond:d},n)},t.fromJSDate=function(i,n){n===void 0&&(n={});var s=xl(i)?i.valueOf():NaN;if(Number.isNaN(s))return t.invalid("invalid input");var o=Ie(n.zone,L.defaultZone);return o.isValid?new t({ts:s,zone:o,loc:M.fromObject(n)}):t.invalid(nr(o))},t.fromMillis=function(i,n){if(n===void 0&&(n={}),_e(i))return i<-Qs||i>Qs?t.invalid("Timestamp out of range"):new t({ts:i,zone:Ie(n.zone,L.defaultZone),loc:M.fromObject(n)});throw new z("fromMillis requires a numerical input, but received a "+typeof i+" with value "+i)},t.fromSeconds=function(i,n){if(n===void 0&&(n={}),_e(i))return new t({ts:i*1e3,zone:Ie(n.zone,L.defaultZone),loc:M.fromObject(n)});throw new z("fromSeconds requires a numerical input")},t.fromObject=function(i,n){n===void 0&&(n={}),i=i||{};var s=Ie(n.zone,L.defaultZone);if(!s.isValid)return t.invalid(nr(s));var o=L.now(),a=s.offset(o),l=Xt(i,oo),u=!A(l.ordinal),c=!A(l.year),h=!A(l.month)||!A(l.day),d=c||h,m=l.weekYear||l.weekNumber,p=M.fromObject(n);if((d||u)&&m)throw new pt("Can't mix weekYear/weekNumber units with year/month/day or ordinals");if(h&&u)throw new pt("Can't mix ordinal dates with month/day");var y=m||l.weekday&&!d,b,f,S=to(o,a);y?(b=Ac,f=Tc,S=Qr(S)):u?(b=Oc,f=kc,S=ei(S)):(b=so,f=no);for(var ie=!1,de=Ce(b),qe;!(qe=de()).done;){var Re=qe.value,$e=l[Re];A($e)?ie?l[Re]=f[Re]:l[Re]=S[Re]:ie=!0}var br=y?Sc(l):u?Ec(l):Ys(l),P=br||Xs(l);if(P)return t.invalid(P);var We=y?Ks(l):u?Gs(l):l,ut=sr(We,a,s),ct=ut[0],wr=ut[1],De=new t({ts:ct,zone:s,o:wr,loc:p});return l.weekday&&d&&i.weekday!==De.weekday?t.invalid("mismatched weekday","you can't specify both a weekday of "+l.weekday+" and a date of "+De.toISO()):De},t.fromISO=function(i,n){n===void 0&&(n={});var s=Vu(i),o=s[0],a=s[1];return Tt(o,a,n,"ISO 8601",i)},t.fromRFC2822=function(i,n){n===void 0&&(n={});var s=Bu(i),o=s[0],a=s[1];return Tt(o,a,n,"RFC 2822",i)},t.fromHTTP=function(i,n){n===void 0&&(n={});var s=ju(i),o=s[0],a=s[1];return Tt(o,a,n,"HTTP",n)},t.fromFormat=function(i,n,s){if(s===void 0&&(s={}),A(i)||A(n))throw new z("fromFormat requires an input string and a format");var o=s,a=o.locale,l=a===void 0?null:a,u=o.numberingSystem,c=u===void 0?null:u,h=M.fromOpts({locale:l,numberingSystem:c,defaultToEN:!0}),d=wc(h,i,n),m=d[0],p=d[1],y=d[2];return y?t.invalid(y):Tt(m,p,s,"format "+n,i)},t.fromString=function(i,n,s){return s===void 0&&(s={}),t.fromFormat(i,n,s)},t.fromSQL=function(i,n){n===void 0&&(n={});var s=Ku(i),o=s[0],a=s[1];return Tt(o,a,n,"SQL",i)},t.invalid=function(i,n){if(n===void 0&&(n=null),!i)throw new z("need to specify a reason the DateTime is invalid");var s=i instanceof ee?i:new ee(i,n);if(L.throwOnInvalid)throw new Ll(s);return new t({invalid:s})},t.isDateTime=function(i){return i&&i.isLuxonDateTime||!1};var e=t.prototype;return e.get=function(i){return this[i]},e.resolvedLocaleOptions=function(i){i===void 0&&(i={});var n=ve.create(this.loc.clone(i),i).resolvedOptions(this),s=n.locale,o=n.numberingSystem,a=n.calendar;return{locale:s,numberingSystem:o,outputCalendar:a}},e.toUTC=function(i,n){return i===void 0&&(i=0),n===void 0&&(n={}),this.setZone(Z.instance(i),n)},e.toLocal=function(){return this.setZone(L.defaultZone)},e.setZone=function(i,n){var s=n===void 0?{}:n,o=s.keepLocalTime,a=o===void 0?!1:o,l=s.keepCalendarTime,u=l===void 0?!1:l;if(i=Ie(i,L.defaultZone),i.equals(this.zone))return this;if(i.isValid){var c=this.ts;if(a||u){var h=i.offset(this.ts),d=this.toObject(),m=sr(d,h,i);c=m[0]}return Et(this,{ts:c,zone:i})}else return t.invalid(nr(i))},e.reconfigure=function(i){var n=i===void 0?{}:i,s=n.locale,o=n.numberingSystem,a=n.outputCalendar,l=this.loc.clone({locale:s,numberingSystem:o,outputCalendar:a});return Et(this,{loc:l})},e.setLocale=function(i){return this.reconfigure({locale:i})},e.set=function(i){if(!this.isValid)return this;var n=Xt(i,oo),s=!A(n.weekYear)||!A(n.weekNumber)||!A(n.weekday),o=!A(n.ordinal),a=!A(n.year),l=!A(n.month)||!A(n.day),u=a||l,c=n.weekYear||n.weekNumber;if((u||o)&&c)throw new pt("Can't mix weekYear/weekNumber units with year/month/day or ordinals");if(l&&o)throw new pt("Can't mix ordinal dates with month/day");var h;s?h=Ks(k({},Qr(this.c),n)):A(n.ordinal)?(h=k({},this.toObject(),n),A(n.day)&&(h.day=Math.min(Kt(h.year,h.month),h.day))):h=Gs(k({},ei(this.c),n));var d=sr(h,this.o,this.zone),m=d[0],p=d[1];return Et(this,{ts:m,o:p})},e.plus=function(i){if(!this.isValid)return this;var n=Be(i);return Et(this,ro(this,n))},e.minus=function(i){if(!this.isValid)return this;var n=Be(i).negate();return Et(this,ro(this,n))},e.startOf=function(i){if(!this.isValid)return this;var n={},s=N.normalizeUnit(i);switch(s){case"years":n.month=1;case"quarters":case"months":n.day=1;case"weeks":case"days":n.hour=0;case"hours":n.minute=0;case"minutes":n.second=0;case"seconds":n.millisecond=0;break}if(s==="weeks"&&(n.weekday=1),s==="quarters"){var o=Math.ceil(this.month/3);n.month=(o-1)*3+1}return this.set(n)},e.endOf=function(i){var n;return this.isValid?this.plus((n={},n[i]=1,n)).startOf(i).minus(1):this},e.toFormat=function(i,n){return n===void 0&&(n={}),this.isValid?ve.create(this.loc.redefaultToEN(n)).formatDateTimeFromString(this,i):ti},e.toLocaleString=function(i,n){return i===void 0&&(i=_r),n===void 0&&(n={}),this.isValid?ve.create(this.loc.clone(n),i).formatDateTime(this):ti},e.toLocaleParts=function(i){return i===void 0&&(i={}),this.isValid?ve.create(this.loc.clone(i),i).formatDateTimeParts(this):[]},e.toISO=function(i){return i===void 0&&(i={}),this.isValid?this.toISODate(i)+"T"+this.toISOTime(i):null},e.toISODate=function(i){var n=i===void 0?{}:i,s=n.format,o=s===void 0?"extended":s,a=o==="basic"?"yyyyMMdd":"yyyy-MM-dd";return this.year>9999&&(a="+"+a),at(this,a)},e.toISOWeekDate=function(){return at(this,"kkkk-'W'WW-c")},e.toISOTime=function(i){var n=i===void 0?{}:i,s=n.suppressMilliseconds,o=s===void 0?!1:s,a=n.suppressSeconds,l=a===void 0?!1:a,u=n.includeOffset,c=u===void 0?!0:u,h=n.includePrefix,d=h===void 0?!1:h,m=n.format,p=m===void 0?"extended":m;return io(this,{suppressSeconds:l,suppressMilliseconds:o,includeOffset:c,includePrefix:d,format:p})},e.toRFC2822=function(){return at(this,"EEE, dd LLL yyyy HH:mm:ss ZZZ",!1)},e.toHTTP=function(){return at(this.toUTC(),"EEE, dd LLL yyyy HH:mm:ss 'GMT'")},e.toSQLDate=function(){return at(this,"yyyy-MM-dd")},e.toSQLTime=function(i){var n=i===void 0?{}:i,s=n.includeOffset,o=s===void 0?!0:s,a=n.includeZone,l=a===void 0?!1:a;return io(this,{includeOffset:o,includeZone:l,spaceZone:!0})},e.toSQL=function(i){return i===void 0&&(i={}),this.isValid?this.toSQLDate()+" "+this.toSQLTime(i):null},e.toString=function(){return this.isValid?this.toISO():ti},e.valueOf=function(){return this.toMillis()},e.toMillis=function(){return this.isValid?this.ts:NaN},e.toSeconds=function(){return this.isValid?this.ts/1e3:NaN},e.toJSON=function(){return this.toISO()},e.toBSON=function(){return this.toJSDate()},e.toObject=function(i){if(i===void 0&&(i={}),!this.isValid)return{};var n=k({},this.c);return i.includeConfig&&(n.outputCalendar=this.outputCalendar,n.numberingSystem=this.loc.numberingSystem,n.locale=this.loc.locale),n},e.toJSDate=function(){return new Date(this.isValid?this.ts:NaN)},e.diff=function(i,n,s){if(n===void 0&&(n="milliseconds"),s===void 0&&(s={}),!this.isValid||!i.isValid)return N.invalid("created by diffing an invalid DateTime");var o=k({locale:this.locale,numberingSystem:this.numberingSystem},s),a=Nl(n).map(N.normalizeUnit),l=i.valueOf()>this.valueOf(),u=l?this:i,c=l?i:this,h=nc(u,c,a,o);return l?h.negate():h},e.diffNow=function(i,n){return i===void 0&&(i="milliseconds"),n===void 0&&(n={}),this.diff(t.now(),i,n)},e.until=function(i){return this.isValid?wt.fromDateTimes(this,i):this},e.hasSame=function(i,n){if(!this.isValid)return!1;var s=i.valueOf(),o=this.setZone(i.zone,{keepLocalTime:!0});return o.startOf(n)<=s&&s<=o.endOf(n)},e.equals=function(i){return this.isValid&&i.isValid&&this.valueOf()===i.valueOf()&&this.zone.equals(i.zone)&&this.loc.equals(i.loc)},e.toRelative=function(i){if(i===void 0&&(i={}),!this.isValid)return null;var n=i.base||t.fromObject({},{zone:this.zone}),s=i.padding?this<n?-i.padding:i.padding:0,o=["years","months","days","hours","minutes","seconds"],a=i.unit;return Array.isArray(i.unit)&&(o=i.unit,a=void 0),lo(n,this.plus(s),k({},i,{numeric:"always",units:o,unit:a}))},e.toRelativeCalendar=function(i){return i===void 0&&(i={}),this.isValid?lo(i.base||t.fromObject({},{zone:this.zone}),this,k({},i,{numeric:"auto",units:["years","months","days"],calendary:!0})):null},t.min=function(){for(var i=arguments.length,n=new Array(i),s=0;s<i;s++)n[s]=arguments[s];if(!n.every(t.isDateTime))throw new z("min requires all arguments be DateTimes");return ls(n,function(o){return o.valueOf()},Math.min)},t.max=function(){for(var i=arguments.length,n=new Array(i),s=0;s<i;s++)n[s]=arguments[s];if(!n.every(t.isDateTime))throw new z("max requires all arguments be DateTimes");return ls(n,function(o){return o.valueOf()},Math.max)},t.fromFormatExplain=function(i,n,s){s===void 0&&(s={});var o=s,a=o.locale,l=a===void 0?null:a,u=o.numberingSystem,c=u===void 0?null:u,h=M.fromOpts({locale:l,numberingSystem:c,defaultToEN:!0});return qs(h,i,n)},t.fromStringExplain=function(i,n,s){return s===void 0&&(s={}),t.fromFormatExplain(i,n,s)},oe(t,[{key:"isValid",get:function(){return this.invalid===null}},{key:"invalidReason",get:function(){return this.invalid?this.invalid.reason:null}},{key:"invalidExplanation",get:function(){return this.invalid?this.invalid.explanation:null}},{key:"locale",get:function(){return this.isValid?this.loc.locale:null}},{key:"numberingSystem",get:function(){return this.isValid?this.loc.numberingSystem:null}},{key:"outputCalendar",get:function(){return this.isValid?this.loc.outputCalendar:null}},{key:"zone",get:function(){return this._zone}},{key:"zoneName",get:function(){return this.isValid?this.zone.name:null}},{key:"year",get:function(){return this.isValid?this.c.year:NaN}},{key:"quarter",get:function(){return this.isValid?Math.ceil(this.c.month/3):NaN}},{key:"month",get:function(){return this.isValid?this.c.month:NaN}},{key:"day",get:function(){return this.isValid?this.c.day:NaN}},{key:"hour",get:function(){return this.isValid?this.c.hour:NaN}},{key:"minute",get:function(){return this.isValid?this.c.minute:NaN}},{key:"second",get:function(){return this.isValid?this.c.second:NaN}},{key:"millisecond",get:function(){return this.isValid?this.c.millisecond:NaN}},{key:"weekYear",get:function(){return this.isValid?ri(this).weekYear:NaN}},{key:"weekNumber",get:function(){return this.isValid?ri(this).weekNumber:NaN}},{key:"weekday",get:function(){return this.isValid?ri(this).weekday:NaN}},{key:"ordinal",get:function(){return this.isValid?ei(this.c).ordinal:NaN}},{key:"monthShort",get:function(){return this.isValid?St.months("short",{locObj:this.loc})[this.month-1]:null}},{key:"monthLong",get:function(){return this.isValid?St.months("long",{locObj:this.loc})[this.month-1]:null}},{key:"weekdayShort",get:function(){return this.isValid?St.weekdays("short",{locObj:this.loc})[this.weekday-1]:null}},{key:"weekdayLong",get:function(){return this.isValid?St.weekdays("long",{locObj:this.loc})[this.weekday-1]:null}},{key:"offset",get:function(){return this.isValid?+this.o:NaN}},{key:"offsetNameShort",get:function(){return this.isValid?this.zone.offsetName(this.ts,{format:"short",locale:this.locale}):null}},{key:"offsetNameLong",get:function(){return this.isValid?this.zone.offsetName(this.ts,{format:"long",locale:this.locale}):null}},{key:"isOffsetFixed",get:function(){return this.isValid?this.zone.isUniversal:null}},{key:"isInDST",get:function(){return this.isOffsetFixed?!1:this.offset>this.set({month:1}).offset||this.offset>this.set({month:5}).offset}},{key:"isInLeapYear",get:function(){return gt(this.year)}},{key:"daysInMonth",get:function(){return Kt(this.year,this.month)}},{key:"daysInYear",get:function(){return this.isValid?vt(this.year):NaN}},{key:"weeksInWeekYear",get:function(){return this.isValid?Gt(this.weekYear):NaN}}],[{key:"DATE_SHORT",get:function(){return _r}},{key:"DATE_MED",get:function(){return Un}},{key:"DATE_MED_WITH_WEEKDAY",get:function(){return Ml}},{key:"DATE_FULL",get:function(){return qn}},{key:"DATE_HUGE",get:function(){return $n}},{key:"TIME_SIMPLE",get:function(){return Wn}},{key:"TIME_WITH_SECONDS",get:function(){return zn}},{key:"TIME_WITH_SHORT_OFFSET",get:function(){return Zn}},{key:"TIME_WITH_LONG_OFFSET",get:function(){return Jn}},{key:"TIME_24_SIMPLE",get:function(){return Kn}},{key:"TIME_24_WITH_SECONDS",get:function(){return Gn}},{key:"TIME_24_WITH_SHORT_OFFSET",get:function(){return Yn}},{key:"TIME_24_WITH_LONG_OFFSET",get:function(){return Xn}},{key:"DATETIME_SHORT",get:function(){return Qn}},{key:"DATETIME_SHORT_WITH_SECONDS",get:function(){return es}},{key:"DATETIME_MED",get:function(){return ts}},{key:"DATETIME_MED_WITH_SECONDS",get:function(){return rs}},{key:"DATETIME_MED_WITH_WEEKDAY",get:function(){return Rl}},{key:"DATETIME_FULL",get:function(){return is}},{key:"DATETIME_FULL_WITH_SECONDS",get:function(){return ns}},{key:"DATETIME_HUGE",get:function(){return ss}},{key:"DATETIME_HUGE_WITH_SECONDS",get:function(){return os}}]),t}();function kt(t){if(I.isDateTime(t))return t;if(t&&t.valueOf&&_e(t.valueOf()))return I.fromJSDate(t);if(t&&typeof t=="object")return I.fromObject(t);throw new z("Unknown datetime argument: "+t+", of type "+typeof t)}var Cc="2.0.2";U.DateTime=I;U.Duration=N;U.FixedOffsetZone=Z;U.IANAZone=ae;U.Info=St;U.Interval=wt;U.InvalidZone=qr;U.Settings=L;U.SystemZone=ws;U.VERSION=Cc;U.Zone=et});(function(){if(window.Reflect===void 0||window.customElements===void 0||window.customElements.polyfillWrapFlushCallback)return;let t=HTMLElement,e={HTMLElement:function(){return Reflect.construct(t,[],this.constructor)}};window.HTMLElement=e.HTMLElement,HTMLElement.prototype=t.prototype,HTMLElement.prototype.constructor=HTMLElement,Object.setPrototypeOf(HTMLElement,t)})();var Oi=new WeakMap;function ta(t){let e=t instanceof Element?t:t instanceof Node?t.parentElement:null,r=e?e.closest("input, button"):null;return(r==null?void 0:r.type)=="submit"?r:null}function ra(t){let e=ta(t.target);e&&e.form&&Oi.set(e.form,e)}(function(){"SubmitEvent"in window||(addEventListener("click",ra,!0),Object.defineProperty(Event.prototype,"submitter",{get(){if(this.type=="submit"&&this.target instanceof HTMLFormElement)return Oi.get(this.target)}}))})();var Te;(function(t){t.eager="eager",t.lazy="lazy"})(Te||(Te={}));var fe=class extends HTMLElement{constructor(){super();this.loaded=Promise.resolve(),this.delegate=new fe.delegateConstructor(this)}static get observedAttributes(){return["disabled","loading","src"]}connectedCallback(){this.delegate.connect()}disconnectedCallback(){this.delegate.disconnect()}reload(){let{src:e}=this;this.src=null,this.src=e}attributeChangedCallback(e){e=="loading"?this.delegate.loadingStyleChanged():e=="src"?this.delegate.sourceURLChanged():this.delegate.disabledChanged()}get src(){return this.getAttribute("src")}set src(e){e?this.setAttribute("src",e):this.removeAttribute("src")}get loading(){return ia(this.getAttribute("loading")||"")}set loading(e){e?this.setAttribute("loading",e):this.removeAttribute("loading")}get disabled(){return this.hasAttribute("disabled")}set disabled(e){e?this.setAttribute("disabled",""):this.removeAttribute("disabled")}get autoscroll(){return this.hasAttribute("autoscroll")}set autoscroll(e){e?this.setAttribute("autoscroll",""):this.removeAttribute("autoscroll")}get complete(){return!this.delegate.isLoading}get isActive(){return this.ownerDocument===document&&!this.isPreview}get isPreview(){var e,r;return(r=(e=this.ownerDocument)===null||e===void 0?void 0:e.documentElement)===null||r===void 0?void 0:r.hasAttribute("data-turbo-preview")}};function ia(t){switch(t.toLowerCase()){case"lazy":return Te.lazy;default:return Te.eager}}function ne(t){return new URL(t.toString(),document.baseURI)}function xe(t){let e;if(t.hash)return t.hash.slice(1);if(e=t.href.match(/#(.*)$/))return e[1]}function na(t){return(ua(t).match(/\.[^.]*$/)||[])[0]||""}function sa(t){return!!na(t).match(/^(?:|\.(?:htm|html|xhtml))$/)}function oa(t,e){let r=ca(e);return t.href===ne(r).href||t.href.startsWith(r)}function Er(t){let e=xe(t);return e!=null?t.href.slice(0,-(e.length+1)):t.href}function Vt(t){return Er(t)}function aa(t,e){return ne(t).href==ne(e).href}function la(t){return t.pathname.split("/").slice(1)}function ua(t){return la(t).slice(-1)[0]}function ca(t){return ha(t.origin+t.pathname)}function ha(t){return t.endsWith("/")?t:t+"/"}var Tr=class{constructor(e){this.response=e}get succeeded(){return this.response.ok}get failed(){return!this.succeeded}get clientError(){return this.statusCode>=400&&this.statusCode<=499}get serverError(){return this.statusCode>=500&&this.statusCode<=599}get redirected(){return this.response.redirected}get location(){return ne(this.response.url)}get isHTML(){return this.contentType&&this.contentType.match(/^(?:text\/([^\s;,]+\b)?html|application\/xhtml\+xml)\b/)}get statusCode(){return this.response.status}get contentType(){return this.header("Content-Type")}get responseText(){return this.response.text()}get responseHTML(){return this.isHTML?this.response.text():Promise.resolve(void 0)}header(e){return this.response.headers.get(e)}};function _(t,{target:e,cancelable:r,detail:i}={}){let n=new CustomEvent(t,{cancelable:r,bubbles:!0,detail:i});return(e||document.documentElement).dispatchEvent(n),n}function Bt(){return new Promise(t=>requestAnimationFrame(()=>t()))}function da(){return new Promise(t=>setTimeout(()=>t(),0))}function fa(){return Promise.resolve()}function Ci(t=""){return new DOMParser().parseFromString(t,"text/html")}function Li(t,...e){let r=ma(t,e).replace(/^\n/,"").split(` +`),i=r[0].match(/^\s+/),n=i?i[0].length:0;return r.map(s=>s.slice(n)).join(` +`)}function ma(t,e){return t.reduce((r,i,n)=>{let s=e[n]==null?"":e[n];return r+i+s},"")}function ht(){return Array.apply(null,{length:36}).map((t,e)=>e==8||e==13||e==18||e==23?"-":e==14?"4":e==19?(Math.floor(Math.random()*4)+8).toString(16):Math.floor(Math.random()*15).toString(16)).join("")}var F;(function(t){t[t.get=0]="get",t[t.post=1]="post",t[t.put=2]="put",t[t.patch=3]="patch",t[t.delete=4]="delete"})(F||(F={}));function pa(t){switch(t.toLowerCase()){case"get":return F.get;case"post":return F.post;case"put":return F.put;case"patch":return F.patch;case"delete":return F.delete}}var jt=class{constructor(e,r,i,n=new URLSearchParams){this.abortController=new AbortController,this.resolveRequestPromise=s=>{},this.delegate=e,this.method=r,this.headers=this.defaultHeaders,this.isIdempotent?this.url=ga(i,[...n.entries()]):(this.body=n,this.url=i)}get location(){return this.url}get params(){return this.url.searchParams}get entries(){return this.body?Array.from(this.body.entries()):[]}cancel(){this.abortController.abort()}async perform(){var e,r;let{fetchOptions:i}=this;(r=(e=this.delegate).prepareHeadersForRequest)===null||r===void 0||r.call(e,this.headers,this),await this.allowRequestToBeIntercepted(i);try{this.delegate.requestStarted(this);let n=await fetch(this.url.href,i);return await this.receive(n)}catch(n){if(n.name!=="AbortError")throw this.delegate.requestErrored(this,n),n}finally{this.delegate.requestFinished(this)}}async receive(e){let r=new Tr(e);return _("turbo:before-fetch-response",{cancelable:!0,detail:{fetchResponse:r}}).defaultPrevented?this.delegate.requestPreventedHandlingResponse(this,r):r.succeeded?this.delegate.requestSucceededWithResponse(this,r):this.delegate.requestFailedWithResponse(this,r),r}get fetchOptions(){var e;return{method:F[this.method].toUpperCase(),credentials:"same-origin",headers:this.headers,redirect:"follow",body:this.body,signal:this.abortSignal,referrer:(e=this.delegate.referrer)===null||e===void 0?void 0:e.href}}get defaultHeaders(){return{Accept:"text/html, application/xhtml+xml"}}get isIdempotent(){return this.method==F.get}get abortSignal(){return this.abortController.signal}async allowRequestToBeIntercepted(e){let r=new Promise(n=>this.resolveRequestPromise=n);_("turbo:before-fetch-request",{cancelable:!0,detail:{fetchOptions:e,url:this.url.href,resume:this.resolveRequestPromise}}).defaultPrevented&&await r}};function ga(t,e){let r=new URLSearchParams(t.search);for(let[i,n]of e)n instanceof File||(r.has(i)?(r.delete(i),t.searchParams.set(i,n)):t.searchParams.append(i,n));return t}var Ii=class{constructor(e,r){this.started=!1,this.intersect=i=>{let n=i.slice(-1)[0];(n==null?void 0:n.isIntersecting)&&this.delegate.elementAppearedInViewport(this.element)},this.delegate=e,this.element=r,this.intersectionObserver=new IntersectionObserver(this.intersect)}start(){this.started||(this.started=!0,this.intersectionObserver.observe(this.element))}stop(){this.started&&(this.started=!1,this.intersectionObserver.unobserve(this.element))}},Ze=class{constructor(e){this.templateElement=document.createElement("template"),this.templateElement.innerHTML=e}static wrap(e){return typeof e=="string"?new this(e):e}get fragment(){let e=document.createDocumentFragment();for(let r of this.foreignElements)e.appendChild(document.importNode(r,!0));return e}get foreignElements(){return this.templateChildren.reduce((e,r)=>r.tagName.toLowerCase()=="turbo-stream"?[...e,r]:e,[])}get templateChildren(){return Array.from(this.templateElement.content.children)}};Ze.contentType="text/vnd.turbo-stream.html";var ke;(function(t){t[t.initialized=0]="initialized",t[t.requesting=1]="requesting",t[t.waiting=2]="waiting",t[t.receiving=3]="receiving",t[t.stopping=4]="stopping",t[t.stopped=5]="stopped"})(ke||(ke={}));var Ae;(function(t){t.urlEncoded="application/x-www-form-urlencoded",t.multipart="multipart/form-data",t.plain="text/plain"})(Ae||(Ae={}));function va(t){switch(t.toLowerCase()){case Ae.multipart:return Ae.multipart;case Ae.plain:return Ae.plain;default:return Ae.urlEncoded}}var kr=class{constructor(e,r,i,n=!1){this.state=ke.initialized,this.delegate=e,this.formElement=r,this.submitter=i,this.formData=ya(r,i),this.fetchRequest=new jt(this,this.method,this.location,this.body),this.mustRedirect=n}get method(){var e;let r=((e=this.submitter)===null||e===void 0?void 0:e.getAttribute("formmethod"))||this.formElement.getAttribute("method")||"";return pa(r.toLowerCase())||F.get}get action(){var e;let r=typeof this.formElement.action=="string"?this.formElement.action:null;return((e=this.submitter)===null||e===void 0?void 0:e.getAttribute("formaction"))||this.formElement.getAttribute("action")||r||""}get location(){return ne(this.action)}get body(){return this.enctype==Ae.urlEncoded||this.method==F.get?new URLSearchParams(this.stringFormData):this.formData}get enctype(){var e;return va(((e=this.submitter)===null||e===void 0?void 0:e.getAttribute("formenctype"))||this.formElement.enctype)}get isIdempotent(){return this.fetchRequest.isIdempotent}get stringFormData(){return[...this.formData].reduce((e,[r,i])=>e.concat(typeof i=="string"?[[r,i]]:[]),[])}async start(){let{initialized:e,requesting:r}=ke;if(this.state==e)return this.state=r,this.fetchRequest.perform()}stop(){let{stopping:e,stopped:r}=ke;if(this.state!=e&&this.state!=r)return this.state=e,this.fetchRequest.cancel(),!0}prepareHeadersForRequest(e,r){if(!r.isIdempotent){let i=ba(Pi("csrf-param"))||Pi("csrf-token");i&&(e["X-CSRF-Token"]=i),e.Accept=[Ze.contentType,e.Accept].join(", ")}}requestStarted(e){this.state=ke.waiting,_("turbo:submit-start",{target:this.formElement,detail:{formSubmission:this}}),this.delegate.formSubmissionStarted(this)}requestPreventedHandlingResponse(e,r){this.result={success:r.succeeded,fetchResponse:r}}requestSucceededWithResponse(e,r){if(r.clientError||r.serverError)this.delegate.formSubmissionFailedWithResponse(this,r);else if(this.requestMustRedirect(e)&&wa(r)){let i=new Error("Form responses must redirect to another location");this.delegate.formSubmissionErrored(this,i)}else this.state=ke.receiving,this.result={success:!0,fetchResponse:r},this.delegate.formSubmissionSucceededWithResponse(this,r)}requestFailedWithResponse(e,r){this.result={success:!1,fetchResponse:r},this.delegate.formSubmissionFailedWithResponse(this,r)}requestErrored(e,r){this.result={success:!1,error:r},this.delegate.formSubmissionErrored(this,r)}requestFinished(e){this.state=ke.stopped,_("turbo:submit-end",{target:this.formElement,detail:Object.assign({formSubmission:this},this.result)}),this.delegate.formSubmissionFinished(this)}requestMustRedirect(e){return!e.isIdempotent&&this.mustRedirect}};function ya(t,e){let r=new FormData(t),i=e==null?void 0:e.getAttribute("name"),n=e==null?void 0:e.getAttribute("value");return i&&n!=null&&r.get(i)!=n&&r.append(i,n),r}function ba(t){if(t!=null){let r=(document.cookie?document.cookie.split("; "):[]).find(i=>i.startsWith(t));if(r){let i=r.split("=").slice(1).join("=");return i?decodeURIComponent(i):void 0}}}function Pi(t){let e=document.querySelector(`meta[name="${t}"]`);return e&&e.content}function wa(t){return t.statusCode==200&&!t.redirected}var dt=class{constructor(e){this.element=e}get children(){return[...this.element.children]}hasAnchor(e){return this.getElementForAnchor(e)!=null}getElementForAnchor(e){return e?this.element.querySelector(`[id='${e}'], a[name='${e}']`):null}get isConnected(){return this.element.isConnected}get firstAutofocusableElement(){return this.element.querySelector("[autofocus]")}get permanentElements(){return[...this.element.querySelectorAll("[id][data-turbo-permanent]")]}getPermanentElementById(e){return this.element.querySelector(`#${e}[data-turbo-permanent]`)}getPermanentElementMapForSnapshot(e){let r={};for(let i of this.permanentElements){let{id:n}=i,s=e.getPermanentElementById(n);s&&(r[n]=[i,s])}return r}},Ar=class{constructor(e,r){this.submitBubbled=i=>{if(i.target instanceof HTMLFormElement){let n=i.target,s=i.submitter||void 0;this.delegate.shouldInterceptFormSubmission(n,s)&&(i.preventDefault(),i.stopImmediatePropagation(),this.delegate.formSubmissionIntercepted(n,s))}},this.delegate=e,this.element=r}start(){this.element.addEventListener("submit",this.submitBubbled)}stop(){this.element.removeEventListener("submit",this.submitBubbled)}},Or=class{constructor(e,r){this.resolveRenderPromise=i=>{},this.resolveInterceptionPromise=i=>{},this.delegate=e,this.element=r}scrollToAnchor(e){let r=this.snapshot.getElementForAnchor(e);r?(this.scrollToElement(r),this.focusElement(r)):this.scrollToPosition({x:0,y:0})}scrollToAnchorFromLocation(e){this.scrollToAnchor(xe(e))}scrollToElement(e){e.scrollIntoView()}focusElement(e){e instanceof HTMLElement&&(e.hasAttribute("tabindex")?e.focus():(e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")))}scrollToPosition({x:e,y:r}){this.scrollRoot.scrollTo(e,r)}scrollToTop(){this.scrollToPosition({x:0,y:0})}get scrollRoot(){return window}async render(e){let{isPreview:r,shouldRender:i,newSnapshot:n}=e;if(i)try{this.renderPromise=new Promise(a=>this.resolveRenderPromise=a),this.renderer=e,this.prepareToRenderSnapshot(e);let s=new Promise(a=>this.resolveInterceptionPromise=a);this.delegate.allowsImmediateRender(n,this.resolveInterceptionPromise)||await s,await this.renderSnapshot(e),this.delegate.viewRenderedSnapshot(n,r),this.finishRenderingSnapshot(e)}finally{delete this.renderer,this.resolveRenderPromise(void 0),delete this.renderPromise}else this.invalidate()}invalidate(){this.delegate.viewInvalidated()}prepareToRenderSnapshot(e){this.markAsPreview(e.isPreview),e.prepareToRender()}markAsPreview(e){e?this.element.setAttribute("data-turbo-preview",""):this.element.removeAttribute("data-turbo-preview")}async renderSnapshot(e){await e.render()}finishRenderingSnapshot(e){e.finishRendering()}},Mi=class extends Or{invalidate(){this.element.innerHTML=""}get snapshot(){return new dt(this.element)}},Cr=class{constructor(e,r){this.clickBubbled=i=>{this.respondsToEventTarget(i.target)?this.clickEvent=i:delete this.clickEvent},this.linkClicked=i=>{this.clickEvent&&this.respondsToEventTarget(i.target)&&i.target instanceof Element&&this.delegate.shouldInterceptLinkClick(i.target,i.detail.url)&&(this.clickEvent.preventDefault(),i.preventDefault(),this.delegate.linkClickIntercepted(i.target,i.detail.url)),delete this.clickEvent},this.willVisit=()=>{delete this.clickEvent},this.delegate=e,this.element=r}start(){this.element.addEventListener("click",this.clickBubbled),document.addEventListener("turbo:click",this.linkClicked),document.addEventListener("turbo:before-visit",this.willVisit)}stop(){this.element.removeEventListener("click",this.clickBubbled),document.removeEventListener("turbo:click",this.linkClicked),document.removeEventListener("turbo:before-visit",this.willVisit)}respondsToEventTarget(e){let r=e instanceof Element?e:e instanceof Node?e.parentElement:null;return r&&r.closest("turbo-frame, html")==this.element}},Ri=class{constructor(e){this.permanentElementMap=e}static preservingPermanentElements(e,r){let i=new this(e);i.enter(),r(),i.leave()}enter(){for(let e in this.permanentElementMap){let[,r]=this.permanentElementMap[e];this.replaceNewPermanentElementWithPlaceholder(r)}}leave(){for(let e in this.permanentElementMap){let[r]=this.permanentElementMap[e];this.replaceCurrentPermanentElementWithClone(r),this.replacePlaceholderWithPermanentElement(r)}}replaceNewPermanentElementWithPlaceholder(e){let r=Sa(e);e.replaceWith(r)}replaceCurrentPermanentElementWithClone(e){let r=e.cloneNode(!0);e.replaceWith(r)}replacePlaceholderWithPermanentElement(e){let r=this.getPlaceholderById(e.id);r==null||r.replaceWith(e)}getPlaceholderById(e){return this.placeholders.find(r=>r.content==e)}get placeholders(){return[...document.querySelectorAll("meta[name=turbo-permanent-placeholder][content]")]}};function Sa(t){let e=document.createElement("meta");return e.setAttribute("name","turbo-permanent-placeholder"),e.setAttribute("content",t.id),e}var Ut=class{constructor(e,r,i){this.currentSnapshot=e,this.newSnapshot=r,this.isPreview=i,this.promise=new Promise((n,s)=>this.resolvingFunctions={resolve:n,reject:s})}get shouldRender(){return!0}prepareToRender(){}finishRendering(){this.resolvingFunctions&&(this.resolvingFunctions.resolve(),delete this.resolvingFunctions)}createScriptElement(e){if(e.getAttribute("data-turbo-eval")=="false")return e;{let r=document.createElement("script");return this.cspNonce&&(r.nonce=this.cspNonce),r.textContent=e.textContent,r.async=!1,Ea(r,e),r}}preservingPermanentElements(e){Ri.preservingPermanentElements(this.permanentElementMap,e)}focusFirstAutofocusableElement(){let e=this.connectedSnapshot.firstAutofocusableElement;Ta(e)&&e.focus()}get connectedSnapshot(){return this.newSnapshot.isConnected?this.newSnapshot:this.currentSnapshot}get currentElement(){return this.currentSnapshot.element}get newElement(){return this.newSnapshot.element}get permanentElementMap(){return this.currentSnapshot.getPermanentElementMapForSnapshot(this.newSnapshot)}get cspNonce(){var e;return(e=document.head.querySelector('meta[name="csp-nonce"]'))===null||e===void 0?void 0:e.getAttribute("content")}};function Ea(t,e){for(let{name:r,value:i}of[...e.attributes])t.setAttribute(r,i)}function Ta(t){return t&&typeof t.focus=="function"}var Di=class extends Ut{get shouldRender(){return!0}async render(){await Bt(),this.preservingPermanentElements(()=>{this.loadFrameElement()}),this.scrollFrameIntoView(),await Bt(),this.focusFirstAutofocusableElement(),await Bt(),this.activateScriptElements()}loadFrameElement(){var e;let r=document.createRange();r.selectNodeContents(this.currentElement),r.deleteContents();let i=this.newElement,n=(e=i.ownerDocument)===null||e===void 0?void 0:e.createRange();n&&(n.selectNodeContents(i),this.currentElement.appendChild(n.extractContents()))}scrollFrameIntoView(){if(this.currentElement.autoscroll||this.newElement.autoscroll){let e=this.currentElement.firstElementChild,r=ka(this.currentElement.getAttribute("data-autoscroll-block"),"end");if(e)return e.scrollIntoView({block:r}),!0}return!1}activateScriptElements(){for(let e of this.newScriptElements){let r=this.createScriptElement(e);e.replaceWith(r)}}get newScriptElements(){return this.currentElement.querySelectorAll("script")}};function ka(t,e){return t=="end"||t=="start"||t=="center"||t=="nearest"?t:e}var se=class{constructor(){this.hiding=!1,this.value=0,this.visible=!1,this.trickle=()=>{this.setValue(this.value+Math.random()/100)},this.stylesheetElement=this.createStylesheetElement(),this.progressElement=this.createProgressElement(),this.installStylesheetElement(),this.setValue(0)}static get defaultCSS(){return Li` .turbo-progress-bar { position: fixed; display: block; @@ -10,11 +11,11 @@ background: #0076ff; z-index: 9999; transition: - width ${g.animationDuration}ms ease-out, - opacity ${g.animationDuration/2}ms ${g.animationDuration/2}ms ease-in; + width ${se.animationDuration}ms ease-out, + opacity ${se.animationDuration/2}ms ${se.animationDuration/2}ms ease-in; transform: translate3d(0, 0, 0); } - `}show(){this.visible||(this.visible=!0,this.installProgressElement(),this.startTrickling())}hide(){this.visible&&!this.hiding&&(this.hiding=!0,this.fadeProgressElement(()=>{this.uninstallProgressElement(),this.stopTrickling(),this.visible=!1,this.hiding=!1}))}setValue(e){this.value=e,this.refresh()}installStylesheetElement(){document.head.insertBefore(this.stylesheetElement,document.head.firstChild)}installProgressElement(){this.progressElement.style.width="0",this.progressElement.style.opacity="1",document.documentElement.insertBefore(this.progressElement,document.body),this.refresh()}fadeProgressElement(e){this.progressElement.style.opacity="0",setTimeout(e,g.animationDuration*1.5)}uninstallProgressElement(){this.progressElement.parentNode&&document.documentElement.removeChild(this.progressElement)}startTrickling(){this.trickleInterval||(this.trickleInterval=window.setInterval(this.trickle,g.animationDuration))}stopTrickling(){window.clearInterval(this.trickleInterval),delete this.trickleInterval}refresh(){requestAnimationFrame(()=>{this.progressElement.style.width=`${10+this.value*90}%`})}createStylesheetElement(){let e=document.createElement("style");return e.type="text/css",e.textContent=g.defaultCSS,e}createProgressElement(){let e=document.createElement("div");return e.className="turbo-progress-bar",e}};g.animationDuration=300;var ae=class extends M{constructor(){super(...arguments);this.detailsByOuterHTML=this.children.filter(e=>!jt(e)).reduce((e,t)=>{let{outerHTML:n}=t,i=n in e?e[n]:{type:Nt(t),tracked:qt(t),elements:[]};return Object.assign(Object.assign({},e),{[n]:Object.assign(Object.assign({},i),{elements:[...i.elements,t]})})},{})}get trackedElementSignature(){return Object.keys(this.detailsByOuterHTML).filter(e=>this.detailsByOuterHTML[e].tracked).join("")}getScriptElementsNotInSnapshot(e){return this.getElementsMatchingTypeNotInSnapshot("script",e)}getStylesheetElementsNotInSnapshot(e){return this.getElementsMatchingTypeNotInSnapshot("stylesheet",e)}getElementsMatchingTypeNotInSnapshot(e,t){return Object.keys(this.detailsByOuterHTML).filter(n=>!(n in t.detailsByOuterHTML)).map(n=>this.detailsByOuterHTML[n]).filter(({type:n})=>n==e).map(({elements:[n]})=>n)}get provisionalElements(){return Object.keys(this.detailsByOuterHTML).reduce((e,t)=>{let{type:n,tracked:i,elements:s}=this.detailsByOuterHTML[t];return n==null&&!i?[...e,...s]:s.length>1?[...e,...s.slice(1)]:e},[])}getMetaValue(e){let t=this.findMetaElementByName(e);return t?t.getAttribute("content"):null}findMetaElementByName(e){return Object.keys(this.detailsByOuterHTML).reduce((t,n)=>{let{elements:[i]}=this.detailsByOuterHTML[n];return Ht(i,e)?i:t},void 0)}};function Nt(r){if(Vt(r))return"script";if(Dt(r))return"stylesheet"}function qt(r){return r.getAttribute("data-turbo-track")=="reload"}function Vt(r){return r.tagName.toLowerCase()=="script"}function jt(r){return r.tagName.toLowerCase()=="noscript"}function Dt(r){let e=r.tagName.toLowerCase();return e=="style"||e=="link"&&r.getAttribute("rel")=="stylesheet"}function Ht(r,e){return r.tagName.toLowerCase()=="meta"&&r.getAttribute("name")==e}var b=class extends M{constructor(e,t){super(e);this.headSnapshot=t}static fromHTMLString(e=""){return this.fromDocument(ee(e))}static fromElement(e){return this.fromDocument(e.ownerDocument)}static fromDocument({head:e,body:t}){return new this(t,new ae(e))}clone(){return new b(this.element.cloneNode(!0),this.headSnapshot)}get headElement(){return this.headSnapshot.element}get rootLocation(){var e;let t=(e=this.getSetting("root"))!==null&&e!==void 0?e:"/";return m(t)}get cacheControlValue(){return this.getSetting("cache-control")}get isPreviewable(){return this.cacheControlValue!="no-preview"}get isCacheable(){return this.cacheControlValue!="no-cache"}get isVisitable(){return this.getSetting("visit-control")!="reload"}getSetting(e){return this.headSnapshot.getMetaValue(`turbo-${e}`)}},T;(function(r){r.visitStart="visitStart",r.requestStart="requestStart",r.requestEnd="requestEnd",r.visitEnd="visitEnd"})(T||(T={}));var p;(function(r){r.initialized="initialized",r.started="started",r.canceled="canceled",r.failed="failed",r.completed="completed"})(p||(p={}));var _t={action:"advance",historyChanged:!1},A;(function(r){r[r.networkFailure=0]="networkFailure",r[r.timeoutFailure=-1]="timeoutFailure",r[r.contentTypeMismatch=-2]="contentTypeMismatch"})(A||(A={}));var ce=class{constructor(e,t,n,i={}){this.identifier=k(),this.timingMetrics={},this.followedRedirect=!1,this.historyChanged=!1,this.scrolled=!1,this.snapshotCached=!1,this.state=p.initialized,this.delegate=e,this.location=t,this.restorationIdentifier=n||k();let{action:s,historyChanged:o,referrer:c,snapshotHTML:l,response:a}=Object.assign(Object.assign({},_t),i);this.action=s,this.historyChanged=o,this.referrer=c,this.snapshotHTML=l,this.response=a,this.isSamePage=this.delegate.locationWithActionIsSamePage(this.location,this.action)}get adapter(){return this.delegate.adapter}get view(){return this.delegate.view}get history(){return this.delegate.history}get restorationData(){return this.history.getRestorationDataForIdentifier(this.restorationIdentifier)}get silent(){return this.isSamePage}start(){this.state==p.initialized&&(this.recordTimingMetric(T.visitStart),this.state=p.started,this.adapter.visitStarted(this),this.delegate.visitStarted(this))}cancel(){this.state==p.started&&(this.request&&this.request.cancel(),this.cancelRender(),this.state=p.canceled)}complete(){this.state==p.started&&(this.recordTimingMetric(T.visitEnd),this.state=p.completed,this.adapter.visitCompleted(this),this.delegate.visitCompleted(this),this.followRedirect())}fail(){this.state==p.started&&(this.state=p.failed,this.adapter.visitFailed(this))}changeHistory(){var e;if(!this.historyChanged){let t=this.location.href===((e=this.referrer)===null||e===void 0?void 0:e.href)?"replace":this.action,n=this.getHistoryMethodForAction(t);this.history.update(n,this.location,this.restorationIdentifier),this.historyChanged=!0}}issueRequest(){this.hasPreloadedResponse()?this.simulateRequest():this.shouldIssueRequest()&&!this.request&&(this.request=new I(this,h.get,this.location),this.request.perform())}simulateRequest(){this.response&&(this.startRequest(),this.recordResponse(),this.finishRequest())}startRequest(){this.recordTimingMetric(T.requestStart),this.adapter.visitRequestStarted(this)}recordResponse(e=this.response){if(this.response=e,e){let{statusCode:t}=e;le(t)?this.adapter.visitRequestCompleted(this):this.adapter.visitRequestFailedWithStatusCode(this,t)}}finishRequest(){this.recordTimingMetric(T.requestEnd),this.adapter.visitRequestFinished(this)}loadResponse(){if(this.response){let{statusCode:e,responseHTML:t}=this.response;this.render(async()=>{this.cacheSnapshot(),this.view.renderPromise&&await this.view.renderPromise,le(e)&&t!=null?(await this.view.renderPage(b.fromHTMLString(t)),this.adapter.visitRendered(this),this.complete()):(await this.view.renderError(b.fromHTMLString(t)),this.adapter.visitRendered(this),this.fail())})}}getCachedSnapshot(){let e=this.view.getCachedSnapshotForLocation(this.location)||this.getPreloadedSnapshot();if(e&&(!P(this.location)||e.hasAnchor(P(this.location)))&&(this.action=="restore"||e.isPreviewable))return e}getPreloadedSnapshot(){if(this.snapshotHTML)return b.fromHTMLString(this.snapshotHTML)}hasCachedSnapshot(){return this.getCachedSnapshot()!=null}loadCachedSnapshot(){let e=this.getCachedSnapshot();if(e){let t=this.shouldIssueRequest();this.render(async()=>{this.cacheSnapshot(),this.isSamePage?this.adapter.visitRendered(this):(this.view.renderPromise&&await this.view.renderPromise,await this.view.renderPage(e,t),this.adapter.visitRendered(this),t||this.complete())})}}followRedirect(){this.redirectedToLocation&&!this.followedRedirect&&(this.adapter.visitProposedToLocation(this.redirectedToLocation,{action:"replace",response:this.response}),this.followedRedirect=!0)}goToSamePageAnchor(){this.isSamePage&&this.render(async()=>{this.cacheSnapshot(),this.adapter.visitRendered(this)})}requestStarted(){this.startRequest()}requestPreventedHandlingResponse(e,t){}async requestSucceededWithResponse(e,t){let n=await t.responseHTML;n==null?this.recordResponse({statusCode:A.contentTypeMismatch}):(this.redirectedToLocation=t.redirected?t.location:void 0,this.recordResponse({statusCode:t.statusCode,responseHTML:n}))}async requestFailedWithResponse(e,t){let n=await t.responseHTML;n==null?this.recordResponse({statusCode:A.contentTypeMismatch}):this.recordResponse({statusCode:t.statusCode,responseHTML:n})}requestErrored(e,t){this.recordResponse({statusCode:A.networkFailure})}requestFinished(){this.finishRequest()}performScroll(){this.scrolled||(this.action=="restore"?this.scrollToRestoredPosition()||this.scrollToAnchor()||this.view.scrollToTop():this.scrollToAnchor()||this.view.scrollToTop(),this.isSamePage&&this.delegate.visitScrolledToSamePageLocation(this.view.lastRenderedLocation,this.location),this.scrolled=!0)}scrollToRestoredPosition(){let{scrollPosition:e}=this.restorationData;if(e)return this.view.scrollToPosition(e),!0}scrollToAnchor(){let e=P(this.location);if(e!=null)return this.view.scrollToAnchor(e),!0}recordTimingMetric(e){this.timingMetrics[e]=new Date().getTime()}getTimingMetrics(){return Object.assign({},this.timingMetrics)}getHistoryMethodForAction(e){switch(e){case"replace":return history.replaceState;case"advance":case"restore":return history.pushState}}hasPreloadedResponse(){return typeof this.response=="object"}shouldIssueRequest(){return this.isSamePage?!1:this.action=="restore"?!this.hasCachedSnapshot():!0}cacheSnapshot(){this.snapshotCached||(this.view.cacheSnapshot(),this.snapshotCached=!0)}async render(e){this.cancelRender(),await new Promise(t=>{this.frame=requestAnimationFrame(()=>t())}),await e(),delete this.frame,this.performScroll()}cancelRender(){this.frame&&(cancelAnimationFrame(this.frame),delete this.frame)}};function le(r){return r>=200&&r<300}var ue=class{constructor(e){this.progressBar=new g,this.showProgressBar=()=>{this.progressBar.show()},this.session=e}visitProposedToLocation(e,t){this.navigator.startVisit(e,k(),t)}visitStarted(e){e.issueRequest(),e.changeHistory(),e.goToSamePageAnchor(),e.loadCachedSnapshot()}visitRequestStarted(e){this.progressBar.setValue(0),e.hasCachedSnapshot()||e.action!="restore"?this.showVisitProgressBarAfterDelay():this.showProgressBar()}visitRequestCompleted(e){e.loadResponse()}visitRequestFailedWithStatusCode(e,t){switch(t){case A.networkFailure:case A.timeoutFailure:case A.contentTypeMismatch:return this.reload();default:return e.loadResponse()}}visitRequestFinished(e){this.progressBar.setValue(1),this.hideVisitProgressBar()}visitCompleted(e){}pageInvalidated(){this.reload()}visitFailed(e){}visitRendered(e){}formSubmissionStarted(e){this.progressBar.setValue(0),this.showFormProgressBarAfterDelay()}formSubmissionFinished(e){this.progressBar.setValue(1),this.hideFormProgressBar()}showVisitProgressBarAfterDelay(){this.visitProgressBarTimeout=window.setTimeout(this.showProgressBar,this.session.progressBarDelay)}hideVisitProgressBar(){this.progressBar.hide(),this.visitProgressBarTimeout!=null&&(window.clearTimeout(this.visitProgressBarTimeout),delete this.visitProgressBarTimeout)}showFormProgressBarAfterDelay(){this.formProgressBarTimeout==null&&(this.formProgressBarTimeout=window.setTimeout(this.showProgressBar,this.session.progressBarDelay))}hideFormProgressBar(){this.progressBar.hide(),this.formProgressBarTimeout!=null&&(window.clearTimeout(this.formProgressBarTimeout),delete this.formProgressBarTimeout)}reload(){window.location.reload()}get navigator(){return this.session.navigator}},he=class{constructor(){this.started=!1}start(){this.started||(this.started=!0,addEventListener("turbo:before-cache",this.removeStaleElements,!1))}stop(){this.started&&(this.started=!1,removeEventListener("turbo:before-cache",this.removeStaleElements,!1))}removeStaleElements(){let e=[...document.querySelectorAll('[data-turbo-cache="false"]')];for(let t of e)t.remove()}},de=class{constructor(e){this.started=!1,this.submitCaptured=()=>{removeEventListener("submit",this.submitBubbled,!1),addEventListener("submit",this.submitBubbled,!1)},this.submitBubbled=t=>{if(!t.defaultPrevented){let n=t.target instanceof HTMLFormElement?t.target:void 0,i=t.submitter||void 0;n&&((i==null?void 0:i.getAttribute("formmethod"))||n.method)!="dialog"&&this.delegate.willSubmitForm(n,i)&&(t.preventDefault(),this.delegate.formSubmitted(n,i))}},this.delegate=e}start(){this.started||(addEventListener("submit",this.submitCaptured,!0),this.started=!0)}stop(){this.started&&(removeEventListener("submit",this.submitCaptured,!0),this.started=!1)}},fe=class{constructor(e){this.element=e,this.linkInterceptor=new $(this,e),this.formInterceptor=new K(this,e)}start(){this.linkInterceptor.start(),this.formInterceptor.start()}stop(){this.linkInterceptor.stop(),this.formInterceptor.stop()}shouldInterceptLinkClick(e,t){return this.shouldRedirect(e)}linkClickIntercepted(e,t){let n=this.findFrameElement(e);n&&(n.setAttribute("reloadable",""),n.src=t)}shouldInterceptFormSubmission(e,t){return this.shouldRedirect(e,t)}formSubmissionIntercepted(e,t){let n=this.findFrameElement(e);n&&(n.removeAttribute("reloadable"),n.delegate.formSubmissionIntercepted(e,t))}shouldRedirect(e,t){let n=this.findFrameElement(e);return n?n!=e.closest("turbo-frame"):!1}findFrameElement(e){let t=e.getAttribute("data-turbo-frame");if(t&&t!="_top"){let n=this.element.querySelector(`#${t}:not([disabled])`);if(n instanceof v)return n}}},pe=class{constructor(e){this.restorationIdentifier=k(),this.restorationData={},this.started=!1,this.pageLoaded=!1,this.onPopState=t=>{if(this.shouldHandlePopState()){let{turbo:n}=t.state||{};if(n){this.location=new URL(window.location.href);let{restorationIdentifier:i}=n;this.restorationIdentifier=i,this.delegate.historyPoppedToLocationWithRestorationIdentifier(this.location,i)}}},this.onPageLoad=async t=>{await Pt(),this.pageLoaded=!0},this.delegate=e}start(){this.started||(addEventListener("popstate",this.onPopState,!1),addEventListener("load",this.onPageLoad,!1),this.started=!0,this.replace(new URL(window.location.href)))}stop(){this.started&&(removeEventListener("popstate",this.onPopState,!1),removeEventListener("load",this.onPageLoad,!1),this.started=!1)}push(e,t){this.update(history.pushState,e,t)}replace(e,t){this.update(history.replaceState,e,t)}update(e,t,n=k()){let i={turbo:{restorationIdentifier:n}};e.call(history,i,"",t.href),this.location=t,this.restorationIdentifier=n}getRestorationDataForIdentifier(e){return this.restorationData[e]||{}}updateRestorationData(e){let{restorationIdentifier:t}=this,n=this.restorationData[t];this.restorationData[t]=Object.assign(Object.assign({},n),e)}assumeControlOfScrollRestoration(){var e;this.previousScrollRestoration||(this.previousScrollRestoration=(e=history.scrollRestoration)!==null&&e!==void 0?e:"auto",history.scrollRestoration="manual")}relinquishControlOfScrollRestoration(){this.previousScrollRestoration&&(history.scrollRestoration=this.previousScrollRestoration,delete this.previousScrollRestoration)}shouldHandlePopState(){return this.pageIsLoaded()}pageIsLoaded(){return this.pageLoaded||document.readyState=="complete"}},me=class{constructor(e){this.started=!1,this.clickCaptured=()=>{removeEventListener("click",this.clickBubbled,!1),addEventListener("click",this.clickBubbled,!1)},this.clickBubbled=t=>{if(this.clickEventIsSignificant(t)){let n=t.composedPath&&t.composedPath()[0]||t.target,i=this.findLinkFromClickTarget(n);if(i){let s=this.getLocationForLink(i);this.delegate.willFollowLinkToLocation(i,s)&&(t.preventDefault(),this.delegate.followedLinkToLocation(i,s))}}},this.delegate=e}start(){this.started||(addEventListener("click",this.clickCaptured,!0),this.started=!0)}stop(){this.started&&(removeEventListener("click",this.clickCaptured,!0),this.started=!1)}clickEventIsSignificant(e){return!(e.target&&e.target.isContentEditable||e.defaultPrevented||e.which>1||e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)}findLinkFromClickTarget(e){if(e instanceof Element)return e.closest("a[href]:not([target^=_]):not([download])")}getLocationForLink(e){return m(e.getAttribute("href")||"")}};function ge(r){return r=="advance"||r=="replace"||r=="restore"}var ve=class{constructor(e){this.delegate=e}proposeVisit(e,t={}){this.delegate.allowsVisitingLocationWithAction(e,t.action)&&this.delegate.visitProposedToLocation(e,t)}startVisit(e,t,n={}){this.stop(),this.currentVisit=new ce(this,m(e),t,Object.assign({referrer:this.location},n)),this.currentVisit.start()}submitForm(e,t){this.stop(),this.formSubmission=new U(this,e,t,!0),this.formSubmission.isIdempotent?this.proposeVisit(this.formSubmission.fetchRequest.url,{action:this.getActionForFormSubmission(this.formSubmission)}):this.formSubmission.start()}stop(){this.formSubmission&&(this.formSubmission.stop(),delete this.formSubmission),this.currentVisit&&(this.currentVisit.cancel(),delete this.currentVisit)}get adapter(){return this.delegate.adapter}get view(){return this.delegate.view}get history(){return this.delegate.history}formSubmissionStarted(e){typeof this.adapter.formSubmissionStarted=="function"&&this.adapter.formSubmissionStarted(e)}async formSubmissionSucceededWithResponse(e,t){if(e==this.formSubmission){let n=await t.responseHTML;if(n){e.method!=h.get&&this.view.clearSnapshotCache();let{statusCode:i}=t,s={response:{statusCode:i,responseHTML:n}};this.proposeVisit(t.location,s)}}}async formSubmissionFailedWithResponse(e,t){let n=await t.responseHTML;if(n){let i=b.fromHTMLString(n);t.serverError?await this.view.renderError(i):await this.view.renderPage(i),this.view.scrollToTop(),this.view.clearSnapshotCache()}}formSubmissionErrored(e,t){console.error(t)}formSubmissionFinished(e){typeof this.adapter.formSubmissionFinished=="function"&&this.adapter.formSubmissionFinished(e)}visitStarted(e){this.delegate.visitStarted(e)}visitCompleted(e){this.delegate.visitCompleted(e)}locationWithActionIsSamePage(e,t){let n=P(e),i=P(this.view.lastRenderedLocation),s=t==="restore"&&typeof n=="undefined";return t!=="replace"&&_(e)===_(this.view.lastRenderedLocation)&&(s||n!=null&&n!==i)}visitScrolledToSamePageLocation(e,t){this.delegate.visitScrolledToSamePageLocation(e,t)}get location(){return this.history.location}get restorationIdentifier(){return this.history.restorationIdentifier}getActionForFormSubmission(e){let{formElement:t,submitter:n}=e,i=(n==null?void 0:n.getAttribute("data-turbo-action"))||t.getAttribute("data-turbo-action");return ge(i)?i:"advance"}},y;(function(r){r[r.initial=0]="initial",r[r.loading=1]="loading",r[r.interactive=2]="interactive",r[r.complete=3]="complete"})(y||(y={}));var be=class{constructor(e){this.stage=y.initial,this.started=!1,this.interpretReadyState=()=>{let{readyState:t}=this;t=="interactive"?this.pageIsInteractive():t=="complete"&&this.pageIsComplete()},this.pageWillUnload=()=>{this.delegate.pageWillUnload()},this.delegate=e}start(){this.started||(this.stage==y.initial&&(this.stage=y.loading),document.addEventListener("readystatechange",this.interpretReadyState,!1),addEventListener("pagehide",this.pageWillUnload,!1),this.started=!0)}stop(){this.started&&(document.removeEventListener("readystatechange",this.interpretReadyState,!1),removeEventListener("pagehide",this.pageWillUnload,!1),this.started=!1)}pageIsInteractive(){this.stage==y.loading&&(this.stage=y.interactive,this.delegate.pageBecameInteractive())}pageIsComplete(){this.pageIsInteractive(),this.stage==y.interactive&&(this.stage=y.complete,this.delegate.pageLoaded())}get readyState(){return document.readyState}},ye=class{constructor(e){this.started=!1,this.onScroll=()=>{this.updatePosition({x:window.pageXOffset,y:window.pageYOffset})},this.delegate=e}start(){this.started||(addEventListener("scroll",this.onScroll,!1),this.onScroll(),this.started=!0)}stop(){this.started&&(removeEventListener("scroll",this.onScroll,!1),this.started=!1)}updatePosition(e){this.delegate.scrollPositionChanged(e)}},we=class{constructor(e){this.sources=new Set,this.started=!1,this.inspectFetchResponse=t=>{let n=Wt(t);n&&Ut(n)&&(t.preventDefault(),this.receiveMessageResponse(n))},this.receiveMessageEvent=t=>{this.started&&typeof t.data=="string"&&this.receiveMessageHTML(t.data)},this.delegate=e}start(){this.started||(this.started=!0,addEventListener("turbo:before-fetch-response",this.inspectFetchResponse,!1))}stop(){this.started&&(this.started=!1,removeEventListener("turbo:before-fetch-response",this.inspectFetchResponse,!1))}connectStreamSource(e){this.streamSourceIsConnected(e)||(this.sources.add(e),e.addEventListener("message",this.receiveMessageEvent,!1))}disconnectStreamSource(e){this.streamSourceIsConnected(e)&&(this.sources.delete(e),e.removeEventListener("message",this.receiveMessageEvent,!1))}streamSourceIsConnected(e){return this.sources.has(e)}async receiveMessageResponse(e){let t=await e.responseHTML;t&&this.receiveMessageHTML(t)}receiveMessageHTML(e){this.delegate.receivedMessageFromStream(new L(e))}};function Wt(r){var e;let t=(e=r.detail)===null||e===void 0?void 0:e.fetchResponse;if(t instanceof W)return t}function Ut(r){var e;return((e=r.contentType)!==null&&e!==void 0?e:"").startsWith(L.contentType)}var Ee=class extends N{async render(){this.replaceHeadAndBody(),this.activateScriptElements()}replaceHeadAndBody(){let{documentElement:e,head:t,body:n}=document;e.replaceChild(this.newHead,t),e.replaceChild(this.newElement,n)}activateScriptElements(){for(let e of this.scriptElements){let t=e.parentNode;if(t){let n=this.createScriptElement(e);t.replaceChild(n,e)}}}get newHead(){return this.newSnapshot.headSnapshot.element}get scriptElements(){return[...document.documentElement.querySelectorAll("script")]}},J=class extends N{get shouldRender(){return this.newSnapshot.isVisitable&&this.trackedElementsAreIdentical}prepareToRender(){this.mergeHead()}async render(){this.replaceBody()}finishRendering(){super.finishRendering(),this.isPreview||this.focusFirstAutofocusableElement()}get currentHeadSnapshot(){return this.currentSnapshot.headSnapshot}get newHeadSnapshot(){return this.newSnapshot.headSnapshot}get newElement(){return this.newSnapshot.element}mergeHead(){this.copyNewHeadStylesheetElements(),this.copyNewHeadScriptElements(),this.removeCurrentHeadProvisionalElements(),this.copyNewHeadProvisionalElements()}replaceBody(){this.preservingPermanentElements(()=>{this.activateNewBody(),this.assignNewBody()})}get trackedElementsAreIdentical(){return this.currentHeadSnapshot.trackedElementSignature==this.newHeadSnapshot.trackedElementSignature}copyNewHeadStylesheetElements(){for(let e of this.newHeadStylesheetElements)document.head.appendChild(e)}copyNewHeadScriptElements(){for(let e of this.newHeadScriptElements)document.head.appendChild(this.createScriptElement(e))}removeCurrentHeadProvisionalElements(){for(let e of this.currentHeadProvisionalElements)document.head.removeChild(e)}copyNewHeadProvisionalElements(){for(let e of this.newHeadProvisionalElements)document.head.appendChild(e)}activateNewBody(){document.adoptNode(this.newElement),this.activateNewBodyScriptElements()}activateNewBodyScriptElements(){for(let e of this.newBodyScriptElements){let t=this.createScriptElement(e);e.replaceWith(t)}}assignNewBody(){document.body&&this.newElement instanceof HTMLBodyElement?document.body.replaceWith(this.newElement):document.documentElement.appendChild(this.newElement)}get newHeadStylesheetElements(){return this.newHeadSnapshot.getStylesheetElementsNotInSnapshot(this.currentHeadSnapshot)}get newHeadScriptElements(){return this.newHeadSnapshot.getScriptElementsNotInSnapshot(this.currentHeadSnapshot)}get currentHeadProvisionalElements(){return this.currentHeadSnapshot.provisionalElements}get newHeadProvisionalElements(){return this.newHeadSnapshot.provisionalElements}get newBodyScriptElements(){return this.newElement.querySelectorAll("script")}},Se=class{constructor(e){this.keys=[],this.snapshots={},this.size=e}has(e){return F(e)in this.snapshots}get(e){if(this.has(e)){let t=this.read(e);return this.touch(e),t}}put(e,t){return this.write(e,t),this.touch(e),t}clear(){this.snapshots={}}read(e){return this.snapshots[F(e)]}write(e,t){this.snapshots[F(e)]=t}touch(e){let t=F(e),n=this.keys.indexOf(t);n>-1&&this.keys.splice(n,1),this.keys.unshift(t),this.trim()}trim(){for(let e of this.keys.splice(this.size))delete this.snapshots[e]}},Ae=class extends z{constructor(){super(...arguments);this.snapshotCache=new Se(10),this.lastRenderedLocation=new URL(location.href)}renderPage(e,t=!1){let n=new J(this.snapshot,e,t);return this.render(n)}renderError(e){let t=new Ee(this.snapshot,e,!1);return this.render(t)}clearSnapshotCache(){this.snapshotCache.clear()}async cacheSnapshot(){if(this.shouldCacheSnapshot){this.delegate.viewWillCacheSnapshot();let{snapshot:e,lastRenderedLocation:t}=this;await At(),this.snapshotCache.put(t,e.clone())}}getCachedSnapshotForLocation(e){return this.snapshotCache.get(e)}get snapshot(){return b.fromElement(this.element)}get shouldCacheSnapshot(){return this.snapshot.isCacheable}},Pe=class{constructor(){this.navigator=new ve(this),this.history=new pe(this),this.view=new Ae(this,document.documentElement),this.adapter=new ue(this),this.pageObserver=new be(this),this.cacheObserver=new he,this.linkClickObserver=new me(this),this.formSubmitObserver=new de(this),this.scrollObserver=new ye(this),this.streamObserver=new we(this),this.frameRedirector=new fe(document.documentElement),this.drive=!0,this.enabled=!0,this.progressBarDelay=500,this.started=!1}start(){this.started||(this.pageObserver.start(),this.cacheObserver.start(),this.linkClickObserver.start(),this.formSubmitObserver.start(),this.scrollObserver.start(),this.streamObserver.start(),this.frameRedirector.start(),this.history.start(),this.started=!0,this.enabled=!0)}disable(){this.enabled=!1}stop(){this.started&&(this.pageObserver.stop(),this.cacheObserver.stop(),this.linkClickObserver.stop(),this.formSubmitObserver.stop(),this.scrollObserver.stop(),this.streamObserver.stop(),this.frameRedirector.stop(),this.history.stop(),this.started=!1)}registerAdapter(e){this.adapter=e}visit(e,t={}){this.navigator.proposeVisit(m(e),t)}connectStreamSource(e){this.streamObserver.connectStreamSource(e)}disconnectStreamSource(e){this.streamObserver.disconnectStreamSource(e)}renderStreamMessage(e){document.documentElement.appendChild(L.wrap(e).fragment)}clearCache(){this.view.clearSnapshotCache()}setProgressBarDelay(e){this.progressBarDelay=e}get location(){return this.history.location}get restorationIdentifier(){return this.history.restorationIdentifier}historyPoppedToLocationWithRestorationIdentifier(e,t){this.enabled?this.navigator.startVisit(e,t,{action:"restore",historyChanged:!0}):this.adapter.pageInvalidated()}scrollPositionChanged(e){this.history.updateRestorationData({scrollPosition:e})}willFollowLinkToLocation(e,t){return this.elementDriveEnabled(e)&&this.locationIsVisitable(t)&&this.applicationAllowsFollowingLinkToLocation(e,t)}followedLinkToLocation(e,t){let n=this.getActionForLink(e);this.convertLinkWithMethodClickToFormSubmission(e)||this.visit(t.href,{action:n})}convertLinkWithMethodClickToFormSubmission(e){let t=e.getAttribute("data-turbo-method");if(t){let n=document.createElement("form");return n.method=t,n.action=e.getAttribute("href")||"undefined",document.body.appendChild(n),u("submit",{cancelable:!0,target:n})}else return!1}allowsVisitingLocationWithAction(e,t){return this.locationWithActionIsSamePage(e,t)||this.applicationAllowsVisitingLocation(e)}visitProposedToLocation(e,t){Le(e),this.adapter.visitProposedToLocation(e,t)}visitStarted(e){Le(e.location),e.silent||this.notifyApplicationAfterVisitingLocation(e.location,e.action)}visitCompleted(e){this.notifyApplicationAfterPageLoad(e.getTimingMetrics())}locationWithActionIsSamePage(e,t){return this.navigator.locationWithActionIsSamePage(e,t)}visitScrolledToSamePageLocation(e,t){this.notifyApplicationAfterVisitingSamePageLocation(e,t)}willSubmitForm(e,t){return this.elementDriveEnabled(e)&&this.elementDriveEnabled(t)}formSubmitted(e,t){this.navigator.submitForm(e,t)}pageBecameInteractive(){this.view.lastRenderedLocation=this.location,this.notifyApplicationAfterPageLoad()}pageLoaded(){this.history.assumeControlOfScrollRestoration()}pageWillUnload(){this.history.relinquishControlOfScrollRestoration()}receivedMessageFromStream(e){this.renderStreamMessage(e)}viewWillCacheSnapshot(){var e;((e=this.navigator.currentVisit)===null||e===void 0?void 0:e.silent)||this.notifyApplicationBeforeCachingSnapshot()}allowsImmediateRender({element:e},t){return!this.notifyApplicationBeforeRender(e,t).defaultPrevented}viewRenderedSnapshot(e,t){this.view.lastRenderedLocation=this.history.location,this.notifyApplicationAfterRender()}viewInvalidated(){this.adapter.pageInvalidated()}frameLoaded(e){this.notifyApplicationAfterFrameLoad(e)}frameRendered(e,t){this.notifyApplicationAfterFrameRender(e,t)}applicationAllowsFollowingLinkToLocation(e,t){return!this.notifyApplicationAfterClickingLinkToLocation(e,t).defaultPrevented}applicationAllowsVisitingLocation(e){return!this.notifyApplicationBeforeVisitingLocation(e).defaultPrevented}notifyApplicationAfterClickingLinkToLocation(e,t){return u("turbo:click",{target:e,detail:{url:t.href},cancelable:!0})}notifyApplicationBeforeVisitingLocation(e){return u("turbo:before-visit",{detail:{url:e.href},cancelable:!0})}notifyApplicationAfterVisitingLocation(e,t){return u("turbo:visit",{detail:{url:e.href,action:t}})}notifyApplicationBeforeCachingSnapshot(){return u("turbo:before-cache")}notifyApplicationBeforeRender(e,t){return u("turbo:before-render",{detail:{newBody:e,resume:t},cancelable:!0})}notifyApplicationAfterRender(){return u("turbo:render")}notifyApplicationAfterPageLoad(e={}){return u("turbo:load",{detail:{url:this.location.href,timing:e}})}notifyApplicationAfterVisitingSamePageLocation(e,t){dispatchEvent(new HashChangeEvent("hashchange",{oldURL:e.toString(),newURL:t.toString()}))}notifyApplicationAfterFrameLoad(e){return u("turbo:frame-load",{target:e})}notifyApplicationAfterFrameRender(e,t){return u("turbo:frame-render",{detail:{fetchResponse:e},target:t,cancelable:!0})}elementDriveEnabled(e){let t=e==null?void 0:e.closest("[data-turbo]");return this.drive?t?t.getAttribute("data-turbo")!="false":!0:t?t.getAttribute("data-turbo")=="true":!1}getActionForLink(e){let t=e.getAttribute("data-turbo-action");return ge(t)?t:"advance"}locationIsVisitable(e){return vt(e,this.snapshot.rootLocation)&>(e)}get snapshot(){return this.view.snapshot}};function Le(r){Object.defineProperties(r,Kt)}var Kt={absoluteURL:{get(){return this.toString()}}},d=new Pe,{navigator:zt}=d;function Te(){d.start()}function $t(r){d.registerAdapter(r)}function Jt(r,e){d.visit(r,e)}function Gt(r){d.connectStreamSource(r)}function Qt(r){d.disconnectStreamSource(r)}function Xt(r){d.renderStreamMessage(r)}function Yt(){d.clearCache()}function Zt(r){d.setProgressBarDelay(r)}var er=Object.freeze({__proto__:null,navigator:zt,session:d,PageRenderer:J,PageSnapshot:b,start:Te,registerAdapter:$t,visit:Jt,connectStreamSource:Gt,disconnectStreamSource:Qt,renderStreamMessage:Xt,clearCache:Yt,setProgressBarDelay:Zt}),Ce=class{constructor(e){this.resolveVisitPromise=()=>{},this.connected=!1,this.hasBeenLoaded=!1,this.settingSourceURL=!1,this.element=e,this.view=new ie(this,this.element),this.appearanceObserver=new re(this,this.element),this.linkInterceptor=new $(this,this.element),this.formInterceptor=new K(this,this.element)}connect(){this.connected||(this.connected=!0,this.reloadable=!1,this.loadingStyle==w.lazy&&this.appearanceObserver.start(),this.linkInterceptor.start(),this.formInterceptor.start(),this.sourceURLChanged())}disconnect(){this.connected&&(this.connected=!1,this.appearanceObserver.stop(),this.linkInterceptor.stop(),this.formInterceptor.stop())}disabledChanged(){this.loadingStyle==w.eager&&this.loadSourceURL()}sourceURLChanged(){(this.loadingStyle==w.eager||this.hasBeenLoaded)&&this.loadSourceURL()}loadingStyleChanged(){this.loadingStyle==w.lazy?this.appearanceObserver.start():(this.appearanceObserver.stop(),this.loadSourceURL())}async loadSourceURL(){if(!this.settingSourceURL&&this.enabled&&this.isActive&&(this.reloadable||this.sourceURL!=this.currentURL)){let e=this.currentURL;if(this.currentURL=this.sourceURL,this.sourceURL)try{this.element.loaded=this.visit(this.sourceURL),this.appearanceObserver.stop(),await this.element.loaded,this.hasBeenLoaded=!0,d.frameLoaded(this.element)}catch(t){throw this.currentURL=e,t}}}async loadResponse(e){e.redirected&&(this.sourceURL=e.response.url);try{let t=await e.responseHTML;if(t){let{body:n}=ee(t),i=new M(await this.extractForeignFrameElement(n)),s=new oe(this.view.snapshot,i,!1);this.view.renderPromise&&await this.view.renderPromise,await this.view.render(s),d.frameRendered(e,this.element)}}catch(t){console.error(t),this.view.invalidate()}}elementAppearedInViewport(e){this.loadSourceURL()}shouldInterceptLinkClick(e,t){return e.hasAttribute("data-turbo-method")?!1:this.shouldInterceptNavigation(e)}linkClickIntercepted(e,t){this.reloadable=!0,this.navigateFrame(e,t)}shouldInterceptFormSubmission(e,t){return this.shouldInterceptNavigation(e,t)}formSubmissionIntercepted(e,t){if(this.formSubmission&&this.formSubmission.stop(),this.reloadable=!1,this.formSubmission=new U(this,e,t),this.formSubmission.fetchRequest.isIdempotent)this.navigateFrame(e,this.formSubmission.fetchRequest.url.href);else{let{fetchRequest:n}=this.formSubmission;this.prepareHeadersForRequest(n.headers,n),this.formSubmission.start()}}prepareHeadersForRequest(e,t){e["Turbo-Frame"]=this.id}requestStarted(e){this.element.setAttribute("busy","")}requestPreventedHandlingResponse(e,t){this.resolveVisitPromise()}async requestSucceededWithResponse(e,t){await this.loadResponse(t),this.resolveVisitPromise()}requestFailedWithResponse(e,t){console.error(t),this.resolveVisitPromise()}requestErrored(e,t){console.error(t),this.resolveVisitPromise()}requestFinished(e){this.element.removeAttribute("busy")}formSubmissionStarted(e){this.findFrameElement(e.formElement).setAttribute("busy","")}formSubmissionSucceededWithResponse(e,t){this.findFrameElement(e.formElement).delegate.loadResponse(t)}formSubmissionFailedWithResponse(e,t){this.element.delegate.loadResponse(t)}formSubmissionErrored(e,t){console.error(t)}formSubmissionFinished(e){this.findFrameElement(e.formElement).removeAttribute("busy")}allowsImmediateRender(e,t){return!0}viewRenderedSnapshot(e,t){}viewInvalidated(){}async visit(e){let t=new I(this,h.get,m(e));return new Promise(n=>{this.resolveVisitPromise=()=>{this.resolveVisitPromise=()=>{},n()},t.perform()})}navigateFrame(e,t){let n=this.findFrameElement(e);n.src=t}findFrameElement(e){var t;let n=e.getAttribute("data-turbo-frame")||this.element.getAttribute("target");return(t=Oe(n))!==null&&t!==void 0?t:this.element}async extractForeignFrameElement(e){let t,n=CSS.escape(this.id);try{if(t=Re(e.querySelector(`turbo-frame#${n}`),this.currentURL))return t;if(t=Re(e.querySelector(`turbo-frame[src][recurse~=${n}]`),this.currentURL))return await t.loaded,await this.extractForeignFrameElement(t);console.error(`Response has no matching <turbo-frame id="${n}"> element`)}catch(i){console.error(i)}return new v}shouldInterceptNavigation(e,t){let n=e.getAttribute("data-turbo-frame")||this.element.getAttribute("target");if(!this.enabled||n=="_top")return!1;if(n){let i=Oe(n);if(i)return!i.disabled}return!(!d.elementDriveEnabled(e)||t&&!d.elementDriveEnabled(t))}get id(){return this.element.id}get enabled(){return!this.element.disabled}get sourceURL(){if(this.element.src)return this.element.src}get reloadable(){return this.findFrameElement(this.element).hasAttribute("reloadable")}set reloadable(e){let t=this.findFrameElement(this.element);e?t.setAttribute("reloadable",""):t.removeAttribute("reloadable")}set sourceURL(e){this.settingSourceURL=!0,this.element.src=e??null,this.currentURL=this.element.src,this.settingSourceURL=!1}get loadingStyle(){return this.element.loading}get isLoading(){return this.formSubmission!==void 0||this.resolveVisitPromise()!==void 0}get isActive(){return this.element.isActive&&this.connected}};function Oe(r){if(r!=null){let e=document.getElementById(r);if(e instanceof v)return e}}function Re(r,e){if(r){let t=r.getAttribute("src");if(t!=null&&e!=null&&bt(t,e))throw new Error(`Matching <turbo-frame id="${r.id}"> element has a source URL which references itself`);if(r.ownerDocument!==document&&(r=document.importNode(r,!0)),r instanceof v)return r.connectedCallback(),r}}var tr={after(){this.targetElements.forEach(r=>{var e;return(e=r.parentElement)===null||e===void 0?void 0:e.insertBefore(this.templateContent,r.nextSibling)})},append(){this.removeDuplicateTargetChildren(),this.targetElements.forEach(r=>r.append(this.templateContent))},before(){this.targetElements.forEach(r=>{var e;return(e=r.parentElement)===null||e===void 0?void 0:e.insertBefore(this.templateContent,r)})},prepend(){this.removeDuplicateTargetChildren(),this.targetElements.forEach(r=>r.prepend(this.templateContent))},remove(){this.targetElements.forEach(r=>r.remove())},replace(){this.targetElements.forEach(r=>r.replaceWith(this.templateContent))},update(){this.targetElements.forEach(r=>{r.innerHTML="",r.append(this.templateContent)})}},ke=class extends HTMLElement{async connectedCallback(){try{await this.render()}catch(e){console.error(e)}finally{this.disconnect()}}async render(){var e;return(e=this.renderPromise)!==null&&e!==void 0?e:this.renderPromise=(async()=>{this.dispatchEvent(this.beforeRenderEvent)&&(await B(),this.performAction())})()}disconnect(){try{this.remove()}catch(e){}}removeDuplicateTargetChildren(){this.duplicateChildren.forEach(e=>e.remove())}get duplicateChildren(){var e;let t=this.targetElements.flatMap(i=>[...i.children]).filter(i=>!!i.id),n=[...(e=this.templateContent)===null||e===void 0?void 0:e.children].filter(i=>!!i.id).map(i=>i.id);return t.filter(i=>n.includes(i.id))}get performAction(){if(this.action){let e=tr[this.action];if(e)return e;this.raise("unknown action")}this.raise("action attribute is missing")}get targetElements(){if(this.target)return this.targetElementsById;if(this.targets)return this.targetElementsByQuery;this.raise("target or targets attribute is missing")}get templateContent(){return this.templateElement.content.cloneNode(!0)}get templateElement(){if(this.firstElementChild instanceof HTMLTemplateElement)return this.firstElementChild;this.raise("first child element must be a <template> element")}get action(){return this.getAttribute("action")}get target(){return this.getAttribute("target")}get targets(){return this.getAttribute("targets")}raise(e){throw new Error(`${this.description}: ${e}`)}get description(){var e,t;return(t=((e=this.outerHTML.match(/<[^>]+>/))!==null&&e!==void 0?e:[])[0])!==null&&t!==void 0?t:"<turbo-stream>"}get beforeRenderEvent(){return new CustomEvent("turbo:before-stream-render",{bubbles:!0,cancelable:!0})}get targetElementsById(){var e;let t=(e=this.ownerDocument)===null||e===void 0?void 0:e.getElementById(this.target);return t!==null?[t]:[]}get targetElementsByQuery(){var e;let t=(e=this.ownerDocument)===null||e===void 0?void 0:e.querySelectorAll(this.targets);return t.length!==0?Array.prototype.slice.call(t):[]}};v.delegateConstructor=Ce;customElements.define("turbo-frame",v);customElements.define("turbo-stream",ke);(()=>{let r=document.currentScript;if(!!r&&!r.hasAttribute("data-turbo-suppress-warning")){for(;r=r.parentElement;)if(r==document.body)return console.warn(te` + `}show(){this.visible||(this.visible=!0,this.installProgressElement(),this.startTrickling())}hide(){this.visible&&!this.hiding&&(this.hiding=!0,this.fadeProgressElement(()=>{this.uninstallProgressElement(),this.stopTrickling(),this.visible=!1,this.hiding=!1}))}setValue(e){this.value=e,this.refresh()}installStylesheetElement(){document.head.insertBefore(this.stylesheetElement,document.head.firstChild)}installProgressElement(){this.progressElement.style.width="0",this.progressElement.style.opacity="1",document.documentElement.insertBefore(this.progressElement,document.body),this.refresh()}fadeProgressElement(e){this.progressElement.style.opacity="0",setTimeout(e,se.animationDuration*1.5)}uninstallProgressElement(){this.progressElement.parentNode&&document.documentElement.removeChild(this.progressElement)}startTrickling(){this.trickleInterval||(this.trickleInterval=window.setInterval(this.trickle,se.animationDuration))}stopTrickling(){window.clearInterval(this.trickleInterval),delete this.trickleInterval}refresh(){requestAnimationFrame(()=>{this.progressElement.style.width=`${10+this.value*90}%`})}createStylesheetElement(){let e=document.createElement("style");return e.type="text/css",e.textContent=se.defaultCSS,e}createProgressElement(){let e=document.createElement("div");return e.className="turbo-progress-bar",e}};se.animationDuration=300;var xi=class extends dt{constructor(){super(...arguments);this.detailsByOuterHTML=this.children.filter(e=>!La(e)).reduce((e,r)=>{let{outerHTML:i}=r,n=i in e?e[i]:{type:Aa(r),tracked:Oa(r),elements:[]};return Object.assign(Object.assign({},e),{[i]:Object.assign(Object.assign({},n),{elements:[...n.elements,r]})})},{})}get trackedElementSignature(){return Object.keys(this.detailsByOuterHTML).filter(e=>this.detailsByOuterHTML[e].tracked).join("")}getScriptElementsNotInSnapshot(e){return this.getElementsMatchingTypeNotInSnapshot("script",e)}getStylesheetElementsNotInSnapshot(e){return this.getElementsMatchingTypeNotInSnapshot("stylesheet",e)}getElementsMatchingTypeNotInSnapshot(e,r){return Object.keys(this.detailsByOuterHTML).filter(i=>!(i in r.detailsByOuterHTML)).map(i=>this.detailsByOuterHTML[i]).filter(({type:i})=>i==e).map(({elements:[i]})=>i)}get provisionalElements(){return Object.keys(this.detailsByOuterHTML).reduce((e,r)=>{let{type:i,tracked:n,elements:s}=this.detailsByOuterHTML[r];return i==null&&!n?[...e,...s]:s.length>1?[...e,...s.slice(1)]:e},[])}getMetaValue(e){let r=this.findMetaElementByName(e);return r?r.getAttribute("content"):null}findMetaElementByName(e){return Object.keys(this.detailsByOuterHTML).reduce((r,i)=>{let{elements:[n]}=this.detailsByOuterHTML[i];return Pa(n,e)?n:r},void 0)}};function Aa(t){if(Ca(t))return"script";if(Ia(t))return"stylesheet"}function Oa(t){return t.getAttribute("data-turbo-track")=="reload"}function Ca(t){return t.tagName.toLowerCase()=="script"}function La(t){return t.tagName.toLowerCase()=="noscript"}function Ia(t){let e=t.tagName.toLowerCase();return e=="style"||e=="link"&&t.getAttribute("rel")=="stylesheet"}function Pa(t,e){return t.tagName.toLowerCase()=="meta"&&t.getAttribute("name")==e}var me=class extends dt{constructor(e,r){super(e);this.headSnapshot=r}static fromHTMLString(e=""){return this.fromDocument(Ci(e))}static fromElement(e){return this.fromDocument(e.ownerDocument)}static fromDocument({head:e,body:r}){return new this(r,new xi(e))}clone(){return new me(this.element.cloneNode(!0),this.headSnapshot)}get headElement(){return this.headSnapshot.element}get rootLocation(){var e;let r=(e=this.getSetting("root"))!==null&&e!==void 0?e:"/";return ne(r)}get cacheControlValue(){return this.getSetting("cache-control")}get isPreviewable(){return this.cacheControlValue!="no-preview"}get isCacheable(){return this.cacheControlValue!="no-cache"}get isVisitable(){return this.getSetting("visit-control")!="reload"}getSetting(e){return this.headSnapshot.getMetaValue(`turbo-${e}`)}},Je;(function(t){t.visitStart="visitStart",t.requestStart="requestStart",t.requestEnd="requestEnd",t.visitEnd="visitEnd"})(Je||(Je={}));var X;(function(t){t.initialized="initialized",t.started="started",t.canceled="canceled",t.failed="failed",t.completed="completed"})(X||(X={}));var Ma={action:"advance",historyChanged:!1},Oe;(function(t){t[t.networkFailure=0]="networkFailure",t[t.timeoutFailure=-1]="timeoutFailure",t[t.contentTypeMismatch=-2]="contentTypeMismatch"})(Oe||(Oe={}));var Ni=class{constructor(e,r,i,n={}){this.identifier=ht(),this.timingMetrics={},this.followedRedirect=!1,this.historyChanged=!1,this.scrolled=!1,this.snapshotCached=!1,this.state=X.initialized,this.delegate=e,this.location=r,this.restorationIdentifier=i||ht();let{action:s,historyChanged:o,referrer:a,snapshotHTML:l,response:u}=Object.assign(Object.assign({},Ma),n);this.action=s,this.historyChanged=o,this.referrer=a,this.snapshotHTML=l,this.response=u,this.isSamePage=this.delegate.locationWithActionIsSamePage(this.location,this.action)}get adapter(){return this.delegate.adapter}get view(){return this.delegate.view}get history(){return this.delegate.history}get restorationData(){return this.history.getRestorationDataForIdentifier(this.restorationIdentifier)}get silent(){return this.isSamePage}start(){this.state==X.initialized&&(this.recordTimingMetric(Je.visitStart),this.state=X.started,this.adapter.visitStarted(this),this.delegate.visitStarted(this))}cancel(){this.state==X.started&&(this.request&&this.request.cancel(),this.cancelRender(),this.state=X.canceled)}complete(){this.state==X.started&&(this.recordTimingMetric(Je.visitEnd),this.state=X.completed,this.adapter.visitCompleted(this),this.delegate.visitCompleted(this),this.followRedirect())}fail(){this.state==X.started&&(this.state=X.failed,this.adapter.visitFailed(this))}changeHistory(){var e;if(!this.historyChanged){let r=this.location.href===((e=this.referrer)===null||e===void 0?void 0:e.href)?"replace":this.action,i=this.getHistoryMethodForAction(r);this.history.update(i,this.location,this.restorationIdentifier),this.historyChanged=!0}}issueRequest(){this.hasPreloadedResponse()?this.simulateRequest():this.shouldIssueRequest()&&!this.request&&(this.request=new jt(this,F.get,this.location),this.request.perform())}simulateRequest(){this.response&&(this.startRequest(),this.recordResponse(),this.finishRequest())}startRequest(){this.recordTimingMetric(Je.requestStart),this.adapter.visitRequestStarted(this)}recordResponse(e=this.response){if(this.response=e,e){let{statusCode:r}=e;_i(r)?this.adapter.visitRequestCompleted(this):this.adapter.visitRequestFailedWithStatusCode(this,r)}}finishRequest(){this.recordTimingMetric(Je.requestEnd),this.adapter.visitRequestFinished(this)}loadResponse(){if(this.response){let{statusCode:e,responseHTML:r}=this.response;this.render(async()=>{this.cacheSnapshot(),this.view.renderPromise&&await this.view.renderPromise,_i(e)&&r!=null?(await this.view.renderPage(me.fromHTMLString(r)),this.adapter.visitRendered(this),this.complete()):(await this.view.renderError(me.fromHTMLString(r)),this.adapter.visitRendered(this),this.fail())})}}getCachedSnapshot(){let e=this.view.getCachedSnapshotForLocation(this.location)||this.getPreloadedSnapshot();if(e&&(!xe(this.location)||e.hasAnchor(xe(this.location)))&&(this.action=="restore"||e.isPreviewable))return e}getPreloadedSnapshot(){if(this.snapshotHTML)return me.fromHTMLString(this.snapshotHTML)}hasCachedSnapshot(){return this.getCachedSnapshot()!=null}loadCachedSnapshot(){let e=this.getCachedSnapshot();if(e){let r=this.shouldIssueRequest();this.render(async()=>{this.cacheSnapshot(),this.isSamePage?this.adapter.visitRendered(this):(this.view.renderPromise&&await this.view.renderPromise,await this.view.renderPage(e,r),this.adapter.visitRendered(this),r||this.complete())})}}followRedirect(){this.redirectedToLocation&&!this.followedRedirect&&(this.adapter.visitProposedToLocation(this.redirectedToLocation,{action:"replace",response:this.response}),this.followedRedirect=!0)}goToSamePageAnchor(){this.isSamePage&&this.render(async()=>{this.cacheSnapshot(),this.adapter.visitRendered(this)})}requestStarted(){this.startRequest()}requestPreventedHandlingResponse(e,r){}async requestSucceededWithResponse(e,r){let i=await r.responseHTML;i==null?this.recordResponse({statusCode:Oe.contentTypeMismatch}):(this.redirectedToLocation=r.redirected?r.location:void 0,this.recordResponse({statusCode:r.statusCode,responseHTML:i}))}async requestFailedWithResponse(e,r){let i=await r.responseHTML;i==null?this.recordResponse({statusCode:Oe.contentTypeMismatch}):this.recordResponse({statusCode:r.statusCode,responseHTML:i})}requestErrored(e,r){this.recordResponse({statusCode:Oe.networkFailure})}requestFinished(){this.finishRequest()}performScroll(){this.scrolled||(this.action=="restore"?this.scrollToRestoredPosition()||this.scrollToAnchor()||this.view.scrollToTop():this.scrollToAnchor()||this.view.scrollToTop(),this.isSamePage&&this.delegate.visitScrolledToSamePageLocation(this.view.lastRenderedLocation,this.location),this.scrolled=!0)}scrollToRestoredPosition(){let{scrollPosition:e}=this.restorationData;if(e)return this.view.scrollToPosition(e),!0}scrollToAnchor(){let e=xe(this.location);if(e!=null)return this.view.scrollToAnchor(e),!0}recordTimingMetric(e){this.timingMetrics[e]=new Date().getTime()}getTimingMetrics(){return Object.assign({},this.timingMetrics)}getHistoryMethodForAction(e){switch(e){case"replace":return history.replaceState;case"advance":case"restore":return history.pushState}}hasPreloadedResponse(){return typeof this.response=="object"}shouldIssueRequest(){return this.isSamePage?!1:this.action=="restore"?!this.hasCachedSnapshot():!0}cacheSnapshot(){this.snapshotCached||(this.view.cacheSnapshot(),this.snapshotCached=!0)}async render(e){this.cancelRender(),await new Promise(r=>{this.frame=requestAnimationFrame(()=>r())}),await e(),delete this.frame,this.performScroll()}cancelRender(){this.frame&&(cancelAnimationFrame(this.frame),delete this.frame)}};function _i(t){return t>=200&&t<300}var Fi=class{constructor(e){this.progressBar=new se,this.showProgressBar=()=>{this.progressBar.show()},this.session=e}visitProposedToLocation(e,r){this.navigator.startVisit(e,ht(),r)}visitStarted(e){e.issueRequest(),e.changeHistory(),e.goToSamePageAnchor(),e.loadCachedSnapshot()}visitRequestStarted(e){this.progressBar.setValue(0),e.hasCachedSnapshot()||e.action!="restore"?this.showVisitProgressBarAfterDelay():this.showProgressBar()}visitRequestCompleted(e){e.loadResponse()}visitRequestFailedWithStatusCode(e,r){switch(r){case Oe.networkFailure:case Oe.timeoutFailure:case Oe.contentTypeMismatch:return this.reload();default:return e.loadResponse()}}visitRequestFinished(e){this.progressBar.setValue(1),this.hideVisitProgressBar()}visitCompleted(e){}pageInvalidated(){this.reload()}visitFailed(e){}visitRendered(e){}formSubmissionStarted(e){this.progressBar.setValue(0),this.showFormProgressBarAfterDelay()}formSubmissionFinished(e){this.progressBar.setValue(1),this.hideFormProgressBar()}showVisitProgressBarAfterDelay(){this.visitProgressBarTimeout=window.setTimeout(this.showProgressBar,this.session.progressBarDelay)}hideVisitProgressBar(){this.progressBar.hide(),this.visitProgressBarTimeout!=null&&(window.clearTimeout(this.visitProgressBarTimeout),delete this.visitProgressBarTimeout)}showFormProgressBarAfterDelay(){this.formProgressBarTimeout==null&&(this.formProgressBarTimeout=window.setTimeout(this.showProgressBar,this.session.progressBarDelay))}hideFormProgressBar(){this.progressBar.hide(),this.formProgressBarTimeout!=null&&(window.clearTimeout(this.formProgressBarTimeout),delete this.formProgressBarTimeout)}reload(){window.location.reload()}get navigator(){return this.session.navigator}},Hi=class{constructor(){this.started=!1}start(){this.started||(this.started=!0,addEventListener("turbo:before-cache",this.removeStaleElements,!1))}stop(){this.started&&(this.started=!1,removeEventListener("turbo:before-cache",this.removeStaleElements,!1))}removeStaleElements(){let e=[...document.querySelectorAll('[data-turbo-cache="false"]')];for(let r of e)r.remove()}},Vi=class{constructor(e){this.started=!1,this.submitCaptured=()=>{removeEventListener("submit",this.submitBubbled,!1),addEventListener("submit",this.submitBubbled,!1)},this.submitBubbled=r=>{if(!r.defaultPrevented){let i=r.target instanceof HTMLFormElement?r.target:void 0,n=r.submitter||void 0;i&&((n==null?void 0:n.getAttribute("formmethod"))||i.method)!="dialog"&&this.delegate.willSubmitForm(i,n)&&(r.preventDefault(),this.delegate.formSubmitted(i,n))}},this.delegate=e}start(){this.started||(addEventListener("submit",this.submitCaptured,!0),this.started=!0)}stop(){this.started&&(removeEventListener("submit",this.submitCaptured,!0),this.started=!1)}},Bi=class{constructor(e){this.element=e,this.linkInterceptor=new Cr(this,e),this.formInterceptor=new Ar(this,e)}start(){this.linkInterceptor.start(),this.formInterceptor.start()}stop(){this.linkInterceptor.stop(),this.formInterceptor.stop()}shouldInterceptLinkClick(e,r){return this.shouldRedirect(e)}linkClickIntercepted(e,r){let i=this.findFrameElement(e);i&&(i.setAttribute("reloadable",""),i.src=r)}shouldInterceptFormSubmission(e,r){return this.shouldRedirect(e,r)}formSubmissionIntercepted(e,r){let i=this.findFrameElement(e);i&&(i.removeAttribute("reloadable"),i.delegate.formSubmissionIntercepted(e,r))}shouldRedirect(e,r){let i=this.findFrameElement(e);return i?i!=e.closest("turbo-frame"):!1}findFrameElement(e){let r=e.getAttribute("data-turbo-frame");if(r&&r!="_top"){let i=this.element.querySelector(`#${r}:not([disabled])`);if(i instanceof fe)return i}}},ji=class{constructor(e){this.restorationIdentifier=ht(),this.restorationData={},this.started=!1,this.pageLoaded=!1,this.onPopState=r=>{if(this.shouldHandlePopState()){let{turbo:i}=r.state||{};if(i){this.location=new URL(window.location.href);let{restorationIdentifier:n}=i;this.restorationIdentifier=n,this.delegate.historyPoppedToLocationWithRestorationIdentifier(this.location,n)}}},this.onPageLoad=async r=>{await fa(),this.pageLoaded=!0},this.delegate=e}start(){this.started||(addEventListener("popstate",this.onPopState,!1),addEventListener("load",this.onPageLoad,!1),this.started=!0,this.replace(new URL(window.location.href)))}stop(){this.started&&(removeEventListener("popstate",this.onPopState,!1),removeEventListener("load",this.onPageLoad,!1),this.started=!1)}push(e,r){this.update(history.pushState,e,r)}replace(e,r){this.update(history.replaceState,e,r)}update(e,r,i=ht()){let n={turbo:{restorationIdentifier:i}};e.call(history,n,"",r.href),this.location=r,this.restorationIdentifier=i}getRestorationDataForIdentifier(e){return this.restorationData[e]||{}}updateRestorationData(e){let{restorationIdentifier:r}=this,i=this.restorationData[r];this.restorationData[r]=Object.assign(Object.assign({},i),e)}assumeControlOfScrollRestoration(){var e;this.previousScrollRestoration||(this.previousScrollRestoration=(e=history.scrollRestoration)!==null&&e!==void 0?e:"auto",history.scrollRestoration="manual")}relinquishControlOfScrollRestoration(){this.previousScrollRestoration&&(history.scrollRestoration=this.previousScrollRestoration,delete this.previousScrollRestoration)}shouldHandlePopState(){return this.pageIsLoaded()}pageIsLoaded(){return this.pageLoaded||document.readyState=="complete"}},Ui=class{constructor(e){this.started=!1,this.clickCaptured=()=>{removeEventListener("click",this.clickBubbled,!1),addEventListener("click",this.clickBubbled,!1)},this.clickBubbled=r=>{if(this.clickEventIsSignificant(r)){let i=r.composedPath&&r.composedPath()[0]||r.target,n=this.findLinkFromClickTarget(i);if(n){let s=this.getLocationForLink(n);this.delegate.willFollowLinkToLocation(n,s)&&(r.preventDefault(),this.delegate.followedLinkToLocation(n,s))}}},this.delegate=e}start(){this.started||(addEventListener("click",this.clickCaptured,!0),this.started=!0)}stop(){this.started&&(removeEventListener("click",this.clickCaptured,!0),this.started=!1)}clickEventIsSignificant(e){return!(e.target&&e.target.isContentEditable||e.defaultPrevented||e.which>1||e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)}findLinkFromClickTarget(e){if(e instanceof Element)return e.closest("a[href]:not([target^=_]):not([download])")}getLocationForLink(e){return ne(e.getAttribute("href")||"")}};function qi(t){return t=="advance"||t=="replace"||t=="restore"}var $i=class{constructor(e){this.delegate=e}proposeVisit(e,r={}){this.delegate.allowsVisitingLocationWithAction(e,r.action)&&this.delegate.visitProposedToLocation(e,r)}startVisit(e,r,i={}){this.stop(),this.currentVisit=new Ni(this,ne(e),r,Object.assign({referrer:this.location},i)),this.currentVisit.start()}submitForm(e,r){this.stop(),this.formSubmission=new kr(this,e,r,!0),this.formSubmission.isIdempotent?this.proposeVisit(this.formSubmission.fetchRequest.url,{action:this.getActionForFormSubmission(this.formSubmission)}):this.formSubmission.start()}stop(){this.formSubmission&&(this.formSubmission.stop(),delete this.formSubmission),this.currentVisit&&(this.currentVisit.cancel(),delete this.currentVisit)}get adapter(){return this.delegate.adapter}get view(){return this.delegate.view}get history(){return this.delegate.history}formSubmissionStarted(e){typeof this.adapter.formSubmissionStarted=="function"&&this.adapter.formSubmissionStarted(e)}async formSubmissionSucceededWithResponse(e,r){if(e==this.formSubmission){let i=await r.responseHTML;if(i){e.method!=F.get&&this.view.clearSnapshotCache();let{statusCode:n}=r,s={response:{statusCode:n,responseHTML:i}};this.proposeVisit(r.location,s)}}}async formSubmissionFailedWithResponse(e,r){let i=await r.responseHTML;if(i){let n=me.fromHTMLString(i);r.serverError?await this.view.renderError(n):await this.view.renderPage(n),this.view.scrollToTop(),this.view.clearSnapshotCache()}}formSubmissionErrored(e,r){console.error(r)}formSubmissionFinished(e){typeof this.adapter.formSubmissionFinished=="function"&&this.adapter.formSubmissionFinished(e)}visitStarted(e){this.delegate.visitStarted(e)}visitCompleted(e){this.delegate.visitCompleted(e)}locationWithActionIsSamePage(e,r){let i=xe(e),n=xe(this.view.lastRenderedLocation),s=r==="restore"&&typeof i=="undefined";return r!=="replace"&&Er(e)===Er(this.view.lastRenderedLocation)&&(s||i!=null&&i!==n)}visitScrolledToSamePageLocation(e,r){this.delegate.visitScrolledToSamePageLocation(e,r)}get location(){return this.history.location}get restorationIdentifier(){return this.history.restorationIdentifier}getActionForFormSubmission(e){let{formElement:r,submitter:i}=e,n=(i==null?void 0:i.getAttribute("data-turbo-action"))||r.getAttribute("data-turbo-action");return qi(n)?n:"advance"}},pe;(function(t){t[t.initial=0]="initial",t[t.loading=1]="loading",t[t.interactive=2]="interactive",t[t.complete=3]="complete"})(pe||(pe={}));var Wi=class{constructor(e){this.stage=pe.initial,this.started=!1,this.interpretReadyState=()=>{let{readyState:r}=this;r=="interactive"?this.pageIsInteractive():r=="complete"&&this.pageIsComplete()},this.pageWillUnload=()=>{this.delegate.pageWillUnload()},this.delegate=e}start(){this.started||(this.stage==pe.initial&&(this.stage=pe.loading),document.addEventListener("readystatechange",this.interpretReadyState,!1),addEventListener("pagehide",this.pageWillUnload,!1),this.started=!0)}stop(){this.started&&(document.removeEventListener("readystatechange",this.interpretReadyState,!1),removeEventListener("pagehide",this.pageWillUnload,!1),this.started=!1)}pageIsInteractive(){this.stage==pe.loading&&(this.stage=pe.interactive,this.delegate.pageBecameInteractive())}pageIsComplete(){this.pageIsInteractive(),this.stage==pe.interactive&&(this.stage=pe.complete,this.delegate.pageLoaded())}get readyState(){return document.readyState}},zi=class{constructor(e){this.started=!1,this.onScroll=()=>{this.updatePosition({x:window.pageXOffset,y:window.pageYOffset})},this.delegate=e}start(){this.started||(addEventListener("scroll",this.onScroll,!1),this.onScroll(),this.started=!0)}stop(){this.started&&(removeEventListener("scroll",this.onScroll,!1),this.started=!1)}updatePosition(e){this.delegate.scrollPositionChanged(e)}},Zi=class{constructor(e){this.sources=new Set,this.started=!1,this.inspectFetchResponse=r=>{let i=Ra(r);i&&Da(i)&&(r.preventDefault(),this.receiveMessageResponse(i))},this.receiveMessageEvent=r=>{this.started&&typeof r.data=="string"&&this.receiveMessageHTML(r.data)},this.delegate=e}start(){this.started||(this.started=!0,addEventListener("turbo:before-fetch-response",this.inspectFetchResponse,!1))}stop(){this.started&&(this.started=!1,removeEventListener("turbo:before-fetch-response",this.inspectFetchResponse,!1))}connectStreamSource(e){this.streamSourceIsConnected(e)||(this.sources.add(e),e.addEventListener("message",this.receiveMessageEvent,!1))}disconnectStreamSource(e){this.streamSourceIsConnected(e)&&(this.sources.delete(e),e.removeEventListener("message",this.receiveMessageEvent,!1))}streamSourceIsConnected(e){return this.sources.has(e)}async receiveMessageResponse(e){let r=await e.responseHTML;r&&this.receiveMessageHTML(r)}receiveMessageHTML(e){this.delegate.receivedMessageFromStream(new Ze(e))}};function Ra(t){var e;let r=(e=t.detail)===null||e===void 0?void 0:e.fetchResponse;if(r instanceof Tr)return r}function Da(t){var e;return((e=t.contentType)!==null&&e!==void 0?e:"").startsWith(Ze.contentType)}var Ji=class extends Ut{async render(){this.replaceHeadAndBody(),this.activateScriptElements()}replaceHeadAndBody(){let{documentElement:e,head:r,body:i}=document;e.replaceChild(this.newHead,r),e.replaceChild(this.newElement,i)}activateScriptElements(){for(let e of this.scriptElements){let r=e.parentNode;if(r){let i=this.createScriptElement(e);r.replaceChild(i,e)}}}get newHead(){return this.newSnapshot.headSnapshot.element}get scriptElements(){return[...document.documentElement.querySelectorAll("script")]}},Lr=class extends Ut{get shouldRender(){return this.newSnapshot.isVisitable&&this.trackedElementsAreIdentical}prepareToRender(){this.mergeHead()}async render(){this.replaceBody()}finishRendering(){super.finishRendering(),this.isPreview||this.focusFirstAutofocusableElement()}get currentHeadSnapshot(){return this.currentSnapshot.headSnapshot}get newHeadSnapshot(){return this.newSnapshot.headSnapshot}get newElement(){return this.newSnapshot.element}mergeHead(){this.copyNewHeadStylesheetElements(),this.copyNewHeadScriptElements(),this.removeCurrentHeadProvisionalElements(),this.copyNewHeadProvisionalElements()}replaceBody(){this.preservingPermanentElements(()=>{this.activateNewBody(),this.assignNewBody()})}get trackedElementsAreIdentical(){return this.currentHeadSnapshot.trackedElementSignature==this.newHeadSnapshot.trackedElementSignature}copyNewHeadStylesheetElements(){for(let e of this.newHeadStylesheetElements)document.head.appendChild(e)}copyNewHeadScriptElements(){for(let e of this.newHeadScriptElements)document.head.appendChild(this.createScriptElement(e))}removeCurrentHeadProvisionalElements(){for(let e of this.currentHeadProvisionalElements)document.head.removeChild(e)}copyNewHeadProvisionalElements(){for(let e of this.newHeadProvisionalElements)document.head.appendChild(e)}activateNewBody(){document.adoptNode(this.newElement),this.activateNewBodyScriptElements()}activateNewBodyScriptElements(){for(let e of this.newBodyScriptElements){let r=this.createScriptElement(e);e.replaceWith(r)}}assignNewBody(){document.body&&this.newElement instanceof HTMLBodyElement?document.body.replaceWith(this.newElement):document.documentElement.appendChild(this.newElement)}get newHeadStylesheetElements(){return this.newHeadSnapshot.getStylesheetElementsNotInSnapshot(this.currentHeadSnapshot)}get newHeadScriptElements(){return this.newHeadSnapshot.getScriptElementsNotInSnapshot(this.currentHeadSnapshot)}get currentHeadProvisionalElements(){return this.currentHeadSnapshot.provisionalElements}get newHeadProvisionalElements(){return this.newHeadSnapshot.provisionalElements}get newBodyScriptElements(){return this.newElement.querySelectorAll("script")}},Ki=class{constructor(e){this.keys=[],this.snapshots={},this.size=e}has(e){return Vt(e)in this.snapshots}get(e){if(this.has(e)){let r=this.read(e);return this.touch(e),r}}put(e,r){return this.write(e,r),this.touch(e),r}clear(){this.snapshots={}}read(e){return this.snapshots[Vt(e)]}write(e,r){this.snapshots[Vt(e)]=r}touch(e){let r=Vt(e),i=this.keys.indexOf(r);i>-1&&this.keys.splice(i,1),this.keys.unshift(r),this.trim()}trim(){for(let e of this.keys.splice(this.size))delete this.snapshots[e]}},Gi=class extends Or{constructor(){super(...arguments);this.snapshotCache=new Ki(10),this.lastRenderedLocation=new URL(location.href)}renderPage(e,r=!1){let i=new Lr(this.snapshot,e,r);return this.render(i)}renderError(e){let r=new Ji(this.snapshot,e,!1);return this.render(r)}clearSnapshotCache(){this.snapshotCache.clear()}async cacheSnapshot(){if(this.shouldCacheSnapshot){this.delegate.viewWillCacheSnapshot();let{snapshot:e,lastRenderedLocation:r}=this;await da(),this.snapshotCache.put(r,e.clone())}}getCachedSnapshotForLocation(e){return this.snapshotCache.get(e)}get snapshot(){return me.fromElement(this.element)}get shouldCacheSnapshot(){return this.snapshot.isCacheable}},Yi=class{constructor(){this.navigator=new $i(this),this.history=new ji(this),this.view=new Gi(this,document.documentElement),this.adapter=new Fi(this),this.pageObserver=new Wi(this),this.cacheObserver=new Hi,this.linkClickObserver=new Ui(this),this.formSubmitObserver=new Vi(this),this.scrollObserver=new zi(this),this.streamObserver=new Zi(this),this.frameRedirector=new Bi(document.documentElement),this.drive=!0,this.enabled=!0,this.progressBarDelay=500,this.started=!1}start(){this.started||(this.pageObserver.start(),this.cacheObserver.start(),this.linkClickObserver.start(),this.formSubmitObserver.start(),this.scrollObserver.start(),this.streamObserver.start(),this.frameRedirector.start(),this.history.start(),this.started=!0,this.enabled=!0)}disable(){this.enabled=!1}stop(){this.started&&(this.pageObserver.stop(),this.cacheObserver.stop(),this.linkClickObserver.stop(),this.formSubmitObserver.stop(),this.scrollObserver.stop(),this.streamObserver.stop(),this.frameRedirector.stop(),this.history.stop(),this.started=!1)}registerAdapter(e){this.adapter=e}visit(e,r={}){this.navigator.proposeVisit(ne(e),r)}connectStreamSource(e){this.streamObserver.connectStreamSource(e)}disconnectStreamSource(e){this.streamObserver.disconnectStreamSource(e)}renderStreamMessage(e){document.documentElement.appendChild(Ze.wrap(e).fragment)}clearCache(){this.view.clearSnapshotCache()}setProgressBarDelay(e){this.progressBarDelay=e}get location(){return this.history.location}get restorationIdentifier(){return this.history.restorationIdentifier}historyPoppedToLocationWithRestorationIdentifier(e,r){this.enabled?this.navigator.startVisit(e,r,{action:"restore",historyChanged:!0}):this.adapter.pageInvalidated()}scrollPositionChanged(e){this.history.updateRestorationData({scrollPosition:e})}willFollowLinkToLocation(e,r){return this.elementDriveEnabled(e)&&this.locationIsVisitable(r)&&this.applicationAllowsFollowingLinkToLocation(e,r)}followedLinkToLocation(e,r){let i=this.getActionForLink(e);this.convertLinkWithMethodClickToFormSubmission(e)||this.visit(r.href,{action:i})}convertLinkWithMethodClickToFormSubmission(e){let r=e.getAttribute("data-turbo-method");if(r){let i=document.createElement("form");return i.method=r,i.action=e.getAttribute("href")||"undefined",document.body.appendChild(i),_("submit",{cancelable:!0,target:i})}else return!1}allowsVisitingLocationWithAction(e,r){return this.locationWithActionIsSamePage(e,r)||this.applicationAllowsVisitingLocation(e)}visitProposedToLocation(e,r){Xi(e),this.adapter.visitProposedToLocation(e,r)}visitStarted(e){Xi(e.location),e.silent||this.notifyApplicationAfterVisitingLocation(e.location,e.action)}visitCompleted(e){this.notifyApplicationAfterPageLoad(e.getTimingMetrics())}locationWithActionIsSamePage(e,r){return this.navigator.locationWithActionIsSamePage(e,r)}visitScrolledToSamePageLocation(e,r){this.notifyApplicationAfterVisitingSamePageLocation(e,r)}willSubmitForm(e,r){return this.elementDriveEnabled(e)&&this.elementDriveEnabled(r)}formSubmitted(e,r){this.navigator.submitForm(e,r)}pageBecameInteractive(){this.view.lastRenderedLocation=this.location,this.notifyApplicationAfterPageLoad()}pageLoaded(){this.history.assumeControlOfScrollRestoration()}pageWillUnload(){this.history.relinquishControlOfScrollRestoration()}receivedMessageFromStream(e){this.renderStreamMessage(e)}viewWillCacheSnapshot(){var e;((e=this.navigator.currentVisit)===null||e===void 0?void 0:e.silent)||this.notifyApplicationBeforeCachingSnapshot()}allowsImmediateRender({element:e},r){return!this.notifyApplicationBeforeRender(e,r).defaultPrevented}viewRenderedSnapshot(e,r){this.view.lastRenderedLocation=this.history.location,this.notifyApplicationAfterRender()}viewInvalidated(){this.adapter.pageInvalidated()}frameLoaded(e){this.notifyApplicationAfterFrameLoad(e)}frameRendered(e,r){this.notifyApplicationAfterFrameRender(e,r)}applicationAllowsFollowingLinkToLocation(e,r){return!this.notifyApplicationAfterClickingLinkToLocation(e,r).defaultPrevented}applicationAllowsVisitingLocation(e){return!this.notifyApplicationBeforeVisitingLocation(e).defaultPrevented}notifyApplicationAfterClickingLinkToLocation(e,r){return _("turbo:click",{target:e,detail:{url:r.href},cancelable:!0})}notifyApplicationBeforeVisitingLocation(e){return _("turbo:before-visit",{detail:{url:e.href},cancelable:!0})}notifyApplicationAfterVisitingLocation(e,r){return _("turbo:visit",{detail:{url:e.href,action:r}})}notifyApplicationBeforeCachingSnapshot(){return _("turbo:before-cache")}notifyApplicationBeforeRender(e,r){return _("turbo:before-render",{detail:{newBody:e,resume:r},cancelable:!0})}notifyApplicationAfterRender(){return _("turbo:render")}notifyApplicationAfterPageLoad(e={}){return _("turbo:load",{detail:{url:this.location.href,timing:e}})}notifyApplicationAfterVisitingSamePageLocation(e,r){dispatchEvent(new HashChangeEvent("hashchange",{oldURL:e.toString(),newURL:r.toString()}))}notifyApplicationAfterFrameLoad(e){return _("turbo:frame-load",{target:e})}notifyApplicationAfterFrameRender(e,r){return _("turbo:frame-render",{detail:{fetchResponse:e},target:r,cancelable:!0})}elementDriveEnabled(e){let r=e==null?void 0:e.closest("[data-turbo]");return this.drive?r?r.getAttribute("data-turbo")!="false":!0:r?r.getAttribute("data-turbo")=="true":!1}getActionForLink(e){let r=e.getAttribute("data-turbo-action");return qi(r)?r:"advance"}locationIsVisitable(e){return oa(e,this.snapshot.rootLocation)&&sa(e)}get snapshot(){return this.view.snapshot}};function Xi(t){Object.defineProperties(t,xa)}var xa={absoluteURL:{get(){return this.toString()}}},H=new Yi,{navigator:Na}=H;function Qi(){H.start()}function _a(t){H.registerAdapter(t)}function Fa(t,e){H.visit(t,e)}function Ha(t){H.connectStreamSource(t)}function Va(t){H.disconnectStreamSource(t)}function Ba(t){H.renderStreamMessage(t)}function ja(){H.clearCache()}function Ua(t){H.setProgressBarDelay(t)}var qa=Object.freeze({__proto__:null,navigator:Na,session:H,PageRenderer:Lr,PageSnapshot:me,start:Qi,registerAdapter:_a,visit:Fa,connectStreamSource:Ha,disconnectStreamSource:Va,renderStreamMessage:Ba,clearCache:ja,setProgressBarDelay:Ua}),en=class{constructor(e){this.resolveVisitPromise=()=>{},this.connected=!1,this.hasBeenLoaded=!1,this.settingSourceURL=!1,this.element=e,this.view=new Mi(this,this.element),this.appearanceObserver=new Ii(this,this.element),this.linkInterceptor=new Cr(this,this.element),this.formInterceptor=new Ar(this,this.element)}connect(){this.connected||(this.connected=!0,this.reloadable=!1,this.loadingStyle==Te.lazy&&this.appearanceObserver.start(),this.linkInterceptor.start(),this.formInterceptor.start(),this.sourceURLChanged())}disconnect(){this.connected&&(this.connected=!1,this.appearanceObserver.stop(),this.linkInterceptor.stop(),this.formInterceptor.stop())}disabledChanged(){this.loadingStyle==Te.eager&&this.loadSourceURL()}sourceURLChanged(){(this.loadingStyle==Te.eager||this.hasBeenLoaded)&&this.loadSourceURL()}loadingStyleChanged(){this.loadingStyle==Te.lazy?this.appearanceObserver.start():(this.appearanceObserver.stop(),this.loadSourceURL())}async loadSourceURL(){if(!this.settingSourceURL&&this.enabled&&this.isActive&&(this.reloadable||this.sourceURL!=this.currentURL)){let e=this.currentURL;if(this.currentURL=this.sourceURL,this.sourceURL)try{this.element.loaded=this.visit(this.sourceURL),this.appearanceObserver.stop(),await this.element.loaded,this.hasBeenLoaded=!0,H.frameLoaded(this.element)}catch(r){throw this.currentURL=e,r}}}async loadResponse(e){e.redirected&&(this.sourceURL=e.response.url);try{let r=await e.responseHTML;if(r){let{body:i}=Ci(r),n=new dt(await this.extractForeignFrameElement(i)),s=new Di(this.view.snapshot,n,!1);this.view.renderPromise&&await this.view.renderPromise,await this.view.render(s),H.frameRendered(e,this.element)}}catch(r){console.error(r),this.view.invalidate()}}elementAppearedInViewport(e){this.loadSourceURL()}shouldInterceptLinkClick(e,r){return e.hasAttribute("data-turbo-method")?!1:this.shouldInterceptNavigation(e)}linkClickIntercepted(e,r){this.reloadable=!0,this.navigateFrame(e,r)}shouldInterceptFormSubmission(e,r){return this.shouldInterceptNavigation(e,r)}formSubmissionIntercepted(e,r){if(this.formSubmission&&this.formSubmission.stop(),this.reloadable=!1,this.formSubmission=new kr(this,e,r),this.formSubmission.fetchRequest.isIdempotent)this.navigateFrame(e,this.formSubmission.fetchRequest.url.href);else{let{fetchRequest:i}=this.formSubmission;this.prepareHeadersForRequest(i.headers,i),this.formSubmission.start()}}prepareHeadersForRequest(e,r){e["Turbo-Frame"]=this.id}requestStarted(e){this.element.setAttribute("busy","")}requestPreventedHandlingResponse(e,r){this.resolveVisitPromise()}async requestSucceededWithResponse(e,r){await this.loadResponse(r),this.resolveVisitPromise()}requestFailedWithResponse(e,r){console.error(r),this.resolveVisitPromise()}requestErrored(e,r){console.error(r),this.resolveVisitPromise()}requestFinished(e){this.element.removeAttribute("busy")}formSubmissionStarted(e){this.findFrameElement(e.formElement).setAttribute("busy","")}formSubmissionSucceededWithResponse(e,r){this.findFrameElement(e.formElement).delegate.loadResponse(r)}formSubmissionFailedWithResponse(e,r){this.element.delegate.loadResponse(r)}formSubmissionErrored(e,r){console.error(r)}formSubmissionFinished(e){this.findFrameElement(e.formElement).removeAttribute("busy")}allowsImmediateRender(e,r){return!0}viewRenderedSnapshot(e,r){}viewInvalidated(){}async visit(e){let r=new jt(this,F.get,ne(e));return new Promise(i=>{this.resolveVisitPromise=()=>{this.resolveVisitPromise=()=>{},i()},r.perform()})}navigateFrame(e,r){let i=this.findFrameElement(e);i.src=r}findFrameElement(e){var r;let i=e.getAttribute("data-turbo-frame")||this.element.getAttribute("target");return(r=tn(i))!==null&&r!==void 0?r:this.element}async extractForeignFrameElement(e){let r,i=CSS.escape(this.id);try{if(r=rn(e.querySelector(`turbo-frame#${i}`),this.currentURL))return r;if(r=rn(e.querySelector(`turbo-frame[src][recurse~=${i}]`),this.currentURL))return await r.loaded,await this.extractForeignFrameElement(r);console.error(`Response has no matching <turbo-frame id="${i}"> element`)}catch(n){console.error(n)}return new fe}shouldInterceptNavigation(e,r){let i=e.getAttribute("data-turbo-frame")||this.element.getAttribute("target");if(!this.enabled||i=="_top")return!1;if(i){let n=tn(i);if(n)return!n.disabled}return!(!H.elementDriveEnabled(e)||r&&!H.elementDriveEnabled(r))}get id(){return this.element.id}get enabled(){return!this.element.disabled}get sourceURL(){if(this.element.src)return this.element.src}get reloadable(){return this.findFrameElement(this.element).hasAttribute("reloadable")}set reloadable(e){let r=this.findFrameElement(this.element);e?r.setAttribute("reloadable",""):r.removeAttribute("reloadable")}set sourceURL(e){this.settingSourceURL=!0,this.element.src=e??null,this.currentURL=this.element.src,this.settingSourceURL=!1}get loadingStyle(){return this.element.loading}get isLoading(){return this.formSubmission!==void 0||this.resolveVisitPromise()!==void 0}get isActive(){return this.element.isActive&&this.connected}};function tn(t){if(t!=null){let e=document.getElementById(t);if(e instanceof fe)return e}}function rn(t,e){if(t){let r=t.getAttribute("src");if(r!=null&&e!=null&&aa(r,e))throw new Error(`Matching <turbo-frame id="${t.id}"> element has a source URL which references itself`);if(t.ownerDocument!==document&&(t=document.importNode(t,!0)),t instanceof fe)return t.connectedCallback(),t}}var $a={after(){this.targetElements.forEach(t=>{var e;return(e=t.parentElement)===null||e===void 0?void 0:e.insertBefore(this.templateContent,t.nextSibling)})},append(){this.removeDuplicateTargetChildren(),this.targetElements.forEach(t=>t.append(this.templateContent))},before(){this.targetElements.forEach(t=>{var e;return(e=t.parentElement)===null||e===void 0?void 0:e.insertBefore(this.templateContent,t)})},prepend(){this.removeDuplicateTargetChildren(),this.targetElements.forEach(t=>t.prepend(this.templateContent))},remove(){this.targetElements.forEach(t=>t.remove())},replace(){this.targetElements.forEach(t=>t.replaceWith(this.templateContent))},update(){this.targetElements.forEach(t=>{t.innerHTML="",t.append(this.templateContent)})}},nn=class extends HTMLElement{async connectedCallback(){try{await this.render()}catch(e){console.error(e)}finally{this.disconnect()}}async render(){var e;return(e=this.renderPromise)!==null&&e!==void 0?e:this.renderPromise=(async()=>{this.dispatchEvent(this.beforeRenderEvent)&&(await Bt(),this.performAction())})()}disconnect(){try{this.remove()}catch(e){}}removeDuplicateTargetChildren(){this.duplicateChildren.forEach(e=>e.remove())}get duplicateChildren(){var e;let r=this.targetElements.flatMap(n=>[...n.children]).filter(n=>!!n.id),i=[...(e=this.templateContent)===null||e===void 0?void 0:e.children].filter(n=>!!n.id).map(n=>n.id);return r.filter(n=>i.includes(n.id))}get performAction(){if(this.action){let e=$a[this.action];if(e)return e;this.raise("unknown action")}this.raise("action attribute is missing")}get targetElements(){if(this.target)return this.targetElementsById;if(this.targets)return this.targetElementsByQuery;this.raise("target or targets attribute is missing")}get templateContent(){return this.templateElement.content.cloneNode(!0)}get templateElement(){if(this.firstElementChild instanceof HTMLTemplateElement)return this.firstElementChild;this.raise("first child element must be a <template> element")}get action(){return this.getAttribute("action")}get target(){return this.getAttribute("target")}get targets(){return this.getAttribute("targets")}raise(e){throw new Error(`${this.description}: ${e}`)}get description(){var e,r;return(r=((e=this.outerHTML.match(/<[^>]+>/))!==null&&e!==void 0?e:[])[0])!==null&&r!==void 0?r:"<turbo-stream>"}get beforeRenderEvent(){return new CustomEvent("turbo:before-stream-render",{bubbles:!0,cancelable:!0})}get targetElementsById(){var e;let r=(e=this.ownerDocument)===null||e===void 0?void 0:e.getElementById(this.target);return r!==null?[r]:[]}get targetElementsByQuery(){var e;let r=(e=this.ownerDocument)===null||e===void 0?void 0:e.querySelectorAll(this.targets);return r.length!==0?Array.prototype.slice.call(r):[]}};fe.delegateConstructor=en;customElements.define("turbo-frame",fe);customElements.define("turbo-stream",nn);(()=>{let t=document.currentScript;if(!!t&&!t.hasAttribute("data-turbo-suppress-warning")){for(;t=t.parentElement;)if(t==document.body)return console.warn(Li` You are loading Turbo from a <script> element inside the <body> element. This is probably not what you meant to do! Load your application’s JavaScript bundle inside the <head> element instead. <script> elements in <body> are evaluated with each page change. @@ -23,8 +24,24 @@ —— Suppress this warning by adding a "data-turbo-suppress-warning" attribute to: %s - `,r.outerHTML)}})();window.Turbo=er;Te();var Me=function(){function r(e,t,n){this.eventTarget=e,this.eventName=t,this.eventOptions=n,this.unorderedBindings=new Set}return r.prototype.connect=function(){this.eventTarget.addEventListener(this.eventName,this,this.eventOptions)},r.prototype.disconnect=function(){this.eventTarget.removeEventListener(this.eventName,this,this.eventOptions)},r.prototype.bindingConnected=function(e){this.unorderedBindings.add(e)},r.prototype.bindingDisconnected=function(e){this.unorderedBindings.delete(e)},r.prototype.handleEvent=function(e){for(var t=rr(e),n=0,i=this.bindings;n<i.length;n++){var s=i[n];if(t.immediatePropagationStopped)break;s.handleEvent(t)}},Object.defineProperty(r.prototype,"bindings",{get:function(){return Array.from(this.unorderedBindings).sort(function(e,t){var n=e.index,i=t.index;return n<i?-1:n>i?1:0})},enumerable:!1,configurable:!0}),r}();function rr(r){if("immediatePropagationStopped"in r)return r;var e=r.stopImmediatePropagation;return Object.assign(r,{immediatePropagationStopped:!1,stopImmediatePropagation:function(){this.immediatePropagationStopped=!0,e.call(this)}})}var xe=function(){function r(e){this.application=e,this.eventListenerMaps=new Map,this.started=!1}return r.prototype.start=function(){this.started||(this.started=!0,this.eventListeners.forEach(function(e){return e.connect()}))},r.prototype.stop=function(){this.started&&(this.started=!1,this.eventListeners.forEach(function(e){return e.disconnect()}))},Object.defineProperty(r.prototype,"eventListeners",{get:function(){return Array.from(this.eventListenerMaps.values()).reduce(function(e,t){return e.concat(Array.from(t.values()))},[])},enumerable:!1,configurable:!0}),r.prototype.bindingConnected=function(e){this.fetchEventListenerForBinding(e).bindingConnected(e)},r.prototype.bindingDisconnected=function(e){this.fetchEventListenerForBinding(e).bindingDisconnected(e)},r.prototype.handleError=function(e,t,n){n===void 0&&(n={}),this.application.handleError(e,"Error "+t,n)},r.prototype.fetchEventListenerForBinding=function(e){var t=e.eventTarget,n=e.eventName,i=e.eventOptions;return this.fetchEventListener(t,n,i)},r.prototype.fetchEventListener=function(e,t,n){var i=this.fetchEventListenerMapForEventTarget(e),s=this.cacheKey(t,n),o=i.get(s);return o||(o=this.createEventListener(e,t,n),i.set(s,o)),o},r.prototype.createEventListener=function(e,t,n){var i=new Me(e,t,n);return this.started&&i.connect(),i},r.prototype.fetchEventListenerMapForEventTarget=function(e){var t=this.eventListenerMaps.get(e);return t||(t=new Map,this.eventListenerMaps.set(e,t)),t},r.prototype.cacheKey=function(e,t){var n=[e];return Object.keys(t).sort().forEach(function(i){n.push(""+(t[i]?"":"!")+i)}),n.join(":")},r}();var nr=/^((.+?)(@(window|document))?->)?(.+?)(#([^:]+?))(:(.+))?$/;function Fe(r){var e=r.trim(),t=e.match(nr)||[];return{eventTarget:ir(t[4]),eventName:t[2],eventOptions:t[9]?sr(t[9]):{},identifier:t[5],methodName:t[7]}}function ir(r){if(r=="window")return window;if(r=="document")return document}function sr(r){return r.split(":").reduce(function(e,t){var n;return Object.assign(e,(n={},n[t.replace(/^!/,"")]=!/^!/.test(t),n))},{})}function Be(r){if(r==window)return"window";if(r==document)return"document"}var Ie=function(){function r(e,t,n){this.element=e,this.index=t,this.eventTarget=n.eventTarget||e,this.eventName=n.eventName||or(e)||G("missing event name"),this.eventOptions=n.eventOptions||{},this.identifier=n.identifier||G("missing identifier"),this.methodName=n.methodName||G("missing method name")}return r.forToken=function(e){return new this(e.element,e.index,Fe(e.content))},r.prototype.toString=function(){var e=this.eventTargetName?"@"+this.eventTargetName:"";return""+this.eventName+e+"->"+this.identifier+"#"+this.methodName},Object.defineProperty(r.prototype,"eventTargetName",{get:function(){return Be(this.eventTarget)},enumerable:!1,configurable:!0}),r}();var Ne={a:function(r){return"click"},button:function(r){return"click"},form:function(r){return"submit"},input:function(r){return r.getAttribute("type")=="submit"?"click":"input"},select:function(r){return"change"},textarea:function(r){return"input"}};function or(r){var e=r.tagName.toLowerCase();if(e in Ne)return Ne[e](r)}function G(r){throw new Error(r)}var qe=function(){function r(e,t){this.context=e,this.action=t}return Object.defineProperty(r.prototype,"index",{get:function(){return this.action.index},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"eventTarget",{get:function(){return this.action.eventTarget},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"eventOptions",{get:function(){return this.action.eventOptions},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"identifier",{get:function(){return this.context.identifier},enumerable:!1,configurable:!0}),r.prototype.handleEvent=function(e){this.willBeInvokedByEvent(e)&&this.invokeWithEvent(e)},Object.defineProperty(r.prototype,"eventName",{get:function(){return this.action.eventName},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"method",{get:function(){var e=this.controller[this.methodName];if(typeof e=="function")return e;throw new Error('Action "'+this.action+'" references undefined method "'+this.methodName+'"')},enumerable:!1,configurable:!0}),r.prototype.invokeWithEvent=function(e){try{this.method.call(this.controller,e)}catch(l){var t=this,n=t.identifier,i=t.controller,s=t.element,o=t.index,c={identifier:n,controller:i,element:s,index:o,event:e};this.context.handleError(l,'invoking action "'+this.action+'"',c)}},r.prototype.willBeInvokedByEvent=function(e){var t=e.target;return this.element===t?!0:t instanceof Element&&this.element.contains(t)?this.scope.containsElement(t):this.scope.containsElement(this.action.element)},Object.defineProperty(r.prototype,"controller",{get:function(){return this.context.controller},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"methodName",{get:function(){return this.action.methodName},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"element",{get:function(){return this.scope.element},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"scope",{get:function(){return this.context.scope},enumerable:!1,configurable:!0}),r}();var Ve=function(){function r(e,t){var n=this;this.element=e,this.started=!1,this.delegate=t,this.elements=new Set,this.mutationObserver=new MutationObserver(function(i){return n.processMutations(i)})}return r.prototype.start=function(){this.started||(this.started=!0,this.mutationObserver.observe(this.element,{attributes:!0,childList:!0,subtree:!0}),this.refresh())},r.prototype.stop=function(){this.started&&(this.mutationObserver.takeRecords(),this.mutationObserver.disconnect(),this.started=!1)},r.prototype.refresh=function(){if(this.started){for(var e=new Set(this.matchElementsInTree()),t=0,n=Array.from(this.elements);t<n.length;t++){var i=n[t];e.has(i)||this.removeElement(i)}for(var s=0,o=Array.from(e);s<o.length;s++){var i=o[s];this.addElement(i)}}},r.prototype.processMutations=function(e){if(this.started)for(var t=0,n=e;t<n.length;t++){var i=n[t];this.processMutation(i)}},r.prototype.processMutation=function(e){e.type=="attributes"?this.processAttributeChange(e.target,e.attributeName):e.type=="childList"&&(this.processRemovedNodes(e.removedNodes),this.processAddedNodes(e.addedNodes))},r.prototype.processAttributeChange=function(e,t){var n=e;this.elements.has(n)?this.delegate.elementAttributeChanged&&this.matchElement(n)?this.delegate.elementAttributeChanged(n,t):this.removeElement(n):this.matchElement(n)&&this.addElement(n)},r.prototype.processRemovedNodes=function(e){for(var t=0,n=Array.from(e);t<n.length;t++){var i=n[t],s=this.elementFromNode(i);s&&this.processTree(s,this.removeElement)}},r.prototype.processAddedNodes=function(e){for(var t=0,n=Array.from(e);t<n.length;t++){var i=n[t],s=this.elementFromNode(i);s&&this.elementIsActive(s)&&this.processTree(s,this.addElement)}},r.prototype.matchElement=function(e){return this.delegate.matchElement(e)},r.prototype.matchElementsInTree=function(e){return e===void 0&&(e=this.element),this.delegate.matchElementsInTree(e)},r.prototype.processTree=function(e,t){for(var n=0,i=this.matchElementsInTree(e);n<i.length;n++){var s=i[n];t.call(this,s)}},r.prototype.elementFromNode=function(e){if(e.nodeType==Node.ELEMENT_NODE)return e},r.prototype.elementIsActive=function(e){return e.isConnected!=this.element.isConnected?!1:this.element.contains(e)},r.prototype.addElement=function(e){this.elements.has(e)||this.elementIsActive(e)&&(this.elements.add(e),this.delegate.elementMatched&&this.delegate.elementMatched(e))},r.prototype.removeElement=function(e){this.elements.has(e)&&(this.elements.delete(e),this.delegate.elementUnmatched&&this.delegate.elementUnmatched(e))},r}();var je=function(){function r(e,t,n){this.attributeName=t,this.delegate=n,this.elementObserver=new Ve(e,this)}return Object.defineProperty(r.prototype,"element",{get:function(){return this.elementObserver.element},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"selector",{get:function(){return"["+this.attributeName+"]"},enumerable:!1,configurable:!0}),r.prototype.start=function(){this.elementObserver.start()},r.prototype.stop=function(){this.elementObserver.stop()},r.prototype.refresh=function(){this.elementObserver.refresh()},Object.defineProperty(r.prototype,"started",{get:function(){return this.elementObserver.started},enumerable:!1,configurable:!0}),r.prototype.matchElement=function(e){return e.hasAttribute(this.attributeName)},r.prototype.matchElementsInTree=function(e){var t=this.matchElement(e)?[e]:[],n=Array.from(e.querySelectorAll(this.selector));return t.concat(n)},r.prototype.elementMatched=function(e){this.delegate.elementMatchedAttribute&&this.delegate.elementMatchedAttribute(e,this.attributeName)},r.prototype.elementUnmatched=function(e){this.delegate.elementUnmatchedAttribute&&this.delegate.elementUnmatchedAttribute(e,this.attributeName)},r.prototype.elementAttributeChanged=function(e,t){this.delegate.elementAttributeValueChanged&&this.attributeName==t&&this.delegate.elementAttributeValueChanged(e,t)},r}();var De=function(){function r(e,t){var n=this;this.element=e,this.delegate=t,this.started=!1,this.stringMap=new Map,this.mutationObserver=new MutationObserver(function(i){return n.processMutations(i)})}return r.prototype.start=function(){this.started||(this.started=!0,this.mutationObserver.observe(this.element,{attributes:!0}),this.refresh())},r.prototype.stop=function(){this.started&&(this.mutationObserver.takeRecords(),this.mutationObserver.disconnect(),this.started=!1)},r.prototype.refresh=function(){if(this.started)for(var e=0,t=this.knownAttributeNames;e<t.length;e++){var n=t[e];this.refreshAttribute(n)}},r.prototype.processMutations=function(e){if(this.started)for(var t=0,n=e;t<n.length;t++){var i=n[t];this.processMutation(i)}},r.prototype.processMutation=function(e){var t=e.attributeName;t&&this.refreshAttribute(t)},r.prototype.refreshAttribute=function(e){var t=this.delegate.getStringMapKeyForAttribute(e);if(t!=null){this.stringMap.has(e)||this.stringMapKeyAdded(t,e);var n=this.element.getAttribute(e);this.stringMap.get(e)!=n&&this.stringMapValueChanged(n,t),n==null?(this.stringMap.delete(e),this.stringMapKeyRemoved(t,e)):this.stringMap.set(e,n)}},r.prototype.stringMapKeyAdded=function(e,t){this.delegate.stringMapKeyAdded&&this.delegate.stringMapKeyAdded(e,t)},r.prototype.stringMapValueChanged=function(e,t){this.delegate.stringMapValueChanged&&this.delegate.stringMapValueChanged(e,t)},r.prototype.stringMapKeyRemoved=function(e,t){this.delegate.stringMapKeyRemoved&&this.delegate.stringMapKeyRemoved(e,t)},Object.defineProperty(r.prototype,"knownAttributeNames",{get:function(){return Array.from(new Set(this.currentAttributeNames.concat(this.recordedAttributeNames)))},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"currentAttributeNames",{get:function(){return Array.from(this.element.attributes).map(function(e){return e.name})},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"recordedAttributeNames",{get:function(){return Array.from(this.stringMap.keys())},enumerable:!1,configurable:!0}),r}();function q(r,e,t){He(r,e).add(t)}function V(r,e,t){He(r,e).delete(t),ar(r,e)}function He(r,e){var t=r.get(e);return t||(t=new Set,r.set(e,t)),t}function ar(r,e){var t=r.get(e);t!=null&&t.size==0&&r.delete(e)}var C=function(){function r(){this.valuesByKey=new Map}return Object.defineProperty(r.prototype,"values",{get:function(){var e=Array.from(this.valuesByKey.values());return e.reduce(function(t,n){return t.concat(Array.from(n))},[])},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"size",{get:function(){var e=Array.from(this.valuesByKey.values());return e.reduce(function(t,n){return t+n.size},0)},enumerable:!1,configurable:!0}),r.prototype.add=function(e,t){q(this.valuesByKey,e,t)},r.prototype.delete=function(e,t){V(this.valuesByKey,e,t)},r.prototype.has=function(e,t){var n=this.valuesByKey.get(e);return n!=null&&n.has(t)},r.prototype.hasKey=function(e){return this.valuesByKey.has(e)},r.prototype.hasValue=function(e){var t=Array.from(this.valuesByKey.values());return t.some(function(n){return n.has(e)})},r.prototype.getValuesForKey=function(e){var t=this.valuesByKey.get(e);return t?Array.from(t):[]},r.prototype.getKeysForValue=function(e){return Array.from(this.valuesByKey).filter(function(t){var n=t[0],i=t[1];return i.has(e)}).map(function(t){var n=t[0],i=t[1];return n})},r}();var cr=function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,i){n.__proto__=i}||function(n,i){for(var s in i)i.hasOwnProperty(s)&&(n[s]=i[s])},r(e,t)};return function(e,t){r(e,t);function n(){this.constructor=e}e.prototype=t===null?Object.create(t):(n.prototype=t.prototype,new n)}}(),en=function(r){cr(e,r);function e(){var t=r.call(this)||this;return t.keysByValue=new Map,t}return Object.defineProperty(e.prototype,"values",{get:function(){return Array.from(this.keysByValue.keys())},enumerable:!1,configurable:!0}),e.prototype.add=function(t,n){r.prototype.add.call(this,t,n),q(this.keysByValue,n,t)},e.prototype.delete=function(t,n){r.prototype.delete.call(this,t,n),V(this.keysByValue,n,t)},e.prototype.hasValue=function(t){return this.keysByValue.has(t)},e.prototype.getKeysForValue=function(t){var n=this.keysByValue.get(t);return n?Array.from(n):[]},e}(C);var _e=function(){function r(e,t,n){this.attributeObserver=new je(e,t,this),this.delegate=n,this.tokensByElement=new C}return Object.defineProperty(r.prototype,"started",{get:function(){return this.attributeObserver.started},enumerable:!1,configurable:!0}),r.prototype.start=function(){this.attributeObserver.start()},r.prototype.stop=function(){this.attributeObserver.stop()},r.prototype.refresh=function(){this.attributeObserver.refresh()},Object.defineProperty(r.prototype,"element",{get:function(){return this.attributeObserver.element},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"attributeName",{get:function(){return this.attributeObserver.attributeName},enumerable:!1,configurable:!0}),r.prototype.elementMatchedAttribute=function(e){this.tokensMatched(this.readTokensForElement(e))},r.prototype.elementAttributeValueChanged=function(e){var t=this.refreshTokensForElement(e),n=t[0],i=t[1];this.tokensUnmatched(n),this.tokensMatched(i)},r.prototype.elementUnmatchedAttribute=function(e){this.tokensUnmatched(this.tokensByElement.getValuesForKey(e))},r.prototype.tokensMatched=function(e){var t=this;e.forEach(function(n){return t.tokenMatched(n)})},r.prototype.tokensUnmatched=function(e){var t=this;e.forEach(function(n){return t.tokenUnmatched(n)})},r.prototype.tokenMatched=function(e){this.delegate.tokenMatched(e),this.tokensByElement.add(e.element,e)},r.prototype.tokenUnmatched=function(e){this.delegate.tokenUnmatched(e),this.tokensByElement.delete(e.element,e)},r.prototype.refreshTokensForElement=function(e){var t=this.tokensByElement.getValuesForKey(e),n=this.readTokensForElement(e),i=ur(t,n).findIndex(function(s){var o=s[0],c=s[1];return!hr(o,c)});return i==-1?[[],[]]:[t.slice(i),n.slice(i)]},r.prototype.readTokensForElement=function(e){var t=this.attributeName,n=e.getAttribute(t)||"";return lr(n,e,t)},r}();function lr(r,e,t){return r.trim().split(/\s+/).filter(function(n){return n.length}).map(function(n,i){return{element:e,attributeName:t,content:n,index:i}})}function ur(r,e){var t=Math.max(r.length,e.length);return Array.from({length:t},function(n,i){return[r[i],e[i]]})}function hr(r,e){return r&&e&&r.index==e.index&&r.content==e.content}var j=function(){function r(e,t,n){this.tokenListObserver=new _e(e,t,this),this.delegate=n,this.parseResultsByToken=new WeakMap,this.valuesByTokenByElement=new WeakMap}return Object.defineProperty(r.prototype,"started",{get:function(){return this.tokenListObserver.started},enumerable:!1,configurable:!0}),r.prototype.start=function(){this.tokenListObserver.start()},r.prototype.stop=function(){this.tokenListObserver.stop()},r.prototype.refresh=function(){this.tokenListObserver.refresh()},Object.defineProperty(r.prototype,"element",{get:function(){return this.tokenListObserver.element},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"attributeName",{get:function(){return this.tokenListObserver.attributeName},enumerable:!1,configurable:!0}),r.prototype.tokenMatched=function(e){var t=e.element,n=this.fetchParseResultForToken(e).value;n&&(this.fetchValuesByTokenForElement(t).set(e,n),this.delegate.elementMatchedValue(t,n))},r.prototype.tokenUnmatched=function(e){var t=e.element,n=this.fetchParseResultForToken(e).value;n&&(this.fetchValuesByTokenForElement(t).delete(e),this.delegate.elementUnmatchedValue(t,n))},r.prototype.fetchParseResultForToken=function(e){var t=this.parseResultsByToken.get(e);return t||(t=this.parseToken(e),this.parseResultsByToken.set(e,t)),t},r.prototype.fetchValuesByTokenForElement=function(e){var t=this.valuesByTokenByElement.get(e);return t||(t=new Map,this.valuesByTokenByElement.set(e,t)),t},r.prototype.parseToken=function(e){try{var t=this.delegate.parseValueForToken(e);return{value:t}}catch(n){return{error:n}}},r}();var We=function(){function r(e,t){this.context=e,this.delegate=t,this.bindingsByAction=new Map}return r.prototype.start=function(){this.valueListObserver||(this.valueListObserver=new j(this.element,this.actionAttribute,this),this.valueListObserver.start())},r.prototype.stop=function(){this.valueListObserver&&(this.valueListObserver.stop(),delete this.valueListObserver,this.disconnectAllActions())},Object.defineProperty(r.prototype,"element",{get:function(){return this.context.element},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"identifier",{get:function(){return this.context.identifier},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"actionAttribute",{get:function(){return this.schema.actionAttribute},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"schema",{get:function(){return this.context.schema},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"bindings",{get:function(){return Array.from(this.bindingsByAction.values())},enumerable:!1,configurable:!0}),r.prototype.connectAction=function(e){var t=new qe(this.context,e);this.bindingsByAction.set(e,t),this.delegate.bindingConnected(t)},r.prototype.disconnectAction=function(e){var t=this.bindingsByAction.get(e);t&&(this.bindingsByAction.delete(e),this.delegate.bindingDisconnected(t))},r.prototype.disconnectAllActions=function(){var e=this;this.bindings.forEach(function(t){return e.delegate.bindingDisconnected(t)}),this.bindingsByAction.clear()},r.prototype.parseValueForToken=function(e){var t=Ie.forToken(e);if(t.identifier==this.identifier)return t},r.prototype.elementMatchedValue=function(e,t){this.connectAction(t)},r.prototype.elementUnmatchedValue=function(e,t){this.disconnectAction(t)},r}();var Ue=function(){function r(e,t){this.context=e,this.receiver=t,this.stringMapObserver=new De(this.element,this),this.valueDescriptorMap=this.controller.valueDescriptorMap,this.invokeChangedCallbacksForDefaultValues()}return r.prototype.start=function(){this.stringMapObserver.start()},r.prototype.stop=function(){this.stringMapObserver.stop()},Object.defineProperty(r.prototype,"element",{get:function(){return this.context.element},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"controller",{get:function(){return this.context.controller},enumerable:!1,configurable:!0}),r.prototype.getStringMapKeyForAttribute=function(e){if(e in this.valueDescriptorMap)return this.valueDescriptorMap[e].name},r.prototype.stringMapValueChanged=function(e,t){this.invokeChangedCallbackForValue(t)},r.prototype.invokeChangedCallbacksForDefaultValues=function(){for(var e=0,t=this.valueDescriptors;e<t.length;e++){var n=t[e],i=n.key,s=n.name,o=n.defaultValue;o!=null&&!this.controller.data.has(i)&&this.invokeChangedCallbackForValue(s)}},r.prototype.invokeChangedCallbackForValue=function(e){var t=e+"Changed",n=this.receiver[t];if(typeof n=="function"){var i=this.receiver[e];n.call(this.receiver,i)}},Object.defineProperty(r.prototype,"valueDescriptors",{get:function(){var e=this.valueDescriptorMap;return Object.keys(e).map(function(t){return e[t]})},enumerable:!1,configurable:!0}),r}();var Q=function(){function r(e,t){this.module=e,this.scope=t,this.controller=new e.controllerConstructor(this),this.bindingObserver=new We(this,this.dispatcher),this.valueObserver=new Ue(this,this.controller);try{this.controller.initialize()}catch(n){this.handleError(n,"initializing controller")}}return r.prototype.connect=function(){this.bindingObserver.start(),this.valueObserver.start();try{this.controller.connect()}catch(e){this.handleError(e,"connecting controller")}},r.prototype.disconnect=function(){try{this.controller.disconnect()}catch(e){this.handleError(e,"disconnecting controller")}this.valueObserver.stop(),this.bindingObserver.stop()},Object.defineProperty(r.prototype,"application",{get:function(){return this.module.application},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"identifier",{get:function(){return this.module.identifier},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"schema",{get:function(){return this.application.schema},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"dispatcher",{get:function(){return this.application.dispatcher},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"element",{get:function(){return this.scope.element},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"parentElement",{get:function(){return this.element.parentElement},enumerable:!1,configurable:!0}),r.prototype.handleError=function(e,t,n){n===void 0&&(n={});var i=this,s=i.identifier,o=i.controller,c=i.element;n=Object.assign({identifier:s,controller:o,element:c},n),this.application.handleError(e,"Error "+t,n)},r}();function O(r,e){var t=ze(r);return Array.from(t.reduce(function(n,i){return dr(i,e).forEach(function(s){return n.add(s)}),n},new Set))}function Ke(r,e){var t=ze(r);return t.reduce(function(n,i){return n.push.apply(n,fr(i,e)),n},[])}function ze(r){for(var e=[];r;)e.push(r),r=Object.getPrototypeOf(r);return e.reverse()}function dr(r,e){var t=r[e];return Array.isArray(t)?t:[]}function fr(r,e){var t=r[e];return t?Object.keys(t).map(function(n){return[n,t[n]]}):[]}var pr=function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,i){n.__proto__=i}||function(n,i){for(var s in i)i.hasOwnProperty(s)&&(n[s]=i[s])},r(e,t)};return function(e,t){r(e,t);function n(){this.constructor=e}e.prototype=t===null?Object.create(t):(n.prototype=t.prototype,new n)}}(),mr=function(){for(var r=0,e=0,t=arguments.length;e<t;e++)r+=arguments[e].length;for(var n=Array(r),i=0,e=0;e<t;e++)for(var s=arguments[e],o=0,c=s.length;o<c;o++,i++)n[i]=s[o];return n};function $e(r){return gr(r,vr(r))}function gr(r,e){var t=Er(r),n=br(r.prototype,e);return Object.defineProperties(t.prototype,n),t}function vr(r){var e=O(r,"blessings");return e.reduce(function(t,n){var i=n(r);for(var s in i){var o=t[s]||{};t[s]=Object.assign(o,i[s])}return t},{})}function br(r,e){return wr(e).reduce(function(t,n){var i,s=yr(r,e,n);return s&&Object.assign(t,(i={},i[n]=s,i)),t},{})}function yr(r,e,t){var n=Object.getOwnPropertyDescriptor(r,t),i=n&&"value"in n;if(!i){var s=Object.getOwnPropertyDescriptor(e,t).value;return n&&(s.get=n.get||s.get,s.set=n.set||s.set),s}}var wr=function(){return typeof Object.getOwnPropertySymbols=="function"?function(r){return mr(Object.getOwnPropertyNames(r),Object.getOwnPropertySymbols(r))}:Object.getOwnPropertyNames}(),Er=function(){function r(t){function n(){var i=this&&this instanceof n?this.constructor:void 0;return Reflect.construct(t,arguments,i)}return n.prototype=Object.create(t.prototype,{constructor:{value:n}}),Reflect.setPrototypeOf(n,t),n}function e(){var t=function(){this.a.call(this)},n=r(t);return n.prototype.a=function(){},new n}try{return e(),r}catch(t){return function(n){return function(i){pr(s,i);function s(){return i!==null&&i.apply(this,arguments)||this}return s}(n)}}}();function Je(r){return{identifier:r.identifier,controllerConstructor:$e(r.controllerConstructor)}}var Ge=function(){function r(e,t){this.application=e,this.definition=Je(t),this.contextsByScope=new WeakMap,this.connectedContexts=new Set}return Object.defineProperty(r.prototype,"identifier",{get:function(){return this.definition.identifier},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"controllerConstructor",{get:function(){return this.definition.controllerConstructor},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"contexts",{get:function(){return Array.from(this.connectedContexts)},enumerable:!1,configurable:!0}),r.prototype.connectContextForScope=function(e){var t=this.fetchContextForScope(e);this.connectedContexts.add(t),t.connect()},r.prototype.disconnectContextForScope=function(e){var t=this.contextsByScope.get(e);t&&(this.connectedContexts.delete(t),t.disconnect())},r.prototype.fetchContextForScope=function(e){var t=this.contextsByScope.get(e);return t||(t=new Q(this,e),this.contextsByScope.set(e,t)),t},r}();var Qe=function(){function r(e){this.scope=e}return r.prototype.has=function(e){return this.data.has(this.getDataKey(e))},r.prototype.get=function(e){return this.data.get(this.getDataKey(e))},r.prototype.getAttributeName=function(e){return this.data.getAttributeNameForKey(this.getDataKey(e))},r.prototype.getDataKey=function(e){return e+"-class"},Object.defineProperty(r.prototype,"data",{get:function(){return this.scope.data},enumerable:!1,configurable:!0}),r}();function Xe(r){return r.replace(/(?:[_-])([a-z0-9])/g,function(e,t){return t.toUpperCase()})}function R(r){return r.charAt(0).toUpperCase()+r.slice(1)}function D(r){return r.replace(/([A-Z])/g,function(e,t){return"-"+t.toLowerCase()})}var Ye=function(){function r(e){this.scope=e}return Object.defineProperty(r.prototype,"element",{get:function(){return this.scope.element},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"identifier",{get:function(){return this.scope.identifier},enumerable:!1,configurable:!0}),r.prototype.get=function(e){var t=this.getAttributeNameForKey(e);return this.element.getAttribute(t)},r.prototype.set=function(e,t){var n=this.getAttributeNameForKey(e);return this.element.setAttribute(n,t),this.get(e)},r.prototype.has=function(e){var t=this.getAttributeNameForKey(e);return this.element.hasAttribute(t)},r.prototype.delete=function(e){if(this.has(e)){var t=this.getAttributeNameForKey(e);return this.element.removeAttribute(t),!0}else return!1},r.prototype.getAttributeNameForKey=function(e){return"data-"+this.identifier+"-"+D(e)},r}();var Ze=function(){function r(e){this.warnedKeysByObject=new WeakMap,this.logger=e}return r.prototype.warn=function(e,t,n){var i=this.warnedKeysByObject.get(e);i||(i=new Set,this.warnedKeysByObject.set(e,i)),i.has(t)||(i.add(t),this.logger.warn(n,e))},r}();function x(r,e){return"["+r+'~="'+e+'"]'}var Sr=function(){for(var r=0,e=0,t=arguments.length;e<t;e++)r+=arguments[e].length;for(var n=Array(r),i=0,e=0;e<t;e++)for(var s=arguments[e],o=0,c=s.length;o<c;o++,i++)n[i]=s[o];return n},et=function(){function r(e){this.scope=e}return Object.defineProperty(r.prototype,"element",{get:function(){return this.scope.element},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"identifier",{get:function(){return this.scope.identifier},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"schema",{get:function(){return this.scope.schema},enumerable:!1,configurable:!0}),r.prototype.has=function(e){return this.find(e)!=null},r.prototype.find=function(){for(var e=this,t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];return t.reduce(function(i,s){return i||e.findTarget(s)||e.findLegacyTarget(s)},void 0)},r.prototype.findAll=function(){for(var e=this,t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];return t.reduce(function(i,s){return Sr(i,e.findAllTargets(s),e.findAllLegacyTargets(s))},[])},r.prototype.findTarget=function(e){var t=this.getSelectorForTargetName(e);return this.scope.findElement(t)},r.prototype.findAllTargets=function(e){var t=this.getSelectorForTargetName(e);return this.scope.findAllElements(t)},r.prototype.getSelectorForTargetName=function(e){var t="data-"+this.identifier+"-target";return x(t,e)},r.prototype.findLegacyTarget=function(e){var t=this.getLegacySelectorForTargetName(e);return this.deprecate(this.scope.findElement(t),e)},r.prototype.findAllLegacyTargets=function(e){var t=this,n=this.getLegacySelectorForTargetName(e);return this.scope.findAllElements(n).map(function(i){return t.deprecate(i,e)})},r.prototype.getLegacySelectorForTargetName=function(e){var t=this.identifier+"."+e;return x(this.schema.targetAttribute,t)},r.prototype.deprecate=function(e,t){if(e){var n=this.identifier,i=this.schema.targetAttribute;this.guide.warn(e,"target:"+t,"Please replace "+i+'="'+n+"."+t+'" with data-'+n+'-target="'+t+'". '+("The "+i+" attribute is deprecated and will be removed in a future version of Stimulus."))}return e},Object.defineProperty(r.prototype,"guide",{get:function(){return this.scope.guide},enumerable:!1,configurable:!0}),r}();var Ar=function(){for(var r=0,e=0,t=arguments.length;e<t;e++)r+=arguments[e].length;for(var n=Array(r),i=0,e=0;e<t;e++)for(var s=arguments[e],o=0,c=s.length;o<c;o++,i++)n[i]=s[o];return n},tt=function(){function r(e,t,n,i){var s=this;this.targets=new et(this),this.classes=new Qe(this),this.data=new Ye(this),this.containsElement=function(o){return o.closest(s.controllerSelector)===s.element},this.schema=e,this.element=t,this.identifier=n,this.guide=new Ze(i)}return r.prototype.findElement=function(e){return this.element.matches(e)?this.element:this.queryElements(e).find(this.containsElement)},r.prototype.findAllElements=function(e){return Ar(this.element.matches(e)?[this.element]:[],this.queryElements(e).filter(this.containsElement))},r.prototype.queryElements=function(e){return Array.from(this.element.querySelectorAll(e))},Object.defineProperty(r.prototype,"controllerSelector",{get:function(){return x(this.schema.controllerAttribute,this.identifier)},enumerable:!1,configurable:!0}),r}();var rt=function(){function r(e,t,n){this.element=e,this.schema=t,this.delegate=n,this.valueListObserver=new j(this.element,this.controllerAttribute,this),this.scopesByIdentifierByElement=new WeakMap,this.scopeReferenceCounts=new WeakMap}return r.prototype.start=function(){this.valueListObserver.start()},r.prototype.stop=function(){this.valueListObserver.stop()},Object.defineProperty(r.prototype,"controllerAttribute",{get:function(){return this.schema.controllerAttribute},enumerable:!1,configurable:!0}),r.prototype.parseValueForToken=function(e){var t=e.element,n=e.content,i=this.fetchScopesByIdentifierForElement(t),s=i.get(n);return s||(s=this.delegate.createScopeForElementAndIdentifier(t,n),i.set(n,s)),s},r.prototype.elementMatchedValue=function(e,t){var n=(this.scopeReferenceCounts.get(t)||0)+1;this.scopeReferenceCounts.set(t,n),n==1&&this.delegate.scopeConnected(t)},r.prototype.elementUnmatchedValue=function(e,t){var n=this.scopeReferenceCounts.get(t);n&&(this.scopeReferenceCounts.set(t,n-1),n==1&&this.delegate.scopeDisconnected(t))},r.prototype.fetchScopesByIdentifierForElement=function(e){var t=this.scopesByIdentifierByElement.get(e);return t||(t=new Map,this.scopesByIdentifierByElement.set(e,t)),t},r}();var nt=function(){function r(e){this.application=e,this.scopeObserver=new rt(this.element,this.schema,this),this.scopesByIdentifier=new C,this.modulesByIdentifier=new Map}return Object.defineProperty(r.prototype,"element",{get:function(){return this.application.element},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"schema",{get:function(){return this.application.schema},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"logger",{get:function(){return this.application.logger},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"controllerAttribute",{get:function(){return this.schema.controllerAttribute},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"modules",{get:function(){return Array.from(this.modulesByIdentifier.values())},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"contexts",{get:function(){return this.modules.reduce(function(e,t){return e.concat(t.contexts)},[])},enumerable:!1,configurable:!0}),r.prototype.start=function(){this.scopeObserver.start()},r.prototype.stop=function(){this.scopeObserver.stop()},r.prototype.loadDefinition=function(e){this.unloadIdentifier(e.identifier);var t=new Ge(this.application,e);this.connectModule(t)},r.prototype.unloadIdentifier=function(e){var t=this.modulesByIdentifier.get(e);t&&this.disconnectModule(t)},r.prototype.getContextForElementAndIdentifier=function(e,t){var n=this.modulesByIdentifier.get(t);if(n)return n.contexts.find(function(i){return i.element==e})},r.prototype.handleError=function(e,t,n){this.application.handleError(e,t,n)},r.prototype.createScopeForElementAndIdentifier=function(e,t){return new tt(this.schema,e,t,this.logger)},r.prototype.scopeConnected=function(e){this.scopesByIdentifier.add(e.identifier,e);var t=this.modulesByIdentifier.get(e.identifier);t&&t.connectContextForScope(e)},r.prototype.scopeDisconnected=function(e){this.scopesByIdentifier.delete(e.identifier,e);var t=this.modulesByIdentifier.get(e.identifier);t&&t.disconnectContextForScope(e)},r.prototype.connectModule=function(e){this.modulesByIdentifier.set(e.identifier,e);var t=this.scopesByIdentifier.getValuesForKey(e.identifier);t.forEach(function(n){return e.connectContextForScope(n)})},r.prototype.disconnectModule=function(e){this.modulesByIdentifier.delete(e.identifier);var t=this.scopesByIdentifier.getValuesForKey(e.identifier);t.forEach(function(n){return e.disconnectContextForScope(n)})},r}();var X={controllerAttribute:"data-controller",actionAttribute:"data-action",targetAttribute:"data-target"};var Pr=function(r,e,t,n){function i(s){return s instanceof t?s:new t(function(o){o(s)})}return new(t||(t=Promise))(function(s,o){function c(f){try{a(n.next(f))}catch(H){o(H)}}function l(f){try{a(n.throw(f))}catch(H){o(H)}}function a(f){f.done?s(f.value):i(f.value).then(c,l)}a((n=n.apply(r,e||[])).next())})},Lr=function(r,e){var t={label:0,sent:function(){if(s[0]&1)throw s[1];return s[1]},trys:[],ops:[]},n,i,s,o;return o={next:c(0),throw:c(1),return:c(2)},typeof Symbol=="function"&&(o[Symbol.iterator]=function(){return this}),o;function c(a){return function(f){return l([a,f])}}function l(a){if(n)throw new TypeError("Generator is already executing.");for(;t;)try{if(n=1,i&&(s=a[0]&2?i.return:a[0]?i.throw||((s=i.return)&&s.call(i),0):i.next)&&!(s=s.call(i,a[1])).done)return s;switch(i=0,s&&(a=[a[0]&2,s.value]),a[0]){case 0:case 1:s=a;break;case 4:return t.label++,{value:a[1],done:!1};case 5:t.label++,i=a[1],a=[0];continue;case 7:a=t.ops.pop(),t.trys.pop();continue;default:if(s=t.trys,!(s=s.length>0&&s[s.length-1])&&(a[0]===6||a[0]===2)){t=0;continue}if(a[0]===3&&(!s||a[1]>s[0]&&a[1]<s[3])){t.label=a[1];break}if(a[0]===6&&t.label<s[1]){t.label=s[1],s=a;break}if(s&&t.label<s[2]){t.label=s[2],t.ops.push(a);break}s[2]&&t.ops.pop(),t.trys.pop();continue}a=e.call(r,t)}catch(f){a=[6,f],i=0}finally{n=s=0}if(a[0]&5)throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}},it=function(){for(var r=0,e=0,t=arguments.length;e<t;e++)r+=arguments[e].length;for(var n=Array(r),i=0,e=0;e<t;e++)for(var s=arguments[e],o=0,c=s.length;o<c;o++,i++)n[i]=s[o];return n},Y=function(){function r(e,t){e===void 0&&(e=document.documentElement),t===void 0&&(t=X),this.logger=console,this.element=e,this.schema=t,this.dispatcher=new xe(this),this.router=new nt(this)}return r.start=function(e,t){var n=new r(e,t);return n.start(),n},r.prototype.start=function(){return Pr(this,void 0,void 0,function(){return Lr(this,function(e){switch(e.label){case 0:return[4,Tr()];case 1:return e.sent(),this.dispatcher.start(),this.router.start(),[2]}})})},r.prototype.stop=function(){this.dispatcher.stop(),this.router.stop()},r.prototype.register=function(e,t){this.load({identifier:e,controllerConstructor:t})},r.prototype.load=function(e){for(var t=this,n=[],i=1;i<arguments.length;i++)n[i-1]=arguments[i];var s=Array.isArray(e)?e:it([e],n);s.forEach(function(o){return t.router.loadDefinition(o)})},r.prototype.unload=function(e){for(var t=this,n=[],i=1;i<arguments.length;i++)n[i-1]=arguments[i];var s=Array.isArray(e)?e:it([e],n);s.forEach(function(o){return t.router.unloadIdentifier(o)})},Object.defineProperty(r.prototype,"controllers",{get:function(){return this.router.contexts.map(function(e){return e.controller})},enumerable:!1,configurable:!0}),r.prototype.getControllerForElementAndIdentifier=function(e,t){var n=this.router.getContextForElementAndIdentifier(e,t);return n?n.controller:null},r.prototype.handleError=function(e,t,n){this.logger.error(`%s + `,t.outerHTML)}})();window.Turbo=qa;Qi();var sn=function(){function t(e,r,i){this.eventTarget=e,this.eventName=r,this.eventOptions=i,this.unorderedBindings=new Set}return t.prototype.connect=function(){this.eventTarget.addEventListener(this.eventName,this,this.eventOptions)},t.prototype.disconnect=function(){this.eventTarget.removeEventListener(this.eventName,this,this.eventOptions)},t.prototype.bindingConnected=function(e){this.unorderedBindings.add(e)},t.prototype.bindingDisconnected=function(e){this.unorderedBindings.delete(e)},t.prototype.handleEvent=function(e){for(var r=Wa(e),i=0,n=this.bindings;i<n.length;i++){var s=n[i];if(r.immediatePropagationStopped)break;s.handleEvent(r)}},Object.defineProperty(t.prototype,"bindings",{get:function(){return Array.from(this.unorderedBindings).sort(function(e,r){var i=e.index,n=r.index;return i<n?-1:i>n?1:0})},enumerable:!1,configurable:!0}),t}();function Wa(t){if("immediatePropagationStopped"in t)return t;var e=t.stopImmediatePropagation;return Object.assign(t,{immediatePropagationStopped:!1,stopImmediatePropagation:function(){this.immediatePropagationStopped=!0,e.call(this)}})}var on=function(){function t(e){this.application=e,this.eventListenerMaps=new Map,this.started=!1}return t.prototype.start=function(){this.started||(this.started=!0,this.eventListeners.forEach(function(e){return e.connect()}))},t.prototype.stop=function(){this.started&&(this.started=!1,this.eventListeners.forEach(function(e){return e.disconnect()}))},Object.defineProperty(t.prototype,"eventListeners",{get:function(){return Array.from(this.eventListenerMaps.values()).reduce(function(e,r){return e.concat(Array.from(r.values()))},[])},enumerable:!1,configurable:!0}),t.prototype.bindingConnected=function(e){this.fetchEventListenerForBinding(e).bindingConnected(e)},t.prototype.bindingDisconnected=function(e){this.fetchEventListenerForBinding(e).bindingDisconnected(e)},t.prototype.handleError=function(e,r,i){i===void 0&&(i={}),this.application.handleError(e,"Error "+r,i)},t.prototype.fetchEventListenerForBinding=function(e){var r=e.eventTarget,i=e.eventName,n=e.eventOptions;return this.fetchEventListener(r,i,n)},t.prototype.fetchEventListener=function(e,r,i){var n=this.fetchEventListenerMapForEventTarget(e),s=this.cacheKey(r,i),o=n.get(s);return o||(o=this.createEventListener(e,r,i),n.set(s,o)),o},t.prototype.createEventListener=function(e,r,i){var n=new sn(e,r,i);return this.started&&n.connect(),n},t.prototype.fetchEventListenerMapForEventTarget=function(e){var r=this.eventListenerMaps.get(e);return r||(r=new Map,this.eventListenerMaps.set(e,r)),r},t.prototype.cacheKey=function(e,r){var i=[e];return Object.keys(r).sort().forEach(function(n){i.push(""+(r[n]?"":"!")+n)}),i.join(":")},t}();var za=/^((.+?)(@(window|document))?->)?(.+?)(#([^:]+?))(:(.+))?$/;function an(t){var e=t.trim(),r=e.match(za)||[];return{eventTarget:Za(r[4]),eventName:r[2],eventOptions:r[9]?Ja(r[9]):{},identifier:r[5],methodName:r[7]}}function Za(t){if(t=="window")return window;if(t=="document")return document}function Ja(t){return t.split(":").reduce(function(e,r){var i;return Object.assign(e,(i={},i[r.replace(/^!/,"")]=!/^!/.test(r),i))},{})}function ln(t){if(t==window)return"window";if(t==document)return"document"}var un=function(){function t(e,r,i){this.element=e,this.index=r,this.eventTarget=i.eventTarget||e,this.eventName=i.eventName||Ka(e)||Ir("missing event name"),this.eventOptions=i.eventOptions||{},this.identifier=i.identifier||Ir("missing identifier"),this.methodName=i.methodName||Ir("missing method name")}return t.forToken=function(e){return new this(e.element,e.index,an(e.content))},t.prototype.toString=function(){var e=this.eventTargetName?"@"+this.eventTargetName:"";return""+this.eventName+e+"->"+this.identifier+"#"+this.methodName},Object.defineProperty(t.prototype,"eventTargetName",{get:function(){return ln(this.eventTarget)},enumerable:!1,configurable:!0}),t}();var cn={a:function(t){return"click"},button:function(t){return"click"},form:function(t){return"submit"},input:function(t){return t.getAttribute("type")=="submit"?"click":"input"},select:function(t){return"change"},textarea:function(t){return"input"}};function Ka(t){var e=t.tagName.toLowerCase();if(e in cn)return cn[e](t)}function Ir(t){throw new Error(t)}var hn=function(){function t(e,r){this.context=e,this.action=r}return Object.defineProperty(t.prototype,"index",{get:function(){return this.action.index},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"eventTarget",{get:function(){return this.action.eventTarget},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"eventOptions",{get:function(){return this.action.eventOptions},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"identifier",{get:function(){return this.context.identifier},enumerable:!1,configurable:!0}),t.prototype.handleEvent=function(e){this.willBeInvokedByEvent(e)&&this.invokeWithEvent(e)},Object.defineProperty(t.prototype,"eventName",{get:function(){return this.action.eventName},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"method",{get:function(){var e=this.controller[this.methodName];if(typeof e=="function")return e;throw new Error('Action "'+this.action+'" references undefined method "'+this.methodName+'"')},enumerable:!1,configurable:!0}),t.prototype.invokeWithEvent=function(e){try{this.method.call(this.controller,e)}catch(l){var r=this,i=r.identifier,n=r.controller,s=r.element,o=r.index,a={identifier:i,controller:n,element:s,index:o,event:e};this.context.handleError(l,'invoking action "'+this.action+'"',a)}},t.prototype.willBeInvokedByEvent=function(e){var r=e.target;return this.element===r?!0:r instanceof Element&&this.element.contains(r)?this.scope.containsElement(r):this.scope.containsElement(this.action.element)},Object.defineProperty(t.prototype,"controller",{get:function(){return this.context.controller},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"methodName",{get:function(){return this.action.methodName},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"element",{get:function(){return this.scope.element},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"scope",{get:function(){return this.context.scope},enumerable:!1,configurable:!0}),t}();var dn=function(){function t(e,r){var i=this;this.element=e,this.started=!1,this.delegate=r,this.elements=new Set,this.mutationObserver=new MutationObserver(function(n){return i.processMutations(n)})}return t.prototype.start=function(){this.started||(this.started=!0,this.mutationObserver.observe(this.element,{attributes:!0,childList:!0,subtree:!0}),this.refresh())},t.prototype.stop=function(){this.started&&(this.mutationObserver.takeRecords(),this.mutationObserver.disconnect(),this.started=!1)},t.prototype.refresh=function(){if(this.started){for(var e=new Set(this.matchElementsInTree()),r=0,i=Array.from(this.elements);r<i.length;r++){var n=i[r];e.has(n)||this.removeElement(n)}for(var s=0,o=Array.from(e);s<o.length;s++){var n=o[s];this.addElement(n)}}},t.prototype.processMutations=function(e){if(this.started)for(var r=0,i=e;r<i.length;r++){var n=i[r];this.processMutation(n)}},t.prototype.processMutation=function(e){e.type=="attributes"?this.processAttributeChange(e.target,e.attributeName):e.type=="childList"&&(this.processRemovedNodes(e.removedNodes),this.processAddedNodes(e.addedNodes))},t.prototype.processAttributeChange=function(e,r){var i=e;this.elements.has(i)?this.delegate.elementAttributeChanged&&this.matchElement(i)?this.delegate.elementAttributeChanged(i,r):this.removeElement(i):this.matchElement(i)&&this.addElement(i)},t.prototype.processRemovedNodes=function(e){for(var r=0,i=Array.from(e);r<i.length;r++){var n=i[r],s=this.elementFromNode(n);s&&this.processTree(s,this.removeElement)}},t.prototype.processAddedNodes=function(e){for(var r=0,i=Array.from(e);r<i.length;r++){var n=i[r],s=this.elementFromNode(n);s&&this.elementIsActive(s)&&this.processTree(s,this.addElement)}},t.prototype.matchElement=function(e){return this.delegate.matchElement(e)},t.prototype.matchElementsInTree=function(e){return e===void 0&&(e=this.element),this.delegate.matchElementsInTree(e)},t.prototype.processTree=function(e,r){for(var i=0,n=this.matchElementsInTree(e);i<n.length;i++){var s=n[i];r.call(this,s)}},t.prototype.elementFromNode=function(e){if(e.nodeType==Node.ELEMENT_NODE)return e},t.prototype.elementIsActive=function(e){return e.isConnected!=this.element.isConnected?!1:this.element.contains(e)},t.prototype.addElement=function(e){this.elements.has(e)||this.elementIsActive(e)&&(this.elements.add(e),this.delegate.elementMatched&&this.delegate.elementMatched(e))},t.prototype.removeElement=function(e){this.elements.has(e)&&(this.elements.delete(e),this.delegate.elementUnmatched&&this.delegate.elementUnmatched(e))},t}();var fn=function(){function t(e,r,i){this.attributeName=r,this.delegate=i,this.elementObserver=new dn(e,this)}return Object.defineProperty(t.prototype,"element",{get:function(){return this.elementObserver.element},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"selector",{get:function(){return"["+this.attributeName+"]"},enumerable:!1,configurable:!0}),t.prototype.start=function(){this.elementObserver.start()},t.prototype.stop=function(){this.elementObserver.stop()},t.prototype.refresh=function(){this.elementObserver.refresh()},Object.defineProperty(t.prototype,"started",{get:function(){return this.elementObserver.started},enumerable:!1,configurable:!0}),t.prototype.matchElement=function(e){return e.hasAttribute(this.attributeName)},t.prototype.matchElementsInTree=function(e){var r=this.matchElement(e)?[e]:[],i=Array.from(e.querySelectorAll(this.selector));return r.concat(i)},t.prototype.elementMatched=function(e){this.delegate.elementMatchedAttribute&&this.delegate.elementMatchedAttribute(e,this.attributeName)},t.prototype.elementUnmatched=function(e){this.delegate.elementUnmatchedAttribute&&this.delegate.elementUnmatchedAttribute(e,this.attributeName)},t.prototype.elementAttributeChanged=function(e,r){this.delegate.elementAttributeValueChanged&&this.attributeName==r&&this.delegate.elementAttributeValueChanged(e,r)},t}();var mn=function(){function t(e,r){var i=this;this.element=e,this.delegate=r,this.started=!1,this.stringMap=new Map,this.mutationObserver=new MutationObserver(function(n){return i.processMutations(n)})}return t.prototype.start=function(){this.started||(this.started=!0,this.mutationObserver.observe(this.element,{attributes:!0}),this.refresh())},t.prototype.stop=function(){this.started&&(this.mutationObserver.takeRecords(),this.mutationObserver.disconnect(),this.started=!1)},t.prototype.refresh=function(){if(this.started)for(var e=0,r=this.knownAttributeNames;e<r.length;e++){var i=r[e];this.refreshAttribute(i)}},t.prototype.processMutations=function(e){if(this.started)for(var r=0,i=e;r<i.length;r++){var n=i[r];this.processMutation(n)}},t.prototype.processMutation=function(e){var r=e.attributeName;r&&this.refreshAttribute(r)},t.prototype.refreshAttribute=function(e){var r=this.delegate.getStringMapKeyForAttribute(e);if(r!=null){this.stringMap.has(e)||this.stringMapKeyAdded(r,e);var i=this.element.getAttribute(e);this.stringMap.get(e)!=i&&this.stringMapValueChanged(i,r),i==null?(this.stringMap.delete(e),this.stringMapKeyRemoved(r,e)):this.stringMap.set(e,i)}},t.prototype.stringMapKeyAdded=function(e,r){this.delegate.stringMapKeyAdded&&this.delegate.stringMapKeyAdded(e,r)},t.prototype.stringMapValueChanged=function(e,r){this.delegate.stringMapValueChanged&&this.delegate.stringMapValueChanged(e,r)},t.prototype.stringMapKeyRemoved=function(e,r){this.delegate.stringMapKeyRemoved&&this.delegate.stringMapKeyRemoved(e,r)},Object.defineProperty(t.prototype,"knownAttributeNames",{get:function(){return Array.from(new Set(this.currentAttributeNames.concat(this.recordedAttributeNames)))},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"currentAttributeNames",{get:function(){return Array.from(this.element.attributes).map(function(e){return e.name})},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"recordedAttributeNames",{get:function(){return Array.from(this.stringMap.keys())},enumerable:!1,configurable:!0}),t}();function qt(t,e,r){pn(t,e).add(r)}function $t(t,e,r){pn(t,e).delete(r),Ga(t,e)}function pn(t,e){var r=t.get(e);return r||(r=new Set,t.set(e,r)),r}function Ga(t,e){var r=t.get(e);r!=null&&r.size==0&&t.delete(e)}var Ke=function(){function t(){this.valuesByKey=new Map}return Object.defineProperty(t.prototype,"values",{get:function(){var e=Array.from(this.valuesByKey.values());return e.reduce(function(r,i){return r.concat(Array.from(i))},[])},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"size",{get:function(){var e=Array.from(this.valuesByKey.values());return e.reduce(function(r,i){return r+i.size},0)},enumerable:!1,configurable:!0}),t.prototype.add=function(e,r){qt(this.valuesByKey,e,r)},t.prototype.delete=function(e,r){$t(this.valuesByKey,e,r)},t.prototype.has=function(e,r){var i=this.valuesByKey.get(e);return i!=null&&i.has(r)},t.prototype.hasKey=function(e){return this.valuesByKey.has(e)},t.prototype.hasValue=function(e){var r=Array.from(this.valuesByKey.values());return r.some(function(i){return i.has(e)})},t.prototype.getValuesForKey=function(e){var r=this.valuesByKey.get(e);return r?Array.from(r):[]},t.prototype.getKeysForValue=function(e){return Array.from(this.valuesByKey).filter(function(r){var i=r[0],n=r[1];return n.has(e)}).map(function(r){var i=r[0],n=r[1];return i})},t}();var Ya=function(){var t=function(e,r){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)n.hasOwnProperty(s)&&(i[s]=n[s])},t(e,r)};return function(e,r){t(e,r);function i(){this.constructor=e}e.prototype=r===null?Object.create(r):(i.prototype=r.prototype,new i)}}(),jh=function(t){Ya(e,t);function e(){var r=t.call(this)||this;return r.keysByValue=new Map,r}return Object.defineProperty(e.prototype,"values",{get:function(){return Array.from(this.keysByValue.keys())},enumerable:!1,configurable:!0}),e.prototype.add=function(r,i){t.prototype.add.call(this,r,i),qt(this.keysByValue,i,r)},e.prototype.delete=function(r,i){t.prototype.delete.call(this,r,i),$t(this.keysByValue,i,r)},e.prototype.hasValue=function(r){return this.keysByValue.has(r)},e.prototype.getKeysForValue=function(r){var i=this.keysByValue.get(r);return i?Array.from(i):[]},e}(Ke);var gn=function(){function t(e,r,i){this.attributeObserver=new fn(e,r,this),this.delegate=i,this.tokensByElement=new Ke}return Object.defineProperty(t.prototype,"started",{get:function(){return this.attributeObserver.started},enumerable:!1,configurable:!0}),t.prototype.start=function(){this.attributeObserver.start()},t.prototype.stop=function(){this.attributeObserver.stop()},t.prototype.refresh=function(){this.attributeObserver.refresh()},Object.defineProperty(t.prototype,"element",{get:function(){return this.attributeObserver.element},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"attributeName",{get:function(){return this.attributeObserver.attributeName},enumerable:!1,configurable:!0}),t.prototype.elementMatchedAttribute=function(e){this.tokensMatched(this.readTokensForElement(e))},t.prototype.elementAttributeValueChanged=function(e){var r=this.refreshTokensForElement(e),i=r[0],n=r[1];this.tokensUnmatched(i),this.tokensMatched(n)},t.prototype.elementUnmatchedAttribute=function(e){this.tokensUnmatched(this.tokensByElement.getValuesForKey(e))},t.prototype.tokensMatched=function(e){var r=this;e.forEach(function(i){return r.tokenMatched(i)})},t.prototype.tokensUnmatched=function(e){var r=this;e.forEach(function(i){return r.tokenUnmatched(i)})},t.prototype.tokenMatched=function(e){this.delegate.tokenMatched(e),this.tokensByElement.add(e.element,e)},t.prototype.tokenUnmatched=function(e){this.delegate.tokenUnmatched(e),this.tokensByElement.delete(e.element,e)},t.prototype.refreshTokensForElement=function(e){var r=this.tokensByElement.getValuesForKey(e),i=this.readTokensForElement(e),n=Qa(r,i).findIndex(function(s){var o=s[0],a=s[1];return!el(o,a)});return n==-1?[[],[]]:[r.slice(n),i.slice(n)]},t.prototype.readTokensForElement=function(e){var r=this.attributeName,i=e.getAttribute(r)||"";return Xa(i,e,r)},t}();function Xa(t,e,r){return t.trim().split(/\s+/).filter(function(i){return i.length}).map(function(i,n){return{element:e,attributeName:r,content:i,index:n}})}function Qa(t,e){var r=Math.max(t.length,e.length);return Array.from({length:r},function(i,n){return[t[n],e[n]]})}function el(t,e){return t&&e&&t.index==e.index&&t.content==e.content}var Wt=function(){function t(e,r,i){this.tokenListObserver=new gn(e,r,this),this.delegate=i,this.parseResultsByToken=new WeakMap,this.valuesByTokenByElement=new WeakMap}return Object.defineProperty(t.prototype,"started",{get:function(){return this.tokenListObserver.started},enumerable:!1,configurable:!0}),t.prototype.start=function(){this.tokenListObserver.start()},t.prototype.stop=function(){this.tokenListObserver.stop()},t.prototype.refresh=function(){this.tokenListObserver.refresh()},Object.defineProperty(t.prototype,"element",{get:function(){return this.tokenListObserver.element},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"attributeName",{get:function(){return this.tokenListObserver.attributeName},enumerable:!1,configurable:!0}),t.prototype.tokenMatched=function(e){var r=e.element,i=this.fetchParseResultForToken(e).value;i&&(this.fetchValuesByTokenForElement(r).set(e,i),this.delegate.elementMatchedValue(r,i))},t.prototype.tokenUnmatched=function(e){var r=e.element,i=this.fetchParseResultForToken(e).value;i&&(this.fetchValuesByTokenForElement(r).delete(e),this.delegate.elementUnmatchedValue(r,i))},t.prototype.fetchParseResultForToken=function(e){var r=this.parseResultsByToken.get(e);return r||(r=this.parseToken(e),this.parseResultsByToken.set(e,r)),r},t.prototype.fetchValuesByTokenForElement=function(e){var r=this.valuesByTokenByElement.get(e);return r||(r=new Map,this.valuesByTokenByElement.set(e,r)),r},t.prototype.parseToken=function(e){try{var r=this.delegate.parseValueForToken(e);return{value:r}}catch(i){return{error:i}}},t}();var vn=function(){function t(e,r){this.context=e,this.delegate=r,this.bindingsByAction=new Map}return t.prototype.start=function(){this.valueListObserver||(this.valueListObserver=new Wt(this.element,this.actionAttribute,this),this.valueListObserver.start())},t.prototype.stop=function(){this.valueListObserver&&(this.valueListObserver.stop(),delete this.valueListObserver,this.disconnectAllActions())},Object.defineProperty(t.prototype,"element",{get:function(){return this.context.element},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"identifier",{get:function(){return this.context.identifier},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"actionAttribute",{get:function(){return this.schema.actionAttribute},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"schema",{get:function(){return this.context.schema},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"bindings",{get:function(){return Array.from(this.bindingsByAction.values())},enumerable:!1,configurable:!0}),t.prototype.connectAction=function(e){var r=new hn(this.context,e);this.bindingsByAction.set(e,r),this.delegate.bindingConnected(r)},t.prototype.disconnectAction=function(e){var r=this.bindingsByAction.get(e);r&&(this.bindingsByAction.delete(e),this.delegate.bindingDisconnected(r))},t.prototype.disconnectAllActions=function(){var e=this;this.bindings.forEach(function(r){return e.delegate.bindingDisconnected(r)}),this.bindingsByAction.clear()},t.prototype.parseValueForToken=function(e){var r=un.forToken(e);if(r.identifier==this.identifier)return r},t.prototype.elementMatchedValue=function(e,r){this.connectAction(r)},t.prototype.elementUnmatchedValue=function(e,r){this.disconnectAction(r)},t}();var yn=function(){function t(e,r){this.context=e,this.receiver=r,this.stringMapObserver=new mn(this.element,this),this.valueDescriptorMap=this.controller.valueDescriptorMap,this.invokeChangedCallbacksForDefaultValues()}return t.prototype.start=function(){this.stringMapObserver.start()},t.prototype.stop=function(){this.stringMapObserver.stop()},Object.defineProperty(t.prototype,"element",{get:function(){return this.context.element},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"controller",{get:function(){return this.context.controller},enumerable:!1,configurable:!0}),t.prototype.getStringMapKeyForAttribute=function(e){if(e in this.valueDescriptorMap)return this.valueDescriptorMap[e].name},t.prototype.stringMapValueChanged=function(e,r){this.invokeChangedCallbackForValue(r)},t.prototype.invokeChangedCallbacksForDefaultValues=function(){for(var e=0,r=this.valueDescriptors;e<r.length;e++){var i=r[e],n=i.key,s=i.name,o=i.defaultValue;o!=null&&!this.controller.data.has(n)&&this.invokeChangedCallbackForValue(s)}},t.prototype.invokeChangedCallbackForValue=function(e){var r=e+"Changed",i=this.receiver[r];if(typeof i=="function"){var n=this.receiver[e];i.call(this.receiver,n)}},Object.defineProperty(t.prototype,"valueDescriptors",{get:function(){var e=this.valueDescriptorMap;return Object.keys(e).map(function(r){return e[r]})},enumerable:!1,configurable:!0}),t}();var Pr=function(){function t(e,r){this.module=e,this.scope=r,this.controller=new e.controllerConstructor(this),this.bindingObserver=new vn(this,this.dispatcher),this.valueObserver=new yn(this,this.controller);try{this.controller.initialize()}catch(i){this.handleError(i,"initializing controller")}}return t.prototype.connect=function(){this.bindingObserver.start(),this.valueObserver.start();try{this.controller.connect()}catch(e){this.handleError(e,"connecting controller")}},t.prototype.disconnect=function(){try{this.controller.disconnect()}catch(e){this.handleError(e,"disconnecting controller")}this.valueObserver.stop(),this.bindingObserver.stop()},Object.defineProperty(t.prototype,"application",{get:function(){return this.module.application},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"identifier",{get:function(){return this.module.identifier},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"schema",{get:function(){return this.application.schema},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"dispatcher",{get:function(){return this.application.dispatcher},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"element",{get:function(){return this.scope.element},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"parentElement",{get:function(){return this.element.parentElement},enumerable:!1,configurable:!0}),t.prototype.handleError=function(e,r,i){i===void 0&&(i={});var n=this,s=n.identifier,o=n.controller,a=n.element;i=Object.assign({identifier:s,controller:o,element:a},i),this.application.handleError(e,"Error "+r,i)},t}();function Ge(t,e){var r=wn(t);return Array.from(r.reduce(function(i,n){return tl(n,e).forEach(function(s){return i.add(s)}),i},new Set))}function bn(t,e){var r=wn(t);return r.reduce(function(i,n){return i.push.apply(i,rl(n,e)),i},[])}function wn(t){for(var e=[];t;)e.push(t),t=Object.getPrototypeOf(t);return e.reverse()}function tl(t,e){var r=t[e];return Array.isArray(r)?r:[]}function rl(t,e){var r=t[e];return r?Object.keys(r).map(function(i){return[i,r[i]]}):[]}var il=function(){var t=function(e,r){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)n.hasOwnProperty(s)&&(i[s]=n[s])},t(e,r)};return function(e,r){t(e,r);function i(){this.constructor=e}e.prototype=r===null?Object.create(r):(i.prototype=r.prototype,new i)}}(),nl=function(){for(var t=0,e=0,r=arguments.length;e<r;e++)t+=arguments[e].length;for(var i=Array(t),n=0,e=0;e<r;e++)for(var s=arguments[e],o=0,a=s.length;o<a;o++,n++)i[n]=s[o];return i};function Sn(t){return sl(t,ol(t))}function sl(t,e){var r=cl(t),i=al(t.prototype,e);return Object.defineProperties(r.prototype,i),r}function ol(t){var e=Ge(t,"blessings");return e.reduce(function(r,i){var n=i(t);for(var s in n){var o=r[s]||{};r[s]=Object.assign(o,n[s])}return r},{})}function al(t,e){return ul(e).reduce(function(r,i){var n,s=ll(t,e,i);return s&&Object.assign(r,(n={},n[i]=s,n)),r},{})}function ll(t,e,r){var i=Object.getOwnPropertyDescriptor(t,r),n=i&&"value"in i;if(!n){var s=Object.getOwnPropertyDescriptor(e,r).value;return i&&(s.get=i.get||s.get,s.set=i.set||s.set),s}}var ul=function(){return typeof Object.getOwnPropertySymbols=="function"?function(t){return nl(Object.getOwnPropertyNames(t),Object.getOwnPropertySymbols(t))}:Object.getOwnPropertyNames}(),cl=function(){function t(r){function i(){var n=this&&this instanceof i?this.constructor:void 0;return Reflect.construct(r,arguments,n)}return i.prototype=Object.create(r.prototype,{constructor:{value:i}}),Reflect.setPrototypeOf(i,r),i}function e(){var r=function(){this.a.call(this)},i=t(r);return i.prototype.a=function(){},new i}try{return e(),t}catch(r){return function(i){return function(n){il(s,n);function s(){return n!==null&&n.apply(this,arguments)||this}return s}(i)}}}();function En(t){return{identifier:t.identifier,controllerConstructor:Sn(t.controllerConstructor)}}var Tn=function(){function t(e,r){this.application=e,this.definition=En(r),this.contextsByScope=new WeakMap,this.connectedContexts=new Set}return Object.defineProperty(t.prototype,"identifier",{get:function(){return this.definition.identifier},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"controllerConstructor",{get:function(){return this.definition.controllerConstructor},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"contexts",{get:function(){return Array.from(this.connectedContexts)},enumerable:!1,configurable:!0}),t.prototype.connectContextForScope=function(e){var r=this.fetchContextForScope(e);this.connectedContexts.add(r),r.connect()},t.prototype.disconnectContextForScope=function(e){var r=this.contextsByScope.get(e);r&&(this.connectedContexts.delete(r),r.disconnect())},t.prototype.fetchContextForScope=function(e){var r=this.contextsByScope.get(e);return r||(r=new Pr(this,e),this.contextsByScope.set(e,r)),r},t}();var kn=function(){function t(e){this.scope=e}return t.prototype.has=function(e){return this.data.has(this.getDataKey(e))},t.prototype.get=function(e){return this.data.get(this.getDataKey(e))},t.prototype.getAttributeName=function(e){return this.data.getAttributeNameForKey(this.getDataKey(e))},t.prototype.getDataKey=function(e){return e+"-class"},Object.defineProperty(t.prototype,"data",{get:function(){return this.scope.data},enumerable:!1,configurable:!0}),t}();function An(t){return t.replace(/(?:[_-])([a-z0-9])/g,function(e,r){return r.toUpperCase()})}function Ye(t){return t.charAt(0).toUpperCase()+t.slice(1)}function zt(t){return t.replace(/([A-Z])/g,function(e,r){return"-"+r.toLowerCase()})}var On=function(){function t(e){this.scope=e}return Object.defineProperty(t.prototype,"element",{get:function(){return this.scope.element},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"identifier",{get:function(){return this.scope.identifier},enumerable:!1,configurable:!0}),t.prototype.get=function(e){var r=this.getAttributeNameForKey(e);return this.element.getAttribute(r)},t.prototype.set=function(e,r){var i=this.getAttributeNameForKey(e);return this.element.setAttribute(i,r),this.get(e)},t.prototype.has=function(e){var r=this.getAttributeNameForKey(e);return this.element.hasAttribute(r)},t.prototype.delete=function(e){if(this.has(e)){var r=this.getAttributeNameForKey(e);return this.element.removeAttribute(r),!0}else return!1},t.prototype.getAttributeNameForKey=function(e){return"data-"+this.identifier+"-"+zt(e)},t}();var Cn=function(){function t(e){this.warnedKeysByObject=new WeakMap,this.logger=e}return t.prototype.warn=function(e,r,i){var n=this.warnedKeysByObject.get(e);n||(n=new Set,this.warnedKeysByObject.set(e,n)),n.has(r)||(n.add(r),this.logger.warn(i,e))},t}();function ft(t,e){return"["+t+'~="'+e+'"]'}var hl=function(){for(var t=0,e=0,r=arguments.length;e<r;e++)t+=arguments[e].length;for(var i=Array(t),n=0,e=0;e<r;e++)for(var s=arguments[e],o=0,a=s.length;o<a;o++,n++)i[n]=s[o];return i},Ln=function(){function t(e){this.scope=e}return Object.defineProperty(t.prototype,"element",{get:function(){return this.scope.element},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"identifier",{get:function(){return this.scope.identifier},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"schema",{get:function(){return this.scope.schema},enumerable:!1,configurable:!0}),t.prototype.has=function(e){return this.find(e)!=null},t.prototype.find=function(){for(var e=this,r=[],i=0;i<arguments.length;i++)r[i]=arguments[i];return r.reduce(function(n,s){return n||e.findTarget(s)||e.findLegacyTarget(s)},void 0)},t.prototype.findAll=function(){for(var e=this,r=[],i=0;i<arguments.length;i++)r[i]=arguments[i];return r.reduce(function(n,s){return hl(n,e.findAllTargets(s),e.findAllLegacyTargets(s))},[])},t.prototype.findTarget=function(e){var r=this.getSelectorForTargetName(e);return this.scope.findElement(r)},t.prototype.findAllTargets=function(e){var r=this.getSelectorForTargetName(e);return this.scope.findAllElements(r)},t.prototype.getSelectorForTargetName=function(e){var r="data-"+this.identifier+"-target";return ft(r,e)},t.prototype.findLegacyTarget=function(e){var r=this.getLegacySelectorForTargetName(e);return this.deprecate(this.scope.findElement(r),e)},t.prototype.findAllLegacyTargets=function(e){var r=this,i=this.getLegacySelectorForTargetName(e);return this.scope.findAllElements(i).map(function(n){return r.deprecate(n,e)})},t.prototype.getLegacySelectorForTargetName=function(e){var r=this.identifier+"."+e;return ft(this.schema.targetAttribute,r)},t.prototype.deprecate=function(e,r){if(e){var i=this.identifier,n=this.schema.targetAttribute;this.guide.warn(e,"target:"+r,"Please replace "+n+'="'+i+"."+r+'" with data-'+i+'-target="'+r+'". '+("The "+n+" attribute is deprecated and will be removed in a future version of Stimulus."))}return e},Object.defineProperty(t.prototype,"guide",{get:function(){return this.scope.guide},enumerable:!1,configurable:!0}),t}();var dl=function(){for(var t=0,e=0,r=arguments.length;e<r;e++)t+=arguments[e].length;for(var i=Array(t),n=0,e=0;e<r;e++)for(var s=arguments[e],o=0,a=s.length;o<a;o++,n++)i[n]=s[o];return i},In=function(){function t(e,r,i,n){var s=this;this.targets=new Ln(this),this.classes=new kn(this),this.data=new On(this),this.containsElement=function(o){return o.closest(s.controllerSelector)===s.element},this.schema=e,this.element=r,this.identifier=i,this.guide=new Cn(n)}return t.prototype.findElement=function(e){return this.element.matches(e)?this.element:this.queryElements(e).find(this.containsElement)},t.prototype.findAllElements=function(e){return dl(this.element.matches(e)?[this.element]:[],this.queryElements(e).filter(this.containsElement))},t.prototype.queryElements=function(e){return Array.from(this.element.querySelectorAll(e))},Object.defineProperty(t.prototype,"controllerSelector",{get:function(){return ft(this.schema.controllerAttribute,this.identifier)},enumerable:!1,configurable:!0}),t}();var Pn=function(){function t(e,r,i){this.element=e,this.schema=r,this.delegate=i,this.valueListObserver=new Wt(this.element,this.controllerAttribute,this),this.scopesByIdentifierByElement=new WeakMap,this.scopeReferenceCounts=new WeakMap}return t.prototype.start=function(){this.valueListObserver.start()},t.prototype.stop=function(){this.valueListObserver.stop()},Object.defineProperty(t.prototype,"controllerAttribute",{get:function(){return this.schema.controllerAttribute},enumerable:!1,configurable:!0}),t.prototype.parseValueForToken=function(e){var r=e.element,i=e.content,n=this.fetchScopesByIdentifierForElement(r),s=n.get(i);return s||(s=this.delegate.createScopeForElementAndIdentifier(r,i),n.set(i,s)),s},t.prototype.elementMatchedValue=function(e,r){var i=(this.scopeReferenceCounts.get(r)||0)+1;this.scopeReferenceCounts.set(r,i),i==1&&this.delegate.scopeConnected(r)},t.prototype.elementUnmatchedValue=function(e,r){var i=this.scopeReferenceCounts.get(r);i&&(this.scopeReferenceCounts.set(r,i-1),i==1&&this.delegate.scopeDisconnected(r))},t.prototype.fetchScopesByIdentifierForElement=function(e){var r=this.scopesByIdentifierByElement.get(e);return r||(r=new Map,this.scopesByIdentifierByElement.set(e,r)),r},t}();var Mn=function(){function t(e){this.application=e,this.scopeObserver=new Pn(this.element,this.schema,this),this.scopesByIdentifier=new Ke,this.modulesByIdentifier=new Map}return Object.defineProperty(t.prototype,"element",{get:function(){return this.application.element},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"schema",{get:function(){return this.application.schema},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"logger",{get:function(){return this.application.logger},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"controllerAttribute",{get:function(){return this.schema.controllerAttribute},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"modules",{get:function(){return Array.from(this.modulesByIdentifier.values())},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"contexts",{get:function(){return this.modules.reduce(function(e,r){return e.concat(r.contexts)},[])},enumerable:!1,configurable:!0}),t.prototype.start=function(){this.scopeObserver.start()},t.prototype.stop=function(){this.scopeObserver.stop()},t.prototype.loadDefinition=function(e){this.unloadIdentifier(e.identifier);var r=new Tn(this.application,e);this.connectModule(r)},t.prototype.unloadIdentifier=function(e){var r=this.modulesByIdentifier.get(e);r&&this.disconnectModule(r)},t.prototype.getContextForElementAndIdentifier=function(e,r){var i=this.modulesByIdentifier.get(r);if(i)return i.contexts.find(function(n){return n.element==e})},t.prototype.handleError=function(e,r,i){this.application.handleError(e,r,i)},t.prototype.createScopeForElementAndIdentifier=function(e,r){return new In(this.schema,e,r,this.logger)},t.prototype.scopeConnected=function(e){this.scopesByIdentifier.add(e.identifier,e);var r=this.modulesByIdentifier.get(e.identifier);r&&r.connectContextForScope(e)},t.prototype.scopeDisconnected=function(e){this.scopesByIdentifier.delete(e.identifier,e);var r=this.modulesByIdentifier.get(e.identifier);r&&r.disconnectContextForScope(e)},t.prototype.connectModule=function(e){this.modulesByIdentifier.set(e.identifier,e);var r=this.scopesByIdentifier.getValuesForKey(e.identifier);r.forEach(function(i){return e.connectContextForScope(i)})},t.prototype.disconnectModule=function(e){this.modulesByIdentifier.delete(e.identifier);var r=this.scopesByIdentifier.getValuesForKey(e.identifier);r.forEach(function(i){return e.disconnectContextForScope(i)})},t}();var Mr={controllerAttribute:"data-controller",actionAttribute:"data-action",targetAttribute:"data-target"};var fl=function(t,e,r,i){function n(s){return s instanceof r?s:new r(function(o){o(s)})}return new(r||(r=Promise))(function(s,o){function a(c){try{u(i.next(c))}catch(h){o(h)}}function l(c){try{u(i.throw(c))}catch(h){o(h)}}function u(c){c.done?s(c.value):n(c.value).then(a,l)}u((i=i.apply(t,e||[])).next())})},ml=function(t,e){var r={label:0,sent:function(){if(s[0]&1)throw s[1];return s[1]},trys:[],ops:[]},i,n,s,o;return o={next:a(0),throw:a(1),return:a(2)},typeof Symbol=="function"&&(o[Symbol.iterator]=function(){return this}),o;function a(u){return function(c){return l([u,c])}}function l(u){if(i)throw new TypeError("Generator is already executing.");for(;r;)try{if(i=1,n&&(s=u[0]&2?n.return:u[0]?n.throw||((s=n.return)&&s.call(n),0):n.next)&&!(s=s.call(n,u[1])).done)return s;switch(n=0,s&&(u=[u[0]&2,s.value]),u[0]){case 0:case 1:s=u;break;case 4:return r.label++,{value:u[1],done:!1};case 5:r.label++,n=u[1],u=[0];continue;case 7:u=r.ops.pop(),r.trys.pop();continue;default:if(s=r.trys,!(s=s.length>0&&s[s.length-1])&&(u[0]===6||u[0]===2)){r=0;continue}if(u[0]===3&&(!s||u[1]>s[0]&&u[1]<s[3])){r.label=u[1];break}if(u[0]===6&&r.label<s[1]){r.label=s[1],s=u;break}if(s&&r.label<s[2]){r.label=s[2],r.ops.push(u);break}s[2]&&r.ops.pop(),r.trys.pop();continue}u=e.call(t,r)}catch(c){u=[6,c],n=0}finally{i=s=0}if(u[0]&5)throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}},Rn=function(){for(var t=0,e=0,r=arguments.length;e<r;e++)t+=arguments[e].length;for(var i=Array(t),n=0,e=0;e<r;e++)for(var s=arguments[e],o=0,a=s.length;o<a;o++,n++)i[n]=s[o];return i},Rr=function(){function t(e,r){e===void 0&&(e=document.documentElement),r===void 0&&(r=Mr),this.logger=console,this.element=e,this.schema=r,this.dispatcher=new on(this),this.router=new Mn(this)}return t.start=function(e,r){var i=new t(e,r);return i.start(),i},t.prototype.start=function(){return fl(this,void 0,void 0,function(){return ml(this,function(e){switch(e.label){case 0:return[4,pl()];case 1:return e.sent(),this.dispatcher.start(),this.router.start(),[2]}})})},t.prototype.stop=function(){this.dispatcher.stop(),this.router.stop()},t.prototype.register=function(e,r){this.load({identifier:e,controllerConstructor:r})},t.prototype.load=function(e){for(var r=this,i=[],n=1;n<arguments.length;n++)i[n-1]=arguments[n];var s=Array.isArray(e)?e:Rn([e],i);s.forEach(function(o){return r.router.loadDefinition(o)})},t.prototype.unload=function(e){for(var r=this,i=[],n=1;n<arguments.length;n++)i[n-1]=arguments[n];var s=Array.isArray(e)?e:Rn([e],i);s.forEach(function(o){return r.router.unloadIdentifier(o)})},Object.defineProperty(t.prototype,"controllers",{get:function(){return this.router.contexts.map(function(e){return e.controller})},enumerable:!1,configurable:!0}),t.prototype.getControllerForElementAndIdentifier=function(e,r){var i=this.router.getContextForElementAndIdentifier(e,r);return i?i.controller:null},t.prototype.handleError=function(e,r,i){this.logger.error(`%s %o -%o`,t,e,n)},r}();function Tr(){return new Promise(function(r){document.readyState=="loading"?document.addEventListener("DOMContentLoaded",r):r()})}function st(r){var e=O(r,"classes");return e.reduce(function(t,n){return Object.assign(t,Cr(n))},{})}function Cr(r){var e,t=r+"Class";return e={},e[t]={get:function(){var n=this.classes;if(n.has(r))return n.get(r);var i=n.getAttributeName(r);throw new Error('Missing attribute "'+i+'"')}},e["has"+R(t)]={get:function(){return this.classes.has(r)}},e}function ot(r){var e=O(r,"targets");return e.reduce(function(t,n){return Object.assign(t,Or(n))},{})}function Or(r){var e;return e={},e[r+"Target"]={get:function(){var t=this.targets.find(r);if(t)return t;throw new Error('Missing target element "'+this.identifier+"."+r+'"')}},e[r+"Targets"]={get:function(){return this.targets.findAll(r)}},e["has"+R(r)+"Target"]={get:function(){return this.targets.has(r)}},e}function at(r){var e=Ke(r,"values"),t={valueDescriptorMap:{get:function(){var n=this;return e.reduce(function(i,s){var o,c=ct(s),l=n.data.getAttributeNameForKey(c.key);return Object.assign(i,(o={},o[l]=c,o))},{})}}};return e.reduce(function(n,i){return Object.assign(n,Rr(i))},t)}function Rr(r){var e,t=ct(r),n=t.type,i=t.key,s=t.name,o=Fr[n],c=lt[n]||lt.default;return e={},e[s]={get:function(){var l=this.data.get(i);return l!==null?o(l):t.defaultValue},set:function(l){l===void 0?this.data.delete(i):this.data.set(i,c(l))}},e["has"+R(s)]={get:function(){return this.data.has(i)}},e}function ct(r){var e=r[0],t=r[1],n=kr(t);return Mr(e,n)}function kr(r){switch(r){case Array:return"array";case Boolean:return"boolean";case Number:return"number";case Object:return"object";case String:return"string"}throw new Error('Unknown value type constant "'+r+'"')}function Mr(r,e){var t=D(r)+"-value";return{type:e,key:t,name:Xe(t),get defaultValue(){return xr[e]}}}var xr={get array(){return[]},boolean:!1,number:0,get object(){return{}},string:""},Fr={array:function(r){var e=JSON.parse(r);if(!Array.isArray(e))throw new TypeError("Expected array");return e},boolean:function(r){return!(r=="0"||r=="false")},number:function(r){return parseFloat(r)},object:function(r){var e=JSON.parse(r);if(e===null||typeof e!="object"||Array.isArray(e))throw new TypeError("Expected object");return e},string:function(r){return r}},lt={default:Br,array:ut,object:ut};function ut(r){return JSON.stringify(r)}function Br(r){return""+r}var Ir=function(){function r(e){this.context=e}return Object.defineProperty(r.prototype,"application",{get:function(){return this.context.application},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"scope",{get:function(){return this.context.scope},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"element",{get:function(){return this.scope.element},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"identifier",{get:function(){return this.scope.identifier},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"targets",{get:function(){return this.scope.targets},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"classes",{get:function(){return this.scope.classes},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"data",{get:function(){return this.scope.data},enumerable:!1,configurable:!0}),r.prototype.initialize=function(){},r.prototype.connect=function(){},r.prototype.disconnect=function(){},r.blessings=[st,ot,at],r.targets=[],r.values={},r}();var ht=[];var Nr=Y.start();Nr.load(ht);})(); +%o`,r,e,i)},t}();function pl(){return new Promise(function(t){document.readyState=="loading"?document.addEventListener("DOMContentLoaded",t):t()})}function Dn(t){var e=Ge(t,"classes");return e.reduce(function(r,i){return Object.assign(r,gl(i))},{})}function gl(t){var e,r=t+"Class";return e={},e[r]={get:function(){var i=this.classes;if(i.has(t))return i.get(t);var n=i.getAttributeName(t);throw new Error('Missing attribute "'+n+'"')}},e["has"+Ye(r)]={get:function(){return this.classes.has(t)}},e}function xn(t){var e=Ge(t,"targets");return e.reduce(function(r,i){return Object.assign(r,vl(i))},{})}function vl(t){var e;return e={},e[t+"Target"]={get:function(){var r=this.targets.find(t);if(r)return r;throw new Error('Missing target element "'+this.identifier+"."+t+'"')}},e[t+"Targets"]={get:function(){return this.targets.findAll(t)}},e["has"+Ye(t)+"Target"]={get:function(){return this.targets.has(t)}},e}function Nn(t){var e=bn(t,"values"),r={valueDescriptorMap:{get:function(){var i=this;return e.reduce(function(n,s){var o,a=_n(s),l=i.data.getAttributeNameForKey(a.key);return Object.assign(n,(o={},o[l]=a,o))},{})}}};return e.reduce(function(i,n){return Object.assign(i,yl(n))},r)}function yl(t){var e,r=_n(t),i=r.type,n=r.key,s=r.name,o=El[i],a=Fn[i]||Fn.default;return e={},e[s]={get:function(){var l=this.data.get(n);return l!==null?o(l):r.defaultValue},set:function(l){l===void 0?this.data.delete(n):this.data.set(n,a(l))}},e["has"+Ye(s)]={get:function(){return this.data.has(n)}},e}function _n(t){var e=t[0],r=t[1],i=bl(r);return wl(e,i)}function bl(t){switch(t){case Array:return"array";case Boolean:return"boolean";case Number:return"number";case Object:return"object";case String:return"string"}throw new Error('Unknown value type constant "'+t+'"')}function wl(t,e){var r=zt(t)+"-value";return{type:e,key:r,name:An(r),get defaultValue(){return Sl[e]}}}var Sl={get array(){return[]},boolean:!1,number:0,get object(){return{}},string:""},El={array:function(t){var e=JSON.parse(t);if(!Array.isArray(e))throw new TypeError("Expected array");return e},boolean:function(t){return!(t=="0"||t=="false")},number:function(t){return parseFloat(t)},object:function(t){var e=JSON.parse(t);if(e===null||typeof e!="object"||Array.isArray(e))throw new TypeError("Expected object");return e},string:function(t){return t}},Fn={default:Tl,array:Hn,object:Hn};function Hn(t){return JSON.stringify(t)}function Tl(t){return""+t}var Dr=function(){function t(e){this.context=e}return Object.defineProperty(t.prototype,"application",{get:function(){return this.context.application},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"scope",{get:function(){return this.context.scope},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"element",{get:function(){return this.scope.element},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"identifier",{get:function(){return this.scope.identifier},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"targets",{get:function(){return this.scope.targets},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"classes",{get:function(){return this.scope.classes},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"data",{get:function(){return this.scope.data},enumerable:!1,configurable:!0}),t.prototype.initialize=function(){},t.prototype.connect=function(){},t.prototype.disconnect=function(){},t.blessings=[Dn,xn,Nn],t.targets=[],t.values={},t}();var ni=ki(ii()),or=class extends Dr{connect(){var t=Intl.DateTimeFormat().resolvedOptions().timeZone,e=Intl.DateTimeFormat().resolvedOptions().locale,r=document.body.dataset.locale||e||"en",i=document.body.dataset.tz||t||"UTC",n=ni.DateTime[this.formatValue];console.log(r,i,n),this.date=ni.DateTime.fromISO(this.element.dateTime).setZone(i).setLocale(r),this.element.innerText=this.date.toLocaleString(n)}};Ai(or,"values",{format:String});var co=[{identifier:"time",controllerConstructor:or}];var At=t=>typeof t=="function"?t:function(){return t},Lc=typeof self!="undefined"?self:null,Ot=typeof window!="undefined"?window:null,ar=Lc||Ot||void 0,Ic="2.0.0",le={connecting:0,open:1,closing:2,closed:3},Pc=1e4,Mc=1e3,q={closed:"closed",errored:"errored",joined:"joined",joining:"joining",leaving:"leaving"},V={close:"phx_close",error:"phx_error",join:"phx_join",reply:"phx_reply",leave:"phx_leave"},Rc=[V.close,V.error,V.join,V.reply,V.leave],si={longpoll:"longpoll",websocket:"websocket"},lr=class{constructor(t,e,r,i){this.channel=t,this.event=e,this.payload=r||function(){return{}},this.receivedResp=null,this.timeout=i,this.timeoutTimer=null,this.recHooks=[],this.sent=!1}resend(t){this.timeout=t,this.reset(),this.send()}send(){this.hasReceived("timeout")||(this.startTimeout(),this.sent=!0,this.channel.socket.push({topic:this.channel.topic,event:this.event,payload:this.payload(),ref:this.ref,join_ref:this.channel.joinRef()}))}receive(t,e){return this.hasReceived(t)&&e(this.receivedResp.response),this.recHooks.push({status:t,callback:e}),this}reset(){this.cancelRefEvent(),this.ref=null,this.refEvent=null,this.receivedResp=null,this.sent=!1}matchReceive({status:t,response:e,_ref:r}){this.recHooks.filter(i=>i.status===t).forEach(i=>i.callback(e))}cancelRefEvent(){!this.refEvent||this.channel.off(this.refEvent)}cancelTimeout(){clearTimeout(this.timeoutTimer),this.timeoutTimer=null}startTimeout(){this.timeoutTimer&&this.cancelTimeout(),this.ref=this.channel.socket.makeRef(),this.refEvent=this.channel.replyEventName(this.ref),this.channel.on(this.refEvent,t=>{this.cancelRefEvent(),this.cancelTimeout(),this.receivedResp=t,this.matchReceive(t)}),this.timeoutTimer=setTimeout(()=>{this.trigger("timeout",{})},this.timeout)}hasReceived(t){return this.receivedResp&&this.receivedResp.status===t}trigger(t,e){this.channel.trigger(this.refEvent,{status:t,response:e})}},ho=class{constructor(t,e){this.callback=t,this.timerCalc=e,this.timer=null,this.tries=0}reset(){this.tries=0,clearTimeout(this.timer)}scheduleTimeout(){clearTimeout(this.timer),this.timer=setTimeout(()=>{this.tries=this.tries+1,this.callback()},this.timerCalc(this.tries+1))}},Dc=class{constructor(t,e,r){this.state=q.closed,this.topic=t,this.params=At(e||{}),this.socket=r,this.bindings=[],this.bindingRef=0,this.timeout=this.socket.timeout,this.joinedOnce=!1,this.joinPush=new lr(this,V.join,this.params,this.timeout),this.pushBuffer=[],this.stateChangeRefs=[],this.rejoinTimer=new ho(()=>{this.socket.isConnected()&&this.rejoin()},this.socket.rejoinAfterMs),this.stateChangeRefs.push(this.socket.onError(()=>this.rejoinTimer.reset())),this.stateChangeRefs.push(this.socket.onOpen(()=>{this.rejoinTimer.reset(),this.isErrored()&&this.rejoin()})),this.joinPush.receive("ok",()=>{this.state=q.joined,this.rejoinTimer.reset(),this.pushBuffer.forEach(i=>i.send()),this.pushBuffer=[]}),this.joinPush.receive("error",()=>{this.state=q.errored,this.socket.isConnected()&&this.rejoinTimer.scheduleTimeout()}),this.onClose(()=>{this.rejoinTimer.reset(),this.socket.hasLogger()&&this.socket.log("channel",`close ${this.topic} ${this.joinRef()}`),this.state=q.closed,this.socket.remove(this)}),this.onError(i=>{this.socket.hasLogger()&&this.socket.log("channel",`error ${this.topic}`,i),this.isJoining()&&this.joinPush.reset(),this.state=q.errored,this.socket.isConnected()&&this.rejoinTimer.scheduleTimeout()}),this.joinPush.receive("timeout",()=>{this.socket.hasLogger()&&this.socket.log("channel",`timeout ${this.topic} (${this.joinRef()})`,this.joinPush.timeout),new lr(this,V.leave,At({}),this.timeout).send(),this.state=q.errored,this.joinPush.reset(),this.socket.isConnected()&&this.rejoinTimer.scheduleTimeout()}),this.on(V.reply,(i,n)=>{this.trigger(this.replyEventName(n),i)})}join(t=this.timeout){if(this.joinedOnce)throw new Error("tried to join multiple times. 'join' can only be called a single time per channel instance");return this.timeout=t,this.joinedOnce=!0,this.rejoin(),this.joinPush}onClose(t){this.on(V.close,t)}onError(t){return this.on(V.error,e=>t(e))}on(t,e){let r=this.bindingRef++;return this.bindings.push({event:t,ref:r,callback:e}),r}off(t,e){this.bindings=this.bindings.filter(r=>!(r.event===t&&(typeof e=="undefined"||e===r.ref)))}canPush(){return this.socket.isConnected()&&this.isJoined()}push(t,e,r=this.timeout){if(e=e||{},!this.joinedOnce)throw new Error(`tried to push '${t}' to '${this.topic}' before joining. Use channel.join() before pushing events`);let i=new lr(this,t,function(){return e},r);return this.canPush()?i.send():(i.startTimeout(),this.pushBuffer.push(i)),i}leave(t=this.timeout){this.rejoinTimer.reset(),this.joinPush.cancelTimeout(),this.state=q.leaving;let e=()=>{this.socket.hasLogger()&&this.socket.log("channel",`leave ${this.topic}`),this.trigger(V.close,"leave")},r=new lr(this,V.leave,At({}),t);return r.receive("ok",()=>e()).receive("timeout",()=>e()),r.send(),this.canPush()||r.trigger("ok",{}),r}onMessage(t,e,r){return e}isLifecycleEvent(t){return Rc.indexOf(t)>=0}isMember(t,e,r,i){return this.topic!==t?!1:i&&i!==this.joinRef()&&this.isLifecycleEvent(e)?(this.socket.hasLogger()&&this.socket.log("channel","dropping outdated message",{topic:t,event:e,payload:r,joinRef:i}),!1):!0}joinRef(){return this.joinPush.ref}rejoin(t=this.timeout){this.isLeaving()||(this.socket.leaveOpenTopic(this.topic),this.state=q.joining,this.joinPush.resend(t))}trigger(t,e,r,i){let n=this.onMessage(t,e,r,i);if(e&&!n)throw new Error("channel onMessage callbacks must return the payload, modified or unmodified");let s=this.bindings.filter(o=>o.event===t);for(let o=0;o<s.length;o++)s[o].callback(n,r,i||this.joinRef())}replyEventName(t){return`chan_reply_${t}`}isClosed(){return this.state===q.closed}isErrored(){return this.state===q.errored}isJoined(){return this.state===q.joined}isJoining(){return this.state===q.joining}isLeaving(){return this.state===q.leaving}},Ct=class{constructor(){this.states={complete:4}}static request(t,e,r,i,n,s,o){if(ar.XDomainRequest){let a=new ar.XDomainRequest;this.xdomainRequest(a,t,e,i,n,s,o)}else{let a=new ar.XMLHttpRequest;this.xhrRequest(a,t,e,r,i,n,s,o)}}static xdomainRequest(t,e,r,i,n,s,o){t.timeout=n,t.open(e,r),t.onload=()=>{let a=this.parseJSON(t.responseText);o&&o(a)},s&&(t.ontimeout=s),t.onprogress=()=>{},t.send(i)}static xhrRequest(t,e,r,i,n,s,o,a){t.open(e,r,!0),t.timeout=s,t.setRequestHeader("Content-Type",i),t.onerror=()=>{a&&a(null)},t.onreadystatechange=()=>{if(t.readyState===this.states.complete&&a){let l=this.parseJSON(t.responseText);a(l)}},o&&(t.ontimeout=o),t.send(n)}static parseJSON(t){if(!t||t==="")return null;try{return JSON.parse(t)}catch(e){return console&&console.log("failed to parse JSON response",t),null}}static serialize(t,e){let r=[];for(var i in t){if(!Object.prototype.hasOwnProperty.call(t,i))continue;let n=e?`${e}[${i}]`:i,s=t[i];typeof s=="object"?r.push(this.serialize(s,n)):r.push(encodeURIComponent(n)+"="+encodeURIComponent(s))}return r.join("&")}static appendParams(t,e){if(Object.keys(e).length===0)return t;let r=t.match(/\?/)?"&":"?";return`${t}${r}${this.serialize(e)}`}},fo=class{constructor(t){this.endPoint=null,this.token=null,this.skipHeartbeat=!0,this.onopen=function(){},this.onerror=function(){},this.onmessage=function(){},this.onclose=function(){},this.pollEndpoint=this.normalizeEndpoint(t),this.readyState=le.connecting,this.poll()}normalizeEndpoint(t){return t.replace("ws://","http://").replace("wss://","https://").replace(new RegExp("(.*)/"+si.websocket),"$1/"+si.longpoll)}endpointURL(){return Ct.appendParams(this.pollEndpoint,{token:this.token})}closeAndRetry(){this.close(),this.readyState=le.connecting}ontimeout(){this.onerror("timeout"),this.closeAndRetry()}poll(){(this.readyState===le.open||this.readyState===le.connecting)&&Ct.request("GET",this.endpointURL(),"application/json",null,this.timeout,this.ontimeout.bind(this),t=>{if(t){var{status:e,token:r,messages:i}=t;this.token=r}else e=0;switch(e){case 200:i.forEach(n=>{setTimeout(()=>{this.onmessage({data:n})},0)}),this.poll();break;case 204:this.poll();break;case 410:this.readyState=le.open,this.onopen(),this.poll();break;case 403:this.onerror(),this.close();break;case 0:case 500:this.onerror(),this.closeAndRetry();break;default:throw new Error(`unhandled poll status ${e}`)}})}send(t){Ct.request("POST",this.endpointURL(),"application/json",t,this.timeout,this.onerror.bind(this,"timeout"),e=>{(!e||e.status!==200)&&(this.onerror(e&&e.status),this.closeAndRetry())})}close(t,e){this.readyState=le.closed,this.onclose()}};var ur={HEADER_LENGTH:1,META_LENGTH:4,KINDS:{push:0,reply:1,broadcast:2},encode(t,e){if(t.payload.constructor===ArrayBuffer)return e(this.binaryEncode(t));{let r=[t.join_ref,t.ref,t.topic,t.event,t.payload];return e(JSON.stringify(r))}},decode(t,e){if(t.constructor===ArrayBuffer)return e(this.binaryDecode(t));{let[r,i,n,s,o]=JSON.parse(t);return e({join_ref:r,ref:i,topic:n,event:s,payload:o})}},binaryEncode(t){let{join_ref:e,ref:r,event:i,topic:n,payload:s}=t,o=this.META_LENGTH+e.length+r.length+n.length+i.length,a=new ArrayBuffer(this.HEADER_LENGTH+o),l=new DataView(a),u=0;l.setUint8(u++,this.KINDS.push),l.setUint8(u++,e.length),l.setUint8(u++,r.length),l.setUint8(u++,n.length),l.setUint8(u++,i.length),Array.from(e,h=>l.setUint8(u++,h.charCodeAt(0))),Array.from(r,h=>l.setUint8(u++,h.charCodeAt(0))),Array.from(n,h=>l.setUint8(u++,h.charCodeAt(0))),Array.from(i,h=>l.setUint8(u++,h.charCodeAt(0)));var c=new Uint8Array(a.byteLength+s.byteLength);return c.set(new Uint8Array(a),0),c.set(new Uint8Array(s),a.byteLength),c.buffer},binaryDecode(t){let e=new DataView(t),r=e.getUint8(0),i=new TextDecoder;switch(r){case this.KINDS.push:return this.decodePush(t,e,i);case this.KINDS.reply:return this.decodeReply(t,e,i);case this.KINDS.broadcast:return this.decodeBroadcast(t,e,i)}},decodePush(t,e,r){let i=e.getUint8(1),n=e.getUint8(2),s=e.getUint8(3),o=this.HEADER_LENGTH+this.META_LENGTH-1,a=r.decode(t.slice(o,o+i));o=o+i;let l=r.decode(t.slice(o,o+n));o=o+n;let u=r.decode(t.slice(o,o+s));o=o+s;let c=t.slice(o,t.byteLength);return{join_ref:a,ref:null,topic:l,event:u,payload:c}},decodeReply(t,e,r){let i=e.getUint8(1),n=e.getUint8(2),s=e.getUint8(3),o=e.getUint8(4),a=this.HEADER_LENGTH+this.META_LENGTH,l=r.decode(t.slice(a,a+i));a=a+i;let u=r.decode(t.slice(a,a+n));a=a+n;let c=r.decode(t.slice(a,a+s));a=a+s;let h=r.decode(t.slice(a,a+o));a=a+o;let d=t.slice(a,t.byteLength),m={status:h,response:d};return{join_ref:l,ref:u,topic:c,event:V.reply,payload:m}},decodeBroadcast(t,e,r){let i=e.getUint8(1),n=e.getUint8(2),s=this.HEADER_LENGTH+2,o=r.decode(t.slice(s,s+i));s=s+i;let a=r.decode(t.slice(s,s+n));s=s+n;let l=t.slice(s,t.byteLength);return{join_ref:null,ref:null,topic:o,event:a,payload:l}}},mo=class{constructor(t,e={}){this.stateChangeCallbacks={open:[],close:[],error:[],message:[]},this.channels=[],this.sendBuffer=[],this.ref=0,this.timeout=e.timeout||Pc,this.transport=e.transport||ar.WebSocket||fo,this.establishedConnections=0,this.defaultEncoder=ur.encode.bind(ur),this.defaultDecoder=ur.decode.bind(ur),this.closeWasClean=!1,this.binaryType=e.binaryType||"arraybuffer",this.connectClock=1,this.transport!==fo?(this.encode=e.encode||this.defaultEncoder,this.decode=e.decode||this.defaultDecoder):(this.encode=this.defaultEncoder,this.decode=this.defaultDecoder);let r=null;Ot&&Ot.addEventListener&&(Ot.addEventListener("pagehide",i=>{this.conn&&(this.disconnect(),r=this.connectClock)}),Ot.addEventListener("pageshow",i=>{r===this.connectClock&&(r=null,this.connect())})),this.heartbeatIntervalMs=e.heartbeatIntervalMs||3e4,this.rejoinAfterMs=i=>e.rejoinAfterMs?e.rejoinAfterMs(i):[1e3,2e3,5e3][i-1]||1e4,this.reconnectAfterMs=i=>e.reconnectAfterMs?e.reconnectAfterMs(i):[10,50,100,150,200,250,500,1e3,2e3][i-1]||5e3,this.logger=e.logger||null,this.longpollerTimeout=e.longpollerTimeout||2e4,this.params=At(e.params||{}),this.endPoint=`${t}/${si.websocket}`,this.vsn=e.vsn||Ic,this.heartbeatTimer=null,this.pendingHeartbeatRef=null,this.reconnectTimer=new ho(()=>{this.teardown(()=>this.connect())},this.reconnectAfterMs)}replaceTransport(t){this.disconnect(),this.transport=t}protocol(){return location.protocol.match(/^https/)?"wss":"ws"}endPointURL(){let t=Ct.appendParams(Ct.appendParams(this.endPoint,this.params()),{vsn:this.vsn});return t.charAt(0)!=="/"?t:t.charAt(1)==="/"?`${this.protocol()}:${t}`:`${this.protocol()}://${location.host}${t}`}disconnect(t,e,r){this.connectClock++,this.closeWasClean=!0,this.reconnectTimer.reset(),this.teardown(t,e,r)}connect(t){this.connectClock++,t&&(console&&console.log("passing params to connect is deprecated. Instead pass :params to the Socket constructor"),this.params=At(t)),!this.conn&&(this.closeWasClean=!1,this.conn=new this.transport(this.endPointURL()),this.conn.binaryType=this.binaryType,this.conn.timeout=this.longpollerTimeout,this.conn.onopen=()=>this.onConnOpen(),this.conn.onerror=e=>this.onConnError(e),this.conn.onmessage=e=>this.onConnMessage(e),this.conn.onclose=e=>this.onConnClose(e))}log(t,e,r){this.logger(t,e,r)}hasLogger(){return this.logger!==null}onOpen(t){let e=this.makeRef();return this.stateChangeCallbacks.open.push([e,t]),e}onClose(t){let e=this.makeRef();return this.stateChangeCallbacks.close.push([e,t]),e}onError(t){let e=this.makeRef();return this.stateChangeCallbacks.error.push([e,t]),e}onMessage(t){let e=this.makeRef();return this.stateChangeCallbacks.message.push([e,t]),e}onConnOpen(){this.hasLogger()&&this.log("transport",`connected to ${this.endPointURL()}`),this.closeWasClean=!1,this.establishedConnections++,this.flushSendBuffer(),this.reconnectTimer.reset(),this.resetHeartbeat(),this.stateChangeCallbacks.open.forEach(([,t])=>t())}heartbeatTimeout(){this.pendingHeartbeatRef&&(this.pendingHeartbeatRef=null,this.hasLogger()&&this.log("transport","heartbeat timeout. Attempting to re-establish connection"),this.abnormalClose("heartbeat timeout"))}resetHeartbeat(){this.conn&&this.conn.skipHeartbeat||(this.pendingHeartbeatRef=null,clearTimeout(this.heartbeatTimer),setTimeout(()=>this.sendHeartbeat(),this.heartbeatIntervalMs))}teardown(t,e,r){if(!this.conn)return t&&t();this.waitForBufferDone(()=>{this.conn&&(e?this.conn.close(e,r||""):this.conn.close()),this.waitForSocketClosed(()=>{this.conn&&(this.conn.onclose=function(){},this.conn=null),t&&t()})})}waitForBufferDone(t,e=1){if(e===5||!this.conn||!this.conn.bufferedAmount){t();return}setTimeout(()=>{this.waitForBufferDone(t,e+1)},150*e)}waitForSocketClosed(t,e=1){if(e===5||!this.conn||this.conn.readyState===le.closed){t();return}setTimeout(()=>{this.waitForSocketClosed(t,e+1)},150*e)}onConnClose(t){this.hasLogger()&&this.log("transport","close",t),this.triggerChanError(),clearTimeout(this.heartbeatTimer),this.closeWasClean||this.reconnectTimer.scheduleTimeout(),this.stateChangeCallbacks.close.forEach(([,e])=>e(t))}onConnError(t){this.hasLogger()&&this.log("transport",t);let e=this.transport,r=this.establishedConnections;this.stateChangeCallbacks.error.forEach(([,i])=>{i(t,e,r)}),(e===this.transport||r>0)&&this.triggerChanError()}triggerChanError(){this.channels.forEach(t=>{t.isErrored()||t.isLeaving()||t.isClosed()||t.trigger(V.error)})}connectionState(){switch(this.conn&&this.conn.readyState){case le.connecting:return"connecting";case le.open:return"open";case le.closing:return"closing";default:return"closed"}}isConnected(){return this.connectionState()==="open"}remove(t){this.off(t.stateChangeRefs),this.channels=this.channels.filter(e=>e.joinRef()!==t.joinRef())}off(t){for(let e in this.stateChangeCallbacks)this.stateChangeCallbacks[e]=this.stateChangeCallbacks[e].filter(([r])=>t.indexOf(r)===-1)}channel(t,e={}){let r=new Dc(t,e,this);return this.channels.push(r),r}push(t){if(this.hasLogger()){let{topic:e,event:r,payload:i,ref:n,join_ref:s}=t;this.log("push",`${e} ${r} (${s}, ${n})`,i)}this.isConnected()?this.encode(t,e=>this.conn.send(e)):this.sendBuffer.push(()=>this.encode(t,e=>this.conn.send(e)))}makeRef(){let t=this.ref+1;return t===this.ref?this.ref=0:this.ref=t,this.ref.toString()}sendHeartbeat(){this.pendingHeartbeatRef&&!this.isConnected()||(this.pendingHeartbeatRef=this.makeRef(),this.push({topic:"phoenix",event:"heartbeat",payload:{},ref:this.pendingHeartbeatRef}),this.heartbeatTimer=setTimeout(()=>this.heartbeatTimeout(),this.heartbeatIntervalMs))}abnormalClose(t){this.closeWasClean=!1,this.isConnected()&&this.conn.close(Mc,t)}flushSendBuffer(){this.isConnected()&&this.sendBuffer.length>0&&(this.sendBuffer.forEach(t=>t()),this.sendBuffer=[])}onConnMessage(t){this.decode(t.data,e=>{let{topic:r,event:i,payload:n,ref:s,join_ref:o}=e;s&&s===this.pendingHeartbeatRef&&(clearTimeout(this.heartbeatTimer),this.pendingHeartbeatRef=null,setTimeout(()=>this.sendHeartbeat(),this.heartbeatIntervalMs)),this.hasLogger()&&this.log("receive",`${n.status||""} ${r} ${i} ${s&&"("+s+")"||""}`,n);for(let a=0;a<this.channels.length;a++){let l=this.channels[a];!l.isMember(r,i,n,o)||l.trigger(i,n,s,o)}for(let a=0;a<this.stateChangeCallbacks.message.length;a++){let[,l]=this.stateChangeCallbacks.message[a];l(e)}})}leaveOpenTopic(t){let e=this.channels.find(r=>r.topic===t&&(r.isJoined()||r.isJoining()));e&&(this.hasLogger()&&this.log("transport",`leaving duplicate topic "${t}"`),e.leave())}};var po="consecutive-reloads",go=10,xc=[1e3,3e3],Nc=3e4,vo=["phx-click-loading","phx-change-loading","phx-submit-loading","phx-keydown-loading","phx-keyup-loading","phx-blur-loading","phx-focus-loading"],G="data-phx-component",oi="data-phx-link",_c="track-static",Fc="data-phx-link-state",ue="data-phx-ref",yo="track-uploads",je="data-phx-upload-ref",ai="data-phx-preflighted-refs",Hc="data-phx-done-refs",bo="drop-target",li="data-phx-active-refs",ui="phx:live-file:updated",ci="data-phx-skip",wo="data-phx-remove",So="page-loading",Eo="phx-connected",cr="phx-disconnected",To="phx-no-feedback",ko="phx-error",Lt="data-phx-parent-id",Ao="data-phx-main",hr="data-phx-root-id",Vc="trigger-action",Oo="feedback-for",Co="phx-has-focused",Bc=["text","textarea","number","email","password","search","tel","url","date","time"],Lo=["checkbox","radio"],Io="phx-has-submitted",Pe="data-phx-session",lt=`[${Pe}]`,It="data-phx-static",hi="data-phx-readonly",dr="data-phx-disabled",di="disable-with",fr="data-phx-disable-with-restore",mr="hook",jc="debounce",Uc="throttle",fi="update",qc="key",ce="phxPrivate",Po="auto-recover",mi="phx:live-socket:debug",pi="phx:live-socket:profiling",gi="phx:live-socket:latency-sim",$c="progress",Wc=1,zc=200,Zc="phx-",Jc=3e4,Pt="debounce-trigger",pr="throttled",Mo="debounce-prev-key",Kc={debounce:300,throttle:300},Ro="d",he="s",$="c",Do="e",xo="r",No="t",Gc=class{constructor(t,e,r){this.liveSocket=r,this.entry=t,this.offset=0,this.chunkSize=e,this.chunkTimer=null,this.uploadChannel=r.channel(`lvu:${t.ref}`,{token:t.metadata()})}error(t){clearTimeout(this.chunkTimer),this.uploadChannel.leave(),this.entry.error(t)}upload(){this.uploadChannel.onError(t=>this.error(t)),this.uploadChannel.join().receive("ok",t=>this.readNextChunk()).receive("error",t=>this.error(t))}isDone(){return this.offset>=this.entry.file.size}readNextChunk(){let t=new window.FileReader,e=this.entry.file.slice(this.offset,this.chunkSize+this.offset);t.onload=r=>{if(r.target.error===null)this.offset+=r.target.result.byteLength,this.pushChunk(r.target.result);else return R("Read error: "+r.target.error)},t.readAsArrayBuffer(e)}pushChunk(t){!this.uploadChannel.isJoined()||this.uploadChannel.push("chunk",t).receive("ok",()=>{this.entry.progress(this.offset/this.entry.file.size*100),this.isDone()||(this.chunkTimer=setTimeout(()=>this.readNextChunk(),this.liveSocket.getLatencySim()||0))})}},R=(t,e)=>console.error&&console.error(t,e);function Yc(){let t=new Set,e=document.querySelectorAll("*[id]");for(let r=0,i=e.length;r<i;r++)t.has(e[r].id)?console.error(`Multiple IDs detected: ${e[r].id}. Ensure unique element ids.`):t.add(e[r].id)}var Xc=(t,e,r,i)=>{t.liveSocket.isDebugEnabled()&&console.log(`${t.id} ${e}: ${r} - `,i)},vi=t=>typeof t=="function"?t:function(){return t},Mt=t=>JSON.parse(JSON.stringify(t)),Rt=(t,e,r)=>{do{if(t.matches(`[${e}]`))return t;t=t.parentElement||t.parentNode}while(t!==null&&t.nodeType===1&&!(r&&r.isSameNode(t)||t.matches(lt)));return null},Dt=t=>t!==null&&typeof t=="object"&&!(t instanceof Array),Qc=(t,e)=>JSON.stringify(t)===JSON.stringify(e),_o=t=>{for(let e in t)return!1;return!0},ye=(t,e)=>t&&e(t),eh=function(t,e,r,i){t.forEach(n=>{new Gc(n,r.config.chunk_size,i).upload()})},Fo={canPushState(){return typeof history.pushState!="undefined"},dropLocal(t,e,r){return t.removeItem(this.localKey(e,r))},updateLocal(t,e,r,i,n){let s=this.getLocal(t,e,r),o=this.localKey(e,r),a=s===null?i:n(s);return t.setItem(o,JSON.stringify(a)),a},getLocal(t,e,r){return JSON.parse(t.getItem(this.localKey(e,r)))},updateCurrentState(t){!this.canPushState()||history.replaceState(t(history.state||{}),"",window.location.href)},pushState(t,e,r){if(this.canPushState()){if(r!==window.location.href){if(e.type=="redirect"&&e.scroll){let n=history.state||{};n.scroll=e.scroll,history.replaceState(n,"",window.location.href)}delete e.scroll,history[t+"State"](e,"",r||null);let i=this.getHashTargetEl(window.location.hash);i?i.scrollIntoView():e.type==="redirect"&&window.scroll(0,0)}}else this.redirect(r)},setCookie(t,e){document.cookie=`${t}=${e}`},getCookie(t){return document.cookie.replace(new RegExp(`(?:(?:^|.*;s*)${t}s*=s*([^;]*).*$)|^.*$`),"$1")},redirect(t,e){e&&Fo.setCookie("__phoenix_flash__",e+"; max-age=60000; path=/"),window.location=t},localKey(t,e){return`${t}-${e}`},getHashTargetEl(t){let e=t.toString().substring(1);if(e!=="")return document.getElementById(e)||document.querySelector(`a[name="${e}"]`)}},Me=Fo,be={byId(t){return document.getElementById(t)||R(`no id found for ${t}`)},removeClass(t,e){t.classList.remove(e),t.classList.length===0&&t.removeAttribute("class")},all(t,e,r){if(!t)return[];let i=Array.from(t.querySelectorAll(e));return r?i.forEach(r):i},childNodeLength(t){let e=document.createElement("template");return e.innerHTML=t,e.content.childElementCount},isUploadInput(t){return t.type==="file"&&t.getAttribute(je)!==null},findUploadInputs(t){return this.all(t,`input[type="file"][${je}]`)},findComponentNodeList(t,e){return this.filterWithinSameLiveView(this.all(t,`[${G}="${e}"]`),t)},isPhxDestroyed(t){return!!(t.id&&be.private(t,"destroyed"))},markPhxChildDestroyed(t){t.setAttribute(Pe,""),this.putPrivate(t,"destroyed",!0)},findPhxChildrenInFragment(t,e){let r=document.createElement("template");return r.innerHTML=t,this.findPhxChildren(r.content,e)},isIgnored(t,e){return(t.getAttribute(e)||t.getAttribute("data-phx-update"))==="ignore"},isPhxUpdate(t,e,r){return t.getAttribute&&r.indexOf(t.getAttribute(e))>=0},findPhxChildren(t,e){return this.all(t,`${lt}[${Lt}="${e}"]`)},findParentCIDs(t,e){let r=new Set(e);return e.reduce((i,n)=>{let s=`[${G}="${n}"] [${G}]`;return this.filterWithinSameLiveView(this.all(t,s),t).map(o=>parseInt(o.getAttribute(G))).forEach(o=>i.delete(o)),i},r)},filterWithinSameLiveView(t,e){return e.querySelector(lt)?t.filter(r=>this.withinSameLiveView(r,e)):t},withinSameLiveView(t,e){for(;t=t.parentNode;){if(t.isSameNode(e))return!0;if(t.getAttribute(Pe)!==null)return!1}},private(t,e){return t[ce]&&t[ce][e]},deletePrivate(t,e){t[ce]&&delete t[ce][e]},putPrivate(t,e,r){t[ce]||(t[ce]={}),t[ce][e]=r},copyPrivates(t,e){e[ce]&&(t[ce]=Mt(e[ce]))},putTitle(t){let e=document.querySelector("title"),{prefix:r,suffix:i}=e.dataset;document.title=`${r||""}${t}${i||""}`},debounce(t,e,r,i,n,s,o){let a=t.getAttribute(r),l=t.getAttribute(n);a===""&&(a=i),l===""&&(l=s);let u=a||l;switch(u){case null:return o();case"blur":this.once(t,"debounce-blur")&&t.addEventListener("blur",()=>o());return;default:let c=parseInt(u),h=()=>l?this.deletePrivate(t,pr):o(),d=this.incCycle(t,Pt,h);if(isNaN(c))return R(`invalid throttle/debounce value: ${u}`);if(l){let p=!1;if(e.type==="keydown"){let y=this.private(t,Mo);this.putPrivate(t,Mo,e.key),p=y!==e.key}if(!p&&this.private(t,pr))return!1;o(),this.putPrivate(t,pr,!0),setTimeout(()=>this.triggerCycle(t,Pt),c)}else setTimeout(()=>this.triggerCycle(t,Pt,d),c);let m=t.form;m&&this.once(m,"bind-debounce")&&m.addEventListener("submit",()=>{Array.from(new FormData(m).entries(),([p])=>{let y=m.querySelector(`[name="${p}"]`);this.incCycle(y,Pt),this.deletePrivate(y,pr)})}),this.once(t,"bind-debounce")&&t.addEventListener("blur",()=>this.triggerCycle(t,Pt))}},triggerCycle(t,e,r){let[i,n]=this.private(t,e);r||(r=i),r===i&&(this.incCycle(t,e),n())},once(t,e){return this.private(t,e)===!0?!1:(this.putPrivate(t,e,!0),!0)},incCycle(t,e,r=function(){}){let[i]=this.private(t,e)||[0,r];return i++,this.putPrivate(t,e,[i,r]),i},discardError(t,e,r){let i=e.getAttribute&&e.getAttribute(r),n=i&&t.querySelector(`[id="${i}"], [name="${i}"]`);!n||this.private(n,Co)||this.private(n.form,Io)||e.classList.add(To)},showError(t,e){(t.id||t.name)&&this.all(t.form,`[${e}="${t.id}"], [${e}="${t.name}"]`,r=>{this.removeClass(r,To)})},isPhxChild(t){return t.getAttribute&&t.getAttribute(Lt)},dispatchEvent(t,e,r={}){let i=new CustomEvent(e,{bubbles:!0,cancelable:!0,detail:r});t.dispatchEvent(i)},cloneNode(t,e){if(typeof e=="undefined")return t.cloneNode(!0);{let r=t.cloneNode(!1);return r.innerHTML=e,r}},mergeAttrs(t,e,r={}){let i=r.exclude||[],n=r.isIgnored,s=e.attributes;for(let a=s.length-1;a>=0;a--){let l=s[a].name;i.indexOf(l)<0&&t.setAttribute(l,e.getAttribute(l))}let o=t.attributes;for(let a=o.length-1;a>=0;a--){let l=o[a].name;n?l.startsWith("data-")&&!e.hasAttribute(l)&&t.removeAttribute(l):e.hasAttribute(l)||t.removeAttribute(l)}},mergeFocusedInput(t,e){t instanceof HTMLSelectElement||be.mergeAttrs(t,e,{except:["value"]}),e.readOnly?t.setAttribute("readonly",!0):t.removeAttribute("readonly")},hasSelectionRange(t){return t.setSelectionRange&&(t.type==="text"||t.type==="textarea")},restoreFocus(t,e,r){if(!be.isTextualInput(t))return;let i=t.matches(":focus");t.readOnly&&t.blur(),i||t.focus(),this.hasSelectionRange(t)&&t.setSelectionRange(e,r)},isFormInput(t){return/^(?:input|select|textarea)$/i.test(t.tagName)&&t.type!=="button"},syncAttrsToProps(t){t instanceof HTMLInputElement&&Lo.indexOf(t.type.toLocaleLowerCase())>=0&&(t.checked=t.getAttribute("checked")!==null)},syncPropsToAttrs(t){if(t instanceof HTMLSelectElement){let e=t.options.item(t.selectedIndex);e&&e.getAttribute("selected")===null&&e.setAttribute("selected","")}},isTextualInput(t){return Bc.indexOf(t.type)>=0},isNowTriggerFormExternal(t,e){return t.getAttribute&&t.getAttribute(e)!==null},syncPendingRef(t,e,r){let i=t.getAttribute(ue);return i===null?!0:be.isFormInput(t)||t.getAttribute(r)!==null?(be.isUploadInput(t)&&be.mergeAttrs(t,e,{isIgnored:!0}),be.putPrivate(t,ue,e),!1):(vo.forEach(n=>{t.classList.contains(n)&&e.classList.add(n)}),e.setAttribute(ue,i),!0)},cleanChildNodes(t,e){if(be.isPhxUpdate(t,e,["append","prepend"])){let r=[];t.childNodes.forEach(i=>{i.id||(i.nodeType===Node.TEXT_NODE&&i.nodeValue.trim()===""||R(`only HTML element tags with an id are allowed inside containers with phx-update. + +removing illegal node: "${(i.outerHTML||i.nodeValue).trim()}" + +`),r.push(i))}),r.forEach(i=>i.remove())}},replaceRootContainer(t,e,r){let i=new Set(["id",Pe,It,Ao]);if(t.tagName.toLowerCase()===e.toLowerCase())return Array.from(t.attributes).filter(n=>!i.has(n.name.toLowerCase())).forEach(n=>t.removeAttribute(n.name)),Object.keys(r).filter(n=>!i.has(n.toLowerCase())).forEach(n=>t.setAttribute(n,r[n])),t;{let n=document.createElement(e);return Object.keys(r).forEach(s=>n.setAttribute(s,r[s])),i.forEach(s=>n.setAttribute(s,t.getAttribute(s))),n.innerHTML=t.innerHTML,t.replaceWith(n),n}}},g=be,yi=class{static isActive(t,e){let r=e._phxRef===void 0,n=t.getAttribute(li).split(",").indexOf(D.genFileRef(e))>=0;return e.size>0&&(r||n)}static isPreflighted(t,e){return t.getAttribute(ai).split(",").indexOf(D.genFileRef(e))>=0&&this.isActive(t,e)}constructor(t,e,r){this.ref=D.genFileRef(e),this.fileEl=t,this.file=e,this.view=r,this.meta=null,this._isCancelled=!1,this._isDone=!1,this._progress=0,this._lastProgressSent=-1,this._onDone=function(){},this._onElUpdated=this.onElUpdated.bind(this),this.fileEl.addEventListener(ui,this._onElUpdated)}metadata(){return this.meta}progress(t){this._progress=Math.floor(t),this._progress>this._lastProgressSent&&(this._progress>=100?(this._progress=100,this._lastProgressSent=100,this._isDone=!0,this.view.pushFileProgress(this.fileEl,this.ref,100,()=>{D.untrackFile(this.fileEl,this.file),this._onDone()})):(this._lastProgressSent=this._progress,this.view.pushFileProgress(this.fileEl,this.ref,this._progress)))}cancel(){this._isCancelled=!0,this._isDone=!0,this._onDone()}isDone(){return this._isDone}error(t="failed"){this.view.pushFileProgress(this.fileEl,this.ref,{error:t}),D.clearFiles(this.fileEl)}onDone(t){this._onDone=()=>{this.fileEl.removeEventListener(ui,this._onElUpdated),t()}}onElUpdated(){this.fileEl.getAttribute(li).split(",").indexOf(this.ref)===-1&&this.cancel()}toPreflightPayload(){return{last_modified:this.file.lastModified,name:this.file.name,size:this.file.size,type:this.file.type,ref:this.ref}}uploader(t){if(this.meta.uploader){let e=t[this.meta.uploader]||R(`no uploader configured for ${this.meta.uploader}`);return{name:this.meta.uploader,callback:e}}else return{name:"channel",callback:eh}}zipPostFlight(t){this.meta=t.entries[this.ref],this.meta||R(`no preflight upload response returned with ref ${this.ref}`,{input:this.fileEl,response:t})}},th=0,D=class{static genFileRef(t){let e=t._phxRef;return e!==void 0?e:(t._phxRef=(th++).toString(),t._phxRef)}static getEntryDataURL(t,e,r){let i=this.activeFiles(t).find(n=>this.genFileRef(n)===e);r(URL.createObjectURL(i))}static hasUploadsInProgress(t){let e=0;return g.findUploadInputs(t).forEach(r=>{r.getAttribute(ai)!==r.getAttribute(Hc)&&e++}),e>0}static serializeUploads(t){let e=this.activeFiles(t),r={};return e.forEach(i=>{let n={path:t.name},s=t.getAttribute(je);r[s]=r[s]||[],n.ref=this.genFileRef(i),n.name=i.name||n.ref,n.type=i.type,n.size=i.size,r[s].push(n)}),r}static clearFiles(t){t.value=null,t.removeAttribute(je),g.putPrivate(t,"files",[])}static untrackFile(t,e){g.putPrivate(t,"files",g.private(t,"files").filter(r=>!Object.is(r,e)))}static trackFiles(t,e){if(t.getAttribute("multiple")!==null){let r=e.filter(i=>!this.activeFiles(t).find(n=>Object.is(n,i)));g.putPrivate(t,"files",this.activeFiles(t).concat(r)),t.value=null}else g.putPrivate(t,"files",e)}static activeFileInputs(t){let e=g.findUploadInputs(t);return Array.from(e).filter(r=>r.files&&this.activeFiles(r).length>0)}static activeFiles(t){return(g.private(t,"files")||[]).filter(e=>yi.isActive(t,e))}static inputsAwaitingPreflight(t){let e=g.findUploadInputs(t);return Array.from(e).filter(r=>this.filesAwaitingPreflight(r).length>0)}static filesAwaitingPreflight(t){return this.activeFiles(t).filter(e=>!yi.isPreflighted(t,e))}constructor(t,e,r){this.view=e,this.onComplete=r,this._entries=Array.from(D.filesAwaitingPreflight(t)||[]).map(i=>new yi(t,i,e)),this.numEntriesInProgress=this._entries.length}entries(){return this._entries}initAdapterUpload(t,e,r){this._entries=this._entries.map(n=>(n.zipPostFlight(t),n.onDone(()=>{this.numEntriesInProgress--,this.numEntriesInProgress===0&&this.onComplete()}),n));let i=this._entries.reduce((n,s)=>{let{name:o,callback:a}=s.uploader(r.uploaders);return n[o]=n[o]||{callback:a,entries:[]},n[o].entries.push(s),n},{});for(let n in i){let{callback:s,entries:o}=i[n];s(o,e,t,r)}}},rh={LiveFileUpload:{activeRefs(){return this.el.getAttribute(li)},preflightedRefs(){return this.el.getAttribute(ai)},mounted(){this.preflightedWas=this.preflightedRefs()},updated(){let t=this.preflightedRefs();this.preflightedWas!==t&&(this.preflightedWas=t,t===""&&this.__view.cancelSubmit(this.el.form)),this.activeRefs()===""&&(this.el.value=null),this.el.dispatchEvent(new CustomEvent(ui))}},LiveImgPreview:{mounted(){this.ref=this.el.getAttribute("data-phx-entry-ref"),this.inputEl=document.getElementById(this.el.getAttribute(je)),D.getEntryDataURL(this.inputEl,this.ref,t=>{this.url=t,this.el.src=t})},destroyed(){URL.revokeObjectURL(this.url)}}},ih=rh,nh=class{constructor(t,e,r){let i=new Set,n=new Set([...e.children].map(o=>o.id)),s=[];Array.from(t.children).forEach(o=>{if(o.id&&(i.add(o.id),n.has(o.id))){let a=o.previousElementSibling&&o.previousElementSibling.id;s.push({elementId:o.id,previousElementId:a})}}),this.containerId=e.id,this.updateType=r,this.elementsToModify=s,this.elementIdsToAdd=[...n].filter(o=>!i.has(o))}perform(){let t=g.byId(this.containerId);this.elementsToModify.forEach(e=>{e.previousElementId?ye(document.getElementById(e.previousElementId),r=>{ye(document.getElementById(e.elementId),i=>{i.previousElementSibling&&i.previousElementSibling.id==r.id||r.insertAdjacentElement("afterend",i)})}):ye(document.getElementById(e.elementId),r=>{r.previousElementSibling==null||t.insertAdjacentElement("afterbegin",r)})}),this.updateType=="prepend"&&this.elementIdsToAdd.reverse().forEach(e=>{ye(document.getElementById(e),r=>t.insertAdjacentElement("afterbegin",r))})}},Ho=11;function sh(t,e){var r=e.attributes,i,n,s,o,a;if(!(e.nodeType===Ho||t.nodeType===Ho)){for(var l=r.length-1;l>=0;l--)i=r[l],n=i.name,s=i.namespaceURI,o=i.value,s?(n=i.localName||n,a=t.getAttributeNS(s,n),a!==o&&(i.prefix==="xmlns"&&(n=i.name),t.setAttributeNS(s,n,o))):(a=t.getAttribute(n),a!==o&&t.setAttribute(n,o));for(var u=t.attributes,c=u.length-1;c>=0;c--)i=u[c],n=i.name,s=i.namespaceURI,s?(n=i.localName||n,e.hasAttributeNS(s,n)||t.removeAttributeNS(s,n)):e.hasAttribute(n)||t.removeAttribute(n)}}var gr,oh="http://www.w3.org/1999/xhtml",B=typeof document=="undefined"?void 0:document,ah=!!B&&"content"in B.createElement("template"),lh=!!B&&B.createRange&&"createContextualFragment"in B.createRange();function uh(t){var e=B.createElement("template");return e.innerHTML=t,e.content.childNodes[0]}function ch(t){gr||(gr=B.createRange(),gr.selectNode(B.body));var e=gr.createContextualFragment(t);return e.childNodes[0]}function hh(t){var e=B.createElement("body");return e.innerHTML=t,e.childNodes[0]}function dh(t){return t=t.trim(),ah?uh(t):lh?ch(t):hh(t)}function vr(t,e){var r=t.nodeName,i=e.nodeName,n,s;return r===i?!0:(n=r.charCodeAt(0),s=i.charCodeAt(0),n<=90&&s>=97?r===i.toUpperCase():s<=90&&n>=97?i===r.toUpperCase():!1)}function fh(t,e){return!e||e===oh?B.createElement(t):B.createElementNS(e,t)}function mh(t,e){for(var r=t.firstChild;r;){var i=r.nextSibling;e.appendChild(r),r=i}return e}function bi(t,e,r){t[r]!==e[r]&&(t[r]=e[r],t[r]?t.setAttribute(r,""):t.removeAttribute(r))}var Vo={OPTION:function(t,e){var r=t.parentNode;if(r){var i=r.nodeName.toUpperCase();i==="OPTGROUP"&&(r=r.parentNode,i=r&&r.nodeName.toUpperCase()),i==="SELECT"&&!r.hasAttribute("multiple")&&(t.hasAttribute("selected")&&!e.selected&&(t.setAttribute("selected","selected"),t.removeAttribute("selected")),r.selectedIndex=-1)}bi(t,e,"selected")},INPUT:function(t,e){bi(t,e,"checked"),bi(t,e,"disabled"),t.value!==e.value&&(t.value=e.value),e.hasAttribute("value")||t.removeAttribute("value")},TEXTAREA:function(t,e){var r=e.value;t.value!==r&&(t.value=r);var i=t.firstChild;if(i){var n=i.nodeValue;if(n==r||!r&&n==t.placeholder)return;i.nodeValue=r}},SELECT:function(t,e){if(!e.hasAttribute("multiple")){for(var r=-1,i=0,n=t.firstChild,s,o;n;)if(o=n.nodeName&&n.nodeName.toUpperCase(),o==="OPTGROUP")s=n,n=s.firstChild;else{if(o==="OPTION"){if(n.hasAttribute("selected")){r=i;break}i++}n=n.nextSibling,!n&&s&&(n=s.nextSibling,s=null)}t.selectedIndex=r}}},xt=1,ph=11,Bo=3,jo=8;function Ue(){}function gh(t){if(t)return t.getAttribute&&t.getAttribute("id")||t.id}function vh(t){return function(r,i,n){if(n||(n={}),typeof i=="string")if(r.nodeName==="#document"||r.nodeName==="HTML"||r.nodeName==="BODY"){var s=i;i=B.createElement("html"),i.innerHTML=s}else i=dh(i);var o=n.getNodeKey||gh,a=n.onBeforeNodeAdded||Ue,l=n.onNodeAdded||Ue,u=n.onBeforeElUpdated||Ue,c=n.onElUpdated||Ue,h=n.onBeforeNodeDiscarded||Ue,d=n.onNodeDiscarded||Ue,m=n.onBeforeElChildrenUpdated||Ue,p=n.childrenOnly===!0,y=Object.create(null),b=[];function f(T){b.push(T)}function S(T,E){if(T.nodeType===xt)for(var w=T.firstChild;w;){var C=void 0;E&&(C=o(w))?f(C):(d(w),w.firstChild&&S(w,E)),w=w.nextSibling}}function ie(T,E,w){h(T)!==!1&&(E&&E.removeChild(T),d(T),S(T,w))}function de(T){if(T.nodeType===xt||T.nodeType===ph)for(var E=T.firstChild;E;){var w=o(E);w&&(y[w]=E),de(E),E=E.nextSibling}}de(r);function qe(T){l(T);for(var E=T.firstChild;E;){var w=E.nextSibling,C=o(E);if(C){var Y=y[C];Y&&vr(E,Y)?(E.parentNode.replaceChild(Y,E),$e(Y,E)):qe(E)}else qe(E);E=w}}function Re(T,E,w){for(;E;){var C=E.nextSibling;(w=o(E))?f(w):ie(E,T,!0),E=C}}function $e(T,E,w){var C=o(E);C&&delete y[C],!(!w&&(u(T,E)===!1||(t(T,E),c(T),m(T,E)===!1)))&&(T.nodeName!=="TEXTAREA"?br(T,E):Vo.TEXTAREA(T,E))}function br(T,E){var w=E.firstChild,C=T.firstChild,Y,we,ze,_t,Se;e:for(;w;){for(_t=w.nextSibling,Y=o(w);C;){if(ze=C.nextSibling,w.isSameNode&&w.isSameNode(C)){w=_t,C=ze;continue e}we=o(C);var Ft=C.nodeType,Ee=void 0;if(Ft===w.nodeType&&(Ft===xt?(Y?Y!==we&&((Se=y[Y])?ze===Se?Ee=!1:(T.insertBefore(Se,C),we?f(we):ie(C,T,!0),C=Se):Ee=!1):we&&(Ee=!1),Ee=Ee!==!1&&vr(C,w),Ee&&$e(C,w)):(Ft===Bo||Ft==jo)&&(Ee=!0,C.nodeValue!==w.nodeValue&&(C.nodeValue=w.nodeValue))),Ee){w=_t,C=ze;continue e}we?f(we):ie(C,T,!0),C=ze}if(Y&&(Se=y[Y])&&vr(Se,w))T.appendChild(Se),$e(Se,w);else{var Sr=a(w);Sr!==!1&&(Sr&&(w=Sr),w.actualize&&(w=w.actualize(T.ownerDocument||B)),T.appendChild(w),qe(w))}w=_t,C=ze}Re(T,C,we);var Ti=Vo[T.nodeName];Ti&&Ti(T,E)}var P=r,We=P.nodeType,ut=i.nodeType;if(!p){if(We===xt)ut===xt?vr(r,i)||(d(r),P=mh(r,fh(i.nodeName,i.namespaceURI))):P=i;else if(We===Bo||We===jo){if(ut===We)return P.nodeValue!==i.nodeValue&&(P.nodeValue=i.nodeValue),P;P=i}}if(P===i)d(r);else{if(i.isSameNode&&i.isSameNode(P))return;if($e(P,i,p),b)for(var ct=0,wr=b.length;ct<wr;ct++){var De=y[b[ct]];De&&ie(De,De.parentNode,!1)}}return!p&&P!==r&&r.parentNode&&(P.actualize&&(P=P.actualize(r.ownerDocument||B)),r.parentNode.replaceChild(P,r)),P}}var yh=vh(sh),Uo=yh,yr=class{static patchEl(t,e,r){Uo(t,e,{childrenOnly:!1,onBeforeElUpdated:(i,n)=>{if(r&&r.isSameNode(i)&&g.isFormInput(i))return g.mergeFocusedInput(i,n),!1}})}constructor(t,e,r,i,n){this.view=t,this.liveSocket=t.liveSocket,this.container=e,this.id=r,this.rootID=t.root.id,this.html=i,this.targetCID=n,this.cidPatch=typeof this.targetCID=="number",this.callbacks={beforeadded:[],beforeupdated:[],beforephxChildAdded:[],afteradded:[],afterupdated:[],afterdiscarded:[],afterphxChildAdded:[]}}before(t,e){this.callbacks[`before${t}`].push(e)}after(t,e){this.callbacks[`after${t}`].push(e)}trackBefore(t,...e){this.callbacks[`before${t}`].forEach(r=>r(...e))}trackAfter(t,...e){this.callbacks[`after${t}`].forEach(r=>r(...e))}markPrunableContentForRemoval(){g.all(this.container,"[phx-update=append] > *, [phx-update=prepend] > *",t=>{t.setAttribute(wo,"")})}perform(){let{view:t,liveSocket:e,container:r,html:i}=this,n=this.isCIDPatch()?this.targetCIDContainer(i):r;if(this.isCIDPatch()&&!n)return;let s=e.getActiveElement(),{selectionStart:o,selectionEnd:a}=s&&g.hasSelectionRange(s)?s:{},l=e.binding(fi),u=e.binding(Oo),c=e.binding(di),h=e.binding(Vc),d=[],m=[],p=[],y=null,b=e.time("premorph container prep",()=>this.buildDiffHTML(r,i,l,n));return this.trackBefore("added",r),this.trackBefore("updated",r,r),e.time("morphdom",()=>{Uo(n,b,{childrenOnly:n.getAttribute(G)===null,getNodeKey:f=>g.isPhxDestroyed(f)?null:f.id,onBeforeNodeAdded:f=>(this.trackBefore("added",f),f),onNodeAdded:f=>{g.isNowTriggerFormExternal(f,h)&&(y=f),g.discardError(n,f,u),g.isPhxChild(f)&&t.ownsElement(f)&&this.trackAfter("phxChildAdded",f),d.push(f)},onNodeDiscarded:f=>{g.isPhxChild(f)&&e.destroyViewByEl(f),this.trackAfter("discarded",f)},onBeforeNodeDiscarded:f=>f.getAttribute&&f.getAttribute(wo)!==null?!0:!(f.parentNode!==null&&g.isPhxUpdate(f.parentNode,l,["append","prepend"])&&f.id||this.skipCIDSibling(f)),onElUpdated:f=>{g.isNowTriggerFormExternal(f,h)&&(y=f),m.push(f)},onBeforeElUpdated:(f,S)=>{if(g.cleanChildNodes(S,l),this.skipCIDSibling(S))return!1;if(g.isIgnored(f,l))return this.trackBefore("updated",f,S),g.mergeAttrs(f,S,{isIgnored:!0}),m.push(f),!1;if(f.type==="number"&&f.validity&&f.validity.badInput)return!1;if(!g.syncPendingRef(f,S,c))return g.isUploadInput(f)&&(this.trackBefore("updated",f,S),m.push(f)),!1;if(g.isPhxChild(S)){let de=f.getAttribute(Pe);return g.mergeAttrs(f,S,{exclude:[It]}),de!==""&&f.setAttribute(Pe,de),f.setAttribute(hr,this.rootID),!1}return g.copyPrivates(S,f),g.discardError(n,S,u),g.syncPropsToAttrs(S),s&&f.isSameNode(s)&&g.isFormInput(f)&&!this.forceFocusedSelectUpdate(f,S)?(this.trackBefore("updated",f,S),g.mergeFocusedInput(f,S),g.syncAttrsToProps(f),m.push(f),!1):(g.isPhxUpdate(S,l,["append","prepend"])&&p.push(new nh(f,S,S.getAttribute(l))),g.syncAttrsToProps(S),this.trackBefore("updated",f,S),!0)}})}),e.isDebugEnabled()&&Yc(),p.length>0&&e.time("post-morph append/prepend restoration",()=>{p.forEach(f=>f.perform())}),e.silenceEvents(()=>g.restoreFocus(s,o,a)),g.dispatchEvent(document,"phx:update"),d.forEach(f=>this.trackAfter("added",f)),m.forEach(f=>this.trackAfter("updated",f)),y&&(e.disconnect(),y.submit()),!0}forceFocusedSelectUpdate(t,e){let r=["select","select-one","select-multiple"].find(i=>i===t.type);return t.multiple===!0||r&&t.innerHTML!=e.innerHTML}isCIDPatch(){return this.cidPatch}skipCIDSibling(t){return t.nodeType===Node.ELEMENT_NODE&&t.getAttribute(ci)!==null}targetCIDContainer(t){if(!this.isCIDPatch())return;let[e,...r]=g.findComponentNodeList(this.container,this.targetCID);return r.length===0&&g.childNodeLength(t)===1?e:e&&e.parentNode}buildDiffHTML(t,e,r,i){let n=this.isCIDPatch(),s=n&&i.getAttribute(G)===this.targetCID.toString();if(!n||s)return e;{let o=null,a=document.createElement("template");o=g.cloneNode(i);let[l,...u]=g.findComponentNodeList(o,this.targetCID);return a.innerHTML=e,u.forEach(c=>c.remove()),Array.from(o.childNodes).forEach(c=>{c.id&&c.nodeType===Node.ELEMENT_NODE&&c.getAttribute(G)!==this.targetCID.toString()&&(c.setAttribute(ci,""),c.innerHTML="")}),Array.from(a.content.childNodes).forEach(c=>o.insertBefore(c,l)),l.remove(),o.outerHTML}}},qo=class{static extract(t){let{[xo]:e,[Do]:r,[No]:i}=t;return delete t[xo],delete t[Do],delete t[No],{diff:t,title:i,reply:e||null,events:r||[]}}constructor(t,e){this.viewId=t,this.rendered={},this.mergeDiff(e)}parentViewId(){return this.viewId}toString(t){return this.recursiveToString(this.rendered,this.rendered[$],t)}recursiveToString(t,e=t[$],r){r=r?new Set(r):null;let i={buffer:"",components:e,onlyCids:r};return this.toOutputBuffer(t,i),i.buffer}componentCIDs(t){return Object.keys(t[$]||{}).map(e=>parseInt(e))}isComponentOnlyDiff(t){return t[$]?Object.keys(t).length===1:!1}getComponent(t,e){return t[$][e]}mergeDiff(t){let e=t[$],r={};if(delete t[$],this.rendered=this.mutableMerge(this.rendered,t),this.rendered[$]=this.rendered[$]||{},e){let n=this.rendered[$];for(let s in e)e[s]=this.cachedFindComponent(s,e[s],n,e,r);for(var i in e)n[i]=e[i];t[$]=e}}cachedFindComponent(t,e,r,i,n){if(n[t])return n[t];{let s,o,a=e[he];if(typeof a=="number"){let l;a>0?l=this.cachedFindComponent(a,i[a],r,i,n):l=r[-a],o=l[he],s=this.cloneMerge(l,e),s[he]=o}else s=e[he]!==void 0?e:this.cloneMerge(r[t]||{},e);return n[t]=s,s}}mutableMerge(t,e){return e[he]!==void 0?e:(this.doMutableMerge(t,e),t)}doMutableMerge(t,e){for(let r in e){let i=e[r],n=t[r];Dt(i)&&i[he]===void 0&&Dt(n)?this.doMutableMerge(n,i):t[r]=i}}cloneMerge(t,e){let r={...t,...e};for(let i in r){let n=e[i],s=t[i];Dt(n)&&n[he]===void 0&&Dt(s)&&(r[i]=this.cloneMerge(s,n))}return r}componentToString(t){return this.recursiveCIDToString(this.rendered[$],t)}pruneCIDs(t){t.forEach(e=>delete this.rendered[$][e])}get(){return this.rendered}isNewFingerprint(t={}){return!!t[he]}toOutputBuffer(t,e){if(t[Ro])return this.comprehensionToBuffer(t,e);let{[he]:r}=t;e.buffer+=r[0];for(let i=1;i<r.length;i++)this.dynamicToBuffer(t[i-1],e),e.buffer+=r[i]}comprehensionToBuffer(t,e){let{[Ro]:r,[he]:i}=t;for(let n=0;n<r.length;n++){let s=r[n];e.buffer+=i[0];for(let o=1;o<i.length;o++)this.dynamicToBuffer(s[o-1],e),e.buffer+=i[o]}}dynamicToBuffer(t,e){typeof t=="number"?e.buffer+=this.recursiveCIDToString(e.components,t,e.onlyCids):Dt(t)?this.toOutputBuffer(t,e):e.buffer+=t}recursiveCIDToString(t,e,r){let i=t[e]||R(`no component for CID ${e}`,t),n=document.createElement("template");n.innerHTML=this.recursiveToString(i,t,r);let s=n.content,o=r&&!r.has(e),[a,l]=Array.from(s.childNodes).reduce(([u,c],h,d)=>h.nodeType===Node.ELEMENT_NODE?h.getAttribute(G)?[u,!0]:(h.setAttribute(G,e),h.id||(h.id=`${this.parentViewId()}-${e}-${d}`),o&&(h.setAttribute(ci,""),h.innerHTML=""),[!0,c]):h.nodeValue.trim()!==""?(R(`only HTML element tags are allowed at the root of components. + +got: "${h.nodeValue.trim()}" + +within: +`,n.innerHTML.trim()),h.replaceWith(this.createSpan(h.nodeValue,e)),[!0,c]):(h.remove(),[u,c]),[!1,!1]);return!a&&!l?(R(`expected at least one HTML element tag inside a component, but the component is empty: +`,n.innerHTML.trim()),this.createSpan("",e).outerHTML):(!a&&l&&R("expected at least one HTML element tag directly inside a component, but only subcomponents were found. A component must render at least one HTML tag directly inside itself.",n.innerHTML.trim()),n.innerHTML)}createSpan(t,e){let r=document.createElement("span");return r.innerText=t,r.setAttribute(G,e),r}},bh=1,Nt=class{static makeID(){return bh++}static elementID(t){return t.phxHookId}constructor(t,e,r){this.__view=t,this.__liveSocket=t.liveSocket,this.__callbacks=r,this.__listeners=new Set,this.__isDisconnected=!1,this.el=e,this.el.phxHookId=this.constructor.makeID();for(let i in this.__callbacks)this[i]=this.__callbacks[i]}__mounted(){this.mounted&&this.mounted()}__updated(){this.updated&&this.updated()}__beforeUpdate(){this.beforeUpdate&&this.beforeUpdate()}__destroyed(){this.destroyed&&this.destroyed()}__reconnected(){this.__isDisconnected&&(this.__isDisconnected=!1,this.reconnected&&this.reconnected())}__disconnected(){this.__isDisconnected=!0,this.disconnected&&this.disconnected()}pushEvent(t,e={},r=function(){}){return this.__view.pushHookEvent(null,t,e,r)}pushEventTo(t,e,r={},i=function(){}){return this.__view.withinTargets(t,(n,s)=>n.pushHookEvent(s,e,r,i))}handleEvent(t,e){let r=(i,n)=>n?t:e(i.detail);return window.addEventListener(`phx:hook:${t}`,r),this.__listeners.add(r),r}removeHandleEvent(t){let e=t(null,!0);window.removeEventListener(`phx:hook:${e}`,t),this.__listeners.delete(t)}upload(t,e){return this.__view.dispatchUploads(t,e)}uploadTo(t,e,r){return this.__view.withinTargets(t,i=>i.dispatchUploads(e,r))}__cleanup__(){this.__listeners.forEach(t=>this.removeHandleEvent(t))}},wi=(t,e={})=>{let r=new FormData(t),i=[];r.forEach((s,o,a)=>{s instanceof File&&i.push(o)}),i.forEach(s=>r.delete(s));let n=new URLSearchParams;for(let[s,o]of r.entries())n.append(s,o);for(let s in e)n.append(s,e[s]);return n.toString()},$o=class{constructor(t,e,r,i){this.liveSocket=e,this.flash=i,this.parent=r,this.root=r?r.root:this,this.el=t,this.id=this.el.id,this.ref=0,this.childJoins=0,this.loaderTimer=null,this.pendingDiffs=[],this.pruningCIDs=[],this.redirect=!1,this.href=null,this.joinCount=this.parent?this.parent.joinCount-1:0,this.joinPending=!0,this.destroyed=!1,this.joinCallback=function(){},this.stopCallback=function(){},this.pendingJoinOps=this.parent?null:[],this.viewHooks={},this.uploaders={},this.formSubmits=[],this.children=this.parent?null:{},this.root.children[this.id]={},this.channel=this.liveSocket.channel(`lv:${this.id}`,()=>({redirect:this.redirect?this.href:void 0,url:this.redirect?void 0:this.href||void 0,params:this.connectParams(),session:this.getSession(),static:this.getStatic(),flash:this.flash})),this.showLoader(this.liveSocket.loaderTimeout),this.bindChannel()}setHref(t){this.href=t}setRedirect(t){this.redirect=!0,this.href=t}isMain(){return this.liveSocket.main===this}connectParams(){let t=this.liveSocket.params(this.el),e=g.all(document,`[${this.binding(_c)}]`).map(r=>r.src||r.href).filter(r=>typeof r=="string");return e.length>0&&(t._track_static=e),t._mounts=this.joinCount,t}isConnected(){return this.channel.canPush()}getSession(){return this.el.getAttribute(Pe)}getStatic(){let t=this.el.getAttribute(It);return t===""?null:t}destroy(t=function(){}){this.destroyAllChildren(),this.destroyed=!0,delete this.root.children[this.id],this.parent&&delete this.root.children[this.parent.id][this.id],clearTimeout(this.loaderTimer);let e=()=>{t();for(let r in this.viewHooks)this.destroyHook(this.viewHooks[r])};g.markPhxChildDestroyed(this.el),this.log("destroyed",()=>["the child has been removed from the parent"]),this.channel.leave().receive("ok",e).receive("error",e).receive("timeout",e)}setContainerClasses(...t){this.el.classList.remove(Eo,cr,ko),this.el.classList.add(...t)}isLoading(){return this.el.classList.contains(cr)}showLoader(t){if(clearTimeout(this.loaderTimer),t)this.loaderTimer=setTimeout(()=>this.showLoader(),t);else{for(let e in this.viewHooks)this.viewHooks[e].__disconnected();this.setContainerClasses(cr)}}hideLoader(){clearTimeout(this.loaderTimer),this.setContainerClasses(Eo)}triggerReconnected(){for(let t in this.viewHooks)this.viewHooks[t].__reconnected()}log(t,e){this.liveSocket.log(this,t,e)}withinTargets(t,e){if(t instanceof HTMLElement)return this.liveSocket.owner(t,r=>e(r,t));if(/^(0|[1-9]\d*)$/.test(t)){let r=g.findComponentNodeList(this.el,t);r.length===0?R(`no component found matching phx-target of ${t}`):e(this,r[0])}else{let r=Array.from(document.querySelectorAll(t));r.length===0&&R(`nothing found matching the phx-target selector "${t}"`),r.forEach(i=>this.liveSocket.owner(i,n=>e(n,i)))}}applyDiff(t,e,r){this.log(t,()=>["",Mt(e)]);let{diff:i,reply:n,events:s,title:o}=qo.extract(e);return o&&g.putTitle(o),r({diff:i,reply:n,events:s}),n}onJoin(t){let{rendered:e,container:r}=t;if(r){let[i,n]=r;this.el=g.replaceRootContainer(this.el,i,n)}this.childJoins=0,this.joinPending=!0,this.flash=null,Me.dropLocal(this.liveSocket.localStorage,window.location.pathname,po),this.applyDiff("mount",e,({diff:i,events:n})=>{this.rendered=new qo(this.id,i);let s=this.renderContainer(null,"join");this.dropPendingRefs();let o=this.formsForRecovery(s);this.joinCount++,o.length>0?o.forEach((a,l)=>{this.pushFormRecovery(a,u=>{l===o.length-1&&this.onJoinComplete(u,s,n)})}):this.onJoinComplete(t,s,n)})}dropPendingRefs(){g.all(this.el,`[${ue}]`,t=>t.removeAttribute(ue))}onJoinComplete({live_patch:t},e,r){if(this.joinCount>1||this.parent&&!this.parent.isJoinPending())return this.applyJoinPatch(t,e,r);g.findPhxChildrenInFragment(e,this.id).filter(n=>{let s=n.id&&this.el.querySelector(`[id="${n.id}"]`),o=s&&s.getAttribute(It);return o&&n.setAttribute(It,o),this.joinChild(n)}).length===0?this.parent?(this.root.pendingJoinOps.push([this,()=>this.applyJoinPatch(t,e,r)]),this.parent.ackJoin(this)):(this.onAllChildJoinsComplete(),this.applyJoinPatch(t,e,r)):this.root.pendingJoinOps.push([this,()=>this.applyJoinPatch(t,e,r)])}attachTrueDocEl(){this.el=g.byId(this.id),this.el.setAttribute(hr,this.root.id)}dispatchEvents(t){t.forEach(([e,r])=>{window.dispatchEvent(new CustomEvent(`phx:hook:${e}`,{detail:r}))})}applyJoinPatch(t,e,r){this.attachTrueDocEl();let i=new yr(this,this.el,this.id,e,null);if(i.markPrunableContentForRemoval(),this.performPatch(i,!1),this.joinNewChildren(),g.all(this.el,`[${this.binding(mr)}], [data-phx-${mr}]`,n=>{let s=this.addHook(n);s&&s.__mounted()}),this.joinPending=!1,this.dispatchEvents(r),this.applyPendingUpdates(),t){let{kind:n,to:s}=t;this.liveSocket.historyPatch(s,n)}this.hideLoader(),this.joinCount>1&&this.triggerReconnected(),this.stopCallback()}triggerBeforeUpdateHook(t,e){this.liveSocket.triggerDOM("onBeforeElUpdated",[t,e]);let r=this.getHook(t),i=r&&g.isIgnored(t,this.binding(fi));if(r&&!t.isEqualNode(e)&&!(i&&Qc(t.dataset,e.dataset)))return r.__beforeUpdate(),r}performPatch(t,e){let r=[],i=!1,n=new Set;return t.after("added",s=>{this.liveSocket.triggerDOM("onNodeAdded",[s]);let o=this.addHook(s);o&&o.__mounted()}),t.after("phxChildAdded",s=>i=!0),t.before("updated",(s,o)=>{this.triggerBeforeUpdateHook(s,o)&&n.add(s.id)}),t.after("updated",s=>{n.has(s.id)&&this.getHook(s).__updated()}),t.after("discarded",s=>{let o=this.componentID(s);typeof o=="number"&&r.indexOf(o)===-1&&r.push(o);let a=this.getHook(s);a&&this.destroyHook(a)}),t.perform(),e&&this.maybePushComponentsDestroyed(r),i}joinNewChildren(){g.findPhxChildren(this.el,this.id).forEach(t=>this.joinChild(t))}getChildById(t){return this.root.children[this.id][t]}getDescendentByEl(t){return t.id===this.id?this:this.children[t.getAttribute(Lt)][t.id]}destroyDescendent(t){for(let e in this.root.children)for(let r in this.root.children[e])if(r===t)return this.root.children[e][r].destroy()}joinChild(t){if(!this.getChildById(t.id)){let r=new $o(t,this.liveSocket,this);return this.root.children[this.id][r.id]=r,r.join(),this.childJoins++,!0}}isJoinPending(){return this.joinPending}ackJoin(t){this.childJoins--,this.childJoins===0&&(this.parent?this.parent.ackJoin(this):this.onAllChildJoinsComplete())}onAllChildJoinsComplete(){this.joinCallback(),this.pendingJoinOps.forEach(([t,e])=>{t.isDestroyed()||e()}),this.pendingJoinOps=[]}update(t,e){if(this.isJoinPending()||this.liveSocket.hasPendingLink())return this.pendingDiffs.push({diff:t,events:e});this.rendered.mergeDiff(t);let r=!1;this.rendered.isComponentOnlyDiff(t)?this.liveSocket.time("component patch complete",()=>{g.findParentCIDs(this.el,this.rendered.componentCIDs(t)).forEach(n=>{this.componentPatch(this.rendered.getComponent(t,n),n)&&(r=!0)})}):_o(t)||this.liveSocket.time("full patch complete",()=>{let i=this.renderContainer(t,"update"),n=new yr(this,this.el,this.id,i,null);r=this.performPatch(n,!0)}),this.dispatchEvents(e),r&&this.joinNewChildren()}renderContainer(t,e){return this.liveSocket.time(`toString diff (${e})`,()=>{let r=this.el.tagName,i=t?this.rendered.componentCIDs(t).concat(this.pruningCIDs):null,n=this.rendered.toString(i);return`<${r}>${n}</${r}>`})}componentPatch(t,e){if(_o(t))return!1;let r=this.rendered.componentToString(e),i=new yr(this,this.el,this.id,r,e);return this.performPatch(i,!0)}getHook(t){return this.viewHooks[Nt.elementID(t)]}addHook(t){if(Nt.elementID(t)||!t.getAttribute)return;let e=t.getAttribute(`data-phx-${mr}`)||t.getAttribute(this.binding(mr));if(e&&!this.ownsElement(t))return;let r=this.liveSocket.getHookCallbacks(e);if(r){t.id||R(`no DOM ID for hook "${e}". Hooks require a unique ID on each element.`,t);let i=new Nt(this,t,r);return this.viewHooks[Nt.elementID(i.el)]=i,i}else e!==null&&R(`unknown hook found for "${e}"`,t)}destroyHook(t){t.__destroyed(),t.__cleanup__(),delete this.viewHooks[Nt.elementID(t.el)]}applyPendingUpdates(){this.pendingDiffs.forEach(({diff:t,events:e})=>this.update(t,e)),this.pendingDiffs=[]}onChannel(t,e){this.liveSocket.onChannel(this.channel,t,r=>{this.isJoinPending()?this.root.pendingJoinOps.push([this,()=>e(r)]):e(r)})}bindChannel(){this.liveSocket.onChannel(this.channel,"diff",t=>{this.applyDiff("update",t,({diff:e,events:r})=>this.update(e,r))}),this.onChannel("redirect",({to:t,flash:e})=>this.onRedirect({to:t,flash:e})),this.onChannel("live_patch",t=>this.onLivePatch(t)),this.onChannel("live_redirect",t=>this.onLiveRedirect(t)),this.channel.onError(t=>this.onError(t)),this.channel.onClose(t=>this.onClose(t))}destroyAllChildren(){for(let t in this.root.children[this.id])this.getChildById(t).destroy()}onLiveRedirect(t){let{to:e,kind:r,flash:i}=t,n=this.expandURL(e);this.liveSocket.historyRedirect(n,r,i)}onLivePatch(t){let{to:e,kind:r}=t;this.href=this.expandURL(e),this.liveSocket.historyPatch(e,r)}expandURL(t){return t.startsWith("/")?`${window.location.protocol}//${window.location.host}${t}`:t}onRedirect({to:t,flash:e}){this.liveSocket.redirect(t,e)}isDestroyed(){return this.destroyed}join(t){this.parent||(this.stopCallback=this.liveSocket.withPageLoading({to:this.href,kind:"initial"})),this.joinCallback=()=>t&&t(this.joinCount),this.liveSocket.wrapPush(this,{timeout:!1},()=>this.channel.join().receive("ok",e=>!this.isDestroyed()&&this.onJoin(e)).receive("error",e=>!this.isDestroyed()&&this.onJoinError(e)).receive("timeout",()=>!this.isDestroyed()&&this.onJoinError({reason:"timeout"})))}onJoinError(t){return t.reason==="unauthorized"||t.reason==="stale"?(this.log("error",()=>["unauthorized live_redirect. Falling back to page request",t]),this.onRedirect({to:this.href})):((t.redirect||t.live_redirect)&&(this.joinPending=!1,this.channel.leave()),t.redirect?this.onRedirect(t.redirect):t.live_redirect?this.onLiveRedirect(t.live_redirect):(this.log("error",()=>["unable to join",t]),this.liveSocket.reloadWithJitter(this)))}onClose(t){if(!this.isDestroyed()){if(this.isJoinPending()&&document.visibilityState!=="hidden"||this.liveSocket.hasPendingLink()&&t!=="leave")return this.liveSocket.reloadWithJitter(this);this.destroyAllChildren(),this.liveSocket.dropActiveElement(this),document.activeElement&&document.activeElement.blur(),this.liveSocket.isUnloaded()&&this.showLoader(zc)}}onError(t){this.onClose(t),this.log("error",()=>["view crashed",t]),this.liveSocket.isUnloaded()||this.displayError()}displayError(){this.isMain()&&g.dispatchEvent(window,"phx:page-loading-start",{to:this.href,kind:"error"}),this.showLoader(),this.setContainerClasses(cr,ko)}pushWithReply(t,e,r,i=function(){}){if(!this.isConnected())return;let[n,[s]]=t?t():[null,[]],o=function(){};return s&&s.getAttribute(this.binding(So))!==null&&(o=this.liveSocket.withPageLoading({kind:"element",target:s})),typeof r.cid!="number"&&delete r.cid,this.liveSocket.wrapPush(this,{timeout:!0},()=>this.channel.push(e,r,Jc).receive("ok",a=>{let l=null;n!==null&&this.undoRefs(n),a.diff&&(l=this.applyDiff("update",a.diff,({diff:u,events:c})=>{this.update(u,c)})),a.redirect&&this.onRedirect(a.redirect),a.live_patch&&this.onLivePatch(a.live_patch),a.live_redirect&&this.onLiveRedirect(a.live_redirect),o(),i(a,l)}))}undoRefs(t){g.all(this.el,`[${ue}="${t}"]`,e=>{let r=e.getAttribute(dr);e.removeAttribute(ue),e.getAttribute(hi)!==null&&(e.readOnly=!1,e.removeAttribute(hi)),r!==null&&(e.disabled=r==="true",e.removeAttribute(dr)),vo.forEach(s=>g.removeClass(e,s));let i=e.getAttribute(fr);i!==null&&(e.innerText=i,e.removeAttribute(fr));let n=g.private(e,ue);if(n){let s=this.triggerBeforeUpdateHook(e,n);yr.patchEl(e,n,this.liveSocket.getActiveElement()),s&&s.__updated(),g.deletePrivate(e,ue)}})}putRef(t,e){let r=this.ref++,i=this.binding(di);return t.forEach(n=>{n.classList.add(`phx-${e}-loading`),n.setAttribute(ue,r);let s=n.getAttribute(i);s!==null&&(n.getAttribute(fr)||n.setAttribute(fr,n.innerText),n.innerText=s)}),[r,t]}componentID(t){let e=t.getAttribute&&t.getAttribute(G);return e?parseInt(e):null}targetComponentID(t,e){return t.getAttribute(this.binding("target"))?this.closestComponentID(e):null}closestComponentID(t){return t?ye(t.closest(`[${G}]`),e=>this.ownsElement(e)&&this.componentID(e)):null}pushHookEvent(t,e,r,i){if(!this.isConnected())return this.log("hook",()=>["unable to push hook event. LiveView not connected",e,r]),!1;let[n,s]=this.putRef([],"hook");return this.pushWithReply(()=>[n,s],"event",{type:"hook",event:e,value:r,cid:this.closestComponentID(t)},(o,a)=>i(a,n)),n}extractMeta(t,e){let r=this.binding("value-");for(let i=0;i<t.attributes.length;i++){let n=t.attributes[i].name;n.startsWith(r)&&(e[n.replace(r,"")]=t.getAttribute(n))}return t.value!==void 0&&(e.value=t.value,t.tagName==="INPUT"&&Lo.indexOf(t.type)>=0&&!t.checked&&delete e.value),e}pushEvent(t,e,r,i,n){this.pushWithReply(()=>this.putRef([e],t),"event",{type:t,event:i,value:this.extractMeta(e,n),cid:this.targetComponentID(e,r)})}pushKey(t,e,r,i,n){this.pushWithReply(()=>this.putRef([t],r),"event",{type:r,event:i,value:this.extractMeta(t,n),cid:this.targetComponentID(t,e)})}pushFileProgress(t,e,r,i=function(){}){this.liveSocket.withinOwners(t.form,(n,s)=>{n.pushWithReply(null,"progress",{event:t.getAttribute(n.binding($c)),ref:t.getAttribute(je),entry_ref:e,progress:r,cid:n.targetComponentID(t.form,s)},i)})}pushInput(t,e,r,i,n){let s,o=this.targetComponentID(t.form,e),a=()=>this.putRef([t,t.form],"change"),l=wi(t.form,{_target:i.name});t.files&&t.files.length>0&&D.trackFiles(t,Array.from(t.files)),s=D.serializeUploads(t);let u={type:"form",event:r,value:l,uploads:s,cid:o};this.pushWithReply(a,"event",u,c=>{if(g.showError(t,this.liveSocket.binding(Oo)),g.isUploadInput(t)&&t.getAttribute("data-phx-auto-upload")!==null){if(D.filesAwaitingPreflight(t).length>0){let[h,d]=a();this.uploadFiles(t.form,e,h,o,m=>{n&&n(c),this.triggerAwaitingSubmit(t.form)})}}else n&&n(c)})}triggerAwaitingSubmit(t){let e=this.getScheduledSubmit(t);if(e){let[r,i,n]=e;this.cancelSubmit(t),n()}}getScheduledSubmit(t){return this.formSubmits.find(([e,r])=>e.isSameNode(t))}scheduleSubmit(t,e,r){if(this.getScheduledSubmit(t))return!0;this.formSubmits.push([t,e,r])}cancelSubmit(t){this.formSubmits=this.formSubmits.filter(([e,r,i])=>e.isSameNode(t)?(this.undoRefs(r),!1):!0)}pushFormSubmit(t,e,r,i){let n=c=>!(Rt(c,`${this.binding(fi)}=ignore`,c.form)||Rt(c,"data-phx-update=ignore",c.form)),s=c=>c.hasAttribute(this.binding(di)),o=c=>c.tagName=="BUTTON",a=c=>["INPUT","TEXTAREA","SELECT"].includes(c.tagName),l=()=>{let c=Array.from(t.elements),h=c.filter(s),d=c.filter(o).filter(n),m=c.filter(a).filter(n);return d.forEach(p=>{p.setAttribute(dr,p.disabled),p.disabled=!0}),m.forEach(p=>{p.setAttribute(hi,p.readOnly),p.readOnly=!0,p.files&&(p.setAttribute(dr,p.disabled),p.disabled=!0)}),t.setAttribute(this.binding(So),""),this.putRef([t].concat(h).concat(d).concat(m),"submit")},u=this.targetComponentID(t,e);if(D.hasUploadsInProgress(t)){let[c,h]=l();return this.scheduleSubmit(t,c,()=>this.pushFormSubmit(t,e,r,i))}else if(D.inputsAwaitingPreflight(t).length>0){let[c,h]=l(),d=()=>[c,h];this.uploadFiles(t,e,c,u,m=>{let p=wi(t,{});this.pushWithReply(d,"event",{type:"form",event:r,value:p,cid:u},i)})}else{let c=wi(t);this.pushWithReply(l,"event",{type:"form",event:r,value:c,cid:u},i)}}uploadFiles(t,e,r,i,n){let s=this.joinCount,o=D.activeFileInputs(t),a=o.length;o.forEach(l=>{let u=new D(l,this,()=>{a--,a===0&&n()});this.uploaders[l]=u;let c=u.entries().map(d=>d.toPreflightPayload()),h={ref:l.getAttribute(je),entries:c,cid:this.targetComponentID(l.form,e)};this.log("upload",()=>["sending preflight request",h]),this.pushWithReply(null,"allow_upload",h,d=>{if(this.log("upload",()=>["got preflight response",d]),d.error){this.undoRefs(r);let[m,p]=d.error;this.log("upload",()=>[`error for entry ${m}`,p])}else{let m=p=>{this.channel.onError(()=>{this.joinCount===s&&p()})};u.initAdapterUpload(d,m,this.liveSocket)}})})}dispatchUploads(t,e){let r=g.findUploadInputs(this.el).filter(i=>i.name===t);r.length===0?R(`no live file inputs found matching the name "${t}"`):r.length>1?R(`duplicate live file inputs found matching the name "${t}"`):g.dispatchEvent(r[0],yo,{files:e})}pushFormRecovery(t,e){this.liveSocket.withinOwners(t,(r,i)=>{let n=t.elements[0],s=t.getAttribute(this.binding(Po))||t.getAttribute(this.binding("change"));r.pushInput(n,i,s,n,e)})}pushLinkPatch(t,e,r){let i=this.liveSocket.setPendingLink(t),n=e?()=>this.putRef([e],"click"):null;this.pushWithReply(n,"live_patch",{url:t},s=>{s.link_redirect?this.liveSocket.replaceMain(t,null,r,i):(this.liveSocket.commitPendingLink(i)&&(this.href=t),this.applyPendingUpdates(),r&&r(i))}).receive("timeout",()=>this.liveSocket.redirect(window.location.href))}formsForRecovery(t){if(this.joinCount===0)return[];let e=this.binding("change"),r=document.createElement("template");return r.innerHTML=t,g.all(this.el,`form[${e}]`).filter(i=>this.ownsElement(i)).filter(i=>i.elements.length>0).filter(i=>i.getAttribute(this.binding(Po))!=="ignore").filter(i=>r.content.querySelector(`form[${e}="${i.getAttribute(e)}"]`))}maybePushComponentsDestroyed(t){let e=t.filter(r=>g.findComponentNodeList(this.el,r).length===0);e.length>0&&(this.pruningCIDs.push(...e),this.pushWithReply(null,"cids_will_destroy",{cids:e},()=>{this.pruningCIDs=this.pruningCIDs.filter(i=>e.indexOf(i)!==-1);let r=e.filter(i=>g.findComponentNodeList(this.el,i).length===0);r.length>0&&this.pushWithReply(null,"cids_destroyed",{cids:r},i=>{this.rendered.pruneCIDs(i.cids)})}))}ownsElement(t){return t.getAttribute(Lt)===this.id||ye(t.closest(lt),e=>e.id)===this.id}submitForm(t,e,r){g.putPrivate(t,Io,!0),this.liveSocket.blurActiveElement(this),this.pushFormSubmit(t,e,r,()=>{this.liveSocket.restorePreviouslyActiveFocus()})}binding(t){return this.liveSocket.binding(t)}},Wo=class{constructor(t,e,r={}){if(this.unloaded=!1,!e||e.constructor.name==="Object")throw new Error(` + a phoenix Socket must be provided as the second argument to the LiveSocket constructor. For example: + + import {Socket} from "phoenix" + import LiveSocket from "phoenix_live_view" + let liveSocket = new LiveSocket("/live", Socket, {...}) + `);this.socket=new e(t,r),this.bindingPrefix=r.bindingPrefix||Zc,this.opts=r,this.params=vi(r.params||{}),this.viewLogger=r.viewLogger,this.metadataCallbacks=r.metadata||{},this.defaults=Object.assign(Mt(Kc),r.defaults||{}),this.activeElement=null,this.prevActive=null,this.silenced=!1,this.main=null,this.linkRef=1,this.roots={},this.href=window.location.href,this.pendingLink=null,this.currentLocation=Mt(window.location),this.hooks=r.hooks||{},this.uploaders=r.uploaders||{},this.loaderTimeout=r.loaderTimeout||Wc,this.localStorage=r.localStorage||window.localStorage,this.sessionStorage=r.sessionStorage||window.sessionStorage,this.boundTopLevelEvents=!1,this.domCallbacks=Object.assign({onNodeAdded:vi(),onBeforeElUpdated:vi()},r.dom||{}),window.addEventListener("pagehide",i=>{this.unloaded=!0}),this.socket.onOpen(()=>{this.isUnloaded()&&window.location.reload()})}isProfileEnabled(){return this.sessionStorage.getItem(pi)==="true"}isDebugEnabled(){return this.sessionStorage.getItem(mi)==="true"}enableDebug(){this.sessionStorage.setItem(mi,"true")}enableProfiling(){this.sessionStorage.setItem(pi,"true")}disableDebug(){this.sessionStorage.removeItem(mi)}disableProfiling(){this.sessionStorage.removeItem(pi)}enableLatencySim(t){this.enableDebug(),console.log("latency simulator enabled for the duration of this browser session. Call disableLatencySim() to disable"),this.sessionStorage.setItem(gi,t)}disableLatencySim(){this.sessionStorage.removeItem(gi)}getLatencySim(){let t=this.sessionStorage.getItem(gi);return t?parseInt(t):null}getSocket(){return this.socket}connect(){let t=()=>{this.joinRootViews()&&(this.bindTopLevelEvents(),this.socket.connect())};["complete","loaded","interactive"].indexOf(document.readyState)>=0?t():document.addEventListener("DOMContentLoaded",()=>t())}disconnect(t){this.socket.disconnect(t)}triggerDOM(t,e){this.domCallbacks[t](...e)}time(t,e){if(!this.isProfileEnabled()||!console.time)return e();console.time(t);let r=e();return console.timeEnd(t),r}log(t,e,r){if(this.viewLogger){let[i,n]=r();this.viewLogger(t,e,i,n)}else if(this.isDebugEnabled()){let[i,n]=r();Xc(t,e,i,n)}}onChannel(t,e,r){t.on(e,i=>{let n=this.getLatencySim();n?(console.log(`simulating ${n}ms of latency from server to client`),setTimeout(()=>r(i),n)):r(i)})}wrapPush(t,e,r){let i=this.getLatencySim(),n=t.joinCount;if(!i)return e.timeout?r().receive("timeout",()=>{t.joinCount===n&&!t.isDestroyed()&&this.reloadWithJitter(t,()=>{this.log(t,"timeout",()=>["received timeout while communicating with server. Falling back to hard refresh for recovery"])})}):r();console.log(`simulating ${i}ms of latency from client to server`);let s={receives:[],receive(o,a){this.receives.push([o,a])}};return setTimeout(()=>{t.isDestroyed()||s.receives.reduce((o,[a,l])=>o.receive(a,l),r())},i),s}reloadWithJitter(t,e){t.destroy(),this.disconnect();let[r,i]=xc,n=Math.floor(Math.random()*(i-r+1))+r,s=Me.updateLocal(this.localStorage,window.location.pathname,po,0,o=>o+1);e?e():this.log(t,"join",()=>[`encountered ${s} consecutive reloads`]),s>go&&(this.log(t,"join",()=>[`exceeded ${go} consecutive reloads. Entering failsafe mode`]),n=Nc),setTimeout(()=>{this.hasPendingLink()?window.location=this.pendingLink:window.location.reload()},n)}getHookCallbacks(t){return t&&t.startsWith("Phoenix.")?ih[t.split(".")[1]]:this.hooks[t]}isUnloaded(){return this.unloaded}isConnected(){return this.socket.isConnected()}getBindingPrefix(){return this.bindingPrefix}binding(t){return`${this.getBindingPrefix()}${t}`}channel(t,e){return this.socket.channel(t,e)}joinRootViews(){let t=!1;return g.all(document,`${lt}:not([${Lt}])`,e=>{if(!this.getRootById(e.id)){let r=this.newRootView(e);r.setHref(this.getHref()),r.join(),e.getAttribute(Ao)&&(this.main=r)}t=!0}),t}redirect(t,e){this.disconnect(),Me.redirect(t,e)}replaceMain(t,e,r=null,i=this.setPendingLink(t)){let n=this.main.el,s=g.cloneNode(n,"");this.main.showLoader(this.loaderTimeout),this.main.destroy(),this.main=this.newRootView(s,e),this.main.setRedirect(t),this.main.join(o=>{o===1&&this.commitPendingLink(i)&&(n.replaceWith(s),r&&r())})}isPhxView(t){return t.getAttribute&&t.getAttribute(Pe)!==null}newRootView(t,e){let r=new $o(t,this,null,e);return this.roots[r.id]=r,r}owner(t,e){let r=ye(t.closest(lt),i=>this.getViewByEl(i));r&&e(r)}withinOwners(t,e){this.owner(t,r=>{let i=t.getAttribute(this.binding("target"));i===null?e(r,t):r.withinTargets(i,e)})}getViewByEl(t){let e=t.getAttribute(hr);return ye(this.getRootById(e),r=>r.getDescendentByEl(t))}getRootById(t){return this.roots[t]}destroyAllViews(){for(let t in this.roots)this.roots[t].destroy(),delete this.roots[t]}destroyViewByEl(t){let e=this.getRootById(t.getAttribute(hr));e&&e.destroyDescendent(t.id)}setActiveElement(t){if(this.activeElement===t)return;this.activeElement=t;let e=()=>{t===this.activeElement&&(this.activeElement=null),t.removeEventListener("mouseup",this),t.removeEventListener("touchend",this)};t.addEventListener("mouseup",e),t.addEventListener("touchend",e)}getActiveElement(){return document.activeElement===document.body?this.activeElement||document.activeElement:document.activeElement||document.body}dropActiveElement(t){this.prevActive&&t.ownsElement(this.prevActive)&&(this.prevActive=null)}restorePreviouslyActiveFocus(){this.prevActive&&this.prevActive!==document.body&&this.prevActive.focus()}blurActiveElement(){this.prevActive=this.getActiveElement(),this.prevActive!==document.body&&this.prevActive.blur()}bindTopLevelEvents(){this.boundTopLevelEvents||(this.boundTopLevelEvents=!0,document.body.addEventListener("click",function(){}),window.addEventListener("pageshow",t=>{t.persisted&&(this.getSocket().disconnect(),this.withPageLoading({to:window.location.href,kind:"redirect"}),window.location.reload())},!0),this.bindNav(),this.bindClicks(),this.bindForms(),this.bind({keyup:"keyup",keydown:"keydown"},(t,e,r,i,n,s,o)=>{let a=i.getAttribute(this.binding(qc)),l=t.key&&t.key.toLowerCase();a&&a.toLowerCase()!==l||r.pushKey(i,n,e,s,{key:t.key,...this.eventMeta(e,t,i)})}),this.bind({blur:"focusout",focus:"focusin"},(t,e,r,i,n,s,o)=>{o||r.pushEvent(e,i,n,s,this.eventMeta(e,t,i))}),this.bind({blur:"blur",focus:"focus"},(t,e,r,i,n,s,o)=>{o&&!o!=="window"&&r.pushEvent(e,i,n,s,this.eventMeta(e,t,i))}),window.addEventListener("dragover",t=>t.preventDefault()),window.addEventListener("drop",t=>{t.preventDefault();let e=ye(Rt(t.target,this.binding(bo)),n=>n.getAttribute(this.binding(bo))),r=e&&document.getElementById(e),i=Array.from(t.dataTransfer.files||[]);!r||r.disabled||i.length===0||!(r.files instanceof FileList)||(D.trackFiles(r,i),r.dispatchEvent(new Event("input",{bubbles:!0})))}),this.on(yo,t=>{let e=t.target;if(!g.isUploadInput(e))return;let r=Array.from(t.detail.files||[]).filter(i=>i instanceof File||i instanceof Blob);D.trackFiles(e,r),e.dispatchEvent(new Event("input",{bubbles:!0}))}))}eventMeta(t,e,r){let i=this.metadataCallbacks[t];return i?i(e,r):{}}setPendingLink(t){return this.linkRef++,this.pendingLink=t,this.linkRef}commitPendingLink(t){return this.linkRef!==t?!1:(this.href=this.pendingLink,this.pendingLink=null,!0)}getHref(){return this.href}hasPendingLink(){return!!this.pendingLink}bind(t,e){for(let r in t){let i=t[r];this.on(i,n=>{let s=this.binding(r),o=this.binding(`window-${r}`),a=n.target.getAttribute&&n.target.getAttribute(s);a?this.debounce(n.target,n,()=>{this.withinOwners(n.target,(l,u)=>{e(n,r,l,n.target,u,a,null)})}):g.all(document,`[${o}]`,l=>{let u=l.getAttribute(o);this.debounce(l,n,()=>{this.withinOwners(l,(c,h)=>{e(n,r,c,l,h,u,"window")})})})})}}bindClicks(){this.bindClick("click","click",!1),this.bindClick("mousedown","capture-click",!0)}bindClick(t,e,r){let i=this.binding(e);window.addEventListener(t,n=>{if(!this.isConnected())return;let s=null;r?s=n.target.matches(`[${i}]`)?n.target:n.target.querySelector(`[${i}]`):s=Rt(n.target,i);let o=s&&s.getAttribute(i);!o||(s.getAttribute("href")==="#"&&n.preventDefault(),this.debounce(s,n,()=>{this.withinOwners(s,(a,l)=>{a.pushEvent("click",s,l,o,this.eventMeta("click",n,s))})}))},r)}bindNav(){if(!Me.canPushState())return;history.scrollRestoration&&(history.scrollRestoration="manual");let t=null;window.addEventListener("scroll",e=>{clearTimeout(t),t=setTimeout(()=>{Me.updateCurrentState(r=>Object.assign(r,{scroll:window.scrollY}))},100)}),window.addEventListener("popstate",e=>{if(!this.registerNewLocation(window.location))return;let{type:r,id:i,root:n,scroll:s}=e.state||{},o=window.location.href;this.main.isConnected()&&r==="patch"&&i===this.main.id?this.main.pushLinkPatch(o,null):this.replaceMain(o,null,()=>{n&&this.replaceRootHistory(),typeof s=="number"&&setTimeout(()=>{window.scrollTo(0,s)},0)})},!1),window.addEventListener("click",e=>{let r=Rt(e.target,oi),i=r&&r.getAttribute(oi),n=e.metaKey||e.ctrlKey||e.button===1;if(!i||!this.isConnected()||!this.main||n)return;let s=r.href,o=r.getAttribute(Fc);if(e.preventDefault(),this.pendingLink!==s)if(i==="patch")this.pushHistoryPatch(s,o,r);else if(i==="redirect")this.historyRedirect(s,o);else throw new Error(`expected ${oi} to be "patch" or "redirect", got: ${i}`)},!1)}withPageLoading(t,e){g.dispatchEvent(window,"phx:page-loading-start",t);let r=()=>g.dispatchEvent(window,"phx:page-loading-stop",t);return e?e(r):r}pushHistoryPatch(t,e,r){this.withPageLoading({to:t,kind:"patch"},i=>{this.main.pushLinkPatch(t,r,n=>{this.historyPatch(t,e,n),i()})})}historyPatch(t,e,r=this.setPendingLink(t)){!this.commitPendingLink(r)||(Me.pushState(e,{type:"patch",id:this.main.id},t),this.registerNewLocation(window.location))}historyRedirect(t,e,r){let i=window.scrollY;this.withPageLoading({to:t,kind:"redirect"},n=>{this.replaceMain(t,r,()=>{Me.pushState(e,{type:"redirect",id:this.main.id,scroll:i},t),this.registerNewLocation(window.location),n()})})}replaceRootHistory(){Me.pushState("replace",{root:!0,type:"patch",id:this.main.id})}registerNewLocation(t){let{pathname:e,search:r}=this.currentLocation;return e+r===t.pathname+t.search?!1:(this.currentLocation=Mt(t),!0)}bindForms(){let t=0;this.on("submit",e=>{let r=e.target.getAttribute(this.binding("submit"));!r||(e.preventDefault(),e.target.disabled=!0,this.withinOwners(e.target,(i,n)=>i.submitForm(e.target,n,r)))},!1);for(let e of["change","input"])this.on(e,r=>{let i=r.target,n=i.form&&i.form.getAttribute(this.binding("change"));if(!n||i.type==="number"&&i.validity&&i.validity.badInput)return;let s=t;t++;let{at:o,type:a}=g.private(i,"prev-iteration")||{};o===s-1&&e!==a||(g.putPrivate(i,"prev-iteration",{at:s,type:e}),this.debounce(i,r,()=>{this.withinOwners(i.form,(l,u)=>{g.putPrivate(i,Co,!0),g.isTextualInput(i)||this.setActiveElement(i),l.pushInput(i,u,n,r.target)})}))},!1)}debounce(t,e,r){let i=this.binding(jc),n=this.binding(Uc),s=this.defaults.debounce.toString(),o=this.defaults.throttle.toString();g.debounce(t,e,i,s,n,o,r)}silenceEvents(t){this.silenced=!0,t(),this.silenced=!1}on(t,e){window.addEventListener(t,r=>{this.silenced||e(r)})}};var Si=ki(ii()),wh=Rr.start();wh.load(co);var Ei={};Ei.AutoFocus={mounted(){this.el.focus()}};Ei.NaiveDateTimeUTC={mounted(){var t=Intl.DateTimeFormat().resolvedOptions(),e=document.body.dataset.tz||t.timeZone||"UTC",r=document.body.dataset.locale||t.locale||"en",i=Si.DateTime[this.el.dataset.timeFormat],n=Si.DateTime.fromISO(this.el.dateTime,{zone:"utc"}).setZone(e).setLocale(r);this.el.innerText=n.toLocaleString(i)}};var Sh=document.querySelector("meta[name='csrf-token']").getAttribute("content"),Eh=new Wo("/live",mo,{hooks:Ei,params:{_csrf_token:Sh}});Eh.connect();})(); diff --git a/priv/static/assets/site.js.br b/priv/static/assets/site.js.br Binary files differindex c4fc486..0ef0117 100644 --- a/priv/static/assets/site.js.br +++ b/priv/static/assets/site.js.br diff --git a/priv/static/assets/site.js.gz b/priv/static/assets/site.js.gz Binary files differindex ef81dcf..5e0bb00 100644 --- a/priv/static/assets/site.js.gz +++ b/priv/static/assets/site.js.gz |